@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.
Files changed (264) hide show
  1. package/content/integrations/mollie.json +103 -28
  2. package/dist/control-plane/index.mjs +248 -58
  3. package/dist/mcp-server/http.mjs +577 -124
  4. package/dist/ui/assets/index-BFnSVa9N.js +110 -0
  5. package/dist/ui/assets/{index-CkWaRck1.css → index-BYVb_0oG.css} +1 -1
  6. package/dist/ui/index.html +2 -2
  7. package/node_modules/@hap/core/dist/index.d.mts +285 -13
  8. package/node_modules/@hap/core/dist/index.d.ts +285 -13
  9. package/node_modules/@hap/core/dist/index.js +281 -13
  10. package/node_modules/@hap/core/dist/index.mjs +266 -12
  11. package/node_modules/@hap/core/package.json +4 -2
  12. package/node_modules/@hap/core/src/did-key.ts +126 -0
  13. package/node_modules/@hap/core/src/frame.ts +115 -14
  14. package/node_modules/@hap/core/src/gatekeeper.ts +26 -0
  15. package/node_modules/@hap/core/src/identity.ts +21 -5
  16. package/node_modules/@hap/core/src/index.ts +3 -0
  17. package/node_modules/@hap/core/src/mandate.ts +207 -0
  18. package/node_modules/@hap/core/src/receipt.ts +74 -0
  19. package/node_modules/@hap/core/src/types.ts +87 -5
  20. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/accept.js +54 -0
  21. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/charset.js +10 -34
  22. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/encoding.js +9 -30
  23. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/language.js +15 -36
  24. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/lib/mediaType.js +16 -134
  25. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/LICENSE +22 -0
  26. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/README.md +71 -0
  27. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +46 -0
  28. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.js +176 -0
  29. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/dist/index.js.map +1 -0
  30. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/node_modules/content-type/package.json +52 -0
  31. package/node_modules/@modelcontextprotocol/sdk/node_modules/negotiator/package.json +16 -10
  32. package/node_modules/@types/node/README.md +1 -1
  33. package/node_modules/@types/node/buffer.buffer.d.ts +10 -5
  34. package/node_modules/@types/node/crypto.d.ts +2 -4
  35. package/node_modules/@types/node/dgram.d.ts +119 -4
  36. package/node_modules/@types/node/ffi.d.ts +1 -1
  37. package/node_modules/@types/node/fs/promises.d.ts +61 -65
  38. package/node_modules/@types/node/fs.d.ts +86 -76
  39. package/node_modules/@types/node/http.d.ts +17 -1
  40. package/node_modules/@types/node/http2.d.ts +12 -4
  41. package/node_modules/@types/node/index.d.ts +1 -0
  42. package/node_modules/@types/node/inspector.d.ts +2 -1
  43. package/node_modules/@types/node/net.d.ts +108 -16
  44. package/node_modules/@types/node/package.json +2 -2
  45. package/node_modules/@types/node/process.d.ts +52 -0
  46. package/node_modules/@types/node/quic.d.ts +246 -38
  47. package/node_modules/@types/node/sqlite.d.ts +6 -2
  48. package/node_modules/@types/node/stream/iter.d.ts +4 -4
  49. package/node_modules/@types/node/test.d.ts +36 -0
  50. package/node_modules/@types/node/tls.d.ts +24 -0
  51. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
  52. package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
  53. package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
  54. package/node_modules/@types/node/tty.d.ts +4 -3
  55. package/node_modules/@types/node/vfs.d.ts +210 -0
  56. package/node_modules/@types/node/vm.d.ts +1 -1
  57. package/node_modules/express-rate-limit/dist/index.cjs +6 -3
  58. package/node_modules/express-rate-limit/dist/index.d.cts +11 -0
  59. package/node_modules/express-rate-limit/dist/index.d.mts +11 -0
  60. package/node_modules/express-rate-limit/dist/index.d.ts +11 -0
  61. package/node_modules/express-rate-limit/dist/index.mjs +6 -3
  62. package/node_modules/express-rate-limit/{license.md → license} +7 -6
  63. package/node_modules/express-rate-limit/package.json +5 -5
  64. package/node_modules/express-rate-limit/readme.md +1 -0
  65. package/node_modules/fast-uri/index.js +215 -47
  66. package/node_modules/fast-uri/lib/schemes.js +9 -4
  67. package/node_modules/fast-uri/lib/utils.js +396 -92
  68. package/node_modules/fast-uri/package.json +1 -1
  69. package/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  70. package/node_modules/fast-uri/test/equal.test.js +31 -3
  71. package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  72. package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  73. package/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  74. package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  75. package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  76. package/node_modules/fast-uri/test/parse.test.js +7 -3
  77. package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  78. package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  79. package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  80. package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  81. package/node_modules/fast-uri/test/security.test.js +75 -3
  82. package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  83. package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  84. package/node_modules/hono/dist/cjs/client/client.js +25 -11
  85. package/node_modules/hono/dist/cjs/client/utils.js +4 -1
  86. package/node_modules/hono/dist/cjs/context.js +4 -0
  87. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  88. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  89. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  90. package/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  91. package/node_modules/hono/dist/cjs/middleware/cache/index.js +1 -1
  92. package/node_modules/hono/dist/cjs/middleware/cors/index.js +1 -1
  93. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  94. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +1 -1
  95. package/node_modules/hono/dist/cjs/middleware/etag/index.js +3 -3
  96. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  97. package/node_modules/hono/dist/cjs/request.js +8 -4
  98. package/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  99. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  100. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +10 -3
  101. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +47 -83
  102. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +2 -1
  103. package/node_modules/hono/dist/cjs/router/trie-router/node.js +46 -69
  104. package/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  105. package/node_modules/hono/dist/cjs/router/utils.js +27 -0
  106. package/node_modules/hono/dist/cjs/utils/body.js +15 -3
  107. package/node_modules/hono/dist/cjs/utils/cookie.js +1 -1
  108. package/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  109. package/node_modules/hono/dist/cjs/utils/stream.js +7 -1
  110. package/node_modules/hono/dist/cjs/utils/url.js +9 -1
  111. package/node_modules/hono/dist/client/client.js +25 -11
  112. package/node_modules/hono/dist/client/utils.js +4 -1
  113. package/node_modules/hono/dist/context.js +4 -0
  114. package/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  115. package/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  116. package/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  117. package/node_modules/hono/dist/jsx/dom/render.js +2 -0
  118. package/node_modules/hono/dist/middleware/cache/index.js +1 -1
  119. package/node_modules/hono/dist/middleware/cors/index.js +1 -1
  120. package/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  121. package/node_modules/hono/dist/middleware/etag/digest.js +1 -1
  122. package/node_modules/hono/dist/middleware/etag/index.js +3 -3
  123. package/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  124. package/node_modules/hono/dist/request.js +8 -4
  125. package/node_modules/hono/dist/router/linear-router/router.js +7 -2
  126. package/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  127. package/node_modules/hono/dist/router/reg-exp-router/node.js +6 -2
  128. package/node_modules/hono/dist/router/reg-exp-router/router.js +53 -84
  129. package/node_modules/hono/dist/router/reg-exp-router/trie.js +2 -1
  130. package/node_modules/hono/dist/router/trie-router/node.js +46 -69
  131. package/node_modules/hono/dist/router/trie-router/router.js +3 -11
  132. package/node_modules/hono/dist/router/utils.js +5 -0
  133. package/node_modules/hono/dist/types/context.d.ts +4 -0
  134. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -0
  135. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  136. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  137. package/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  138. package/node_modules/hono/dist/types/utils/url.d.ts +4 -0
  139. package/node_modules/hono/dist/utils/body.js +15 -3
  140. package/node_modules/hono/dist/utils/cookie.js +1 -1
  141. package/node_modules/hono/dist/utils/ipaddr.js +5 -3
  142. package/node_modules/hono/dist/utils/stream.js +7 -1
  143. package/node_modules/hono/dist/utils/url.js +9 -1
  144. package/node_modules/hono/package.json +1 -1
  145. package/node_modules/ip-address/README.md +92 -82
  146. package/node_modules/ip-address/dist/common.d.ts +20 -0
  147. package/node_modules/ip-address/dist/common.js +36 -0
  148. package/node_modules/ip-address/dist/common.js.map +1 -1
  149. package/node_modules/ip-address/dist/ipv4.d.ts +50 -0
  150. package/node_modules/ip-address/dist/ipv4.js +75 -0
  151. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  152. package/node_modules/ip-address/dist/ipv6.d.ts +79 -10
  153. package/node_modules/ip-address/dist/ipv6.js +120 -30
  154. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  155. package/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  156. package/node_modules/ip-address/dist/v4/constants.js +40 -1
  157. package/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  158. package/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  159. package/node_modules/ip-address/dist/v6/constants.js +47 -1
  160. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  161. package/node_modules/ip-address/package.json +1 -1
  162. package/node_modules/is-plain-object/README.md +39 -95
  163. package/node_modules/is-plain-object/dist/is-plain-object.js +0 -2
  164. package/node_modules/is-plain-object/is-plain-object.d.ts +6 -1
  165. package/node_modules/is-plain-object/package.json +8 -34
  166. package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -16
  167. package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +10 -20
  168. package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -16
  169. package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +16 -38
  170. package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +7 -16
  171. package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +19 -38
  172. package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -8
  173. package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +5 -5
  174. package/node_modules/jose/dist/types/jwks/local.d.ts +6 -10
  175. package/node_modules/jose/dist/types/jwks/remote.d.ts +17 -28
  176. package/node_modules/jose/dist/types/jws/compact/sign.d.ts +5 -10
  177. package/node_modules/jose/dist/types/jws/compact/verify.d.ts +9 -18
  178. package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +7 -16
  179. package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +9 -18
  180. package/node_modules/jose/dist/types/jws/general/sign.d.ts +11 -21
  181. package/node_modules/jose/dist/types/jws/general/verify.d.ts +12 -21
  182. package/node_modules/jose/dist/types/jwt/decrypt.d.ts +10 -20
  183. package/node_modules/jose/dist/types/jwt/encrypt.d.ts +17 -29
  184. package/node_modules/jose/dist/types/jwt/sign.d.ts +12 -19
  185. package/node_modules/jose/dist/types/jwt/unsecured.d.ts +17 -28
  186. package/node_modules/jose/dist/types/jwt/verify.d.ts +9 -19
  187. package/node_modules/jose/dist/types/key/export.d.ts +4 -4
  188. package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +6 -8
  189. package/node_modules/jose/dist/types/key/generate_secret.d.ts +4 -11
  190. package/node_modules/jose/dist/types/key/import.d.ts +10 -17
  191. package/node_modules/jose/dist/types/types.d.ts +48 -86
  192. package/node_modules/jose/dist/types/util/base64url.d.ts +2 -2
  193. package/node_modules/jose/dist/types/util/decode_jwt.d.ts +3 -10
  194. package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -4
  195. package/node_modules/jose/dist/types/util/errors.d.ts +26 -53
  196. package/node_modules/jose/dist/webapi/index.js +70 -32
  197. package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +7 -8
  198. package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +42 -26
  199. package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -10
  200. package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +53 -71
  201. package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
  202. package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +121 -158
  203. package/node_modules/jose/dist/webapi/jwk/embedded.js +30 -18
  204. package/node_modules/jose/dist/webapi/jwk/thumbprint.js +54 -64
  205. package/node_modules/jose/dist/webapi/jwks/local.js +49 -74
  206. package/node_modules/jose/dist/webapi/jwks/remote.js +91 -160
  207. package/node_modules/jose/dist/webapi/jws/compact/sign.js +21 -20
  208. package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
  209. package/node_modules/jose/dist/webapi/jws/flattened/sign.js +29 -30
  210. package/node_modules/jose/dist/webapi/jws/flattened/verify.js +21 -23
  211. package/node_modules/jose/dist/webapi/jws/general/sign.js +61 -70
  212. package/node_modules/jose/dist/webapi/jws/general/verify.js +47 -41
  213. package/node_modules/jose/dist/webapi/jwt/decrypt.js +13 -22
  214. package/node_modules/jose/dist/webapi/jwt/encrypt.js +58 -100
  215. package/node_modules/jose/dist/webapi/jwt/sign.js +18 -50
  216. package/node_modules/jose/dist/webapi/jwt/unsecured.js +34 -63
  217. package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
  218. package/node_modules/jose/dist/webapi/key/export.js +32 -37
  219. package/node_modules/jose/dist/webapi/key/generate_key_pair.js +40 -44
  220. package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -39
  221. package/node_modules/jose/dist/webapi/key/import.js +52 -52
  222. package/node_modules/jose/dist/webapi/lib/asn1.js +130 -164
  223. package/node_modules/jose/dist/webapi/lib/base64.js +18 -20
  224. package/node_modules/jose/dist/webapi/lib/buffer_utils.js +34 -38
  225. package/node_modules/jose/dist/webapi/lib/content_encryption.js +79 -123
  226. package/node_modules/jose/dist/webapi/lib/crypto_key.js +24 -25
  227. package/node_modules/jose/dist/webapi/lib/deflate.js +46 -40
  228. package/node_modules/jose/dist/webapi/lib/helpers.js +40 -37
  229. package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +10 -24
  230. package/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -15
  231. package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +106 -93
  232. package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +210 -176
  233. package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +105 -107
  234. package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +19 -0
  235. package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -16
  236. package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
  237. package/node_modules/jose/dist/webapi/lib/jws_sign.js +58 -72
  238. package/node_modules/jose/dist/webapi/lib/jws_verify.js +90 -103
  239. package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +134 -185
  240. package/node_modules/jose/dist/webapi/lib/key.js +84 -121
  241. package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
  242. package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
  243. package/node_modules/jose/dist/webapi/lib/key_management.js +200 -225
  244. package/node_modules/jose/dist/webapi/lib/key_options.js +8 -0
  245. package/node_modules/jose/dist/webapi/lib/options.js +57 -44
  246. package/node_modules/jose/dist/webapi/lib/signing.js +18 -22
  247. package/node_modules/jose/dist/webapi/lib/type_checks.js +28 -33
  248. package/node_modules/jose/dist/webapi/util/base64url.js +26 -35
  249. package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
  250. package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
  251. package/node_modules/jose/dist/webapi/util/errors.js +94 -84
  252. package/node_modules/jose/package.json +17 -81
  253. package/package.json +2 -2
  254. package/profiles/calendar/0.5.profile.json +190 -0
  255. package/profiles/charge/0.5.profile.json +210 -0
  256. package/profiles/customers/0.7.profile.json +157 -0
  257. package/profiles/deploy/0.9.profile.json +176 -0
  258. package/profiles/email/0.6.profile.json +208 -0
  259. package/profiles/index.json +9 -1
  260. package/profiles/publish/0.5.profile.json +186 -0
  261. package/profiles/purchase/0.5.profile.json +231 -0
  262. package/profiles/records/0.5.profile.json +117 -0
  263. package/dist/ui/assets/index-0Q2eNytX.js +0 -110
  264. 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." or just "."
351
- let address = arpaFormAddress.replace(/(\.ip6\.arpa)?\.$/, '');
352
- const semicolonAmount = 7;
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 parts = address.split('.').reverse();
358
- for (let i = semicolonAmount; i > 0; i--) {
359
- const insertIndex = i * 4;
360
- parts.splice(insertIndex, 0, ':');
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
- address = parts.join('');
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
- * Often referred to as the Broadcast
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 last host address in the range given by this address's subnet ie
436
- * the last address prior to the Broadcast Address
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 local address, false otherwise
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
- // Zeroes are required, i.e. we can't check isHostInSubnet with 'fe80::/10'
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)) or an
1131
- * IPv4-mapped / NAT64 address whose embedded IPv4 address is in one of the
1132
- * [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private ranges
1133
- * (e.g. `::ffff:10.0.0.1`). This is the IPv6 counterpart to
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(DOCUMENTATION_SUBNET);
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 DOCUMENTATION_SUBNET = new Address6('2001:db8::/32');
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