@lovrozagar/honey 0.7.3 → 1.0.0-rc.3

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