npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@peixer/kms-sdk

v1.1.0

Published

alibaba cloud kms client for node.js

Downloads

1

Readme

Alibaba Cloud KMS client for Node.js

npm version Travis Build Status Appveyor Build status codecov license

Installation

npm install @alicloud/kms-sdk

Node.js >= 8.5.0 required.

Usage

Client with accessKeyId & accessKeySecret

const KmsClient = require('@alicloud/kms-sdk');
const client = new KmsClient({
  endpoint: 'kms.cn-hangzhou.aliyuncs.com', // check this from kms console
  accessKeyId: '***************', // check this from aliyun console
  accessKeySecret: '***************', // check this from aliyun console
});

Client with sdk credentials

Credentials file example (~/.alibabacloud/credentials):

[default]
enable = true
type = access_key
access_key_id = ******
access_key_secret = ******

[kms-demo]
enable = true
type = ram_role_arn
access_key_id = ******
access_key_secret = ******
role_arn = acs:ram::******:role/******
role_session_name = ******

Actually @alicloud/credentials will automatically load credentials from the credentials file above.

Client example:

const KmsClient = require('@alicloud/kms-sdk');
const Credentials = require('@alicloud/credentials');
const client = new KmsClient({
  endpoint: 'kms.cn-hangzhou.aliyuncs.com', // check this from kms console
  credential: new Credentials({ profile: 'kms-demo' })
});

Similarly, we also support setting explicit credentials file path like:

const KmsClient = require('@alicloud/kms-sdk');
const Credentials = require('@alicloud/credentials');
const client = new KmsClient({
  endpoint: 'kms.cn-hangzhou.aliyuncs.com', // check this from kms console
  credential: new Credentials({
    credentialsFile: '/path/to/your/credential'
    profile: 'kms-demo'
  })
});

Please see @alicloud/credentials docs for more information.

Api demo

async function demo() {
  // describe regions
  const regions = await client.describeRegions();
  console.log(`regions: ${JSON.stringify(regions)}`);

  // create key
  const creation = await client.createKey('Aliyun_KMS', `demo`, 'ENCRYPT/DECRYPT');
  const keyId = creation.KeyMetadata.KeyId;
  console.log(`creation: ${JSON.stringify(creation)}`);

  // list keys
  const keys = await client.listKeys(1, 100);
  console.log(`keys: ${JSON.stringify(keys)}`);

  // describe key
  const description = await client.describeKey(keyId);
  console.log(`description: ${JSON.stringify(description)}`);

  // encrypt
  const plaintext = 'hello kms sdk for node.js';
  const encrypt = await client.encrypt(keyId, plaintext.toString('base64'), JSON.stringify({ k: 'v' }));
  const blob = encrypt.CiphertextBlob;
  console.log(`description: ${JSON.stringify(description)}`);

  // decrypt
  const decrypt = await client.decrypt(blob, JSON.stringify({ k: 'v' }));
  const rawtext = decrypt.Plaintext;
  console.log(`rawtext: ${rawtext}`);

  // disable key
  const disable = await client.disableKey(keyId);
  console.log(`disable: ${JSON.stringify(disable)}`);

  // enable key
  const enable = await client.enableKey(keyId);
  console.log(`enable: ${JSON.stringify(enable)}`);

  // generate local data key
  const generateKey = await client.generateDataKey(keyId);
  console.log(`generateKey: ${JSON.stringify(generateKey)}`);

  // get params for import
  const res = await client.createKey('EXTERNAL');
  const externalKeyId = res.KeyMetadata.KeyId;
  const params = await client.getParametersForImport(externalKeyId, 'RSAES_OAEP_SHA_256', 'RSA_2048');
  const importTokean = res1.ImportToken;
  console.log(`import params: ${JSON.stringify(params)}`);

  // import key material
  const importKey = await client.importKeyMaterial(externalKeyId, 'test'.toString('base64'), importTokean, Date.now() + 24 * 60 * 60 * 1000);
  console.log(`import key: ${JSON.stringify(importKey)}`);

  // delete key material
  const deleteKeyMaterial = await client.deleteKeyMaterial(externalKeyId);
  console.log(`delete key material: ${JSON.stringify(deleteKeyMaterial)}`);

  // schedule delete key
  const deletion = await client.scheduleKeyDeletion(keyId, 7);
  console.log(`deletion: ${JSON.stringify(deletion)}`);

  // cancel deletion
  const cancel = await client.cancelKeyDeletion(keyId);
  console.log(`cancel: ${JSON.stringify(cancel)}`);

  // create alias
  const alias = `alias/demo`;
  const createAlias = await client.createAlias(keyId, alias);
  console.log(`createAlias: ${JSON.stringify(createAlias)}`);

  // update alias
  const creation1 = await client.createKey('Aliyun_KMS', `demo`, 'ENCRYPT/DECRYPT');
  const keyId1 = creation1.KeyMetadata.KeyId;
  const alias1 = `alias/demo1`;
  await client.createAlias(keyId, alias1);
  const updateAlias = await client.updateAlias(keyId1, alias1);
  console.log(`updateAlias: ${JSON.stringify(updateAlias)}`);

  // list aliases
  const listAlias = await client.listAliases(1, 100);
  console.log(`listAlias: ${JSON.stringify(listAlias)}`);

  // list alias by id
  const listAliasById = await client.listAliasesByKeyId(keyId, 1, 100);
  console.log(`listAliasById: ${JSON.stringify(listAliasById)}`);

  // delete alias
  const deleteAlias = await client.deleteAlias(alias);
  console.log(`deleteAlias: ${JSON.stringify(deleteAlias)}`);
}

demo();

API Doc

Method: describeRegions()

Returns

  • regions Object - available regions

Method: createKey(origin, description, keyUsage)

Arguments

  • origin String optional - Aliyun_KMS (default) or EXTERNAL
  • description String optional - description of key
  • keyUsage String optional - usage of key, default is ENCRYPT/DECRYPT

Returns

  • keyMetadata Object - metadata of this key

Method: listKeys(pageNumber, pageSize)

Arguments

  • pageNumber Number optional - current page, default 1
  • pageSize Number optional - result count (0 - 100), default 10

Returns

  • keyList Object - list of keys in this endpoint

Method: describeKey(keyId)

Arguments

  • keyId String required - global unique identifier

Returns

  • description Object - description of this key

Method: encrypt(keyId, plaintext, encryptionContext)

Arguments

  • keyId String required - global unique identifier
  • plaintext String required - plaintext to be encrypted (must be Base64 encoded)
  • encryptionContext String optional - key/value string, must be {string: string}

Returns

  • ciphertextBlob Object - encrypted content

Method: decrypt(ciphertextBlob, encryptionContext)

Arguments

  • ciphertextBlob String required - ciphertext to be decrypted
  • encryptionContext String optional - key/value string, must be {string: string}

Returns

  • plaintext Object - decrypted content

Method: disableKey(keyId)

Arguments

  • keyId String required - global unique identifier

Method: enableKey(keyId)

Arguments

  • keyId String required - global unique identifier

Method: generateDataKey(keyId, keySpec, numberOfBytes, encryptionContex)

Arguments

  • keyId String required - global unique identifier
  • keySpec String optional - AES_256 or AES_128
  • numberOfBytes Number optional - length of key
  • encryptionContex String optional - key/value string, must be {string: string}

Returns

  • localKey Object - generated local key

Method: getParametersForImport(keyId, wrappingAlgorithm, wrappingKeySpec)

Arguments

  • keyId String required - global unique identifier
  • wrappingAlgorithm String required - algorithm for encrypting key material, RSAES_PKCS1_V1_5, RSAES_OAEP_SHA_1 or RSAES_OAEP_SHA_256
  • wrappingKeySpec String required - public key type used to encrypt key material, RSA_2048

Returns

  • importParams Object - parameters required to import key material

Method: importKeyMaterial(keyId, encryptedKeyMaterial, importToken, keyMaterialExpireUnix)

Arguments

  • keyId String required - global unique identifier
  • encryptedKeyMaterial String required - key material encrypted with base64
  • importToken String required - obtained by calling GetParametersForImport
  • keyMaterialExpireUnix String optional - key material expiration time

Method: deleteKeyMaterial(keyId)

Arguments

  • keyId String required - global unique identifier

Method: scheduleKeyDeletion(keyId, pendingWindowInDays)

Arguments

  • keyId String required - global unique identifier
  • pendingWindowInDays Number required - key pre-delete cycle, [7, 30]

Method: cancelKeyDeletion(keyId)

Arguments

  • keyId String required - global unique identifier

Method: createAlias(keyId, aliasName)

Arguments

  • keyId String required - global unique identifier
  • aliasName String required - cmk alias, prefix must be 'alias/'

Method: updateAlias(keyId, aliasName)

Arguments

  • keyId String required - global unique identifier
  • aliasName String required - the alias to be operated, prefix must be 'alias/'

Method: listAliases(pageNumber, pageSize)

Arguments

  • pageNumber Number optional - current page, default 1
  • pageSize Number optional - result count (0 - 100), default 10

Returns

  • aliasList Object - list of alias

Method: listAliasesByKeyId(keyId, pageNumber, pageSize)

Arguments

  • keyId String required - global unique identifier
  • pageNumber Number optional - current page, default 1
  • pageSize Number optional - result count (0 - 100), default 10

Returns

  • aliasList Object - list of alias

Method: deleteAlias(aliasName)

Arguments

  • aliasName String required - alias name, prefix must be 'alias/'

Test & Coverage

You should set environment variables before running the test or coverage. For example:

  • run test
ACCESS_KEY=<your access key> SECRET_KEY=<your secret key> ENDPOINT=<endpoint> npm run test
  • run code coverage
ACCESS_KEY=<your access key> SECRET_KEY=<your secret key> ENDPOINT=<endpoint> npm run cov

License

MIT