@sd-jwt/utils 0.1.2-alpha.0
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.
- package/build/assert.d.ts +1 -0
- package/build/assert.js +16 -0
- package/build/assert.js.map +1 -0
- package/build/base64url.d.ts +28 -0
- package/build/base64url.js +40 -0
- package/build/base64url.js.map +1 -0
- package/build/getValueByKeyAnyLevel.d.ts +1 -0
- package/build/getValueByKeyAnyLevel.js +20 -0
- package/build/getValueByKeyAnyLevel.js.map +1 -0
- package/build/hasherAlgorithm.d.ts +70 -0
- package/build/hasherAlgorithm.js +75 -0
- package/build/hasherAlgorithm.js.map +1 -0
- package/build/index.d.ts +6 -0
- package/build/index.js +23 -0
- package/build/index.js.map +1 -0
- package/build/isPromise.d.ts +1 -0
- package/build/isPromise.js +11 -0
- package/build/isPromise.js.map +1 -0
- package/build/simpleDeepEqual.d.ts +1 -0
- package/build/simpleDeepEqual.js +20 -0
- package/build/simpleDeepEqual.js.map +1 -0
- package/build/swapClaims.d.ts +2 -0
- package/build/swapClaims.js +73 -0
- package/build/swapClaims.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const assertClaimInObject: (object: Record<string, unknown>, claimKey: string, claimValue?: unknown) => void;
|
package/build/assert.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertClaimInObject = void 0;
|
|
4
|
+
const getValueByKeyAnyLevel_1 = require("./getValueByKeyAnyLevel");
|
|
5
|
+
const simpleDeepEqual_1 = require("./simpleDeepEqual");
|
|
6
|
+
const assertClaimInObject = (object, claimKey, claimValue) => {
|
|
7
|
+
const value = (0, getValueByKeyAnyLevel_1.getValueByKeyAnyLevel)(object, claimKey);
|
|
8
|
+
if (!value) {
|
|
9
|
+
throw new Error(`Claim key '${claimKey}' not found in any level`);
|
|
10
|
+
}
|
|
11
|
+
if (claimValue && !(0, simpleDeepEqual_1.simpleDeepEqual)(value, claimValue)) {
|
|
12
|
+
throw new Error(`Claim key '${claimKey}' was found, but values did not match`);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
exports.assertClaimInObject = assertClaimInObject;
|
|
16
|
+
//# sourceMappingURL=assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,uDAAmD;AAE5C,MAAM,mBAAmB,GAAG,CAC/B,MAA+B,EAC/B,QAAgB,EAChB,UAAoB,EACtB,EAAE;IACA,MAAM,KAAK,GAAG,IAAA,6CAAqB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAErD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,0BAA0B,CAAC,CAAA;IACrE,CAAC;IAED,IAAI,UAAU,IAAI,CAAC,IAAA,iCAAe,EAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACX,cAAc,QAAQ,uCAAuC,CAChE,CAAA;IACL,CAAC;AACL,CAAC,CAAA;AAhBY,QAAA,mBAAmB,uBAgB/B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
3
|
+
export declare class Base64url {
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* Encode into base64url string
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
static encode(input: string | Uint8Array | Buffer): string;
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* Encode from JSON into a base64url string
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
static encodeFromJson(input: Record<string, unknown> | Array<unknown>): string;
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* Decode from base64url into JSON
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
static decodeToJson<T extends Record<string, unknown> | Array<unknown> = Record<string, unknown>>(input: string): T;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* Decode from base64url into a byte array
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
static decode(input: string): Uint8Array;
|
|
28
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Base64url = void 0;
|
|
4
|
+
const buffer_1 = require("buffer");
|
|
5
|
+
class Base64url {
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* Encode into base64url string
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
static encode(input) {
|
|
12
|
+
return buffer_1.Buffer.from(input).toString('base64url');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* Encode from JSON into a base64url string
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
static encodeFromJson(input) {
|
|
20
|
+
return buffer_1.Buffer.from(JSON.stringify(input)).toString('base64url');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* Decode from base64url into JSON
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
static decodeToJson(input) {
|
|
28
|
+
return JSON.parse(buffer_1.Buffer.from(input, 'base64url').toString());
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* Decode from base64url into a byte array
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
static decode(input) {
|
|
36
|
+
return Uint8Array.from(buffer_1.Buffer.from(input, 'base64url'));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.Base64url = Base64url;
|
|
40
|
+
//# sourceMappingURL=base64url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64url.js","sourceRoot":"","sources":["../src/base64url.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAE/B,MAAa,SAAS;IAClB;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,KAAmC;QACpD,OAAO,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CACxB,KAA+C;QAE/C,OAAO,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACnE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,YAAY,CAKxB,KAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAM,CAAA;IACtE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,KAAa;QAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;IAC3D,CAAC;CACJ;AA3CD,8BA2CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getValueByKeyAnyLevel: <T = unknown>(obj: Record<string, unknown>, key: string) => T | undefined;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getValueByKeyAnyLevel = void 0;
|
|
4
|
+
const getValueByKeyAnyLevel = (obj, key) => {
|
|
5
|
+
// Check if the current object has the key
|
|
6
|
+
if (obj && obj.hasOwnProperty(key)) {
|
|
7
|
+
return obj[key];
|
|
8
|
+
}
|
|
9
|
+
// If not found in the current object, iterate over its properties
|
|
10
|
+
for (const prop in obj) {
|
|
11
|
+
if (obj.hasOwnProperty(prop) && typeof obj[prop] === 'object') {
|
|
12
|
+
const result = (0, exports.getValueByKeyAnyLevel)(obj[prop], key);
|
|
13
|
+
if (result !== undefined) {
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.getValueByKeyAnyLevel = getValueByKeyAnyLevel;
|
|
20
|
+
//# sourceMappingURL=getValueByKeyAnyLevel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getValueByKeyAnyLevel.js","sourceRoot":"","sources":["../src/getValueByKeyAnyLevel.ts"],"names":[],"mappings":";;;AAAO,MAAM,qBAAqB,GAAG,CACjC,GAA4B,EAC5B,GAAW,EACE,EAAE;IACf,0CAA0C;IAC1C,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,GAAG,CAAM,CAAA;IACxB,CAAC;IAED,kEAAkE;IAClE,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAA,6BAAqB,EAChC,GAAG,CAAC,IAAI,CAA4B,EACpC,GAAG,CACN,CAAA;YACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,MAAW,CAAA;YACtB,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC,CAAA;AArBY,QAAA,qBAAqB,yBAqBjC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export declare enum HasherAlgorithm {
|
|
2
|
+
/**
|
|
3
|
+
* Sha-256: 256 bits. [RFC6920] (current)
|
|
4
|
+
*/
|
|
5
|
+
Sha256 = "sha-256",
|
|
6
|
+
/**
|
|
7
|
+
* Sha-256-128: 128 bits. [RFC6920] (current)
|
|
8
|
+
*/
|
|
9
|
+
Sha256_128 = "sha-256-128",
|
|
10
|
+
/**
|
|
11
|
+
* Sha-256-120: 120 bits. [RFC6920] (current)
|
|
12
|
+
*/
|
|
13
|
+
Sha256_120 = "sha-256-120",
|
|
14
|
+
/**
|
|
15
|
+
* Sha-256-96: 96 bits. [RFC6920] (current)
|
|
16
|
+
*/
|
|
17
|
+
Sha256_96 = "sha-256-96",
|
|
18
|
+
/**
|
|
19
|
+
* Sha-256-64: 64 bits. [RFC6920] (current)
|
|
20
|
+
*/
|
|
21
|
+
Sha256_64 = "sha-256-64",
|
|
22
|
+
/**
|
|
23
|
+
* Sha-256-32: 32 bits. [RFC6920] (current)
|
|
24
|
+
*/
|
|
25
|
+
Sha256_32 = "sha-256-32",
|
|
26
|
+
/**
|
|
27
|
+
* Sha-384: 384 bits. [FIPS 180-4] (current)
|
|
28
|
+
*/
|
|
29
|
+
Sha384 = "sha-384",
|
|
30
|
+
/**
|
|
31
|
+
* Sha-512: 512 bits. [FIPS 180-4] (current)
|
|
32
|
+
*/
|
|
33
|
+
Sha512 = "sha-512",
|
|
34
|
+
/**
|
|
35
|
+
* Sha3-224: 224 bits. [FIPS 202] (current)
|
|
36
|
+
*/
|
|
37
|
+
Sha3_224 = "sha3-224",
|
|
38
|
+
/**
|
|
39
|
+
* Sha3-256: 256 bits. [FIPS 202] (current)
|
|
40
|
+
*/
|
|
41
|
+
Sha3_256 = "sha3-256",
|
|
42
|
+
/**
|
|
43
|
+
* Sha3-384: 384 bits. [FIPS 202] (current)
|
|
44
|
+
*/
|
|
45
|
+
Sha3_384 = "sha3-384",
|
|
46
|
+
/**
|
|
47
|
+
* Sha3-512: 512 bits. [FIPS 202] (current)
|
|
48
|
+
*/
|
|
49
|
+
Sha3_512 = "sha3-512",
|
|
50
|
+
/**
|
|
51
|
+
* Blake2s-256: 256 bits. [RFC7693] (current)
|
|
52
|
+
*/
|
|
53
|
+
Blake2s_256 = "blake2s-256",
|
|
54
|
+
/**
|
|
55
|
+
* Blake2b-256: 256 bits. [RFC7693] (current)
|
|
56
|
+
*/
|
|
57
|
+
Blake2b_256 = "blake2b-256",
|
|
58
|
+
/**
|
|
59
|
+
* Blake2b-512: 512 bits. [RFC7693] (current)
|
|
60
|
+
*/
|
|
61
|
+
Blake2b_512 = "blake2b-512",
|
|
62
|
+
/**
|
|
63
|
+
* K12-256: 256 bits. [draft-irtf-cfrg-kangarootwelve-06] (current)
|
|
64
|
+
*/
|
|
65
|
+
K12_256 = "k12-256",
|
|
66
|
+
/**
|
|
67
|
+
* K12-512: 512 bits. [draft-irtf-cfrg-kangarootwelve-06] (current)
|
|
68
|
+
*/
|
|
69
|
+
K12_512 = "k12-512"
|
|
70
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HasherAlgorithm = void 0;
|
|
4
|
+
var HasherAlgorithm;
|
|
5
|
+
(function (HasherAlgorithm) {
|
|
6
|
+
/**
|
|
7
|
+
* Sha-256: 256 bits. [RFC6920] (current)
|
|
8
|
+
*/
|
|
9
|
+
HasherAlgorithm["Sha256"] = "sha-256";
|
|
10
|
+
/**
|
|
11
|
+
* Sha-256-128: 128 bits. [RFC6920] (current)
|
|
12
|
+
*/
|
|
13
|
+
HasherAlgorithm["Sha256_128"] = "sha-256-128";
|
|
14
|
+
/**
|
|
15
|
+
* Sha-256-120: 120 bits. [RFC6920] (current)
|
|
16
|
+
*/
|
|
17
|
+
HasherAlgorithm["Sha256_120"] = "sha-256-120";
|
|
18
|
+
/**
|
|
19
|
+
* Sha-256-96: 96 bits. [RFC6920] (current)
|
|
20
|
+
*/
|
|
21
|
+
HasherAlgorithm["Sha256_96"] = "sha-256-96";
|
|
22
|
+
/**
|
|
23
|
+
* Sha-256-64: 64 bits. [RFC6920] (current)
|
|
24
|
+
*/
|
|
25
|
+
HasherAlgorithm["Sha256_64"] = "sha-256-64";
|
|
26
|
+
/**
|
|
27
|
+
* Sha-256-32: 32 bits. [RFC6920] (current)
|
|
28
|
+
*/
|
|
29
|
+
HasherAlgorithm["Sha256_32"] = "sha-256-32";
|
|
30
|
+
/**
|
|
31
|
+
* Sha-384: 384 bits. [FIPS 180-4] (current)
|
|
32
|
+
*/
|
|
33
|
+
HasherAlgorithm["Sha384"] = "sha-384";
|
|
34
|
+
/**
|
|
35
|
+
* Sha-512: 512 bits. [FIPS 180-4] (current)
|
|
36
|
+
*/
|
|
37
|
+
HasherAlgorithm["Sha512"] = "sha-512";
|
|
38
|
+
/**
|
|
39
|
+
* Sha3-224: 224 bits. [FIPS 202] (current)
|
|
40
|
+
*/
|
|
41
|
+
HasherAlgorithm["Sha3_224"] = "sha3-224";
|
|
42
|
+
/**
|
|
43
|
+
* Sha3-256: 256 bits. [FIPS 202] (current)
|
|
44
|
+
*/
|
|
45
|
+
HasherAlgorithm["Sha3_256"] = "sha3-256";
|
|
46
|
+
/**
|
|
47
|
+
* Sha3-384: 384 bits. [FIPS 202] (current)
|
|
48
|
+
*/
|
|
49
|
+
HasherAlgorithm["Sha3_384"] = "sha3-384";
|
|
50
|
+
/**
|
|
51
|
+
* Sha3-512: 512 bits. [FIPS 202] (current)
|
|
52
|
+
*/
|
|
53
|
+
HasherAlgorithm["Sha3_512"] = "sha3-512";
|
|
54
|
+
/**
|
|
55
|
+
* Blake2s-256: 256 bits. [RFC7693] (current)
|
|
56
|
+
*/
|
|
57
|
+
HasherAlgorithm["Blake2s_256"] = "blake2s-256";
|
|
58
|
+
/**
|
|
59
|
+
* Blake2b-256: 256 bits. [RFC7693] (current)
|
|
60
|
+
*/
|
|
61
|
+
HasherAlgorithm["Blake2b_256"] = "blake2b-256";
|
|
62
|
+
/**
|
|
63
|
+
* Blake2b-512: 512 bits. [RFC7693] (current)
|
|
64
|
+
*/
|
|
65
|
+
HasherAlgorithm["Blake2b_512"] = "blake2b-512";
|
|
66
|
+
/**
|
|
67
|
+
* K12-256: 256 bits. [draft-irtf-cfrg-kangarootwelve-06] (current)
|
|
68
|
+
*/
|
|
69
|
+
HasherAlgorithm["K12_256"] = "k12-256";
|
|
70
|
+
/**
|
|
71
|
+
* K12-512: 512 bits. [draft-irtf-cfrg-kangarootwelve-06] (current)
|
|
72
|
+
*/
|
|
73
|
+
HasherAlgorithm["K12_512"] = "k12-512";
|
|
74
|
+
})(HasherAlgorithm || (exports.HasherAlgorithm = HasherAlgorithm = {}));
|
|
75
|
+
//# sourceMappingURL=hasherAlgorithm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasherAlgorithm.js","sourceRoot":"","sources":["../src/hasherAlgorithm.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAqEX;AArED,WAAY,eAAe;IACvB;;OAEG;IACH,qCAAkB,CAAA;IAClB;;OAEG;IACH,6CAA0B,CAAA;IAC1B;;OAEG;IACH,6CAA0B,CAAA;IAC1B;;OAEG;IACH,2CAAwB,CAAA;IACxB;;OAEG;IACH,2CAAwB,CAAA;IACxB;;OAEG;IACH,2CAAwB,CAAA;IACxB;;OAEG;IACH,qCAAkB,CAAA;IAClB;;OAEG;IACH,qCAAkB,CAAA;IAClB;;OAEG;IACH,wCAAqB,CAAA;IACrB;;OAEG;IACH,wCAAqB,CAAA;IACrB;;OAEG;IACH,wCAAqB,CAAA;IACrB;;OAEG;IACH,wCAAqB,CAAA;IACrB;;OAEG;IACH,8CAA2B,CAAA;IAC3B;;OAEG;IACH,8CAA2B,CAAA;IAC3B;;OAEG;IACH,8CAA2B,CAAA;IAC3B;;OAEG;IACH,sCAAmB,CAAA;IACnB;;OAEG;IACH,sCAAmB,CAAA;AACvB,CAAC,EArEW,eAAe,+BAAf,eAAe,QAqE1B"}
|
package/build/index.d.ts
ADDED
package/build/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base64url"), exports);
|
|
18
|
+
__exportStar(require("./assert"), exports);
|
|
19
|
+
__exportStar(require("./getValueByKeyAnyLevel"), exports);
|
|
20
|
+
__exportStar(require("./isPromise"), exports);
|
|
21
|
+
__exportStar(require("./swapClaims"), exports);
|
|
22
|
+
__exportStar(require("./hasherAlgorithm"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,2CAAwB;AACxB,0DAAuC;AACvC,8CAA2B;AAC3B,+CAA4B;AAC5B,oDAAiC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const isPromise: <T>(value: T | Promise<T>) => value is Promise<T>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPromise = void 0;
|
|
4
|
+
const isPromise = (value) => value instanceof Promise ||
|
|
5
|
+
(value &&
|
|
6
|
+
typeof value === 'object' &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
'then' in value &&
|
|
9
|
+
value.then === 'function');
|
|
10
|
+
exports.isPromise = isPromise;
|
|
11
|
+
//# sourceMappingURL=isPromise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPromise.js","sourceRoot":"","sources":["../src/isPromise.ts"],"names":[],"mappings":";;;AAAO,MAAM,SAAS,GAAG,CAAI,KAAqB,EAAuB,EAAE,CACvE,KAAK,YAAY,OAAO;IACxB,CAAC,KAAK;QACF,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;AANrB,QAAA,SAAS,aAMY"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const simpleDeepEqual: (lhs: unknown, rhs: unknown) => boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.simpleDeepEqual = void 0;
|
|
4
|
+
const 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) => (0, exports.simpleDeepEqual)(l[key], r[key]));
|
|
18
|
+
};
|
|
19
|
+
exports.simpleDeepEqual = simpleDeepEqual;
|
|
20
|
+
//# sourceMappingURL=simpleDeepEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleDeepEqual.js","sourceRoot":"","sources":["../src/simpleDeepEqual.ts"],"names":[],"mappings":";;;AAAO,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,GAAY,EAAW,EAAE;IACnE,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,IAAA,uBAAe,EAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC,CAAA;AAjBY,QAAA,eAAe,mBAiB3B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swapClaims.js","sourceRoot":"","sources":["../src/swapClaims.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sd-jwt/utils",
|
|
3
|
+
"version": "0.1.2-alpha.0",
|
|
4
|
+
"description": "Utility functions for sd-jwt Draft 06 and sd-jwt-vc Draft 01",
|
|
5
|
+
"license": "(MIT OR Apache-2.0)",
|
|
6
|
+
"author": "Berend Sliedrecht <sliedrecht@berend.io>",
|
|
7
|
+
"readme": "../../README.md",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"jwt",
|
|
10
|
+
"jwt-sd",
|
|
11
|
+
"sd-jwt",
|
|
12
|
+
"sd-jwt-vc",
|
|
13
|
+
"decentralized-identity",
|
|
14
|
+
"ssi",
|
|
15
|
+
"oauth",
|
|
16
|
+
"oauth2",
|
|
17
|
+
"openid-connect"
|
|
18
|
+
],
|
|
19
|
+
"repository": {
|
|
20
|
+
"url": "https://github.com/berendsliedrecht/sd-jwt-ts",
|
|
21
|
+
"type": "git"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/berendsliedrecht/sd-jwt-ts",
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/berendsliedrecht/sd-jwt-ts/issues",
|
|
26
|
+
"email": "sliedrecht@berend.io"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"main": "build/index.js",
|
|
32
|
+
"files": [
|
|
33
|
+
"build",
|
|
34
|
+
"../../LICENSE-MIT",
|
|
35
|
+
"../../LICENSE-APACHE-2.0"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc",
|
|
39
|
+
"release": "release-it"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@sd-jwt/types": "workspace:*",
|
|
43
|
+
"buffer": "*"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "*",
|
|
47
|
+
"ts-node": "*",
|
|
48
|
+
"typescript": "*"
|
|
49
|
+
}
|
|
50
|
+
}
|