import { SSMClient, GetParameterCommand } from '@aws-sdk/client-ssm'; import { logger } from 'web-shared/src/logger'; const ssm = new SSMClient( !process.env.LAMBDA_TASK_ROOT ? { region: 'ap-southeast-2', profile: 'dev' } : { region: 'ap-southeast-2' }, ); const parameterCache: Record = {}; export const getParameter = async ( parameterName: string, decrypt?: boolean, ): Promise => { try { if (parameterCache[parameterName]) { return parameterCache[parameterName]; } const result = await ssm.send( new GetParameterCommand({ Name: parameterName, WithDecryption: decrypt, }), ); parameterCache[parameterName] = result.Parameter?.Value || ''; return parameterCache[parameterName]; } catch (err) { logger.error( { err, parameter: parameterName }, 'Failed to fetch parameter', ); throw new Error('Failed to fetch parameter'); } };