UNPKG

@soinlabs/secrets

Version:

Key management library for SOIN Labs

62 lines (55 loc) 1.56 kB
const AWS = require("aws-sdk"); const StandardError = require("standard-error"); const sp = require("synchronized-promise"); class AmazonProvider { constructor(configOptions) { this.secretManager = null; this.configureSecretManager(configOptions); } configureSecretManager(configOptions) { if (configOptions && configOptions.region) { this.secretManager = new AWS.SecretsManager({ region: configOptions.region, }); this.validateFile(); } else { throw new StandardError({ code: 500, message: "AmazonProvider at AWS.SecretManager: not region provided", }); } } validateFile() { AWS.config.getCredentials(function (err) { if (err) { throw new StandardError({ code: 500, message: "AWS credentials not loaded", previousError: err, }); } }); } getSecretById(SecretId) { if (this.secretManager !== null) { return new Promise((resolve, reject) => { this.secretManager.getSecretValue({ SecretId }, (err, data) => { if (err) reject(err); else { if ("SecretString" in data) { resolve(JSON.parse(data.SecretString)); } } }); }); } } async getSecret(key) { return await this.getSecretById(key); } getSecretSync(key) { let getSecret = sp(this.getSecretById.bind(this)); return getSecret(key); } } module.exports = AmazonProvider;