@suveren/gateway 0.7.4 → 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/control-plane/index.mjs +248 -58
- package/dist/mcp-server/http.mjs +577 -124
- package/dist/ui/assets/index-BFnSVa9N.js +110 -0
- package/dist/ui/assets/{index-CkWaRck1.css → index-BYVb_0oG.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/node_modules/@hap/core/dist/index.d.mts +285 -13
- package/node_modules/@hap/core/dist/index.d.ts +285 -13
- package/node_modules/@hap/core/dist/index.js +281 -13
- package/node_modules/@hap/core/dist/index.mjs +266 -12
- package/node_modules/@hap/core/package.json +4 -2
- package/node_modules/@hap/core/src/did-key.ts +126 -0
- 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/identity.ts +21 -5
- package/node_modules/@hap/core/src/index.ts +3 -0
- package/node_modules/@hap/core/src/mandate.ts +207 -0
- package/node_modules/@hap/core/src/receipt.ts +74 -0
- package/node_modules/@hap/core/src/types.ts +87 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/accept.js +54 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/charset.js +10 -34
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/encoding.js +9 -30
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/language.js +15 -36
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/mediaType.js +16 -134
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/LICENSE +22 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/README.md +71 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/package.json +52 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/package.json +16 -10
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/buffer.buffer.d.ts +10 -5
- package/node_modules/@types/node/crypto.d.ts +2 -4
- 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 +17 -1
- package/node_modules/@types/node/http2.d.ts +12 -4
- 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/process.d.ts +52 -0
- package/node_modules/@types/node/quic.d.ts +246 -38
- package/node_modules/@types/node/sqlite.d.ts +6 -2
- package/node_modules/@types/node/stream/iter.d.ts +4 -4
- package/node_modules/@types/node/test.d.ts +36 -0
- 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 +215 -47
- package/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
- package/node_modules/fast-uri/test/security.test.js +75 -3
- package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/hono/dist/cjs/client/client.js +25 -11
- package/node_modules/hono/dist/cjs/client/utils.js +4 -1
- package/node_modules/hono/dist/cjs/context.js +4 -0
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
- package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
- package/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/etag/digest.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +3 -3
- package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
- package/node_modules/hono/dist/cjs/request.js +8 -4
- package/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
- package/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +10 -3
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +47 -83
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +2 -1
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +46 -69
- package/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
- package/node_modules/hono/dist/cjs/router/utils.js +27 -0
- package/node_modules/hono/dist/cjs/utils/body.js +15 -3
- package/node_modules/hono/dist/cjs/utils/cookie.js +1 -1
- package/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
- package/node_modules/hono/dist/cjs/utils/stream.js +7 -1
- package/node_modules/hono/dist/cjs/utils/url.js +9 -1
- package/node_modules/hono/dist/client/client.js +25 -11
- package/node_modules/hono/dist/client/utils.js +4 -1
- package/node_modules/hono/dist/context.js +4 -0
- package/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
- package/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
- package/node_modules/hono/dist/helper/ssg/utils.js +30 -10
- package/node_modules/hono/dist/jsx/dom/render.js +2 -0
- package/node_modules/hono/dist/middleware/cache/index.js +1 -1
- package/node_modules/hono/dist/middleware/cors/index.js +1 -1
- package/node_modules/hono/dist/middleware/csrf/index.js +1 -1
- package/node_modules/hono/dist/middleware/etag/digest.js +1 -1
- package/node_modules/hono/dist/middleware/etag/index.js +3 -3
- package/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
- package/node_modules/hono/dist/request.js +8 -4
- package/node_modules/hono/dist/router/linear-router/router.js +7 -2
- package/node_modules/hono/dist/router/pattern-router/router.js +3 -9
- package/node_modules/hono/dist/router/reg-exp-router/node.js +6 -2
- package/node_modules/hono/dist/router/reg-exp-router/router.js +53 -84
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +2 -1
- package/node_modules/hono/dist/router/trie-router/node.js +46 -69
- package/node_modules/hono/dist/router/trie-router/router.js +3 -11
- package/node_modules/hono/dist/router/utils.js +5 -0
- package/node_modules/hono/dist/types/context.d.ts +4 -0
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -0
- package/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
- package/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
- package/node_modules/hono/dist/types/router/utils.d.ts +1 -0
- package/node_modules/hono/dist/types/utils/url.d.ts +4 -0
- package/node_modules/hono/dist/utils/body.js +15 -3
- package/node_modules/hono/dist/utils/cookie.js +1 -1
- package/node_modules/hono/dist/utils/ipaddr.js +5 -3
- package/node_modules/hono/dist/utils/stream.js +7 -1
- package/node_modules/hono/dist/utils/url.js +9 -1
- package/node_modules/hono/package.json +1 -1
- 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/is-plain-object/README.md +39 -95
- package/node_modules/is-plain-object/dist/is-plain-object.js +0 -2
- package/node_modules/is-plain-object/is-plain-object.d.ts +6 -1
- package/node_modules/is-plain-object/package.json +8 -34
- package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +10 -20
- package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +16 -38
- package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +7 -16
- package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +19 -38
- 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 +17 -28
- 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 +12 -21
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +10 -20
- package/node_modules/jose/dist/types/jwt/encrypt.d.ts +17 -29
- package/node_modules/jose/dist/types/jwt/sign.d.ts +12 -19
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +17 -28
- 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 +48 -86
- 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 -26
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -10
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +53 -71
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +121 -158
- package/node_modules/jose/dist/webapi/jwk/embedded.js +30 -18
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +54 -64
- package/node_modules/jose/dist/webapi/jwks/local.js +49 -74
- package/node_modules/jose/dist/webapi/jwks/remote.js +91 -160
- package/node_modules/jose/dist/webapi/jws/compact/sign.js +21 -20
- package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +29 -30
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +21 -23
- package/node_modules/jose/dist/webapi/jws/general/sign.js +61 -70
- package/node_modules/jose/dist/webapi/jws/general/verify.js +47 -41
- package/node_modules/jose/dist/webapi/jwt/decrypt.js +13 -22
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +58 -100
- package/node_modules/jose/dist/webapi/jwt/sign.js +18 -50
- package/node_modules/jose/dist/webapi/jwt/unsecured.js +34 -63
- 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 -44
- package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -39
- package/node_modules/jose/dist/webapi/key/import.js +52 -52
- package/node_modules/jose/dist/webapi/lib/asn1.js +130 -164
- 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 -123
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +24 -25
- package/node_modules/jose/dist/webapi/lib/deflate.js +46 -40
- 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 +210 -176
- package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +105 -107
- package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +19 -0
- 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 +58 -72
- package/node_modules/jose/dist/webapi/lib/jws_verify.js +90 -103
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +134 -185
- package/node_modules/jose/dist/webapi/lib/key.js +84 -121
- 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 -225
- package/node_modules/jose/dist/webapi/lib/key_options.js +8 -0
- package/node_modules/jose/dist/webapi/lib/options.js +57 -44
- package/node_modules/jose/dist/webapi/lib/signing.js +18 -22
- package/node_modules/jose/dist/webapi/lib/type_checks.js +28 -33
- 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
- package/dist/ui/assets/index-0Q2eNytX.js +0 -110
- package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/HISTORY.md +0 -114
|
@@ -1,44 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
let i = 0;
|
|
9
|
-
for (const buffer of buffers) {
|
|
10
|
-
buf.set(buffer, i);
|
|
11
|
-
i += buffer.length;
|
|
12
|
-
}
|
|
13
|
-
return buf;
|
|
1
|
+
const encoder = new TextEncoder(), decoder = new TextDecoder(), strictDecoder = new TextDecoder("utf-8", { fatal: !0 }), MAX_INT32 = 2 ** 32;
|
|
2
|
+
function concat(...buffers) {
|
|
3
|
+
const size = buffers.reduce((acc, { length }) => acc + length, 0), buf = new Uint8Array(size);
|
|
4
|
+
let i = 0;
|
|
5
|
+
for (const buffer of buffers)
|
|
6
|
+
buf.set(buffer, i), i += buffer.length;
|
|
7
|
+
return buf;
|
|
14
8
|
}
|
|
15
9
|
function writeUInt32BE(buf, value, offset) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);
|
|
10
|
+
if (value < 0 || value >= MAX_INT32)
|
|
11
|
+
throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);
|
|
12
|
+
buf.set([value >>> 24, value >>> 16, value >>> 8, value & 255], offset);
|
|
20
13
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const buf = new Uint8Array(8);
|
|
25
|
-
writeUInt32BE(buf, high, 0);
|
|
26
|
-
writeUInt32BE(buf, low, 4);
|
|
27
|
-
return buf;
|
|
14
|
+
function uint64be(value) {
|
|
15
|
+
const high = Math.floor(value / MAX_INT32), low = value % MAX_INT32, buf = new Uint8Array(8);
|
|
16
|
+
return writeUInt32BE(buf, high, 0), writeUInt32BE(buf, low, 4), buf;
|
|
28
17
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return buf;
|
|
18
|
+
function uint32be(value) {
|
|
19
|
+
const buf = new Uint8Array(4);
|
|
20
|
+
return writeUInt32BE(buf, value), buf;
|
|
33
21
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return bytes;
|
|
22
|
+
function encode(string) {
|
|
23
|
+
const bytes = new Uint8Array(string.length);
|
|
24
|
+
for (let i = 0; i < string.length; i++) {
|
|
25
|
+
const code = string.charCodeAt(i);
|
|
26
|
+
if (code > 127)
|
|
27
|
+
throw new TypeError("non-ASCII string encountered in encode()");
|
|
28
|
+
bytes[i] = code;
|
|
29
|
+
}
|
|
30
|
+
return bytes;
|
|
44
31
|
}
|
|
32
|
+
export {
|
|
33
|
+
concat,
|
|
34
|
+
decoder,
|
|
35
|
+
encode,
|
|
36
|
+
encoder,
|
|
37
|
+
strictDecoder,
|
|
38
|
+
uint32be,
|
|
39
|
+
uint64be
|
|
40
|
+
};
|
|
@@ -1,142 +1,98 @@
|
|
|
1
|
-
import { concat, uint64be } from
|
|
2
|
-
import { checkCryptoKey } from
|
|
3
|
-
import { invalidKeyInput } from
|
|
4
|
-
import { JWEDecryptionFailed, JWEInvalid } from
|
|
5
|
-
import { isCryptoKey } from
|
|
6
|
-
|
|
1
|
+
import { concat, uint64be } from "./buffer_utils.js";
|
|
2
|
+
import { checkCryptoKey } from "./crypto_key.js";
|
|
3
|
+
import { invalidKeyInput } from "./invalid_key_input.js";
|
|
4
|
+
import { JWEDecryptionFailed, JWEInvalid } from "../util/errors.js";
|
|
5
|
+
import { isCryptoKey } from "./is_key_like.js";
|
|
6
|
+
const generateCek = (enc) => crypto.getRandomValues(new Uint8Array(enc.cekBits >> 3));
|
|
7
7
|
function checkCekLength(cek, expected) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
8
|
+
const actual = cek.byteLength << 3;
|
|
9
|
+
if (actual !== expected)
|
|
10
|
+
throw new JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
|
|
12
11
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
12
|
+
const generateIv = (enc) => crypto.getRandomValues(new Uint8Array(enc.ivBits >> 3));
|
|
13
|
+
function checkIvLength(enc, iv) {
|
|
14
|
+
if (iv.length << 3 !== enc.ivBits)
|
|
15
|
+
throw new JWEInvalid("Invalid Initialization Vector length");
|
|
18
16
|
}
|
|
19
17
|
async function cbcKeySetup(enc, cek, usage) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
name: 'HMAC',
|
|
28
|
-
}, false, ['sign']);
|
|
29
|
-
return [encKey, macKey, keySize];
|
|
18
|
+
if (!(cek instanceof Uint8Array))
|
|
19
|
+
throw new TypeError(invalidKeyInput(cek, "Uint8Array"));
|
|
20
|
+
const keySize = enc.cekBits >> 1, encKey = await crypto.subtle.importKey("raw", cek.subarray(keySize >> 3), "AES-CBC", !1, [usage]), macKey = await crypto.subtle.importKey("raw", cek.subarray(0, keySize >> 3), {
|
|
21
|
+
hash: `SHA-${keySize << 1}`,
|
|
22
|
+
name: "HMAC"
|
|
23
|
+
}, !1, ["sign"]);
|
|
24
|
+
return [encKey, macKey, keySize];
|
|
30
25
|
}
|
|
31
26
|
async function cbcHmacTag(macKey, macData, keySize) {
|
|
32
|
-
|
|
27
|
+
return new Uint8Array((await crypto.subtle.sign("HMAC", macKey, macData)).slice(0, keySize >> 3));
|
|
33
28
|
}
|
|
34
29
|
async function cbcEncrypt(enc, plaintext, cek, iv, aad) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const macData = concat(aad, iv, ciphertext, uint64be(aad.length * 8));
|
|
41
|
-
const tag = await cbcHmacTag(macKey, macData, keySize);
|
|
42
|
-
return { ciphertext, tag, iv };
|
|
30
|
+
const [encKey, macKey, keySize] = await cbcKeySetup(enc, cek, "encrypt"), ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
31
|
+
iv,
|
|
32
|
+
name: "AES-CBC"
|
|
33
|
+
}, encKey, plaintext)), macData = concat(aad, iv, ciphertext, uint64be(aad.length * 8)), tag = await cbcHmacTag(macKey, macData, keySize);
|
|
34
|
+
return { ciphertext, tag, iv };
|
|
43
35
|
}
|
|
44
36
|
async function timingSafeEqual(a, b) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const aHmac = await crypto.subtle.sign(algorithm, key, a);
|
|
48
|
-
return crypto.subtle.verify(algorithm, key, aHmac, b);
|
|
37
|
+
const algorithm = { name: "HMAC", hash: "SHA-256" }, key = await crypto.subtle.generateKey(algorithm, !1, ["sign", "verify"]), aHmac = await crypto.subtle.sign(algorithm, key, a);
|
|
38
|
+
return crypto.subtle.verify(algorithm, key, aHmac, b);
|
|
49
39
|
}
|
|
50
40
|
async function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
catch {
|
|
59
|
-
}
|
|
60
|
-
if (!macCheckPassed) {
|
|
61
|
-
throw new JWEDecryptionFailed();
|
|
62
|
-
}
|
|
63
|
-
let plaintext;
|
|
64
|
-
try {
|
|
65
|
-
plaintext = new Uint8Array(await crypto.subtle.decrypt({ iv: iv, name: 'AES-CBC' }, encKey, ciphertext));
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
}
|
|
69
|
-
if (!plaintext) {
|
|
70
|
-
throw new JWEDecryptionFailed();
|
|
71
|
-
}
|
|
72
|
-
return plaintext;
|
|
41
|
+
const [encKey, macKey, keySize] = await cbcKeySetup(enc, cek, "decrypt"), macData = concat(aad, iv, ciphertext, uint64be(aad.length * 8)), expectedTag = await cbcHmacTag(macKey, macData, keySize);
|
|
42
|
+
try {
|
|
43
|
+
if (await timingSafeEqual(tag, expectedTag))
|
|
44
|
+
return new Uint8Array(await crypto.subtle.decrypt({ iv, name: "AES-CBC" }, encKey, ciphertext));
|
|
45
|
+
} catch {
|
|
46
|
+
}
|
|
47
|
+
throw new JWEDecryptionFailed();
|
|
73
48
|
}
|
|
74
49
|
async function gcmEncrypt(enc, plaintext, cek, iv, aad) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
tagLength: 128,
|
|
85
|
-
}, encKey, plaintext));
|
|
86
|
-
const tag = encrypted.slice(-16);
|
|
87
|
-
const ciphertext = encrypted.slice(0, -16);
|
|
88
|
-
return { ciphertext, tag, iv };
|
|
50
|
+
const encKey = cek instanceof Uint8Array ? await crypto.subtle.importKey("raw", cek, "AES-GCM", !1, [
|
|
51
|
+
"encrypt"
|
|
52
|
+
]) : (checkCryptoKey(cek, enc.subtle, "encrypt"), cek), encrypted = new Uint8Array(await crypto.subtle.encrypt({
|
|
53
|
+
additionalData: aad,
|
|
54
|
+
iv,
|
|
55
|
+
name: "AES-GCM",
|
|
56
|
+
tagLength: 128
|
|
57
|
+
}, encKey, plaintext)), tag = encrypted.slice(-16);
|
|
58
|
+
return { ciphertext: encrypted.slice(0, -16), tag, iv };
|
|
89
59
|
}
|
|
90
60
|
async function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
catch {
|
|
105
|
-
throw new JWEDecryptionFailed();
|
|
106
|
-
}
|
|
61
|
+
const encKey = cek instanceof Uint8Array ? await crypto.subtle.importKey("raw", cek, "AES-GCM", !1, [
|
|
62
|
+
"decrypt"
|
|
63
|
+
]) : (checkCryptoKey(cek, enc.subtle, "decrypt"), cek);
|
|
64
|
+
try {
|
|
65
|
+
return new Uint8Array(await crypto.subtle.decrypt({
|
|
66
|
+
additionalData: aad,
|
|
67
|
+
iv,
|
|
68
|
+
name: "AES-GCM",
|
|
69
|
+
tagLength: 128
|
|
70
|
+
}, encKey, concat(ciphertext, tag)));
|
|
71
|
+
} catch {
|
|
72
|
+
throw new JWEDecryptionFailed();
|
|
73
|
+
}
|
|
107
74
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if (iv) {
|
|
113
|
-
checkIvLength(enc, iv);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
iv = generateIv(enc);
|
|
117
|
-
}
|
|
118
|
-
if (cek instanceof Uint8Array) {
|
|
119
|
-
checkCekLength(cek, enc.cekBits);
|
|
120
|
-
}
|
|
121
|
-
return enc.cbc
|
|
122
|
-
? cbcEncrypt(enc, plaintext, cek, iv, aad)
|
|
123
|
-
: gcmEncrypt(enc, plaintext, cek, iv, aad);
|
|
75
|
+
async function encrypt(enc, plaintext, cek, iv, aad) {
|
|
76
|
+
if (!isCryptoKey(cek) && !(cek instanceof Uint8Array))
|
|
77
|
+
throw new TypeError(invalidKeyInput(cek, "CryptoKey", "KeyObject", "Uint8Array", "JSON Web Key"));
|
|
78
|
+
return iv ? checkIvLength(enc, iv) : iv = generateIv(enc), cek instanceof Uint8Array && checkCekLength(cek, enc.cekBits), enc.cbc ? cbcEncrypt(enc, plaintext, cek, iv, aad) : gcmEncrypt(enc, plaintext, cek, iv, aad);
|
|
124
79
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
checkIvLength(enc, iv);
|
|
136
|
-
if (cek instanceof Uint8Array) {
|
|
137
|
-
checkCekLength(cek, enc.cekBits);
|
|
138
|
-
}
|
|
139
|
-
return enc.cbc
|
|
140
|
-
? cbcDecrypt(enc, cek, ciphertext, iv, tag, aad)
|
|
141
|
-
: gcmDecrypt(enc, cek, ciphertext, iv, tag, aad);
|
|
80
|
+
async function decrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
81
|
+
if (!isCryptoKey(cek) && !(cek instanceof Uint8Array))
|
|
82
|
+
throw new TypeError(invalidKeyInput(cek, "CryptoKey", "KeyObject", "Uint8Array", "JSON Web Key"));
|
|
83
|
+
if (!iv)
|
|
84
|
+
throw new JWEInvalid("JWE Initialization Vector missing");
|
|
85
|
+
if (!tag)
|
|
86
|
+
throw new JWEInvalid("JWE Authentication Tag missing");
|
|
87
|
+
if (!enc.cbc && tag.length !== 16)
|
|
88
|
+
throw new JWEInvalid("Invalid Authentication Tag length");
|
|
89
|
+
return checkIvLength(enc, iv), cek instanceof Uint8Array && checkCekLength(cek, enc.cekBits), enc.cbc ? cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) : gcmDecrypt(enc, cek, ciphertext, iv, tag, aad);
|
|
142
90
|
}
|
|
91
|
+
export {
|
|
92
|
+
checkCekLength,
|
|
93
|
+
checkIvLength,
|
|
94
|
+
decrypt,
|
|
95
|
+
encrypt,
|
|
96
|
+
generateCek,
|
|
97
|
+
generateIv
|
|
98
|
+
};
|
|
@@ -1,28 +1,27 @@
|
|
|
1
|
-
const unusable = (name, prop =
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
1
|
+
const unusable = (name, prop = "algorithm.name") => new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);
|
|
2
|
+
function checkUsage(key, usage) {
|
|
3
|
+
if (usage && !key.usages.includes(usage))
|
|
4
|
+
throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);
|
|
6
5
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
6
|
+
function checkModulusLength(alg, key) {
|
|
7
|
+
const { modulusLength } = key.algorithm;
|
|
8
|
+
if (typeof modulusLength != "number" || modulusLength < 2048)
|
|
9
|
+
throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
|
|
12
10
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (expected.length !== undefined && algorithm.length !== expected.length) {
|
|
25
|
-
throw unusable(expected.length, 'algorithm.length');
|
|
26
|
-
}
|
|
27
|
-
checkUsage(key, usage);
|
|
11
|
+
function checkCryptoKey(key, expected, usage) {
|
|
12
|
+
const algorithm = key.algorithm;
|
|
13
|
+
if (algorithm.name !== expected.name)
|
|
14
|
+
throw unusable(expected.name);
|
|
15
|
+
if (expected.hash && algorithm.hash?.name !== expected.hash)
|
|
16
|
+
throw unusable(expected.hash, "algorithm.hash");
|
|
17
|
+
if (expected.namedCurve && algorithm.namedCurve !== expected.namedCurve)
|
|
18
|
+
throw unusable(expected.namedCurve, "algorithm.namedCurve");
|
|
19
|
+
if (expected.length !== void 0 && algorithm.length !== expected.length)
|
|
20
|
+
throw unusable(expected.length, "algorithm.length");
|
|
21
|
+
checkUsage(key, usage);
|
|
28
22
|
}
|
|
23
|
+
export {
|
|
24
|
+
checkCryptoKey,
|
|
25
|
+
checkModulusLength,
|
|
26
|
+
checkUsage
|
|
27
|
+
};
|
|
@@ -1,44 +1,50 @@
|
|
|
1
|
-
import { JOSENotSupported, JWEInvalid } from
|
|
2
|
-
import { concat } from
|
|
1
|
+
import { JOSENotSupported, JWEInvalid } from "../util/errors.js";
|
|
2
|
+
import { concat } from "./buffer_utils.js";
|
|
3
|
+
function validateZip(joseHeader, protectedHeader) {
|
|
4
|
+
if (joseHeader.zip !== void 0 && joseHeader.zip !== "DEF")
|
|
5
|
+
throw new JOSENotSupported('Unsupported JWE "zip" (Compression Algorithm) Header Parameter value.');
|
|
6
|
+
if (joseHeader.zip !== void 0 && !protectedHeader?.zip)
|
|
7
|
+
throw new JWEInvalid('JWE "zip" (Compression Algorithm) Header Parameter MUST be in a protected header.');
|
|
8
|
+
}
|
|
3
9
|
function supported(name) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
10
|
+
if (typeof globalThis[name] > "u")
|
|
11
|
+
throw new JOSENotSupported(`JWE "zip" (Compression Algorithm) Header Parameter requires the ${name} API.`);
|
|
7
12
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return concat(...chunks);
|
|
13
|
+
async function compress(input) {
|
|
14
|
+
supported("CompressionStream");
|
|
15
|
+
const cs = new CompressionStream("deflate-raw"), writer = cs.writable.getWriter();
|
|
16
|
+
writer.write(input).catch(() => {
|
|
17
|
+
}), writer.close().catch(() => {
|
|
18
|
+
});
|
|
19
|
+
const chunks = [], reader = cs.readable.getReader();
|
|
20
|
+
for (; ; ) {
|
|
21
|
+
const { value, done } = await reader.read();
|
|
22
|
+
if (done)
|
|
23
|
+
break;
|
|
24
|
+
chunks.push(value);
|
|
25
|
+
}
|
|
26
|
+
return concat(...chunks);
|
|
23
27
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return concat(...chunks);
|
|
28
|
+
async function decompress(input, maxLength) {
|
|
29
|
+
supported("DecompressionStream");
|
|
30
|
+
const ds = new DecompressionStream("deflate-raw"), writer = ds.writable.getWriter();
|
|
31
|
+
writer.write(input).catch(() => {
|
|
32
|
+
}), writer.close().catch(() => {
|
|
33
|
+
});
|
|
34
|
+
const chunks = [];
|
|
35
|
+
let length = 0;
|
|
36
|
+
const reader = ds.readable.getReader();
|
|
37
|
+
for (; ; ) {
|
|
38
|
+
const { value, done } = await reader.read();
|
|
39
|
+
if (done)
|
|
40
|
+
break;
|
|
41
|
+
if (chunks.push(value), length += value.byteLength, maxLength !== 1 / 0 && length > maxLength)
|
|
42
|
+
throw new JWEInvalid("Decompressed plaintext exceeded the configured limit");
|
|
43
|
+
}
|
|
44
|
+
return concat(...chunks);
|
|
44
45
|
}
|
|
46
|
+
export {
|
|
47
|
+
compress,
|
|
48
|
+
decompress,
|
|
49
|
+
validateZip
|
|
50
|
+
};
|
|
@@ -1,42 +1,45 @@
|
|
|
1
|
-
import { decode } from
|
|
2
|
-
import { encode, strictDecoder } from
|
|
3
|
-
import { isObject } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
1
|
+
import { decode } from "../util/base64url.js";
|
|
2
|
+
import { encode, strictDecoder } from "./buffer_utils.js";
|
|
3
|
+
import { isObject } from "./type_checks.js";
|
|
4
|
+
const unprotected = /* @__PURE__ */ Symbol();
|
|
5
|
+
function assertNotSet(value, name) {
|
|
6
|
+
if (value !== void 0)
|
|
7
|
+
throw new TypeError(`${name} can only be called once`);
|
|
9
8
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
9
|
+
function decodeBase64url(value, label, ErrorClass) {
|
|
10
|
+
try {
|
|
11
|
+
return decode(value);
|
|
12
|
+
} catch {
|
|
13
|
+
throw new ErrorClass(`Failed to base64url decode the ${label}`);
|
|
14
|
+
}
|
|
17
15
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
16
|
+
function encodeBase64url(value, label, ErrorClass) {
|
|
17
|
+
try {
|
|
18
|
+
return encode(value);
|
|
19
|
+
} catch {
|
|
20
|
+
throw new ErrorClass(`The ${label} is not a valid base64url string`);
|
|
21
|
+
}
|
|
25
22
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
async function digest(algorithm, data) {
|
|
24
|
+
const subtleDigest = `SHA-${algorithm.slice(-3)}`;
|
|
25
|
+
return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));
|
|
29
26
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
return parsed;
|
|
27
|
+
function parseJoseHeader(b64, ErrorClass, message) {
|
|
28
|
+
let parsed;
|
|
29
|
+
try {
|
|
30
|
+
parsed = JSON.parse(strictDecoder.decode(decode(b64)));
|
|
31
|
+
} catch {
|
|
32
|
+
throw new ErrorClass(message);
|
|
33
|
+
}
|
|
34
|
+
if (!isObject(parsed))
|
|
35
|
+
throw new ErrorClass(message);
|
|
36
|
+
return parsed;
|
|
42
37
|
}
|
|
38
|
+
export {
|
|
39
|
+
assertNotSet,
|
|
40
|
+
decodeBase64url,
|
|
41
|
+
digest,
|
|
42
|
+
encodeBase64url,
|
|
43
|
+
parseJoseHeader,
|
|
44
|
+
unprotected
|
|
45
|
+
};
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
function message(msg, actual, ...types) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
msg += `one of type ${types[0]} or ${types[1]}.`;
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
msg += `of type ${types[0]}.`;
|
|
11
|
-
}
|
|
12
|
-
if (actual == null) {
|
|
13
|
-
msg += ` Received ${actual}`;
|
|
14
|
-
}
|
|
15
|
-
else if (typeof actual === 'function' && actual.name) {
|
|
16
|
-
msg += ` Received function ${actual.name}`;
|
|
17
|
-
}
|
|
18
|
-
else if (typeof actual === 'object' && actual != null) {
|
|
19
|
-
if (actual.constructor?.name) {
|
|
20
|
-
msg += ` Received an instance of ${actual.constructor.name}`;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return msg;
|
|
2
|
+
if (types.length > 2) {
|
|
3
|
+
const last = types.pop();
|
|
4
|
+
msg += `one of type ${types.join(", ")}, or ${last}.`;
|
|
5
|
+
} else types.length === 2 ? msg += `one of type ${types[0]} or ${types[1]}.` : msg += `of type ${types[0]}.`;
|
|
6
|
+
return actual == null ? msg += ` Received ${actual}` : typeof actual == "function" && actual.name ? msg += ` Received function ${actual.name}` : typeof actual == "object" && actual != null && actual.constructor?.name && (msg += ` Received an instance of ${actual.constructor.name}`), msg;
|
|
24
7
|
}
|
|
25
|
-
|
|
26
|
-
export
|
|
8
|
+
const invalidKeyInput = (actual, ...types) => message("Key must be ", actual, ...types), withAlg = (alg, actual, ...types) => message(`Key for the ${alg} algorithm must be `, actual, ...types);
|
|
9
|
+
export {
|
|
10
|
+
invalidKeyInput,
|
|
11
|
+
withAlg
|
|
12
|
+
};
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
1
|
+
function assertCryptoKey(key) {
|
|
2
|
+
if (!isCryptoKey(key))
|
|
3
|
+
throw new Error("CryptoKey instance expected");
|
|
5
4
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
const isCryptoKey = (key) => {
|
|
6
|
+
if (key?.[Symbol.toStringTag] === "CryptoKey")
|
|
7
|
+
return !0;
|
|
8
|
+
try {
|
|
9
|
+
return key instanceof CryptoKey;
|
|
10
|
+
} catch {
|
|
11
|
+
return !1;
|
|
12
|
+
}
|
|
13
|
+
}, isKeyObject = (key) => key?.[Symbol.toStringTag] === "KeyObject", isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);
|
|
14
|
+
export {
|
|
15
|
+
assertCryptoKey,
|
|
16
|
+
isCryptoKey,
|
|
17
|
+
isKeyLike,
|
|
18
|
+
isKeyObject
|
|
15
19
|
};
|
|
16
|
-
export const isKeyObject = (key) => key?.[Symbol.toStringTag] === 'KeyObject';
|
|
17
|
-
export const isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);
|