export class SSMClientService extends Effect.Service()("SSMClientService", {
effect: Effect.gen(function* () {
const region = yield* Config.string("AWS_REGION");
/**
* Retrieves a parameter from SSM Parameter Store with optional decryption.
*/
const getParameter = (
Name: string,
WithDecryption: boolean = false,
) =>
Effect.gen(function* () {
const ssmClient = new SSMClient({ region });
const command = new GetParameterCommand({ Name, WithDecryption });
const parameter$ = yield* Effect.tryPromise({
try: async () => {
const response = await ssmClient.send(command);
return response.Parameter?.Value;
},
catch: (e) =>
new SSMClientError(`Failed to fetch Parameter ${Name}`, {
cause: e,
}),
});
return parameter$;
}).pipe(Effect.either);
return { getParameter };
}),
}) {}
export class SSMClientService extends Effect.Service()("SSMClientService", {
effect: Effect.gen(function* () {
const region = yield* Config.string("AWS_REGION");
/**
* Retrieves a parameter from SSM Parameter Store with optional decryption.
*/
const getParameter = (
Name: string,
WithDecryption: boolean = false,
) =>
Effect.gen(function* () {
const ssmClient = new SSMClient({ region });
const command = new GetParameterCommand({ Name, WithDecryption });
const parameter$ = yield* Effect.tryPromise({
try: async () => {
const response = await ssmClient.send(command);
return response.Parameter?.Value;
},
catch: (e) =>
new SSMClientError(`Failed to fetch Parameter ${Name}`, {
cause: e,
}),
});
return parameter$;
}).pipe(Effect.either);
return { getParameter };
}),
}) {}