780 lines
38 KiB
JavaScript
780 lines
38 KiB
JavaScript
"use strict";
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
/// <reference lib="esnext.asynciterable" />
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.KeyClient = exports.logger = exports.parseKeyVaultKeyIdentifier = exports.KnownSignatureAlgorithms = exports.KnownKeyTypes = exports.KnownKeyOperations = exports.KnownEncryptionAlgorithms = exports.KnownKeyExportEncryptionAlgorithm = exports.KnownKeyCurveNames = exports.KnownDeletionRecoveryLevel = exports.CryptographyClient = void 0;
|
|
const tslib_1 = require("tslib");
|
|
const log_js_1 = require("./log.js");
|
|
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return log_js_1.logger; } });
|
|
const index_js_1 = require("./generated/models/index.js");
|
|
Object.defineProperty(exports, "KnownDeletionRecoveryLevel", { enumerable: true, get: function () { return index_js_1.KnownDeletionRecoveryLevel; } });
|
|
const keyVaultClient_js_1 = require("./generated/keyVaultClient.js");
|
|
const constants_js_1 = require("./constants.js");
|
|
const keyvault_common_1 = require("@azure/keyvault-common");
|
|
const poller_js_1 = require("./lro/delete/poller.js");
|
|
const poller_js_2 = require("./lro/recover/poller.js");
|
|
const keysModels_js_1 = require("./keysModels.js");
|
|
Object.defineProperty(exports, "KnownKeyExportEncryptionAlgorithm", { enumerable: true, get: function () { return keysModels_js_1.KnownKeyExportEncryptionAlgorithm; } });
|
|
Object.defineProperty(exports, "KnownKeyOperations", { enumerable: true, get: function () { return keysModels_js_1.KnownKeyOperations; } });
|
|
Object.defineProperty(exports, "KnownKeyTypes", { enumerable: true, get: function () { return keysModels_js_1.KnownKeyTypes; } });
|
|
const cryptographyClient_js_1 = require("./cryptographyClient.js");
|
|
Object.defineProperty(exports, "CryptographyClient", { enumerable: true, get: function () { return cryptographyClient_js_1.CryptographyClient; } });
|
|
const cryptographyClientModels_js_1 = require("./cryptographyClientModels.js");
|
|
Object.defineProperty(exports, "KnownEncryptionAlgorithms", { enumerable: true, get: function () { return cryptographyClientModels_js_1.KnownEncryptionAlgorithms; } });
|
|
Object.defineProperty(exports, "KnownKeyCurveNames", { enumerable: true, get: function () { return cryptographyClientModels_js_1.KnownKeyCurveNames; } });
|
|
Object.defineProperty(exports, "KnownSignatureAlgorithms", { enumerable: true, get: function () { return cryptographyClientModels_js_1.KnownSignatureAlgorithms; } });
|
|
const identifier_js_1 = require("./identifier.js");
|
|
Object.defineProperty(exports, "parseKeyVaultKeyIdentifier", { enumerable: true, get: function () { return identifier_js_1.parseKeyVaultKeyIdentifier; } });
|
|
const transformations_js_1 = require("./transformations.js");
|
|
const tracing_js_1 = require("./tracing.js");
|
|
/**
|
|
* The KeyClient provides methods to manage {@link KeyVaultKey} in the
|
|
* Azure Key Vault. The client supports creating, retrieving, updating,
|
|
* deleting, purging, backing up, restoring and listing KeyVaultKeys. The
|
|
* client also supports listing {@link DeletedKey} for a soft-delete enabled Azure Key
|
|
* Vault.
|
|
*/
|
|
class KeyClient {
|
|
/**
|
|
* Creates an instance of KeyClient.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* import { KeyClient } from "@azure/keyvault-keys";
|
|
* import { DefaultAzureCredential } from "@azure/identity";
|
|
*
|
|
* let vaultUrl = `https://<MY KEYVAULT HERE>.vault.azure.net`;
|
|
* let credentials = new DefaultAzureCredential();
|
|
*
|
|
* let client = new KeyClient(vaultUrl, credentials);
|
|
* ```
|
|
* @param vaultUrl - the URL of the Key Vault. It should have this shape: `https://${your-key-vault-name}.vault.azure.net`. You should validate that this URL references a valid Key Vault or Managed HSM resource. See https://aka.ms/azsdk/blog/vault-uri for details.
|
|
* @param credential - An object that implements the `TokenCredential` interface used to authenticate requests to the service. Use the \@azure/identity package to create a credential that suits your needs.
|
|
* @param pipelineOptions - Pipeline options used to configure Key Vault API requests. Omit this parameter to use the default pipeline configuration.
|
|
*/
|
|
constructor(vaultUrl, credential, pipelineOptions = {}) {
|
|
this.vaultUrl = vaultUrl;
|
|
const libInfo = `azsdk-js-keyvault-keys/${constants_js_1.SDK_VERSION}`;
|
|
const userAgentOptions = pipelineOptions.userAgentOptions;
|
|
pipelineOptions.userAgentOptions = {
|
|
userAgentPrefix: userAgentOptions && userAgentOptions.userAgentPrefix
|
|
? `${userAgentOptions.userAgentPrefix} ${libInfo}`
|
|
: libInfo,
|
|
};
|
|
const internalPipelineOptions = Object.assign(Object.assign({}, pipelineOptions), { loggingOptions: {
|
|
logger: log_js_1.logger.info,
|
|
allowedHeaderNames: [
|
|
"x-ms-keyvault-region",
|
|
"x-ms-keyvault-network-info",
|
|
"x-ms-keyvault-service-version",
|
|
],
|
|
} });
|
|
this.credential = credential;
|
|
this.client = new keyVaultClient_js_1.KeyVaultClient(pipelineOptions.serviceVersion || keysModels_js_1.LATEST_API_VERSION, internalPipelineOptions);
|
|
// The authentication policy must come after the deserialization policy since the deserialization policy
|
|
// converts 401 responses to an Error, and we don't want to deal with that.
|
|
this.client.pipeline.addPolicy((0, keyvault_common_1.keyVaultAuthenticationPolicy)(credential, pipelineOptions), {
|
|
afterPolicies: ["deserializationPolicy"],
|
|
});
|
|
}
|
|
/**
|
|
* The create key operation can be used to create any key type in Azure Key Vault. If the named key
|
|
* already exists, Azure Key Vault creates a new version of the key. It requires the keys/create
|
|
* permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* // Create an elliptic-curve key:
|
|
* let result = await client.createKey("MyKey", "EC");
|
|
* ```
|
|
* Creates a new key, stores it, then returns key parameters and properties to the client.
|
|
* @param name - The name of the key.
|
|
* @param keyType - The type of the key. One of the following: 'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct'.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
createKey(name, keyType, options) {
|
|
let unflattenedOptions = {};
|
|
if (options) {
|
|
const { enabled, notBefore, expiresOn: expires, exportable } = options, remainingOptions = tslib_1.__rest(options, ["enabled", "notBefore", "expiresOn", "exportable"]);
|
|
unflattenedOptions = Object.assign(Object.assign({}, remainingOptions), { keyAttributes: {
|
|
enabled,
|
|
notBefore,
|
|
expires,
|
|
exportable,
|
|
} });
|
|
}
|
|
return tracing_js_1.tracingClient.withSpan("KeyClient.createKey", unflattenedOptions, async (updatedOptions) => {
|
|
const response = await this.client.createKey(this.vaultUrl, name, keyType, updatedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(response);
|
|
});
|
|
}
|
|
/**
|
|
* The createEcKey method creates a new elliptic curve key in Azure Key Vault. If the named key
|
|
* already exists, Azure Key Vault creates a new version of the key. It requires the keys/create
|
|
* permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let result = await client.createEcKey("MyKey", { curve: "P-256" });
|
|
* ```
|
|
* Creates a new key, stores it, then returns key parameters and properties to the client.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
async createEcKey(name, options) {
|
|
const keyType = (options === null || options === void 0 ? void 0 : options.hsm) ? index_js_1.KnownJsonWebKeyType.ECHSM : index_js_1.KnownJsonWebKeyType.EC;
|
|
return this.createKey(name, keyType, options);
|
|
}
|
|
/**
|
|
* The createRSAKey method creates a new RSA key in Azure Key Vault. If the named key
|
|
* already exists, Azure Key Vault creates a new version of the key. It requires the keys/create
|
|
* permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let result = await client.createRsaKey("MyKey", { keySize: 2048 });
|
|
* ```
|
|
* Creates a new key, stores it, then returns key parameters and properties to the client.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
async createRsaKey(name, options) {
|
|
const keyType = (options === null || options === void 0 ? void 0 : options.hsm) ? index_js_1.KnownJsonWebKeyType.RSAHSM : index_js_1.KnownJsonWebKeyType.RSA;
|
|
return this.createKey(name, keyType, options);
|
|
}
|
|
/**
|
|
* The createOctKey method creates a new OCT key in Azure Key Vault. If the named key
|
|
* already exists, Azure Key Vault creates a new version of the key. It requires the keys/create
|
|
* permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let result = await client.createOctKey("MyKey", { hsm: true });
|
|
* ```
|
|
* Creates a new key, stores it, then returns key parameters and properties to the client.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
async createOctKey(name, options) {
|
|
const keyType = (options === null || options === void 0 ? void 0 : options.hsm) ? index_js_1.KnownJsonWebKeyType.OctHSM : index_js_1.KnownJsonWebKeyType.Oct;
|
|
return this.createKey(name, keyType, options);
|
|
}
|
|
/**
|
|
* The import key operation may be used to import any key type into an Azure Key Vault. If the
|
|
* named key already exists, Azure Key Vault creates a new version of the key. This operation
|
|
* requires the keys/import permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* // Key contents in myKeyContents
|
|
* let result = await client.importKey("MyKey", myKeyContents);
|
|
* ```
|
|
* Imports an externally created key, stores it, and returns key parameters and properties
|
|
* to the client.
|
|
* @param name - Name for the imported key.
|
|
* @param key - The JSON web key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
importKey(name, key, options) {
|
|
let unflattenedOptions = {};
|
|
if (options) {
|
|
const { enabled, notBefore, exportable, expiresOn: expires, hardwareProtected: hsm } = options, remainingOptions = tslib_1.__rest(options, ["enabled", "notBefore", "exportable", "expiresOn", "hardwareProtected"]);
|
|
unflattenedOptions = Object.assign(Object.assign({}, remainingOptions), { keyAttributes: {
|
|
enabled,
|
|
notBefore,
|
|
expires,
|
|
hsm,
|
|
exportable,
|
|
} });
|
|
}
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.importKey`, unflattenedOptions, async (updatedOptions) => {
|
|
const response = await this.client.importKey(this.vaultUrl, name, key, updatedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(response);
|
|
});
|
|
}
|
|
/**
|
|
* Gets a {@link CryptographyClient} for the given key.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* // get a cryptography client for a given key
|
|
* let cryptographyClient = client.getCryptographyClient("MyKey");
|
|
* ```
|
|
* @param name - The name of the key used to perform cryptographic operations.
|
|
* @param version - Optional version of the key used to perform cryptographic operations.
|
|
* @returns - A {@link CryptographyClient} using the same options, credentials, and http client as this {@link KeyClient}
|
|
*/
|
|
getCryptographyClient(keyName, options) {
|
|
const keyUrl = new URL(["keys", keyName, options === null || options === void 0 ? void 0 : options.keyVersion].filter(Boolean).join("/"), this.vaultUrl);
|
|
// The goals of this method are discoverability and performance (by sharing a client and pipeline).
|
|
// The existing cryptography client does not accept a pipeline as an argument, nor does it expose it.
|
|
// In order to avoid publicly exposing the pipeline we will pass in the underlying client as an undocumented
|
|
// property to the constructor so that crypto providers downstream can use it.
|
|
const constructorOptions = {
|
|
generatedClient: this.client,
|
|
};
|
|
const cryptoClient = new cryptographyClient_js_1.CryptographyClient(keyUrl.toString(), this.credential, constructorOptions);
|
|
return cryptoClient;
|
|
}
|
|
/**
|
|
* The delete operation applies to any key stored in Azure Key Vault. Individual versions
|
|
* of a key can not be deleted, only all versions of a given key at once.
|
|
*
|
|
* This function returns a Long Running Operation poller that allows you to wait indefinitely until the key is deleted.
|
|
*
|
|
* This operation requires the keys/delete permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* const client = new KeyClient(url, credentials);
|
|
* await client.createKey("MyKey", "EC");
|
|
* const poller = await client.beginDeleteKey("MyKey");
|
|
*
|
|
* // Serializing the poller
|
|
* const serialized = poller.toString();
|
|
* // A new poller can be created with:
|
|
* // await client.beginDeleteKey("MyKey", { resumeFrom: serialized });
|
|
*
|
|
* // Waiting until it's done
|
|
* const deletedKey = await poller.pollUntilDone();
|
|
* console.log(deletedKey);
|
|
* ```
|
|
* Deletes a key from a specified key vault.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
async beginDeleteKey(name, options = {}) {
|
|
const poller = new poller_js_1.DeleteKeyPoller({
|
|
name,
|
|
vaultUrl: this.vaultUrl,
|
|
client: this.client,
|
|
intervalInMs: options.intervalInMs,
|
|
resumeFrom: options.resumeFrom,
|
|
operationOptions: options,
|
|
});
|
|
// This will initialize the poller's operation (the deletion of the key).
|
|
await poller.poll();
|
|
return poller;
|
|
}
|
|
updateKeyProperties(...args) {
|
|
const [name, keyVersion, options] = this.disambiguateUpdateKeyPropertiesArgs(args);
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.updateKeyProperties`, options, async (updatedOptions) => {
|
|
const { enabled, notBefore, expiresOn: expires } = updatedOptions, remainingOptions = tslib_1.__rest(updatedOptions, ["enabled", "notBefore", "expiresOn"]);
|
|
const unflattenedOptions = Object.assign(Object.assign({}, remainingOptions), { keyAttributes: {
|
|
enabled,
|
|
notBefore,
|
|
expires,
|
|
} });
|
|
const response = await this.client.updateKey(this.vaultUrl, name, keyVersion, unflattenedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(response);
|
|
});
|
|
}
|
|
/**
|
|
* Standardizes an overloaded arguments collection for the updateKeyProperties method.
|
|
*
|
|
* @param args - The arguments collection.
|
|
* @returns - The standardized arguments collection.
|
|
*/
|
|
disambiguateUpdateKeyPropertiesArgs(args) {
|
|
if (typeof args[1] === "string") {
|
|
// [name, keyVersion, options?] => [name, keyVersion, options || {}]
|
|
return [args[0], args[1], args[2] || {}];
|
|
}
|
|
else {
|
|
// [name, options?] => [name , "", options || {}]
|
|
return [args[0], "", args[1] || {}];
|
|
}
|
|
}
|
|
/**
|
|
* The getKey method gets a specified key and is applicable to any key stored in Azure Key Vault.
|
|
* This operation requires the keys/get permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let key = await client.getKey("MyKey");
|
|
* ```
|
|
* Get a specified key from a given key vault.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
getKey(name, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.getKey`, options, async (updatedOptions) => {
|
|
const response = await this.client.getKey(this.vaultUrl, name, options && options.version ? options.version : "", updatedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(response);
|
|
});
|
|
}
|
|
/**
|
|
* The getDeletedKey method returns the specified deleted key along with its properties.
|
|
* This operation requires the keys/get permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let key = await client.getDeletedKey("MyDeletedKey");
|
|
* ```
|
|
* Gets the specified deleted key.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
getDeletedKey(name, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.getDeletedKey`, options, async (updatedOptions) => {
|
|
const response = await this.client.getDeletedKey(this.vaultUrl, name, updatedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(response);
|
|
});
|
|
}
|
|
/**
|
|
* The purge deleted key operation removes the key permanently, without the possibility of
|
|
* recovery. This operation can only be enabled on a soft-delete enabled vault. This operation
|
|
* requires the keys/purge permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* const client = new KeyClient(url, credentials);
|
|
* const deletePoller = await client.beginDeleteKey("MyKey")
|
|
* await deletePoller.pollUntilDone();
|
|
* await client.purgeDeletedKey("MyKey");
|
|
* ```
|
|
* Permanently deletes the specified key.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
purgeDeletedKey(name, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.purgeDeletedKey`, options, async (updatedOptions) => {
|
|
await this.client.purgeDeletedKey(this.vaultUrl, name, updatedOptions);
|
|
});
|
|
}
|
|
/**
|
|
* Recovers the deleted key in the specified vault. This operation can only be performed on a
|
|
* soft-delete enabled vault.
|
|
*
|
|
* This function returns a Long Running Operation poller that allows you to wait indefinitely until the deleted key is recovered.
|
|
*
|
|
* This operation requires the keys/recover permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* const client = new KeyClient(url, credentials);
|
|
* await client.createKey("MyKey", "EC");
|
|
* const deletePoller = await client.beginDeleteKey("MyKey");
|
|
* await deletePoller.pollUntilDone();
|
|
* const poller = await client.beginRecoverDeletedKey("MyKey");
|
|
*
|
|
* // Serializing the poller
|
|
* const serialized = poller.toString();
|
|
* // A new poller can be created with:
|
|
* // await client.beginRecoverDeletedKey("MyKey", { resumeFrom: serialized });
|
|
*
|
|
* // Waiting until it's done
|
|
* const key = await poller.pollUntilDone();
|
|
* console.log(key);
|
|
* ```
|
|
* Recovers the deleted key to the latest version.
|
|
* @param name - The name of the deleted key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
async beginRecoverDeletedKey(name, options = {}) {
|
|
const poller = new poller_js_2.RecoverDeletedKeyPoller({
|
|
name,
|
|
vaultUrl: this.vaultUrl,
|
|
client: this.client,
|
|
intervalInMs: options.intervalInMs,
|
|
resumeFrom: options.resumeFrom,
|
|
operationOptions: options,
|
|
});
|
|
// This will initialize the poller's operation (the deletion of the key).
|
|
await poller.poll();
|
|
return poller;
|
|
}
|
|
/**
|
|
* Requests that a backup of the specified key be downloaded to the client. All versions of the
|
|
* key will be downloaded. This operation requires the keys/backup permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let backupContents = await client.backupKey("MyKey");
|
|
* ```
|
|
* Backs up the specified key.
|
|
* @param name - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
backupKey(name, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.backupKey`, options, async (updatedOptions) => {
|
|
const response = await this.client.backupKey(this.vaultUrl, name, updatedOptions);
|
|
return response.value;
|
|
});
|
|
}
|
|
/**
|
|
* Restores a backed up key, and all its versions, to a vault. This operation requires the
|
|
* keys/restore permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* let backupContents = await client.backupKey("MyKey");
|
|
* // ...
|
|
* let key = await client.restoreKeyBackup(backupContents);
|
|
* ```
|
|
* Restores a backed up key to a vault.
|
|
* @param backup - The backup blob associated with a key bundle.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
async restoreKeyBackup(backup, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan(`KeyClient.restoreKeyBackup`, options, async (updatedOptions) => {
|
|
const response = await this.client.restoreKey(this.vaultUrl, backup, updatedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(response);
|
|
});
|
|
}
|
|
/**
|
|
* Gets the requested number of bytes containing random values from a managed HSM.
|
|
* This operation requires the managedHsm/rng permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(vaultUrl, credentials);
|
|
* let { bytes } = await client.getRandomBytes(10);
|
|
* ```
|
|
* @param count - The number of bytes to generate between 1 and 128 inclusive.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
getRandomBytes(count, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan("KeyClient.getRandomBytes", options, async (updatedOptions) => {
|
|
const response = await this.client.getRandomBytes(this.vaultUrl, count, updatedOptions);
|
|
return response.value;
|
|
});
|
|
}
|
|
/**
|
|
* Rotates the key based on the key policy by generating a new version of the key. This operation requires the keys/rotate permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(vaultUrl, credentials);
|
|
* let key = await client.rotateKey("MyKey");
|
|
* ```
|
|
*
|
|
* @param name - The name of the key to rotate.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
rotateKey(name, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan("KeyClient.rotateKey", options, async (updatedOptions) => {
|
|
const key = await this.client.rotateKey(this.vaultUrl, name, updatedOptions);
|
|
return (0, transformations_js_1.getKeyFromKeyBundle)(key);
|
|
});
|
|
}
|
|
/**
|
|
* Releases a key from a managed HSM.
|
|
*
|
|
* The release key operation is applicable to all key types. The operation requires the key to be marked exportable and the keys/release permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(vaultUrl, credentials);
|
|
* let result = await client.releaseKey("myKey", target)
|
|
* ```
|
|
*
|
|
* @param name - The name of the key.
|
|
* @param targetAttestationToken - The attestation assertion for the target of the key release.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
releaseKey(name, targetAttestationToken, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan("KeyClient.releaseKey", options, async (updatedOptions) => {
|
|
const { nonce, algorithm } = updatedOptions, rest = tslib_1.__rest(updatedOptions, ["nonce", "algorithm"]);
|
|
const result = await this.client.release(this.vaultUrl, name, (options === null || options === void 0 ? void 0 : options.version) || "", targetAttestationToken, Object.assign({ enc: algorithm, nonce }, rest));
|
|
return { value: result.value };
|
|
});
|
|
}
|
|
/**
|
|
* Gets the rotation policy of a Key Vault Key.
|
|
* By default, all keys have a policy that will notify 30 days before expiry.
|
|
*
|
|
* This operation requires the keys/get permission.
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(vaultUrl, credentials);
|
|
* let result = await client.getKeyRotationPolicy("myKey");
|
|
* ```
|
|
*
|
|
* @param keyName - The name of the key.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
getKeyRotationPolicy(keyName, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan("KeyClient.getKeyRotationPolicy", options, async () => {
|
|
const policy = await this.client.getKeyRotationPolicy(this.vaultUrl, keyName);
|
|
return transformations_js_1.keyRotationTransformations.generatedToPublic(policy);
|
|
});
|
|
}
|
|
/**
|
|
* Updates the rotation policy of a Key Vault Key.
|
|
* This operation requires the keys/update permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(vaultUrl, credentials);
|
|
* const setPolicy = await client.updateKeyRotationPolicy("MyKey", myPolicy);
|
|
* ```
|
|
*
|
|
* @param keyName - The name of the key.
|
|
* @param policyProperties - The {@link KeyRotationPolicyProperties} for the policy.
|
|
* @param options - The optional parameters.
|
|
*/
|
|
updateKeyRotationPolicy(keyName, policy, options = {}) {
|
|
return tracing_js_1.tracingClient.withSpan("KeyClient.updateKeyRotationPolicy", options, async (updatedOptions) => {
|
|
const result = await this.client.updateKeyRotationPolicy(this.vaultUrl, keyName, transformations_js_1.keyRotationTransformations.propertiesToGenerated(policy), updatedOptions);
|
|
return transformations_js_1.keyRotationTransformations.generatedToPublic(result);
|
|
});
|
|
}
|
|
/**
|
|
* Deals with the pagination of {@link listPropertiesOfKeyVersions}.
|
|
* @param name - The name of the Key Vault Key.
|
|
* @param continuationState - An object that indicates the position of the paginated request.
|
|
* @param options - Common options for the iterative endpoints.
|
|
*/
|
|
listPropertiesOfKeyVersionsPage(name, continuationState, options) {
|
|
return tslib_1.__asyncGenerator(this, arguments, function* listPropertiesOfKeyVersionsPage_1() {
|
|
if (continuationState.continuationToken == null) {
|
|
const optionsComplete = Object.assign({ maxresults: continuationState.maxPageSize }, options);
|
|
const currentSetResponse = yield tslib_1.__await(tracing_js_1.tracingClient.withSpan("KeyClient.listPropertiesOfKeyVersionsPage", optionsComplete, async (updatedOptions) => this.client.getKeyVersions(this.vaultUrl, name, updatedOptions)));
|
|
continuationState.continuationToken = currentSetResponse.nextLink;
|
|
if (currentSetResponse.value) {
|
|
yield yield tslib_1.__await(currentSetResponse.value.map(transformations_js_1.getKeyPropertiesFromKeyItem, this));
|
|
}
|
|
}
|
|
while (continuationState.continuationToken) {
|
|
const currentSetResponse = yield tslib_1.__await(tracing_js_1.tracingClient.withSpan("KeyClient.listPropertiesOfKeyVersionsPage", options || {}, async (updatedOptions) => this.client.getKeyVersionsNext(this.vaultUrl, name, continuationState.continuationToken, updatedOptions)));
|
|
continuationState.continuationToken = currentSetResponse.nextLink;
|
|
if (currentSetResponse.value) {
|
|
yield yield tslib_1.__await(currentSetResponse.value.map(transformations_js_1.getKeyPropertiesFromKeyItem, this));
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Deals with the iteration of all the available results of {@link listPropertiesOfKeyVersions}.
|
|
* @param name - The name of the Key Vault Key.
|
|
* @param options - Common options for the iterative endpoints.
|
|
*/
|
|
listPropertiesOfKeyVersionsAll(name, options) {
|
|
return tslib_1.__asyncGenerator(this, arguments, function* listPropertiesOfKeyVersionsAll_1() {
|
|
var _a, e_1, _b, _c;
|
|
const f = {};
|
|
try {
|
|
for (var _d = true, _e = tslib_1.__asyncValues(this.listPropertiesOfKeyVersionsPage(name, f, options)), _f; _f = yield tslib_1.__await(_e.next()), _a = _f.done, !_a; _d = true) {
|
|
_c = _f.value;
|
|
_d = false;
|
|
const page = _c;
|
|
for (const item of page) {
|
|
yield yield tslib_1.__await(item);
|
|
}
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (!_d && !_a && (_b = _e.return)) yield tslib_1.__await(_b.call(_e));
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Iterates all versions of the given key in the vault. The full key identifier, properties, and tags are provided
|
|
* in the response. This operation requires the keys/list permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* for await (const keyProperties of client.listPropertiesOfKeyVersions("MyKey")) {
|
|
* const key = await client.getKey(keyProperties.name);
|
|
* console.log("key version: ", key);
|
|
* }
|
|
* ```
|
|
* @param name - Name of the key to fetch versions for
|
|
* @param options - The optional parameters.
|
|
*/
|
|
listPropertiesOfKeyVersions(name, options = {}) {
|
|
const iter = this.listPropertiesOfKeyVersionsAll(name, options);
|
|
return {
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
byPage: (settings = {}) => this.listPropertiesOfKeyVersionsPage(name, settings, options),
|
|
};
|
|
}
|
|
/**
|
|
* Deals with the pagination of {@link listPropertiesOfKeys}.
|
|
* @param continuationState - An object that indicates the position of the paginated request.
|
|
* @param options - Common options for the iterative endpoints.
|
|
*/
|
|
listPropertiesOfKeysPage(continuationState, options) {
|
|
return tslib_1.__asyncGenerator(this, arguments, function* listPropertiesOfKeysPage_1() {
|
|
if (continuationState.continuationToken == null) {
|
|
const optionsComplete = Object.assign({ maxresults: continuationState.maxPageSize }, options);
|
|
const currentSetResponse = yield tslib_1.__await(tracing_js_1.tracingClient.withSpan("KeyClient.listPropertiesOfKeysPage", optionsComplete, async (updatedOptions) => this.client.getKeys(this.vaultUrl, updatedOptions)));
|
|
continuationState.continuationToken = currentSetResponse.nextLink;
|
|
if (currentSetResponse.value) {
|
|
yield yield tslib_1.__await(currentSetResponse.value.map(transformations_js_1.getKeyPropertiesFromKeyItem, this));
|
|
}
|
|
}
|
|
while (continuationState.continuationToken) {
|
|
const currentSetResponse = yield tslib_1.__await(tracing_js_1.tracingClient.withSpan("KeyClient.listPropertiesOfKeysPage", options || {}, async (updatedOptions) => this.client.getKeysNext(this.vaultUrl, continuationState.continuationToken, updatedOptions)));
|
|
continuationState.continuationToken = currentSetResponse.nextLink;
|
|
if (currentSetResponse.value) {
|
|
yield yield tslib_1.__await(currentSetResponse.value.map(transformations_js_1.getKeyPropertiesFromKeyItem, this));
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Deals with the iteration of all the available results of {@link listPropertiesOfKeys}.
|
|
* @param options - Common options for the iterative endpoints.
|
|
*/
|
|
listPropertiesOfKeysAll(options) {
|
|
return tslib_1.__asyncGenerator(this, arguments, function* listPropertiesOfKeysAll_1() {
|
|
var _a, e_2, _b, _c;
|
|
const f = {};
|
|
try {
|
|
for (var _d = true, _e = tslib_1.__asyncValues(this.listPropertiesOfKeysPage(f, options)), _f; _f = yield tslib_1.__await(_e.next()), _a = _f.done, !_a; _d = true) {
|
|
_c = _f.value;
|
|
_d = false;
|
|
const page = _c;
|
|
for (const item of page) {
|
|
yield yield tslib_1.__await(item);
|
|
}
|
|
}
|
|
}
|
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
finally {
|
|
try {
|
|
if (!_d && !_a && (_b = _e.return)) yield tslib_1.__await(_b.call(_e));
|
|
}
|
|
finally { if (e_2) throw e_2.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Iterates the latest version of all keys in the vault. The full key identifier and properties are provided
|
|
* in the response. No values are returned for the keys. This operations requires the keys/list permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* for await (const keyProperties of client.listPropertiesOfKeys()) {
|
|
* const key = await client.getKey(keyProperties.name);
|
|
* console.log("key: ", key);
|
|
* }
|
|
* ```
|
|
* List all keys in the vault
|
|
* @param options - The optional parameters.
|
|
*/
|
|
listPropertiesOfKeys(options = {}) {
|
|
const iter = this.listPropertiesOfKeysAll(options);
|
|
return {
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
byPage: (settings = {}) => this.listPropertiesOfKeysPage(settings, options),
|
|
};
|
|
}
|
|
/**
|
|
* Deals with the pagination of {@link listDeletedKeys}.
|
|
* @param continuationState - An object that indicates the position of the paginated request.
|
|
* @param options - Common options for the iterative endpoints.
|
|
*/
|
|
listDeletedKeysPage(continuationState, options) {
|
|
return tslib_1.__asyncGenerator(this, arguments, function* listDeletedKeysPage_1() {
|
|
if (continuationState.continuationToken == null) {
|
|
const optionsComplete = Object.assign({ maxresults: continuationState.maxPageSize }, options);
|
|
const currentSetResponse = yield tslib_1.__await(tracing_js_1.tracingClient.withSpan("KeyClient.listDeletedKeysPage", optionsComplete, async (updatedOptions) => this.client.getDeletedKeys(this.vaultUrl, updatedOptions)));
|
|
continuationState.continuationToken = currentSetResponse.nextLink;
|
|
if (currentSetResponse.value) {
|
|
yield yield tslib_1.__await(currentSetResponse.value.map(transformations_js_1.getDeletedKeyFromDeletedKeyItem, this));
|
|
}
|
|
}
|
|
while (continuationState.continuationToken) {
|
|
const currentSetResponse = yield tslib_1.__await(tracing_js_1.tracingClient.withSpan("KeyClient.listDeletedKeysPage", options || {}, async (updatedOptions) => this.client.getDeletedKeysNext(this.vaultUrl, continuationState.continuationToken, updatedOptions)));
|
|
continuationState.continuationToken = currentSetResponse.nextLink;
|
|
if (currentSetResponse.value) {
|
|
yield yield tslib_1.__await(currentSetResponse.value.map(transformations_js_1.getDeletedKeyFromDeletedKeyItem, this));
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Deals with the iteration of all the available results of {@link listDeletedKeys}.
|
|
* @param options - Common options for the iterative endpoints.
|
|
*/
|
|
listDeletedKeysAll(options) {
|
|
return tslib_1.__asyncGenerator(this, arguments, function* listDeletedKeysAll_1() {
|
|
var _a, e_3, _b, _c;
|
|
const f = {};
|
|
try {
|
|
for (var _d = true, _e = tslib_1.__asyncValues(this.listDeletedKeysPage(f, options)), _f; _f = yield tslib_1.__await(_e.next()), _a = _f.done, !_a; _d = true) {
|
|
_c = _f.value;
|
|
_d = false;
|
|
const page = _c;
|
|
for (const item of page) {
|
|
yield yield tslib_1.__await(item);
|
|
}
|
|
}
|
|
}
|
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
finally {
|
|
try {
|
|
if (!_d && !_a && (_b = _e.return)) yield tslib_1.__await(_b.call(_e));
|
|
}
|
|
finally { if (e_3) throw e_3.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Iterates the deleted keys in the vault. The full key identifier and properties are provided
|
|
* in the response. No values are returned for the keys. This operations requires the keys/list permission.
|
|
*
|
|
* Example usage:
|
|
* ```ts
|
|
* let client = new KeyClient(url, credentials);
|
|
* for await (const deletedKey of client.listDeletedKeys()) {
|
|
* console.log("deleted key: ", deletedKey);
|
|
* }
|
|
* ```
|
|
* List all keys in the vault
|
|
* @param options - The optional parameters.
|
|
*/
|
|
listDeletedKeys(options = {}) {
|
|
const iter = this.listDeletedKeysAll(options);
|
|
return {
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
byPage: (settings = {}) => this.listDeletedKeysPage(settings, options),
|
|
};
|
|
}
|
|
}
|
|
exports.KeyClient = KeyClient;
|
|
//# sourceMappingURL=index.js.map
|