@lovrozagar/honey 0.7.3 → 1.0.0-rc.3

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 (1005) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +930 -1664
  3. package/bin/honey.js +87 -27
  4. package/dist/adapters/bun/serve.d.ts +18 -0
  5. package/dist/adapters/bun/serve.js +89 -0
  6. package/dist/adapters/fetch-request.d.ts +20 -0
  7. package/dist/adapters/fetch-request.js +29 -0
  8. package/dist/adapters/node/headers.d.ts +27 -0
  9. package/dist/adapters/node/headers.js +86 -0
  10. package/dist/adapters/node/request.d.ts +16 -0
  11. package/dist/adapters/node/request.js +214 -0
  12. package/dist/adapters/node/response.d.ts +11 -0
  13. package/dist/adapters/node/response.js +126 -0
  14. package/dist/adapters/node/serve.d.ts +39 -0
  15. package/dist/adapters/node/serve.js +205 -0
  16. package/dist/adapters/node/url.d.ts +13 -0
  17. package/dist/adapters/node/url.js +87 -0
  18. package/dist/adapters/serve.d.ts +36 -0
  19. package/dist/adapters/serve.js +52 -0
  20. package/dist/build/artifacts.d.ts +34 -0
  21. package/dist/build/artifacts.js +123 -0
  22. package/dist/build/cli-args.d.ts +30 -0
  23. package/dist/build/cli-args.js +97 -0
  24. package/dist/build/cli.d.ts +11 -0
  25. package/dist/build/cli.js +150 -0
  26. package/dist/build/config.d.ts +102 -0
  27. package/dist/build/config.js +89 -0
  28. package/dist/build/generate.d.ts +19 -0
  29. package/dist/build/generate.js +80 -0
  30. package/dist/build/glob.d.ts +8 -0
  31. package/dist/build/glob.js +97 -0
  32. package/dist/build/index.d.ts +3 -58
  33. package/dist/build/index.js +3 -173
  34. package/dist/build/init.d.ts +3 -0
  35. package/dist/build/init.js +131 -0
  36. package/dist/build/loaders.d.ts +33 -0
  37. package/dist/build/loaders.js +105 -0
  38. package/dist/build/plugin.d.ts +52 -0
  39. package/dist/build/plugin.js +146 -0
  40. package/dist/build/source.d.ts +21 -0
  41. package/dist/build/source.js +100 -0
  42. package/dist/build/targets.d.ts +59 -0
  43. package/dist/build/targets.js +107 -0
  44. package/dist/context/context.d.ts +111 -0
  45. package/dist/context/context.js +213 -0
  46. package/dist/context/cookie-sign.d.ts +38 -0
  47. package/dist/context/cookie-sign.js +113 -0
  48. package/dist/context/cookie.d.ts +28 -0
  49. package/dist/context/cookie.js +142 -0
  50. package/dist/context/peer.d.ts +34 -0
  51. package/dist/context/peer.js +190 -0
  52. package/dist/errors/error.d.ts +60 -0
  53. package/dist/errors/error.js +84 -0
  54. package/dist/errors/errors.d.ts +45 -0
  55. package/dist/errors/errors.js +31 -0
  56. package/dist/errors/on-error.d.ts +10 -0
  57. package/dist/errors/on-error.js +204 -0
  58. package/dist/errors/problem-json.d.ts +14 -0
  59. package/dist/errors/problem-json.js +58 -0
  60. package/dist/errors/projector.d.ts +50 -0
  61. package/dist/errors/projector.js +107 -0
  62. package/dist/i18n/error-i18n.d.ts +26 -0
  63. package/dist/i18n/error-i18n.js +77 -0
  64. package/dist/i18n/i18n.d.ts +21 -0
  65. package/dist/i18n/i18n.js +40 -0
  66. package/dist/i18n/icu.d.ts +29 -0
  67. package/dist/i18n/icu.js +170 -0
  68. package/dist/i18n/index.d.ts +4 -0
  69. package/dist/i18n/index.js +3 -0
  70. package/dist/index.d.ts +30 -746
  71. package/dist/index.js +12 -2364
  72. package/dist/input/accepts.d.ts +5 -0
  73. package/dist/input/accepts.js +105 -0
  74. package/dist/input/binary.d.ts +20 -0
  75. package/dist/input/binary.js +40 -0
  76. package/dist/input/body-kind.d.ts +15 -0
  77. package/dist/input/body-kind.js +47 -0
  78. package/dist/input/body-limit.d.ts +21 -0
  79. package/dist/input/body-limit.js +99 -0
  80. package/dist/input/cookies.d.ts +7 -0
  81. package/dist/input/cookies.js +8 -0
  82. package/dist/input/form.d.ts +10 -0
  83. package/dist/input/form.js +24 -0
  84. package/dist/input/headers.d.ts +7 -0
  85. package/dist/input/headers.js +8 -0
  86. package/dist/input/input.d.ts +91 -0
  87. package/dist/input/input.js +88 -0
  88. package/dist/input/json.d.ts +10 -0
  89. package/dist/input/json.js +22 -0
  90. package/dist/input/params.d.ts +7 -0
  91. package/dist/input/params.js +8 -0
  92. package/dist/input/query.d.ts +10 -0
  93. package/dist/input/query.js +17 -0
  94. package/dist/mcp/mount.d.ts +116 -0
  95. package/dist/mcp/mount.js +45 -0
  96. package/dist/mcp/oauth.d.ts +14 -0
  97. package/dist/mcp/oauth.js +88 -0
  98. package/dist/mcp/uploads.d.ts +36 -0
  99. package/dist/mcp/uploads.js +171 -0
  100. package/dist/mcp/url-files.d.ts +32 -0
  101. package/dist/mcp/url-files.js +75 -0
  102. package/dist/meta/meta-spec-apply.d.ts +25 -0
  103. package/dist/meta/meta-spec-apply.js +83 -0
  104. package/dist/meta/meta-spec-merge.d.ts +103 -0
  105. package/dist/meta/meta-spec-merge.js +50 -0
  106. package/dist/meta/meta-spec-validate.d.ts +61 -0
  107. package/dist/meta/meta-spec-validate.js +166 -0
  108. package/dist/meta/meta-spec.d.ts +49 -0
  109. package/dist/meta/meta-spec.js +197 -0
  110. package/dist/middleware/compress.d.ts +15 -0
  111. package/dist/middleware/compress.js +93 -0
  112. package/dist/middleware/cors.d.ts +18 -0
  113. package/dist/middleware/cors.js +80 -0
  114. package/dist/middleware/csrf.d.ts +11 -0
  115. package/dist/middleware/csrf.js +65 -0
  116. package/dist/middleware/ip-restrict.d.ts +10 -0
  117. package/dist/middleware/ip-restrict.js +82 -0
  118. package/dist/middleware/middleware.d.ts +53 -0
  119. package/dist/middleware/middleware.js +112 -0
  120. package/dist/middleware/powered-by.d.ts +6 -0
  121. package/dist/middleware/powered-by.js +13 -0
  122. package/dist/middleware/rate-limit.d.ts +40 -0
  123. package/dist/middleware/rate-limit.js +90 -0
  124. package/dist/middleware/request-id.d.ts +25 -0
  125. package/dist/middleware/request-id.js +30 -0
  126. package/dist/middleware/secure-headers.d.ts +18 -0
  127. package/dist/middleware/secure-headers.js +36 -0
  128. package/dist/middleware/server-timing.d.ts +8 -0
  129. package/dist/middleware/server-timing.js +52 -0
  130. package/dist/middleware/timeout.d.ts +6 -0
  131. package/dist/middleware/timeout.js +29 -0
  132. package/dist/observability/curl-logger.d.ts +46 -0
  133. package/dist/observability/curl-logger.js +175 -0
  134. package/dist/observability/request-to-curl.d.ts +17 -0
  135. package/dist/observability/request-to-curl.js +47 -0
  136. package/dist/openapi/collect.d.ts +56 -18
  137. package/dist/openapi/collect.js +109 -23
  138. package/dist/openapi/components.d.ts +9 -0
  139. package/dist/openapi/components.js +90 -0
  140. package/dist/openapi/docs-page.d.ts +20 -18
  141. package/dist/openapi/docs-page.js +28 -46
  142. package/dist/openapi/document.d.ts +33 -26
  143. package/dist/openapi/document.js +21 -780
  144. package/dist/openapi/extract-schemas.d.ts +11 -0
  145. package/dist/openapi/extract-schemas.js +31 -0
  146. package/dist/openapi/generate.d.ts +47 -0
  147. package/dist/openapi/generate.js +180 -0
  148. package/dist/openapi/manifest.d.ts +41 -0
  149. package/dist/openapi/manifest.js +49 -0
  150. package/dist/openapi/output-keys.d.ts +6 -0
  151. package/dist/openapi/output-keys.js +24 -0
  152. package/dist/openapi/paths.d.ts +35 -0
  153. package/dist/openapi/paths.js +175 -0
  154. package/dist/openapi/register.d.ts +14 -3
  155. package/dist/openapi/register.js +13 -20
  156. package/dist/openapi/responses.d.ts +44 -0
  157. package/dist/openapi/responses.js +159 -0
  158. package/dist/openapi/scalar.d.ts +4 -14
  159. package/dist/openapi/scalar.js +5 -7
  160. package/dist/openapi/security.d.ts +4 -0
  161. package/dist/openapi/security.js +25 -0
  162. package/dist/openapi/serve.d.ts +25 -9
  163. package/dist/openapi/serve.js +108 -29
  164. package/dist/openapi/servers.d.ts +19 -0
  165. package/dist/openapi/servers.js +72 -0
  166. package/dist/openapi/swagger.d.ts +4 -14
  167. package/dist/openapi/swagger.js +5 -7
  168. package/dist/openapi/tags.d.ts +20 -0
  169. package/dist/openapi/tags.js +20 -0
  170. package/dist/openapi/webhooks.d.ts +19 -0
  171. package/dist/openapi/webhooks.js +70 -0
  172. package/dist/openapi/yaml.d.ts +8 -0
  173. package/dist/openapi/yaml.js +74 -0
  174. package/dist/proxy/headers.d.ts +30 -0
  175. package/dist/proxy/headers.js +86 -0
  176. package/dist/proxy/proxy.d.ts +39 -0
  177. package/dist/proxy/proxy.js +103 -0
  178. package/dist/proxy/upstream.d.ts +30 -0
  179. package/dist/proxy/upstream.js +116 -0
  180. package/dist/realtime/bus.d.ts +10 -13
  181. package/dist/realtime/bus.js +48 -93
  182. package/dist/realtime/invoke-user.d.ts +36 -0
  183. package/dist/realtime/invoke-user.js +103 -0
  184. package/dist/realtime/realtime.d.ts +7 -0
  185. package/dist/realtime/realtime.js +40 -0
  186. package/dist/realtime/route.d.ts +33 -27
  187. package/dist/realtime/route.js +27 -43
  188. package/dist/realtime/server.d.ts +24 -28
  189. package/dist/realtime/server.js +202 -225
  190. package/dist/response/binary.d.ts +18 -0
  191. package/dist/response/binary.js +10 -0
  192. package/dist/response/builder.d.ts +73 -0
  193. package/dist/response/builder.js +214 -0
  194. package/dist/response/cache-control.d.ts +30 -0
  195. package/dist/response/cache-control.js +74 -0
  196. package/dist/response/etag.d.ts +15 -0
  197. package/dist/response/etag.js +83 -0
  198. package/dist/response/media-type.d.ts +28 -0
  199. package/dist/response/media-type.js +97 -0
  200. package/dist/response/out-headers.d.ts +31 -0
  201. package/dist/response/out-headers.js +130 -0
  202. package/dist/response/pretty-json.d.ts +10 -0
  203. package/dist/response/pretty-json.js +44 -0
  204. package/dist/response/range.d.ts +19 -0
  205. package/dist/response/range.js +98 -0
  206. package/dist/response/response-headers.d.ts +11 -0
  207. package/dist/response/response-headers.js +21 -0
  208. package/dist/response/response.d.ts +69 -0
  209. package/dist/response/response.js +208 -0
  210. package/dist/response/sse.d.ts +41 -0
  211. package/dist/response/sse.js +73 -0
  212. package/dist/response/static.d.ts +20 -0
  213. package/dist/response/static.js +181 -0
  214. package/dist/response/status.d.ts +5 -0
  215. package/dist/response/status.js +68 -0
  216. package/dist/response/with-headers.d.ts +11 -0
  217. package/dist/response/with-headers.js +47 -0
  218. package/dist/routing/app-types.d.ts +175 -0
  219. package/dist/routing/app-types.js +1 -0
  220. package/dist/routing/app.d.ts +76 -0
  221. package/dist/routing/app.js +137 -0
  222. package/dist/routing/codegen-types.d.ts +17 -0
  223. package/dist/routing/codegen-types.js +1 -0
  224. package/dist/routing/delegate.d.ts +9 -0
  225. package/dist/routing/delegate.js +75 -0
  226. package/dist/routing/dispatch.d.ts +22 -0
  227. package/dist/routing/dispatch.js +255 -0
  228. package/dist/routing/finalize.d.ts +47 -0
  229. package/dist/routing/finalize.js +169 -0
  230. package/dist/routing/gateway-tree.d.ts +19 -0
  231. package/dist/routing/gateway-tree.js +74 -0
  232. package/dist/routing/invalidate-check.d.ts +58 -0
  233. package/dist/routing/invalidate-check.js +124 -0
  234. package/dist/routing/match.d.ts +22 -0
  235. package/dist/routing/match.js +108 -0
  236. package/dist/routing/meta-types.d.ts +34 -0
  237. package/dist/routing/meta-types.js +5 -0
  238. package/dist/routing/middleware-chain.d.ts +16 -0
  239. package/dist/routing/middleware-chain.js +41 -0
  240. package/dist/routing/output-types.d.ts +91 -0
  241. package/dist/routing/output-types.js +1 -0
  242. package/dist/routing/pattern.d.ts +55 -0
  243. package/dist/routing/pattern.js +219 -0
  244. package/dist/routing/record.d.ts +18 -0
  245. package/dist/routing/record.js +4 -0
  246. package/dist/routing/register.d.ts +135 -0
  247. package/dist/routing/register.js +155 -0
  248. package/dist/routing/request-path.d.ts +30 -0
  249. package/dist/routing/request-path.js +173 -0
  250. package/dist/routing/route-builder.d.ts +160 -0
  251. package/dist/routing/route-builder.js +86 -0
  252. package/dist/routing/route-tree.d.ts +18 -0
  253. package/dist/routing/route-tree.js +91 -0
  254. package/dist/routing/settings-chain.d.ts +75 -0
  255. package/dist/routing/settings-chain.js +137 -0
  256. package/dist/routing/settings.d.ts +90 -0
  257. package/dist/routing/settings.js +44 -0
  258. package/dist/routing/tap.d.ts +31 -0
  259. package/dist/routing/tap.js +77 -0
  260. package/dist/routing/tree-merge.d.ts +7 -0
  261. package/dist/routing/tree-merge.js +77 -0
  262. package/dist/routing/tree.d.ts +85 -0
  263. package/dist/routing/tree.js +196 -0
  264. package/dist/routing/types.d.ts +20 -0
  265. package/dist/routing/types.js +1 -0
  266. package/dist/routing/ws-builder.d.ts +62 -0
  267. package/dist/routing/ws-builder.js +109 -0
  268. package/dist/runtime/detect-runtime.d.ts +16 -0
  269. package/dist/runtime/detect-runtime.js +11 -0
  270. package/dist/runtime/optional-peer.d.ts +10 -0
  271. package/dist/runtime/optional-peer.js +19 -0
  272. package/dist/schema/arktype.d.ts +7 -0
  273. package/dist/schema/arktype.js +13 -0
  274. package/dist/schema/canonicalize.d.ts +8 -0
  275. package/dist/schema/canonicalize.js +19 -0
  276. package/dist/schema/effect.d.ts +7 -0
  277. package/dist/schema/effect.js +4 -0
  278. package/dist/schema/naming.d.ts +31 -0
  279. package/dist/schema/naming.js +116 -0
  280. package/dist/schema/sanitize-spec.d.ts +15 -0
  281. package/dist/schema/sanitize-spec.js +43 -0
  282. package/dist/schema/slots.d.ts +15 -0
  283. package/dist/schema/slots.js +179 -0
  284. package/dist/schema/to-json-schema.d.ts +34 -0
  285. package/dist/schema/to-json-schema.js +94 -0
  286. package/dist/schema/valibot.d.ts +4 -0
  287. package/dist/schema/valibot.js +153 -0
  288. package/dist/schema/yup.d.ts +3 -0
  289. package/dist/schema/yup.js +57 -0
  290. package/dist/schema/zod.d.ts +6 -0
  291. package/dist/schema/zod.js +192 -0
  292. package/dist/security/crypto.d.ts +7 -0
  293. package/dist/security/crypto.js +30 -0
  294. package/dist/streaming/producer-stream.d.ts +45 -0
  295. package/dist/streaming/producer-stream.js +251 -0
  296. package/dist/telemetry/fields.d.ts +43 -0
  297. package/dist/telemetry/fields.js +64 -0
  298. package/dist/telemetry/log-format.d.ts +7 -0
  299. package/dist/telemetry/log-format.js +43 -0
  300. package/dist/telemetry/logger.d.ts +44 -0
  301. package/dist/telemetry/logger.js +136 -0
  302. package/dist/telemetry/otel-subpath.d.ts +7 -0
  303. package/dist/telemetry/otel-subpath.js +5 -0
  304. package/dist/telemetry/otel.d.ts +50 -57
  305. package/dist/telemetry/otel.js +54 -130
  306. package/dist/telemetry/request-log.d.ts +22 -0
  307. package/dist/telemetry/request-log.js +83 -0
  308. package/dist/telemetry/request-trace.d.ts +123 -0
  309. package/dist/telemetry/request-trace.js +199 -0
  310. package/dist/telemetry/span-lifecycle.d.ts +11 -0
  311. package/dist/telemetry/span-lifecycle.js +114 -0
  312. package/dist/telemetry/traceparent.d.ts +40 -0
  313. package/dist/telemetry/traceparent.js +73 -0
  314. package/dist/testing/testing.d.ts +42 -0
  315. package/dist/testing/testing.js +101 -0
  316. package/dist/validation/content-type.d.ts +21 -0
  317. package/dist/validation/content-type.js +42 -0
  318. package/dist/validation/standard-schema.d.ts +41 -0
  319. package/dist/validation/standard-schema.js +5 -0
  320. package/dist/validation/validate-input.d.ts +45 -0
  321. package/dist/validation/validate-input.js +174 -0
  322. package/dist/validation/validate-output.d.ts +34 -0
  323. package/dist/validation/validate-output.js +107 -0
  324. package/dist/ws/bun.d.ts +30 -25
  325. package/dist/ws/bun.js +42 -46
  326. package/dist/ws/cloudflare.d.ts +6 -75
  327. package/dist/ws/cloudflare.js +37 -104
  328. package/dist/ws/contract.d.ts +74 -0
  329. package/dist/ws/contract.js +83 -0
  330. package/dist/ws/node.d.ts +12 -21
  331. package/dist/ws/node.js +103 -151
  332. package/dist/ws/origin.d.ts +23 -0
  333. package/dist/ws/origin.js +48 -0
  334. package/dist/ws/route.d.ts +14 -0
  335. package/dist/ws/route.js +5 -0
  336. package/dist/ws/session.d.ts +15 -6
  337. package/dist/ws/session.js +22 -23
  338. package/dist/ws/shared.d.ts +23 -33
  339. package/dist/ws/shared.js +53 -39
  340. package/package.json +169 -251
  341. package/dist/accepts.d.ts +0 -12
  342. package/dist/accepts.d.ts.map +0 -1
  343. package/dist/accepts.js +0 -126
  344. package/dist/accepts.js.map +0 -1
  345. package/dist/body-kind.d.ts +0 -26
  346. package/dist/body-kind.d.ts.map +0 -1
  347. package/dist/body-kind.js +0 -70
  348. package/dist/body-kind.js.map +0 -1
  349. package/dist/body-limit.d.ts +0 -26
  350. package/dist/body-limit.d.ts.map +0 -1
  351. package/dist/body-limit.js +0 -126
  352. package/dist/body-limit.js.map +0 -1
  353. package/dist/build/index.d.ts.map +0 -1
  354. package/dist/build/index.js.map +0 -1
  355. package/dist/cli-args.d.ts +0 -33
  356. package/dist/cli-args.d.ts.map +0 -1
  357. package/dist/cli-args.js +0 -102
  358. package/dist/cli-args.js.map +0 -1
  359. package/dist/cli-go/auth.go +0 -26
  360. package/dist/cli-go/config.go +0 -192
  361. package/dist/cli-go/errors.go +0 -75
  362. package/dist/cli-go/multipart.go +0 -79
  363. package/dist/cli-go/output.go +0 -163
  364. package/dist/cli-go/root.go +0 -30
  365. package/dist/cli-go/stream.go +0 -88
  366. package/dist/cli-go/version.go +0 -5
  367. package/dist/cli.d.ts +0 -3
  368. package/dist/cli.d.ts.map +0 -1
  369. package/dist/cli.js +0 -209
  370. package/dist/cli.js.map +0 -1
  371. package/dist/client/defaults.d.ts +0 -12
  372. package/dist/client/defaults.d.ts.map +0 -1
  373. package/dist/client/defaults.js +0 -48
  374. package/dist/client/defaults.js.map +0 -1
  375. package/dist/client/error.d.ts +0 -49
  376. package/dist/client/error.d.ts.map +0 -1
  377. package/dist/client/error.js +0 -71
  378. package/dist/client/error.js.map +0 -1
  379. package/dist/client/http.d.ts +0 -155
  380. package/dist/client/http.d.ts.map +0 -1
  381. package/dist/client/http.js +0 -571
  382. package/dist/client/http.js.map +0 -1
  383. package/dist/client/index.d.ts +0 -23
  384. package/dist/client/index.d.ts.map +0 -1
  385. package/dist/client/index.js +0 -95
  386. package/dist/client/index.js.map +0 -1
  387. package/dist/client/path.d.ts +0 -26
  388. package/dist/client/path.d.ts.map +0 -1
  389. package/dist/client/path.js +0 -163
  390. package/dist/client/path.js.map +0 -1
  391. package/dist/client/redirect-policy.d.ts +0 -12
  392. package/dist/client/redirect-policy.d.ts.map +0 -1
  393. package/dist/client/redirect-policy.js +0 -20
  394. package/dist/client/redirect-policy.js.map +0 -1
  395. package/dist/client/sdk.d.ts +0 -70
  396. package/dist/client/sdk.d.ts.map +0 -1
  397. package/dist/client/sdk.js +0 -292
  398. package/dist/client/sdk.js.map +0 -1
  399. package/dist/client/sse.d.ts +0 -23
  400. package/dist/client/sse.d.ts.map +0 -1
  401. package/dist/client/sse.js +0 -129
  402. package/dist/client/sse.js.map +0 -1
  403. package/dist/client/types.d.ts +0 -124
  404. package/dist/client/types.d.ts.map +0 -1
  405. package/dist/client/types.js +0 -2
  406. package/dist/client/types.js.map +0 -1
  407. package/dist/client/ws.d.ts +0 -22
  408. package/dist/client/ws.d.ts.map +0 -1
  409. package/dist/client/ws.js +0 -112
  410. package/dist/client/ws.js.map +0 -1
  411. package/dist/client-go/errors.go +0 -236
  412. package/dist/client-go/export.go +0 -44
  413. package/dist/client-go/invalidation.go +0 -371
  414. package/dist/client-go/nullable.go +0 -62
  415. package/dist/client-go/realtime.go +0 -354
  416. package/dist/client-go/result.go +0 -20
  417. package/dist/client-go/runtime.go +0 -975
  418. package/dist/client-go/sse.go +0 -159
  419. package/dist/client-go/transport.go +0 -495
  420. package/dist/client-go/ws.go +0 -128
  421. package/dist/client-info.d.ts +0 -36
  422. package/dist/client-info.d.ts.map +0 -1
  423. package/dist/client-info.js +0 -53
  424. package/dist/client-info.js.map +0 -1
  425. package/dist/client-mcp/README.md +0 -10
  426. package/dist/client-mcp/server.ts +0 -221
  427. package/dist/client-mcp/types.ts +0 -19
  428. package/dist/client-python/_errors.py +0 -115
  429. package/dist/client-python/_invalidation.py +0 -494
  430. package/dist/client-python/_realtime.py +0 -179
  431. package/dist/client-python/_runtime.py +0 -860
  432. package/dist/client-python/_sse.py +0 -155
  433. package/dist/client-python/_transport.py +0 -366
  434. package/dist/client-python/_ws.py +0 -159
  435. package/dist/client-python/py.typed +0 -0
  436. package/dist/client-rust/errors.rs +0 -220
  437. package/dist/client-rust/invalidation.rs +0 -412
  438. package/dist/client-rust/invalidation_sync.rs +0 -93
  439. package/dist/client-rust/nullable.rs +0 -17
  440. package/dist/client-rust/realtime.rs +0 -702
  441. package/dist/client-rust/result.rs +0 -22
  442. package/dist/client-rust/runtime.rs +0 -980
  443. package/dist/client-rust/runtime_sync.rs +0 -484
  444. package/dist/client-rust/sse.rs +0 -188
  445. package/dist/client-rust/ws.rs +0 -167
  446. package/dist/codegen-go-cli.d.ts +0 -22
  447. package/dist/codegen-go-cli.d.ts.map +0 -1
  448. package/dist/codegen-go-cli.js +0 -964
  449. package/dist/codegen-go-cli.js.map +0 -1
  450. package/dist/codegen-go.d.ts +0 -41
  451. package/dist/codegen-go.d.ts.map +0 -1
  452. package/dist/codegen-go.js +0 -872
  453. package/dist/codegen-go.js.map +0 -1
  454. package/dist/codegen-hash.d.ts +0 -3
  455. package/dist/codegen-hash.d.ts.map +0 -1
  456. package/dist/codegen-hash.js +0 -9
  457. package/dist/codegen-hash.js.map +0 -1
  458. package/dist/codegen-ir.d.ts +0 -190
  459. package/dist/codegen-ir.d.ts.map +0 -1
  460. package/dist/codegen-ir.js +0 -661
  461. package/dist/codegen-ir.js.map +0 -1
  462. package/dist/codegen-lang.d.ts +0 -65
  463. package/dist/codegen-lang.d.ts.map +0 -1
  464. package/dist/codegen-lang.js +0 -526
  465. package/dist/codegen-lang.js.map +0 -1
  466. package/dist/codegen-load.d.ts +0 -31
  467. package/dist/codegen-load.d.ts.map +0 -1
  468. package/dist/codegen-load.js +0 -138
  469. package/dist/codegen-load.js.map +0 -1
  470. package/dist/codegen-loaders.d.ts +0 -12
  471. package/dist/codegen-loaders.d.ts.map +0 -1
  472. package/dist/codegen-loaders.js +0 -55
  473. package/dist/codegen-loaders.js.map +0 -1
  474. package/dist/codegen-mcp.d.ts +0 -13
  475. package/dist/codegen-mcp.d.ts.map +0 -1
  476. package/dist/codegen-mcp.js +0 -368
  477. package/dist/codegen-mcp.js.map +0 -1
  478. package/dist/codegen-python.d.ts +0 -33
  479. package/dist/codegen-python.d.ts.map +0 -1
  480. package/dist/codegen-python.js +0 -828
  481. package/dist/codegen-python.js.map +0 -1
  482. package/dist/codegen-route-tree-intern.d.ts +0 -40
  483. package/dist/codegen-route-tree-intern.d.ts.map +0 -1
  484. package/dist/codegen-route-tree-intern.js +0 -221
  485. package/dist/codegen-route-tree-intern.js.map +0 -1
  486. package/dist/codegen-rust.d.ts +0 -18
  487. package/dist/codegen-rust.d.ts.map +0 -1
  488. package/dist/codegen-rust.js +0 -1293
  489. package/dist/codegen-rust.js.map +0 -1
  490. package/dist/codegen-sanitize.d.ts +0 -3
  491. package/dist/codegen-sanitize.d.ts.map +0 -1
  492. package/dist/codegen-sanitize.js +0 -56
  493. package/dist/codegen-sanitize.js.map +0 -1
  494. package/dist/codegen-schema-naming.d.ts +0 -27
  495. package/dist/codegen-schema-naming.d.ts.map +0 -1
  496. package/dist/codegen-schema-naming.js +0 -150
  497. package/dist/codegen-schema-naming.js.map +0 -1
  498. package/dist/codegen-sdk-model.d.ts +0 -71
  499. package/dist/codegen-sdk-model.d.ts.map +0 -1
  500. package/dist/codegen-sdk-model.js +0 -179
  501. package/dist/codegen-sdk-model.js.map +0 -1
  502. package/dist/codegen.d.ts +0 -187
  503. package/dist/codegen.d.ts.map +0 -1
  504. package/dist/codegen.js +0 -4619
  505. package/dist/codegen.js.map +0 -1
  506. package/dist/context.d.ts +0 -86
  507. package/dist/context.d.ts.map +0 -1
  508. package/dist/context.js +0 -242
  509. package/dist/context.js.map +0 -1
  510. package/dist/cookie-sign.d.ts +0 -17
  511. package/dist/cookie-sign.d.ts.map +0 -1
  512. package/dist/cookie-sign.js +0 -104
  513. package/dist/cookie-sign.js.map +0 -1
  514. package/dist/cookie.d.ts +0 -24
  515. package/dist/cookie.d.ts.map +0 -1
  516. package/dist/cookie.js +0 -138
  517. package/dist/cookie.js.map +0 -1
  518. package/dist/cors.d.ts +0 -14
  519. package/dist/cors.d.ts.map +0 -1
  520. package/dist/cors.js +0 -87
  521. package/dist/cors.js.map +0 -1
  522. package/dist/crypto.d.ts +0 -7
  523. package/dist/crypto.d.ts.map +0 -1
  524. package/dist/crypto.js +0 -38
  525. package/dist/crypto.js.map +0 -1
  526. package/dist/csrf.d.ts +0 -28
  527. package/dist/csrf.d.ts.map +0 -1
  528. package/dist/csrf.js +0 -79
  529. package/dist/csrf.js.map +0 -1
  530. package/dist/curl-logger.d.ts +0 -44
  531. package/dist/curl-logger.d.ts.map +0 -1
  532. package/dist/curl-logger.js +0 -199
  533. package/dist/curl-logger.js.map +0 -1
  534. package/dist/detect-runtime.d.ts +0 -16
  535. package/dist/detect-runtime.d.ts.map +0 -1
  536. package/dist/detect-runtime.js +0 -13
  537. package/dist/detect-runtime.js.map +0 -1
  538. package/dist/dict.d.ts +0 -11
  539. package/dist/dict.d.ts.map +0 -1
  540. package/dist/dict.js +0 -13
  541. package/dist/dict.js.map +0 -1
  542. package/dist/error.d.ts +0 -21
  543. package/dist/error.d.ts.map +0 -1
  544. package/dist/error.js +0 -44
  545. package/dist/error.js.map +0 -1
  546. package/dist/errors.d.ts +0 -40
  547. package/dist/errors.d.ts.map +0 -1
  548. package/dist/errors.js +0 -39
  549. package/dist/errors.js.map +0 -1
  550. package/dist/etag.d.ts +0 -11
  551. package/dist/etag.d.ts.map +0 -1
  552. package/dist/etag.js +0 -82
  553. package/dist/etag.js.map +0 -1
  554. package/dist/feature-detect.d.ts +0 -25
  555. package/dist/feature-detect.d.ts.map +0 -1
  556. package/dist/feature-detect.js +0 -144
  557. package/dist/feature-detect.js.map +0 -1
  558. package/dist/feature-load.d.ts +0 -3
  559. package/dist/feature-load.d.ts.map +0 -1
  560. package/dist/feature-load.js +0 -36
  561. package/dist/feature-load.js.map +0 -1
  562. package/dist/feature-slots.d.ts +0 -44
  563. package/dist/feature-slots.d.ts.map +0 -1
  564. package/dist/feature-slots.js +0 -48
  565. package/dist/feature-slots.js.map +0 -1
  566. package/dist/fetch-request.d.ts +0 -10
  567. package/dist/fetch-request.d.ts.map +0 -1
  568. package/dist/fetch-request.js +0 -13
  569. package/dist/fetch-request.js.map +0 -1
  570. package/dist/gen-process.d.ts +0 -15
  571. package/dist/gen-process.d.ts.map +0 -1
  572. package/dist/gen-process.js +0 -43
  573. package/dist/gen-process.js.map +0 -1
  574. package/dist/gen-write.d.ts +0 -19
  575. package/dist/gen-write.d.ts.map +0 -1
  576. package/dist/gen-write.js +0 -120
  577. package/dist/gen-write.js.map +0 -1
  578. package/dist/glob.d.ts +0 -21
  579. package/dist/glob.d.ts.map +0 -1
  580. package/dist/glob.js +0 -115
  581. package/dist/glob.js.map +0 -1
  582. package/dist/go-type-emitter.d.ts +0 -47
  583. package/dist/go-type-emitter.d.ts.map +0 -1
  584. package/dist/go-type-emitter.js +0 -594
  585. package/dist/go-type-emitter.js.map +0 -1
  586. package/dist/honey-response.d.ts +0 -82
  587. package/dist/honey-response.d.ts.map +0 -1
  588. package/dist/honey-response.js +0 -338
  589. package/dist/honey-response.js.map +0 -1
  590. package/dist/i18n-slot.d.ts +0 -15
  591. package/dist/i18n-slot.d.ts.map +0 -1
  592. package/dist/i18n-slot.js +0 -14
  593. package/dist/i18n-slot.js.map +0 -1
  594. package/dist/i18n.d.ts +0 -29
  595. package/dist/i18n.d.ts.map +0 -1
  596. package/dist/i18n.js +0 -250
  597. package/dist/i18n.js.map +0 -1
  598. package/dist/index.d.ts.map +0 -1
  599. package/dist/index.js.map +0 -1
  600. package/dist/init.d.ts +0 -5
  601. package/dist/init.d.ts.map +0 -1
  602. package/dist/init.js +0 -140
  603. package/dist/init.js.map +0 -1
  604. package/dist/input.d.ts +0 -6
  605. package/dist/input.d.ts.map +0 -1
  606. package/dist/input.js +0 -4
  607. package/dist/input.js.map +0 -1
  608. package/dist/invalidate-check.d.ts +0 -61
  609. package/dist/invalidate-check.d.ts.map +0 -1
  610. package/dist/invalidate-check.js +0 -163
  611. package/dist/invalidate-check.js.map +0 -1
  612. package/dist/invoke-user.d.ts +0 -35
  613. package/dist/invoke-user.d.ts.map +0 -1
  614. package/dist/invoke-user.js +0 -73
  615. package/dist/invoke-user.js.map +0 -1
  616. package/dist/ip-restrict.d.ts +0 -24
  617. package/dist/ip-restrict.d.ts.map +0 -1
  618. package/dist/ip-restrict.js +0 -60
  619. package/dist/ip-restrict.js.map +0 -1
  620. package/dist/ip.d.ts +0 -39
  621. package/dist/ip.d.ts.map +0 -1
  622. package/dist/ip.js +0 -209
  623. package/dist/ip.js.map +0 -1
  624. package/dist/logger.d.ts +0 -45
  625. package/dist/logger.d.ts.map +0 -1
  626. package/dist/logger.js +0 -113
  627. package/dist/logger.js.map +0 -1
  628. package/dist/media-type.d.ts +0 -30
  629. package/dist/media-type.d.ts.map +0 -1
  630. package/dist/media-type.js +0 -97
  631. package/dist/media-type.js.map +0 -1
  632. package/dist/meta-spec-merge.d.ts +0 -32
  633. package/dist/meta-spec-merge.d.ts.map +0 -1
  634. package/dist/meta-spec-merge.js +0 -68
  635. package/dist/meta-spec-merge.js.map +0 -1
  636. package/dist/meta-spec.d.ts +0 -94
  637. package/dist/meta-spec.d.ts.map +0 -1
  638. package/dist/meta-spec.js +0 -535
  639. package/dist/meta-spec.js.map +0 -1
  640. package/dist/middleware.d.ts +0 -77
  641. package/dist/middleware.d.ts.map +0 -1
  642. package/dist/middleware.js +0 -253
  643. package/dist/middleware.js.map +0 -1
  644. package/dist/node-request.d.ts +0 -104
  645. package/dist/node-request.d.ts.map +0 -1
  646. package/dist/node-request.js +0 -407
  647. package/dist/node-request.js.map +0 -1
  648. package/dist/node.d.ts +0 -30
  649. package/dist/node.d.ts.map +0 -1
  650. package/dist/node.js +0 -396
  651. package/dist/node.js.map +0 -1
  652. package/dist/openapi/collect.d.ts.map +0 -1
  653. package/dist/openapi/collect.js.map +0 -1
  654. package/dist/openapi/docs-page.d.ts.map +0 -1
  655. package/dist/openapi/docs-page.js.map +0 -1
  656. package/dist/openapi/document.d.ts.map +0 -1
  657. package/dist/openapi/document.js.map +0 -1
  658. package/dist/openapi/json-schema-slot.d.ts +0 -12
  659. package/dist/openapi/json-schema-slot.d.ts.map +0 -1
  660. package/dist/openapi/json-schema-slot.js +0 -38
  661. package/dist/openapi/json-schema-slot.js.map +0 -1
  662. package/dist/openapi/register.d.ts.map +0 -1
  663. package/dist/openapi/register.js.map +0 -1
  664. package/dist/openapi/scalar.d.ts.map +0 -1
  665. package/dist/openapi/scalar.js.map +0 -1
  666. package/dist/openapi/serve.d.ts.map +0 -1
  667. package/dist/openapi/serve.js.map +0 -1
  668. package/dist/openapi/spec-factory.d.ts +0 -65
  669. package/dist/openapi/spec-factory.d.ts.map +0 -1
  670. package/dist/openapi/spec-factory.js +0 -52
  671. package/dist/openapi/spec-factory.js.map +0 -1
  672. package/dist/openapi/spec.d.ts +0 -29
  673. package/dist/openapi/spec.d.ts.map +0 -1
  674. package/dist/openapi/spec.js +0 -50
  675. package/dist/openapi/spec.js.map +0 -1
  676. package/dist/openapi/swagger.d.ts.map +0 -1
  677. package/dist/openapi/swagger.js.map +0 -1
  678. package/dist/pattern.d.ts +0 -71
  679. package/dist/pattern.d.ts.map +0 -1
  680. package/dist/pattern.js +0 -239
  681. package/dist/pattern.js.map +0 -1
  682. package/dist/peer.d.ts +0 -17
  683. package/dist/peer.d.ts.map +0 -1
  684. package/dist/peer.js +0 -50
  685. package/dist/peer.js.map +0 -1
  686. package/dist/plugin.d.ts +0 -228
  687. package/dist/plugin.d.ts.map +0 -1
  688. package/dist/plugin.js +0 -666
  689. package/dist/plugin.js.map +0 -1
  690. package/dist/powered-by.d.ts +0 -7
  691. package/dist/powered-by.d.ts.map +0 -1
  692. package/dist/powered-by.js +0 -11
  693. package/dist/powered-by.js.map +0 -1
  694. package/dist/pretty-json.d.ts +0 -10
  695. package/dist/pretty-json.d.ts.map +0 -1
  696. package/dist/pretty-json.js +0 -47
  697. package/dist/pretty-json.js.map +0 -1
  698. package/dist/producer-stream.d.ts +0 -47
  699. package/dist/producer-stream.d.ts.map +0 -1
  700. package/dist/producer-stream.js +0 -267
  701. package/dist/producer-stream.js.map +0 -1
  702. package/dist/proxy.d.ts +0 -90
  703. package/dist/proxy.d.ts.map +0 -1
  704. package/dist/proxy.js +0 -274
  705. package/dist/proxy.js.map +0 -1
  706. package/dist/python-type-emitter.d.ts +0 -24
  707. package/dist/python-type-emitter.d.ts.map +0 -1
  708. package/dist/python-type-emitter.js +0 -157
  709. package/dist/python-type-emitter.js.map +0 -1
  710. package/dist/realtime/bus.d.ts.map +0 -1
  711. package/dist/realtime/bus.js.map +0 -1
  712. package/dist/realtime/register.d.ts +0 -3
  713. package/dist/realtime/register.d.ts.map +0 -1
  714. package/dist/realtime/register.js +0 -10
  715. package/dist/realtime/register.js.map +0 -1
  716. package/dist/realtime/route.d.ts.map +0 -1
  717. package/dist/realtime/route.js.map +0 -1
  718. package/dist/realtime/server.d.ts.map +0 -1
  719. package/dist/realtime/server.js.map +0 -1
  720. package/dist/request-id.d.ts +0 -19
  721. package/dist/request-id.d.ts.map +0 -1
  722. package/dist/request-id.js +0 -16
  723. package/dist/request-id.js.map +0 -1
  724. package/dist/request-limits.d.ts +0 -3
  725. package/dist/request-limits.d.ts.map +0 -1
  726. package/dist/request-limits.js +0 -3
  727. package/dist/request-limits.js.map +0 -1
  728. package/dist/request-path.d.ts +0 -33
  729. package/dist/request-path.d.ts.map +0 -1
  730. package/dist/request-path.js +0 -178
  731. package/dist/request-path.js.map +0 -1
  732. package/dist/request-to-curl.d.ts +0 -15
  733. package/dist/request-to-curl.d.ts.map +0 -1
  734. package/dist/request-to-curl.js +0 -48
  735. package/dist/request-to-curl.js.map +0 -1
  736. package/dist/response.d.ts +0 -86
  737. package/dist/response.d.ts.map +0 -1
  738. package/dist/response.js +0 -313
  739. package/dist/response.js.map +0 -1
  740. package/dist/rust-type-emitter.d.ts +0 -44
  741. package/dist/rust-type-emitter.d.ts.map +0 -1
  742. package/dist/rust-type-emitter.js +0 -463
  743. package/dist/rust-type-emitter.js.map +0 -1
  744. package/dist/secure-headers.d.ts +0 -16
  745. package/dist/secure-headers.d.ts.map +0 -1
  746. package/dist/secure-headers.js +0 -53
  747. package/dist/secure-headers.js.map +0 -1
  748. package/dist/serve-register.d.ts +0 -6
  749. package/dist/serve-register.d.ts.map +0 -1
  750. package/dist/serve-register.js +0 -9
  751. package/dist/serve-register.js.map +0 -1
  752. package/dist/serve-slot.d.ts +0 -9
  753. package/dist/serve-slot.d.ts.map +0 -1
  754. package/dist/serve-slot.js +0 -52
  755. package/dist/serve-slot.js.map +0 -1
  756. package/dist/serve.d.ts +0 -38
  757. package/dist/serve.d.ts.map +0 -1
  758. package/dist/serve.js +0 -157
  759. package/dist/serve.js.map +0 -1
  760. package/dist/server-timing.d.ts +0 -9
  761. package/dist/server-timing.d.ts.map +0 -1
  762. package/dist/server-timing.js +0 -51
  763. package/dist/server-timing.js.map +0 -1
  764. package/dist/static.d.ts +0 -21
  765. package/dist/static.d.ts.map +0 -1
  766. package/dist/static.js +0 -102
  767. package/dist/static.js.map +0 -1
  768. package/dist/telemetry/otel.d.ts.map +0 -1
  769. package/dist/telemetry/otel.js.map +0 -1
  770. package/dist/testing.d.ts +0 -36
  771. package/dist/testing.d.ts.map +0 -1
  772. package/dist/testing.js +0 -124
  773. package/dist/testing.js.map +0 -1
  774. package/dist/timeout.d.ts +0 -13
  775. package/dist/timeout.d.ts.map +0 -1
  776. package/dist/timeout.js +0 -36
  777. package/dist/timeout.js.map +0 -1
  778. package/dist/tree.d.ts +0 -197
  779. package/dist/tree.d.ts.map +0 -1
  780. package/dist/tree.js +0 -437
  781. package/dist/tree.js.map +0 -1
  782. package/dist/trust.d.ts +0 -21
  783. package/dist/trust.d.ts.map +0 -1
  784. package/dist/trust.js +0 -100
  785. package/dist/trust.js.map +0 -1
  786. package/dist/ts-type-emitter.d.ts +0 -8
  787. package/dist/ts-type-emitter.d.ts.map +0 -1
  788. package/dist/ts-type-emitter.js +0 -150
  789. package/dist/ts-type-emitter.js.map +0 -1
  790. package/dist/type-emitter.d.ts +0 -36
  791. package/dist/type-emitter.d.ts.map +0 -1
  792. package/dist/type-emitter.js +0 -729
  793. package/dist/type-emitter.js.map +0 -1
  794. package/dist/type-extractor.d.ts +0 -43
  795. package/dist/type-extractor.d.ts.map +0 -1
  796. package/dist/type-extractor.js +0 -819
  797. package/dist/type-extractor.js.map +0 -1
  798. package/dist/types.d.ts +0 -467
  799. package/dist/types.d.ts.map +0 -1
  800. package/dist/types.js +0 -96
  801. package/dist/types.js.map +0 -1
  802. package/dist/validation.d.ts +0 -31
  803. package/dist/validation.d.ts.map +0 -1
  804. package/dist/validation.js +0 -335
  805. package/dist/validation.js.map +0 -1
  806. package/dist/with-headers.d.ts +0 -15
  807. package/dist/with-headers.d.ts.map +0 -1
  808. package/dist/with-headers.js +0 -45
  809. package/dist/with-headers.js.map +0 -1
  810. package/dist/ws/bun.d.ts.map +0 -1
  811. package/dist/ws/bun.js.map +0 -1
  812. package/dist/ws/cloudflare.d.ts.map +0 -1
  813. package/dist/ws/cloudflare.js.map +0 -1
  814. package/dist/ws/deno.d.ts +0 -13
  815. package/dist/ws/deno.d.ts.map +0 -1
  816. package/dist/ws/deno.js +0 -133
  817. package/dist/ws/deno.js.map +0 -1
  818. package/dist/ws/node.d.ts.map +0 -1
  819. package/dist/ws/node.js.map +0 -1
  820. package/dist/ws/session.d.ts.map +0 -1
  821. package/dist/ws/session.js.map +0 -1
  822. package/dist/ws/shared.d.ts.map +0 -1
  823. package/dist/ws/shared.js.map +0 -1
  824. package/dist/ws-origin.d.ts +0 -20
  825. package/dist/ws-origin.d.ts.map +0 -1
  826. package/dist/ws-origin.js +0 -41
  827. package/dist/ws-origin.js.map +0 -1
  828. package/dist/yaml.d.ts +0 -18
  829. package/dist/yaml.d.ts.map +0 -1
  830. package/dist/yaml.js +0 -101
  831. package/dist/yaml.js.map +0 -1
  832. package/docs/api-ref/go.md +0 -399
  833. package/docs/api-ref/python.md +0 -399
  834. package/docs/api-ref/rust.md +0 -399
  835. package/docs/api-ref/typescript.md +0 -399
  836. package/docs/invalidate-spec.md +0 -333
  837. package/docs/meta-spec.md +0 -555
  838. package/docs/packaging.md +0 -104
  839. package/docs/regression-matrix/README.md +0 -32
  840. package/docs/regression-matrix/review.md +0 -44
  841. package/docs/regression-matrix/ws1-3.md +0 -97
  842. package/docs/regression-matrix/ws4-8.md +0 -107
  843. package/docs/regression-matrix/ws9-12.md +0 -266
  844. package/docs/sdk.md +0 -798
  845. package/src/accepts.ts +0 -136
  846. package/src/body-kind.ts +0 -67
  847. package/src/body-limit.ts +0 -152
  848. package/src/build/index.ts +0 -217
  849. package/src/cli-args.ts +0 -123
  850. package/src/cli-go/auth.go +0 -26
  851. package/src/cli-go/config.go +0 -192
  852. package/src/cli-go/errors.go +0 -75
  853. package/src/cli-go/multipart.go +0 -79
  854. package/src/cli-go/output.go +0 -163
  855. package/src/cli-go/root.go +0 -30
  856. package/src/cli-go/stream.go +0 -88
  857. package/src/cli-go/version.go +0 -5
  858. package/src/cli.ts +0 -209
  859. package/src/client/defaults.ts +0 -47
  860. package/src/client/error.ts +0 -82
  861. package/src/client/http.ts +0 -737
  862. package/src/client/index.ts +0 -157
  863. package/src/client/path.ts +0 -169
  864. package/src/client/redirect-policy.ts +0 -19
  865. package/src/client/sdk.ts +0 -351
  866. package/src/client/sse.ts +0 -128
  867. package/src/client/types.ts +0 -206
  868. package/src/client/ws.ts +0 -149
  869. package/src/client-go/errors.go +0 -236
  870. package/src/client-go/export.go +0 -44
  871. package/src/client-go/invalidation.go +0 -371
  872. package/src/client-go/nullable.go +0 -62
  873. package/src/client-go/realtime.go +0 -354
  874. package/src/client-go/result.go +0 -20
  875. package/src/client-go/runtime.go +0 -975
  876. package/src/client-go/sse.go +0 -159
  877. package/src/client-go/transport.go +0 -495
  878. package/src/client-go/ws.go +0 -128
  879. package/src/client-info.ts +0 -79
  880. package/src/client-mcp/README.md +0 -10
  881. package/src/client-mcp/server.ts +0 -221
  882. package/src/client-mcp/types.ts +0 -19
  883. package/src/client-python/_errors.py +0 -115
  884. package/src/client-python/_invalidation.py +0 -494
  885. package/src/client-python/_realtime.py +0 -179
  886. package/src/client-python/_runtime.py +0 -860
  887. package/src/client-python/_sse.py +0 -155
  888. package/src/client-python/_transport.py +0 -366
  889. package/src/client-python/_ws.py +0 -159
  890. package/src/client-python/py.typed +0 -0
  891. package/src/client-rust/errors.rs +0 -220
  892. package/src/client-rust/invalidation.rs +0 -412
  893. package/src/client-rust/invalidation_sync.rs +0 -93
  894. package/src/client-rust/nullable.rs +0 -17
  895. package/src/client-rust/realtime.rs +0 -702
  896. package/src/client-rust/result.rs +0 -22
  897. package/src/client-rust/runtime.rs +0 -980
  898. package/src/client-rust/runtime_sync.rs +0 -484
  899. package/src/client-rust/sse.rs +0 -188
  900. package/src/client-rust/ws.rs +0 -167
  901. package/src/codegen-go-cli.ts +0 -1066
  902. package/src/codegen-go.ts +0 -970
  903. package/src/codegen-hash.ts +0 -8
  904. package/src/codegen-ir.ts +0 -812
  905. package/src/codegen-lang.ts +0 -517
  906. package/src/codegen-load.ts +0 -150
  907. package/src/codegen-loaders.ts +0 -50
  908. package/src/codegen-mcp.ts +0 -445
  909. package/src/codegen-python.ts +0 -916
  910. package/src/codegen-route-tree-intern.ts +0 -198
  911. package/src/codegen-rust.ts +0 -1402
  912. package/src/codegen-sanitize.ts +0 -57
  913. package/src/codegen-schema-naming.ts +0 -165
  914. package/src/codegen-sdk-model.ts +0 -228
  915. package/src/codegen.ts +0 -5089
  916. package/src/context.ts +0 -325
  917. package/src/cookie-sign.ts +0 -119
  918. package/src/cookie.ts +0 -143
  919. package/src/cors.ts +0 -95
  920. package/src/crypto.ts +0 -38
  921. package/src/csrf.ts +0 -86
  922. package/src/curl-logger.ts +0 -258
  923. package/src/detect-runtime.ts +0 -17
  924. package/src/dict.ts +0 -12
  925. package/src/error.ts +0 -55
  926. package/src/errors.ts +0 -85
  927. package/src/etag.ts +0 -97
  928. package/src/feature-detect.ts +0 -147
  929. package/src/feature-load.ts +0 -23
  930. package/src/feature-slots.ts +0 -70
  931. package/src/fetch-request.ts +0 -13
  932. package/src/gen-process.ts +0 -42
  933. package/src/gen-write.ts +0 -127
  934. package/src/glob.ts +0 -109
  935. package/src/go-type-emitter.ts +0 -660
  936. package/src/honey-response.ts +0 -379
  937. package/src/i18n-slot.ts +0 -30
  938. package/src/i18n.ts +0 -300
  939. package/src/index.ts +0 -3829
  940. package/src/init.ts +0 -161
  941. package/src/input.ts +0 -8
  942. package/src/invalidate-check.ts +0 -205
  943. package/src/invoke-user.ts +0 -95
  944. package/src/ip-restrict.ts +0 -79
  945. package/src/ip.ts +0 -194
  946. package/src/logger.ts +0 -178
  947. package/src/media-type.ts +0 -104
  948. package/src/meta-spec-merge.ts +0 -80
  949. package/src/meta-spec.ts +0 -718
  950. package/src/middleware.ts +0 -331
  951. package/src/node-request.ts +0 -431
  952. package/src/node.ts +0 -454
  953. package/src/openapi/collect.ts +0 -50
  954. package/src/openapi/docs-page.ts +0 -89
  955. package/src/openapi/document.ts +0 -902
  956. package/src/openapi/json-schema-slot.ts +0 -53
  957. package/src/openapi/register.ts +0 -23
  958. package/src/openapi/scalar.ts +0 -34
  959. package/src/openapi/serve.ts +0 -39
  960. package/src/openapi/spec-factory.ts +0 -100
  961. package/src/openapi/spec.ts +0 -74
  962. package/src/openapi/swagger.ts +0 -35
  963. package/src/pattern.ts +0 -245
  964. package/src/peer.ts +0 -53
  965. package/src/plugin.ts +0 -864
  966. package/src/powered-by.ts +0 -18
  967. package/src/pretty-json.ts +0 -56
  968. package/src/producer-stream.ts +0 -296
  969. package/src/proxy.ts +0 -370
  970. package/src/python-type-emitter.ts +0 -181
  971. package/src/realtime/bus.ts +0 -140
  972. package/src/realtime/register.ts +0 -13
  973. package/src/realtime/route.ts +0 -153
  974. package/src/realtime/server.ts +0 -298
  975. package/src/request-id.ts +0 -32
  976. package/src/request-limits.ts +0 -2
  977. package/src/request-path.ts +0 -165
  978. package/src/request-to-curl.ts +0 -52
  979. package/src/response.ts +0 -411
  980. package/src/rust-type-emitter.ts +0 -548
  981. package/src/secure-headers.ts +0 -74
  982. package/src/serve-register.ts +0 -12
  983. package/src/serve-slot.ts +0 -58
  984. package/src/serve.ts +0 -220
  985. package/src/server-timing.ts +0 -71
  986. package/src/static.ts +0 -112
  987. package/src/telemetry/otel.ts +0 -156
  988. package/src/testing.ts +0 -167
  989. package/src/timeout.ts +0 -45
  990. package/src/tree.ts +0 -558
  991. package/src/trust.ts +0 -117
  992. package/src/ts-type-emitter.ts +0 -168
  993. package/src/type-emitter.ts +0 -760
  994. package/src/type-extractor.ts +0 -855
  995. package/src/types.ts +0 -756
  996. package/src/validation.ts +0 -413
  997. package/src/with-headers.ts +0 -45
  998. package/src/ws/bun.ts +0 -120
  999. package/src/ws/cloudflare.ts +0 -192
  1000. package/src/ws/deno.ts +0 -188
  1001. package/src/ws/node.ts +0 -240
  1002. package/src/ws/session.ts +0 -73
  1003. package/src/ws/shared.ts +0 -140
  1004. package/src/ws-origin.ts +0 -53
  1005. package/src/yaml.ts +0 -103
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The document's tags: every tag an operation names, once, in the order operations first name
3
+ * them, each merged with what the caller declares for it (description, externalDocs,
4
+ * x-displayName). Tags are explicit: nothing is derived from paths. A declared tag no operation
5
+ * names is not listed, and said; a tag declared twice is refused.
6
+ */
7
+ import type { EmittedOperation } from "./paths.ts";
8
+ export type OpenApiExternalDocs = {
9
+ readonly description?: string;
10
+ readonly url: string;
11
+ };
12
+ export type OpenApiTag = {
13
+ readonly description?: string;
14
+ readonly externalDocs?: OpenApiExternalDocs;
15
+ readonly name: string;
16
+ readonly "x-displayName"?: string;
17
+ };
18
+ export type TagReport = (code: "INVALID_TAG" | "UNUSED_TAG", level: "error" | "warn", message: string) => void;
19
+ /** The tags `operations` name, first-seen, with the declared metadata of each. */
20
+ export declare function tagsOf(operations: readonly EmittedOperation[], declared: readonly OpenApiTag[] | undefined, report: TagReport): OpenApiTag[];
@@ -0,0 +1,20 @@
1
+ /** The tags `operations` name, first-seen, with the declared metadata of each. */
2
+ export function tagsOf(operations, declared, report) {
3
+ const byName = new Map();
4
+ for (const tag of declared ?? []) {
5
+ if (byName.has(tag.name))
6
+ report("INVALID_TAG", "error", `tag "${tag.name}" is declared twice`);
7
+ else
8
+ byName.set(tag.name, tag);
9
+ }
10
+ const named = new Set();
11
+ for (const { operation } of operations) {
12
+ for (const name of Array.isArray(operation.tags) ? operation.tags : [])
13
+ named.add(name);
14
+ }
15
+ for (const name of byName.keys()) {
16
+ if (!named.has(name))
17
+ report("UNUSED_TAG", "warn", `tag "${name}" is declared but no operation names it`);
18
+ }
19
+ return [...named].map((name) => structuredClone(byName.get(name) ?? { name }));
20
+ }
@@ -0,0 +1,19 @@
1
+ import type { Operation } from "./paths.ts";
2
+ import type { Convert } from "./responses.ts";
3
+ export type WebhookSignature = {
4
+ readonly algorithm: "hmac-sha256";
5
+ readonly encoding: "base64" | "hex";
6
+ readonly header: string;
7
+ /** what precedes the digest in the header, as `sha256=` */
8
+ readonly prefix?: string;
9
+ };
10
+ export type OpenApiWebhook = {
11
+ readonly body: unknown;
12
+ readonly description?: string;
13
+ /** `"post"` by default */
14
+ readonly method?: string;
15
+ readonly signature?: WebhookSignature;
16
+ readonly summary?: string;
17
+ };
18
+ /** The 3.1 `webhooks` of `webhooks`, by name in code-unit order; each refusal reported through `error`. */
19
+ export declare function webhooksOf(webhooks: Readonly<Record<string, OpenApiWebhook>> | undefined, convert: Convert, error: (message: string) => void): Record<string, Record<string, Operation>>;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The document's webhooks (OpenAPI 3.1): each request the API sends a subscriber, by name, as the
3
+ * operation the subscriber serves. Its body converts on the output side, as the API writes it. A
4
+ * signed webhook states how as `x-honey-signature`, which the SDKs' verify helpers read; a
5
+ * declaration that cannot be signed or sent as written is refused.
6
+ */
7
+ import { compareCodeUnits } from "../schema/canonicalize.js";
8
+ const METHODS = ["delete", "get", "patch", "post", "put"];
9
+ /* C0, DEL and C1 */
10
+ const CONTROL = /\p{Cc}/u;
11
+ /* a summary or description is CommonMark text: tabs and line breaks are its own */
12
+ const STRAY = /(?![\t\n\r])\p{Cc}/u;
13
+ /* RFC 9110 token: a header name */
14
+ const TOKEN = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
15
+ /** Each reason `signature` cannot be checked as written. */
16
+ function signatureErrors(signature) {
17
+ const errors = [];
18
+ if (signature.algorithm !== "hmac-sha256")
19
+ errors.push(`signature algorithm "${signature.algorithm}" is not hmac-sha256`);
20
+ if (signature.encoding !== "hex" && signature.encoding !== "base64")
21
+ errors.push(`signature encoding "${signature.encoding}" is not hex or base64`);
22
+ if (!TOKEN.test(signature.header))
23
+ errors.push(`signature header ${JSON.stringify(signature.header)} is not a header name`);
24
+ if (signature.prefix !== undefined && CONTROL.test(signature.prefix))
25
+ errors.push("the signature prefix holds a control character");
26
+ return errors;
27
+ }
28
+ /** Each reason `webhook` cannot be sent as written. */
29
+ function webhookErrors(webhook, method) {
30
+ const errors = METHODS.includes(method) ? [] : [`method "${webhook.method}" is not one of ${METHODS.join(", ")}`];
31
+ for (const [field, text] of [
32
+ ["summary", webhook.summary],
33
+ ["description", webhook.description],
34
+ ]) {
35
+ if (text !== undefined && STRAY.test(text))
36
+ errors.push(`the ${field} holds a control character`);
37
+ }
38
+ return webhook.signature === undefined ? errors : [...errors, ...signatureErrors(webhook.signature)];
39
+ }
40
+ /** The 3.1 `webhooks` of `webhooks`, by name in code-unit order; each refusal reported through `error`. */
41
+ export function webhooksOf(webhooks, convert, error) {
42
+ const out = {};
43
+ for (const name of Object.keys(webhooks ?? {}).sort(compareCodeUnits)) {
44
+ const webhook = webhooks[name];
45
+ const method = (webhook.method ?? "post").toLowerCase();
46
+ if (name === "")
47
+ error("a webhook needs a name");
48
+ else if (CONTROL.test(name))
49
+ error(`webhook ${JSON.stringify(name)}: the name holds a control character`);
50
+ for (const reason of webhookErrors(webhook, method))
51
+ error(`webhook ${JSON.stringify(name)}: ${reason}`);
52
+ const operation = {};
53
+ if (webhook.summary !== undefined)
54
+ operation.summary = webhook.summary;
55
+ if (webhook.description !== undefined)
56
+ operation.description = webhook.description;
57
+ const schema = convert(webhook.body, "output", `${name}Webhook`);
58
+ operation.requestBody = { content: { "application/json": { schema } }, required: true };
59
+ operation.responses = { "200": { description: "Received" } };
60
+ if (webhook.signature !== undefined)
61
+ operation["x-honey-signature"] = signatureOf(webhook.signature);
62
+ out[name] = { [method]: operation };
63
+ }
64
+ return out;
65
+ }
66
+ /** The signature as the SDKs read it: its own fields only, in one order. */
67
+ function signatureOf(signature) {
68
+ const { algorithm, encoding, header, prefix } = signature;
69
+ return prefix === undefined ? { algorithm, encoding, header } : { algorithm, encoding, header, prefix };
70
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A JSON-compatible YAML 1.2 emitter: the same document as `JSON.stringify`, in another encoding.
3
+ * The value is first normalized through JSON (an undefined key is skipped, a Date is its ISO
4
+ * string, NaN is null); then every string that is not plainly safe is written double-quoted, which
5
+ * also reads the same under YAML 1.1 readers. Vendor-free: what a served `.yaml` is written with.
6
+ */
7
+ /** `value` as YAML, ending in a newline; `undefined` is `null`, as JSON has no nothing. */
8
+ export declare function toYaml(value: unknown): string;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * A JSON-compatible YAML 1.2 emitter: the same document as `JSON.stringify`, in another encoding.
3
+ * The value is first normalized through JSON (an undefined key is skipped, a Date is its ISO
4
+ * string, NaN is null); then every string that is not plainly safe is written double-quoted, which
5
+ * also reads the same under YAML 1.1 readers. Vendor-free: what a served `.yaml` is written with.
6
+ */
7
+ const INDENT = " ";
8
+ /*
9
+ * A plain scalar is used only for a conservative shape: it starts with a letter, `_`, `/` or `$`
10
+ * and holds only word characters, `.`, `/`, `$`, `-`, `+`, `{}`, `()` and single inner spaces.
11
+ * That excludes every indicator, `: `, ` #`, a leading digit (numbers, 1.1 octal and sexagesimal)
12
+ * and `.inf`/`.nan`.
13
+ */
14
+ const PLAIN = /^[A-Za-z_/$](?:[\w./${}()+-]| (?! ))*$/;
15
+ /* words YAML 1.1 or 1.2 reads as null or a boolean */
16
+ const RESERVED = /^(?:y|n|yes|no|on|off|true|false|null|~)$/i;
17
+ /* JSON string syntax is a YAML double-quoted scalar, but YAML forbids raw DEL, C1 bar NEL, the BOM and non-characters */
18
+ const UNPRINTABLE = /[\u007f-\u0084\u0086-\u009f￾￿]/g;
19
+ /** `value` as YAML, ending in a newline; `undefined` is `null`, as JSON has no nothing. */
20
+ export function toYaml(value) {
21
+ const json = JSON.stringify(value);
22
+ return `${emit(json === undefined ? null : JSON.parse(json), 0)}\n`;
23
+ }
24
+ function emit(value, indent) {
25
+ if (value === null || typeof value !== "object")
26
+ return scalar(value);
27
+ if (Array.isArray(value))
28
+ return emitArray(value, indent);
29
+ return emitObject(value, indent);
30
+ }
31
+ /** A JSON scalar: null, a boolean, a number or a string. */
32
+ function scalar(value) {
33
+ return typeof value === "string" ? emitString(value) : String(value);
34
+ }
35
+ function emitString(value) {
36
+ return PLAIN.test(value) && !value.endsWith(" ") && !RESERVED.test(value) ? value : quote(value);
37
+ }
38
+ function quote(value) {
39
+ return JSON.stringify(value).replace(UNPRINTABLE, (ch) => `\\u${ch.charCodeAt(0).toString(16).padStart(4, "0")}`);
40
+ }
41
+ function isNonEmptyCollection(value) {
42
+ return value !== null && typeof value === "object" && Object.keys(value).length > 0;
43
+ }
44
+ function emitArray(value, indent) {
45
+ if (value.length === 0)
46
+ return "[]";
47
+ const pad = INDENT.repeat(indent);
48
+ const childPad = INDENT.repeat(indent + 1);
49
+ return value
50
+ .map((item) => {
51
+ if (!isNonEmptyCollection(item))
52
+ return `${pad}- ${emit(item, 0)}`;
53
+ /* the item's first line, indented one level, moves up onto the dash */
54
+ const lines = emit(item, indent + 1).split("\n");
55
+ lines[0] = `${pad}- ${lines[0].slice(childPad.length)}`;
56
+ return lines.join("\n");
57
+ })
58
+ .join("\n");
59
+ }
60
+ function emitObject(value, indent) {
61
+ const keys = Object.keys(value);
62
+ if (keys.length === 0)
63
+ return "{}";
64
+ const pad = INDENT.repeat(indent);
65
+ return keys
66
+ .map((key) => {
67
+ const child = value[key];
68
+ const name = emitString(key);
69
+ return isNonEmptyCollection(child)
70
+ ? `${pad}${name}:\n${emit(child, indent + 1)}`
71
+ : `${pad}${name}: ${emit(child, 0)}`;
72
+ })
73
+ .join("\n");
74
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The headers a proxy sends upstream and answers with. Hop-by-hop headers (RFC 9110 §7.6.1)
3
+ * describe one connection and never cross a proxy, in either direction, and neither does any
4
+ * header `Connection` names. Upstream, the client's `Host` and `Expect` stay behind, and the
5
+ * forwarding headers describe the client as the platform reported it (H23): `X-Forwarded-For` is
6
+ * `ctx.ip`, `-Proto` and `-Host` the request URL's; whatever forwarding headers the client wrote
7
+ * are dropped, never passed on. `CF-Connecting-IP` passes untouched: on Workers the edge set it,
8
+ * so a service-bound Worker downstream sees the same client.
9
+ */
10
+ /** The headers an edit needs: native `Headers` and the plain map's `HoneyOutHeaders` both are. */
11
+ type Editable = {
12
+ delete(name: string): void;
13
+ get(name: string): string | null;
14
+ };
15
+ /** Drop every hop-by-hop header and every header `Connection` names; an upgrade may keep `Upgrade`. */
16
+ export declare function dropHopByHop(headers: Editable, keepUpgrade: boolean): void;
17
+ export type Upstream = {
18
+ /** `ctx.ip`; `undefined` when no forwarding headers are added. */
19
+ readonly client: string | null | undefined;
20
+ readonly websocket: boolean;
21
+ };
22
+ /** The request headers destination is handed: a copy, cleaned, with the forwarding headers set. */
23
+ export declare function upstreamHeaders(request: Request, upstream: Upstream): Headers;
24
+ /**
25
+ * The response headers the client gets, edited in place. `fetch()` hands back a decoded body with
26
+ * the `Content-Encoding` that described the encoded one; when `decoded`, that header and the
27
+ * encoded length go, so the headers describe the bytes the client receives.
28
+ */
29
+ export declare function clientHeaders(headers: Editable, decoded: boolean): void;
30
+ export {};
@@ -0,0 +1,86 @@
1
+ /**
2
+ * The headers a proxy sends upstream and answers with. Hop-by-hop headers (RFC 9110 §7.6.1)
3
+ * describe one connection and never cross a proxy, in either direction, and neither does any
4
+ * header `Connection` names. Upstream, the client's `Host` and `Expect` stay behind, and the
5
+ * forwarding headers describe the client as the platform reported it (H23): `X-Forwarded-For` is
6
+ * `ctx.ip`, `-Proto` and `-Host` the request URL's; whatever forwarding headers the client wrote
7
+ * are dropped, never passed on. `CF-Connecting-IP` passes untouched: on Workers the edge set it,
8
+ * so a service-bound Worker downstream sees the same client.
9
+ */
10
+ /** `proxy-connection` is the pre-standard spelling clients still send. */
11
+ const HOP_BY_HOP = [
12
+ "connection",
13
+ "keep-alive",
14
+ "proxy-authenticate",
15
+ "proxy-authorization",
16
+ "proxy-connection",
17
+ "te",
18
+ "trailer",
19
+ "transfer-encoding",
20
+ "upgrade",
21
+ ];
22
+ /** What a client may write about itself, and a proxy must never pass on as fact. */
23
+ const FORWARDING = [
24
+ "forwarded",
25
+ "x-forwarded-for",
26
+ "x-forwarded-host",
27
+ "x-forwarded-port",
28
+ "x-forwarded-proto",
29
+ "x-real-ip",
30
+ ];
31
+ /** Drop every hop-by-hop header and every header `Connection` names; an upgrade may keep `Upgrade`. */
32
+ export function dropHopByHop(headers, keepUpgrade) {
33
+ const named = headers.get("connection");
34
+ if (named !== null) {
35
+ for (const token of named.split(",")) {
36
+ const name = token.trim().toLowerCase();
37
+ if (name !== "" && !(keepUpgrade && name === "upgrade"))
38
+ headers.delete(name);
39
+ }
40
+ }
41
+ for (const name of HOP_BY_HOP)
42
+ if (!(keepUpgrade && name === "upgrade"))
43
+ headers.delete(name);
44
+ }
45
+ /** The scheme and host of a request URL, read without parsing it: a Request's URL always has a path. */
46
+ function originParts(url) {
47
+ const scheme = url.indexOf("://");
48
+ return { host: url.slice(scheme + 3, url.indexOf("/", scheme + 3)), proto: url.slice(0, scheme) };
49
+ }
50
+ /** The request headers destination is handed: a copy, cleaned, with the forwarding headers set. */
51
+ export function upstreamHeaders(request, upstream) {
52
+ const headers = new Headers(request.headers);
53
+ dropHopByHop(headers, upstream.websocket);
54
+ if (upstream.websocket) {
55
+ headers.set("upgrade", "websocket");
56
+ headers.set("connection", "upgrade");
57
+ }
58
+ headers.delete("host");
59
+ /* the proxy reads the body itself */
60
+ headers.delete("expect");
61
+ for (const name of FORWARDING)
62
+ headers.delete(name);
63
+ if (upstream.client !== undefined) {
64
+ const { host, proto } = originParts(request.url);
65
+ if (upstream.client !== null)
66
+ headers.set("x-forwarded-for", upstream.client);
67
+ headers.set("x-forwarded-proto", proto);
68
+ headers.set("x-forwarded-host", host);
69
+ }
70
+ return headers;
71
+ }
72
+ /**
73
+ * The response headers the client gets, edited in place. `fetch()` hands back a decoded body with
74
+ * the `Content-Encoding` that described the encoded one; when `decoded`, that header and the
75
+ * encoded length go, so the headers describe the bytes the client receives.
76
+ */
77
+ export function clientHeaders(headers, decoded) {
78
+ dropHopByHop(headers, false);
79
+ if (!decoded)
80
+ return;
81
+ const encoding = headers.get("content-encoding");
82
+ if (encoding !== null && encoding.trim().toLowerCase() !== "identity") {
83
+ headers.delete("content-encoding");
84
+ headers.delete("content-length");
85
+ }
86
+ }
@@ -0,0 +1,39 @@
1
+ import type { TypedResponse } from "../response/response.ts";
2
+ export type ProxyConfig<TCtx> = {
3
+ /**
4
+ * Where the request goes: `fetch`, a Workers service binding, a Durable Object stub, anything
5
+ * that answers a Response. `url` is the normalized path and query (after `rewriteUrl`), `init`
6
+ * the method, headers, body, signal and `redirect: "manual"` the framework prepared. A network
7
+ * failure the runtime reports is a 502; any other throw, a bug here included, a 500.
8
+ */
9
+ destination: (ctx: TCtx, url: string, init: RequestInit) => Promise<Response> | Response;
10
+ /**
11
+ * Whether the answer's body is already decoded, as `fetch()` always returns it. When true (the
12
+ * default) an encoded answer loses `Content-Encoding` and `Content-Length`, so the headers
13
+ * describe the bytes the client gets. False when destination returns bytes still encoded.
14
+ */
15
+ decoded?: boolean;
16
+ /** Add `X-Forwarded-For`, `-Proto` and `-Host`. Default true; the client's own are dropped either way. */
17
+ forwardedHeaders?: boolean;
18
+ /**
19
+ * Most milliseconds the upstream may stay silent while the body streams. Omitted or not
20
+ * positive: no limit (an SSE stream may idle). A stall aborts the upstream and errors the body.
21
+ * Off for a WebSocket upgrade.
22
+ */
23
+ idleTimeout?: number | ((ctx: TCtx) => number);
24
+ /**
25
+ * Runs on the answer before the client gets it, its headers mutable. Return a Response to
26
+ * replace it. Not called for a 101 upgrade, which is the runtime's.
27
+ */
28
+ onResponse?: (ctx: TCtx, response: Response) => Promise<Response | void> | Response | void;
29
+ /** Run last on the forwarded headers, so it may set any of them: a record of entries, or an edit. */
30
+ requestHeaders?: Record<string, string> | ((ctx: TCtx, headers: Headers) => void);
31
+ /** Rewrite the normalized path and query before destination sees it. */
32
+ rewriteUrl?: (url: string, ctx: TCtx) => string;
33
+ /**
34
+ * Most milliseconds to wait for the answer's headers; later is a 504. Default 60 000; not
35
+ * positive is no limit. The body is `idleTimeout`'s. Off for a WebSocket upgrade.
36
+ */
37
+ timeout?: number | ((ctx: TCtx) => number);
38
+ };
39
+ export declare function proxy<TCtx>(config: ProxyConfig<TCtx>): (ctx: TCtx) => Promise<TypedResponse>;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * `proxy(config)`: a route handler that forwards the request to an upstream and streams its answer
3
+ * back, mounted like any other: `app.all("/api/*rest").handler(proxy({ destination }))`. Plain code
4
+ * reached through `@lovrozagar/honey/proxy`, no slot and no builder method (H23): core never imports
5
+ * it. The answer is the passthrough brand, since the upstream decides its status and type.
6
+ *
7
+ * Both ways, hop-by-hop headers are dropped and the forwarding headers describe the client as the
8
+ * platform reported it (headers.ts); the URL is the normalized path, the deadlines and failure
9
+ * mapping are upstream.ts's. Every method but GET and HEAD forwards its body. The call follows
10
+ * `ctx.signal`: a disconnect, `timeout()` or shutdown cancels it and its body. Redirects go back to
11
+ * the client, never followed. On the Node bridge the answer is a HoneyResponse, so the header
12
+ * middleware in front of the route stay on the plain map.
13
+ */
14
+ import { TRACE } from "../context/context.js";
15
+ import { createHoneyResponse, isNodeOutbound } from "../response/builder.js";
16
+ import { headersToRecord, HoneyOutHeaders } from "../response/out-headers.js";
17
+ import { searchOfUrl } from "../routing/request-path.js";
18
+ import { clientHeaders, upstreamHeaders } from "./headers.js";
19
+ import { forwardBody, msOf, timeoutError, withIdleTimeout, within } from "./upstream.js";
20
+ /** Default time allowed until the upstream's response headers arrive. */
21
+ const DEFAULT_TIMEOUT_MS = 60_000;
22
+ function isNullBody(status) {
23
+ return status === 101 || status === 103 || status === 204 || status === 205 || status === 304;
24
+ }
25
+ /** The client's copy of the upstream answer, its headers cleaned and mutable for onResponse. */
26
+ function answerFor(response, body, decoded, nodeOut) {
27
+ const init = { status: response.status, statusText: response.statusText };
28
+ const stream = isNullBody(response.status) ? null : body;
29
+ if (nodeOut) {
30
+ const headers = new HoneyOutHeaders(headersToRecord(response.headers));
31
+ clientHeaders(headers, decoded);
32
+ return createHoneyResponse({ ...init, headers: headers.toRecord(), stream });
33
+ }
34
+ const headers = new Headers(response.headers);
35
+ clientHeaders(headers, decoded);
36
+ return new Response(stream, { ...init, headers });
37
+ }
38
+ function applyRequestHeaders(edit, ctx, headers) {
39
+ if (typeof edit === "function")
40
+ return edit(ctx, headers);
41
+ for (const [name, value] of Object.entries(edit ?? {}))
42
+ headers.set(name, value);
43
+ }
44
+ /** An untraced request's call: made as it is, its headers as they came. */
45
+ const untraced = (call) => call();
46
+ /**
47
+ * How the call is made: on a traced request inside its `http.proxy` span, the upstream getting the
48
+ * request's trace, never the caller's (a trusted caller's tracestate goes on with it).
49
+ */
50
+ function traced(ctx, method, headers) {
51
+ const outbound = ctx[TRACE]?.outbound("http.proxy", method);
52
+ if (outbound === undefined)
53
+ return untraced;
54
+ if (outbound.traceparent === null)
55
+ headers.delete("traceparent");
56
+ else
57
+ headers.set("traceparent", outbound.traceparent);
58
+ if (outbound.tracestate === undefined)
59
+ headers.delete("tracestate");
60
+ else
61
+ headers.set("tracestate", outbound.tracestate);
62
+ return (call) => outbound.send(call);
63
+ }
64
+ export function proxy(config) {
65
+ const decoded = config.decoded !== false;
66
+ const forwarded = config.forwardedHeaders !== false;
67
+ return async (ctx) => {
68
+ const { ip, path, req, signal } = ctx;
69
+ const websocket = req.headers.get("upgrade")?.trim().toLowerCase() === "websocket";
70
+ const pathQuery = path + searchOfUrl(req.url);
71
+ const url = config.rewriteUrl ? config.rewriteUrl(pathQuery, ctx) : pathQuery;
72
+ const headers = upstreamHeaders(req, { client: forwarded ? ip : undefined, websocket });
73
+ /* requestHeaders below still has the last word */
74
+ const send = traced(ctx, req.method, headers);
75
+ const body = await forwardBody(req);
76
+ /* no body, or bytes whose length fetch() computes itself */
77
+ if (!(body instanceof ReadableStream))
78
+ headers.delete("content-length");
79
+ applyRequestHeaders(config.requestHeaders, ctx, headers);
80
+ const upstream = new AbortController();
81
+ const init = {
82
+ body: body ?? undefined,
83
+ headers,
84
+ method: req.method,
85
+ redirect: "manual",
86
+ signal: AbortSignal.any([signal, upstream.signal]),
87
+ };
88
+ /* a streamed request body needs it on Node; Workers imply it */
89
+ if (body instanceof ReadableStream)
90
+ init.duplex = "half";
91
+ const headerMs = websocket ? undefined : msOf(config.timeout, ctx, DEFAULT_TIMEOUT_MS);
92
+ const response = await within({ client: signal, headerMs, upstream }, () => send(() => config.destination(ctx, url, init)));
93
+ if (response.status === 101)
94
+ return response;
95
+ const idleMs = websocket ? undefined : msOf(config.idleTimeout, ctx);
96
+ const stream = response.body !== null && idleMs !== undefined
97
+ ? withIdleTimeout(response.body, idleMs, () => upstream.abort(timeoutError()))
98
+ : response.body;
99
+ const answer = answerFor(response, stream, decoded, isNodeOutbound(req));
100
+ const replaced = config.onResponse ? await config.onResponse(ctx, answer) : undefined;
101
+ return (replaced ?? answer);
102
+ };
103
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The body destination is handed. Bytes when small and sized: a streamed body the destination
3
+ * never reads can hold a service binding open until it times out, and a body teed by `clone()`
4
+ * has no known length. Bytes have neither problem.
5
+ */
6
+ export declare function forwardBody(request: Request): Promise<ArrayBuffer | ReadableStream<Uint8Array> | null>;
7
+ /**
8
+ * Whether `error` means the upstream failed (502), as opposed to a bug in user code (500). Fetch
9
+ * reports a network failure as a `TypeError`, as it does a typo, and runtimes tell them apart
10
+ * differently: undici says "fetch failed", Bun puts a `code` on the error (`ConnectionRefused`,
11
+ * `ENOTFOUND`), Workers say the network connection was lost. An invalid URL is the caller's bug.
12
+ */
13
+ export declare function isUpstreamFailure(error: unknown): boolean;
14
+ export declare function timeoutError(): DOMException;
15
+ /** A deadline option as milliseconds, or `undefined` for none (omitted or not positive). */
16
+ export declare function msOf<TCtx>(option: number | ((ctx: TCtx) => number) | undefined, ctx: TCtx, fallback?: number): number | undefined;
17
+ /** One call and its deadline: the upstream controller to abort, the client's signal to tell a disconnect apart. */
18
+ export type Call = {
19
+ readonly client: AbortSignal;
20
+ readonly headerMs: number | undefined;
21
+ readonly upstream: AbortController;
22
+ };
23
+ /** Await `answer` within the header deadline; map what it throws to what the client is told. */
24
+ export declare function within(call: Call, answer: () => Promise<Response> | Response): Promise<Response>;
25
+ /**
26
+ * `body`, erroring and calling `onIdle` (which aborts the upstream) when the upstream sends nothing
27
+ * for `ms`. The clock runs only while a read waits: a client reading slowly is backpressure, not an
28
+ * idle upstream.
29
+ */
30
+ export declare function withIdleTimeout(body: ReadableStream<Uint8Array>, ms: number, onIdle: () => void): ReadableStream<Uint8Array>;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * The call to the upstream: the body it is sent, the deadlines it is held to, and what its failures
3
+ * mean to the client. A network failure the runtime reports is a 502 `bad_gateway`, a missed
4
+ * deadline a 504 `gateway_timeout`; any other throw, a bug in `destination` included, stays what
5
+ * it is (a 500). The URL is the router's normalized `ctx.path` plus the raw query: one leading
6
+ * slash, `//` and `\` collapsed, encoded separators refused with a 400 before any handler runs, so
7
+ * neither `base + url` nor `new URL(url, base)` can leave the upstream's origin (SSRF).
8
+ */
9
+ import { HoneyError } from "../errors/error.js";
10
+ /* bodies up to this size with a declared length are forwarded as bytes; larger or unsized ones stream */
11
+ const MAX_BUFFERED_BODY_BYTES = 1024 * 1024;
12
+ /** Network-level codes runtimes put on errors when the upstream cannot be reached or drops. */
13
+ const NETWORK_CODES = /^(?:E[A-Z0-9_]+|Connection\w*|UND_ERR\w*|UNABLE_\w+|CERT_\w+|DEPTH_ZERO\w*)$/;
14
+ const FETCH_FAILED = /^fetch failed/i;
15
+ const CONNECTION_LOST = /network connection (?:was )?lost/i;
16
+ /**
17
+ * The body destination is handed. Bytes when small and sized: a streamed body the destination
18
+ * never reads can hold a service binding open until it times out, and a body teed by `clone()`
19
+ * has no known length. Bytes have neither problem.
20
+ */
21
+ export async function forwardBody(request) {
22
+ const method = request.method;
23
+ /* fetch refuses a GET or HEAD body */
24
+ if (request.body === null || method === "GET" || method === "HEAD")
25
+ return null;
26
+ const declared = Number.parseInt(request.headers.get("content-length") ?? "", 10);
27
+ if (Number.isFinite(declared) && declared <= MAX_BUFFERED_BODY_BYTES)
28
+ return request.arrayBuffer();
29
+ return request.body;
30
+ }
31
+ /**
32
+ * Whether `error` means the upstream failed (502), as opposed to a bug in user code (500). Fetch
33
+ * reports a network failure as a `TypeError`, as it does a typo, and runtimes tell them apart
34
+ * differently: undici says "fetch failed", Bun puts a `code` on the error (`ConnectionRefused`,
35
+ * `ENOTFOUND`), Workers say the network connection was lost. An invalid URL is the caller's bug.
36
+ */
37
+ export function isUpstreamFailure(error) {
38
+ if (!(error instanceof Error))
39
+ return false;
40
+ const code = error.code;
41
+ if (typeof code === "string")
42
+ return !code.startsWith("ERR_INVALID") && NETWORK_CODES.test(code);
43
+ return error instanceof TypeError && (FETCH_FAILED.test(error.message) || CONNECTION_LOST.test(error.message));
44
+ }
45
+ export function timeoutError() {
46
+ return new DOMException("upstream timed out", "TimeoutError");
47
+ }
48
+ /** A deadline option as milliseconds, or `undefined` for none (omitted or not positive). */
49
+ export function msOf(option, ctx, fallback) {
50
+ const ms = typeof option === "function" ? option(ctx) : (option ?? fallback);
51
+ return ms !== undefined && ms > 0 ? ms : undefined;
52
+ }
53
+ /** Await `answer` within the header deadline; map what it throws to what the client is told. */
54
+ export async function within(call, answer) {
55
+ let timedOut = false;
56
+ const timer = call.headerMs === undefined
57
+ ? undefined
58
+ : setTimeout(() => {
59
+ timedOut = true;
60
+ call.upstream.abort(timeoutError());
61
+ }, call.headerMs);
62
+ try {
63
+ return await answer();
64
+ }
65
+ catch (error) {
66
+ /* ours, or the destination's own AbortSignal.timeout() */
67
+ if (timedOut || (error instanceof DOMException && error.name === "TimeoutError")) {
68
+ throw new HoneyError({ cause: error, errorKey: "gateway_timeout", status: "gateway_timeout" });
69
+ }
70
+ if (!call.client.aborted && isUpstreamFailure(error)) {
71
+ throw new HoneyError({ cause: error, errorKey: "bad_gateway", status: "bad_gateway" });
72
+ }
73
+ throw error;
74
+ }
75
+ finally {
76
+ clearTimeout(timer);
77
+ }
78
+ }
79
+ /**
80
+ * `body`, erroring and calling `onIdle` (which aborts the upstream) when the upstream sends nothing
81
+ * for `ms`. The clock runs only while a read waits: a client reading slowly is backpressure, not an
82
+ * idle upstream.
83
+ */
84
+ export function withIdleTimeout(body, ms, onIdle) {
85
+ const reader = body.getReader();
86
+ return new ReadableStream({
87
+ cancel: (reason) => reader.cancel(reason),
88
+ async pull(controller) {
89
+ let timer;
90
+ const idle = new Promise((resolve) => {
91
+ timer = setTimeout(() => resolve("idle"), ms);
92
+ });
93
+ try {
94
+ const result = await Promise.race([reader.read(), idle]);
95
+ if (result === "idle") {
96
+ onIdle();
97
+ const error = timeoutError();
98
+ reader.cancel(error).catch(() => {
99
+ /* the upstream may not react to the abort (a binding, a stub): the body errors below either way */
100
+ });
101
+ controller.error(error);
102
+ }
103
+ else if (result.done)
104
+ controller.close();
105
+ else
106
+ controller.enqueue(result.value);
107
+ }
108
+ catch (error) {
109
+ controller.error(error);
110
+ }
111
+ finally {
112
+ clearTimeout(timer);
113
+ }
114
+ },
115
+ });
116
+ }