import { SecretsManager } from '@aws-sdk/client-secrets-manager' import { Secret, Response } from './types' // eslint-disable-next-line max-len export function GetAWSSecret(awsSecretName: string, regionName?: string): Promise { return new Promise((resolve, reject) => { let region = regionName if (!regionName) { region = 'ap-southeast-2' } const endpoint = `https://secretsmanager.${region}.amazonaws.com` const secretName = awsSecretName let secret: Secret const response: Response = { success: false, } // Create a Secrets Manager client const client = new SecretsManager({ endpoint, region, }) // eslint-disable-next-line no-promise-executor-return return client.getSecretValue({ SecretId: secretName }, (err:any, data:any) => { if (err) { if (err.code === 'ResourceNotFoundException') { console.error(`The requested secret ${secretName} was not found`) } return reject(err) } // Decrypted secret using the associated KMS CMK // Depending on whether the secret was a string or binary // one of these fields will be populated if (data.SecretString !== '') { secret = JSON.parse(data.SecretString) response.secret = secret response.user = secret.username response.database = secret.dbname resolve(secret) } delete response.username delete response.engine delete response.dbname delete response.dbInstanceIdentifier response.success = true return resolve(response) }) }) }