@suveren/gateway 0.7.6 → 0.8.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/content/integrations/mollie.json +103 -28
- package/dist/mcp-server/http.mjs +228 -118
- package/dist/ui/assets/{index-CsrM6RQr.js → index-BFnSVa9N.js} +22 -22
- package/dist/ui/index.html +1 -1
- package/node_modules/@hap/core/dist/index.d.mts +29 -6
- package/node_modules/@hap/core/dist/index.d.ts +29 -6
- package/node_modules/@hap/core/dist/index.js +54 -8
- package/node_modules/@hap/core/dist/index.mjs +53 -8
- package/node_modules/@hap/core/package.json +2 -1
- package/node_modules/@hap/core/src/frame.ts +115 -14
- package/node_modules/@hap/core/src/gatekeeper.ts +26 -0
- package/node_modules/@hap/core/src/types.ts +7 -1
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/buffer.buffer.d.ts +5 -0
- package/node_modules/@types/node/crypto.d.ts +0 -2
- package/node_modules/@types/node/dgram.d.ts +119 -4
- package/node_modules/@types/node/ffi.d.ts +1 -1
- package/node_modules/@types/node/fs/promises.d.ts +61 -65
- package/node_modules/@types/node/fs.d.ts +86 -76
- package/node_modules/@types/node/http.d.ts +1 -1
- package/node_modules/@types/node/http2.d.ts +2 -2
- package/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/node/inspector.d.ts +2 -1
- package/node_modules/@types/node/net.d.ts +108 -16
- package/node_modules/@types/node/package.json +2 -2
- package/node_modules/@types/node/quic.d.ts +37 -11
- package/node_modules/@types/node/stream/iter.d.ts +4 -4
- package/node_modules/@types/node/tls.d.ts +24 -0
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
- package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
- package/node_modules/@types/node/tty.d.ts +4 -3
- package/node_modules/@types/node/vfs.d.ts +210 -0
- package/node_modules/@types/node/vm.d.ts +1 -1
- package/node_modules/express-rate-limit/dist/index.cjs +6 -3
- package/node_modules/express-rate-limit/dist/index.d.cts +11 -0
- package/node_modules/express-rate-limit/dist/index.d.mts +11 -0
- package/node_modules/express-rate-limit/dist/index.d.ts +11 -0
- package/node_modules/express-rate-limit/dist/index.mjs +6 -3
- package/node_modules/express-rate-limit/{license.md → license} +7 -6
- package/node_modules/express-rate-limit/package.json +5 -5
- package/node_modules/express-rate-limit/readme.md +1 -0
- package/node_modules/fast-uri/index.js +20 -5
- package/node_modules/fast-uri/lib/utils.js +8 -1
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
- package/node_modules/ip-address/README.md +92 -82
- package/node_modules/ip-address/dist/common.d.ts +20 -0
- package/node_modules/ip-address/dist/common.js +36 -0
- package/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/ip-address/dist/ipv4.d.ts +50 -0
- package/node_modules/ip-address/dist/ipv4.js +75 -0
- package/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/ip-address/dist/ipv6.d.ts +79 -10
- package/node_modules/ip-address/dist/ipv6.js +120 -30
- package/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
- package/node_modules/ip-address/dist/v4/constants.js +40 -1
- package/node_modules/ip-address/dist/v4/constants.js.map +1 -1
- package/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
- package/node_modules/ip-address/dist/v6/constants.js +47 -1
- package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +6 -17
- package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +11 -34
- package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +15 -35
- package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -8
- package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +5 -5
- package/node_modules/jose/dist/types/jwks/local.d.ts +6 -10
- package/node_modules/jose/dist/types/jwks/remote.d.ts +13 -24
- package/node_modules/jose/dist/types/jws/compact/sign.d.ts +5 -10
- package/node_modules/jose/dist/types/jws/compact/verify.d.ts +9 -18
- package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +7 -16
- package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +9 -18
- package/node_modules/jose/dist/types/jws/general/sign.d.ts +11 -21
- package/node_modules/jose/dist/types/jws/general/verify.d.ts +9 -18
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +10 -20
- package/node_modules/jose/dist/types/jwt/encrypt.d.ts +6 -13
- package/node_modules/jose/dist/types/jwt/sign.d.ts +5 -6
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -14
- package/node_modules/jose/dist/types/jwt/verify.d.ts +9 -19
- package/node_modules/jose/dist/types/key/export.d.ts +4 -4
- package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +6 -8
- package/node_modules/jose/dist/types/key/generate_secret.d.ts +4 -11
- package/node_modules/jose/dist/types/key/import.d.ts +10 -17
- package/node_modules/jose/dist/types/types.d.ts +44 -84
- package/node_modules/jose/dist/types/util/base64url.d.ts +2 -2
- package/node_modules/jose/dist/types/util/decode_jwt.d.ts +3 -10
- package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -4
- package/node_modules/jose/dist/types/util/errors.d.ts +26 -53
- package/node_modules/jose/dist/webapi/index.js +70 -32
- package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +7 -8
- package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +42 -48
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -14
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +53 -64
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +121 -169
- package/node_modules/jose/dist/webapi/jwk/embedded.js +30 -32
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +54 -70
- package/node_modules/jose/dist/webapi/jwks/local.js +47 -64
- package/node_modules/jose/dist/webapi/jwks/remote.js +88 -136
- package/node_modules/jose/dist/webapi/jws/compact/sign.js +21 -21
- package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +29 -31
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +21 -24
- package/node_modules/jose/dist/webapi/jws/general/sign.js +61 -72
- package/node_modules/jose/dist/webapi/jws/general/verify.js +45 -69
- package/node_modules/jose/dist/webapi/jwt/decrypt.js +13 -20
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +57 -70
- package/node_modules/jose/dist/webapi/jwt/sign.js +17 -16
- package/node_modules/jose/dist/webapi/jwt/unsecured.js +32 -40
- package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
- package/node_modules/jose/dist/webapi/key/export.js +32 -37
- package/node_modules/jose/dist/webapi/key/generate_key_pair.js +40 -48
- package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -40
- package/node_modules/jose/dist/webapi/key/import.js +52 -56
- package/node_modules/jose/dist/webapi/lib/asn1.js +130 -169
- package/node_modules/jose/dist/webapi/lib/base64.js +18 -20
- package/node_modules/jose/dist/webapi/lib/buffer_utils.js +34 -38
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +79 -115
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +24 -25
- package/node_modules/jose/dist/webapi/lib/deflate.js +45 -47
- package/node_modules/jose/dist/webapi/lib/helpers.js +40 -37
- package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +10 -24
- package/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -15
- package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +106 -93
- package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +207 -230
- package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +104 -138
- package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +17 -18
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -16
- package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
- package/node_modules/jose/dist/webapi/lib/jws_sign.js +50 -75
- package/node_modules/jose/dist/webapi/lib/jws_verify.js +80 -125
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +123 -209
- package/node_modules/jose/dist/webapi/lib/key.js +84 -136
- package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
- package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
- package/node_modules/jose/dist/webapi/lib/key_management.js +200 -231
- package/node_modules/jose/dist/webapi/lib/key_options.js +7 -5
- package/node_modules/jose/dist/webapi/lib/options.js +55 -68
- package/node_modules/jose/dist/webapi/lib/signing.js +18 -22
- package/node_modules/jose/dist/webapi/lib/type_checks.js +26 -29
- package/node_modules/jose/dist/webapi/util/base64url.js +26 -35
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
- package/node_modules/jose/dist/webapi/util/errors.js +94 -84
- package/node_modules/jose/package.json +17 -81
- package/package.json +2 -2
- package/profiles/calendar/0.5.profile.json +190 -0
- package/profiles/charge/0.5.profile.json +210 -0
- package/profiles/customers/0.7.profile.json +157 -0
- package/profiles/deploy/0.9.profile.json +176 -0
- package/profiles/email/0.6.profile.json +208 -0
- package/profiles/index.json +9 -1
- package/profiles/publish/0.5.profile.json +186 -0
- package/profiles/purchase/0.5.profile.json +231 -0
- package/profiles/records/0.5.profile.json +117 -0
|
@@ -1,76 +1,65 @@
|
|
|
1
|
-
import { createSignature } from
|
|
2
|
-
import { JWSInvalid } from
|
|
3
|
-
import { assertNotSet } from
|
|
1
|
+
import { createSignature } from "../../lib/jws_sign.js";
|
|
2
|
+
import { JWSInvalid } from "../../util/errors.js";
|
|
3
|
+
import { assertNotSet } from "../../lib/helpers.js";
|
|
4
4
|
class IndividualSignature {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
setProtectedHeader
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return this.#parent.sign(...args);
|
|
26
|
-
}
|
|
27
|
-
done() {
|
|
28
|
-
return this.#parent;
|
|
29
|
-
}
|
|
5
|
+
#parent;
|
|
6
|
+
state;
|
|
7
|
+
constructor(sig, key, options) {
|
|
8
|
+
this.#parent = sig, this.state = [void 0, void 0, key, options?.crit];
|
|
9
|
+
}
|
|
10
|
+
setProtectedHeader(protectedHeader) {
|
|
11
|
+
return assertNotSet(this.state[0], "setProtectedHeader"), this.state[0] = protectedHeader, this;
|
|
12
|
+
}
|
|
13
|
+
setUnprotectedHeader(unprotectedHeader) {
|
|
14
|
+
return assertNotSet(this.state[1], "setUnprotectedHeader"), this.state[1] = unprotectedHeader, this;
|
|
15
|
+
}
|
|
16
|
+
addSignature(...args) {
|
|
17
|
+
return this.#parent.addSignature(...args);
|
|
18
|
+
}
|
|
19
|
+
sign(...args) {
|
|
20
|
+
return this.#parent.sign(...args);
|
|
21
|
+
}
|
|
22
|
+
done() {
|
|
23
|
+
return this.#parent;
|
|
24
|
+
}
|
|
30
25
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}, key);
|
|
65
|
-
if (b64 === undefined) {
|
|
66
|
-
b64 = signatureB64;
|
|
67
|
-
jws.payload = payload;
|
|
68
|
-
}
|
|
69
|
-
else if (b64 !== signatureB64) {
|
|
70
|
-
throw new JWSInvalid('inconsistent use of JWS Unencoded Payload (RFC7797)');
|
|
71
|
-
}
|
|
72
|
-
jws.signatures.push(rest);
|
|
73
|
-
}
|
|
74
|
-
return jws;
|
|
26
|
+
class GeneralSign {
|
|
27
|
+
#payload;
|
|
28
|
+
#signatures = [];
|
|
29
|
+
constructor(payload) {
|
|
30
|
+
this.#payload = payload;
|
|
31
|
+
}
|
|
32
|
+
addSignature(key, options) {
|
|
33
|
+
const signature = new IndividualSignature(this, key, options);
|
|
34
|
+
return this.#signatures.push(signature), signature;
|
|
35
|
+
}
|
|
36
|
+
async sign() {
|
|
37
|
+
if (!this.#signatures.length)
|
|
38
|
+
throw new JWSInvalid("at least one signature must be added");
|
|
39
|
+
if (!(this.#payload instanceof Uint8Array))
|
|
40
|
+
throw new TypeError("payload must be an instance of Uint8Array");
|
|
41
|
+
const jws = {
|
|
42
|
+
signatures: [],
|
|
43
|
+
payload: ""
|
|
44
|
+
}, encoded = [];
|
|
45
|
+
let b64;
|
|
46
|
+
for (let i = 0; i < this.#signatures.length; i++) {
|
|
47
|
+
const signature = this.#signatures[i], [protectedHeader, unprotectedHeader, key, crit] = signature.state, [{ payload, ...rest }, signatureB64] = await createSignature({
|
|
48
|
+
payload: this.#payload,
|
|
49
|
+
protectedHeader,
|
|
50
|
+
unprotectedHeader,
|
|
51
|
+
crit,
|
|
52
|
+
encoded
|
|
53
|
+
}, key);
|
|
54
|
+
if (b64 === void 0)
|
|
55
|
+
b64 = signatureB64, jws.payload = payload;
|
|
56
|
+
else if (b64 !== signatureB64)
|
|
57
|
+
throw new JWSInvalid("inconsistent use of JWS Unencoded Payload (RFC7797)");
|
|
58
|
+
jws.signatures.push(rest);
|
|
75
59
|
}
|
|
60
|
+
return jws;
|
|
61
|
+
}
|
|
76
62
|
}
|
|
63
|
+
export {
|
|
64
|
+
GeneralSign
|
|
65
|
+
};
|
|
@@ -1,74 +1,50 @@
|
|
|
1
|
-
import { encodeJsonUnencodedPayload, parseProtectedHeader, prepareVerify, snapshotJws, verifySignature, verifyResult
|
|
2
|
-
import { JWSInvalid, JWSSignatureVerificationFailed } from
|
|
3
|
-
import { isObject } from
|
|
1
|
+
import { encodeJsonUnencodedPayload, parseProtectedHeader, prepareVerify, snapshotJws, verifySignature, verifyResult } from "../../lib/jws_verify.js";
|
|
2
|
+
import { JWSInvalid, JWSSignatureVerificationFailed } from "../../util/errors.js";
|
|
3
|
+
import { isObject } from "../../lib/type_checks.js";
|
|
4
4
|
function snapshotSignature(signature, payload) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return [
|
|
19
|
-
jws,
|
|
20
|
-
protectedHeader,
|
|
21
|
-
Array.isArray(crit) && crit.includes('b64')
|
|
22
|
-
? typeof b64 === 'boolean'
|
|
23
|
-
? b64
|
|
24
|
-
? 1
|
|
25
|
-
: 2
|
|
26
|
-
: 0
|
|
27
|
-
: 1,
|
|
28
|
-
];
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
5
|
+
try {
|
|
6
|
+
const jws = snapshotJws(signature, [payload]), { protected: encodedProtected, header, signature: encodedSignature } = jws;
|
|
7
|
+
if (encodedProtected === void 0 && header === void 0 || encodedProtected !== void 0 && typeof encodedProtected != "string" || typeof encodedSignature != "string" || header !== void 0 && !isObject(header))
|
|
8
|
+
return;
|
|
9
|
+
const protectedHeader = parseProtectedHeader(encodedProtected), { b64, crit } = protectedHeader;
|
|
10
|
+
return [
|
|
11
|
+
jws,
|
|
12
|
+
protectedHeader,
|
|
13
|
+
Array.isArray(crit) && crit.includes("b64") ? typeof b64 == "boolean" ? b64 ? 1 : 2 : 0 : 1
|
|
14
|
+
];
|
|
15
|
+
} catch {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
33
18
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
19
|
+
async function generalVerify(jws, key, options) {
|
|
20
|
+
if (!isObject(jws))
|
|
21
|
+
throw new JWSInvalid("General JWS must be an object");
|
|
22
|
+
const { signatures, payload: inputPayload } = jws;
|
|
23
|
+
if (!Array.isArray(signatures))
|
|
24
|
+
throw new JWSInvalid("JWS Signatures missing or incorrect type");
|
|
25
|
+
const signatureEntries = Array.from(signatures);
|
|
26
|
+
if (!signatureEntries.every(isObject))
|
|
27
|
+
throw new JWSInvalid("JWS Signatures missing or incorrect type");
|
|
28
|
+
let shared;
|
|
29
|
+
try {
|
|
30
|
+
if (inputPayload === void 0)
|
|
31
|
+
throw new Error();
|
|
32
|
+
shared = prepareVerify(options);
|
|
33
|
+
} catch {
|
|
34
|
+
throw new JWSSignatureVerificationFailed();
|
|
35
|
+
}
|
|
36
|
+
const payload = inputPayload instanceof Uint8Array ? new Uint8Array(inputPayload) : inputPayload, candidates = signatureEntries.map((signature) => snapshotSignature(signature, payload)).filter((candidate) => candidate !== void 0);
|
|
37
|
+
let modes = 0;
|
|
38
|
+
for (const [, , mode] of candidates)
|
|
39
|
+
if (modes |= mode, modes === 3)
|
|
40
|
+
throw new JWSInvalid("inconsistent use of JWS Unencoded Payload (RFC7797)");
|
|
41
|
+
for (const candidate of candidates)
|
|
47
42
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
shared = prepareVerify(options);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
throw new JWSSignatureVerificationFailed();
|
|
54
|
-
}
|
|
55
|
-
const payload = inputPayload instanceof Uint8Array ? new Uint8Array(inputPayload) : inputPayload;
|
|
56
|
-
const candidates = signatureEntries
|
|
57
|
-
.map((signature) => snapshotSignature(signature, payload))
|
|
58
|
-
.filter((candidate) => candidate !== undefined);
|
|
59
|
-
let modes = 0;
|
|
60
|
-
for (const [, , mode] of candidates) {
|
|
61
|
-
modes |= mode;
|
|
62
|
-
if (modes === 3) {
|
|
63
|
-
throw new JWSInvalid('inconsistent use of JWS Unencoded Payload (RFC7797)');
|
|
64
|
-
}
|
|
43
|
+
return verifyResult(candidate[0], await verifySignature(candidate[0], shared, key, encodeJsonUnencodedPayload, candidate[1]));
|
|
44
|
+
} catch {
|
|
65
45
|
}
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
return verifyResult(candidate[0], await verifySignature(candidate[0], shared, key, encodeJsonUnencodedPayload, candidate[1]));
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
throw new JWSSignatureVerificationFailed();
|
|
46
|
+
throw new JWSSignatureVerificationFailed();
|
|
74
47
|
}
|
|
48
|
+
export {
|
|
49
|
+
generalVerify
|
|
50
|
+
};
|
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
import { prepareDecrypt, decryptCompact } from
|
|
2
|
-
import { validateClaimsSet } from
|
|
3
|
-
import { JWTClaimValidationFailed } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
? JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud)
|
|
12
|
-
: protectedHeader[claim] !== payload[claim])) {
|
|
13
|
-
throw new JWTClaimValidationFailed(`replicated "${claim}" claim header parameter mismatch`, payload, claim, 'mismatch');
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const result = { payload, protectedHeader };
|
|
17
|
-
if (typeof key === 'function') {
|
|
18
|
-
return { ...result, key: decrypted[2] };
|
|
19
|
-
}
|
|
20
|
-
return result;
|
|
1
|
+
import { prepareDecrypt, decryptCompact } from "../lib/jwe_decrypt.js";
|
|
2
|
+
import { validateClaimsSet } from "../lib/jwt_claims_set.js";
|
|
3
|
+
import { JWTClaimValidationFailed } from "../util/errors.js";
|
|
4
|
+
async function jwtDecrypt(jwt, key, options) {
|
|
5
|
+
const decrypted = await decryptCompact(jwt, prepareDecrypt(options), key), protectedHeader = decrypted[1], payload = validateClaimsSet(protectedHeader, decrypted[0], options);
|
|
6
|
+
for (const claim of ["iss", "sub", "aud"])
|
|
7
|
+
if (protectedHeader[claim] !== void 0 && (claim === "aud" ? JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud) : protectedHeader[claim] !== payload[claim]))
|
|
8
|
+
throw new JWTClaimValidationFailed(`replicated "${claim}" claim header parameter mismatch`, payload, claim, "mismatch");
|
|
9
|
+
const result = { payload, protectedHeader };
|
|
10
|
+
return typeof key == "function" ? { ...result, key: decrypted[2] } : result;
|
|
21
11
|
}
|
|
12
|
+
export {
|
|
13
|
+
jwtDecrypt
|
|
14
|
+
};
|
|
@@ -1,72 +1,59 @@
|
|
|
1
|
-
import { createJWE } from
|
|
2
|
-
import { JWTClaimsBuilder, jwtClaim, jwtData } from
|
|
3
|
-
import { assertNotSet } from
|
|
1
|
+
import { createJWE } from "../lib/jwe_encrypt.js";
|
|
2
|
+
import { JWTClaimsBuilder, jwtClaim, jwtData } from "../lib/jwt_claims_set.js";
|
|
3
|
+
import { assertNotSet } from "../lib/helpers.js";
|
|
4
4
|
const EncryptJWT_base = JWTClaimsBuilder;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
const jwe = await createJWE([
|
|
59
|
-
plaintext,
|
|
60
|
-
this.#protectedHeader,
|
|
61
|
-
undefined,
|
|
62
|
-
undefined,
|
|
63
|
-
undefined,
|
|
64
|
-
this.#cek,
|
|
65
|
-
this.#iv,
|
|
66
|
-
this.#keyManagementParameters,
|
|
67
|
-
undefined,
|
|
68
|
-
false,
|
|
69
|
-
], key, options);
|
|
70
|
-
return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');
|
|
71
|
-
}
|
|
5
|
+
class EncryptJWT extends EncryptJWT_base {
|
|
6
|
+
#cek;
|
|
7
|
+
#iv;
|
|
8
|
+
#keyManagementParameters;
|
|
9
|
+
#protectedHeader;
|
|
10
|
+
#replicateIssuerAsHeader;
|
|
11
|
+
#replicateSubjectAsHeader;
|
|
12
|
+
#replicateAudienceAsHeader;
|
|
13
|
+
setProtectedHeader(protectedHeader) {
|
|
14
|
+
return assertNotSet(this.#protectedHeader, "setProtectedHeader"), this.#protectedHeader = protectedHeader, this;
|
|
15
|
+
}
|
|
16
|
+
setKeyManagementParameters(parameters) {
|
|
17
|
+
return assertNotSet(this.#keyManagementParameters, "setKeyManagementParameters"), this.#keyManagementParameters = parameters, this;
|
|
18
|
+
}
|
|
19
|
+
setContentEncryptionKey(cek) {
|
|
20
|
+
return assertNotSet(this.#cek, "setContentEncryptionKey"), this.#cek = cek, this;
|
|
21
|
+
}
|
|
22
|
+
setInitializationVector(iv) {
|
|
23
|
+
return assertNotSet(this.#iv, "setInitializationVector"), this.#iv = iv, this;
|
|
24
|
+
}
|
|
25
|
+
replicateIssuerAsHeader() {
|
|
26
|
+
return this.#replicateIssuerAsHeader = !0, this;
|
|
27
|
+
}
|
|
28
|
+
replicateSubjectAsHeader() {
|
|
29
|
+
return this.#replicateSubjectAsHeader = !0, this;
|
|
30
|
+
}
|
|
31
|
+
replicateAudienceAsHeader() {
|
|
32
|
+
return this.#replicateAudienceAsHeader = !0, this;
|
|
33
|
+
}
|
|
34
|
+
async encrypt(key, options) {
|
|
35
|
+
const plaintext = jwtData(this);
|
|
36
|
+
this.#protectedHeader && (this.#replicateIssuerAsHeader || this.#replicateSubjectAsHeader || this.#replicateAudienceAsHeader) && (this.#protectedHeader = {
|
|
37
|
+
...this.#protectedHeader,
|
|
38
|
+
iss: this.#replicateIssuerAsHeader ? jwtClaim(this, "iss") : void 0,
|
|
39
|
+
sub: this.#replicateSubjectAsHeader ? jwtClaim(this, "sub") : void 0,
|
|
40
|
+
aud: this.#replicateAudienceAsHeader ? jwtClaim(this, "aud") : void 0
|
|
41
|
+
});
|
|
42
|
+
const jwe = await createJWE([
|
|
43
|
+
plaintext,
|
|
44
|
+
this.#protectedHeader,
|
|
45
|
+
void 0,
|
|
46
|
+
void 0,
|
|
47
|
+
void 0,
|
|
48
|
+
this.#cek,
|
|
49
|
+
this.#iv,
|
|
50
|
+
this.#keyManagementParameters,
|
|
51
|
+
void 0,
|
|
52
|
+
!1
|
|
53
|
+
], key, options);
|
|
54
|
+
return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join(".");
|
|
55
|
+
}
|
|
72
56
|
}
|
|
57
|
+
export {
|
|
58
|
+
EncryptJWT
|
|
59
|
+
};
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { createCompactSignature } from
|
|
2
|
-
import { JWTInvalid } from
|
|
3
|
-
import { JWTClaimsBuilder, jwtData } from
|
|
4
|
-
import { assertNotSet } from
|
|
1
|
+
import { createCompactSignature } from "../lib/jws_sign.js";
|
|
2
|
+
import { JWTInvalid } from "../util/errors.js";
|
|
3
|
+
import { JWTClaimsBuilder, jwtData } from "../lib/jwt_claims_set.js";
|
|
4
|
+
import { assertNotSet } from "../lib/helpers.js";
|
|
5
5
|
const SignJWT_base = JWTClaimsBuilder;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
}
|
|
6
|
+
class SignJWT extends SignJWT_base {
|
|
7
|
+
#protectedHeader;
|
|
8
|
+
setProtectedHeader(protectedHeader) {
|
|
9
|
+
return assertNotSet(this.#protectedHeader, "setProtectedHeader"), this.#protectedHeader = protectedHeader, this;
|
|
10
|
+
}
|
|
11
|
+
async sign(key, options) {
|
|
12
|
+
return createCompactSignature(jwtData(this), this.#protectedHeader, options?.crit, key, () => {
|
|
13
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
14
|
+
});
|
|
15
|
+
}
|
|
18
16
|
}
|
|
17
|
+
export {
|
|
18
|
+
SignJWT
|
|
19
|
+
};
|
|
@@ -1,43 +1,35 @@
|
|
|
1
|
-
import * as b64u from
|
|
2
|
-
import { decodeBase64url, parseJoseHeader } from
|
|
3
|
-
import { JWSInvalid, JWTInvalid } from
|
|
4
|
-
import { validateClaimsSet, JWTClaimsBuilder, jwtData } from
|
|
5
|
-
import { JWS_RECOGNIZED, validateB64, validateCrit } from
|
|
1
|
+
import * as b64u from "../util/base64url.js";
|
|
2
|
+
import { decodeBase64url, parseJoseHeader } from "../lib/helpers.js";
|
|
3
|
+
import { JWSInvalid, JWTInvalid } from "../util/errors.js";
|
|
4
|
+
import { validateClaimsSet, JWTClaimsBuilder, jwtData } from "../lib/jwt_claims_set.js";
|
|
5
|
+
import { JWS_RECOGNIZED, validateB64, validateCrit } from "../lib/options.js";
|
|
6
6
|
const UnsecuredJWT_base = JWTClaimsBuilder;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const extensions = validateCrit(JWSInvalid, JWS_RECOGNIZED, undefined, header, header);
|
|
26
|
-
b64 = validateB64(header, extensions);
|
|
27
|
-
}
|
|
28
|
-
catch (cause) {
|
|
29
|
-
if (!(cause instanceof JWSInvalid)) {
|
|
30
|
-
throw cause;
|
|
31
|
-
}
|
|
32
|
-
throw new JWTInvalid('Invalid Unsecured JWT', { cause });
|
|
33
|
-
}
|
|
34
|
-
if (header.alg !== 'none') {
|
|
35
|
-
throw new JWTInvalid('Invalid Unsecured JWT');
|
|
36
|
-
}
|
|
37
|
-
if (!b64) {
|
|
38
|
-
throw new JWTInvalid('JWTs MUST NOT use unencoded payload');
|
|
39
|
-
}
|
|
40
|
-
const payload = validateClaimsSet(header, decodeBase64url(encodedPayload, 'payload', JWTInvalid), options);
|
|
41
|
-
return { payload, header };
|
|
7
|
+
class UnsecuredJWT extends UnsecuredJWT_base {
|
|
8
|
+
encode() {
|
|
9
|
+
const header = b64u.encode(JSON.stringify({ alg: "none" })), payload = b64u.encode(jwtData(this));
|
|
10
|
+
return `${header}.${payload}.`;
|
|
11
|
+
}
|
|
12
|
+
static decode(jwt, options) {
|
|
13
|
+
if (typeof jwt != "string")
|
|
14
|
+
throw new JWTInvalid("Unsecured JWT must be a string");
|
|
15
|
+
const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split(".");
|
|
16
|
+
if (length !== 3 || signature !== "")
|
|
17
|
+
throw new JWTInvalid("Invalid Unsecured JWT");
|
|
18
|
+
let header, b64;
|
|
19
|
+
try {
|
|
20
|
+
header = parseJoseHeader(encodedHeader, JWSInvalid, "JWS Protected Header is invalid");
|
|
21
|
+
const extensions = validateCrit(JWSInvalid, JWS_RECOGNIZED, void 0, header, header);
|
|
22
|
+
b64 = validateB64(header, extensions);
|
|
23
|
+
} catch (cause) {
|
|
24
|
+
throw cause instanceof JWSInvalid ? new JWTInvalid("Invalid Unsecured JWT", { cause }) : cause;
|
|
42
25
|
}
|
|
26
|
+
if (header.alg !== "none")
|
|
27
|
+
throw new JWTInvalid("Invalid Unsecured JWT");
|
|
28
|
+
if (!b64)
|
|
29
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
30
|
+
return { payload: validateClaimsSet(header, decodeBase64url(encodedPayload, "payload", JWTInvalid), options), header };
|
|
31
|
+
}
|
|
43
32
|
}
|
|
33
|
+
export {
|
|
34
|
+
UnsecuredJWT
|
|
35
|
+
};
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { prepareVerify, verifyCompact } from
|
|
2
|
-
import { validateClaimsSet } from
|
|
3
|
-
import { JWTInvalid } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const result = { payload, protectedHeader: verified[1] };
|
|
11
|
-
if (typeof key === 'function') {
|
|
12
|
-
return { ...result, key: verified[3] };
|
|
13
|
-
}
|
|
14
|
-
return result;
|
|
1
|
+
import { prepareVerify, verifyCompact } from "../lib/jws_verify.js";
|
|
2
|
+
import { validateClaimsSet } from "../lib/jwt_claims_set.js";
|
|
3
|
+
import { JWTInvalid } from "../util/errors.js";
|
|
4
|
+
async function jwtVerify(jwt, key, options) {
|
|
5
|
+
const verified = await verifyCompact(jwt, prepareVerify(options), key);
|
|
6
|
+
if (!verified[2])
|
|
7
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
8
|
+
const result = { payload: validateClaimsSet(verified[1], verified[0], options), protectedHeader: verified[1] };
|
|
9
|
+
return typeof key == "function" ? { ...result, key: verified[3] } : result;
|
|
15
10
|
}
|
|
11
|
+
export {
|
|
12
|
+
jwtVerify
|
|
13
|
+
};
|