@agnostack/verifyd 2.4.0 → 2.5.0-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.
Files changed (63) hide show
  1. package/dist/esm/lib/index.js +4 -0
  2. package/dist/esm/lib/index.js.map +1 -0
  3. package/dist/esm/lib/types.js +2 -0
  4. package/dist/esm/lib/types.js.map +1 -0
  5. package/dist/esm/lib/utils/index.js +2 -0
  6. package/dist/esm/lib/utils/index.js.map +1 -0
  7. package/dist/esm/lib/utils/rawbody.js +36 -0
  8. package/dist/esm/lib/utils/rawbody.js.map +1 -0
  9. package/dist/esm/lib/verification.js +95 -0
  10. package/dist/esm/lib/verification.js.map +1 -0
  11. package/dist/esm/react/hooks/index.js +2 -0
  12. package/dist/esm/react/hooks/index.js.map +1 -0
  13. package/dist/esm/react/hooks/useVerification.js +48 -0
  14. package/dist/esm/react/hooks/useVerification.js.map +1 -0
  15. package/dist/esm/react/index.js +3 -0
  16. package/dist/esm/react/index.js.map +1 -0
  17. package/dist/esm/react/types.js +1 -0
  18. package/dist/esm/react/types.js.map +1 -0
  19. package/dist/esm/shared/WebCrypto.js +351 -0
  20. package/dist/esm/shared/WebCrypto.js.map +1 -0
  21. package/dist/esm/shared/authorization.js +27 -0
  22. package/dist/esm/shared/authorization.js.map +1 -0
  23. package/dist/esm/shared/display.js +430 -0
  24. package/dist/esm/shared/display.js.map +1 -0
  25. package/dist/esm/shared/errors.js +38 -0
  26. package/dist/esm/shared/errors.js.map +1 -0
  27. package/dist/esm/shared/index.js +7 -0
  28. package/dist/esm/shared/index.js.map +1 -0
  29. package/dist/esm/shared/request.js +61 -0
  30. package/dist/esm/shared/request.js.map +1 -0
  31. package/dist/esm/shared/types.js +1 -0
  32. package/dist/esm/shared/types.js.map +1 -0
  33. package/dist/esm/shared/verification.js +95 -0
  34. package/dist/esm/shared/verification.js.map +1 -0
  35. package/dist/shared/WebCrypto.d.ts.map +1 -1
  36. package/dist/shared/WebCrypto.js +19 -7
  37. package/dist/shared/WebCrypto.js.map +1 -1
  38. package/dist/umd/index.js +18 -8
  39. package/dist/umd/index.js.map +1 -1
  40. package/dist/umd/shared/WebCrypto.d.ts.map +1 -1
  41. package/package.json +22 -7
  42. package/node_modules/browser-monads-ts/LICENSE +0 -21
  43. package/node_modules/browser-monads-ts/README.md +0 -46
  44. package/node_modules/browser-monads-ts/dist/browser-monads-ts.cjs.js +0 -2
  45. package/node_modules/browser-monads-ts/dist/browser-monads-ts.cjs.js.map +0 -1
  46. package/node_modules/browser-monads-ts/dist/browser-monads-ts.es.js +0 -12
  47. package/node_modules/browser-monads-ts/dist/browser-monads-ts.es.js.map +0 -1
  48. package/node_modules/browser-monads-ts/dist/index.d.ts +0 -5
  49. package/node_modules/browser-monads-ts/dist/index.d.ts.map +0 -1
  50. package/node_modules/browser-monads-ts/package.json +0 -79
  51. package/node_modules/nothing-mock/LICENSE +0 -21
  52. package/node_modules/nothing-mock/README.md +0 -266
  53. package/node_modules/nothing-mock/dist/nothing-mock.es.js +0 -2
  54. package/node_modules/nothing-mock/dist/nothing-mock.es.js.map +0 -1
  55. package/node_modules/nothing-mock/dist/nothing-mock.js +0 -2
  56. package/node_modules/nothing-mock/dist/nothing-mock.js.map +0 -1
  57. package/node_modules/nothing-mock/dist/nothing-mock.modern.js +0 -2
  58. package/node_modules/nothing-mock/dist/nothing-mock.modern.js.map +0 -1
  59. package/node_modules/nothing-mock/dist/nothing-mock.umd.js +0 -2
  60. package/node_modules/nothing-mock/dist/nothing-mock.umd.js.map +0 -1
  61. package/node_modules/nothing-mock/index.d.ts +0 -6
  62. package/node_modules/nothing-mock/package.json +0 -29
  63. package/node_modules/nothing-mock/src/index.js +0 -15
@@ -0,0 +1,4 @@
1
+ export * from '../shared';
2
+ export * from './utils';
3
+ export * from './verification';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './rawbody';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/utils/index.js"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,36 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { lowercase } from '../../shared/display';
11
+ const getChunkedRawBody = (req) => __awaiter(void 0, void 0, void 0, function* () {
12
+ if (req === null || req === void 0 ? void 0 : req.rawBody) {
13
+ return req.rawBody;
14
+ }
15
+ // TODO: move to req.text() after next 13.5: https://github.com/vercel/next.js/discussions/13405
16
+ try {
17
+ const _getRawBody = (yield import('raw-body')).default;
18
+ if (!req.method || (lowercase(req.method) === 'get')) {
19
+ return undefined;
20
+ }
21
+ return _getRawBody(req).then((_rawBody) => _rawBody === null || _rawBody === void 0 ? void 0 : _rawBody.toString());
22
+ }
23
+ catch (error) {
24
+ console.error(`Failed to import 'raw-body', please ensure the dependency is installed`);
25
+ throw error;
26
+ }
27
+ });
28
+ // TODO: explore returning mutated request object adding on req.rawBody??
29
+ export const ensureRawBody = (req) => __awaiter(void 0, void 0, void 0, function* () {
30
+ return (getChunkedRawBody(req)
31
+ .catch((error) => {
32
+ console.error(`Error getting raw body for '${req === null || req === void 0 ? void 0 : req.url}'`, error);
33
+ throw error;
34
+ }));
35
+ });
36
+ //# sourceMappingURL=rawbody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawbody.js","sourceRoot":"","sources":["../../../../src/lib/utils/rawbody.js"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,MAAM,iBAAiB,GAAG,CAAO,GAAG,EAAE,EAAE;IACtC,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,OAAO,CAAA;IACpB,CAAC;IAED,gGAAgG;IAChG,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAA;QAEtD,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAA;QACvF,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA,CAAA;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,GAAG,EAAE,EAAE;IAAC,OAAA,CAC1C,iBAAiB,CAAC,GAAG,CAAC;SACnB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;QAChE,MAAM,KAAK,CAAA;IACf,CAAC,CAAC,CACH,CAAA;EAAA,CAAA"}
@@ -0,0 +1,95 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { objectToSortedString, ensureString, safeParse, isTrue, } from '../shared/display';
11
+ import { normalizeURIParts, getRequestMethod, VERIFYD_HEADERS, } from '../shared/request';
12
+ import { VerificationError } from '../shared/errors';
13
+ import { WebCrypto } from '../shared/WebCrypto';
14
+ import { ensureRawBody } from './utils';
15
+ export const generateStorableKeyPairs = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* ({ crypto: _crypto, util: _util } = {}) {
16
+ const webCrypto = new WebCrypto({ crypto: _crypto, util: _util });
17
+ const sharedKeyPair = yield webCrypto.generateKeyPair();
18
+ return webCrypto.getStorableKeyPair({
19
+ publicKey: sharedKeyPair.publicKey,
20
+ privateKey: sharedKeyPair.privateKey,
21
+ });
22
+ });
23
+ export const getVerificationHelpers = ({ keyPairs, util: _util, crypto: _crypto, DISABLE_RECRYPTION, } = { keyPairs: {} }) => {
24
+ const webCrypto = new WebCrypto({ crypto: _crypto, util: _util });
25
+ return (req, params) => __awaiter(void 0, void 0, void 0, function* () {
26
+ var _a;
27
+ const { [VERIFYD_HEADERS.PUBLIC_KEY]: _apiKey, [VERIFYD_HEADERS.PUBLIC_KEY.toLowerCase()]: apiKey = _apiKey, [VERIFYD_HEADERS.EPHEMERAL_KEY]: _ephemeralPublicKey, [VERIFYD_HEADERS.EPHEMERAL_KEY.toLowerCase()]: ephemeralPublicKey = _ephemeralPublicKey, [VERIFYD_HEADERS.AUTHORIZATION_TIMESTAMP]: _customAuthTimestamp, [VERIFYD_HEADERS.AUTHORIZATION_TIMESTAMP.toLowerCase()]: customAuthTimestamp = _customAuthTimestamp, [VERIFYD_HEADERS.AUTHORIZATION]: _customAuth, [VERIFYD_HEADERS.AUTHORIZATION.toLowerCase()]: customAuth = _customAuth, } = (_a = req.headers) !== null && _a !== void 0 ? _a : {};
28
+ const { uri: _uri, disableRecryption: _disableRecryption } = params !== null && params !== void 0 ? params : {};
29
+ const uri = _uri !== null && _uri !== void 0 ? _uri : req.url;
30
+ const disableRecryption = isTrue(DISABLE_RECRYPTION) || isTrue(_disableRecryption);
31
+ let isVerifiable = false;
32
+ try {
33
+ const [authProtocol, authSignature] = ensureString(customAuth).split(' ');
34
+ isVerifiable = isTrue(apiKey &&
35
+ ephemeralPublicKey &&
36
+ customAuthTimestamp &&
37
+ authSignature &&
38
+ (authProtocol === 'HMAC-SHA256') &&
39
+ (keyPairs === null || keyPairs === void 0 ? void 0 : keyPairs.shared));
40
+ let verificationKeys;
41
+ const rawBody = yield ensureRawBody(req);
42
+ // NOTE: requestBody should be wind up decrypted when isVerifiable (unless disableRecryption, then will pass through)
43
+ let requestBody = safeParse(rawBody);
44
+ // TEMP!!! remove isVerifiable check once web widget moved to react
45
+ if (isVerifiable) {
46
+ if (!apiKey ||
47
+ !ephemeralPublicKey ||
48
+ !customAuthTimestamp ||
49
+ !authSignature ||
50
+ (authProtocol !== 'HMAC-SHA256') ||
51
+ !(keyPairs === null || keyPairs === void 0 ? void 0 : keyPairs.shared) ||
52
+ (apiKey !== keyPairs.shared.publicKey)) {
53
+ throw new VerificationError('Invalid or missing authorization', { code: 401 });
54
+ }
55
+ verificationKeys = yield webCrypto.getVerificationKeys({
56
+ publicKey: ephemeralPublicKey,
57
+ privateKey: keyPairs.shared.privateKey,
58
+ });
59
+ if (!verificationKeys) {
60
+ throw new VerificationError('Invalid or missing verification', { code: 412 });
61
+ }
62
+ const verificationPayload = objectToSortedString(Object.assign({ method: getRequestMethod(rawBody, req.method), timestamp: customAuthTimestamp, body: requestBody }, normalizeURIParts(uri)));
63
+ const isValid = yield webCrypto.verifyHMAC(verificationPayload, verificationKeys.derivedHMACKey, authSignature);
64
+ if (!isValid) {
65
+ throw new VerificationError('Invalid or missing verification', { code: 403 });
66
+ }
67
+ if (!disableRecryption && requestBody) {
68
+ try {
69
+ const decryptedMessage = yield webCrypto.decryptMessage(requestBody, verificationKeys.derivedSecretKey);
70
+ requestBody = safeParse(decryptedMessage);
71
+ }
72
+ catch (_b) {
73
+ throw new VerificationError('Error decrypting request', { code: 400 });
74
+ }
75
+ }
76
+ }
77
+ const processResponse = (response) => __awaiter(void 0, void 0, void 0, function* () {
78
+ if (disableRecryption || !response || !isVerifiable || !(verificationKeys === null || verificationKeys === void 0 ? void 0 : verificationKeys.derivedSecretKey)) {
79
+ return response;
80
+ }
81
+ return webCrypto.encryptMessage(JSON.stringify(response), verificationKeys.derivedSecretKey);
82
+ });
83
+ return { rawBody, requestBody, processResponse };
84
+ }
85
+ catch (error) {
86
+ console.error(`Error handling request verification for '${uri}'`, {
87
+ error,
88
+ isVerifiable,
89
+ disableRecryption,
90
+ });
91
+ throw error;
92
+ }
93
+ });
94
+ };
95
+ //# sourceMappingURL=verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../src/lib/verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './useVerification';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/hooks/index.js"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,48 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ import { useState } from 'react';
22
+ import { getVerificationKeysData, prepareVerificationRequest, processVerificationResponse, } from '../../shared/verification';
23
+ export const useVerification = (_a = {}) => {
24
+ var { publicKey, disableRecryption } = _a, params = __rest(_a, ["publicKey", "disableRecryption"]);
25
+ const [keysData, setKeysData] = useState();
26
+ const ensureKeysData = () => __awaiter(void 0, void 0, void 0, function* () {
27
+ const _keysData = keysData !== null && keysData !== void 0 ? keysData : (yield getVerificationKeysData(publicKey, params));
28
+ if (_keysData && !keysData) {
29
+ setKeysData(_keysData);
30
+ }
31
+ return _keysData;
32
+ });
33
+ const prepareVerification = (requestPath, requestOptions) => __awaiter(void 0, void 0, void 0, function* () {
34
+ const _keysData = yield ensureKeysData();
35
+ const _prepareVerification = prepareVerificationRequest({ disableRecryption, keysData: _keysData });
36
+ return _prepareVerification(requestPath, requestOptions);
37
+ });
38
+ const processResponse = (encryptedResponse, derivedSecretKey) => __awaiter(void 0, void 0, void 0, function* () {
39
+ const _keysData = yield ensureKeysData();
40
+ const _processResponse = processVerificationResponse({ disableRecryption, keysData: _keysData });
41
+ return _processResponse(encryptedResponse, derivedSecretKey);
42
+ });
43
+ return {
44
+ prepareVerification,
45
+ processResponse,
46
+ };
47
+ };
48
+ //# sourceMappingURL=useVerification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVerification.js","sourceRoot":"","sources":["../../../../src/react/hooks/useVerification.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,2BAA2B,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA8C,EAAE,EAAE,EAAE;QAApD,EAAE,SAAS,EAAE,iBAAiB,OAAkB,EAAb,MAAM,cAAzC,kCAA2C,CAAF;IACvE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAE,CAAA;IAE1C,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,MAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,CAAC,MAAM,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QAChF,IAAI,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,WAAW,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA,CAAA;IAED,MAAM,mBAAmB,GAAG,CAAO,WAAW,EAAE,cAAc,EAAE,EAAE;QAChE,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAA;QACxC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QAEnG,OAAO,oBAAoB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IAC1D,CAAC,CAAA,CAAA;IAED,MAAM,eAAe,GAAG,CAAO,iBAAiB,EAAE,gBAAgB,EAAE,EAAE;QACpE,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAA;QACxC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QAEhG,OAAO,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;IAC9D,CAAC,CAAA,CAAA;IAED,OAAO;QACL,mBAAmB;QACnB,eAAe;KAChB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from '../shared/request'; // HMMMM: why cant we export WebCrypto class??
2
+ export * from './hooks';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA,CAAC,8CAA8C;AAChF,cAAc,SAAS,CAAA"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,351 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { isString, objectEmpty, ensureString, ensureArray, } from './display';
11
+ import { CryptoError } from './errors';
12
+ export class WebCrypto {
13
+ constructor({ crypto: _crypto, util: _util } = {}) {
14
+ this._crypto = _crypto !== null && _crypto !== void 0 ? _crypto : {};
15
+ this._util = _util !== null && _util !== void 0 ? _util : {};
16
+ }
17
+ get subtle() {
18
+ var _a;
19
+ return (_a = this._crypto) === null || _a === void 0 ? void 0 : _a.subtle;
20
+ }
21
+ getWebCrypto() {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ var _a, _b, _c, _d;
24
+ if (!((_a = this._crypto) === null || _a === void 0 ? void 0 : _a.subtle)) {
25
+ // 1. Try globalThis.crypto (available in all browsers and Node 18+)
26
+ if ((typeof globalThis !== 'undefined') && ((_b = globalThis.crypto) === null || _b === void 0 ? void 0 : _b.subtle)) {
27
+ this._crypto = globalThis.crypto;
28
+ }
29
+ }
30
+ // 2. If still no subtle, fall back to polyfills (Node.js < 18, unusual environments)
31
+ if (!((_c = this._crypto) === null || _c === void 0 ? void 0 : _c.subtle)) {
32
+ try {
33
+ this._crypto = (yield import('isomorphic-webcrypto')).default;
34
+ }
35
+ catch (_ignore) {
36
+ console.info('Failed to import isomorphic-webcrypto, retrying w/ node crypto');
37
+ try {
38
+ this._crypto = (yield import('crypto')).default;
39
+ }
40
+ catch (error) {
41
+ // eslint-disable-next-line max-len
42
+ console.error(`Failed to import node crypto, ensure 'isomorphic-webcrypto' (or node 'crypto') is installed and/or pass in implementation via 'new WebCrypto({ crypto })'`);
43
+ throw error;
44
+ }
45
+ }
46
+ }
47
+ if (!((_d = this._crypto) === null || _d === void 0 ? void 0 : _d.subtle)) {
48
+ throw new CryptoError('Invalid crypto, missing subtle');
49
+ }
50
+ return this._crypto;
51
+ });
52
+ }
53
+ getTextDecoder() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ var _a;
56
+ if ((_a = this._util) === null || _a === void 0 ? void 0 : _a.TextDecoder) {
57
+ return this._util.TextDecoder;
58
+ }
59
+ if ((typeof globalThis !== 'undefined') && (typeof globalThis.TextDecoder === 'function')) {
60
+ return globalThis.TextDecoder;
61
+ }
62
+ if ((typeof window !== 'undefined') && (typeof window.TextDecoder === 'function')) {
63
+ return window.TextDecoder;
64
+ }
65
+ try {
66
+ const TextDecoder = (yield import('util')).TextDecoder;
67
+ this._util.TextDecoder = TextDecoder;
68
+ return TextDecoder;
69
+ }
70
+ catch (error) {
71
+ console.error(`Failed to import 'utils.TextDecoder', ensure 'util' is available and/or pass in implementation via 'new WebCrypto({ util })'`);
72
+ throw error;
73
+ }
74
+ });
75
+ }
76
+ getTextEncoder() {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ var _a;
79
+ if ((_a = this._util) === null || _a === void 0 ? void 0 : _a.TextEncoder) {
80
+ return this._util.TextEncoder;
81
+ }
82
+ if ((typeof globalThis !== 'undefined') && (typeof globalThis.TextEncoder === 'function')) {
83
+ return globalThis.TextEncoder;
84
+ }
85
+ if ((typeof window !== 'undefined') && (typeof window.TextEncoder === 'function')) {
86
+ return window.TextEncoder;
87
+ }
88
+ try {
89
+ const TextEncoder = (yield import('util')).TextEncoder;
90
+ this._util.TextEncoder = TextEncoder;
91
+ return TextEncoder;
92
+ }
93
+ catch (error) {
94
+ console.error(`Failed to import 'utils.TextEncoder', ensure 'util' is available and/or pass in implementation via 'new WebCrypto({ util })'`);
95
+ throw error;
96
+ }
97
+ });
98
+ }
99
+ timingSafeEqual(value1, value2) {
100
+ if ((value1 == undefined) ||
101
+ (value2 == undefined) ||
102
+ (value1.length !== value2.length)) {
103
+ return false;
104
+ }
105
+ let result = 0;
106
+ // eslint-disable-next-line no-plusplus
107
+ for (let i = 0; i < value1.length; i++) {
108
+ // eslint-disable-next-line no-bitwise
109
+ result |= value1[i] ^ value2[i];
110
+ }
111
+ return (result === 0);
112
+ }
113
+ stringToHex(stringValue) {
114
+ return (Array.from(ensureString(stringValue), (char) => (char.charCodeAt(0).toString(16).padStart(2, '0'))).join(''));
115
+ }
116
+ hexToString(hexValue) {
117
+ if (!isString(hexValue)) {
118
+ throw new CryptoError('hexValue must be a string');
119
+ }
120
+ if (!/^(?:[0-9a-f]{2})+$/.test(hexValue)) {
121
+ throw new CryptoError('hexValue must be a valid hex string');
122
+ }
123
+ return ensureArray(hexValue.match(/.{1,2}/g))
124
+ .map((byte) => String.fromCharCode(parseInt(byte, 16)))
125
+ .join('');
126
+ }
127
+ arrayBufferToString(arrayBuffer) {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ const uint8Array = new Uint8Array(arrayBuffer);
130
+ const Decoder = yield this.getTextDecoder();
131
+ return new Decoder().decode(uint8Array);
132
+ });
133
+ }
134
+ arrayToArrayBuffer(array) {
135
+ return ((ArrayBuffer.from != undefined)
136
+ ? ArrayBuffer.from(array)
137
+ : new Uint8Array(array).buffer);
138
+ }
139
+ ensureArrayBuffer(arrayOrArrayBuffer) {
140
+ return ((arrayOrArrayBuffer instanceof ArrayBuffer)
141
+ ? arrayOrArrayBuffer
142
+ : this.arrayToArrayBuffer(arrayOrArrayBuffer));
143
+ }
144
+ getKeyOperations(keyType) {
145
+ switch (keyType) {
146
+ case 'paired':
147
+ case 'private':
148
+ case 'privateKey': {
149
+ return ['deriveKey'];
150
+ }
151
+ case 'secret':
152
+ case 'secretKey':
153
+ case 'sharedSecret': {
154
+ return ['encrypt', 'decrypt'];
155
+ }
156
+ default: {
157
+ return [];
158
+ }
159
+ }
160
+ }
161
+ getKeyAlgorythm(keyType) {
162
+ switch (keyType) {
163
+ case 'derivedKey':
164
+ case 'derived':
165
+ case 'secret':
166
+ case 'secretKey':
167
+ case 'sharedSecret': {
168
+ return {
169
+ name: 'AES-GCM',
170
+ };
171
+ }
172
+ default: {
173
+ return {
174
+ name: 'ECDH',
175
+ namedCurve: 'P-256',
176
+ };
177
+ }
178
+ }
179
+ }
180
+ generateKeyPair() {
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ const crypto = yield this.getWebCrypto();
183
+ const keyPair = yield crypto.subtle.generateKey(this.getKeyAlgorythm('paired'), true, this.getKeyOperations('paired'));
184
+ return keyPair;
185
+ });
186
+ }
187
+ generateSharedSecret() {
188
+ return __awaiter(this, void 0, void 0, function* () {
189
+ const crypto = yield this.getWebCrypto();
190
+ const keyPair = yield crypto.subtle.generateKey(this.getKeyAlgorythm('sharedSecret'), true, this.getKeyOperations('sharedSecret'));
191
+ return keyPair;
192
+ });
193
+ }
194
+ generateHMAC(message, derivedKey) {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ if (!message || !derivedKey) {
197
+ return undefined;
198
+ }
199
+ const crypto = yield this.getWebCrypto();
200
+ const Encoder = yield this.getTextEncoder();
201
+ const signature = yield crypto.subtle.sign('HMAC', derivedKey, new Encoder().encode(message));
202
+ return this.stringToHex(this.arrayBufferToString(signature));
203
+ });
204
+ }
205
+ verifyHMAC(message, derivedKey, verifiableHMAC) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ const calculatedHMAC = yield this.generateHMAC(message, derivedKey);
208
+ return this.timingSafeEqual(calculatedHMAC, verifiableHMAC);
209
+ });
210
+ }
211
+ // NOTE: intentionally separated out as async to be able to .catch
212
+ getStorableKey(key) {
213
+ return __awaiter(this, void 0, void 0, function* () {
214
+ const crypto = yield this.getWebCrypto();
215
+ const exportedJWK = yield crypto.subtle.exportKey('jwk', key);
216
+ return this.stringToHex(JSON.stringify(exportedJWK));
217
+ });
218
+ }
219
+ // NOTE: intentionally separated out as async to be able to .catch
220
+ parseStorableHex(storableHex) {
221
+ return __awaiter(this, void 0, void 0, function* () {
222
+ return JSON.parse(this.hexToString(storableHex) || '{}');
223
+ });
224
+ }
225
+ restoreStorableKey(keyType, storableHex) {
226
+ return __awaiter(this, void 0, void 0, function* () {
227
+ // eslint-disable-next-line eqeqeq
228
+ if (storableHex == undefined) {
229
+ return undefined;
230
+ }
231
+ const crypto = yield this.getWebCrypto();
232
+ const exportedJWK = yield this.parseStorableHex(storableHex).catch((ignore) => {
233
+ console.error('Failed to parse storable hex value', ignore);
234
+ return undefined;
235
+ });
236
+ if (objectEmpty(exportedJWK)) {
237
+ return undefined;
238
+ }
239
+ return crypto.subtle.importKey('jwk', exportedJWK, this.getKeyAlgorythm(keyType), true, this.getKeyOperations(keyType));
240
+ });
241
+ }
242
+ getStorableKeyPair(keyPair) {
243
+ return __awaiter(this, void 0, void 0, function* () {
244
+ const storableKeys = {};
245
+ // eslint-disable-next-line no-restricted-syntax
246
+ for (const [keyType, key] of Object.entries(keyPair)) {
247
+ // eslint-disable-next-line no-await-in-loop
248
+ storableKeys[keyType] = yield this.getStorableKey(key);
249
+ }
250
+ return storableKeys;
251
+ });
252
+ }
253
+ restoreStorableKeyPair(keyPair) {
254
+ return __awaiter(this, void 0, void 0, function* () {
255
+ const restoredKeys = {};
256
+ // eslint-disable-next-line no-restricted-syntax
257
+ for (const [keyType, key] of Object.entries(keyPair)) {
258
+ // eslint-disable-next-line no-await-in-loop
259
+ restoredKeys[keyType] = yield this.restoreStorableKey(keyType, key);
260
+ }
261
+ return restoredKeys;
262
+ });
263
+ }
264
+ deriveSharedKey(_a) {
265
+ return __awaiter(this, arguments, void 0, function* ({ publicKey, privateKey }) {
266
+ if (!publicKey || !privateKey) {
267
+ return undefined;
268
+ }
269
+ const crypto = yield this.getWebCrypto();
270
+ const derivedKey = yield crypto.subtle.deriveKey({
271
+ name: 'ECDH',
272
+ public: publicKey,
273
+ }, privateKey, {
274
+ name: 'AES-GCM',
275
+ length: 256,
276
+ }, true, ['encrypt', 'decrypt']);
277
+ return derivedKey;
278
+ });
279
+ }
280
+ deriveHMACKey(_a) {
281
+ return __awaiter(this, arguments, void 0, function* ({ publicKey, privateKey }) {
282
+ if (!publicKey || !privateKey) {
283
+ return undefined;
284
+ }
285
+ const crypto = yield this.getWebCrypto();
286
+ const derivedKey = yield crypto.subtle.deriveKey({
287
+ name: 'ECDH',
288
+ public: publicKey,
289
+ }, privateKey, {
290
+ name: 'HMAC',
291
+ hash: { name: 'SHA-256' },
292
+ length: 256, // Adjusted key length, e.g., 128 bits
293
+ }, true, ['sign', 'verify']);
294
+ return derivedKey;
295
+ });
296
+ }
297
+ getVerificationKeys(_a) {
298
+ return __awaiter(this, arguments, void 0, function* ({ publicKey, privateKey }) {
299
+ if (!publicKey || !privateKey) {
300
+ return {};
301
+ }
302
+ const sharedKeyPair = yield this.restoreStorableKeyPair({ publicKey, privateKey });
303
+ const derivedHMACKey = yield this.deriveHMACKey(sharedKeyPair);
304
+ const derivedSecretKey = yield this.deriveSharedKey(sharedKeyPair);
305
+ return {
306
+ derivedSecretKey,
307
+ derivedHMACKey,
308
+ };
309
+ });
310
+ }
311
+ encryptMessage(decryptedMessage, derivedKey) {
312
+ return __awaiter(this, void 0, void 0, function* () {
313
+ if (!decryptedMessage || !derivedKey) {
314
+ return undefined;
315
+ }
316
+ const crypto = yield this.getWebCrypto();
317
+ const iv = crypto.getRandomValues(new Uint8Array(12));
318
+ const Encoder = yield this.getTextEncoder();
319
+ const encodedMessage = new Encoder().encode(decryptedMessage);
320
+ const ciphertext = yield crypto.subtle.encrypt({
321
+ name: 'AES-GCM',
322
+ iv,
323
+ }, derivedKey, encodedMessage);
324
+ const encryptedMessage = new Uint8Array([
325
+ ...iv,
326
+ ...new Uint8Array(ciphertext)
327
+ ]);
328
+ return Array.from(encryptedMessage);
329
+ });
330
+ }
331
+ decryptMessage(encryptedMessage, derivedKey) {
332
+ return __awaiter(this, void 0, void 0, function* () {
333
+ if (!encryptedMessage || !derivedKey) {
334
+ return undefined;
335
+ }
336
+ const crypto = yield this.getWebCrypto();
337
+ // NOTE: this presumed an array or arrayBuffer coming in as encryptedMessage (will fail w/ IV error if its a string)
338
+ const encryptedArrayBuffer = this.ensureArrayBuffer(encryptedMessage);
339
+ const iv = encryptedArrayBuffer.slice(0, 12);
340
+ const ciphertext = encryptedArrayBuffer.slice(12);
341
+ const decryptedArrayBuffer = yield crypto.subtle.decrypt({
342
+ name: 'AES-GCM',
343
+ iv,
344
+ }, derivedKey, ciphertext);
345
+ const Decoder = yield this.getTextDecoder();
346
+ const decryptedMessage = new Decoder().decode(decryptedArrayBuffer);
347
+ return decryptedMessage;
348
+ });
349
+ }
350
+ }
351
+ //# sourceMappingURL=WebCrypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebCrypto.js","sourceRoot":"","sources":["../../../src/shared/WebCrypto.js"],"names":[],"mappings":"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"}