@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
@@ -0,0 +1,210 @@
1
+ declare module "node:vfs" {
2
+ /**
3
+ * Convenience factory equivalent to `new VirtualFileSystem(provider, options)`.
4
+ *
5
+ * ```js
6
+ * const vfs = require('node:vfs');
7
+ *
8
+ * // Default in-memory provider
9
+ * const memoryVfs = vfs.create();
10
+ *
11
+ * // Explicit provider
12
+ * const realVfs = vfs.create(new vfs.RealFSProvider('/tmp/sandbox'));
13
+ * ```
14
+ * @since v26.4.0
15
+ * @param provider The provider to use. **Default:** `new MemoryProvider()`.
16
+ */
17
+ function create(provider?: VirtualProvider, options?: VirtualFileSystemOptions): VirtualFileSystem;
18
+ function create(options: VirtualFileSystemOptions): VirtualFileSystem;
19
+ interface VirtualFileSystemOptions {
20
+ /**
21
+ * Whether to emit the experimental warning. **Default:** `true`.
22
+ */
23
+ emitExperimentalWarning?: boolean | undefined;
24
+ }
25
+ /**
26
+ * A `VirtualFileSystem` wraps a {@link VirtualProvider} and exposes a
27
+ * `node:fs`-like API. Each instance maintains its own file tree.
28
+ * @since v26.4.0
29
+ */
30
+ class VirtualFileSystem {
31
+ /**
32
+ * @param provider The provider to use. **Default:** `new MemoryProvider()`.
33
+ */
34
+ constructor(provider?: VirtualProvider, options?: VirtualFileSystemOptions);
35
+ constructor(options: VirtualFileSystemOptions);
36
+ /**
37
+ * The provider backing this VFS instance.
38
+ * @since v26.4.0
39
+ */
40
+ readonly provider: VirtualProvider;
41
+ /**
42
+ * `true` when the underlying provider is read-only.
43
+ * @since v26.4.0
44
+ */
45
+ readonly readonly: boolean;
46
+ }
47
+ interface VirtualFileSystem extends
48
+ // Synchronous API
49
+ Pick<
50
+ typeof import("node:fs"),
51
+ | "existsSync"
52
+ | "statSync"
53
+ | "lstatSync"
54
+ | "readFileSync"
55
+ | "writeFileSync"
56
+ | "appendFileSync"
57
+ | "readdirSync"
58
+ | "mkdirSync"
59
+ | "rmdirSync"
60
+ | "unlinkSync"
61
+ | "renameSync"
62
+ | "copyFileSync"
63
+ | "realpathSync"
64
+ | "readlinkSync"
65
+ | "symlinkSync"
66
+ | "accessSync"
67
+ | "rmSync"
68
+ | "truncateSync"
69
+ | "ftruncateSync"
70
+ | "linkSync"
71
+ | "chmodSync"
72
+ | "chownSync"
73
+ | "utimesSync"
74
+ | "lutimesSync"
75
+ | "mkdtempSync"
76
+ | "opendirSync"
77
+ | "openAsBlob"
78
+ | "openSync"
79
+ | "closeSync"
80
+ | "readSync"
81
+ | "writeSync"
82
+ | "fstatSync"
83
+ | "createReadStream"
84
+ | "createWriteStream"
85
+ | "watch"
86
+ | "watchFile"
87
+ | "unwatchFile"
88
+ >,
89
+ // Callback API
90
+ Pick<
91
+ typeof import("node:fs"),
92
+ | "readFile"
93
+ | "writeFile"
94
+ | "stat"
95
+ | "lstat"
96
+ | "readdir"
97
+ | "realpath"
98
+ | "readlink"
99
+ | "access"
100
+ | "open"
101
+ | "close"
102
+ | "read"
103
+ | "write"
104
+ | "rm"
105
+ | "fstat"
106
+ | "truncate"
107
+ | "ftruncate"
108
+ | "link"
109
+ | "mkdtemp"
110
+ | "opendir"
111
+ >
112
+ {
113
+ // Promise API
114
+ readonly promises: Pick<
115
+ typeof import("node:fs/promises"),
116
+ | "readFile"
117
+ | "writeFile"
118
+ | "appendFile"
119
+ | "stat"
120
+ | "lstat"
121
+ | "readdir"
122
+ | "mkdir"
123
+ | "rmdir"
124
+ | "unlink"
125
+ | "rename"
126
+ | "copyFile"
127
+ | "realpath"
128
+ | "readlink"
129
+ | "symlink"
130
+ | "access"
131
+ | "rm"
132
+ | "truncate"
133
+ | "link"
134
+ | "mkdtemp"
135
+ | "chmod"
136
+ | "chown"
137
+ | "lchown"
138
+ | "utimes"
139
+ | "lutimes"
140
+ | "open"
141
+ | "lchmod"
142
+ | "watch"
143
+ >;
144
+ }
145
+ /**
146
+ * The base class for all VFS providers. Subclasses implement the essential
147
+ * primitives (such as `open`, `stat`, `readdir`, `mkdir`, `rmdir`, `unlink`,
148
+ * `rename`, etc.) and inherit default implementations of the derived
149
+ * methods (such as `readFile`, `writeFile`, `exists`, `copyFile`, `access`, etc.).
150
+ * @since v26.4.0
151
+ */
152
+ abstract class VirtualProvider {
153
+ get readonly(): boolean;
154
+ get supportsSymlinks(): boolean;
155
+ get supportsWatch(): boolean;
156
+ }
157
+ /**
158
+ * The default in-memory provider. Stores files, directories, and symbolic
159
+ * links in a `Map`-backed tree, supports symlinks (`supportsSymlinks ===
160
+ * true`), and supports watching (`supportsWatch === true`).
161
+ * @since v26.4.0
162
+ */
163
+ class MemoryProvider extends VirtualProvider {
164
+ /**
165
+ * Locks the provider into read-only mode. Subsequent writes through any
166
+ * `VirtualFileSystem` using this provider throw `EROFS`. There is no
167
+ * way to revert the provider to writable.
168
+ *
169
+ * ```js
170
+ * const vfs = require('node:vfs');
171
+ *
172
+ * const provider = new vfs.MemoryProvider();
173
+ * const myVfs = vfs.create(provider);
174
+ * myVfs.writeFileSync('/seed.txt', 'initial');
175
+ *
176
+ * provider.setReadOnly();
177
+ *
178
+ * myVfs.writeFileSync('/x.txt', 'fail'); // throws EROFS
179
+ * ```
180
+ * @since v26.4.0
181
+ */
182
+ setReadOnly(): void;
183
+ }
184
+ /**
185
+ * A provider that wraps a directory (i.e. one on the actual file system) and exposes its
186
+ * contents through the VFS API. All VFS paths are resolved relative to
187
+ * the root and verified to stay inside it; symbolic links resolving
188
+ * outside the root are rejected.
189
+ * @since v26.4.0
190
+ */
191
+ class RealFSProvider extends VirtualProvider {
192
+ /**
193
+ * ```js
194
+ * const vfs = require('node:vfs');
195
+ *
196
+ * const realVfs = vfs.create(new vfs.RealFSProvider('/tmp/sandbox'));
197
+ * realVfs.writeFileSync('/file.txt', 'hello'); // writes /tmp/sandbox/file.txt
198
+ * ```
199
+ * @since v26.4.0
200
+ * @param rootPath The absolute file-system path to use as the root.
201
+ * Must be a non-empty string.
202
+ */
203
+ constructor(rootPath: string);
204
+ /**
205
+ * The resolved absolute path used as the root.
206
+ * @since v26.4.0
207
+ */
208
+ readonly rootPath: string;
209
+ }
210
+ }
@@ -741,7 +741,7 @@ declare module "node:vm" {
741
741
  */
742
742
  status: ModuleStatus;
743
743
  /**
744
- * Evaluate the module and its depenendencies. Corresponds to the [Evaluate() concrete method](https://tc39.es/ecma262/#sec-moduleevaluation) field of
744
+ * Evaluate the module and its dependencies. Corresponds to the [Evaluate() concrete method](https://tc39.es/ecma262/#sec-moduleevaluation) field of
745
745
  * [Cyclic Module Record](https://tc39.es/ecma262/#sec-cyclic-module-records)s in the ECMAScript specification.
746
746
  *
747
747
  * If the module is a `vm.SourceTextModule`, `evaluate()` must be called after the module has been instantiated;
@@ -297,9 +297,9 @@ var setDraft8Headers = (response, info, windowMs, name, key) => {
297
297
  response.append("RateLimit", `"${name}"; ${header}`);
298
298
  response.append("RateLimit-Policy", `"${name}"; ${policy}`);
299
299
  };
300
- var setRetryAfterHeader = (response, info, windowMs) => {
300
+ var setRetryAfterHeader = (response, info, windowMs, retryAfter) => {
301
301
  if (response.headersSent) return;
302
- const resetSeconds = getResetSeconds(windowMs, info.resetTime);
302
+ const resetSeconds = retryAfter ?? getResetSeconds(windowMs, info.resetTime);
303
303
  response.setHeader("Retry-After", resetSeconds.toString());
304
304
  };
305
305
 
@@ -566,6 +566,7 @@ var validations = {
566
566
  legacyHeaders: true,
567
567
  standardHeaders: true,
568
568
  identifier: true,
569
+ retryAfter: true,
569
570
  requestPropertyName: true,
570
571
  skipFailedRequests: true,
571
572
  skipSuccessfulRequests: true,
@@ -1050,7 +1051,9 @@ var rateLimit = (passedOptions) => {
1050
1051
  debug("limit exceeded");
1051
1052
  if (config.legacyHeaders || config.standardHeaders) {
1052
1053
  debug("set retry-after header");
1053
- setRetryAfterHeader(response, info, config.windowMs);
1054
+ const retrieveRetryAfter = typeof config.retryAfter === "function" ? config.retryAfter(request, response) : config.retryAfter;
1055
+ const retryAfter = await retrieveRetryAfter;
1056
+ setRetryAfterHeader(response, info, config.windowMs, retryAfter);
1054
1057
  }
1055
1058
  config.handler(request, response, next, options);
1056
1059
  return;
@@ -408,6 +408,17 @@ export type Options = {
408
408
  * Defaults to `{limit}-in-{window}`.
409
409
  */
410
410
  identifier: string | ValueDeterminingMiddleware<string>;
411
+ /**
412
+ * Method to generate a custom `Retry-After` header value (in seconds) when
413
+ * a client is rate limited.
414
+ *
415
+ * This is advisory only, it customizes what the header says, it does not
416
+ * change how long the limiter actually keeps blocking the client for.
417
+ * That is still controlled by `windowMs`.
418
+ *
419
+ * By default, the number of seconds remaining until the window resets.
420
+ */
421
+ retryAfter?: number | ValueDeterminingMiddleware<number>;
411
422
  /**
412
423
  * The name of the property on the request object to store the rate limit info.
413
424
  *
@@ -408,6 +408,17 @@ export type Options = {
408
408
  * Defaults to `{limit}-in-{window}`.
409
409
  */
410
410
  identifier: string | ValueDeterminingMiddleware<string>;
411
+ /**
412
+ * Method to generate a custom `Retry-After` header value (in seconds) when
413
+ * a client is rate limited.
414
+ *
415
+ * This is advisory only, it customizes what the header says, it does not
416
+ * change how long the limiter actually keeps blocking the client for.
417
+ * That is still controlled by `windowMs`.
418
+ *
419
+ * By default, the number of seconds remaining until the window resets.
420
+ */
421
+ retryAfter?: number | ValueDeterminingMiddleware<number>;
411
422
  /**
412
423
  * The name of the property on the request object to store the rate limit info.
413
424
  *
@@ -408,6 +408,17 @@ export type Options = {
408
408
  * Defaults to `{limit}-in-{window}`.
409
409
  */
410
410
  identifier: string | ValueDeterminingMiddleware<string>;
411
+ /**
412
+ * Method to generate a custom `Retry-After` header value (in seconds) when
413
+ * a client is rate limited.
414
+ *
415
+ * This is advisory only, it customizes what the header says, it does not
416
+ * change how long the limiter actually keeps blocking the client for.
417
+ * That is still controlled by `windowMs`.
418
+ *
419
+ * By default, the number of seconds remaining until the window resets.
420
+ */
421
+ retryAfter?: number | ValueDeterminingMiddleware<number>;
411
422
  /**
412
423
  * The name of the property on the request object to store the rate limit info.
413
424
  *
@@ -254,9 +254,9 @@ var setDraft8Headers = (response, info, windowMs, name, key) => {
254
254
  response.append("RateLimit", `"${name}"; ${header}`);
255
255
  response.append("RateLimit-Policy", `"${name}"; ${policy}`);
256
256
  };
257
- var setRetryAfterHeader = (response, info, windowMs) => {
257
+ var setRetryAfterHeader = (response, info, windowMs, retryAfter) => {
258
258
  if (response.headersSent) return;
259
- const resetSeconds = getResetSeconds(windowMs, info.resetTime);
259
+ const resetSeconds = retryAfter ?? getResetSeconds(windowMs, info.resetTime);
260
260
  response.setHeader("Retry-After", resetSeconds.toString());
261
261
  };
262
262
 
@@ -523,6 +523,7 @@ var validations = {
523
523
  legacyHeaders: true,
524
524
  standardHeaders: true,
525
525
  identifier: true,
526
+ retryAfter: true,
526
527
  requestPropertyName: true,
527
528
  skipFailedRequests: true,
528
529
  skipSuccessfulRequests: true,
@@ -1007,7 +1008,9 @@ var rateLimit = (passedOptions) => {
1007
1008
  debug("limit exceeded");
1008
1009
  if (config.legacyHeaders || config.standardHeaders) {
1009
1010
  debug("set retry-after header");
1010
- setRetryAfterHeader(response, info, config.windowMs);
1011
+ const retrieveRetryAfter = typeof config.retryAfter === "function" ? config.retryAfter(request, response) : config.retryAfter;
1012
+ const retryAfter = await retrieveRetryAfter;
1013
+ setRetryAfterHeader(response, info, config.windowMs, retryAfter);
1011
1014
  }
1012
1015
  config.handler(request, response, next, options);
1013
1016
  return;
@@ -1,4 +1,4 @@
1
- # MIT License
1
+ MIT License
2
2
 
3
3
  Copyright 2023 Nathan Friedly, Vedant K
4
4
 
@@ -13,8 +13,9 @@ The above copyright notice and this permission notice shall be included in all
13
13
  copies or substantial portions of the Software.
14
14
 
15
15
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "express-rate-limit",
3
- "version": "8.6.2",
3
+ "version": "8.7.0",
4
4
  "description": "Basic IP rate-limiting middleware for Express. Use to limit repeated requests to public APIs and/or endpoints such as password reset.",
5
5
  "author": {
6
6
  "name": "Nathan Friedly",
@@ -90,16 +90,16 @@
90
90
  "@types/debug": "4.1.13",
91
91
  "@types/express": "5.0.6",
92
92
  "@types/jest": "30.0.0",
93
- "@types/node": "26.1.2",
93
+ "@types/node": "26.2.0",
94
94
  "@types/supertest": "7.2.1",
95
95
  "del-cli": "7.0.0",
96
96
  "dts-bundle-generator": "8.1.2",
97
- "esbuild": "0.28.1",
97
+ "esbuild": "0.28.2",
98
98
  "express": "5.2.1",
99
99
  "husky": "9.1.7",
100
100
  "jest": "30.4.2",
101
- "lint-staged": "17.2.0",
102
- "mintlify": "4.2.743",
101
+ "lint-staged": "17.3.0",
102
+ "mintlify": "4.2.817",
103
103
  "npm-run-all": "4.1.5",
104
104
  "prettier": "3.9.6",
105
105
  "ratelimit-header-parser": "0.1.0",
@@ -5,6 +5,7 @@
5
5
  [![tests](https://img.shields.io/github/actions/workflow/status/express-rate-limit/express-rate-limit/ci.yaml)](https://github.com/express-rate-limit/express-rate-limit/actions/workflows/ci.yaml)
6
6
  [![npm version](https://img.shields.io/npm/v/express-rate-limit.svg)](https://npmjs.org/package/express-rate-limit 'View this project on NPM')
7
7
  [![npm downloads](https://img.shields.io/npm/dm/express-rate-limit)](https://www.npmjs.com/package/express-rate-limit)
8
+ [![inspect.software](https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/express-rate-limit/express-rate-limit.svg)](https://inspect.software/software/express-rate-limit/express-rate-limit)
8
9
  [![license](https://img.shields.io/npm/l/express-rate-limit)](license.md)
9
10
 
10
11
  </div>