@suveren/gateway 0.8.7 → 0.10.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 (856) hide show
  1. package/README.md +33 -1
  2. package/bin/suveren-gateway.js +363 -9
  3. package/content/integrations/erp.json +184 -0
  4. package/content/integrations/index.json +2 -1
  5. package/dist/control-plane/index.mjs +835 -118
  6. package/dist/mcp-server/http.mjs +876 -193
  7. package/dist/ui/assets/{index-tzStUGuj.js → index-B1qNl7zo.js} +21 -21
  8. package/dist/ui/index.html +1 -1
  9. package/lib/as-pairing.mjs +77 -0
  10. package/lib/config.d.mts +37 -0
  11. package/lib/config.mjs +198 -0
  12. package/node_modules/@hap/core/dist/index.d.mts +33 -2
  13. package/node_modules/@hap/core/dist/index.d.ts +33 -2
  14. package/node_modules/@hap/core/dist/index.js +26 -2
  15. package/node_modules/@hap/core/dist/index.mjs +25 -2
  16. package/node_modules/@hap/core/package.json +1 -1
  17. package/node_modules/@hap/core/src/gatekeeper.ts +36 -2
  18. package/node_modules/@hap/core/src/types.ts +21 -1
  19. package/node_modules/@hono/node-server/README.md +21 -10
  20. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  21. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  22. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  23. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  24. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  25. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  26. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  27. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  28. package/node_modules/@hono/node-server/package.json +3 -2
  29. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts +43 -2
  30. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts.map +1 -1
  31. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js +26 -5
  32. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js.map +1 -1
  33. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts +11 -0
  34. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts.map +1 -1
  35. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js +96 -14
  36. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js.map +1 -1
  37. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts +1 -0
  38. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -1
  39. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js +11 -2
  40. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -1
  41. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  42. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  43. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
  44. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js +6 -3
  45. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
  46. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts +3 -0
  47. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts.map +1 -1
  48. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js +12 -2
  49. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js.map +1 -1
  50. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts +43 -2
  51. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts.map +1 -1
  52. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js +26 -5
  53. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js.map +1 -1
  54. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts +11 -0
  55. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts.map +1 -1
  56. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js +96 -14
  57. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js.map +1 -1
  58. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts +1 -0
  59. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -1
  60. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js +11 -2
  61. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js.map +1 -1
  62. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  63. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  64. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
  65. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js +6 -3
  66. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
  67. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts +3 -0
  68. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts.map +1 -1
  69. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js +12 -2
  70. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js.map +1 -1
  71. package/node_modules/@modelcontextprotocol/sdk/package.json +1 -1
  72. package/node_modules/@types/node/README.md +1 -1
  73. package/node_modules/@types/node/crypto.d.ts +2 -2
  74. package/node_modules/@types/node/dgram.d.ts +1 -1
  75. package/node_modules/@types/node/package.json +2 -2
  76. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  77. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  78. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  79. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  80. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  81. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  82. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  83. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  84. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  85. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  86. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  87. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  88. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  89. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  90. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  91. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  92. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  93. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  94. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  95. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  96. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  97. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  98. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  99. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  100. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  101. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  102. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  103. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  104. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  105. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  106. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  107. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  108. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  109. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  110. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  111. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  112. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  113. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  114. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  115. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  116. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  117. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  118. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  119. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  120. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  121. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  122. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  123. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  124. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  125. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  126. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  127. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  128. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  129. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  130. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  131. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  132. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  133. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  134. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  135. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  136. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  137. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  138. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  139. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  140. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  141. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  142. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  143. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  144. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  145. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  146. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  147. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  148. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  149. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  150. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  151. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  152. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  153. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  154. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  155. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  156. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  157. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  158. package/node_modules/hono/dist/cjs/compose.js +49 -66
  159. package/node_modules/hono/dist/cjs/context.js +379 -450
  160. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  161. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  162. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  163. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  164. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  165. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  166. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  167. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  168. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  169. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  170. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  171. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  172. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  173. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  174. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  175. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  176. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  177. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  178. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  179. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  180. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  181. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  182. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  183. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  184. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  185. package/node_modules/hono/dist/cjs/hono-base.js +345 -403
  186. package/node_modules/hono/dist/cjs/hono.js +28 -42
  187. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  188. package/node_modules/hono/dist/cjs/index.js +22 -30
  189. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  190. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  191. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  192. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  193. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  194. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  195. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  196. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  197. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  198. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  199. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  200. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  201. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  202. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  203. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  204. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  205. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  206. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  207. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  208. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  209. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  210. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  211. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  212. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  213. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  214. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  215. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  216. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  217. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  218. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  219. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  220. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  221. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  222. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  223. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  224. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  225. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  226. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  227. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  228. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  229. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  230. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  231. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  232. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  233. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  234. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  235. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  236. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  237. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  238. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  239. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  240. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  241. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  242. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  243. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  244. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  245. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  246. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  247. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  248. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  249. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  250. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  251. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  252. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  253. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  254. package/node_modules/hono/dist/cjs/request.js +334 -346
  255. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  256. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  257. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  258. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  259. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  260. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  261. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  262. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  263. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  264. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  265. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  266. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  267. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  268. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  269. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  270. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  271. package/node_modules/hono/dist/cjs/router.js +37 -37
  272. package/node_modules/hono/dist/cjs/types.js +5 -28
  273. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  274. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  275. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  276. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  277. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  278. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  279. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  280. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  281. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  282. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  283. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  284. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  285. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  286. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  287. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  288. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  289. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  290. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  291. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  292. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  293. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  294. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  295. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  296. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  297. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  298. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  299. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  300. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  301. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  302. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  303. package/node_modules/hono/dist/client/client.js +138 -197
  304. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  305. package/node_modules/hono/dist/client/index.js +3 -7
  306. package/node_modules/hono/dist/client/types.js +1 -0
  307. package/node_modules/hono/dist/client/utils.js +51 -68
  308. package/node_modules/hono/dist/compose.js +49 -45
  309. package/node_modules/hono/dist/context.js +376 -426
  310. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  311. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  312. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  313. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  314. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  315. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  316. package/node_modules/hono/dist/helper/css/common.js +167 -225
  317. package/node_modules/hono/dist/helper/css/index.js +132 -137
  318. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  319. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  320. package/node_modules/hono/dist/helper/html/index.js +30 -39
  321. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  322. package/node_modules/hono/dist/helper/route/index.js +121 -43
  323. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  324. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  325. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  326. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  327. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  328. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  329. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  330. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  331. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  332. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  333. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  334. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  335. package/node_modules/hono/dist/hono-base.js +342 -379
  336. package/node_modules/hono/dist/hono.js +27 -20
  337. package/node_modules/hono/dist/http-exception.js +53 -33
  338. package/node_modules/hono/dist/index.js +19 -6
  339. package/node_modules/hono/dist/jsx/base.js +231 -340
  340. package/node_modules/hono/dist/jsx/children.js +16 -20
  341. package/node_modules/hono/dist/jsx/components.js +118 -170
  342. package/node_modules/hono/dist/jsx/constants.js +9 -15
  343. package/node_modules/hono/dist/jsx/context.js +153 -150
  344. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  345. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  346. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  347. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  348. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  349. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  350. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  351. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  352. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  353. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  354. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  355. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  356. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  357. package/node_modules/hono/dist/jsx/index.js +45 -98
  358. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  359. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  360. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  361. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  362. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  363. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  364. package/node_modules/hono/dist/jsx/types.js +1 -0
  365. package/node_modules/hono/dist/jsx/utils.js +105 -168
  366. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  367. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  368. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  369. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  370. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  371. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  372. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  373. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  374. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  375. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  376. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  377. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  378. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  379. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  380. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  381. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  382. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  383. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  384. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  385. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  386. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  387. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  388. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  389. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  390. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  391. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  392. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  393. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  394. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  395. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  396. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  397. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  398. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  399. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  400. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  401. package/node_modules/hono/dist/preset/quick.js +17 -15
  402. package/node_modules/hono/dist/preset/tiny.js +14 -11
  403. package/node_modules/hono/dist/request/constants.js +4 -5
  404. package/node_modules/hono/dist/request.js +328 -319
  405. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  406. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  407. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  408. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  409. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  410. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  411. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  412. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  413. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  414. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  415. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  416. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  417. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  418. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  419. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  420. package/node_modules/hono/dist/router/utils.js +4 -5
  421. package/node_modules/hono/dist/router.js +35 -14
  422. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  423. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  424. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  425. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  426. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  427. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  428. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  429. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  430. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  431. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  432. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  433. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  434. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  435. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  436. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  437. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  438. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  439. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  440. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  441. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  442. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  443. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  444. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  445. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  446. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  447. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  448. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  449. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  450. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  451. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  452. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  453. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  454. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  455. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  456. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  457. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  458. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  459. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  460. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  461. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  462. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  463. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  464. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  465. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  466. package/node_modules/hono/dist/types/context.d.ts +335 -335
  467. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  468. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  469. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  470. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  471. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  472. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  473. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  474. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  475. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  476. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  477. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  478. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  479. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  480. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  481. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  482. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  483. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  484. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  485. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  486. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  487. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  488. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  489. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  490. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  491. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  492. package/node_modules/hono/dist/types/hono-base.d.ts +208 -210
  493. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  494. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  495. package/node_modules/hono/dist/types/index.d.ts +6 -37
  496. package/node_modules/hono/dist/types/jsx/base.d.ts +36 -34
  497. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  498. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  499. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  500. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  501. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  502. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  503. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  504. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  505. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  506. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  507. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  508. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  509. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  510. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  511. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  512. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  513. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  514. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  515. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  516. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  517. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  518. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  519. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  520. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  521. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  522. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  523. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  524. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  525. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  526. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  527. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  528. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  529. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  530. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  531. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  532. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  533. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  534. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  535. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  536. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  537. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  538. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  539. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  540. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  541. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  542. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  543. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  544. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  545. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  546. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  547. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  548. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  549. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  550. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  551. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  552. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  553. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  554. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  555. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  556. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  557. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  558. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  559. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  560. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  561. package/node_modules/hono/dist/types/request.d.ts +288 -286
  562. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  563. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  564. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  565. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  566. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  567. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  568. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  569. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  570. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  571. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  572. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  573. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  574. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  575. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  576. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  577. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  578. package/node_modules/hono/dist/types/router.d.ts +23 -22
  579. package/node_modules/hono/dist/types/types.d.ts +146 -505
  580. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  581. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  582. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  583. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  584. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  585. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  586. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  587. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  588. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  589. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  590. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  591. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  592. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  593. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  594. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  595. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  596. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  597. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  598. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  599. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  600. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  601. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  602. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  603. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  604. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  605. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  606. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  607. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  608. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  609. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  610. package/node_modules/hono/dist/types.js +4 -6
  611. package/node_modules/hono/dist/utils/accept.js +185 -212
  612. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  613. package/node_modules/hono/dist/utils/body.js +87 -92
  614. package/node_modules/hono/dist/utils/buffer.js +44 -71
  615. package/node_modules/hono/dist/utils/color.js +33 -21
  616. package/node_modules/hono/dist/utils/compress.js +11 -5
  617. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  618. package/node_modules/hono/dist/utils/constants.js +7 -5
  619. package/node_modules/hono/dist/utils/cookie.js +114 -163
  620. package/node_modules/hono/dist/utils/crypto.js +30 -40
  621. package/node_modules/hono/dist/utils/encode.js +30 -26
  622. package/node_modules/hono/dist/utils/filepath.js +23 -33
  623. package/node_modules/hono/dist/utils/handler.js +10 -11
  624. package/node_modules/hono/dist/utils/headers.js +1 -0
  625. package/node_modules/hono/dist/utils/html.js +97 -117
  626. package/node_modules/hono/dist/utils/http-status.js +1 -0
  627. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  628. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  629. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  630. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  631. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  632. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  633. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  634. package/node_modules/hono/dist/utils/mime.js +74 -79
  635. package/node_modules/hono/dist/utils/stream.js +86 -88
  636. package/node_modules/hono/dist/utils/types.js +1 -0
  637. package/node_modules/hono/dist/utils/url.js +187 -215
  638. package/node_modules/hono/dist/validator/index.js +1 -4
  639. package/node_modules/hono/dist/validator/utils.js +1 -0
  640. package/node_modules/hono/dist/validator/validator.js +61 -83
  641. package/node_modules/hono/package.json +27 -27
  642. package/node_modules/undici/LICENSE +21 -0
  643. package/node_modules/undici/README.md +741 -0
  644. package/node_modules/undici/docs/docs/api/Agent.md +84 -0
  645. package/node_modules/undici/docs/docs/api/BalancedPool.md +99 -0
  646. package/node_modules/undici/docs/docs/api/CacheStorage.md +30 -0
  647. package/node_modules/undici/docs/docs/api/CacheStore.md +164 -0
  648. package/node_modules/undici/docs/docs/api/Client.md +288 -0
  649. package/node_modules/undici/docs/docs/api/ClientStats.md +27 -0
  650. package/node_modules/undici/docs/docs/api/Connector.md +115 -0
  651. package/node_modules/undici/docs/docs/api/ContentType.md +57 -0
  652. package/node_modules/undici/docs/docs/api/Cookies.md +128 -0
  653. package/node_modules/undici/docs/docs/api/Debug.md +62 -0
  654. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +317 -0
  655. package/node_modules/undici/docs/docs/api/Dispatcher.md +1393 -0
  656. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +159 -0
  657. package/node_modules/undici/docs/docs/api/Errors.md +49 -0
  658. package/node_modules/undici/docs/docs/api/EventSource.md +45 -0
  659. package/node_modules/undici/docs/docs/api/Fetch.md +60 -0
  660. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +139 -0
  661. package/node_modules/undici/docs/docs/api/H2CClient.md +263 -0
  662. package/node_modules/undici/docs/docs/api/MockAgent.md +603 -0
  663. package/node_modules/undici/docs/docs/api/MockCallHistory.md +197 -0
  664. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +43 -0
  665. package/node_modules/undici/docs/docs/api/MockClient.md +81 -0
  666. package/node_modules/undici/docs/docs/api/MockErrors.md +12 -0
  667. package/node_modules/undici/docs/docs/api/MockPool.md +555 -0
  668. package/node_modules/undici/docs/docs/api/Pool.md +84 -0
  669. package/node_modules/undici/docs/docs/api/PoolStats.md +35 -0
  670. package/node_modules/undici/docs/docs/api/ProxyAgent.md +229 -0
  671. package/node_modules/undici/docs/docs/api/RedirectHandler.md +93 -0
  672. package/node_modules/undici/docs/docs/api/RetryAgent.md +50 -0
  673. package/node_modules/undici/docs/docs/api/RetryHandler.md +118 -0
  674. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +145 -0
  675. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +616 -0
  676. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +275 -0
  677. package/node_modules/undici/docs/docs/api/Util.md +25 -0
  678. package/node_modules/undici/docs/docs/api/WebSocket.md +141 -0
  679. package/node_modules/undici/docs/docs/api/api-lifecycle.md +91 -0
  680. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +64 -0
  681. package/node_modules/undici/docs/docs/best-practices/crawling.md +58 -0
  682. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +190 -0
  683. package/node_modules/undici/docs/docs/best-practices/proxy.md +127 -0
  684. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +224 -0
  685. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +63 -0
  686. package/node_modules/undici/index-fetch.js +65 -0
  687. package/node_modules/undici/index.d.ts +3 -0
  688. package/node_modules/undici/index.js +234 -0
  689. package/node_modules/undici/lib/api/abort-signal.js +59 -0
  690. package/node_modules/undici/lib/api/api-connect.js +110 -0
  691. package/node_modules/undici/lib/api/api-pipeline.js +252 -0
  692. package/node_modules/undici/lib/api/api-request.js +214 -0
  693. package/node_modules/undici/lib/api/api-stream.js +209 -0
  694. package/node_modules/undici/lib/api/api-upgrade.js +111 -0
  695. package/node_modules/undici/lib/api/index.js +7 -0
  696. package/node_modules/undici/lib/api/readable.js +580 -0
  697. package/node_modules/undici/lib/cache/memory-cache-store.js +279 -0
  698. package/node_modules/undici/lib/cache/sqlite-cache-store.js +467 -0
  699. package/node_modules/undici/lib/core/connect.js +153 -0
  700. package/node_modules/undici/lib/core/constants.js +143 -0
  701. package/node_modules/undici/lib/core/diagnostics.js +227 -0
  702. package/node_modules/undici/lib/core/errors.js +477 -0
  703. package/node_modules/undici/lib/core/request.js +485 -0
  704. package/node_modules/undici/lib/core/socks5-client.js +422 -0
  705. package/node_modules/undici/lib/core/socks5-utils.js +212 -0
  706. package/node_modules/undici/lib/core/symbols.js +75 -0
  707. package/node_modules/undici/lib/core/tree.js +160 -0
  708. package/node_modules/undici/lib/core/util.js +992 -0
  709. package/node_modules/undici/lib/dispatcher/agent.js +158 -0
  710. package/node_modules/undici/lib/dispatcher/balanced-pool.js +221 -0
  711. package/node_modules/undici/lib/dispatcher/client-h1.js +1746 -0
  712. package/node_modules/undici/lib/dispatcher/client-h2.js +1060 -0
  713. package/node_modules/undici/lib/dispatcher/client.js +668 -0
  714. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +184 -0
  715. package/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
  716. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +146 -0
  717. package/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
  718. package/node_modules/undici/lib/dispatcher/h2c-client.js +51 -0
  719. package/node_modules/undici/lib/dispatcher/pool-base.js +214 -0
  720. package/node_modules/undici/lib/dispatcher/pool.js +118 -0
  721. package/node_modules/undici/lib/dispatcher/proxy-agent.js +319 -0
  722. package/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
  723. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +137 -0
  724. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +260 -0
  725. package/node_modules/undici/lib/encoding/index.js +33 -0
  726. package/node_modules/undici/lib/global.js +59 -0
  727. package/node_modules/undici/lib/handler/cache-handler.js +776 -0
  728. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +124 -0
  729. package/node_modules/undici/lib/handler/decorator-handler.js +67 -0
  730. package/node_modules/undici/lib/handler/deduplication-handler.js +460 -0
  731. package/node_modules/undici/lib/handler/redirect-handler.js +238 -0
  732. package/node_modules/undici/lib/handler/retry-handler.js +504 -0
  733. package/node_modules/undici/lib/handler/unwrap-handler.js +106 -0
  734. package/node_modules/undici/lib/handler/wrap-handler.js +105 -0
  735. package/node_modules/undici/lib/interceptor/cache.js +621 -0
  736. package/node_modules/undici/lib/interceptor/decompress.js +551 -0
  737. package/node_modules/undici/lib/interceptor/deduplicate.js +117 -0
  738. package/node_modules/undici/lib/interceptor/dns.js +571 -0
  739. package/node_modules/undici/lib/interceptor/dump.js +99 -0
  740. package/node_modules/undici/lib/interceptor/redirect.js +21 -0
  741. package/node_modules/undici/lib/interceptor/response-error.js +95 -0
  742. package/node_modules/undici/lib/interceptor/retry.js +19 -0
  743. package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  744. package/node_modules/undici/lib/llhttp/constants.d.ts +195 -0
  745. package/node_modules/undici/lib/llhttp/constants.js +531 -0
  746. package/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  747. package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  748. package/node_modules/undici/lib/llhttp/utils.d.ts +2 -0
  749. package/node_modules/undici/lib/llhttp/utils.js +12 -0
  750. package/node_modules/undici/lib/mock/mock-agent.js +232 -0
  751. package/node_modules/undici/lib/mock/mock-call-history.js +248 -0
  752. package/node_modules/undici/lib/mock/mock-client.js +68 -0
  753. package/node_modules/undici/lib/mock/mock-errors.js +29 -0
  754. package/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
  755. package/node_modules/undici/lib/mock/mock-pool.js +68 -0
  756. package/node_modules/undici/lib/mock/mock-symbols.js +32 -0
  757. package/node_modules/undici/lib/mock/mock-utils.js +486 -0
  758. package/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  759. package/node_modules/undici/lib/mock/snapshot-agent.js +353 -0
  760. package/node_modules/undici/lib/mock/snapshot-recorder.js +588 -0
  761. package/node_modules/undici/lib/mock/snapshot-utils.js +158 -0
  762. package/node_modules/undici/lib/util/cache.js +676 -0
  763. package/node_modules/undici/lib/util/date.js +670 -0
  764. package/node_modules/undici/lib/util/promise.js +28 -0
  765. package/node_modules/undici/lib/util/runtime-features.js +124 -0
  766. package/node_modules/undici/lib/util/stats.js +32 -0
  767. package/node_modules/undici/lib/util/timers.js +425 -0
  768. package/node_modules/undici/lib/web/cache/cache.js +864 -0
  769. package/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
  770. package/node_modules/undici/lib/web/cache/util.js +45 -0
  771. package/node_modules/undici/lib/web/cookies/constants.js +12 -0
  772. package/node_modules/undici/lib/web/cookies/index.js +199 -0
  773. package/node_modules/undici/lib/web/cookies/parse.js +314 -0
  774. package/node_modules/undici/lib/web/cookies/util.js +352 -0
  775. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +494 -0
  776. package/node_modules/undici/lib/web/eventsource/eventsource.js +501 -0
  777. package/node_modules/undici/lib/web/eventsource/util.js +29 -0
  778. package/node_modules/undici/lib/web/fetch/LICENSE +21 -0
  779. package/node_modules/undici/lib/web/fetch/body.js +509 -0
  780. package/node_modules/undici/lib/web/fetch/constants.js +131 -0
  781. package/node_modules/undici/lib/web/fetch/data-url.js +596 -0
  782. package/node_modules/undici/lib/web/fetch/formdata-parser.js +586 -0
  783. package/node_modules/undici/lib/web/fetch/formdata.js +259 -0
  784. package/node_modules/undici/lib/web/fetch/global.js +40 -0
  785. package/node_modules/undici/lib/web/fetch/headers.js +719 -0
  786. package/node_modules/undici/lib/web/fetch/index.js +2413 -0
  787. package/node_modules/undici/lib/web/fetch/request.js +1115 -0
  788. package/node_modules/undici/lib/web/fetch/response.js +641 -0
  789. package/node_modules/undici/lib/web/fetch/util.js +1522 -0
  790. package/node_modules/undici/lib/web/infra/index.js +229 -0
  791. package/node_modules/undici/lib/web/subresource-integrity/Readme.md +9 -0
  792. package/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +307 -0
  793. package/node_modules/undici/lib/web/webidl/index.js +1006 -0
  794. package/node_modules/undici/lib/web/websocket/connection.js +339 -0
  795. package/node_modules/undici/lib/web/websocket/constants.js +126 -0
  796. package/node_modules/undici/lib/web/websocket/events.js +331 -0
  797. package/node_modules/undici/lib/web/websocket/frame.js +133 -0
  798. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +105 -0
  799. package/node_modules/undici/lib/web/websocket/receiver.js +507 -0
  800. package/node_modules/undici/lib/web/websocket/sender.js +109 -0
  801. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +104 -0
  802. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +496 -0
  803. package/node_modules/undici/lib/web/websocket/util.js +347 -0
  804. package/node_modules/undici/lib/web/websocket/websocket.js +758 -0
  805. package/node_modules/undici/package.json +152 -0
  806. package/node_modules/undici/scripts/strip-comments.js +10 -0
  807. package/node_modules/undici/types/README.md +6 -0
  808. package/node_modules/undici/types/agent.d.ts +32 -0
  809. package/node_modules/undici/types/api.d.ts +43 -0
  810. package/node_modules/undici/types/balanced-pool.d.ts +30 -0
  811. package/node_modules/undici/types/cache-interceptor.d.ts +179 -0
  812. package/node_modules/undici/types/cache.d.ts +36 -0
  813. package/node_modules/undici/types/client-stats.d.ts +15 -0
  814. package/node_modules/undici/types/client.d.ts +139 -0
  815. package/node_modules/undici/types/connector.d.ts +36 -0
  816. package/node_modules/undici/types/content-type.d.ts +21 -0
  817. package/node_modules/undici/types/cookies.d.ts +30 -0
  818. package/node_modules/undici/types/diagnostics-channel.d.ts +74 -0
  819. package/node_modules/undici/types/dispatcher.d.ts +275 -0
  820. package/node_modules/undici/types/env-http-proxy-agent.d.ts +22 -0
  821. package/node_modules/undici/types/errors.d.ts +177 -0
  822. package/node_modules/undici/types/eventsource.d.ts +66 -0
  823. package/node_modules/undici/types/fetch.d.ts +231 -0
  824. package/node_modules/undici/types/formdata.d.ts +114 -0
  825. package/node_modules/undici/types/global-dispatcher.d.ts +9 -0
  826. package/node_modules/undici/types/global-origin.d.ts +7 -0
  827. package/node_modules/undici/types/h2c-client.d.ts +73 -0
  828. package/node_modules/undici/types/handlers.d.ts +14 -0
  829. package/node_modules/undici/types/header.d.ts +160 -0
  830. package/node_modules/undici/types/index.d.ts +91 -0
  831. package/node_modules/undici/types/interceptors.d.ts +82 -0
  832. package/node_modules/undici/types/mock-agent.d.ts +68 -0
  833. package/node_modules/undici/types/mock-call-history.d.ts +111 -0
  834. package/node_modules/undici/types/mock-client.d.ts +27 -0
  835. package/node_modules/undici/types/mock-errors.d.ts +12 -0
  836. package/node_modules/undici/types/mock-interceptor.d.ts +94 -0
  837. package/node_modules/undici/types/mock-pool.d.ts +27 -0
  838. package/node_modules/undici/types/patch.d.ts +29 -0
  839. package/node_modules/undici/types/pool-stats.d.ts +19 -0
  840. package/node_modules/undici/types/pool.d.ts +41 -0
  841. package/node_modules/undici/types/proxy-agent.d.ts +29 -0
  842. package/node_modules/undici/types/readable.d.ts +68 -0
  843. package/node_modules/undici/types/retry-agent.d.ts +8 -0
  844. package/node_modules/undici/types/retry-handler.d.ts +125 -0
  845. package/node_modules/undici/types/round-robin-pool.d.ts +41 -0
  846. package/node_modules/undici/types/snapshot-agent.d.ts +109 -0
  847. package/node_modules/undici/types/socks5-proxy-agent.d.ts +25 -0
  848. package/node_modules/undici/types/util.d.ts +18 -0
  849. package/node_modules/undici/types/utility.d.ts +7 -0
  850. package/node_modules/undici/types/webidl.d.ts +347 -0
  851. package/node_modules/undici/types/websocket.d.ts +188 -0
  852. package/package.json +5 -3
  853. package/profiles/README.md +20 -0
  854. package/profiles/index.json +2 -1
  855. package/profiles/sales/0.1.profile.json +252 -0
  856. package/server.js +99 -0
@@ -0,0 +1,1060 @@
1
+ 'use strict'
2
+
3
+ const assert = require('node:assert')
4
+ const { pipeline } = require('node:stream')
5
+ const util = require('../core/util.js')
6
+ const {
7
+ RequestContentLengthMismatchError,
8
+ RequestAbortedError,
9
+ SocketError,
10
+ InformationalError,
11
+ InvalidArgumentError,
12
+ HeadersTimeoutError,
13
+ BodyTimeoutError
14
+ } = require('../core/errors.js')
15
+ const {
16
+ kUrl,
17
+ kReset,
18
+ kClient,
19
+ kRunning,
20
+ kPending,
21
+ kQueue,
22
+ kPendingIdx,
23
+ kRunningIdx,
24
+ kError,
25
+ kSocket,
26
+ kStrictContentLength,
27
+ kOnError,
28
+ kMaxConcurrentStreams,
29
+ kPingInterval,
30
+ kHTTP2Session,
31
+ kHTTP2InitialWindowSize,
32
+ kHTTP2ConnectionWindowSize,
33
+ kResume,
34
+ kSize,
35
+ kHTTPContext,
36
+ kClosed,
37
+ kBodyTimeout,
38
+ kHeadersTimeout,
39
+ kEnableConnectProtocol,
40
+ kRemoteSettings,
41
+ kHTTP2Stream,
42
+ kHTTP2SessionState
43
+ } = require('../core/symbols.js')
44
+ const { channels } = require('../core/diagnostics.js')
45
+
46
+ const kOpenStreams = Symbol('open streams')
47
+
48
+ let extractBody
49
+
50
+ /** @type {import('http2')} */
51
+ let http2
52
+ try {
53
+ http2 = require('node:http2')
54
+ } catch {
55
+ // @ts-ignore
56
+ http2 = { constants: {} }
57
+ }
58
+
59
+ const {
60
+ constants: {
61
+ HTTP2_HEADER_AUTHORITY,
62
+ HTTP2_HEADER_METHOD,
63
+ HTTP2_HEADER_PATH,
64
+ HTTP2_HEADER_SCHEME,
65
+ HTTP2_HEADER_CONTENT_LENGTH,
66
+ HTTP2_HEADER_EXPECT,
67
+ HTTP2_HEADER_STATUS,
68
+ HTTP2_HEADER_PROTOCOL,
69
+ NGHTTP2_REFUSED_STREAM,
70
+ NGHTTP2_CANCEL
71
+ }
72
+ } = http2
73
+
74
+ function parseH2Headers (headers) {
75
+ const result = []
76
+
77
+ for (const [name, value] of Object.entries(headers)) {
78
+ // h2 may concat the header value by array
79
+ // e.g. Set-Cookie
80
+ if (Array.isArray(value)) {
81
+ for (const subvalue of value) {
82
+ // we need to provide each header value of header name
83
+ // because the headers handler expect name-value pair
84
+ result.push(Buffer.from(name), Buffer.from(subvalue))
85
+ }
86
+ } else {
87
+ result.push(Buffer.from(name), Buffer.from(value))
88
+ }
89
+ }
90
+
91
+ return result
92
+ }
93
+
94
+ function connectH2 (client, socket) {
95
+ client[kSocket] = socket
96
+
97
+ const http2InitialWindowSize = client[kHTTP2InitialWindowSize]
98
+ const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize]
99
+
100
+ const session = http2.connect(client[kUrl], {
101
+ createConnection: () => socket,
102
+ peerMaxConcurrentStreams: client[kMaxConcurrentStreams],
103
+ settings: {
104
+ // TODO(metcoder95): add support for PUSH
105
+ enablePush: false,
106
+ ...(http2InitialWindowSize != null ? { initialWindowSize: http2InitialWindowSize } : null)
107
+ }
108
+ })
109
+
110
+ client[kSocket] = socket
111
+ session[kOpenStreams] = 0
112
+ session[kClient] = client
113
+ session[kSocket] = socket
114
+ session[kHTTP2SessionState] = {
115
+ ping: {
116
+ interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()
117
+ }
118
+ }
119
+ // We set it to true by default in a best-effort; however once connected to an H2 server
120
+ // we will check if extended CONNECT protocol is supported or not
121
+ // and set this value accordingly.
122
+ session[kEnableConnectProtocol] = false
123
+ // States whether or not we have received the remote settings from the server
124
+ session[kRemoteSettings] = false
125
+
126
+ // Apply connection-level flow control once connected (if supported).
127
+ if (http2ConnectionWindowSize) {
128
+ util.addListener(session, 'connect', applyConnectionWindowSize.bind(session, http2ConnectionWindowSize))
129
+ }
130
+
131
+ util.addListener(session, 'error', onHttp2SessionError)
132
+ util.addListener(session, 'frameError', onHttp2FrameError)
133
+ util.addListener(session, 'end', onHttp2SessionEnd)
134
+ util.addListener(session, 'goaway', onHttp2SessionGoAway)
135
+ util.addListener(session, 'close', onHttp2SessionClose)
136
+ util.addListener(session, 'remoteSettings', onHttp2RemoteSettings)
137
+ // TODO (@metcoder95): implement SETTINGS support
138
+ // util.addListener(session, 'localSettings', onHttp2RemoteSettings)
139
+
140
+ session.unref()
141
+
142
+ client[kHTTP2Session] = session
143
+ socket[kHTTP2Session] = session
144
+
145
+ util.addListener(socket, 'error', onHttp2SocketError)
146
+ util.addListener(socket, 'end', onHttp2SocketEnd)
147
+ util.addListener(socket, 'close', onHttp2SocketClose)
148
+
149
+ socket[kClosed] = false
150
+ socket.on('close', onSocketClose)
151
+
152
+ return {
153
+ version: 'h2',
154
+ defaultPipelining: Infinity,
155
+ /**
156
+ * @param {import('../core/request.js')} request
157
+ * @returns {boolean}
158
+ */
159
+ write (request) {
160
+ return writeH2(client, request)
161
+ },
162
+ /**
163
+ * @returns {void}
164
+ */
165
+ resume () {
166
+ resumeH2(client)
167
+ },
168
+ /**
169
+ * @param {Error | null} err
170
+ * @param {() => void} callback
171
+ */
172
+ destroy (err, callback) {
173
+ if (socket[kClosed]) {
174
+ queueMicrotask(callback)
175
+ } else {
176
+ socket.destroy(err).on('close', callback)
177
+ }
178
+ },
179
+ /**
180
+ * @type {boolean}
181
+ */
182
+ get destroyed () {
183
+ return socket.destroyed
184
+ },
185
+ /**
186
+ * @param {import('../core/request.js')} request
187
+ * @returns {boolean}
188
+ */
189
+ busy (request) {
190
+ if (request != null) {
191
+ if (client[kRunning] > 0) {
192
+ // We are already processing requests
193
+
194
+ // Non-idempotent request cannot be retried.
195
+ // Ensure that no other requests are inflight and
196
+ // could cause failure.
197
+ if (request.idempotent === false) return true
198
+ // Don't dispatch an upgrade until all preceding requests have completed.
199
+ // Possibly, we do not have remote settings confirmed yet.
200
+ if ((request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false) return true
201
+ // Request with stream or iterator body can error while other requests
202
+ // are inflight and indirectly error those as well.
203
+ // Ensure this doesn't happen by waiting for inflight
204
+ // to complete before dispatching.
205
+
206
+ // Request with stream or iterator body cannot be retried.
207
+ // Ensure that no other requests are inflight and
208
+ // could cause failure.
209
+ if (util.bodyLength(request.body) !== 0 &&
210
+ (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true
211
+ } else {
212
+ return (request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false
213
+ }
214
+ }
215
+
216
+ return false
217
+ }
218
+ }
219
+ }
220
+
221
+ function resumeH2 (client) {
222
+ const socket = client[kSocket]
223
+
224
+ if (socket?.destroyed === false) {
225
+ // Only let the process exit when there is genuinely nothing outstanding.
226
+ // Unreffing because the peer advertised MAX_CONCURRENT_STREAMS = 0 left
227
+ // queued requests with nothing holding the event loop open, so the process
228
+ // could exit with status 0 while an awaited request never settled.
229
+ if (client[kSize] === 0) {
230
+ socket.unref()
231
+ client[kHTTP2Session].unref()
232
+ } else {
233
+ socket.ref()
234
+ client[kHTTP2Session].ref()
235
+ }
236
+ }
237
+ }
238
+
239
+ function applyConnectionWindowSize (connectionWindowSize) {
240
+ try {
241
+ if (typeof this.setLocalWindowSize === 'function') {
242
+ this.setLocalWindowSize(connectionWindowSize)
243
+ }
244
+ } catch {
245
+ // Best-effort only.
246
+ }
247
+ }
248
+
249
+ function onHttp2RemoteSettings (settings) {
250
+ // Fallbacks are a safe bet, remote setting will always override
251
+ this[kClient][kMaxConcurrentStreams] = settings.maxConcurrentStreams ?? this[kClient][kMaxConcurrentStreams]
252
+ /**
253
+ * From RFC-8441
254
+ * A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter
255
+ * with the value of 0 after previously sending a value of 1.
256
+ */
257
+ // Note: Cannot be tested in Node, it does not supports disabling the extended CONNECT protocol once enabled
258
+ if (this[kRemoteSettings] === true && this[kEnableConnectProtocol] === true && settings.enableConnectProtocol === false) {
259
+ const err = new InformationalError('HTTP/2: Server disabled extended CONNECT protocol against RFC-8441')
260
+ this[kSocket][kError] = err
261
+ this[kClient][kOnError](err)
262
+ return
263
+ }
264
+
265
+ this[kEnableConnectProtocol] = settings.enableConnectProtocol ?? this[kEnableConnectProtocol]
266
+ this[kRemoteSettings] = true
267
+ this[kClient][kResume]()
268
+ }
269
+
270
+ function onHttp2SendPing (session) {
271
+ const state = session[kHTTP2SessionState]
272
+ if ((session.closed || session.destroyed) && state.ping.interval != null) {
273
+ clearInterval(state.ping.interval)
274
+ state.ping.interval = null
275
+ return
276
+ }
277
+
278
+ // If no ping sent, do nothing
279
+ session.ping(onPing.bind(session))
280
+
281
+ function onPing (err, duration) {
282
+ const client = this[kClient]
283
+ const socket = this[kClient]
284
+
285
+ if (err != null) {
286
+ const error = new InformationalError(`HTTP/2: "PING" errored - type ${err.message}`)
287
+ socket[kError] = error
288
+ client[kOnError](error)
289
+ } else {
290
+ client.emit('ping', duration)
291
+ }
292
+ }
293
+ }
294
+
295
+ function onHttp2SessionError (err) {
296
+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
297
+
298
+ this[kSocket][kError] = err
299
+ this[kClient][kOnError](err)
300
+ }
301
+
302
+ function onHttp2FrameError (type, code, id) {
303
+ if (id === 0) {
304
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)
305
+ this[kSocket][kError] = err
306
+ this[kClient][kOnError](err)
307
+ }
308
+ }
309
+
310
+ function onHttp2SessionEnd () {
311
+ const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))
312
+ this.destroy(err)
313
+ util.destroy(this[kSocket], err)
314
+ }
315
+
316
+ /**
317
+ * This is the root cause of #3011
318
+ * We need to handle GOAWAY frames properly, and trigger the session close
319
+ * along with the socket right away
320
+ *
321
+ * @this {import('http2').ClientHttp2Session}
322
+ * @param {number} errorCode
323
+ */
324
+ // Backport of #5410 and #5569. HTTP/2 multiplexes, so requests complete out of
325
+ // order; advancing kRunningIdx blindly retired whichever request happened to
326
+ // sit at the head instead of the one that actually finished, which both lost
327
+ // requests and left phantom running slots behind.
328
+ function completeRequest (client, request, resetPendingIdx = false) {
329
+ const queue = client[kQueue]
330
+ const runningIdx = client[kRunningIdx]
331
+
332
+ // In-order completion: clear the request and advance without splicing.
333
+ // The client's resume loop compacts cleared slots once the index grows.
334
+ if (runningIdx < client[kPendingIdx] && queue[runningIdx] === request) {
335
+ queue[runningIdx] = null
336
+ client[kRunningIdx] = runningIdx + 1
337
+ return
338
+ }
339
+
340
+ const index = queue.indexOf(request, runningIdx)
341
+
342
+ if (index === -1 || index >= client[kPendingIdx]) {
343
+ return
344
+ }
345
+
346
+ queue.splice(index, 1)
347
+ client[kPendingIdx]--
348
+
349
+ if (resetPendingIdx && client[kPendingIdx] < client[kRunningIdx]) {
350
+ client[kPendingIdx] = client[kRunningIdx]
351
+ }
352
+ }
353
+
354
+ function onHttp2SessionGoAway (errorCode) {
355
+ // TODO(mcollina): Verify if GOAWAY implements the spec correctly:
356
+ // https://datatracker.ietf.org/doc/html/rfc7540#section-6.8
357
+ // Specifically, we do not verify the "valid" stream id.
358
+
359
+ const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${errorCode}`, util.getSocketInfo(this[kSocket]))
360
+ const client = this[kClient]
361
+
362
+ client[kSocket] = null
363
+ client[kHTTPContext] = null
364
+
365
+ // this is an HTTP2 session
366
+ this.close()
367
+ this[kHTTP2Session] = null
368
+
369
+ util.destroy(this[kSocket], err)
370
+
371
+ // Fail head of pipeline.
372
+ if (client[kRunningIdx] < client[kQueue].length) {
373
+ const request = client[kQueue][client[kRunningIdx]]
374
+ client[kQueue][client[kRunningIdx]++] = null
375
+ if (request != null) {
376
+ util.errorRequest(client, request, err)
377
+ }
378
+ client[kPendingIdx] = client[kRunningIdx]
379
+ }
380
+
381
+ assert(client[kRunning] === 0)
382
+
383
+ client.emit('disconnect', client[kUrl], [client], err)
384
+ client.emit('connectionError', client[kUrl], [client], err)
385
+
386
+ client[kResume]()
387
+ }
388
+
389
+ function onHttp2SessionClose () {
390
+ const { [kClient]: client, [kHTTP2SessionState]: state } = this
391
+ const { [kSocket]: socket } = client
392
+
393
+ const err = this[kSocket][kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))
394
+
395
+ client[kSocket] = null
396
+ client[kHTTPContext] = null
397
+
398
+ if (state.ping.interval != null) {
399
+ clearInterval(state.ping.interval)
400
+ state.ping.interval = null
401
+ }
402
+
403
+ if (client.destroyed) {
404
+ assert(client[kPending] === 0)
405
+
406
+ // Fail entire queue.
407
+ const requests = client[kQueue].splice(client[kRunningIdx])
408
+ for (let i = 0; i < requests.length; i++) {
409
+ const request = requests[i]
410
+ if (request != null) {
411
+ util.errorRequest(client, request, err)
412
+ }
413
+ }
414
+ }
415
+ }
416
+
417
+ function onHttp2SocketClose () {
418
+ const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))
419
+
420
+ const client = this[kHTTP2Session][kClient]
421
+
422
+ client[kSocket] = null
423
+ client[kHTTPContext] = null
424
+
425
+ if (this[kHTTP2Session] !== null) {
426
+ this[kHTTP2Session].destroy(err)
427
+ }
428
+
429
+ client[kPendingIdx] = client[kRunningIdx]
430
+
431
+ assert(client[kRunning] === 0)
432
+
433
+ client.emit('disconnect', client[kUrl], [client], err)
434
+
435
+ client[kResume]()
436
+ }
437
+
438
+ function onHttp2SocketError (err) {
439
+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
440
+
441
+ this[kError] = err
442
+
443
+ this[kClient][kOnError](err)
444
+ }
445
+
446
+ function onHttp2SocketEnd () {
447
+ util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
448
+ }
449
+
450
+ function onSocketClose () {
451
+ this[kClosed] = true
452
+ }
453
+
454
+ // https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2
455
+ function shouldSendContentLength (method) {
456
+ return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'
457
+ }
458
+
459
+ function writeH2 (client, request) {
460
+ // Time to the response headers, then time between body chunks. Using
461
+ // bodyTimeout for both made headersTimeout a no-op over HTTP/2.
462
+ const headersTimeout = request.headersTimeout ?? client[kHeadersTimeout]
463
+ const bodyTimeout = request.bodyTimeout ?? client[kBodyTimeout]
464
+ const session = client[kHTTP2Session]
465
+ const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request
466
+ let { body } = request
467
+
468
+ if (upgrade != null && upgrade !== 'websocket') {
469
+ util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade "${upgrade}" not supported over HTTP/2`))
470
+ return false
471
+ }
472
+
473
+ const headers = {}
474
+ for (let n = 0; n < reqHeaders.length; n += 2) {
475
+ const key = reqHeaders[n + 0]
476
+ const val = reqHeaders[n + 1]
477
+
478
+ if (key === 'cookie') {
479
+ if (headers[key] != null) {
480
+ headers[key] = Array.isArray(headers[key]) ? (headers[key].push(val), headers[key]) : [headers[key], val]
481
+ } else {
482
+ headers[key] = val
483
+ }
484
+
485
+ continue
486
+ }
487
+
488
+ if (Array.isArray(val)) {
489
+ for (let i = 0; i < val.length; i++) {
490
+ if (headers[key]) {
491
+ headers[key] += `, ${val[i]}`
492
+ } else {
493
+ headers[key] = val[i]
494
+ }
495
+ }
496
+ } else if (headers[key]) {
497
+ headers[key] += `, ${val}`
498
+ } else {
499
+ headers[key] = val
500
+ }
501
+ }
502
+
503
+ /** @type {import('node:http2').ClientHttp2Stream} */
504
+ let stream = null
505
+
506
+ const { hostname, port } = client[kUrl]
507
+
508
+ headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`
509
+ headers[HTTP2_HEADER_METHOD] = method
510
+
511
+ const abort = (err) => {
512
+ if (request.aborted || request.completed) {
513
+ return
514
+ }
515
+
516
+ err = err || new RequestAbortedError()
517
+
518
+ util.errorRequest(client, request, err)
519
+
520
+ if (stream != null) {
521
+ // Some chunks might still come after abort,
522
+ // let's ignore them
523
+ stream.removeAllListeners('data')
524
+
525
+ // On Abort, we close the stream to send RST_STREAM frame
526
+ stream.close()
527
+
528
+ // We move the running index to the next request
529
+ client[kOnError](err)
530
+ completeRequest(client, request)
531
+ client[kResume]()
532
+ }
533
+
534
+ // We do not destroy the socket as we can continue using the session
535
+ // the stream gets destroyed and the session remains to create new streams
536
+ util.destroy(body, err)
537
+ }
538
+
539
+ try {
540
+ // We are already connected, streams are pending.
541
+ // We can call on connect, and wait for abort
542
+ request.onConnect(abort)
543
+ } catch (err) {
544
+ util.errorRequest(client, request, err)
545
+ }
546
+
547
+ if (request.aborted) {
548
+ return false
549
+ }
550
+
551
+ if (upgrade || method === 'CONNECT') {
552
+ session.ref()
553
+
554
+ if (upgrade === 'websocket') {
555
+ // We cannot upgrade to websocket if extended CONNECT protocol is not supported
556
+ if (session[kEnableConnectProtocol] === false) {
557
+ util.errorRequest(client, request, new InformationalError('HTTP/2: Extended CONNECT protocol not supported by server'))
558
+ session.unref()
559
+ return false
560
+ }
561
+
562
+ // We force the method to CONNECT
563
+ // as per RFC-8441
564
+ // https://datatracker.ietf.org/doc/html/rfc8441#section-4
565
+ headers[HTTP2_HEADER_METHOD] = 'CONNECT'
566
+ headers[HTTP2_HEADER_PROTOCOL] = 'websocket'
567
+ // :path and :scheme headers must be omitted when sending CONNECT but set if extended-CONNECT
568
+ headers[HTTP2_HEADER_PATH] = path
569
+
570
+ if (protocol === 'ws:' || protocol === 'wss:') {
571
+ headers[HTTP2_HEADER_SCHEME] = protocol === 'ws:' ? 'http' : 'https'
572
+ } else {
573
+ headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'
574
+ }
575
+
576
+ stream = session.request(headers, { endStream: false, signal })
577
+ stream[kHTTP2Stream] = true
578
+ ++session[kOpenStreams]
579
+
580
+ stream.once('response', (headers, _flags) => {
581
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
582
+
583
+ try {
584
+ request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
585
+ } catch (err) {
586
+ abort(err)
587
+ return
588
+ }
589
+ completeRequest(client, request)
590
+ })
591
+
592
+ stream.on('error', () => {
593
+ if (stream.rstCode === NGHTTP2_REFUSED_STREAM || stream.rstCode === NGHTTP2_CANCEL) {
594
+ // NGHTTP2_REFUSED_STREAM (7) or NGHTTP2_CANCEL (8)
595
+ // We do not treat those as errors as the server might
596
+ // not support websockets and refuse the stream
597
+ abort(new InformationalError(`HTTP/2: "stream error" received - code ${stream.rstCode}`))
598
+ }
599
+ })
600
+
601
+ stream.once('close', () => {
602
+ session[kOpenStreams] -= 1
603
+ if (session[kOpenStreams] === 0) session.unref()
604
+ })
605
+
606
+ stream.setTimeout(headersTimeout)
607
+ return true
608
+ }
609
+
610
+ // TODO: consolidate once we support CONNECT properly
611
+ // NOTE: We are already connected, streams are pending, first request
612
+ // will create a new stream. We trigger a request to create the stream and wait until
613
+ // `ready` event is triggered
614
+ // We disabled endStream to allow the user to write to the stream
615
+ stream = session.request(headers, { endStream: false, signal })
616
+ stream[kHTTP2Stream] = true
617
+ ++session[kOpenStreams]
618
+ stream.on('response', headers => {
619
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
620
+
621
+ try {
622
+ request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
623
+ } catch (err) {
624
+ abort(err)
625
+ return
626
+ }
627
+ completeRequest(client, request)
628
+ })
629
+ stream.on('error', abort)
630
+ stream.once('close', () => {
631
+ session[kOpenStreams] -= 1
632
+ if (session[kOpenStreams] === 0) session.unref()
633
+ })
634
+ stream.setTimeout(headersTimeout)
635
+
636
+ return true
637
+ }
638
+
639
+ // https://tools.ietf.org/html/rfc7540#section-8.3
640
+ // :path and :scheme headers must be omitted when sending CONNECT
641
+ headers[HTTP2_HEADER_PATH] = path
642
+ headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'
643
+
644
+ // https://tools.ietf.org/html/rfc7231#section-4.3.1
645
+ // https://tools.ietf.org/html/rfc7231#section-4.3.2
646
+ // https://tools.ietf.org/html/rfc7231#section-4.3.5
647
+
648
+ // Sending a payload body on a request that does not
649
+ // expect it can cause undefined behavior on some
650
+ // servers and corrupt connection state. Do not
651
+ // re-use the connection for further requests.
652
+
653
+ const expectsPayload = (
654
+ method === 'PUT' ||
655
+ method === 'POST' ||
656
+ method === 'PATCH'
657
+ )
658
+
659
+ if (body && typeof body.read === 'function') {
660
+ // Try to read EOF in order to get length.
661
+ body.read(0)
662
+ }
663
+
664
+ let contentLength = util.bodyLength(body)
665
+
666
+ if (util.isFormDataLike(body)) {
667
+ extractBody ??= require('../web/fetch/body.js').extractBody
668
+
669
+ const [bodyStream, contentType] = extractBody(body)
670
+ headers['content-type'] = contentType
671
+
672
+ body = bodyStream.stream
673
+ contentLength = bodyStream.length
674
+ }
675
+
676
+ if (contentLength == null) {
677
+ contentLength = request.contentLength
678
+ }
679
+
680
+ if (!expectsPayload) {
681
+ // https://tools.ietf.org/html/rfc7230#section-3.3.2
682
+ // A user agent SHOULD NOT send a Content-Length header field when
683
+ // the request message does not contain a payload body and the method
684
+ // semantics do not anticipate such a body.
685
+ // And for methods that don't expect a payload, omit Content-Length.
686
+ contentLength = null
687
+ }
688
+
689
+ // https://github.com/nodejs/undici/issues/2046
690
+ // A user agent may send a Content-Length header with 0 value, this should be allowed.
691
+ if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {
692
+ if (client[kStrictContentLength]) {
693
+ util.errorRequest(client, request, new RequestContentLengthMismatchError())
694
+ return false
695
+ }
696
+
697
+ process.emitWarning(new RequestContentLengthMismatchError())
698
+ }
699
+
700
+ if (contentLength != null) {
701
+ assert(body || contentLength === 0, 'no body must not have content length')
702
+ headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`
703
+ }
704
+
705
+ session.ref()
706
+
707
+ if (channels.sendHeaders.hasSubscribers) {
708
+ let header = ''
709
+ for (const key in headers) {
710
+ header += `${key}: ${headers[key]}\r\n`
711
+ }
712
+ channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })
713
+ }
714
+
715
+ // TODO(metcoder95): add support for sending trailers
716
+ const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null
717
+ if (expectContinue) {
718
+ headers[HTTP2_HEADER_EXPECT] = '100-continue'
719
+ stream = session.request(headers, { endStream: shouldEndStream, signal })
720
+ stream[kHTTP2Stream] = true
721
+
722
+ stream.once('continue', writeBodyH2)
723
+ } else {
724
+ stream = session.request(headers, {
725
+ endStream: shouldEndStream,
726
+ signal
727
+ })
728
+ stream[kHTTP2Stream] = true
729
+
730
+ writeBodyH2()
731
+ }
732
+
733
+ // Increment counter as we have new streams open
734
+ ++session[kOpenStreams]
735
+ stream.setTimeout(headersTimeout)
736
+
737
+ // Track whether we received a response (headers)
738
+ let responseReceived = false
739
+
740
+ stream.once('response', headers => {
741
+ const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
742
+ request.onResponseStarted()
743
+ responseReceived = true
744
+ stream.setTimeout(bodyTimeout)
745
+
746
+ // Due to the stream nature, it is possible we face a race condition
747
+ // where the stream has been assigned, but the request has been aborted
748
+ // the request remains in-flight and headers hasn't been received yet
749
+ // for those scenarios, best effort is to destroy the stream immediately
750
+ // as there's no value to keep it open.
751
+ if (request.aborted) {
752
+ stream.removeAllListeners('data')
753
+ return
754
+ }
755
+
756
+ if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {
757
+ stream.pause()
758
+ }
759
+
760
+ stream.on('data', (chunk) => {
761
+ if (request.aborted || request.completed) {
762
+ return
763
+ }
764
+
765
+ if (request.onData(chunk) === false) {
766
+ stream.pause()
767
+ }
768
+ })
769
+ })
770
+
771
+ stream.once('end', () => {
772
+ stream.removeAllListeners('data')
773
+ // If we received a response, this is a normal completion
774
+ if (responseReceived) {
775
+ if (!request.aborted && !request.completed) {
776
+ request.onComplete({})
777
+ }
778
+
779
+ completeRequest(client, request)
780
+ client[kResume]()
781
+ } else {
782
+ // Stream ended without receiving a response - this is an error
783
+ // (e.g., server destroyed the stream before sending headers)
784
+ abort(new InformationalError('HTTP/2: stream half-closed (remote)'))
785
+ completeRequest(client, request, true)
786
+ client[kResume]()
787
+ }
788
+ })
789
+
790
+ stream.once('close', () => {
791
+ stream.removeAllListeners('data')
792
+ session[kOpenStreams] -= 1
793
+ if (session[kOpenStreams] === 0) {
794
+ session.unref()
795
+ }
796
+
797
+ // A stream can close without ever emitting 'end' or 'error': a peer's
798
+ // RST_STREAM(CANCEL) received before the response is reported by Node as a
799
+ // bare 'close', and destroying the stream unenrolls its timeout, so no
800
+ // 'timeout' follows either. Nothing else would ever settle this request.
801
+ if (!request.aborted && !request.completed) {
802
+ abort(new InformationalError('HTTP/2: stream closed before the response was complete'))
803
+ }
804
+ })
805
+
806
+ stream.once('error', function (err) {
807
+ stream.removeAllListeners('data')
808
+ abort(err)
809
+ })
810
+
811
+ stream.once('frameError', (type, code) => {
812
+ stream.removeAllListeners('data')
813
+ abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`))
814
+ })
815
+
816
+ stream.on('aborted', () => {
817
+ stream.removeAllListeners('data')
818
+ })
819
+
820
+ stream.on('timeout', () => {
821
+ const err = responseReceived
822
+ ? new BodyTimeoutError(`HTTP/2: "body timeout after ${bodyTimeout}"`)
823
+ : new HeadersTimeoutError(`HTTP/2: "headers timeout after ${headersTimeout}"`)
824
+ stream.removeAllListeners('data')
825
+ session[kOpenStreams] -= 1
826
+
827
+ if (session[kOpenStreams] === 0) {
828
+ session.unref()
829
+ }
830
+
831
+ abort(err)
832
+ })
833
+
834
+ stream.once('trailers', trailers => {
835
+ if (request.aborted || request.completed) {
836
+ return
837
+ }
838
+
839
+ stream.removeAllListeners('data')
840
+ request.onComplete(trailers)
841
+ })
842
+
843
+ return true
844
+
845
+ function writeBodyH2 () {
846
+ if (!body || contentLength === 0) {
847
+ writeBuffer(
848
+ abort,
849
+ stream,
850
+ null,
851
+ client,
852
+ request,
853
+ client[kSocket],
854
+ contentLength,
855
+ expectsPayload
856
+ )
857
+ } else if (util.isBuffer(body)) {
858
+ writeBuffer(
859
+ abort,
860
+ stream,
861
+ body,
862
+ client,
863
+ request,
864
+ client[kSocket],
865
+ contentLength,
866
+ expectsPayload
867
+ )
868
+ } else if (util.isBlobLike(body)) {
869
+ if (typeof body.stream === 'function') {
870
+ writeIterable(
871
+ abort,
872
+ stream,
873
+ body.stream(),
874
+ client,
875
+ request,
876
+ client[kSocket],
877
+ contentLength,
878
+ expectsPayload
879
+ )
880
+ } else {
881
+ writeBlob(
882
+ abort,
883
+ stream,
884
+ body,
885
+ client,
886
+ request,
887
+ client[kSocket],
888
+ contentLength,
889
+ expectsPayload
890
+ )
891
+ }
892
+ } else if (util.isStream(body)) {
893
+ writeStream(
894
+ abort,
895
+ client[kSocket],
896
+ expectsPayload,
897
+ stream,
898
+ body,
899
+ client,
900
+ request,
901
+ contentLength
902
+ )
903
+ } else if (util.isIterable(body)) {
904
+ writeIterable(
905
+ abort,
906
+ stream,
907
+ body,
908
+ client,
909
+ request,
910
+ client[kSocket],
911
+ contentLength,
912
+ expectsPayload
913
+ )
914
+ } else {
915
+ assert(false)
916
+ }
917
+ }
918
+ }
919
+
920
+ function writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
921
+ try {
922
+ if (body != null && util.isBuffer(body)) {
923
+ assert(contentLength === body.byteLength, 'buffer body must have content length')
924
+ h2stream.cork()
925
+ h2stream.write(body)
926
+ h2stream.uncork()
927
+ h2stream.end()
928
+
929
+ request.onBodySent(body)
930
+ }
931
+
932
+ if (!expectsPayload) {
933
+ socket[kReset] = true
934
+ }
935
+
936
+ request.onRequestSent()
937
+ client[kResume]()
938
+ } catch (error) {
939
+ abort(error)
940
+ }
941
+ }
942
+
943
+ function writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {
944
+ assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')
945
+
946
+ // For HTTP/2, is enough to pipe the stream
947
+ const pipe = pipeline(
948
+ body,
949
+ h2stream,
950
+ (err) => {
951
+ if (err) {
952
+ util.destroy(pipe, err)
953
+ abort(err)
954
+ } else {
955
+ util.removeAllListeners(pipe)
956
+ request.onRequestSent()
957
+
958
+ if (!expectsPayload) {
959
+ socket[kReset] = true
960
+ }
961
+
962
+ client[kResume]()
963
+ }
964
+ }
965
+ )
966
+
967
+ util.addListener(pipe, 'data', onPipeData)
968
+
969
+ function onPipeData (chunk) {
970
+ request.onBodySent(chunk)
971
+ }
972
+ }
973
+
974
+ async function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
975
+ assert(contentLength === body.size, 'blob body must have content length')
976
+
977
+ try {
978
+ if (contentLength != null && contentLength !== body.size) {
979
+ throw new RequestContentLengthMismatchError()
980
+ }
981
+
982
+ const buffer = Buffer.from(await body.arrayBuffer())
983
+
984
+ h2stream.cork()
985
+ h2stream.write(buffer)
986
+ h2stream.uncork()
987
+ h2stream.end()
988
+
989
+ request.onBodySent(buffer)
990
+ request.onRequestSent()
991
+
992
+ if (!expectsPayload) {
993
+ socket[kReset] = true
994
+ }
995
+
996
+ client[kResume]()
997
+ } catch (err) {
998
+ abort(err)
999
+ }
1000
+ }
1001
+
1002
+ async function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
1003
+ assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')
1004
+
1005
+ let callback = null
1006
+ function onDrain () {
1007
+ if (callback) {
1008
+ const cb = callback
1009
+ callback = null
1010
+ cb()
1011
+ }
1012
+ }
1013
+
1014
+ const waitForDrain = () => new Promise((resolve, reject) => {
1015
+ assert(callback === null)
1016
+
1017
+ if (socket[kError]) {
1018
+ reject(socket[kError])
1019
+ } else {
1020
+ callback = resolve
1021
+ }
1022
+ })
1023
+
1024
+ h2stream
1025
+ .on('close', onDrain)
1026
+ .on('drain', onDrain)
1027
+
1028
+ try {
1029
+ // It's up to the user to somehow abort the async iterable.
1030
+ for await (const chunk of body) {
1031
+ if (socket[kError]) {
1032
+ throw socket[kError]
1033
+ }
1034
+
1035
+ const res = h2stream.write(chunk)
1036
+ request.onBodySent(chunk)
1037
+ if (!res) {
1038
+ await waitForDrain()
1039
+ }
1040
+ }
1041
+
1042
+ h2stream.end()
1043
+
1044
+ request.onRequestSent()
1045
+
1046
+ if (!expectsPayload) {
1047
+ socket[kReset] = true
1048
+ }
1049
+
1050
+ client[kResume]()
1051
+ } catch (err) {
1052
+ abort(err)
1053
+ } finally {
1054
+ h2stream
1055
+ .off('close', onDrain)
1056
+ .off('drain', onDrain)
1057
+ }
1058
+ }
1059
+
1060
+ module.exports = connectH2