{"version":3,"sources":["../../src/index.ts","../../src/secretsManager.ts","../../src/utils.ts"],"sourcesContent":["export { SecretsManager } from \"./secretsManager\";\n\nexport { type SecretsManagerOptions } from \"./types\";\n\nexport { getClient } from \"./utils\";\n","import {\n CreateSecretCommand,\n GetSecretValueCommand,\n SecretsManagerClient,\n UpdateSecretCommand,\n} from \"@aws-sdk/client-secrets-manager\";\n\nimport { Environment, isObject, isString } from \"@abacus/common\";\n\nimport { SecretsManagerOptions } from \"./types\";\n\nexport class SecretsManager {\n client: SecretsManagerClient;\n environment: Environment;\n forceRemote: boolean;\n localToRemoteNames?: Record;\n serviceName: string;\n\n constructor({\n client,\n environment,\n forceRemote,\n localToRemoteNames,\n serviceName,\n }: SecretsManagerOptions) {\n this.client = client;\n this.environment = environment;\n this.forceRemote = forceRemote ?? false;\n this.localToRemoteNames = localToRemoteNames;\n this.serviceName = serviceName;\n }\n\n async getCred(\n envVar: string,\n ): Promise {\n if (\n !this.forceRemote &&\n (this.environment == Environment.Dev ||\n this.environment == Environment.Test)\n ) {\n return this.tryParseJson(process.env[envVar] ?? \"undefined\");\n }\n\n envVar = this.localToRemoteNames?.[envVar] ?? envVar;\n const secretName = `${this.environment}/${this.serviceName}/${envVar}`;\n const secret = await this.getSecret(secretName);\n\n if (isString(secret)) {\n return secret;\n }\n\n if (isObject(secret) && secretName in secret) {\n return (secret as Record)[secretName];\n }\n\n return secret;\n }\n\n async getSecret(\n secretName: string,\n ): Promise {\n const response = await this.client.send(\n new GetSecretValueCommand({\n SecretId: secretName,\n }),\n );\n\n if (response.SecretString) {\n return this.tryParseJson(response.SecretString);\n }\n\n if (response.SecretBinary) {\n return response.SecretBinary;\n }\n\n return undefined;\n }\n\n async storeCred(key: string, secret: unknown): Promise {\n if (\n this.environment == Environment.Dev ||\n this.environment == Environment.Test\n ) {\n process.env[key] = JSON.stringify(secret);\n }\n\n const secretName = `${this.environment}/${this.serviceName}/${key}`;\n const secretStr = JSON.stringify(secret);\n await this.client.send(\n new CreateSecretCommand({\n Name: secretName,\n SecretString: secretStr,\n }),\n );\n }\n\n async updateSecret(key: string, secret: unknown): Promise {\n if (this.environment == Environment.Test) {\n process.env[key] = JSON.stringify(secret);\n return;\n }\n\n const secretName = `${this.environment}/${this.serviceName}/${key}`;\n await this.client.send(\n new UpdateSecretCommand({\n SecretId: secretName,\n SecretString: \"\" + secret,\n }),\n );\n }\n\n private tryParseJson(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch (_) {\n // pass\n }\n return value;\n }\n}\n","import {\n SecretsManagerClient,\n SecretsManagerClientConfig,\n} from \"@aws-sdk/client-secrets-manager\";\n\nexport function getClient(\n opts: SecretsManagerClientConfig,\n): SecretsManagerClient {\n return new SecretsManagerClient(opts);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,cAAAC,IAAA,eAAAC,EAAAJ,GCAA,IAAAK,EAKO,2CAEPC,EAAgD,0BAInCC,EAAN,KAAqB,CAC1B,OACA,YACA,YACA,mBACA,YAEA,YAAY,CACV,OAAAC,EACA,YAAAC,EACA,YAAAC,EACA,mBAAAC,EACA,YAAAC,CACF,EAA0B,CACxB,KAAK,OAASJ,EACd,KAAK,YAAcC,EACnB,KAAK,YAAcC,GAAe,GAClC,KAAK,mBAAqBC,EAC1B,KAAK,YAAcC,CACrB,CAEA,MAAM,QACJC,EACoD,CACpD,GACE,CAAC,KAAK,cACL,KAAK,aAAe,cAAY,KAC/B,KAAK,aAAe,cAAY,MAElC,OAAO,KAAK,aAAa,QAAQ,IAAIA,CAAM,GAAK,WAAW,EAG7DA,EAAS,KAAK,qBAAqBA,CAAM,GAAKA,EAC9C,IAAMC,EAAa,GAAG,KAAK,WAAW,IAAI,KAAK,WAAW,IAAID,CAAM,GAC9DE,EAAS,MAAM,KAAK,UAAUD,CAAU,EAE9C,SAAI,YAASC,CAAM,EACVA,KAGL,YAASA,CAAM,GAAKD,KAAcC,EAC5BA,EAAkCD,CAAU,EAG/CC,CACT,CAEA,MAAM,UACJD,EACoD,CACpD,IAAME,EAAW,MAAM,KAAK,OAAO,KACjC,IAAI,wBAAsB,CACxB,SAAUF,CACZ,CAAC,CACH,EAEA,GAAIE,EAAS,aACX,OAAO,KAAK,aAAaA,EAAS,YAAY,EAGhD,GAAIA,EAAS,aACX,OAAOA,EAAS,YAIpB,CAEA,MAAM,UAAUC,EAAaF,EAAgC,EAEzD,KAAK,aAAe,cAAY,KAChC,KAAK,aAAe,cAAY,QAEhC,QAAQ,IAAIE,CAAG,EAAI,KAAK,UAAUF,CAAM,GAG1C,IAAMD,EAAa,GAAG,KAAK,WAAW,IAAI,KAAK,WAAW,IAAIG,CAAG,GAC3DC,EAAY,KAAK,UAAUH,CAAM,EACvC,MAAM,KAAK,OAAO,KAChB,IAAI,sBAAoB,CACtB,KAAMD,EACN,aAAcI,CAChB,CAAC,CACH,CACF,CAEA,MAAM,aAAaD,EAAaF,EAAgC,CAC9D,GAAI,KAAK,aAAe,cAAY,KAAM,CACxC,QAAQ,IAAIE,CAAG,EAAI,KAAK,UAAUF,CAAM,EACxC,MACF,CAEA,IAAMD,EAAa,GAAG,KAAK,WAAW,IAAI,KAAK,WAAW,IAAIG,CAAG,GACjE,MAAM,KAAK,OAAO,KAChB,IAAI,sBAAoB,CACtB,SAAUH,EACV,aAAc,GAAKC,CACrB,CAAC,CACH,CACF,CAEQ,aAAaI,EAAwB,CAC3C,GAAI,CACF,OAAO,KAAK,MAAMA,CAAK,CACzB,MAAY,CAEZ,CACA,OAAOA,CACT,CACF,ECvHA,IAAAC,EAGO,2CAEA,SAASC,EACdC,EACsB,CACtB,OAAO,IAAI,uBAAqBA,CAAI,CACtC","names":["index_exports","__export","SecretsManager","getClient","__toCommonJS","import_client_secrets_manager","import_common","SecretsManager","client","environment","forceRemote","localToRemoteNames","serviceName","envVar","secretName","secret","response","key","secretStr","value","import_client_secrets_manager","getClient","opts"]}