UNPKG

@shons/next-configify

Version:
59 lines 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AwsSecretsManagerConfigurationResolver = void 0; const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager"); class AwsSecretsManagerConfigurationResolver { constructor(secretsManager) { this.secretsManager = secretsManager; this.AWS_SECRETS_AMANGER_YAML_KEY = 'aws-secrets-manager'; this.AWS_SECRETS_MANAGER_ENV_PREFIX = 'AWS_SECRETS_MANAGER'; } async resolve(config) { const secrets = this.filterConfiguration(config); const promises = this.buildBulkRequest(secrets); const results = await Promise.all(promises); const errors = results.filter((r) => !r.success); if (errors && errors.length) { throw new Error(`Unable to resolve secrets:\n${errors .map((e) => `${e.key}: ${e.id} - ${e.error.message}`) .join('\n')}`); } for (const result of results) { config[result.key] = result.value; } return config; } filterConfiguration(config) { return Object.fromEntries(Object.entries(config).filter(([key]) => key.startsWith(this.AWS_SECRETS_AMANGER_YAML_KEY) || key.startsWith(this.AWS_SECRETS_MANAGER_ENV_PREFIX))); } async resolveSecretValue(key, id) { try { const command = new client_secrets_manager_1.GetSecretValueCommand({ SecretId: id }); const response = await this.secretsManager.send(command); return { id, key, value: response.SecretString, success: true, }; } catch (e) { return { id, key, error: e, success: false, }; } } buildBulkRequest(config) { const promises = []; for (const [key, value] of Object.entries(config)) { promises.push(this.resolveSecretValue(key, value)); } return promises; } } exports.AwsSecretsManagerConfigurationResolver = AwsSecretsManagerConfigurationResolver; //# sourceMappingURL=secrets-manager-configuration.resolver.js.map