@shons/next-configify
Version:
NestJS Config on Next Steroids
59 lines • 2.25 kB
JavaScript
;
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