Add typings for nodecredstash

This commit is contained in:
Mike Cook
2018-03-19 09:52:05 +00:00
parent e8bc07e649
commit 9ef7415615
4 changed files with 127 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
// Type definitions for nodecredstash 2.0
// Project: https://github.com/DavidTanner/nodecredstash#readme
// Definitions by: Mike Cook <https://github.com/migstopheles>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference types="node"/>
import * as AWS from 'aws-sdk';
interface ICredstashConfig {
table?: string;
awsOpts?: AWS.KMS.ClientConfiguration;
dynamoOpts?: AWS.DynamoDB.ClientConfiguration;
kmsKey?: string;
kmsOpts?: AWS.KMS.ClientConfiguration;
}
interface ICredstashContext {
[key: string]: string;
}
interface IPutSecretOptions {
name: string;
secret: string;
context: ICredstashContext;
digest?: string;
version?: number;
}
interface ICredstash {
getHighestVersion: (options: { name: string }) => Promise<AWS.DynamoDB.AttributeMap>;
incrementVersion: (options: { name: string }) => Promise<string>;
putSecret: (options: IPutSecretOptions) => Promise<AWS.DynamoDB.DocumentClient.PutItemOutput>;
decryptStash: (stash: { key: string; }, context?: ICredstashContext) => Promise<AWS.KMS.DecryptResponse>;
getAllVersions: (options: { name: string, context?: ICredstashContext, limit?: number }) => Promise<Array<{ version: string; secret: string }>>;
getSecret: (options: { name: string, context?: ICredstashContext, version?: number }) => Promise<string>;
deleteSecrets: (options: { name: string }) => Promise<Array<AWS.DynamoDB.DocumentClient.DeleteItemOutput>>;
deleteSecret: (options: { name: string, version: number }) => Promise<AWS.DynamoDB.DocumentClient.DeleteItemOutput>;
listSecrets: () => Promise<string[]>;
getAllSecrets: (options: { version?: number, context?: ICredstashContext, startsWith?: string }) => Promise<{ [key: string]: string }>;
createDdbTable: () => Promise<void>;
}
declare function Credstash(config: ICredstashConfig): ICredstash;
export = Credstash;
@@ -0,0 +1,59 @@
import Credstash = require('nodecredstash');
const credstash = Credstash({
awsOpts: { region: 'us-east-1' },
dynamoOpts: { accessKeyId: 'foo' },
kmsKey: 'bar',
kmsOpts: { accessKeyId: 'baz' },
table: 'something'
});
credstash.decryptStash({ key: 'foo' }).then((result) => {
return {
id: result.KeyId,
text: result.Plaintext
};
});
credstash.deleteSecret({ name: 'foo', version: 1 }).then((result) => {
if (result.Attributes) return result.Attributes['blah'];
if (result.ConsumedCapacity) return result.ConsumedCapacity.TableName;
if (result.ItemCollectionMetrics) return result.ItemCollectionMetrics.ItemCollectionKey;
});
credstash.deleteSecrets({ name: 'foo' }).then((results) => {
const result = results[0];
if (result.Attributes) return result.Attributes['blah'].toUpperCase();
if (result.ConsumedCapacity) return result.ConsumedCapacity.TableName;
if (result.ItemCollectionMetrics) return result.ItemCollectionMetrics.ItemCollectionKey;
});
credstash.getAllSecrets({ version: 1 }).then((result) => {
return result['foo'].toUpperCase();
});
credstash.getAllVersions({ name: 'foo', context: { bar: 'baz' }, limit: 1 }).then((result) => {
return result[0].secret.toUpperCase() + result[0].version.toUpperCase();
});
credstash.getHighestVersion({ name: 'foo' }).then((result) => {
return result['foo'].S;
});
credstash.getSecret({ name: 'foo', version: 1, context: { bar: 'baz' } }).then((result) => {
return result.toUpperCase();
});
credstash.incrementVersion({ name: 'foo' }).then((result) => {
return result.toUpperCase();
});
credstash.listSecrets().then((result) => {
return result.map((str) => str.toUpperCase());
});
credstash.putSecret({ name: 'foo', secret: 'bar', context: { baz: 'qux' }, digest: 'quux', version: 1 }).then((result) => {
if (result.Attributes) return result.Attributes['foo'];
if (result.ConsumedCapacity) return result.ConsumedCapacity.TableName;
if (result.ItemCollectionMetrics) return result.ItemCollectionMetrics.ItemCollectionKey;
});
+22
View File
@@ -0,0 +1,22 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"nodecredstash-tests.ts"
]
}
+1
View File
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }