@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
|
@@ -339,28 +339,31 @@ class Address6 {
|
|
|
339
339
|
return new Address6(`::ffff:${address4.correctForm()}/${mask6}`);
|
|
340
340
|
}
|
|
341
341
|
/**
|
|
342
|
-
* Return an address from ip6.arpa form
|
|
342
|
+
* Return an address from ip6.arpa form. A full 32-nibble name gives a /128
|
|
343
|
+
* address; a shorter name, as used for a delegated reverse zone, gives the
|
|
344
|
+
* network it covers, with a subnet mask of four bits per nibble, so
|
|
345
|
+
* `fromArpa(x.reverseForm())` round-trips {@link reverseForm} for any prefix.
|
|
343
346
|
* @param {string} arpaFormAddress - an 'ip6.arpa' form address
|
|
344
347
|
* @returns {Adress6}
|
|
345
348
|
* @example
|
|
346
349
|
* var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)
|
|
347
350
|
* address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'
|
|
351
|
+
* Address6.fromArpa('8.b.d.0.1.0.0.2.ip6.arpa.').networkForm(); // '2001:db8::/32'
|
|
348
352
|
*/
|
|
349
353
|
static fromArpa(arpaFormAddress) {
|
|
350
|
-
// remove ending ".ip6.arpa
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
// correct ip6.arpa form with ending removed will be 63 characters
|
|
354
|
-
if (address.length !== 63) {
|
|
354
|
+
// remove an ending ".ip6.arpa", with or without the root dot
|
|
355
|
+
const nibbles = arpaFormAddress.replace(/(\.ip6\.arpa)?\.?$/, '');
|
|
356
|
+
if (!/^[0-9a-f](\.[0-9a-f]){0,31}$/i.test(nibbles)) {
|
|
355
357
|
throw new address_error_1.AddressError("Invalid 'ip6.arpa' form.");
|
|
356
358
|
}
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
359
|
+
const reversed = nibbles.split('.').reverse();
|
|
360
|
+
const subnetMask = reversed.length * 4;
|
|
361
|
+
const hex = reversed.join('').padEnd(32, '0');
|
|
362
|
+
const groups = [];
|
|
363
|
+
for (let i = 0; i < constants6.GROUPS; i++) {
|
|
364
|
+
groups.push(hex.slice(i * 4, (i + 1) * 4));
|
|
361
365
|
}
|
|
362
|
-
|
|
363
|
-
return new Address6(address);
|
|
366
|
+
return new Address6(`${groups.join(':')}/${subnetMask}`);
|
|
364
367
|
}
|
|
365
368
|
/**
|
|
366
369
|
* Return the Microsoft UNC transcription of the address
|
|
@@ -424,22 +427,53 @@ class Address6 {
|
|
|
424
427
|
return BigInt(`0b${this.mask() + '1'.repeat(constants6.BITS - this.subnetMask)}`);
|
|
425
428
|
}
|
|
426
429
|
/**
|
|
427
|
-
* The last address in the range given by this address' subnet
|
|
428
|
-
*
|
|
430
|
+
* The last address in the range given by this address's subnet. IPv6 has
|
|
431
|
+
* no broadcast address, so this is an ordinary assignable address (in a
|
|
432
|
+
* 64-bit-interface-identifier subnet it falls inside the reserved
|
|
433
|
+
* subnet-anycast block of [RFC 2526](https://datatracker.ietf.org/doc/html/rfc2526)).
|
|
429
434
|
* @returns {Address6}
|
|
430
435
|
*/
|
|
431
436
|
endAddress() {
|
|
432
437
|
return Address6.fromBigInt(this._endAddress());
|
|
433
438
|
}
|
|
434
439
|
/**
|
|
435
|
-
* The
|
|
436
|
-
* the
|
|
440
|
+
* The address one before {@link endAddress}. This is the IPv6 counterpart
|
|
441
|
+
* of the IPv4 method that skips the broadcast address; IPv6 has no broadcast,
|
|
442
|
+
* so it drops exactly one address and does not model the 128 reserved
|
|
443
|
+
* subnet-anycast identifiers of [RFC 2526](https://datatracker.ietf.org/doc/html/rfc2526).
|
|
437
444
|
* @returns {Address6}
|
|
438
445
|
*/
|
|
439
446
|
endAddressExclusive() {
|
|
440
447
|
const adjust = BigInt('1');
|
|
441
448
|
return Address6.fromBigInt(this._endAddress() - adjust);
|
|
442
449
|
}
|
|
450
|
+
/**
|
|
451
|
+
* Returns the address `n` addresses after this one (or before, when `n` is
|
|
452
|
+
* negative), keeping this address's subnet mask. Throws `AddressError` when
|
|
453
|
+
* the result would fall outside the IPv6 address space or `n` is not an
|
|
454
|
+
* integer.
|
|
455
|
+
* @param {number | bigint} n
|
|
456
|
+
* @returns {Address6}
|
|
457
|
+
* @example
|
|
458
|
+
* new Address6('2001:db8::/64').offset(1).correctForm(); // '2001:db8::1'
|
|
459
|
+
*/
|
|
460
|
+
offset(n) {
|
|
461
|
+
return Address6.fromBigInt(common.offsetBigInt(this.bigInt(), n, constants6.BITS, 'IPv6')).withSubnetMask(this.subnetMask);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Returns the network that follows this address's network: the address after
|
|
465
|
+
* {@link endAddress}, with the same subnet mask. Throws `AddressError` when
|
|
466
|
+
* this network is the last one in the address space.
|
|
467
|
+
* @returns {Address6}
|
|
468
|
+
* @example
|
|
469
|
+
* new Address6('2001:db8::/64').nextNetwork().networkForm(); // '2001:db8:0:1::/64'
|
|
470
|
+
*/
|
|
471
|
+
nextNetwork() {
|
|
472
|
+
return Address6.fromBigInt(common.offsetBigInt(this._endAddress(), 1, constants6.BITS, 'IPv6')).withSubnetMask(this.subnetMask);
|
|
473
|
+
}
|
|
474
|
+
withSubnetMask(subnetMask) {
|
|
475
|
+
return new Address6(`${this.correctForm()}/${subnetMask}`);
|
|
476
|
+
}
|
|
443
477
|
/**
|
|
444
478
|
* The hex form of the subnet mask, e.g. `ffff:ffff:ffff:ffff::` for a
|
|
445
479
|
* `/64`. Returns an `Address6`; call `.correctForm()` for the string.
|
|
@@ -1022,7 +1056,10 @@ class Address6 {
|
|
|
1022
1056
|
return this.addressMinusSuffix === this.canonicalForm();
|
|
1023
1057
|
}
|
|
1024
1058
|
/**
|
|
1025
|
-
* Returns true if the address is a link
|
|
1059
|
+
* Returns true if the address is a link-local unicast address in `fe80::/10`
|
|
1060
|
+
* ([RFC 4291 §2.4](https://datatracker.ietf.org/doc/html/rfc4291#section-2.4))
|
|
1061
|
+
* or an IPv4-mapped / NAT64 address whose embedded IPv4 address is link-local
|
|
1062
|
+
* (`169.254.0.0/16`, e.g. `::ffff:169.254.169.254`), false otherwise.
|
|
1026
1063
|
* @returns {boolean}
|
|
1027
1064
|
*/
|
|
1028
1065
|
isLinkLocal() {
|
|
@@ -1030,12 +1067,7 @@ class Address6 {
|
|
|
1030
1067
|
if (embedded) {
|
|
1031
1068
|
return embedded.isLinkLocal();
|
|
1032
1069
|
}
|
|
1033
|
-
|
|
1034
|
-
if (this.getBitsBase2(0, 64) ===
|
|
1035
|
-
'1111111010000000000000000000000000000000000000000000000000000000') {
|
|
1036
|
-
return true;
|
|
1037
|
-
}
|
|
1038
|
-
return false;
|
|
1070
|
+
return this.isHostInSubnet(LINK_LOCAL_SUBNET);
|
|
1039
1071
|
}
|
|
1040
1072
|
/**
|
|
1041
1073
|
* Returns true if the address is a multicast address, false otherwise
|
|
@@ -1127,12 +1159,20 @@ class Address6 {
|
|
|
1127
1159
|
}
|
|
1128
1160
|
/**
|
|
1129
1161
|
* Returns true if the address is private, i.e. a Unique Local Address in
|
|
1130
|
-
* `fc00::/7` ([RFC 4193](https://datatracker.ietf.org/doc/html/rfc4193))
|
|
1131
|
-
*
|
|
1132
|
-
* [RFC
|
|
1133
|
-
*
|
|
1162
|
+
* `fc00::/7` ([RFC 4193](https://datatracker.ietf.org/doc/html/rfc4193)), an
|
|
1163
|
+
* address in the NAT64 local-use range `64:ff9b:1::/48`
|
|
1164
|
+
* ([RFC 8215](https://datatracker.ietf.org/doc/html/rfc8215)), or an
|
|
1165
|
+
* IPv4-mapped / NAT64 well-known address whose embedded IPv4 address is in
|
|
1166
|
+
* one of the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918)
|
|
1167
|
+
* private ranges (e.g. `::ffff:10.0.0.1`). This is the IPv6 counterpart to
|
|
1134
1168
|
* {@link Address4.isPrivate}; use it instead of {@link isULA} when you need to
|
|
1135
1169
|
* catch mapped RFC 1918 addresses as well as native ULAs.
|
|
1170
|
+
*
|
|
1171
|
+
* The local-use NAT64 range is reported private as a whole rather than by
|
|
1172
|
+
* its embedded IPv4 address: an operator may carve a prefix of any RFC 6052
|
|
1173
|
+
* length out of `64:ff9b:1::/48`, so the same bits decode to different IPv4
|
|
1174
|
+
* addresses under different deployments and no single decoding is correct.
|
|
1175
|
+
* Use {@link toAddress4Nat64} with the deployment's prefix to decode one.
|
|
1136
1176
|
* @returns {boolean}
|
|
1137
1177
|
*/
|
|
1138
1178
|
isPrivate() {
|
|
@@ -1140,7 +1180,7 @@ class Address6 {
|
|
|
1140
1180
|
if (embedded) {
|
|
1141
1181
|
return embedded.isPrivate();
|
|
1142
1182
|
}
|
|
1143
|
-
return this.isULA();
|
|
1183
|
+
return this.isULA() || this.isHostInSubnet(NAT64_LOCAL_USE_SUBNET);
|
|
1144
1184
|
}
|
|
1145
1185
|
/**
|
|
1146
1186
|
* Returns true if the address is an IPv4-mapped / NAT64 address whose embedded
|
|
@@ -1188,7 +1228,49 @@ class Address6 {
|
|
|
1188
1228
|
* @returns {boolean}
|
|
1189
1229
|
*/
|
|
1190
1230
|
isDocumentation() {
|
|
1191
|
-
return this.isHostInSubnet(
|
|
1231
|
+
return DOCUMENTATION_SUBNETS.some((subnet) => this.isHostInSubnet(subnet));
|
|
1232
|
+
}
|
|
1233
|
+
/**
|
|
1234
|
+
* Returns true if the address is in the benchmarking range `2001:2::/48`
|
|
1235
|
+
* ([RFC 5180](https://datatracker.ietf.org/doc/html/rfc5180)) or is an
|
|
1236
|
+
* IPv4-mapped / NAT64 address whose embedded IPv4 address is in
|
|
1237
|
+
* `198.18.0.0/15`, false otherwise.
|
|
1238
|
+
* @returns {boolean}
|
|
1239
|
+
*/
|
|
1240
|
+
isBenchmarking() {
|
|
1241
|
+
const embedded = this.embeddedIPv4();
|
|
1242
|
+
if (embedded) {
|
|
1243
|
+
return embedded.isBenchmarking();
|
|
1244
|
+
}
|
|
1245
|
+
return this.isHostInSubnet(BENCHMARKING_SUBNET);
|
|
1246
|
+
}
|
|
1247
|
+
/**
|
|
1248
|
+
* Returns true if the address is globally reachable: inside the global
|
|
1249
|
+
* unicast allocation `2000::/3` (the only range the [IANA IPv6 Address Space
|
|
1250
|
+
* Registry](https://www.iana.org/assignments/ipv6-address-space/) assigns
|
|
1251
|
+
* for global unicast; everything else is reserved, ULA, link-local, or
|
|
1252
|
+
* multicast) and not in any block the [IANA IPv6 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv6-special-registry/)
|
|
1253
|
+
* marks as not globally reachable. An IPv4-mapped or NAT64 well-known
|
|
1254
|
+
* address answers for its embedded IPv4 address, so `::ffff:10.0.0.1` and
|
|
1255
|
+
* `64:ff9b::7f00:1` are not global. Teredo (`2001::/32`) and 6to4
|
|
1256
|
+
* (`2002::/16`) are not global either: the registry lists them as N/A and a
|
|
1257
|
+
* packet to one needs a relay.
|
|
1258
|
+
*
|
|
1259
|
+
* This covers everything the individual classifiers name and the blocks they
|
|
1260
|
+
* do not: the discard-only prefix `100::/64`, the IETF protocol assignments
|
|
1261
|
+
* in `2001::/23`, the deprecated site-local `fec0::/10` and IPv4-compatible
|
|
1262
|
+
* `::/96` ranges, and unallocated space such as `4000::/3`. It is the single
|
|
1263
|
+
* predicate to use where a request must not reach an internal or
|
|
1264
|
+
* special-purpose destination; see SECURITY.md.
|
|
1265
|
+
* @returns {boolean}
|
|
1266
|
+
*/
|
|
1267
|
+
isGlobal() {
|
|
1268
|
+
const embedded = this.embeddedIPv4();
|
|
1269
|
+
if (embedded) {
|
|
1270
|
+
return embedded.isGlobal();
|
|
1271
|
+
}
|
|
1272
|
+
return (this.isHostInSubnet(GLOBAL_UNICAST_SUBNET) &&
|
|
1273
|
+
common.isGloballyReachable.call(this, SPECIAL_PURPOSE_V6));
|
|
1192
1274
|
}
|
|
1193
1275
|
// #endregion
|
|
1194
1276
|
// #region HTML
|
|
@@ -1347,7 +1429,15 @@ const TYPE_SUBNETS = Object.keys(constants6.TYPES).map((subnet) => [
|
|
|
1347
1429
|
const TEREDO_SUBNET = new Address6('2001::/32');
|
|
1348
1430
|
const SIX_TO_FOUR_SUBNET = new Address6('2002::/16');
|
|
1349
1431
|
const ULA_SUBNET = new Address6('fc00::/7');
|
|
1350
|
-
const
|
|
1432
|
+
const LINK_LOCAL_SUBNET = new Address6('fe80::/10');
|
|
1433
|
+
const DOCUMENTATION_SUBNETS = [new Address6('2001:db8::/32'), new Address6('3fff::/20')];
|
|
1434
|
+
const BENCHMARKING_SUBNET = new Address6('2001:2::/48');
|
|
1435
|
+
const GLOBAL_UNICAST_SUBNET = new Address6('2000::/3');
|
|
1436
|
+
const SPECIAL_PURPOSE_V6 = constants6.SPECIAL_PURPOSE.map(([cidr, , reachable]) => ({
|
|
1437
|
+
subnet: new Address6(cidr),
|
|
1438
|
+
reachable,
|
|
1439
|
+
}));
|
|
1351
1440
|
const IPV4_MAPPED_SUBNET = new Address6('::ffff:0:0/96');
|
|
1352
1441
|
const NAT64_WELL_KNOWN_SUBNET = new Address6('64:ff9b::/96');
|
|
1442
|
+
const NAT64_LOCAL_USE_SUBNET = new Address6('64:ff9b:1::/48');
|
|
1353
1443
|
//# sourceMappingURL=ipv6.js.map
|