UNPKG

secrets-injector

Version:
91 lines 4.14 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var AWSSecretsService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.AWSSecretsService = void 0; const common_1 = require("@nestjs/common"); const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager"); const contstants_1 = require("./contstants"); let AWSSecretsService = AWSSecretsService_1 = class AWSSecretsService { constructor(options) { this.options = options; this.logger = new common_1.Logger(AWSSecretsService_1.name); if (this.options.secretsSource && this.options.isSetToEnv) { this.setAllSecrectToEnv(); } } async setAllSecrectToEnv() { try { const secrets = await this.getAllSecrects(); if (!secrets) { this.logger.warn('There is no secrets to set in env'); return; } Object.keys(secrets).forEach((key) => { console.log('🚀 ~ AWSSecretsService ~ Object.keys ~ key:', key); process.env[key] = secrets[key]; }); this.logger.log(`All secrets from aws secrets manager(id: ${JSON.stringify(this.options.secretsSource)}) are set to env`); if (this.options.isDebug) { this.logger.log(JSON.stringify(secrets, null, 2)); } } catch (err) { this.logger.error(err.message); } } async getAllSecrects() { try { const secretsIds = Array.isArray(this.options.secretsSource) ? this.options.secretsSource : [this.options.secretsSource]; if (!Boolean(secretsIds.length)) { this.logger.log('Secrets source is empty'); } const commands = secretsIds.map((secretId) => new client_secrets_manager_1.GetSecretValueCommand({ SecretId: secretId, })); const resp = commands.map((command) => this.options.secretsManager.send(command)); const secrets = await Promise.all(resp); const response = secrets.reduce((acc, secret) => { const sec = JSON.parse(secret.SecretString); const allSecrets = Object.assign(Object.assign({}, acc), sec); return allSecrets; }, {}); return response; } catch (e) { this.logger.error(`Unable to fetch secrets(${e.message})`); } } async getSecretsByID(secretId) { try { const command = new client_secrets_manager_1.GetSecretValueCommand({ SecretId: secretId, }); const secret = await this.options.secretsManager.send(command); return JSON.parse(secret.SecretString); } catch (e) { this.logger.error(`Unable to fetch secrets(${e.message})`); } } }; AWSSecretsService = AWSSecretsService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, common_1.Inject)(contstants_1.AWS_SECRETS_MANAGER_MODULE_OPTIONS)), __metadata("design:paramtypes", [Object]) ], AWSSecretsService); exports.AWSSecretsService = AWSSecretsService; //# sourceMappingURL=aws-secrets-manager.service.js.map