UNPKG

@calvear/azure-key-vault

Version:

Wrapper for @azure/keyvault-secrets for ease secrets handler in JSON files.

137 lines 5.54 kB
"use strict"; 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