@calvear/azure-key-vault
Version:
Wrapper for @azure/keyvault-secrets for ease secrets handler in JSON files.
137 lines • 5.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAzureKeyVaultMock = void 0;
const azure_key_vault_service_1 = require("../azure-key-vault.service");
const GLOBAL_STORE = {};
const BACKUP_PREFIX = '___backup___';
const DELETED_PREFIX = '___deleted___';
class AkvClientMock {
async *[Symbol.asyncIterator]() {
const secrets = Object.values(this.secrets);
for (const secret of secrets)
yield secret;
}
constructor(vaultUrl) {
var _a;
this.vaultUrl = vaultUrl !== null && vaultUrl !== void 0 ? vaultUrl : 'localhost';
GLOBAL_STORE[this.vaultUrl] = (_a = GLOBAL_STORE[this.vaultUrl]) !== null && _a !== void 0 ? _a : {};
this.secrets = GLOBAL_STORE[this.vaultUrl];
this.encoder = new TextEncoder();
this.decoder = new TextDecoder();
}
setSecret(secretName, value, { enabled, expiresOn, tags }) {
this.secrets[secretName] = {
name: secretName,
value,
properties: {
vaultUrl: this.vaultUrl,
version: '1',
name: secretName,
enabled: enabled !== null && enabled !== void 0 ? enabled : true,
createdOn: new Date(),
updatedOn: new Date(),
expiresOn,
tags
}
};
return Promise.resolve(this.secrets[secretName]);
}
beginDeleteSecret(name, options) {
if (!this.secrets[name])
throw new Error('Secret does not exists');
const deletedName = `${DELETED_PREFIX}${name}`;
this.secrets[deletedName] = this.secrets[name];
delete this.secrets[name];
return Promise.resolve({
pollUntilDone: () => Promise.resolve(this.secrets[deletedName])
});
}
updateSecretProperties(secretName, secretVersion, { enabled, expiresOn, tags }) {
if (!this.secrets[secretName])
throw new Error('Secret does not exists');
const secret = this.secrets[secretName];
this.secrets[secretName] = {
...secret,
properties: {
...secret.properties,
version: secretVersion !== null && secretVersion !== void 0 ? secretVersion : '1',
updatedOn: new Date(),
expiresOn: expiresOn !== null && expiresOn !== void 0 ? expiresOn : secret.properties.expiresOn,
enabled: enabled !== null && enabled !== void 0 ? enabled : true,
tags
}
};
return Promise.resolve(this.secrets[secretName].properties);
}
getSecret(secretName, options) {
if (!this.secrets[secretName])
throw new Error('Secret does not exists');
return Promise.resolve(this.secrets[secretName]);
}
getDeletedSecret(secretName, options) {
const deletedName = `${DELETED_PREFIX}${secretName}`;
if (!this.secrets[deletedName])
throw new Error('Secret does not exists');
return Promise.resolve(this.secrets[deletedName]);
}
purgeDeletedSecret(secretName, options) {
const deletedName = `${DELETED_PREFIX}${secretName}`;
if (!this.secrets[deletedName])
throw new Error('Deleted secret does not exists');
delete this.secrets[deletedName];
return Promise.resolve();
}
beginRecoverDeletedSecret(name, options) {
const deletedName = `${DELETED_PREFIX}${name}`;
if (this.secrets[name] || !this.secrets[deletedName])
throw new Error('Secret is not deleted');
this.secrets[name] = this.secrets[deletedName];
delete this.secrets[deletedName];
return Promise.resolve({
pollUntilDone: () => Promise.resolve(this.secrets[name])
});
}
backupSecret(secretName, options) {
const backupName = `${BACKUP_PREFIX}${secretName}`;
this.secrets[backupName] = this.secrets[secretName];
return Promise.resolve(this.encoder.encode(backupName));
}
restoreSecretBackup(secretBundleBackup, options) {
const backupName = this.decoder.decode(secretBundleBackup);
const key = backupName.replace(BACKUP_PREFIX, '');
this.secrets[key] = this.secrets[backupName];
return Promise.resolve(this.secrets[key].properties);
}
listPropertiesOfSecrets(options) {
const container = this;
return {
async *[Symbol.asyncIterator]() {
const secrets = Object.values(container.secrets);
for (const { properties } of secrets)
yield properties;
}
};
}
listDeletedSecrets(options) {
const container = this;
return {
async *[Symbol.asyncIterator]() {
const keys = Object.keys(container.secrets);
for (const key of keys) {
if (key.startsWith(DELETED_PREFIX))
yield container.secrets[key];
}
}
};
}
listPropertiesOfSecretVersions(secretName, options) {
throw new Error('Method not implemented.');
}
}
const vaultUrl = 'https://fake.vault.azure.net';
const client = new AkvClientMock();
function createAzureKeyVaultMock(config) {
return new azure_key_vault_service_1.AzureKeyVault(vaultUrl, config, undefined, client);
}
exports.createAzureKeyVaultMock = createAzureKeyVaultMock;
//# sourceMappingURL=akv-client.mock.js.map