@nr1e/commons 0.0.3 → 0.0.4-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
- import { stob64s } from './b64.js';
1
+ import { stob64s, tob64s } from './b64.js';
2
+ import * as crypto from 'crypto';
2
3
  test('Test tob64', () => {
3
4
  const str = '"Computer, compute to the last digit the value of pi" -- Spock';
4
5
  let b64s = [
@@ -52,4 +53,18 @@ test('Test tob64', () => {
52
53
  expect(b64s[i]).toBe(stob64s(str.substring(0, str.length - i), { b64chars: 'yui' }));
53
54
  }
54
55
  });
56
+ test('Compare to Node', () => {
57
+ for (let i = 0; i < 100; i++) {
58
+ const bytes = crypto.randomBytes(16);
59
+ const str = tob64s(bytes, { b64chars: 'url' });
60
+ const nodeStr = bytes.toString('base64url');
61
+ expect(str).toEqual(nodeStr);
62
+ }
63
+ for (let i = 0; i < 100; i++) {
64
+ const bytes = crypto.randomBytes(16);
65
+ const str = tob64s(bytes, { b64chars: 'b64' });
66
+ const nodeStr = bytes.toString('base64');
67
+ expect(str).toEqual(nodeStr);
68
+ }
69
+ });
55
70
  //# sourceMappingURL=b64.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"b64.test.js","sourceRoot":"","sources":["../../src/bitsnbytes/b64.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAEjC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;IACtB,MAAM,GAAG,GAAG,gEAAgE,CAAC;IAC7E,IAAI,IAAI,GAAG;QACT,sFAAsF;QACtF,sFAAsF;QACtF,kFAAkF;QAClF,kFAAkF;QAClF,kFAAkF;QAClF,8EAA8E;QAC9E,8EAA8E;QAC9E,8EAA8E;QAC9E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;KAC3E,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACjE;IAED,oCAAoC;IACpC,IAAI,GAAG;QACL,qFAAqF;QACrF,oFAAoF;QACpF,kFAAkF;QAClF,iFAAiF;QACjF,gFAAgF;QAChF,8EAA8E;QAC9E,6EAA6E;QAC7E,4EAA4E;QAC5E,0EAA0E;QAC1E,yEAAyE;QACzE,wEAAwE;KACzE,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC,CAC7D,CAAC;KACH;IAED,oCAAoC;IACpC,IAAI,GAAG;QACL,sFAAsF;QACtF,sFAAsF;QACtF,kFAAkF;QAClF,kFAAkF;QAClF,kFAAkF;QAClF,8EAA8E;QAC9E,8EAA8E;QAC9E,8EAA8E;QAC9E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;KAC3E,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC,CAC7D,CAAC;KACH;AACH,CAAC,CAAC,CAAC","sourcesContent":["import {stob64s} from './b64.js';\n\ntest('Test tob64', () => {\n const str = '\"Computer, compute to the last digit the value of pi\" -- Spock';\n let b64s = [\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvY2s=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvYw==',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3Bv',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3A=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gUw==',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0g',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLQ==',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIg',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSI=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaQ==',\n ];\n for (let i = 0; i < b64s.length; i++) {\n expect(b64s[i]).toBe(stob64s(str.substring(0, str.length - i)));\n }\n\n // Test URL modified base64 encoding\n b64s = [\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvY2s',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvYw',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3Bv',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3A',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gUw',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0g',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLQ',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIg',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSI',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaQ',\n ];\n for (let i = 0; i < b64s.length; i++) {\n expect(b64s[i]).toBe(\n stob64s(str.substring(0, str.length - i), {b64chars: 'url'})\n );\n }\n\n // Test YUI modified base64 encoding\n b64s = [\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvY2s-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvYw--',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3Bv',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3A-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gUw--',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0g',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLQ--',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIg',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSI-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaQ--',\n ];\n for (let i = 0; i < b64s.length; i++) {\n expect(b64s[i]).toBe(\n stob64s(str.substring(0, str.length - i), {b64chars: 'yui'})\n );\n }\n});\n"]}
1
+ {"version":3,"file":"b64.test.js","sourceRoot":"","sources":["../../src/bitsnbytes/b64.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {stob64s, tob64s} from './b64.js';\nimport * as crypto from 'crypto';\n\ntest('Test tob64', () => {\n const str = '\"Computer, compute to the last digit the value of pi\" -- Spock';\n let b64s = [\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvY2s=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvYw==',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3Bv',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3A=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gUw==',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0g',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLQ==',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIg',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSI=',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaQ==',\n ];\n for (let i = 0; i < b64s.length; i++) {\n expect(b64s[i]).toBe(stob64s(str.substring(0, str.length - i)));\n }\n\n // Test URL modified base64 encoding\n b64s = [\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvY2s',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvYw',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3Bv',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3A',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gUw',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0g',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLQ',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIg',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSI',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaQ',\n ];\n for (let i = 0; i < b64s.length; i++) {\n expect(b64s[i]).toBe(\n stob64s(str.substring(0, str.length - i), {b64chars: 'url'})\n );\n }\n\n // Test YUI modified base64 encoding\n b64s = [\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvY2s-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3BvYw--',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3Bv',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gU3A-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0gUw--',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0g',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLS0-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIgLQ--',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSIg',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaSI-',\n 'IkNvbXB1dGVyLCBjb21wdXRlIHRvIHRoZSBsYXN0IGRpZ2l0IHRoZSB2YWx1ZSBvZiBwaQ--',\n ];\n for (let i = 0; i < b64s.length; i++) {\n expect(b64s[i]).toBe(\n stob64s(str.substring(0, str.length - i), {b64chars: 'yui'})\n );\n }\n});\n\ntest('Compare to Node', () => {\n for (let i = 0; i < 100; i++) {\n const bytes = crypto.randomBytes(16);\n const str = tob64s(bytes, {b64chars: 'url'});\n const nodeStr = bytes.toString('base64url');\n expect(str).toEqual(nodeStr);\n }\n for (let i = 0; i < 100; i++) {\n const bytes = crypto.randomBytes(16);\n const str = tob64s(bytes, {b64chars: 'b64'});\n const nodeStr = bytes.toString('base64');\n expect(str).toEqual(nodeStr);\n }\n});\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Generates a state string for use with OAuth2.0 authorization requests.
3
+ *
4
+ * @param len The length of the state string in bytes. Defaults to 16 bytes.
5
+ */
6
+ export declare function generateState(len?: number): string;
7
+ /**
8
+ * Generates a nonce string for use with OAuth2.0 authorization requests.
9
+ *
10
+ * @param len The length of the state string in bytes. Defaults to 16 bytes.
11
+ */
12
+ export declare function generateNonce(len?: number): string;
13
+ /**
14
+ * Generates a secret string for use with OAuth2.0 authorization requests.
15
+ *
16
+ * @param len The length of the state string in bytes. Defaults to 32 bytes.
17
+ */
18
+ export declare function generateSecret(len?: number): string;
19
+ //# sourceMappingURL=crypto-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-functions.d.ts","sourceRoot":"","sources":["../../src/oauth/crypto-functions.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnD"}
@@ -0,0 +1,42 @@
1
+ import * as crypto from 'crypto';
2
+ import { tob64s } from '../bitsnbytes/index.js';
3
+ /**
4
+ * Generates a state string for use with OAuth2.0 authorization requests.
5
+ *
6
+ * @param len The length of the state string in bytes. Defaults to 16 bytes.
7
+ */
8
+ export function generateState(len) {
9
+ if (len && len < 16) {
10
+ throw new Error('State must be at least 16 bytes');
11
+ }
12
+ return tob64s(crypto.randomBytes(len ?? 16), {
13
+ b64chars: 'url',
14
+ });
15
+ }
16
+ /**
17
+ * Generates a nonce string for use with OAuth2.0 authorization requests.
18
+ *
19
+ * @param len The length of the state string in bytes. Defaults to 16 bytes.
20
+ */
21
+ export function generateNonce(len) {
22
+ if (len && len < 16) {
23
+ throw new Error('Nonce must be at least 16 bytes');
24
+ }
25
+ return tob64s(crypto.randomBytes(len ?? 16), {
26
+ b64chars: 'url',
27
+ });
28
+ }
29
+ /**
30
+ * Generates a secret string for use with OAuth2.0 authorization requests.
31
+ *
32
+ * @param len The length of the state string in bytes. Defaults to 32 bytes.
33
+ */
34
+ export function generateSecret(len) {
35
+ if (len && len < 32) {
36
+ throw new Error('Secret must be at least 32 bytes');
37
+ }
38
+ return tob64s(crypto.randomBytes(len ?? 32), {
39
+ b64chars: 'url',
40
+ });
41
+ }
42
+ //# sourceMappingURL=crypto-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-functions.js","sourceRoot":"","sources":["../../src/oauth/crypto-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACpD;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;QAC3C,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACpD;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;QAC3C,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;QAC3C,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import * as crypto from 'crypto';\nimport {tob64s} from '../bitsnbytes/index.js';\n\n/**\n * Generates a state string for use with OAuth2.0 authorization requests.\n *\n * @param len The length of the state string in bytes. Defaults to 16 bytes.\n */\nexport function generateState(len?: number): string {\n if (len && len < 16) {\n throw new Error('State must be at least 16 bytes');\n }\n return tob64s(crypto.randomBytes(len ?? 16), {\n b64chars: 'url',\n });\n}\n\n/**\n * Generates a nonce string for use with OAuth2.0 authorization requests.\n *\n * @param len The length of the state string in bytes. Defaults to 16 bytes.\n */\nexport function generateNonce(len?: number): string {\n if (len && len < 16) {\n throw new Error('Nonce must be at least 16 bytes');\n }\n return tob64s(crypto.randomBytes(len ?? 16), {\n b64chars: 'url',\n });\n}\n\n/**\n * Generates a secret string for use with OAuth2.0 authorization requests.\n *\n * @param len The length of the state string in bytes. Defaults to 32 bytes.\n */\nexport function generateSecret(len?: number): string {\n if (len && len < 32) {\n throw new Error('Secret must be at least 32 bytes');\n }\n return tob64s(crypto.randomBytes(len ?? 32), {\n b64chars: 'url',\n });\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crypto-functions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-functions.test.d.ts","sourceRoot":"","sources":["../../src/oauth/crypto-functions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { generateNonce, generateSecret, generateState, } from './crypto-functions.js';
2
+ test('Test generateState', () => {
3
+ const state = generateState();
4
+ expect(state).toMatch(/^[A-Za-z0-9_-]{22}$/);
5
+ });
6
+ test('Test generateState with custom length', () => {
7
+ const state = generateState(32);
8
+ expect(state).toMatch(/^[A-Za-z0-9_-]{43}$/);
9
+ });
10
+ test('Test generateState with invalid length', () => {
11
+ expect(() => generateState(10)).toThrow('State must be at least 16 bytes');
12
+ });
13
+ test('Test generateNonce', () => {
14
+ const nonce = generateNonce();
15
+ expect(nonce).toMatch(/^[A-Za-z0-9_-]{22}$/);
16
+ });
17
+ test('Test generateNonce with custom length', () => {
18
+ const nonce = generateNonce(32);
19
+ expect(nonce).toMatch(/^[A-Za-z0-9_-]{43}$/);
20
+ });
21
+ test('Test generateNonce with invalid length', () => {
22
+ expect(() => generateNonce(10)).toThrow('Nonce must be at least 16 bytes');
23
+ });
24
+ test('Test generateSecret', () => {
25
+ const secret = generateSecret();
26
+ expect(secret).toMatch(/^[A-Za-z0-9_-]{43}$/);
27
+ });
28
+ test('Test generateSecret with custom length', () => {
29
+ const secret = generateSecret(64);
30
+ expect(secret).toMatch(/^[A-Za-z0-9_-]{86}$/);
31
+ });
32
+ test('Test generateSecret with invalid length', () => {
33
+ expect(() => generateSecret(10)).toThrow('Secret must be at least 32 bytes');
34
+ });
35
+ //# sourceMappingURL=crypto-functions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-functions.test.js","sourceRoot":"","sources":["../../src/oauth/crypto-functions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAC9B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAC9B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC/B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC","sourcesContent":["import {\n generateNonce,\n generateSecret,\n generateState,\n} from './crypto-functions.js';\n\ntest('Test generateState', () => {\n const state = generateState();\n expect(state).toMatch(/^[A-Za-z0-9_-]{22}$/);\n});\n\ntest('Test generateState with custom length', () => {\n const state = generateState(32);\n expect(state).toMatch(/^[A-Za-z0-9_-]{43}$/);\n});\n\ntest('Test generateState with invalid length', () => {\n expect(() => generateState(10)).toThrow('State must be at least 16 bytes');\n});\n\ntest('Test generateNonce', () => {\n const nonce = generateNonce();\n expect(nonce).toMatch(/^[A-Za-z0-9_-]{22}$/);\n});\n\ntest('Test generateNonce with custom length', () => {\n const nonce = generateNonce(32);\n expect(nonce).toMatch(/^[A-Za-z0-9_-]{43}$/);\n});\n\ntest('Test generateNonce with invalid length', () => {\n expect(() => generateNonce(10)).toThrow('Nonce must be at least 16 bytes');\n});\n\ntest('Test generateSecret', () => {\n const secret = generateSecret();\n expect(secret).toMatch(/^[A-Za-z0-9_-]{43}$/);\n});\n\ntest('Test generateSecret with custom length', () => {\n const secret = generateSecret(64);\n expect(secret).toMatch(/^[A-Za-z0-9_-]{86}$/);\n});\n\ntest('Test generateSecret with invalid length', () => {\n expect(() => generateSecret(10)).toThrow('Secret must be at least 32 bytes');\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './crypto-functions.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
package/oauth/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './crypto-functions.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './crypto-functions.js';\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nr1e/commons",
3
3
  "description": "Provides common patterns for validation",
4
- "version": "0.0.3",
4
+ "version": "0.0.4-alpha.1",
5
5
  "type": "module",
6
6
  "author": "NR1E, Inc.",
7
7
  "publishConfig": {
@@ -49,6 +49,10 @@
49
49
  "import": "./lang/index.js",
50
50
  "types": "./lang/index.d.ts"
51
51
  },
52
+ "./oauth": {
53
+ "import": "./oauth/index.js",
54
+ "types": "./oauth/index.d.ts"
55
+ },
52
56
  "./package.json": "./package.json",
53
57
  "./validator": {
54
58
  "import": "./validator/index.js",