diff --git a/types/jwk-to-pem/index.d.ts b/types/jwk-to-pem/index.d.ts new file mode 100644 index 0000000000..f8c60791dc --- /dev/null +++ b/types/jwk-to-pem/index.d.ts @@ -0,0 +1,43 @@ +// Type definitions for jwk-to-pem 2.0 +// Project: https://github.com/Brightspace/node-jwk-to-pem#readme +// Definitions by: Erik Silkensen +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +export = jwkToBuffer; + +declare function jwkToBuffer(jwk: jwkToBuffer.JWK, opts?: jwkToBuffer.Options): string; + +declare namespace jwkToBuffer { + interface Options { + private: boolean; + } + + interface EC { + kty: "EC"; + crv: string; + x: string; + y: string; + } + + interface ECPrivate { + kty: "EC"; + crv: string; + d: string; + x?: string; + y?: string; + } + + interface RSA { + kty: "RSA"; + e: string; + n: string; + d?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + } + + type JWK = EC | ECPrivate | RSA; +} diff --git a/types/jwk-to-pem/jwk-to-pem-tests.ts b/types/jwk-to-pem/jwk-to-pem-tests.ts new file mode 100644 index 0000000000..2098d4b89f --- /dev/null +++ b/types/jwk-to-pem/jwk-to-pem-tests.ts @@ -0,0 +1,68 @@ +import jwkToPem = require('jwk-to-pem'); + +const jwk: jwkToPem.JWK = { kty: 'EC', crv: 'P-256', x: '...', y: '...' }; +jwkToPem(jwk); // $ExpectType string + +jwkToPem('hi'); // $ExpectError +jwkToPem(null); // $ExpectError +jwkToPem({ kty: {} }); // $ExpectError +jwkToPem({ kty: 'foozleberries' }); // $ExpectError + +const ec1: jwkToPem.JWK = { + crv: 'P-256', + kty: 'EC', + x: 'gh9MmXjtmcHFesofqWZ6iuxSdAYgoPVvfJqpv1818lo', + y: '3BDZHsNvKUb5VbyGPqcAFf4FGuPhJ2Xy215oWDw_1jc', +}; +jwkToPem(ec1); // $ExpectType string + +const ec2: jwkToPem.JWK = { + kty: 'EC', + crv: 'P-256', + d: '870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE', +}; +jwkToPem(ec2); // $ExpectType string +jwkToPem(ec2, { private: true }); // $ExpectType string +jwkToPem(ec2, {}); // $ExpectError +jwkToPem(ec2, { foo: 'bar' }); // $ExpectError +jwkToPem(ec2, 'foo'); // $ExpectError + +const ec5: jwkToPem.JWK = { + crv: 'P-384', + kty: 'EC', + x: 'QIRvRhN2MpnTQ4teO4Y_RYFaK2Qlvc2lbhC0vALwrFOy33kUihkNUvHiTaUsp2W3', + y: 'vSA1sCKKzT4UOavStUL2WpwcCflEyDshzy3dc1IZtACUngU2xMDDMsi0gDL9jLiU', +}; +jwkToPem(ec5); // $ExpectType string + +jwkToPem({ kty: 'EC', x: 'foo', y: 'bar' }); // $ExpectError +jwkToPem({ kty: 'EC', crv: {}, x: 'foo', y: 'bar' }); // $ExpectError +jwkToPem({ kty: 'EC', crv: 'P-256', y: 'bar' }); // $ExpectError +jwkToPem({ kty: 'EC', crv: 'P-256', x: {}, y: 'bar' }); // $ExpectError +jwkToPem({ kty: 'EC', crv: 'P-256', x: 'foo' }); // $ExpectError +jwkToPem({ kty: 'EC', crv: 'P-256', x: 'foo', y: {} }); // $ExpectError + +const rsa1: jwkToPem.JWK = { + kty: 'RSA', + n: '...', + e: 'AQAB', +}; +jwkToPem(rsa1); // $ExpectType string + +const rsa2: jwkToPem.JWK = { + kty: 'RSA', + n: '...', + e: 'AQAB', + d: '...', + p: '...', + q: '...', + dp: '...', + dq: '...', + qi: '...', +}; +jwkToPem(rsa2); // $ExpectType string + +jwkToPem({ kty: 'RSA', e: 'AQAB' }); // $ExpectError +jwkToPem({ kty: 'RSA', n: {}, e: 'AQAB' }); // $ExpectError +jwkToPem({ kty: 'RSA', n: 'foo' }); // $ExpectError +jwkToPem({ kty: 'RSA', n: 'foo', e: {} }); // $ExpectError diff --git a/types/jwk-to-pem/tsconfig.json b/types/jwk-to-pem/tsconfig.json new file mode 100644 index 0000000000..6975ea4f39 --- /dev/null +++ b/types/jwk-to-pem/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "jwk-to-pem-tests.ts" + ] +} diff --git a/types/jwk-to-pem/tslint.json b/types/jwk-to-pem/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/jwk-to-pem/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }