@sd-jwt/utils 0.2.1 → 2.0.2-next.26

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 (42) hide show
  1. package/LICENSE +201 -0
  2. package/dist/index.d.mts +35 -0
  3. package/dist/index.d.ts +35 -0
  4. package/dist/index.js +145 -0
  5. package/dist/index.mjs +115 -0
  6. package/package.json +58 -46
  7. package/src/base64url.ts +8 -0
  8. package/src/disclosure.ts +98 -0
  9. package/src/error.ts +16 -0
  10. package/src/index.ts +3 -0
  11. package/src/test/base64url.spec.ts +26 -0
  12. package/src/test/disclosure.spec.ts +141 -0
  13. package/src/test/error.spec.ts +15 -0
  14. package/tsconfig.json +7 -0
  15. package/vitest.config.mts +4 -0
  16. package/build/assert.d.ts +0 -1
  17. package/build/assert.js +0 -16
  18. package/build/assert.js.map +0 -1
  19. package/build/base64url.d.ts +0 -29
  20. package/build/base64url.js +0 -44
  21. package/build/base64url.js.map +0 -1
  22. package/build/getValueByKeyAnyLevel.d.ts +0 -1
  23. package/build/getValueByKeyAnyLevel.js +0 -20
  24. package/build/getValueByKeyAnyLevel.js.map +0 -1
  25. package/build/hasherAlgorithm.d.ts +0 -70
  26. package/build/hasherAlgorithm.js +0 -75
  27. package/build/hasherAlgorithm.js.map +0 -1
  28. package/build/index.d.ts +0 -6
  29. package/build/index.js +0 -23
  30. package/build/index.js.map +0 -1
  31. package/build/isPromise.d.ts +0 -1
  32. package/build/isPromise.js +0 -11
  33. package/build/isPromise.js.map +0 -1
  34. package/build/object.d.ts +0 -5
  35. package/build/object.js +0 -76
  36. package/build/object.js.map +0 -1
  37. package/build/simpleDeepEqual.d.ts +0 -1
  38. package/build/simpleDeepEqual.js +0 -20
  39. package/build/simpleDeepEqual.js.map +0 -1
  40. package/build/swapClaims.d.ts +0 -2
  41. package/build/swapClaims.js +0 -73
  42. package/build/swapClaims.js.map +0 -1
package/build/object.js DELETED
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasByPath = exports.getByPath = exports.deleteByPath = exports.getAllKeys = exports.isObject = void 0;
4
- function isObject(input) {
5
- return typeof input === 'object' && input !== null && !Array.isArray(input);
6
- }
7
- exports.isObject = isObject;
8
- function getAllKeys(object, keys = []) {
9
- if (typeof object !== 'object' || typeof object === null)
10
- return keys;
11
- const record = object;
12
- const objectKeys = Object.keys(record);
13
- const objectValues = Object.values(record);
14
- keys.push(...objectKeys);
15
- for (const objectValue of objectValues) {
16
- if (typeof objectValue === 'object' &&
17
- objectValue !== null &&
18
- !Array.isArray(objectValue)) {
19
- getAllKeys(objectValue, keys);
20
- }
21
- }
22
- return keys;
23
- }
24
- exports.getAllKeys = getAllKeys;
25
- function deleteByPath(object, path) {
26
- let currentObject = object;
27
- const parts = [...path];
28
- const last = parts.pop();
29
- for (const part of parts) {
30
- currentObject = currentObject[part];
31
- if (!currentObject) {
32
- return;
33
- }
34
- }
35
- if (last) {
36
- delete currentObject[last];
37
- }
38
- }
39
- exports.deleteByPath = deleteByPath;
40
- function getByPath(item, path) {
41
- let current = item;
42
- for (const key of path) {
43
- if (Array.isArray(current)) {
44
- const keyAsNumber = Number(key);
45
- if (isNaN(keyAsNumber)) {
46
- throw new Error(`Unable to get ${path.join('.')} from array ${item}. ${key} is not a number.`);
47
- }
48
- if (keyAsNumber >= current.length) {
49
- throw new Error(`Unable to get ${path.join('.')} from array ${item}. ${key} is out of bounds.`);
50
- }
51
- current = current[keyAsNumber];
52
- }
53
- else if (typeof current === 'object' && current !== null) {
54
- if (!(key in current)) {
55
- throw new Error(`Unable to get ${path.join('.')} from ${item}. ${key} does not exists in ${current}.`);
56
- }
57
- current = current[key];
58
- }
59
- else {
60
- throw new Error(`Unable to get ${path.join('.')} from ${item}. ${key} is not an object or array.`);
61
- }
62
- }
63
- return current;
64
- }
65
- exports.getByPath = getByPath;
66
- function hasByPath(item, path) {
67
- try {
68
- getByPath(item, path);
69
- return true;
70
- }
71
- catch (_a) {
72
- return false;
73
- }
74
- }
75
- exports.hasByPath = hasByPath;
76
- //# sourceMappingURL=object.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"object.js","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare function simpleDeepEqual(lhs: unknown, rhs: unknown): boolean;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.simpleDeepEqual = void 0;
4
- function simpleDeepEqual(lhs, rhs) {
5
- if (lhs === rhs)
6
- return true;
7
- if (typeof lhs !== 'object' || typeof rhs !== 'object')
8
- return false;
9
- const l = Object.assign({}, lhs);
10
- const r = Object.assign({}, rhs);
11
- Object.keys(l).forEach((key) => l[key] === undefined && delete l[key]);
12
- Object.keys(r).forEach((key) => r[key] === undefined && delete r[key]);
13
- const keys1 = Object.keys(l);
14
- const keys2 = Object.keys(r);
15
- if (keys1.length !== keys2.length)
16
- return false;
17
- return keys1.every((key) => simpleDeepEqual(l[key], r[key]));
18
- }
19
- exports.simpleDeepEqual = simpleDeepEqual;
20
- //# sourceMappingURL=simpleDeepEqual.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simpleDeepEqual.js","sourceRoot":"","sources":["../src/simpleDeepEqual.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAC,GAAY,EAAE,GAAY;IACtD,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAE5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAEpE,MAAM,CAAC,GAAG,kBAAK,GAAG,CAA6B,CAAA;IAC/C,MAAM,CAAC,GAAG,kBAAK,GAAG,CAA6B,CAAA;IAE/C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAEtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAE/C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAjBD,0CAiBC"}
@@ -1,2 +0,0 @@
1
- import { DisclosureWithDigest } from '@sd-jwt/types';
2
- export declare const swapClaims: (payload: Record<string, unknown>, disclosures: Array<DisclosureWithDigest>, newPayload?: Record<string, unknown>) => Record<string, unknown>;
@@ -1,73 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.swapClaims = void 0;
4
- const shouldInsertDisclosure = (key, value, disclosures) => {
5
- if (key !== '_sd')
6
- return [];
7
- if (!Array.isArray(value))
8
- return [];
9
- const filteredDisclosures = [];
10
- for (const d of disclosures) {
11
- if (value.includes(d.digest)) {
12
- filteredDisclosures.push(d);
13
- }
14
- }
15
- return filteredDisclosures;
16
- };
17
- const shouldIncludeCleartextClaim = (key, value) => key !== '_sd' && key !== '_sd_alg' && typeof value !== 'object';
18
- const swapClaims = (payload, disclosures, newPayload = {}) => {
19
- const entries = Object.entries(payload);
20
- // Loop over de payload
21
- for (let i = 0; i < entries.length; i++) {
22
- const [key, value] = entries[i];
23
- // See whether we have an `_sd` key with an array of disclosures.
24
- const foundDisclosures = shouldInsertDisclosure(key, value, disclosures);
25
- // Add the disclosed items to the pretty payload
26
- foundDisclosures.forEach((d) => {
27
- newPayload[d.key] = d.value;
28
- });
29
- // Skip the rest as `_sd` is a special case
30
- if (key === '_sd') {
31
- continue;
32
- }
33
- // Include all the primitive claims into the new payload
34
- if (shouldIncludeCleartextClaim(key, value)) {
35
- newPayload[key] = value;
36
- continue;
37
- }
38
- if (typeof value === 'object' && Array.isArray(value)) {
39
- newPayload[key] = swapClaimsInsideArray(value, disclosures);
40
- continue;
41
- }
42
- if (typeof value === 'object' &&
43
- value !== null &&
44
- !Array.isArray(value)) {
45
- newPayload[key] = (0, exports.swapClaims)(value, disclosures);
46
- }
47
- }
48
- return newPayload;
49
- };
50
- exports.swapClaims = swapClaims;
51
- const swapClaimsInsideArray = (array, disclosures) => {
52
- const processedArray = [];
53
- for (const el of array) {
54
- if (typeof el === 'object' && el !== null && '...' in el) {
55
- const hash = el['...'];
56
- let disclosureFound = false;
57
- let disclosureValue;
58
- disclosureLoop: for (const d of disclosures) {
59
- if (d.digest === hash && d.key === undefined) {
60
- disclosureValue = d.value;
61
- disclosureFound = true;
62
- break disclosureLoop;
63
- }
64
- }
65
- processedArray.push(disclosureFound ? disclosureValue : el);
66
- }
67
- else {
68
- processedArray.push(el);
69
- }
70
- }
71
- return processedArray;
72
- };
73
- //# sourceMappingURL=swapClaims.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swapClaims.js","sourceRoot":"","sources":["../src/swapClaims.ts"],"names":[],"mappings":"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"}