@lovrozagar/honey 0.7.2 → 1.0.0-rc.1

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 (1003) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -1969
  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 -744
  71. package/dist/index.js +12 -2363
  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 -776
  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 +181 -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/middleware-chain.d.ts +16 -0
  237. package/dist/routing/middleware-chain.js +41 -0
  238. package/dist/routing/output-types.d.ts +91 -0
  239. package/dist/routing/output-types.js +1 -0
  240. package/dist/routing/pattern.d.ts +55 -0
  241. package/dist/routing/pattern.js +219 -0
  242. package/dist/routing/record.d.ts +18 -0
  243. package/dist/routing/record.js +4 -0
  244. package/dist/routing/register.d.ts +135 -0
  245. package/dist/routing/register.js +155 -0
  246. package/dist/routing/request-path.d.ts +30 -0
  247. package/dist/routing/request-path.js +173 -0
  248. package/dist/routing/route-builder.d.ts +160 -0
  249. package/dist/routing/route-builder.js +86 -0
  250. package/dist/routing/route-tree.d.ts +18 -0
  251. package/dist/routing/route-tree.js +91 -0
  252. package/dist/routing/settings-chain.d.ts +75 -0
  253. package/dist/routing/settings-chain.js +137 -0
  254. package/dist/routing/settings.d.ts +90 -0
  255. package/dist/routing/settings.js +44 -0
  256. package/dist/routing/tap.d.ts +31 -0
  257. package/dist/routing/tap.js +77 -0
  258. package/dist/routing/tree-merge.d.ts +7 -0
  259. package/dist/routing/tree-merge.js +77 -0
  260. package/dist/routing/tree.d.ts +85 -0
  261. package/dist/routing/tree.js +196 -0
  262. package/dist/routing/types.d.ts +20 -0
  263. package/dist/routing/types.js +1 -0
  264. package/dist/routing/ws-builder.d.ts +62 -0
  265. package/dist/routing/ws-builder.js +109 -0
  266. package/dist/runtime/detect-runtime.d.ts +16 -0
  267. package/dist/runtime/detect-runtime.js +11 -0
  268. package/dist/runtime/optional-peer.d.ts +10 -0
  269. package/dist/runtime/optional-peer.js +19 -0
  270. package/dist/schema/arktype.d.ts +7 -0
  271. package/dist/schema/arktype.js +13 -0
  272. package/dist/schema/canonicalize.d.ts +8 -0
  273. package/dist/schema/canonicalize.js +19 -0
  274. package/dist/schema/effect.d.ts +7 -0
  275. package/dist/schema/effect.js +4 -0
  276. package/dist/schema/naming.d.ts +31 -0
  277. package/dist/schema/naming.js +116 -0
  278. package/dist/schema/sanitize-spec.d.ts +15 -0
  279. package/dist/schema/sanitize-spec.js +43 -0
  280. package/dist/schema/slots.d.ts +15 -0
  281. package/dist/schema/slots.js +179 -0
  282. package/dist/schema/to-json-schema.d.ts +34 -0
  283. package/dist/schema/to-json-schema.js +94 -0
  284. package/dist/schema/valibot.d.ts +4 -0
  285. package/dist/schema/valibot.js +153 -0
  286. package/dist/schema/yup.d.ts +3 -0
  287. package/dist/schema/yup.js +57 -0
  288. package/dist/schema/zod.d.ts +6 -0
  289. package/dist/schema/zod.js +192 -0
  290. package/dist/security/crypto.d.ts +7 -0
  291. package/dist/security/crypto.js +30 -0
  292. package/dist/streaming/producer-stream.d.ts +45 -0
  293. package/dist/streaming/producer-stream.js +251 -0
  294. package/dist/telemetry/fields.d.ts +43 -0
  295. package/dist/telemetry/fields.js +64 -0
  296. package/dist/telemetry/log-format.d.ts +7 -0
  297. package/dist/telemetry/log-format.js +43 -0
  298. package/dist/telemetry/logger.d.ts +44 -0
  299. package/dist/telemetry/logger.js +122 -0
  300. package/dist/telemetry/otel-subpath.d.ts +7 -0
  301. package/dist/telemetry/otel-subpath.js +5 -0
  302. package/dist/telemetry/otel.d.ts +50 -57
  303. package/dist/telemetry/otel.js +54 -130
  304. package/dist/telemetry/request-log.d.ts +22 -0
  305. package/dist/telemetry/request-log.js +83 -0
  306. package/dist/telemetry/request-trace.d.ts +123 -0
  307. package/dist/telemetry/request-trace.js +199 -0
  308. package/dist/telemetry/span-lifecycle.d.ts +11 -0
  309. package/dist/telemetry/span-lifecycle.js +114 -0
  310. package/dist/telemetry/traceparent.d.ts +40 -0
  311. package/dist/telemetry/traceparent.js +73 -0
  312. package/dist/testing/testing.d.ts +42 -0
  313. package/dist/testing/testing.js +101 -0
  314. package/dist/validation/content-type.d.ts +21 -0
  315. package/dist/validation/content-type.js +42 -0
  316. package/dist/validation/standard-schema.d.ts +41 -0
  317. package/dist/validation/standard-schema.js +5 -0
  318. package/dist/validation/validate-input.d.ts +45 -0
  319. package/dist/validation/validate-input.js +174 -0
  320. package/dist/validation/validate-output.d.ts +34 -0
  321. package/dist/validation/validate-output.js +107 -0
  322. package/dist/ws/bun.d.ts +30 -25
  323. package/dist/ws/bun.js +42 -46
  324. package/dist/ws/cloudflare.d.ts +6 -75
  325. package/dist/ws/cloudflare.js +37 -104
  326. package/dist/ws/contract.d.ts +74 -0
  327. package/dist/ws/contract.js +83 -0
  328. package/dist/ws/node.d.ts +12 -21
  329. package/dist/ws/node.js +103 -151
  330. package/dist/ws/origin.d.ts +23 -0
  331. package/dist/ws/origin.js +48 -0
  332. package/dist/ws/route.d.ts +14 -0
  333. package/dist/ws/route.js +5 -0
  334. package/dist/ws/session.d.ts +15 -6
  335. package/dist/ws/session.js +22 -23
  336. package/dist/ws/shared.d.ts +23 -33
  337. package/dist/ws/shared.js +53 -39
  338. package/package.json +169 -251
  339. package/dist/accepts.d.ts +0 -12
  340. package/dist/accepts.d.ts.map +0 -1
  341. package/dist/accepts.js +0 -126
  342. package/dist/accepts.js.map +0 -1
  343. package/dist/body-kind.d.ts +0 -26
  344. package/dist/body-kind.d.ts.map +0 -1
  345. package/dist/body-kind.js +0 -70
  346. package/dist/body-kind.js.map +0 -1
  347. package/dist/body-limit.d.ts +0 -26
  348. package/dist/body-limit.d.ts.map +0 -1
  349. package/dist/body-limit.js +0 -126
  350. package/dist/body-limit.js.map +0 -1
  351. package/dist/build/index.d.ts.map +0 -1
  352. package/dist/build/index.js.map +0 -1
  353. package/dist/cli-args.d.ts +0 -33
  354. package/dist/cli-args.d.ts.map +0 -1
  355. package/dist/cli-args.js +0 -102
  356. package/dist/cli-args.js.map +0 -1
  357. package/dist/cli-go/auth.go +0 -26
  358. package/dist/cli-go/config.go +0 -192
  359. package/dist/cli-go/errors.go +0 -75
  360. package/dist/cli-go/multipart.go +0 -79
  361. package/dist/cli-go/output.go +0 -163
  362. package/dist/cli-go/root.go +0 -30
  363. package/dist/cli-go/stream.go +0 -88
  364. package/dist/cli-go/version.go +0 -5
  365. package/dist/cli.d.ts +0 -3
  366. package/dist/cli.d.ts.map +0 -1
  367. package/dist/cli.js +0 -209
  368. package/dist/cli.js.map +0 -1
  369. package/dist/client/defaults.d.ts +0 -12
  370. package/dist/client/defaults.d.ts.map +0 -1
  371. package/dist/client/defaults.js +0 -48
  372. package/dist/client/defaults.js.map +0 -1
  373. package/dist/client/error.d.ts +0 -49
  374. package/dist/client/error.d.ts.map +0 -1
  375. package/dist/client/error.js +0 -71
  376. package/dist/client/error.js.map +0 -1
  377. package/dist/client/http.d.ts +0 -155
  378. package/dist/client/http.d.ts.map +0 -1
  379. package/dist/client/http.js +0 -571
  380. package/dist/client/http.js.map +0 -1
  381. package/dist/client/index.d.ts +0 -23
  382. package/dist/client/index.d.ts.map +0 -1
  383. package/dist/client/index.js +0 -95
  384. package/dist/client/index.js.map +0 -1
  385. package/dist/client/path.d.ts +0 -26
  386. package/dist/client/path.d.ts.map +0 -1
  387. package/dist/client/path.js +0 -163
  388. package/dist/client/path.js.map +0 -1
  389. package/dist/client/redirect-policy.d.ts +0 -12
  390. package/dist/client/redirect-policy.d.ts.map +0 -1
  391. package/dist/client/redirect-policy.js +0 -20
  392. package/dist/client/redirect-policy.js.map +0 -1
  393. package/dist/client/sdk.d.ts +0 -70
  394. package/dist/client/sdk.d.ts.map +0 -1
  395. package/dist/client/sdk.js +0 -292
  396. package/dist/client/sdk.js.map +0 -1
  397. package/dist/client/sse.d.ts +0 -23
  398. package/dist/client/sse.d.ts.map +0 -1
  399. package/dist/client/sse.js +0 -129
  400. package/dist/client/sse.js.map +0 -1
  401. package/dist/client/types.d.ts +0 -124
  402. package/dist/client/types.d.ts.map +0 -1
  403. package/dist/client/types.js +0 -2
  404. package/dist/client/types.js.map +0 -1
  405. package/dist/client/ws.d.ts +0 -22
  406. package/dist/client/ws.d.ts.map +0 -1
  407. package/dist/client/ws.js +0 -112
  408. package/dist/client/ws.js.map +0 -1
  409. package/dist/client-go/errors.go +0 -236
  410. package/dist/client-go/export.go +0 -44
  411. package/dist/client-go/invalidation.go +0 -371
  412. package/dist/client-go/nullable.go +0 -62
  413. package/dist/client-go/realtime.go +0 -354
  414. package/dist/client-go/result.go +0 -20
  415. package/dist/client-go/runtime.go +0 -975
  416. package/dist/client-go/sse.go +0 -159
  417. package/dist/client-go/transport.go +0 -495
  418. package/dist/client-go/ws.go +0 -128
  419. package/dist/client-info.d.ts +0 -36
  420. package/dist/client-info.d.ts.map +0 -1
  421. package/dist/client-info.js +0 -53
  422. package/dist/client-info.js.map +0 -1
  423. package/dist/client-mcp/README.md +0 -10
  424. package/dist/client-mcp/server.ts +0 -221
  425. package/dist/client-mcp/types.ts +0 -19
  426. package/dist/client-python/_errors.py +0 -115
  427. package/dist/client-python/_invalidation.py +0 -494
  428. package/dist/client-python/_realtime.py +0 -179
  429. package/dist/client-python/_runtime.py +0 -860
  430. package/dist/client-python/_sse.py +0 -155
  431. package/dist/client-python/_transport.py +0 -366
  432. package/dist/client-python/_ws.py +0 -159
  433. package/dist/client-python/py.typed +0 -0
  434. package/dist/client-rust/errors.rs +0 -220
  435. package/dist/client-rust/invalidation.rs +0 -412
  436. package/dist/client-rust/invalidation_sync.rs +0 -93
  437. package/dist/client-rust/nullable.rs +0 -17
  438. package/dist/client-rust/realtime.rs +0 -702
  439. package/dist/client-rust/result.rs +0 -22
  440. package/dist/client-rust/runtime.rs +0 -980
  441. package/dist/client-rust/runtime_sync.rs +0 -484
  442. package/dist/client-rust/sse.rs +0 -188
  443. package/dist/client-rust/ws.rs +0 -167
  444. package/dist/codegen-go-cli.d.ts +0 -22
  445. package/dist/codegen-go-cli.d.ts.map +0 -1
  446. package/dist/codegen-go-cli.js +0 -964
  447. package/dist/codegen-go-cli.js.map +0 -1
  448. package/dist/codegen-go.d.ts +0 -41
  449. package/dist/codegen-go.d.ts.map +0 -1
  450. package/dist/codegen-go.js +0 -872
  451. package/dist/codegen-go.js.map +0 -1
  452. package/dist/codegen-hash.d.ts +0 -3
  453. package/dist/codegen-hash.d.ts.map +0 -1
  454. package/dist/codegen-hash.js +0 -9
  455. package/dist/codegen-hash.js.map +0 -1
  456. package/dist/codegen-ir.d.ts +0 -190
  457. package/dist/codegen-ir.d.ts.map +0 -1
  458. package/dist/codegen-ir.js +0 -661
  459. package/dist/codegen-ir.js.map +0 -1
  460. package/dist/codegen-lang.d.ts +0 -65
  461. package/dist/codegen-lang.d.ts.map +0 -1
  462. package/dist/codegen-lang.js +0 -526
  463. package/dist/codegen-lang.js.map +0 -1
  464. package/dist/codegen-load.d.ts +0 -31
  465. package/dist/codegen-load.d.ts.map +0 -1
  466. package/dist/codegen-load.js +0 -138
  467. package/dist/codegen-load.js.map +0 -1
  468. package/dist/codegen-loaders.d.ts +0 -12
  469. package/dist/codegen-loaders.d.ts.map +0 -1
  470. package/dist/codegen-loaders.js +0 -55
  471. package/dist/codegen-loaders.js.map +0 -1
  472. package/dist/codegen-mcp.d.ts +0 -13
  473. package/dist/codegen-mcp.d.ts.map +0 -1
  474. package/dist/codegen-mcp.js +0 -368
  475. package/dist/codegen-mcp.js.map +0 -1
  476. package/dist/codegen-python.d.ts +0 -33
  477. package/dist/codegen-python.d.ts.map +0 -1
  478. package/dist/codegen-python.js +0 -828
  479. package/dist/codegen-python.js.map +0 -1
  480. package/dist/codegen-route-tree-intern.d.ts +0 -40
  481. package/dist/codegen-route-tree-intern.d.ts.map +0 -1
  482. package/dist/codegen-route-tree-intern.js +0 -221
  483. package/dist/codegen-route-tree-intern.js.map +0 -1
  484. package/dist/codegen-rust.d.ts +0 -18
  485. package/dist/codegen-rust.d.ts.map +0 -1
  486. package/dist/codegen-rust.js +0 -1293
  487. package/dist/codegen-rust.js.map +0 -1
  488. package/dist/codegen-sanitize.d.ts +0 -3
  489. package/dist/codegen-sanitize.d.ts.map +0 -1
  490. package/dist/codegen-sanitize.js +0 -56
  491. package/dist/codegen-sanitize.js.map +0 -1
  492. package/dist/codegen-schema-naming.d.ts +0 -27
  493. package/dist/codegen-schema-naming.d.ts.map +0 -1
  494. package/dist/codegen-schema-naming.js +0 -150
  495. package/dist/codegen-schema-naming.js.map +0 -1
  496. package/dist/codegen-sdk-model.d.ts +0 -71
  497. package/dist/codegen-sdk-model.d.ts.map +0 -1
  498. package/dist/codegen-sdk-model.js +0 -179
  499. package/dist/codegen-sdk-model.js.map +0 -1
  500. package/dist/codegen.d.ts +0 -187
  501. package/dist/codegen.d.ts.map +0 -1
  502. package/dist/codegen.js +0 -4619
  503. package/dist/codegen.js.map +0 -1
  504. package/dist/context.d.ts +0 -86
  505. package/dist/context.d.ts.map +0 -1
  506. package/dist/context.js +0 -242
  507. package/dist/context.js.map +0 -1
  508. package/dist/cookie-sign.d.ts +0 -17
  509. package/dist/cookie-sign.d.ts.map +0 -1
  510. package/dist/cookie-sign.js +0 -104
  511. package/dist/cookie-sign.js.map +0 -1
  512. package/dist/cookie.d.ts +0 -24
  513. package/dist/cookie.d.ts.map +0 -1
  514. package/dist/cookie.js +0 -138
  515. package/dist/cookie.js.map +0 -1
  516. package/dist/cors.d.ts +0 -14
  517. package/dist/cors.d.ts.map +0 -1
  518. package/dist/cors.js +0 -87
  519. package/dist/cors.js.map +0 -1
  520. package/dist/crypto.d.ts +0 -7
  521. package/dist/crypto.d.ts.map +0 -1
  522. package/dist/crypto.js +0 -38
  523. package/dist/crypto.js.map +0 -1
  524. package/dist/csrf.d.ts +0 -28
  525. package/dist/csrf.d.ts.map +0 -1
  526. package/dist/csrf.js +0 -79
  527. package/dist/csrf.js.map +0 -1
  528. package/dist/curl-logger.d.ts +0 -44
  529. package/dist/curl-logger.d.ts.map +0 -1
  530. package/dist/curl-logger.js +0 -199
  531. package/dist/curl-logger.js.map +0 -1
  532. package/dist/detect-runtime.d.ts +0 -16
  533. package/dist/detect-runtime.d.ts.map +0 -1
  534. package/dist/detect-runtime.js +0 -13
  535. package/dist/detect-runtime.js.map +0 -1
  536. package/dist/dict.d.ts +0 -11
  537. package/dist/dict.d.ts.map +0 -1
  538. package/dist/dict.js +0 -13
  539. package/dist/dict.js.map +0 -1
  540. package/dist/error.d.ts +0 -21
  541. package/dist/error.d.ts.map +0 -1
  542. package/dist/error.js +0 -44
  543. package/dist/error.js.map +0 -1
  544. package/dist/errors.d.ts +0 -40
  545. package/dist/errors.d.ts.map +0 -1
  546. package/dist/errors.js +0 -39
  547. package/dist/errors.js.map +0 -1
  548. package/dist/etag.d.ts +0 -11
  549. package/dist/etag.d.ts.map +0 -1
  550. package/dist/etag.js +0 -82
  551. package/dist/etag.js.map +0 -1
  552. package/dist/feature-detect.d.ts +0 -25
  553. package/dist/feature-detect.d.ts.map +0 -1
  554. package/dist/feature-detect.js +0 -144
  555. package/dist/feature-detect.js.map +0 -1
  556. package/dist/feature-load.d.ts +0 -3
  557. package/dist/feature-load.d.ts.map +0 -1
  558. package/dist/feature-load.js +0 -36
  559. package/dist/feature-load.js.map +0 -1
  560. package/dist/feature-slots.d.ts +0 -44
  561. package/dist/feature-slots.d.ts.map +0 -1
  562. package/dist/feature-slots.js +0 -48
  563. package/dist/feature-slots.js.map +0 -1
  564. package/dist/fetch-request.d.ts +0 -10
  565. package/dist/fetch-request.d.ts.map +0 -1
  566. package/dist/fetch-request.js +0 -13
  567. package/dist/fetch-request.js.map +0 -1
  568. package/dist/gen-process.d.ts +0 -15
  569. package/dist/gen-process.d.ts.map +0 -1
  570. package/dist/gen-process.js +0 -43
  571. package/dist/gen-process.js.map +0 -1
  572. package/dist/gen-write.d.ts +0 -19
  573. package/dist/gen-write.d.ts.map +0 -1
  574. package/dist/gen-write.js +0 -120
  575. package/dist/gen-write.js.map +0 -1
  576. package/dist/glob.d.ts +0 -21
  577. package/dist/glob.d.ts.map +0 -1
  578. package/dist/glob.js +0 -115
  579. package/dist/glob.js.map +0 -1
  580. package/dist/go-type-emitter.d.ts +0 -47
  581. package/dist/go-type-emitter.d.ts.map +0 -1
  582. package/dist/go-type-emitter.js +0 -594
  583. package/dist/go-type-emitter.js.map +0 -1
  584. package/dist/honey-response.d.ts +0 -82
  585. package/dist/honey-response.d.ts.map +0 -1
  586. package/dist/honey-response.js +0 -338
  587. package/dist/honey-response.js.map +0 -1
  588. package/dist/i18n-slot.d.ts +0 -15
  589. package/dist/i18n-slot.d.ts.map +0 -1
  590. package/dist/i18n-slot.js +0 -14
  591. package/dist/i18n-slot.js.map +0 -1
  592. package/dist/i18n.d.ts +0 -29
  593. package/dist/i18n.d.ts.map +0 -1
  594. package/dist/i18n.js +0 -250
  595. package/dist/i18n.js.map +0 -1
  596. package/dist/index.d.ts.map +0 -1
  597. package/dist/index.js.map +0 -1
  598. package/dist/init.d.ts +0 -5
  599. package/dist/init.d.ts.map +0 -1
  600. package/dist/init.js +0 -140
  601. package/dist/init.js.map +0 -1
  602. package/dist/input.d.ts +0 -6
  603. package/dist/input.d.ts.map +0 -1
  604. package/dist/input.js +0 -4
  605. package/dist/input.js.map +0 -1
  606. package/dist/invalidate-check.d.ts +0 -61
  607. package/dist/invalidate-check.d.ts.map +0 -1
  608. package/dist/invalidate-check.js +0 -163
  609. package/dist/invalidate-check.js.map +0 -1
  610. package/dist/invoke-user.d.ts +0 -35
  611. package/dist/invoke-user.d.ts.map +0 -1
  612. package/dist/invoke-user.js +0 -73
  613. package/dist/invoke-user.js.map +0 -1
  614. package/dist/ip-restrict.d.ts +0 -24
  615. package/dist/ip-restrict.d.ts.map +0 -1
  616. package/dist/ip-restrict.js +0 -60
  617. package/dist/ip-restrict.js.map +0 -1
  618. package/dist/ip.d.ts +0 -39
  619. package/dist/ip.d.ts.map +0 -1
  620. package/dist/ip.js +0 -209
  621. package/dist/ip.js.map +0 -1
  622. package/dist/logger.d.ts +0 -45
  623. package/dist/logger.d.ts.map +0 -1
  624. package/dist/logger.js +0 -113
  625. package/dist/logger.js.map +0 -1
  626. package/dist/media-type.d.ts +0 -30
  627. package/dist/media-type.d.ts.map +0 -1
  628. package/dist/media-type.js +0 -97
  629. package/dist/media-type.js.map +0 -1
  630. package/dist/meta-spec-merge.d.ts +0 -32
  631. package/dist/meta-spec-merge.d.ts.map +0 -1
  632. package/dist/meta-spec-merge.js +0 -68
  633. package/dist/meta-spec-merge.js.map +0 -1
  634. package/dist/meta-spec.d.ts +0 -94
  635. package/dist/meta-spec.d.ts.map +0 -1
  636. package/dist/meta-spec.js +0 -535
  637. package/dist/meta-spec.js.map +0 -1
  638. package/dist/middleware.d.ts +0 -77
  639. package/dist/middleware.d.ts.map +0 -1
  640. package/dist/middleware.js +0 -253
  641. package/dist/middleware.js.map +0 -1
  642. package/dist/node-request.d.ts +0 -104
  643. package/dist/node-request.d.ts.map +0 -1
  644. package/dist/node-request.js +0 -407
  645. package/dist/node-request.js.map +0 -1
  646. package/dist/node.d.ts +0 -30
  647. package/dist/node.d.ts.map +0 -1
  648. package/dist/node.js +0 -396
  649. package/dist/node.js.map +0 -1
  650. package/dist/openapi/collect.d.ts.map +0 -1
  651. package/dist/openapi/collect.js.map +0 -1
  652. package/dist/openapi/docs-page.d.ts.map +0 -1
  653. package/dist/openapi/docs-page.js.map +0 -1
  654. package/dist/openapi/document.d.ts.map +0 -1
  655. package/dist/openapi/document.js.map +0 -1
  656. package/dist/openapi/json-schema-slot.d.ts +0 -12
  657. package/dist/openapi/json-schema-slot.d.ts.map +0 -1
  658. package/dist/openapi/json-schema-slot.js +0 -38
  659. package/dist/openapi/json-schema-slot.js.map +0 -1
  660. package/dist/openapi/register.d.ts.map +0 -1
  661. package/dist/openapi/register.js.map +0 -1
  662. package/dist/openapi/scalar.d.ts.map +0 -1
  663. package/dist/openapi/scalar.js.map +0 -1
  664. package/dist/openapi/serve.d.ts.map +0 -1
  665. package/dist/openapi/serve.js.map +0 -1
  666. package/dist/openapi/spec-factory.d.ts +0 -65
  667. package/dist/openapi/spec-factory.d.ts.map +0 -1
  668. package/dist/openapi/spec-factory.js +0 -52
  669. package/dist/openapi/spec-factory.js.map +0 -1
  670. package/dist/openapi/spec.d.ts +0 -29
  671. package/dist/openapi/spec.d.ts.map +0 -1
  672. package/dist/openapi/spec.js +0 -50
  673. package/dist/openapi/spec.js.map +0 -1
  674. package/dist/openapi/swagger.d.ts.map +0 -1
  675. package/dist/openapi/swagger.js.map +0 -1
  676. package/dist/pattern.d.ts +0 -71
  677. package/dist/pattern.d.ts.map +0 -1
  678. package/dist/pattern.js +0 -239
  679. package/dist/pattern.js.map +0 -1
  680. package/dist/peer.d.ts +0 -17
  681. package/dist/peer.d.ts.map +0 -1
  682. package/dist/peer.js +0 -50
  683. package/dist/peer.js.map +0 -1
  684. package/dist/plugin.d.ts +0 -228
  685. package/dist/plugin.d.ts.map +0 -1
  686. package/dist/plugin.js +0 -666
  687. package/dist/plugin.js.map +0 -1
  688. package/dist/powered-by.d.ts +0 -7
  689. package/dist/powered-by.d.ts.map +0 -1
  690. package/dist/powered-by.js +0 -11
  691. package/dist/powered-by.js.map +0 -1
  692. package/dist/pretty-json.d.ts +0 -10
  693. package/dist/pretty-json.d.ts.map +0 -1
  694. package/dist/pretty-json.js +0 -47
  695. package/dist/pretty-json.js.map +0 -1
  696. package/dist/producer-stream.d.ts +0 -47
  697. package/dist/producer-stream.d.ts.map +0 -1
  698. package/dist/producer-stream.js +0 -267
  699. package/dist/producer-stream.js.map +0 -1
  700. package/dist/proxy.d.ts +0 -90
  701. package/dist/proxy.d.ts.map +0 -1
  702. package/dist/proxy.js +0 -274
  703. package/dist/proxy.js.map +0 -1
  704. package/dist/python-type-emitter.d.ts +0 -24
  705. package/dist/python-type-emitter.d.ts.map +0 -1
  706. package/dist/python-type-emitter.js +0 -157
  707. package/dist/python-type-emitter.js.map +0 -1
  708. package/dist/realtime/bus.d.ts.map +0 -1
  709. package/dist/realtime/bus.js.map +0 -1
  710. package/dist/realtime/register.d.ts +0 -3
  711. package/dist/realtime/register.d.ts.map +0 -1
  712. package/dist/realtime/register.js +0 -10
  713. package/dist/realtime/register.js.map +0 -1
  714. package/dist/realtime/route.d.ts.map +0 -1
  715. package/dist/realtime/route.js.map +0 -1
  716. package/dist/realtime/server.d.ts.map +0 -1
  717. package/dist/realtime/server.js.map +0 -1
  718. package/dist/request-id.d.ts +0 -19
  719. package/dist/request-id.d.ts.map +0 -1
  720. package/dist/request-id.js +0 -16
  721. package/dist/request-id.js.map +0 -1
  722. package/dist/request-limits.d.ts +0 -3
  723. package/dist/request-limits.d.ts.map +0 -1
  724. package/dist/request-limits.js +0 -3
  725. package/dist/request-limits.js.map +0 -1
  726. package/dist/request-path.d.ts +0 -33
  727. package/dist/request-path.d.ts.map +0 -1
  728. package/dist/request-path.js +0 -178
  729. package/dist/request-path.js.map +0 -1
  730. package/dist/request-to-curl.d.ts +0 -15
  731. package/dist/request-to-curl.d.ts.map +0 -1
  732. package/dist/request-to-curl.js +0 -48
  733. package/dist/request-to-curl.js.map +0 -1
  734. package/dist/response.d.ts +0 -86
  735. package/dist/response.d.ts.map +0 -1
  736. package/dist/response.js +0 -313
  737. package/dist/response.js.map +0 -1
  738. package/dist/rust-type-emitter.d.ts +0 -44
  739. package/dist/rust-type-emitter.d.ts.map +0 -1
  740. package/dist/rust-type-emitter.js +0 -463
  741. package/dist/rust-type-emitter.js.map +0 -1
  742. package/dist/secure-headers.d.ts +0 -16
  743. package/dist/secure-headers.d.ts.map +0 -1
  744. package/dist/secure-headers.js +0 -53
  745. package/dist/secure-headers.js.map +0 -1
  746. package/dist/serve-register.d.ts +0 -6
  747. package/dist/serve-register.d.ts.map +0 -1
  748. package/dist/serve-register.js +0 -9
  749. package/dist/serve-register.js.map +0 -1
  750. package/dist/serve-slot.d.ts +0 -9
  751. package/dist/serve-slot.d.ts.map +0 -1
  752. package/dist/serve-slot.js +0 -52
  753. package/dist/serve-slot.js.map +0 -1
  754. package/dist/serve.d.ts +0 -38
  755. package/dist/serve.d.ts.map +0 -1
  756. package/dist/serve.js +0 -157
  757. package/dist/serve.js.map +0 -1
  758. package/dist/server-timing.d.ts +0 -9
  759. package/dist/server-timing.d.ts.map +0 -1
  760. package/dist/server-timing.js +0 -51
  761. package/dist/server-timing.js.map +0 -1
  762. package/dist/static.d.ts +0 -21
  763. package/dist/static.d.ts.map +0 -1
  764. package/dist/static.js +0 -102
  765. package/dist/static.js.map +0 -1
  766. package/dist/telemetry/otel.d.ts.map +0 -1
  767. package/dist/telemetry/otel.js.map +0 -1
  768. package/dist/testing.d.ts +0 -36
  769. package/dist/testing.d.ts.map +0 -1
  770. package/dist/testing.js +0 -124
  771. package/dist/testing.js.map +0 -1
  772. package/dist/timeout.d.ts +0 -13
  773. package/dist/timeout.d.ts.map +0 -1
  774. package/dist/timeout.js +0 -36
  775. package/dist/timeout.js.map +0 -1
  776. package/dist/tree.d.ts +0 -193
  777. package/dist/tree.d.ts.map +0 -1
  778. package/dist/tree.js +0 -437
  779. package/dist/tree.js.map +0 -1
  780. package/dist/trust.d.ts +0 -21
  781. package/dist/trust.d.ts.map +0 -1
  782. package/dist/trust.js +0 -100
  783. package/dist/trust.js.map +0 -1
  784. package/dist/ts-type-emitter.d.ts +0 -8
  785. package/dist/ts-type-emitter.d.ts.map +0 -1
  786. package/dist/ts-type-emitter.js +0 -150
  787. package/dist/ts-type-emitter.js.map +0 -1
  788. package/dist/type-emitter.d.ts +0 -36
  789. package/dist/type-emitter.d.ts.map +0 -1
  790. package/dist/type-emitter.js +0 -729
  791. package/dist/type-emitter.js.map +0 -1
  792. package/dist/type-extractor.d.ts +0 -43
  793. package/dist/type-extractor.d.ts.map +0 -1
  794. package/dist/type-extractor.js +0 -819
  795. package/dist/type-extractor.js.map +0 -1
  796. package/dist/types.d.ts +0 -467
  797. package/dist/types.d.ts.map +0 -1
  798. package/dist/types.js +0 -96
  799. package/dist/types.js.map +0 -1
  800. package/dist/validation.d.ts +0 -31
  801. package/dist/validation.d.ts.map +0 -1
  802. package/dist/validation.js +0 -335
  803. package/dist/validation.js.map +0 -1
  804. package/dist/with-headers.d.ts +0 -15
  805. package/dist/with-headers.d.ts.map +0 -1
  806. package/dist/with-headers.js +0 -45
  807. package/dist/with-headers.js.map +0 -1
  808. package/dist/ws/bun.d.ts.map +0 -1
  809. package/dist/ws/bun.js.map +0 -1
  810. package/dist/ws/cloudflare.d.ts.map +0 -1
  811. package/dist/ws/cloudflare.js.map +0 -1
  812. package/dist/ws/deno.d.ts +0 -13
  813. package/dist/ws/deno.d.ts.map +0 -1
  814. package/dist/ws/deno.js +0 -133
  815. package/dist/ws/deno.js.map +0 -1
  816. package/dist/ws/node.d.ts.map +0 -1
  817. package/dist/ws/node.js.map +0 -1
  818. package/dist/ws/session.d.ts.map +0 -1
  819. package/dist/ws/session.js.map +0 -1
  820. package/dist/ws/shared.d.ts.map +0 -1
  821. package/dist/ws/shared.js.map +0 -1
  822. package/dist/ws-origin.d.ts +0 -20
  823. package/dist/ws-origin.d.ts.map +0 -1
  824. package/dist/ws-origin.js +0 -41
  825. package/dist/ws-origin.js.map +0 -1
  826. package/dist/yaml.d.ts +0 -18
  827. package/dist/yaml.d.ts.map +0 -1
  828. package/dist/yaml.js +0 -101
  829. package/dist/yaml.js.map +0 -1
  830. package/docs/api-ref/go.md +0 -399
  831. package/docs/api-ref/python.md +0 -399
  832. package/docs/api-ref/rust.md +0 -399
  833. package/docs/api-ref/typescript.md +0 -399
  834. package/docs/invalidate-spec.md +0 -333
  835. package/docs/meta-spec.md +0 -555
  836. package/docs/packaging.md +0 -104
  837. package/docs/regression-matrix/README.md +0 -32
  838. package/docs/regression-matrix/review.md +0 -44
  839. package/docs/regression-matrix/ws1-3.md +0 -97
  840. package/docs/regression-matrix/ws4-8.md +0 -107
  841. package/docs/regression-matrix/ws9-12.md +0 -266
  842. package/docs/sdk.md +0 -798
  843. package/src/accepts.ts +0 -136
  844. package/src/body-kind.ts +0 -67
  845. package/src/body-limit.ts +0 -152
  846. package/src/build/index.ts +0 -217
  847. package/src/cli-args.ts +0 -123
  848. package/src/cli-go/auth.go +0 -26
  849. package/src/cli-go/config.go +0 -192
  850. package/src/cli-go/errors.go +0 -75
  851. package/src/cli-go/multipart.go +0 -79
  852. package/src/cli-go/output.go +0 -163
  853. package/src/cli-go/root.go +0 -30
  854. package/src/cli-go/stream.go +0 -88
  855. package/src/cli-go/version.go +0 -5
  856. package/src/cli.ts +0 -209
  857. package/src/client/defaults.ts +0 -47
  858. package/src/client/error.ts +0 -82
  859. package/src/client/http.ts +0 -737
  860. package/src/client/index.ts +0 -157
  861. package/src/client/path.ts +0 -169
  862. package/src/client/redirect-policy.ts +0 -19
  863. package/src/client/sdk.ts +0 -351
  864. package/src/client/sse.ts +0 -128
  865. package/src/client/types.ts +0 -206
  866. package/src/client/ws.ts +0 -149
  867. package/src/client-go/errors.go +0 -236
  868. package/src/client-go/export.go +0 -44
  869. package/src/client-go/invalidation.go +0 -371
  870. package/src/client-go/nullable.go +0 -62
  871. package/src/client-go/realtime.go +0 -354
  872. package/src/client-go/result.go +0 -20
  873. package/src/client-go/runtime.go +0 -975
  874. package/src/client-go/sse.go +0 -159
  875. package/src/client-go/transport.go +0 -495
  876. package/src/client-go/ws.go +0 -128
  877. package/src/client-info.ts +0 -79
  878. package/src/client-mcp/README.md +0 -10
  879. package/src/client-mcp/server.ts +0 -221
  880. package/src/client-mcp/types.ts +0 -19
  881. package/src/client-python/_errors.py +0 -115
  882. package/src/client-python/_invalidation.py +0 -494
  883. package/src/client-python/_realtime.py +0 -179
  884. package/src/client-python/_runtime.py +0 -860
  885. package/src/client-python/_sse.py +0 -155
  886. package/src/client-python/_transport.py +0 -366
  887. package/src/client-python/_ws.py +0 -159
  888. package/src/client-python/py.typed +0 -0
  889. package/src/client-rust/errors.rs +0 -220
  890. package/src/client-rust/invalidation.rs +0 -412
  891. package/src/client-rust/invalidation_sync.rs +0 -93
  892. package/src/client-rust/nullable.rs +0 -17
  893. package/src/client-rust/realtime.rs +0 -702
  894. package/src/client-rust/result.rs +0 -22
  895. package/src/client-rust/runtime.rs +0 -980
  896. package/src/client-rust/runtime_sync.rs +0 -484
  897. package/src/client-rust/sse.rs +0 -188
  898. package/src/client-rust/ws.rs +0 -167
  899. package/src/codegen-go-cli.ts +0 -1066
  900. package/src/codegen-go.ts +0 -970
  901. package/src/codegen-hash.ts +0 -8
  902. package/src/codegen-ir.ts +0 -812
  903. package/src/codegen-lang.ts +0 -517
  904. package/src/codegen-load.ts +0 -150
  905. package/src/codegen-loaders.ts +0 -50
  906. package/src/codegen-mcp.ts +0 -445
  907. package/src/codegen-python.ts +0 -916
  908. package/src/codegen-route-tree-intern.ts +0 -198
  909. package/src/codegen-rust.ts +0 -1402
  910. package/src/codegen-sanitize.ts +0 -57
  911. package/src/codegen-schema-naming.ts +0 -165
  912. package/src/codegen-sdk-model.ts +0 -228
  913. package/src/codegen.ts +0 -5089
  914. package/src/context.ts +0 -325
  915. package/src/cookie-sign.ts +0 -119
  916. package/src/cookie.ts +0 -143
  917. package/src/cors.ts +0 -95
  918. package/src/crypto.ts +0 -38
  919. package/src/csrf.ts +0 -86
  920. package/src/curl-logger.ts +0 -258
  921. package/src/detect-runtime.ts +0 -17
  922. package/src/dict.ts +0 -12
  923. package/src/error.ts +0 -55
  924. package/src/errors.ts +0 -85
  925. package/src/etag.ts +0 -97
  926. package/src/feature-detect.ts +0 -147
  927. package/src/feature-load.ts +0 -23
  928. package/src/feature-slots.ts +0 -70
  929. package/src/fetch-request.ts +0 -13
  930. package/src/gen-process.ts +0 -42
  931. package/src/gen-write.ts +0 -127
  932. package/src/glob.ts +0 -109
  933. package/src/go-type-emitter.ts +0 -660
  934. package/src/honey-response.ts +0 -379
  935. package/src/i18n-slot.ts +0 -30
  936. package/src/i18n.ts +0 -300
  937. package/src/index.ts +0 -3829
  938. package/src/init.ts +0 -161
  939. package/src/input.ts +0 -8
  940. package/src/invalidate-check.ts +0 -205
  941. package/src/invoke-user.ts +0 -95
  942. package/src/ip-restrict.ts +0 -79
  943. package/src/ip.ts +0 -194
  944. package/src/logger.ts +0 -178
  945. package/src/media-type.ts +0 -104
  946. package/src/meta-spec-merge.ts +0 -80
  947. package/src/meta-spec.ts +0 -718
  948. package/src/middleware.ts +0 -331
  949. package/src/node-request.ts +0 -431
  950. package/src/node.ts +0 -454
  951. package/src/openapi/collect.ts +0 -50
  952. package/src/openapi/docs-page.ts +0 -89
  953. package/src/openapi/document.ts +0 -893
  954. package/src/openapi/json-schema-slot.ts +0 -53
  955. package/src/openapi/register.ts +0 -23
  956. package/src/openapi/scalar.ts +0 -34
  957. package/src/openapi/serve.ts +0 -39
  958. package/src/openapi/spec-factory.ts +0 -100
  959. package/src/openapi/spec.ts +0 -74
  960. package/src/openapi/swagger.ts +0 -35
  961. package/src/pattern.ts +0 -245
  962. package/src/peer.ts +0 -53
  963. package/src/plugin.ts +0 -864
  964. package/src/powered-by.ts +0 -18
  965. package/src/pretty-json.ts +0 -56
  966. package/src/producer-stream.ts +0 -296
  967. package/src/proxy.ts +0 -370
  968. package/src/python-type-emitter.ts +0 -181
  969. package/src/realtime/bus.ts +0 -140
  970. package/src/realtime/register.ts +0 -13
  971. package/src/realtime/route.ts +0 -153
  972. package/src/realtime/server.ts +0 -298
  973. package/src/request-id.ts +0 -32
  974. package/src/request-limits.ts +0 -2
  975. package/src/request-path.ts +0 -165
  976. package/src/request-to-curl.ts +0 -52
  977. package/src/response.ts +0 -411
  978. package/src/rust-type-emitter.ts +0 -548
  979. package/src/secure-headers.ts +0 -74
  980. package/src/serve-register.ts +0 -12
  981. package/src/serve-slot.ts +0 -58
  982. package/src/serve.ts +0 -220
  983. package/src/server-timing.ts +0 -71
  984. package/src/static.ts +0 -112
  985. package/src/telemetry/otel.ts +0 -156
  986. package/src/testing.ts +0 -167
  987. package/src/timeout.ts +0 -45
  988. package/src/tree.ts +0 -554
  989. package/src/trust.ts +0 -117
  990. package/src/ts-type-emitter.ts +0 -168
  991. package/src/type-emitter.ts +0 -760
  992. package/src/type-extractor.ts +0 -855
  993. package/src/types.ts +0 -756
  994. package/src/validation.ts +0 -413
  995. package/src/with-headers.ts +0 -45
  996. package/src/ws/bun.ts +0 -120
  997. package/src/ws/cloudflare.ts +0 -192
  998. package/src/ws/deno.ts +0 -188
  999. package/src/ws/node.ts +0 -240
  1000. package/src/ws/session.ts +0 -73
  1001. package/src/ws/shared.ts +0 -140
  1002. package/src/ws-origin.ts +0 -53
  1003. 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
+ }