@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,197 @@
1
+ /**
2
+ * metaSpec: the generate-time policy that turns route meta and route schemas into OpenAPI
3
+ * operation fields. Never consulted at request time; what it finds goes to the diagnostics,
4
+ * which the caller throws or reports.
5
+ */
6
+ import { resolvedStrictness, } from "./meta-spec-merge.js";
7
+ import { checkTargetKey } from "./meta-spec-validate.js";
8
+ export const DEFAULT_PROFILE = "default";
9
+ const isName = (value) => typeof value === "string" && value !== "";
10
+ const isGroup = (value) => Array.isArray(value) && value.every(isName);
11
+ /** `{ scheme: scopes[] }`: scheme names mapped to lists of scope names. */
12
+ function isRequirement(entry) {
13
+ if (entry === null || typeof entry !== "object" || Array.isArray(entry))
14
+ return false;
15
+ return Object.entries(entry).every(([scheme, scopes]) => scheme !== "" && Array.isArray(scopes) && scopes.every((scope) => typeof scope === "string"));
16
+ }
17
+ /**
18
+ * Security shorthand → OpenAPI requirements: a name, alternative names, groups of names, or
19
+ * requirement objects; `[]` is explicitly public. Anything else throws: a guess would document
20
+ * a protected route as public.
21
+ */
22
+ export function normalizeSecurity(raw) {
23
+ if (typeof raw === "string") {
24
+ if (raw === "")
25
+ throw new TypeError("security: a scheme name cannot be empty");
26
+ return [{ [raw]: [] }];
27
+ }
28
+ if (!Array.isArray(raw))
29
+ throw new TypeError(`security: expected a scheme name or an array, got ${raw === null ? "null" : typeof raw}`);
30
+ if (raw.every(isName))
31
+ return raw.map((scheme) => ({ [scheme]: [] }));
32
+ if (raw.every(isGroup))
33
+ return raw.map((group) => Object.fromEntries(group.map((scheme) => [scheme, []])));
34
+ if (raw.every(isRequirement))
35
+ return raw;
36
+ throw new TypeError("security: entries must all be scheme names, all groups of scheme names, or all { scheme: scopes[] } requirement objects — mixed or malformed entries are refused");
37
+ }
38
+ /** The scheme names a security list refers to, once each. */
39
+ export function securitySchemeNames(security) {
40
+ if (!Array.isArray(security))
41
+ return [];
42
+ return [
43
+ ...new Set(security.flatMap((requirement) => (requirement instanceof Object ? Object.keys(requirement) : []))),
44
+ ];
45
+ }
46
+ /** Where a schema entry without `from` looks, in order. */
47
+ const SOURCES = [
48
+ "output",
49
+ "input.json",
50
+ "input.search",
51
+ "input.form",
52
+ "input.headers",
53
+ "input.cookies",
54
+ ];
55
+ /** Meta keys that never reach a document, policy or none. */
56
+ const HIDDEN = ["internal", "extensions"];
57
+ const UNREAD = { from: SOURCES, match: null, profiles: null, schema: null, search: "root", version: null };
58
+ const truthy = (key) => (value) => value ? { [key]: value } : undefined;
59
+ function builtin(key, target, produce, ws) {
60
+ return { ...UNREAD, http: true, keys: [target], produce, rank: 2, read: key, sourceKey: key, ws };
61
+ }
62
+ const invalidate = (value) => Array.isArray(value) && value.length > 0 ? { "x-invalidate": [...new Set(value)] } : undefined;
63
+ /** The eight mappings every app has, in their emit order. */
64
+ function builtins() {
65
+ return [
66
+ builtin("summary", "summary", truthy("summary"), true),
67
+ builtin("description", "description", truthy("description"), true),
68
+ builtin("tags", "tags", (value) => (value ? { tags: typeof value === "string" ? [value] : value } : undefined), true),
69
+ builtin("deprecated", "deprecated", truthy("deprecated"), false),
70
+ builtin("operationId", "operationId", truthy("operationId"), true),
71
+ builtin("security", "security", (value) => (value ? { security: normalizeSecurity(value) } : undefined), false),
72
+ builtin("invalidate", "x-invalidate", invalidate, false),
73
+ builtin("mcp", "x-mcp", (value) => (value === true ? { "x-mcp": true } : undefined), false),
74
+ ];
75
+ }
76
+ function compileEntry(key, entry, rank, diagnostics) {
77
+ const where = `${rank === 1 ? "schema" : "meta"}."${key}"`;
78
+ if (entry === false)
79
+ return null;
80
+ if (typeof entry === "string") {
81
+ if (!checkTargetKey(entry, where, diagnostics))
82
+ return null;
83
+ const produce = (value) => (value === undefined ? undefined : { [entry]: value });
84
+ return { ...UNREAD, http: true, keys: [entry], produce, rank, read: key, sourceKey: key, ws: true };
85
+ }
86
+ const read = entry;
87
+ const base = {
88
+ from: read.from ?? SOURCES,
89
+ http: entry.on !== "ws",
90
+ match: read.match ?? null,
91
+ profiles: entry.profiles ?? null,
92
+ rank,
93
+ read: read.read ?? key,
94
+ schema: entry.schema ?? null,
95
+ search: read.search ?? "root",
96
+ sourceKey: key,
97
+ version: read.version ?? null,
98
+ ws: entry.on !== "http",
99
+ };
100
+ if ("expand" in entry) {
101
+ const expand = entry.expand;
102
+ const produce = (value, ctx) => {
103
+ const out = expand(value, ctx);
104
+ if (out === undefined)
105
+ return undefined;
106
+ const kept = Object.entries(out).filter(([target, produced]) => produced !== undefined && checkTargetKey(target, `${where} (expand)`, diagnostics));
107
+ return kept.length > 0 ? Object.fromEntries(kept) : undefined;
108
+ };
109
+ return { ...base, keys: [], produce };
110
+ }
111
+ if (!checkTargetKey(entry.key, where, diagnostics))
112
+ return null;
113
+ const { key: target } = entry;
114
+ const map = entry.map;
115
+ const produce = (value, ctx) => {
116
+ const mapped = map === undefined ? value : map(value, ctx);
117
+ return mapped === undefined ? undefined : { [target]: mapped };
118
+ };
119
+ return { ...base, keys: [target], produce };
120
+ }
121
+ /** Whether two entries ever write to one operation: their targets and profiles overlap. */
122
+ function overlap(a, b) {
123
+ if (!((a.http && b.http) || (a.ws && b.ws)))
124
+ return false;
125
+ return a.profiles === null || b.profiles === null || a.profiles.some((name) => b.profiles?.includes(name));
126
+ }
127
+ function detectDuplicates(entries, diagnostics) {
128
+ const byKey = new Map();
129
+ for (const entry of entries) {
130
+ for (const key of entry.keys) {
131
+ const prior = byKey.get(`${entry.rank} ${key}`) ?? [];
132
+ const clash = prior.find((other) => other.sourceKey !== entry.sourceKey && overlap(other, entry));
133
+ if (clash === undefined)
134
+ byKey.set(`${entry.rank} ${key}`, [...prior, entry]);
135
+ else {
136
+ const both = `"${clash.sourceKey}" and "${entry.sourceKey}"`;
137
+ diagnostics.add("DUPLICATE_TARGET", "error", `${both} both write operation key "${key}" at the same precedence`);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ const CONFLICT = {
143
+ hidden: "a mounted sub-app hides this key, so it is hidden here too — hiding wins over a parent entry, because a leak is worse than a missing tag",
144
+ parent: "a mounted sub-app declares a different entry; this app's entry wins for this document. The sub-app's own document still uses its own entry",
145
+ };
146
+ /** `config` ready to apply: built-ins (an app entry takes its slot), app entries, then schema entries. */
147
+ export function compileMetaSpec(config, diagnostics) {
148
+ const overrides = config?.meta ?? {};
149
+ const known = new Set(HIDDEN);
150
+ const compile = (key, entry, rank) => compileEntry(key, entry, rank, diagnostics);
151
+ const meta = [
152
+ ...builtins().map((entry) => Object.hasOwn(overrides, entry.sourceKey) ? compile(entry.sourceKey, overrides[entry.sourceKey], 2) : entry),
153
+ ...Object.entries(overrides)
154
+ .filter(([key]) => !builtins().some((entry) => entry.sourceKey === key))
155
+ .map(([key, entry]) => compile(key, entry, 2)),
156
+ ];
157
+ for (const key of [...builtins().map(({ sourceKey }) => sourceKey), ...Object.keys(overrides)])
158
+ known.add(key);
159
+ const schema = Object.entries(config?.schema ?? {}).map(([key, entry]) => compile(key, entry, 1));
160
+ const entries = [...meta, ...schema].filter((entry) => entry !== null);
161
+ detectDuplicates(entries, diagnostics);
162
+ for (const { key, resolution, section } of config?.conflicts ?? []) {
163
+ diagnostics.add("SUBAPP_ENTRY_CONFLICT", "warn", `${section}."${key}": ${CONFLICT[resolution]}`);
164
+ }
165
+ return {
166
+ entries,
167
+ known,
168
+ needsSchemas: schema.length > 0,
169
+ profiles: config?.profiles ?? {},
170
+ strict: resolvedStrictness(config),
171
+ };
172
+ }
173
+ /** The meta keys a published manifest may carry: built-ins and keys with an entry, never a hidden one. */
174
+ export function publishableMetaKeys(config) {
175
+ const allowed = new Set(builtins().map(({ sourceKey }) => sourceKey));
176
+ for (const [key, entry] of Object.entries(config?.meta ?? {})) {
177
+ if (entry === false)
178
+ allowed.delete(key);
179
+ else
180
+ allowed.add(key);
181
+ }
182
+ return (key) => allowed.has(key) && !HIDDEN.includes(key);
183
+ }
184
+ /** The filter of the document's profile: `exclude` drops keys, `include` allowlists `x-` keys. */
185
+ export function resolveProfile(spec, profile, diagnostics) {
186
+ const name = profile ?? DEFAULT_PROFILE;
187
+ const declared = Object.hasOwn(spec.profiles, name) ? spec.profiles[name] : undefined;
188
+ if (declared === undefined) {
189
+ if (name !== DEFAULT_PROFILE) {
190
+ diagnostics.add("UNKNOWN_PROFILE", "error", `document requests profile "${name}", which is not declared in metaSpec.profiles`);
191
+ }
192
+ return { filter: () => true, name };
193
+ }
194
+ const { exclude = [], include } = declared;
195
+ const filter = (key) => !exclude.includes(key) && (include === undefined || !key.startsWith("x-") || include.includes(key));
196
+ return { filter, name };
197
+ }
@@ -0,0 +1,15 @@
1
+ import { type MiddlewareFn } from "./middleware.ts";
2
+ export type CompressOptions = {
3
+ /** Compress answers to credentialed requests and answers that set a cookie. Default `false` (BREACH). */
4
+ credentialed?: boolean;
5
+ /** The smallest body compressed, in bytes (characters, for a text body). Default 1024. */
6
+ threshold?: number;
7
+ };
8
+ /**
9
+ * Whether an `Accept-Encoding` value takes `coding`: by name, else through `*`, at a q-value above 0
10
+ * (a malformed one is 0). Shared with staticFiles' precompressed siblings.
11
+ */
12
+ export declare function acceptsCoding(accept: string | null, coding: string): boolean;
13
+ export declare function compress(options?: CompressOptions): MiddlewareFn<{
14
+ readonly req: Request;
15
+ }>;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * `compress()`: gzip a buffered answer when the client's `Accept-Encoding` takes gzip (q-values
3
+ * honored, `*` included). The edge may already compress (Cloudflare does); this is for the origin
4
+ * that answers directly. No brotli here (b3): `CompressionStream` runs it at quality 11 with no
5
+ * knob, ~55× gzip's time for a dynamic answer; brotli is served as a precompressed static sibling.
6
+ *
7
+ * It encodes only the raw body the answer was built from, never reading or cloning its stream, so
8
+ * a produced stream (sse, stream, generate) or a foreign response is passed through as it is. It
9
+ * leaves alone: an empty, partial or 304 answer; one already encoded; `Cache-Control:
10
+ * no-transform`; a type that does not compress; a body under `threshold`.
11
+ *
12
+ * BREACH: compressed length leaks a secret in a body that also reflects attacker input. By default
13
+ * an answer to a credentialed request (a `Cookie` or `Authorization`) or one that sets a cookie is
14
+ * not compressed; `credentialed: true` opts in.
15
+ */
16
+ import { isHoneyResponse, rawBodyOf, replaceResponse, withRawBody } from "../response/builder.js";
17
+ import { addVary, withHeaders } from "../response/with-headers.js";
18
+ import { namedMiddleware } from "./middleware.js";
19
+ /* text, JSON, XML, JavaScript and SVG compress; images, archives and media are compressed already */
20
+ const COMPRESSIBLE = /^(?:text\/|application\/(?:json|javascript|xml|[\w.-]+\+(?:json|xml))$|image\/svg\+xml$)/;
21
+ const NO_TRANSFORM = /(?:^|,)\s*no-transform\s*(?:,|$)/i;
22
+ function essenceOf(contentType) {
23
+ const text = contentType ?? "";
24
+ const semi = text.indexOf(";");
25
+ return (semi === -1 ? text : text.slice(0, semi)).trim().toLowerCase();
26
+ }
27
+ /**
28
+ * Whether an `Accept-Encoding` value takes `coding`: by name, else through `*`, at a q-value above 0
29
+ * (a malformed one is 0). Shared with staticFiles' precompressed siblings.
30
+ */
31
+ export function acceptsCoding(accept, coding) {
32
+ if (accept === null)
33
+ return false;
34
+ let any = 0;
35
+ for (const item of accept.split(",")) {
36
+ const [name, ...params] = item.split(";");
37
+ const weight = params.map((param) => param.trim()).find((param) => param.startsWith("q="));
38
+ const value = weight === undefined ? 1 : Number(weight.slice(2));
39
+ const q = Number.isFinite(value) ? value : 0;
40
+ const listed = name.trim().toLowerCase();
41
+ if (listed === coding)
42
+ return q > 0;
43
+ if (listed === "*")
44
+ any = q;
45
+ }
46
+ return any > 0;
47
+ }
48
+ function compressible(response, threshold, raw) {
49
+ /* the size first: most answers are small JSON, and it costs no header lookup */
50
+ if ((typeof raw === "string" ? raw.length : raw.byteLength) < threshold)
51
+ return false;
52
+ const status = response.status;
53
+ if (status < 200 || status === 204 || status === 206 || status === 304)
54
+ return false;
55
+ const headers = response.headers;
56
+ if (headers.has("content-encoding") || headers.has("content-range"))
57
+ return false;
58
+ if (NO_TRANSFORM.test(headers.get("cache-control") ?? ""))
59
+ return false;
60
+ return COMPRESSIBLE.test(essenceOf(headers.get("content-type")));
61
+ }
62
+ async function gzip(raw) {
63
+ const stream = new Blob([raw]).stream().pipeThrough(new CompressionStream("gzip"));
64
+ return new Uint8Array(await new Response(stream).arrayBuffer());
65
+ }
66
+ export function compress(options = {}) {
67
+ const { credentialed = false, threshold = 1024 } = options;
68
+ if (!(Number.isFinite(threshold) && threshold >= 0)) {
69
+ throw new TypeError("compress: threshold must be a finite number of bytes, 0 or more");
70
+ }
71
+ return namedMiddleware("compress", async (ctx, next) => {
72
+ const response = await next();
73
+ const raw = rawBodyOf(response);
74
+ /* no raw body: a produced stream or a foreign response, never buffered here */
75
+ if (raw === null || !compressible(response, threshold, raw))
76
+ return response;
77
+ const req = ctx.req;
78
+ const secret = !credentialed &&
79
+ (req.headers.has("cookie") || req.headers.has("authorization") || response.headers.has("set-cookie"));
80
+ if (secret || !acceptsCoding(req.headers.get("accept-encoding"), "gzip")) {
81
+ return withHeaders(response, (headers) => addVary(headers, "accept-encoding"));
82
+ }
83
+ const bytes = await gzip(raw);
84
+ const encoded = replaceResponse(response, { body: bytes });
85
+ if (!isHoneyResponse(encoded))
86
+ withRawBody(encoded, bytes);
87
+ return withHeaders(encoded, (headers) => {
88
+ headers.set("content-encoding", "gzip");
89
+ headers.delete("content-length");
90
+ addVary(headers, "accept-encoding");
91
+ });
92
+ });
93
+ }
@@ -0,0 +1,18 @@
1
+ import { type MiddlewareFn } from "./middleware.ts";
2
+ export type CORSOptions = {
3
+ /** Requires an explicit `origin`: a string, a list or a predicate. With `"*"` or none, cors() throws. */
4
+ credentials?: boolean;
5
+ /** Response headers a browser script may read. */
6
+ exposeHeaders?: string[];
7
+ /** Request headers a preflight allows; unset, the requested ones are echoed. */
8
+ headers?: string[];
9
+ /** Seconds a browser may cache a preflight. Default 86400. */
10
+ maxAge?: number;
11
+ /** Methods a preflight allows. Default GET, HEAD, PUT, PATCH, POST, DELETE. */
12
+ methods?: string[];
13
+ /** Default `"*"`. */
14
+ origin?: "*" | ((origin: string) => boolean) | string | readonly string[];
15
+ };
16
+ export declare function cors(options?: CORSOptions): MiddlewareFn<{
17
+ req: Request;
18
+ }>;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * `cors(options)`: Cross-Origin Resource Sharing. A preflight from an allowed origin is answered
3
+ * here with 204; any other answer gets the allow-origin it earns. The opaque origin `null` is never
4
+ * reflected, and credentials need an explicit origin. Headers are written through `withHeaders`,
5
+ * so a buffered response keeps its plain header map.
6
+ */
7
+ import { addVary, withHeaders } from "../response/with-headers.js";
8
+ import { namedMiddleware } from "./middleware.js";
9
+ const DEFAULT_METHODS = ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE"];
10
+ const DEFAULT_MAX_AGE = 86_400;
11
+ /**
12
+ * The `Access-Control-Allow-Origin` value `origin` earns, or `null`. The opaque origin `null`
13
+ * (sandboxed frames, `file:`, some redirects) is never reflected: any page can produce it.
14
+ */
15
+ function allowedOrigin(origin, policy) {
16
+ if (policy === undefined || policy === "*")
17
+ return "*";
18
+ if (origin === "null")
19
+ return null;
20
+ if (typeof policy === "string")
21
+ return policy === origin ? origin : null;
22
+ if (typeof policy === "function")
23
+ return policy(origin) ? origin : null;
24
+ return policy.includes(origin) ? origin : null;
25
+ }
26
+ const joined = (list) => list !== undefined && list.length > 0 ? list.join(", ") : null;
27
+ export function cors(options = {}) {
28
+ const { credentials = false, origin } = options;
29
+ if (credentials && (origin === undefined || origin === "*")) {
30
+ throw new TypeError("cors: `credentials: true` needs an explicit `origin` (a string, a list or a predicate). A wildcard would let every site make credentialed requests and read the answer.");
31
+ }
32
+ /* the answer depends on the request's Origin unless the policy is a plain wildcard: say so to caches */
33
+ const varies = !(origin === undefined || origin === "*");
34
+ const methods = (options.methods ?? DEFAULT_METHODS).join(", ");
35
+ const allowHeaders = joined(options.headers);
36
+ const exposeHeaders = joined(options.exposeHeaders);
37
+ const maxAge = String(options.maxAge ?? DEFAULT_MAX_AGE);
38
+ const answerPreflight = (req, allowed) => {
39
+ const headers = new Headers({
40
+ "access-control-allow-methods": methods,
41
+ "access-control-allow-origin": allowed,
42
+ "access-control-max-age": maxAge,
43
+ });
44
+ if (allowHeaders !== null)
45
+ headers.set("access-control-allow-headers", allowHeaders);
46
+ else {
47
+ const requested = req.headers.get("access-control-request-headers");
48
+ if (requested)
49
+ headers.set("access-control-allow-headers", requested);
50
+ addVary(headers, "Access-Control-Request-Headers");
51
+ }
52
+ if (credentials)
53
+ headers.set("access-control-allow-credentials", "true");
54
+ if (varies)
55
+ addVary(headers, "Origin");
56
+ return new Response(null, { headers, status: 204 });
57
+ };
58
+ return namedMiddleware("cors", async (ctx, next) => {
59
+ const req = ctx.req;
60
+ const requestOrigin = req.headers.get("origin");
61
+ const allowed = requestOrigin === null ? null : allowedOrigin(requestOrigin, origin);
62
+ if (allowed !== null && req.method === "OPTIONS" && req.headers.has("access-control-request-method")) {
63
+ return answerPreflight(req, allowed);
64
+ }
65
+ const response = await next();
66
+ if (allowed === null && !varies)
67
+ return response;
68
+ return withHeaders(response, (headers) => {
69
+ if (varies)
70
+ addVary(headers, "Origin");
71
+ if (allowed === null)
72
+ return;
73
+ headers.set("access-control-allow-origin", allowed);
74
+ if (credentials)
75
+ headers.set("access-control-allow-credentials", "true");
76
+ if (exposeHeaders !== null)
77
+ headers.set("access-control-expose-headers", exposeHeaders);
78
+ });
79
+ });
80
+ }
@@ -0,0 +1,11 @@
1
+ import { type MiddlewareFn } from "./middleware.ts";
2
+ export type CSRFOptions = {
3
+ /**
4
+ * Cross-origin callers allowed to make unsafe requests, matched exactly against the full `Origin`
5
+ * (`https://app.example.com`). Same-origin requests never need listing.
6
+ */
7
+ origin?: ((origin: string) => boolean) | string | readonly string[];
8
+ };
9
+ export declare function csrf(options?: CSRFOptions): MiddlewareFn<{
10
+ req: Request;
11
+ }, {}, "forbidden">;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * `csrf(options)`: refuse cross-origin unsafe requests, whatever their content type, as Go's
3
+ * `http.CrossOriginProtection` does.
4
+ *
5
+ * 1. `GET`, `HEAD` and `OPTIONS` pass.
6
+ * 2. With `Sec-Fetch-Site` (every current browser sends it): `same-origin` and `none`
7
+ * (user-initiated) pass; `same-site` and `cross-site` pass only for an allow-listed `Origin`. A
8
+ * sibling subdomain is same-site, not trusted.
9
+ * 3. Without it: no `Origin` passes (curl, a server); an `Origin` on the request's own host passes;
10
+ * an allow-listed one passes; anything else, the opaque `null` included, does not.
11
+ *
12
+ * A refusal is a 403 `forbidden`, declared on the middleware.
13
+ */
14
+ import { HoneyError } from "../errors/error.js";
15
+ import { namedMiddleware } from "./middleware.js";
16
+ function isSafe(method) {
17
+ return method === "GET" || method === "HEAD" || method === "OPTIONS";
18
+ }
19
+ function allowListed(origin, allow) {
20
+ if (allow === undefined)
21
+ return false;
22
+ if (typeof allow === "string")
23
+ return allow === origin;
24
+ if (typeof allow === "function")
25
+ return allow(origin);
26
+ return allow.includes(origin);
27
+ }
28
+ /** `origin`'s host as a URL spells it, or `null` for the opaque origin or one that is no URL. */
29
+ function hostOf(origin) {
30
+ if (origin === "null")
31
+ return null;
32
+ try {
33
+ return new URL(origin).host;
34
+ }
35
+ catch {
36
+ /* not a URL: an Origin no host matches, which the caller refuses */
37
+ return null;
38
+ }
39
+ }
40
+ function forbidden() {
41
+ throw new HoneyError({ errorKey: "forbidden", status: "forbidden" });
42
+ }
43
+ export function csrf(options = {}) {
44
+ const allow = options.origin;
45
+ const mw = (ctx, next) => {
46
+ const req = ctx.req;
47
+ if (isSafe(req.method))
48
+ return next();
49
+ const origin = req.headers.get("origin");
50
+ const site = req.headers.get("sec-fetch-site");
51
+ if (site !== null) {
52
+ if (site === "same-origin" || site === "none")
53
+ return next();
54
+ return origin !== null && allowListed(origin, allow) ? next() : forbidden();
55
+ }
56
+ if (origin === null)
57
+ return next();
58
+ /* the request URL is the canonical one the adapter built: its host is the one the client addressed */
59
+ if (hostOf(origin) === new URL(req.url).host)
60
+ return next();
61
+ return allowListed(origin, allow) ? next() : forbidden();
62
+ };
63
+ mw.errors = ["forbidden"];
64
+ return namedMiddleware("csrf", mw);
65
+ }
@@ -0,0 +1,10 @@
1
+ import { type MiddlewareFn } from "./middleware.ts";
2
+ export type IpRestrictOptions = {
3
+ /** Addresses and CIDR ranges admitted; with it, every other peer is refused. */
4
+ allowList?: readonly string[];
5
+ /** Addresses and CIDR ranges refused, checked before `allowList`. */
6
+ denyList?: readonly string[];
7
+ };
8
+ export declare function ipRestrict(options: IpRestrictOptions): MiddlewareFn<{
9
+ readonly ip: string | null;
10
+ }, {}, "forbidden">;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * `ipRestrict({ allowList, denyList })`: admit or refuse a request by `ctx.ip`, the platform peer
3
+ * (H23): no forwarding header can stand in for it, so behind a self-hosted proxy restrict at the
4
+ * proxy. Rules are addresses or CIDR ranges, IPv4 or IPv6, compared as numbers, so every spelling
5
+ * of one address (IPv4-mapped, zero-compressed, any case) is one address.
6
+ *
7
+ * The deny list is checked first; with an allow list, everything else is refused. Fails closed: no
8
+ * reported peer is 403 under either list.
9
+ */
10
+ import { parseIpv4, parseIpv6 } from "../context/peer.js";
11
+ import { HoneyError } from "../errors/error.js";
12
+ import { namedMiddleware } from "./middleware.js";
13
+ const PREFIX_LENGTH = /^\d{1,3}$/;
14
+ function v4Range(n, prefix) {
15
+ /* a shift by 32 is a shift by 0 in JS: /0 is spelled out */
16
+ const mask = prefix === 0 ? 0 : (0xffffffff << (32 - prefix)) >>> 0;
17
+ return { base: (n & mask) >>> 0, mask, v: 4 };
18
+ }
19
+ /** An address or CIDR rule, strict: no brackets, zone or port, a prefix that fits the family. */
20
+ function parseRule(rule) {
21
+ const slash = rule.indexOf("/");
22
+ const text = slash === -1 ? rule : rule.slice(0, slash);
23
+ const bits = slash === -1 ? null : rule.slice(slash + 1);
24
+ if (bits !== null && !PREFIX_LENGTH.test(bits))
25
+ return null;
26
+ if (!text.includes(":")) {
27
+ const n = parseIpv4(text);
28
+ const prefix = bits === null ? 32 : Number(bits);
29
+ return n === null || prefix > 32 ? null : v4Range(n, prefix);
30
+ }
31
+ const n = parseIpv6(text);
32
+ const prefix = bits === null ? 128 : Number(bits);
33
+ if (n === null || prefix > 128)
34
+ return null;
35
+ /* `::ffff:a.b.c.d/96` or longer is the IPv4 range it maps, which is how ctx.ip spells those peers */
36
+ if (n >> 32n === 0xffffn && prefix >= 96)
37
+ return v4Range(Number(n & 0xffffffffn), prefix - 96);
38
+ const mask = ((1n << BigInt(prefix)) - 1n) << BigInt(128 - prefix);
39
+ return { base: n & mask, mask, v: 6 };
40
+ }
41
+ function rulesOf(list, name) {
42
+ return (list ?? []).map((rule) => {
43
+ const range = parseRule(rule);
44
+ if (range === null) {
45
+ throw new TypeError(`ipRestrict: ${name} entry ${JSON.stringify(rule)} is not an IP address or CIDR range`);
46
+ }
47
+ return range;
48
+ });
49
+ }
50
+ /** ctx.ip is canonical (dotted IPv4 or RFC 5952 IPv6), so it always parses. */
51
+ function addressOf(ip) {
52
+ return ip.includes(":") ? { n: parseIpv6(ip), v: 6 } : { n: parseIpv4(ip), v: 4 };
53
+ }
54
+ function inRange(addr, range) {
55
+ if (addr.v === 4)
56
+ return range.v === 4 && (addr.n & range.mask) >>> 0 === range.base;
57
+ return range.v === 6 && (addr.n & range.mask) === range.base;
58
+ }
59
+ function forbidden() {
60
+ throw new HoneyError({ errorKey: "forbidden", status: "forbidden" });
61
+ }
62
+ export function ipRestrict(options) {
63
+ if (options.allowList?.length === 0) {
64
+ throw new TypeError("ipRestrict: `allowList: []` would refuse every request; remove the middleware or list addresses");
65
+ }
66
+ const deny = rulesOf(options.denyList, "denyList");
67
+ const allow = rulesOf(options.allowList, "allowList");
68
+ if (deny.length === 0 && allow.length === 0)
69
+ throw new TypeError("ipRestrict: pass a non-empty `allowList` or `denyList`");
70
+ const mw = (ctx, next) => {
71
+ if (ctx.ip === null)
72
+ return forbidden();
73
+ const addr = addressOf(ctx.ip);
74
+ if (deny.some((range) => inRange(addr, range)))
75
+ return forbidden();
76
+ if (allow.length > 0 && !allow.some((range) => inRange(addr, range)))
77
+ return forbidden();
78
+ return next();
79
+ };
80
+ mw.errors = ["forbidden"];
81
+ return namedMiddleware("ipRestrict", mw);
82
+ }
@@ -0,0 +1,53 @@
1
+ export type MaybePromise<T> = Promise<T> | T;
2
+ /** A Response carrying, at the type level only, the context a middleware added. */
3
+ export type MiddlewareResult<TAdds = {}> = Response & {
4
+ readonly __adds?: TAdds;
5
+ };
6
+ /**
7
+ * Run the rest of the chain, optionally adding to the context. Answers synchronously when
8
+ * everything downstream did: `await` it, never `.then` it.
9
+ */
10
+ export type NextFn = {
11
+ <T>(additions: T): MaybePromise<MiddlewareResult<T>>;
12
+ (): MaybePromise<MiddlewareResult<{}>>;
13
+ };
14
+ export type MiddlewareFn<TCtx = {}, TAdds = {}, TErrors extends string = string> = ((ctx: TCtx, next: NextFn) => MaybePromise<MiddlewareResult<TAdds>>) & {
15
+ errors?: readonly TErrors[];
16
+ /** Meta this middleware contributes to every route that mounts it. */
17
+ meta?: Readonly<Record<string, unknown>>;
18
+ };
19
+ /** A stored middleware, generics erased. */
20
+ export type RuntimeMiddleware = (ctx: Record<string, unknown>, next: (additions?: Record<string, unknown>) => MaybePromise<Response>) => MaybePromise<Response>;
21
+ /**
22
+ * Stamp a stable name on a middleware closure. `Function.prototype.name` is inferred by whatever
23
+ * transpiled the module, and transpilers disagree about a closure returned from a factory; a
24
+ * shipped middleware names itself so generated artifacts are deterministic.
25
+ */
26
+ export declare function namedMiddleware<T extends object>(name: string, fn: T): T;
27
+ /** A middleware whose error keys are constrained to a factory; `.use()` accumulates them. */
28
+ export declare function defineMiddleware<TReqs, TAdds, TFactory extends Record<string, (...args: never[]) => unknown>, TKeys extends keyof TFactory & string>(opts: {
29
+ errors?: [TFactory, ...TKeys[]];
30
+ fn: MiddlewareFn<TReqs, TAdds>;
31
+ meta?: Record<string, unknown>;
32
+ }): MiddlewareFn<TReqs, TAdds, TKeys>;
33
+ /** The additions a middleware's return type carries; distributes over unions. */
34
+ type ExtractAdds<T> = Awaited<T> extends MiddlewareResult<infer A> ? A : never;
35
+ /**
36
+ * A middleware: annotate `ctx` for what it requires; what it adds is inferred from `next({...})`.
37
+ * createMiddleware((ctx: { env: { DB: D1Database } }, next) => next({ db }))
38
+ */
39
+ export declare function createMiddleware<TReqs = {}, TRet extends MaybePromise<Response> = MaybePromise<MiddlewareResult<{}>>>(fn: (ctx: TReqs, next: NextFn) => TRet, opts?: {
40
+ meta?: Record<string, unknown>;
41
+ }): MiddlewareFn<TReqs, ExtractAdds<TRet>>;
42
+ /** Merge the meta a chain contributes, in run order (later wins). Resolved once at finalize. */
43
+ export declare function collectMiddlewareMeta(groups: ReadonlyArray<ReadonlyArray<RuntimeMiddleware>>): Record<string, unknown> | null;
44
+ /** Turns a value thrown inside a chain into the Response that stands in for it. Must not throw. */
45
+ export type ChainErrorConverter = (thrown: unknown, ctx: object) => MaybePromise<Response>;
46
+ export type CompiledChain = (ctx: object) => MaybePromise<Response>;
47
+ /**
48
+ * Compile a middleware chain and a handler into one function, once. Whatever the handler or a
49
+ * middleware throws or rejects with becomes a Response at that layer, so the middleware around it
50
+ * always gets a Response from `next()` and its post-`next()` code runs on errors too.
51
+ */
52
+ export declare function compileChain(middlewares: readonly RuntimeMiddleware[], handler: (ctx: object) => MaybePromise<Response>, convert: ChainErrorConverter): CompiledChain;
53
+ export {};