@soinlabs/secrets
Version:
Key management library for SOIN Labs
62 lines (55 loc) • 1.56 kB
JavaScript
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;