@lovrozagar/honey 0.6.8 → 0.7.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 (674) hide show
  1. package/README.md +514 -192
  2. package/bin/honey.js +25 -0
  3. package/dist/accepts.d.ts +7 -1
  4. package/dist/accepts.d.ts.map +1 -1
  5. package/dist/accepts.js +126 -0
  6. package/dist/accepts.js.map +1 -0
  7. package/dist/body-kind.d.ts +26 -0
  8. package/dist/body-kind.d.ts.map +1 -0
  9. package/dist/body-kind.js +70 -0
  10. package/dist/body-kind.js.map +1 -0
  11. package/dist/body-limit.d.ts +5 -1
  12. package/dist/body-limit.d.ts.map +1 -1
  13. package/dist/body-limit.js +126 -0
  14. package/dist/body-limit.js.map +1 -0
  15. package/dist/build/index.d.ts +19 -3
  16. package/dist/build/index.d.ts.map +1 -1
  17. package/dist/build/index.js +173 -0
  18. package/dist/build/index.js.map +1 -0
  19. package/dist/cli-args.d.ts +33 -0
  20. package/dist/cli-args.d.ts.map +1 -0
  21. package/dist/cli-args.js +102 -0
  22. package/dist/cli-args.js.map +1 -0
  23. package/dist/cli-go/auth.go +26 -0
  24. package/dist/cli-go/config.go +192 -0
  25. package/dist/cli-go/errors.go +75 -0
  26. package/dist/cli-go/multipart.go +79 -0
  27. package/dist/cli-go/output.go +163 -0
  28. package/dist/cli-go/root.go +30 -0
  29. package/dist/cli-go/stream.go +88 -0
  30. package/dist/cli-go/version.go +5 -0
  31. package/dist/cli.d.ts +1 -1
  32. package/dist/cli.js +209 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/client/defaults.js +48 -0
  35. package/dist/client/defaults.js.map +1 -0
  36. package/dist/client/error.d.ts +35 -0
  37. package/dist/client/error.d.ts.map +1 -1
  38. package/dist/client/error.js +71 -0
  39. package/dist/client/error.js.map +1 -0
  40. package/dist/client/http.d.ts +67 -8
  41. package/dist/client/http.d.ts.map +1 -1
  42. package/dist/client/http.js +571 -0
  43. package/dist/client/http.js.map +1 -0
  44. package/dist/client/index.d.ts +3 -2
  45. package/dist/client/index.d.ts.map +1 -1
  46. package/dist/client/index.js +95 -0
  47. package/dist/client/index.js.map +1 -0
  48. package/dist/client/path.d.ts +26 -0
  49. package/dist/client/path.d.ts.map +1 -0
  50. package/dist/client/path.js +163 -0
  51. package/dist/client/path.js.map +1 -0
  52. package/dist/client/redirect-policy.d.ts +12 -0
  53. package/dist/client/redirect-policy.d.ts.map +1 -0
  54. package/dist/client/redirect-policy.js +20 -0
  55. package/dist/client/redirect-policy.js.map +1 -0
  56. package/dist/client/sdk.d.ts +36 -0
  57. package/dist/client/sdk.d.ts.map +1 -1
  58. package/dist/client/sdk.js +292 -0
  59. package/dist/client/sdk.js.map +1 -0
  60. package/dist/client/sse.d.ts +13 -0
  61. package/dist/client/sse.d.ts.map +1 -1
  62. package/dist/client/sse.js +129 -0
  63. package/dist/client/sse.js.map +1 -0
  64. package/dist/client/types.js +2 -0
  65. package/dist/client/types.js.map +1 -0
  66. package/dist/client/ws.d.ts +9 -2
  67. package/dist/client/ws.d.ts.map +1 -1
  68. package/dist/client/ws.js +112 -0
  69. package/dist/client/ws.js.map +1 -0
  70. package/dist/client-go/errors.go +236 -0
  71. package/dist/client-go/export.go +44 -0
  72. package/dist/client-go/invalidation.go +371 -0
  73. package/dist/client-go/nullable.go +62 -0
  74. package/dist/client-go/realtime.go +354 -0
  75. package/dist/client-go/result.go +20 -0
  76. package/dist/client-go/runtime.go +975 -0
  77. package/dist/client-go/sse.go +159 -0
  78. package/dist/client-go/transport.go +495 -0
  79. package/dist/client-go/ws.go +128 -0
  80. package/dist/client-info.d.ts +36 -0
  81. package/dist/client-info.d.ts.map +1 -0
  82. package/dist/client-info.js +53 -0
  83. package/dist/client-info.js.map +1 -0
  84. package/dist/client-mcp/README.md +10 -0
  85. package/dist/client-mcp/server.ts +221 -0
  86. package/dist/client-mcp/types.ts +19 -0
  87. package/dist/client-python/_errors.py +115 -0
  88. package/dist/client-python/_invalidation.py +494 -0
  89. package/dist/client-python/_realtime.py +179 -0
  90. package/dist/client-python/_runtime.py +860 -0
  91. package/dist/client-python/_sse.py +155 -0
  92. package/dist/client-python/_transport.py +366 -0
  93. package/dist/client-python/_ws.py +159 -0
  94. package/dist/client-python/py.typed +0 -0
  95. package/dist/client-rust/errors.rs +220 -0
  96. package/dist/client-rust/invalidation.rs +412 -0
  97. package/dist/client-rust/invalidation_sync.rs +93 -0
  98. package/dist/client-rust/nullable.rs +17 -0
  99. package/dist/client-rust/realtime.rs +702 -0
  100. package/dist/client-rust/result.rs +22 -0
  101. package/dist/client-rust/runtime.rs +980 -0
  102. package/dist/client-rust/runtime_sync.rs +484 -0
  103. package/dist/client-rust/sse.rs +188 -0
  104. package/dist/client-rust/ws.rs +167 -0
  105. package/dist/codegen-go-cli.d.ts.map +1 -1
  106. package/dist/codegen-go-cli.js +964 -0
  107. package/dist/codegen-go-cli.js.map +1 -0
  108. package/dist/codegen-go.d.ts +15 -3
  109. package/dist/codegen-go.d.ts.map +1 -1
  110. package/dist/codegen-go.js +872 -0
  111. package/dist/codegen-go.js.map +1 -0
  112. package/dist/codegen-hash.js +9 -0
  113. package/dist/codegen-hash.js.map +1 -0
  114. package/dist/codegen-ir.d.ts +69 -2
  115. package/dist/codegen-ir.d.ts.map +1 -1
  116. package/dist/codegen-ir.js +661 -0
  117. package/dist/codegen-ir.js.map +1 -0
  118. package/dist/codegen-lang.d.ts +65 -0
  119. package/dist/codegen-lang.d.ts.map +1 -0
  120. package/dist/codegen-lang.js +526 -0
  121. package/dist/codegen-lang.js.map +1 -0
  122. package/dist/codegen-load.d.ts +31 -0
  123. package/dist/codegen-load.d.ts.map +1 -0
  124. package/dist/codegen-load.js +138 -0
  125. package/dist/codegen-load.js.map +1 -0
  126. package/dist/codegen-loaders.js +55 -0
  127. package/dist/codegen-loaders.js.map +1 -0
  128. package/dist/codegen-mcp.d.ts.map +1 -1
  129. package/dist/codegen-mcp.js +368 -0
  130. package/dist/codegen-mcp.js.map +1 -0
  131. package/dist/codegen-python.d.ts +13 -1
  132. package/dist/codegen-python.d.ts.map +1 -1
  133. package/dist/codegen-python.js +828 -0
  134. package/dist/codegen-python.js.map +1 -0
  135. package/dist/codegen-route-tree-intern.d.ts +15 -5
  136. package/dist/codegen-route-tree-intern.d.ts.map +1 -1
  137. package/dist/codegen-route-tree-intern.js +221 -0
  138. package/dist/codegen-route-tree-intern.js.map +1 -0
  139. package/dist/codegen-rust.d.ts.map +1 -1
  140. package/dist/codegen-rust.js +1293 -0
  141. package/dist/codegen-rust.js.map +1 -0
  142. package/dist/codegen-sanitize.d.ts.map +1 -1
  143. package/dist/codegen-sanitize.js +56 -0
  144. package/dist/codegen-sanitize.js.map +1 -0
  145. package/dist/codegen-schema-naming.d.ts +5 -0
  146. package/dist/codegen-schema-naming.d.ts.map +1 -1
  147. package/dist/codegen-schema-naming.js +150 -0
  148. package/dist/codegen-schema-naming.js.map +1 -0
  149. package/dist/codegen-sdk-model.d.ts +71 -0
  150. package/dist/codegen-sdk-model.d.ts.map +1 -0
  151. package/dist/codegen-sdk-model.js +179 -0
  152. package/dist/codegen-sdk-model.js.map +1 -0
  153. package/dist/codegen.d.ts +41 -23
  154. package/dist/codegen.d.ts.map +1 -1
  155. package/dist/codegen.js +4610 -0
  156. package/dist/codegen.js.map +1 -0
  157. package/dist/context.d.ts +36 -6
  158. package/dist/context.d.ts.map +1 -1
  159. package/dist/context.js +242 -0
  160. package/dist/context.js.map +1 -0
  161. package/dist/cookie-sign.d.ts +16 -2
  162. package/dist/cookie-sign.d.ts.map +1 -1
  163. package/dist/cookie-sign.js +104 -0
  164. package/dist/cookie-sign.js.map +1 -0
  165. package/dist/cookie.d.ts +12 -0
  166. package/dist/cookie.d.ts.map +1 -1
  167. package/dist/cookie.js +138 -0
  168. package/dist/cookie.js.map +1 -0
  169. package/dist/cors.d.ts +1 -0
  170. package/dist/cors.d.ts.map +1 -1
  171. package/dist/cors.js +87 -0
  172. package/dist/cors.js.map +1 -0
  173. package/dist/crypto.d.ts +6 -1
  174. package/dist/crypto.d.ts.map +1 -1
  175. package/dist/crypto.js +38 -0
  176. package/dist/crypto.js.map +1 -0
  177. package/dist/csrf.d.ts +19 -0
  178. package/dist/csrf.d.ts.map +1 -1
  179. package/dist/csrf.js +79 -0
  180. package/dist/csrf.js.map +1 -0
  181. package/dist/curl-logger.d.ts +14 -3
  182. package/dist/curl-logger.d.ts.map +1 -1
  183. package/dist/curl-logger.js +199 -0
  184. package/dist/curl-logger.js.map +1 -0
  185. package/dist/detect-runtime.js +13 -0
  186. package/dist/detect-runtime.js.map +1 -0
  187. package/dist/dict.d.ts +11 -0
  188. package/dist/dict.d.ts.map +1 -0
  189. package/dist/dict.js +13 -0
  190. package/dist/dict.js.map +1 -0
  191. package/dist/error.d.ts.map +1 -1
  192. package/dist/error.js +44 -0
  193. package/dist/error.js.map +1 -0
  194. package/dist/errors.js +39 -0
  195. package/dist/errors.js.map +1 -0
  196. package/dist/etag.d.ts +2 -0
  197. package/dist/etag.d.ts.map +1 -1
  198. package/dist/etag.js +82 -0
  199. package/dist/etag.js.map +1 -0
  200. package/dist/feature-detect.d.ts +25 -0
  201. package/dist/feature-detect.d.ts.map +1 -0
  202. package/dist/feature-detect.js +144 -0
  203. package/dist/feature-detect.js.map +1 -0
  204. package/dist/feature-load.js +36 -0
  205. package/dist/feature-load.js.map +1 -0
  206. package/dist/feature-slots.d.ts +44 -0
  207. package/dist/feature-slots.d.ts.map +1 -0
  208. package/dist/feature-slots.js +48 -0
  209. package/dist/feature-slots.js.map +1 -0
  210. package/dist/fetch-request.d.ts +10 -0
  211. package/dist/fetch-request.d.ts.map +1 -0
  212. package/dist/fetch-request.js +13 -0
  213. package/dist/fetch-request.js.map +1 -0
  214. package/dist/gen-process.d.ts +15 -0
  215. package/dist/gen-process.d.ts.map +1 -0
  216. package/dist/gen-process.js +43 -0
  217. package/dist/gen-process.js.map +1 -0
  218. package/dist/gen-write.d.ts +19 -0
  219. package/dist/gen-write.d.ts.map +1 -0
  220. package/dist/gen-write.js +120 -0
  221. package/dist/gen-write.js.map +1 -0
  222. package/dist/glob.d.ts +21 -0
  223. package/dist/glob.d.ts.map +1 -0
  224. package/dist/glob.js +115 -0
  225. package/dist/glob.js.map +1 -0
  226. package/dist/go-type-emitter.d.ts +18 -4
  227. package/dist/go-type-emitter.d.ts.map +1 -1
  228. package/dist/go-type-emitter.js +594 -0
  229. package/dist/go-type-emitter.js.map +1 -0
  230. package/dist/honey-response.d.ts.map +1 -1
  231. package/dist/honey-response.js +338 -0
  232. package/dist/honey-response.js.map +1 -0
  233. package/dist/i18n-slot.d.ts +8 -0
  234. package/dist/i18n-slot.d.ts.map +1 -1
  235. package/dist/i18n-slot.js +14 -0
  236. package/dist/i18n-slot.js.map +1 -0
  237. package/dist/i18n.d.ts +3 -0
  238. package/dist/i18n.d.ts.map +1 -1
  239. package/dist/i18n.js +250 -0
  240. package/dist/i18n.js.map +1 -0
  241. package/dist/index.d.ts +408 -148
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +2324 -0
  244. package/dist/index.js.map +1 -0
  245. package/dist/init.d.ts +3 -5
  246. package/dist/init.d.ts.map +1 -1
  247. package/dist/init.js +140 -0
  248. package/dist/init.js.map +1 -0
  249. package/dist/input.js +4 -0
  250. package/dist/input.js.map +1 -0
  251. package/dist/invalidate-check.d.ts +11 -0
  252. package/dist/invalidate-check.d.ts.map +1 -1
  253. package/dist/invalidate-check.js +163 -0
  254. package/dist/invalidate-check.js.map +1 -0
  255. package/dist/invoke-user.d.ts +35 -0
  256. package/dist/invoke-user.d.ts.map +1 -0
  257. package/dist/invoke-user.js +73 -0
  258. package/dist/invoke-user.js.map +1 -0
  259. package/dist/ip-restrict.d.ts +13 -1
  260. package/dist/ip-restrict.d.ts.map +1 -1
  261. package/dist/ip-restrict.js +60 -0
  262. package/dist/ip-restrict.js.map +1 -0
  263. package/dist/ip.d.ts +39 -0
  264. package/dist/ip.d.ts.map +1 -0
  265. package/dist/ip.js +209 -0
  266. package/dist/ip.js.map +1 -0
  267. package/dist/logger.d.ts.map +1 -1
  268. package/dist/logger.js +113 -0
  269. package/dist/logger.js.map +1 -0
  270. package/dist/media-type.d.ts +30 -0
  271. package/dist/media-type.d.ts.map +1 -0
  272. package/dist/media-type.js +97 -0
  273. package/dist/media-type.js.map +1 -0
  274. package/dist/meta-spec-merge.d.ts +32 -0
  275. package/dist/meta-spec-merge.d.ts.map +1 -0
  276. package/dist/meta-spec-merge.js +68 -0
  277. package/dist/meta-spec-merge.js.map +1 -0
  278. package/dist/meta-spec.d.ts +16 -3
  279. package/dist/meta-spec.d.ts.map +1 -1
  280. package/dist/meta-spec.js +535 -0
  281. package/dist/meta-spec.js.map +1 -0
  282. package/dist/middleware.d.ts +23 -6
  283. package/dist/middleware.d.ts.map +1 -1
  284. package/dist/middleware.js +253 -0
  285. package/dist/middleware.js.map +1 -0
  286. package/dist/node-request.d.ts +57 -12
  287. package/dist/node-request.d.ts.map +1 -1
  288. package/dist/node-request.js +407 -0
  289. package/dist/node-request.js.map +1 -0
  290. package/dist/node.d.ts +20 -3
  291. package/dist/node.d.ts.map +1 -1
  292. package/dist/node.js +396 -0
  293. package/dist/node.js.map +1 -0
  294. package/dist/openapi/collect.d.ts +6 -3
  295. package/dist/openapi/collect.d.ts.map +1 -1
  296. package/dist/openapi/collect.js +30 -0
  297. package/dist/openapi/collect.js.map +1 -0
  298. package/dist/openapi/docs-page.d.ts +42 -0
  299. package/dist/openapi/docs-page.d.ts.map +1 -0
  300. package/dist/openapi/docs-page.js +80 -0
  301. package/dist/openapi/docs-page.js.map +1 -0
  302. package/dist/openapi/document.d.ts +4 -0
  303. package/dist/openapi/document.d.ts.map +1 -1
  304. package/dist/openapi/document.js +785 -0
  305. package/dist/openapi/document.js.map +1 -0
  306. package/dist/openapi/json-schema-slot.d.ts +7 -0
  307. package/dist/openapi/json-schema-slot.d.ts.map +1 -1
  308. package/dist/openapi/json-schema-slot.js +38 -0
  309. package/dist/openapi/json-schema-slot.js.map +1 -0
  310. package/dist/openapi/register.d.ts.map +1 -1
  311. package/dist/openapi/register.js +20 -0
  312. package/dist/openapi/register.js.map +1 -0
  313. package/dist/openapi/scalar.d.ts +3 -1
  314. package/dist/openapi/scalar.d.ts.map +1 -1
  315. package/dist/openapi/scalar.js +21 -0
  316. package/dist/openapi/scalar.js.map +1 -0
  317. package/dist/openapi/serve.d.ts +9 -0
  318. package/dist/openapi/serve.d.ts.map +1 -0
  319. package/dist/openapi/serve.js +36 -0
  320. package/dist/openapi/serve.js.map +1 -0
  321. package/dist/openapi/spec-factory.d.ts +30 -1
  322. package/dist/openapi/spec-factory.d.ts.map +1 -1
  323. package/dist/openapi/spec-factory.js +52 -0
  324. package/dist/openapi/spec-factory.js.map +1 -0
  325. package/dist/openapi/spec.d.ts +14 -5
  326. package/dist/openapi/spec.d.ts.map +1 -1
  327. package/dist/openapi/spec.js +50 -0
  328. package/dist/openapi/spec.js.map +1 -0
  329. package/dist/openapi/swagger.d.ts +3 -1
  330. package/dist/openapi/swagger.d.ts.map +1 -1
  331. package/dist/openapi/swagger.js +22 -0
  332. package/dist/openapi/swagger.js.map +1 -0
  333. package/dist/pattern.d.ts +71 -0
  334. package/dist/pattern.d.ts.map +1 -0
  335. package/dist/pattern.js +239 -0
  336. package/dist/pattern.js.map +1 -0
  337. package/dist/peer.d.ts +17 -0
  338. package/dist/peer.d.ts.map +1 -0
  339. package/dist/peer.js +50 -0
  340. package/dist/peer.js.map +1 -0
  341. package/dist/plugin.d.ts +67 -16
  342. package/dist/plugin.d.ts.map +1 -1
  343. package/dist/plugin.js +649 -0
  344. package/dist/plugin.js.map +1 -0
  345. package/dist/powered-by.d.ts.map +1 -1
  346. package/dist/powered-by.js +11 -0
  347. package/dist/powered-by.js.map +1 -0
  348. package/dist/pretty-json.d.ts.map +1 -1
  349. package/dist/pretty-json.js +47 -0
  350. package/dist/pretty-json.js.map +1 -0
  351. package/dist/producer-stream.d.ts +47 -0
  352. package/dist/producer-stream.d.ts.map +1 -0
  353. package/dist/producer-stream.js +267 -0
  354. package/dist/producer-stream.js.map +1 -0
  355. package/dist/proxy.d.ts +47 -8
  356. package/dist/proxy.d.ts.map +1 -1
  357. package/dist/proxy.js +274 -0
  358. package/dist/proxy.js.map +1 -0
  359. package/dist/python-type-emitter.d.ts +14 -1
  360. package/dist/python-type-emitter.d.ts.map +1 -1
  361. package/dist/python-type-emitter.js +157 -0
  362. package/dist/python-type-emitter.js.map +1 -0
  363. package/dist/realtime/bus.d.ts +17 -1
  364. package/dist/realtime/bus.d.ts.map +1 -1
  365. package/dist/realtime/bus.js +112 -0
  366. package/dist/realtime/bus.js.map +1 -0
  367. package/dist/realtime/register.d.ts +3 -0
  368. package/dist/realtime/register.d.ts.map +1 -0
  369. package/dist/realtime/register.js +10 -0
  370. package/dist/realtime/register.js.map +1 -0
  371. package/dist/realtime/route.d.ts +65 -26
  372. package/dist/realtime/route.d.ts.map +1 -1
  373. package/dist/realtime/route.js +72 -0
  374. package/dist/realtime/route.js.map +1 -0
  375. package/dist/realtime/server.d.ts +43 -0
  376. package/dist/realtime/server.d.ts.map +1 -0
  377. package/dist/realtime/server.js +255 -0
  378. package/dist/realtime/server.js.map +1 -0
  379. package/dist/request-id.d.ts +7 -0
  380. package/dist/request-id.d.ts.map +1 -1
  381. package/dist/request-id.js +16 -0
  382. package/dist/request-id.js.map +1 -0
  383. package/dist/request-limits.d.ts +3 -0
  384. package/dist/request-limits.d.ts.map +1 -0
  385. package/dist/request-limits.js +3 -0
  386. package/dist/request-limits.js.map +1 -0
  387. package/dist/request-path.d.ts +33 -0
  388. package/dist/request-path.d.ts.map +1 -0
  389. package/dist/request-path.js +178 -0
  390. package/dist/request-path.js.map +1 -0
  391. package/dist/request-to-curl.d.ts +7 -1
  392. package/dist/request-to-curl.d.ts.map +1 -1
  393. package/dist/request-to-curl.js +48 -0
  394. package/dist/request-to-curl.js.map +1 -0
  395. package/dist/response.d.ts +25 -2
  396. package/dist/response.d.ts.map +1 -1
  397. package/dist/response.js +313 -0
  398. package/dist/response.js.map +1 -0
  399. package/dist/rust-type-emitter.d.ts +14 -2
  400. package/dist/rust-type-emitter.d.ts.map +1 -1
  401. package/dist/rust-type-emitter.js +463 -0
  402. package/dist/rust-type-emitter.js.map +1 -0
  403. package/dist/secure-headers.d.ts.map +1 -1
  404. package/dist/secure-headers.js +53 -0
  405. package/dist/secure-headers.js.map +1 -0
  406. package/dist/serve-register.d.ts +4 -0
  407. package/dist/serve-register.d.ts.map +1 -1
  408. package/dist/serve-register.js +9 -0
  409. package/dist/serve-register.js.map +1 -0
  410. package/dist/serve-slot.d.ts +3 -0
  411. package/dist/serve-slot.d.ts.map +1 -1
  412. package/dist/serve-slot.js +52 -0
  413. package/dist/serve-slot.js.map +1 -0
  414. package/dist/serve.d.ts +18 -1
  415. package/dist/serve.d.ts.map +1 -1
  416. package/dist/serve.js +157 -0
  417. package/dist/serve.js.map +1 -0
  418. package/dist/server-timing.d.ts.map +1 -1
  419. package/dist/server-timing.js +51 -0
  420. package/dist/server-timing.js.map +1 -0
  421. package/dist/static.d.ts +9 -0
  422. package/dist/static.d.ts.map +1 -1
  423. package/dist/static.js +102 -0
  424. package/dist/static.js.map +1 -0
  425. package/dist/telemetry/otel.d.ts +2 -0
  426. package/dist/telemetry/otel.d.ts.map +1 -1
  427. package/dist/telemetry/otel.js +135 -0
  428. package/dist/telemetry/otel.js.map +1 -0
  429. package/dist/testing.d.ts +12 -0
  430. package/dist/testing.d.ts.map +1 -1
  431. package/dist/testing.js +124 -0
  432. package/dist/testing.js.map +1 -0
  433. package/dist/timeout.d.ts +6 -0
  434. package/dist/timeout.d.ts.map +1 -1
  435. package/dist/timeout.js +36 -0
  436. package/dist/timeout.js.map +1 -0
  437. package/dist/tree.d.ts +133 -36
  438. package/dist/tree.d.ts.map +1 -1
  439. package/dist/tree.js +437 -0
  440. package/dist/tree.js.map +1 -0
  441. package/dist/trust.d.ts +21 -0
  442. package/dist/trust.d.ts.map +1 -0
  443. package/dist/trust.js +100 -0
  444. package/dist/trust.js.map +1 -0
  445. package/dist/ts-type-emitter.d.ts.map +1 -1
  446. package/dist/ts-type-emitter.js +150 -0
  447. package/dist/ts-type-emitter.js.map +1 -0
  448. package/dist/type-emitter.d.ts +16 -2
  449. package/dist/type-emitter.d.ts.map +1 -1
  450. package/dist/type-emitter.js +729 -0
  451. package/dist/type-emitter.js.map +1 -0
  452. package/dist/type-extractor.d.ts +8 -4
  453. package/dist/type-extractor.d.ts.map +1 -1
  454. package/dist/type-extractor.js +819 -0
  455. package/dist/type-extractor.js.map +1 -0
  456. package/dist/types.d.ts +7 -0
  457. package/dist/types.d.ts.map +1 -1
  458. package/dist/types.js +96 -0
  459. package/dist/types.js.map +1 -0
  460. package/dist/validation.d.ts +14 -2
  461. package/dist/validation.d.ts.map +1 -1
  462. package/dist/validation.js +335 -0
  463. package/dist/validation.js.map +1 -0
  464. package/dist/with-headers.d.ts +15 -0
  465. package/dist/with-headers.d.ts.map +1 -0
  466. package/dist/with-headers.js +45 -0
  467. package/dist/with-headers.js.map +1 -0
  468. package/dist/ws/bun.d.ts +11 -5
  469. package/dist/ws/bun.d.ts.map +1 -1
  470. package/dist/ws/bun.js +82 -0
  471. package/dist/ws/bun.js.map +1 -0
  472. package/dist/ws/cloudflare.d.ts +25 -3
  473. package/dist/ws/cloudflare.d.ts.map +1 -1
  474. package/dist/ws/cloudflare.js +117 -0
  475. package/dist/ws/cloudflare.js.map +1 -0
  476. package/dist/ws/deno.d.ts +4 -4
  477. package/dist/ws/deno.d.ts.map +1 -1
  478. package/dist/ws/deno.js +133 -0
  479. package/dist/ws/deno.js.map +1 -0
  480. package/dist/ws/node.d.ts +20 -3
  481. package/dist/ws/node.d.ts.map +1 -1
  482. package/dist/ws/node.js +173 -0
  483. package/dist/ws/node.js.map +1 -0
  484. package/dist/ws/session.d.ts +11 -0
  485. package/dist/ws/session.d.ts.map +1 -0
  486. package/dist/ws/session.js +60 -0
  487. package/dist/ws/session.js.map +1 -0
  488. package/dist/ws/shared.d.ts +65 -0
  489. package/dist/ws/shared.d.ts.map +1 -0
  490. package/dist/ws/shared.js +103 -0
  491. package/dist/ws/shared.js.map +1 -0
  492. package/dist/ws-origin.d.ts +20 -0
  493. package/dist/ws-origin.d.ts.map +1 -0
  494. package/dist/ws-origin.js +41 -0
  495. package/dist/ws-origin.js.map +1 -0
  496. package/dist/yaml.d.ts +15 -1
  497. package/dist/yaml.d.ts.map +1 -1
  498. package/dist/yaml.js +101 -0
  499. package/dist/yaml.js.map +1 -0
  500. package/docs/invalidate-spec.md +13 -1
  501. package/docs/meta-spec.md +36 -12
  502. package/docs/packaging.md +43 -24
  503. package/docs/regression-matrix/README.md +32 -0
  504. package/docs/regression-matrix/review.md +44 -0
  505. package/docs/regression-matrix/ws1-3.md +97 -0
  506. package/docs/regression-matrix/ws4-8.md +107 -0
  507. package/docs/regression-matrix/ws9-12.md +266 -0
  508. package/docs/sdk.md +102 -52
  509. package/package.json +183 -52
  510. package/src/accepts.ts +91 -33
  511. package/src/body-kind.ts +67 -0
  512. package/src/body-limit.ts +102 -87
  513. package/src/build/index.ts +104 -54
  514. package/src/cli-args.ts +123 -0
  515. package/src/cli-go/auth.go +12 -1
  516. package/src/cli-go/config.go +29 -2
  517. package/src/cli-go/errors.go +28 -10
  518. package/src/cli-go/multipart.go +51 -27
  519. package/src/cli-go/output.go +58 -4
  520. package/src/cli-go/root.go +1 -1
  521. package/src/cli-go/version.go +2 -2
  522. package/src/cli.ts +154 -148
  523. package/src/client/error.ts +56 -1
  524. package/src/client/http.ts +479 -256
  525. package/src/client/index.ts +55 -17
  526. package/src/client/path.ts +169 -0
  527. package/src/client/redirect-policy.ts +19 -0
  528. package/src/client/sdk.ts +180 -101
  529. package/src/client/sse.ts +92 -66
  530. package/src/client/ws.ts +67 -31
  531. package/src/client-go/errors.go +41 -12
  532. package/src/client-go/export.go +44 -0
  533. package/src/client-go/invalidation.go +52 -54
  534. package/src/client-go/nullable.go +62 -0
  535. package/src/client-go/realtime.go +147 -110
  536. package/src/client-go/runtime.go +646 -88
  537. package/src/client-go/sse.go +104 -94
  538. package/src/client-go/transport.go +67 -27
  539. package/src/client-go/ws.go +49 -25
  540. package/src/client-info.ts +79 -0
  541. package/src/client-mcp/server.ts +133 -3
  542. package/src/client-python/_invalidation.py +207 -291
  543. package/src/client-python/_realtime.py +63 -40
  544. package/src/client-python/_runtime.py +501 -119
  545. package/src/client-python/_sse.py +130 -74
  546. package/src/client-python/_transport.py +37 -9
  547. package/src/client-python/_ws.py +50 -22
  548. package/src/client-rust/errors.rs +21 -1
  549. package/src/client-rust/invalidation.rs +202 -231
  550. package/src/client-rust/invalidation_sync.rs +16 -229
  551. package/src/client-rust/nullable.rs +17 -0
  552. package/src/client-rust/realtime.rs +217 -217
  553. package/src/client-rust/runtime.rs +602 -177
  554. package/src/client-rust/runtime_sync.rs +169 -145
  555. package/src/client-rust/sse.rs +142 -121
  556. package/src/client-rust/ws.rs +61 -37
  557. package/src/codegen-go-cli.ts +607 -728
  558. package/src/codegen-go.ts +710 -770
  559. package/src/codegen-ir.ts +381 -75
  560. package/src/codegen-lang.ts +517 -0
  561. package/src/codegen-load.ts +150 -0
  562. package/src/codegen-mcp.ts +207 -108
  563. package/src/codegen-python.ts +684 -816
  564. package/src/codegen-route-tree-intern.ts +51 -25
  565. package/src/codegen-rust.ts +946 -1240
  566. package/src/codegen-sanitize.ts +0 -4
  567. package/src/codegen-schema-naming.ts +19 -6
  568. package/src/codegen-sdk-model.ts +228 -0
  569. package/src/codegen.ts +1488 -1140
  570. package/src/context.ts +130 -11
  571. package/src/cookie-sign.ts +85 -16
  572. package/src/cookie.ts +66 -11
  573. package/src/cors.ts +55 -54
  574. package/src/crypto.ts +27 -5
  575. package/src/csrf.ts +57 -25
  576. package/src/curl-logger.ts +155 -114
  577. package/src/dict.ts +12 -0
  578. package/src/error.ts +4 -2
  579. package/src/etag.ts +58 -34
  580. package/src/feature-detect.ts +147 -0
  581. package/src/feature-slots.ts +70 -0
  582. package/src/fetch-request.ts +13 -0
  583. package/src/gen-process.ts +42 -0
  584. package/src/gen-write.ts +127 -0
  585. package/src/glob.ts +109 -0
  586. package/src/go-type-emitter.ts +406 -155
  587. package/src/honey-response.ts +36 -9
  588. package/src/i18n-slot.ts +10 -0
  589. package/src/i18n.ts +98 -23
  590. package/src/index.ts +1887 -1756
  591. package/src/init.ts +40 -28
  592. package/src/invalidate-check.ts +42 -4
  593. package/src/invoke-user.ts +95 -0
  594. package/src/ip-restrict.ts +47 -161
  595. package/src/ip.ts +194 -0
  596. package/src/logger.ts +65 -36
  597. package/src/media-type.ts +104 -0
  598. package/src/meta-spec-merge.ts +80 -0
  599. package/src/meta-spec.ts +0 -0
  600. package/src/middleware.ts +112 -12
  601. package/src/node-request.ts +242 -52
  602. package/src/node.ts +318 -75
  603. package/src/openapi/collect.ts +19 -44
  604. package/src/openapi/docs-page.ts +89 -0
  605. package/src/openapi/document.ts +503 -224
  606. package/src/openapi/json-schema-slot.ts +40 -0
  607. package/src/openapi/register.ts +7 -2
  608. package/src/openapi/scalar.ts +11 -10
  609. package/src/openapi/serve.ts +39 -0
  610. package/src/openapi/spec-factory.ts +50 -1
  611. package/src/openapi/spec.ts +53 -30
  612. package/src/openapi/swagger.ts +12 -11
  613. package/src/pattern.ts +245 -0
  614. package/src/peer.ts +53 -0
  615. package/src/plugin.ts +270 -185
  616. package/src/powered-by.ts +2 -2
  617. package/src/pretty-json.ts +25 -9
  618. package/src/producer-stream.ts +296 -0
  619. package/src/proxy.ts +253 -55
  620. package/src/python-type-emitter.ts +68 -56
  621. package/src/realtime/bus.ts +56 -9
  622. package/src/realtime/register.ts +13 -0
  623. package/src/realtime/route.ts +129 -80
  624. package/src/realtime/server.ts +298 -0
  625. package/src/request-id.ts +13 -3
  626. package/src/request-limits.ts +2 -0
  627. package/src/request-path.ts +165 -0
  628. package/src/request-to-curl.ts +28 -7
  629. package/src/response.ts +143 -103
  630. package/src/rust-type-emitter.ts +265 -170
  631. package/src/secure-headers.ts +8 -4
  632. package/src/serve-register.ts +4 -0
  633. package/src/serve-slot.ts +38 -0
  634. package/src/serve.ts +113 -25
  635. package/src/server-timing.ts +11 -7
  636. package/src/static.ts +85 -32
  637. package/src/telemetry/otel.ts +29 -7
  638. package/src/testing.ts +76 -14
  639. package/src/timeout.ts +15 -7
  640. package/src/tree.ts +405 -333
  641. package/src/trust.ts +117 -0
  642. package/src/ts-type-emitter.ts +18 -12
  643. package/src/type-emitter.ts +227 -89
  644. package/src/type-extractor.ts +603 -423
  645. package/src/types.ts +8 -0
  646. package/src/validation.ts +221 -96
  647. package/src/with-headers.ts +45 -0
  648. package/src/ws/bun.ts +53 -15
  649. package/src/ws/cloudflare.ts +81 -19
  650. package/src/ws/deno.ts +124 -36
  651. package/src/ws/node.ts +173 -79
  652. package/src/ws/session.ts +73 -0
  653. package/src/ws/shared.ts +140 -0
  654. package/src/ws-origin.ts +53 -0
  655. package/src/yaml.ts +45 -22
  656. package/dist/client-mcp/server.d.ts +0 -10
  657. package/dist/client-mcp/server.d.ts.map +0 -1
  658. package/dist/client-mcp/types.d.ts +0 -16
  659. package/dist/client-mcp/types.d.ts.map +0 -1
  660. package/dist/cloudflare/realtime.d.ts +0 -30
  661. package/dist/cloudflare/realtime.d.ts.map +0 -1
  662. package/dist/realtime/buffer.d.ts +0 -18
  663. package/dist/realtime/buffer.d.ts.map +0 -1
  664. package/dist/realtime/longpoll.d.ts +0 -23
  665. package/dist/realtime/longpoll.d.ts.map +0 -1
  666. package/dist/realtime/protocol.d.ts +0 -50
  667. package/dist/realtime/protocol.d.ts.map +0 -1
  668. package/dist/realtime/runtime.d.ts +0 -74
  669. package/dist/realtime/runtime.d.ts.map +0 -1
  670. package/src/cloudflare/realtime.ts +0 -234
  671. package/src/realtime/buffer.ts +0 -101
  672. package/src/realtime/longpoll.ts +0 -148
  673. package/src/realtime/protocol.ts +0 -128
  674. package/src/realtime/runtime.ts +0 -427
@@ -0,0 +1,335 @@
1
+ import { HoneyError } from "./error.js";
2
+ import { parseCookieHeader } from "./cookie.js";
3
+ import { dict } from "./dict.js";
4
+ import { bodyParserFor } from "./media-type.js";
5
+ import { EK, SK } from "./types.js";
6
+ const DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]);
7
+ const CODE_MAP = {
8
+ invalid_format: "field_invalid_format",
9
+ invalid_value: "field_invalid_enum",
10
+ not_multiple: "field_not_multiple_of",
11
+ required: "field_required",
12
+ too_big: "field_too_big",
13
+ too_long: "field_too_long",
14
+ too_short: "field_too_short",
15
+ too_small: "field_too_small",
16
+ unrecognized: "field_unrecognized_keys",
17
+ };
18
+ export function mapNormalizedCode(code) {
19
+ return CODE_MAP[code] ?? "field_invalid";
20
+ }
21
+ /** `bodyParserFor` with both form encodings folded into `"form"`. */
22
+ export function selectParser(contentType) {
23
+ const parser = bodyParserFor(contentType);
24
+ return parser === null ? null : parser === "json" ? "json" : "form";
25
+ }
26
+ /**
27
+ * Throws when a route for `method` declares a `json` or `form` schema it can never receive:
28
+ * GET and HEAD requests cannot carry a body (Fetch forbids one). Every other method, DELETE and
29
+ * OPTIONS included, has its declared body validated on every request.
30
+ */
31
+ export function assertBodySchemaAllowed(iv, method, path) {
32
+ if (iv === null || (iv.json === undefined && iv.form === undefined))
33
+ return;
34
+ if (method !== "GET" && method !== "HEAD")
35
+ return;
36
+ const kind = iv.json !== undefined ? "json" : "form";
37
+ throw new Error(`${method} ${path} declares a ${kind} body schema, but ${method} requests have no body. ` +
38
+ `Validate query data with \`search\`, or register the route for a method that carries a body.`);
39
+ }
40
+ /* Content-Type vs declared json/form — no body read. Applies to every method: a declared body
41
+ * is required, so a GET reaching an `all()` route with a body schema is a 415 too. */
42
+ export function assertRequestContentType(iv, req) {
43
+ if (iv.json || iv.form) {
44
+ const parser = bodyParserFor(req.headers.get("content-type"));
45
+ const ok = (iv.json && parser === "json") || (iv.form && (parser === "multipart" || parser === "urlencoded"));
46
+ if (!ok) {
47
+ throw new HoneyError({
48
+ errorKey: EK.unsupported_media_type,
49
+ status: SK.unsupported_media_type,
50
+ });
51
+ }
52
+ }
53
+ }
54
+ /** Cookie parsing lives with the serializer so the two round-trip; see `cookie.ts`. */
55
+ export const parseCookies = parseCookieHeader;
56
+ function toPropertyKey(segment) {
57
+ if (typeof segment === "object" && segment !== null && "key" in segment) {
58
+ return segment.key;
59
+ }
60
+ return segment;
61
+ }
62
+ function extractVendorCode(issue, vendor) {
63
+ const vi = issue;
64
+ if (vendor === "zod" || vendor === "arktype") {
65
+ return typeof vi.code === "string" ? vi.code : "unknown";
66
+ }
67
+ if (vendor === "valibot") {
68
+ return typeof vi.type === "string" ? vi.type : "unknown";
69
+ }
70
+ return "unknown";
71
+ }
72
+ export function normalizeIssues(issues, vendor) {
73
+ return issues.map((issue) => {
74
+ const path = issue.path ? issue.path.map(toPropertyKey) : [];
75
+ return {
76
+ code: extractVendorCode(issue, vendor),
77
+ message: issue.message,
78
+ meta: {
79
+ field: path.at(-1)?.toString(),
80
+ },
81
+ path,
82
+ };
83
+ });
84
+ }
85
+ export function issuesToFieldErrors(issues, prefix) {
86
+ /* field names come from the request (record keys): `toString` must not find a prototype method */
87
+ const fields = dict();
88
+ for (const issue of issues) {
89
+ const fieldName = issue.path.at(-1)?.toString() ?? "unknown";
90
+ const fullPath = `${prefix}.${issue.path.map(String).join(".")}`;
91
+ const error = {
92
+ error_key: mapNormalizedCode(issue.code),
93
+ message: issue.message,
94
+ path: fullPath,
95
+ };
96
+ if (fields[fieldName] === undefined) {
97
+ fields[fieldName] = [];
98
+ }
99
+ fields[fieldName].push(error);
100
+ }
101
+ return fields;
102
+ }
103
+ function failValidation(schema, issues, prefix) {
104
+ const normalized = normalizeIssues(issues, schema["~standard"].vendor);
105
+ throw new HoneyError({
106
+ errorKey: EK.validation_failed,
107
+ fields: issuesToFieldErrors(normalized, prefix),
108
+ status: SK.bad_request,
109
+ });
110
+ }
111
+ /* Most validators answer synchronously; only a schema that returns a promise costs an await. */
112
+ function runSchema(schema, data, prefix) {
113
+ const result = schema["~standard"].validate(data);
114
+ if (result instanceof Promise) {
115
+ return result.then((r) => (r.issues ? failValidation(schema, r.issues, prefix) : r.value));
116
+ }
117
+ return result.issues ? failValidation(schema, result.issues, prefix) : result.value;
118
+ }
119
+ const shapeCache = new WeakMap();
120
+ function deref(node, root) {
121
+ const ref = node.$ref;
122
+ if (typeof ref !== "string")
123
+ return node;
124
+ const m = /^#\/(\$defs|definitions)\/(.+)$/.exec(ref);
125
+ if (m === null)
126
+ return node;
127
+ const defs = m[1] === "$defs" ? root.$defs : root.definitions;
128
+ const target = defs !== undefined && Object.hasOwn(defs, m[2]) ? defs[m[2]] : undefined;
129
+ return target ?? node;
130
+ }
131
+ function classify(node, root, depth = 0) {
132
+ if (depth > 8)
133
+ return "natural";
134
+ const n = deref(node, root);
135
+ const t = n.type;
136
+ if (typeof t === "string")
137
+ return t === "array" ? "array" : "scalar";
138
+ if (Array.isArray(t)) {
139
+ const nonNull = t.filter((x) => x !== "null");
140
+ if (nonNull.length === 0)
141
+ return "natural";
142
+ if (nonNull.every((x) => x === "array"))
143
+ return "array";
144
+ return nonNull.includes("array") ? "natural" : "scalar";
145
+ }
146
+ const branches = n.anyOf ?? n.oneOf;
147
+ if (branches !== undefined && branches.length > 0) {
148
+ const kinds = branches.filter((b) => deref(b, root).type !== "null").map((b) => classify(b, root, depth + 1));
149
+ if (kinds.length === 0)
150
+ return "natural";
151
+ if (kinds.every((k) => k === "array"))
152
+ return "array";
153
+ if (kinds.every((k) => k === "scalar"))
154
+ return "scalar";
155
+ return "natural";
156
+ }
157
+ if (n.allOf !== undefined && n.allOf.length > 0) {
158
+ const kinds = n.allOf.map((b) => classify(b, root, depth + 1));
159
+ if (kinds.includes("array"))
160
+ return "array";
161
+ if (kinds.includes("scalar"))
162
+ return "scalar";
163
+ }
164
+ return "natural";
165
+ }
166
+ function collectProperties(node, root, out, depth = 0) {
167
+ if (depth > 8)
168
+ return;
169
+ const n = deref(node, root);
170
+ if (n.properties !== undefined) {
171
+ for (const key of Object.keys(n.properties)) {
172
+ if (!out.has(key))
173
+ out.set(key, classify(n.properties[key], root));
174
+ }
175
+ }
176
+ for (const part of n.allOf ?? [])
177
+ collectProperties(part, root, out, depth + 1);
178
+ }
179
+ function shapeOf(schema) {
180
+ const cached = shapeCache.get(schema);
181
+ if (cached !== undefined)
182
+ return cached;
183
+ let shape = null;
184
+ const js = schema["~standard"].jsonSchema;
185
+ if (js !== undefined && typeof js.input === "function") {
186
+ try {
187
+ const root = js.input({ libraryOptions: { unrepresentable: "any" }, target: "draft-2020-12" });
188
+ if (root !== null && typeof root === "object") {
189
+ shape = new Map();
190
+ collectProperties(root, root, shape);
191
+ }
192
+ }
193
+ catch {
194
+ /* a schema that cannot describe itself falls back to the natural shape */
195
+ shape = null;
196
+ }
197
+ }
198
+ shapeCache.set(schema, shape);
199
+ return shape;
200
+ }
201
+ /** Applies the duplicate-key policy to `key → values` collected in request order. */
202
+ function shapeRecord(all, shape) {
203
+ const out = dict();
204
+ for (const [key, values] of all) {
205
+ const kind = shape?.get(key) ?? "natural";
206
+ out[key] = kind === "array" ? values : kind === "scalar" || values.length === 1 ? values[0] : values;
207
+ }
208
+ return out;
209
+ }
210
+ function collect(entries, skipDangerous) {
211
+ const all = new Map();
212
+ for (const [key, value] of entries) {
213
+ if (skipDangerous && DANGEROUS_KEYS.has(key))
214
+ continue;
215
+ const list = all.get(key);
216
+ if (list === undefined)
217
+ all.set(key, [value]);
218
+ else
219
+ list.push(value);
220
+ }
221
+ return all;
222
+ }
223
+ function searchEntries(req, searchAll) {
224
+ if (searchAll === undefined)
225
+ return new URL(req.url).searchParams;
226
+ const entries = [];
227
+ for (const key of Object.keys(searchAll)) {
228
+ for (const value of searchAll[key])
229
+ entries.push([key, value]);
230
+ }
231
+ return entries;
232
+ }
233
+ function headersToRecord(headers) {
234
+ const result = dict();
235
+ headers.forEach((value, key) => {
236
+ result[key] = value;
237
+ });
238
+ return result;
239
+ }
240
+ function resolveSchema(entry) {
241
+ if ("_tag" in entry) {
242
+ return {
243
+ mode: "readableStream",
244
+ schema: entry.schema,
245
+ };
246
+ }
247
+ return { mode: "standard", schema: entry };
248
+ }
249
+ /* A body the declared parser cannot read is the client's fault: 400 `malformed_body`, never a
250
+ * 500 through `onError`. Errors from reading the stream itself (a `bodyLimit` 413, a client
251
+ * abort) are not parse errors and pass through unchanged. */
252
+ function malformedBody(format, cause) {
253
+ return new HoneyError({ cause, errorKey: EK.malformed_body, status: SK.bad_request, vars: { format } });
254
+ }
255
+ async function readJson(req) {
256
+ const text = await req.text();
257
+ try {
258
+ return JSON.parse(text);
259
+ }
260
+ catch (err) {
261
+ throw malformedBody("json", err);
262
+ }
263
+ }
264
+ async function readForm(req, parser) {
265
+ if (parser === "urlencoded")
266
+ return new URLSearchParams(await req.text());
267
+ const bytes = await req.arrayBuffer();
268
+ try {
269
+ const contentType = req.headers.get("content-type") ?? "";
270
+ return (await new Response(bytes, { headers: { "content-type": contentType } }).formData());
271
+ }
272
+ catch (err) {
273
+ throw malformedBody("multipart", err);
274
+ }
275
+ }
276
+ export async function validateInput(schemas, req, params, source) {
277
+ const result = {};
278
+ /* params */
279
+ if (schemas.params) {
280
+ const { mode, schema } = resolveSchema(schemas.params);
281
+ result.params = mode === "readableStream" ? params : await runSchema(schema, params, "params");
282
+ }
283
+ /* search */
284
+ if (schemas.search) {
285
+ const { mode, schema } = resolveSchema(schemas.search);
286
+ const all = collect(searchEntries(req, source?.searchAll), false);
287
+ const parsed = shapeRecord(all, mode === "readableStream" ? null : shapeOf(schema));
288
+ result.search = mode === "readableStream" ? parsed : await runSchema(schema, parsed, "search");
289
+ }
290
+ /* headers */
291
+ if (schemas.headers) {
292
+ const { mode, schema } = resolveSchema(schemas.headers);
293
+ const headerRecord = headersToRecord(req.headers);
294
+ result.headers = mode === "readableStream" ? headerRecord : await runSchema(schema, headerRecord, "headers");
295
+ }
296
+ /* cookies */
297
+ if (schemas.cookies) {
298
+ const { mode, schema } = resolveSchema(schemas.cookies);
299
+ const cookieHeader = req.headers.get("cookie") ?? "";
300
+ const parsed = parseCookies(cookieHeader);
301
+ result.cookies = mode === "readableStream" ? parsed : await runSchema(schema, parsed, "cookies");
302
+ }
303
+ /* body: json or form, for every method that reaches here (GET/HEAD body schemas are
304
+ * rejected at registration) */
305
+ if (schemas.json || schemas.form) {
306
+ assertRequestContentType(schemas, req);
307
+ const parser = bodyParserFor(req.headers.get("content-type"));
308
+ if (schemas.json && parser === "json") {
309
+ const { mode, schema } = resolveSchema(schemas.json);
310
+ if (mode !== "readableStream") {
311
+ result.json = await runSchema(schema, await readJson(req), "json");
312
+ }
313
+ /* readableStream: body untouched — the handler reads ctx.req.body directly */
314
+ }
315
+ else if (schemas.form && (parser === "multipart" || parser === "urlencoded")) {
316
+ const { mode, schema } = resolveSchema(schemas.form);
317
+ if (mode !== "readableStream") {
318
+ const record = shapeRecord(collect(await readForm(req, parser), true), shapeOf(schema));
319
+ result.form = await runSchema(schema, record, "form");
320
+ }
321
+ }
322
+ }
323
+ return result;
324
+ }
325
+ export async function validateOutput(schema, statusKey, data) {
326
+ const result = await schema["~standard"].validate(data);
327
+ if (result.issues) {
328
+ throw new HoneyError({
329
+ errorKey: EK.output_validation_failed,
330
+ status: SK.internal_server_error,
331
+ vars: { statusKey },
332
+ });
333
+ }
334
+ }
335
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Apply header edits to a response a middleware got back from `next()`.
3
+ *
4
+ * - `101 Switching Protocols` passes through untouched. Upgrade responses are
5
+ * adapter sentinels (Node and Bun fake the status, Workers carry `webSocket`),
6
+ * and rebuilding one throws or drops the socket.
7
+ * - Honey's own responses and `new Response()` objects are edited in place.
8
+ * - Responses with immutable headers (`fetch()`, `Response.redirect()`,
9
+ * `cache.match()`) are copied first: same body stream, status, status text
10
+ * and headers, then edited.
11
+ *
12
+ * `edit` must not read the body.
13
+ */
14
+ export declare function withHeaders(response: Response, edit: (headers: Headers) => void): Response;
15
+ //# sourceMappingURL=with-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-headers.d.ts","sourceRoot":"","sources":["../src/with-headers.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,QAAQ,CAiB1F"}
@@ -0,0 +1,45 @@
1
+ import { isHoneyResponse } from "./honey-response.js";
2
+ /**
3
+ * Apply header edits to a response a middleware got back from `next()`.
4
+ *
5
+ * - `101 Switching Protocols` passes through untouched. Upgrade responses are
6
+ * adapter sentinels (Node and Bun fake the status, Workers carry `webSocket`),
7
+ * and rebuilding one throws or drops the socket.
8
+ * - Honey's own responses and `new Response()` objects are edited in place.
9
+ * - Responses with immutable headers (`fetch()`, `Response.redirect()`,
10
+ * `cache.match()`) are copied first: same body stream, status, status text
11
+ * and headers, then edited.
12
+ *
13
+ * `edit` must not read the body.
14
+ */
15
+ export function withHeaders(response, edit) {
16
+ if (response.status === 101)
17
+ return response;
18
+ if (isHoneyResponse(response)) {
19
+ edit(response.headers);
20
+ return response;
21
+ }
22
+ if (!headersAreImmutable(response)) {
23
+ edit(response.headers);
24
+ return response;
25
+ }
26
+ const copy = new Response(response.body, {
27
+ headers: new Headers(response.headers),
28
+ status: response.status,
29
+ statusText: response.statusText,
30
+ });
31
+ edit(copy.headers);
32
+ return copy;
33
+ }
34
+ /** Probe with a header name no one sends: immutable Headers throw on any write. */
35
+ const PROBE = "x-honey-mutability-probe";
36
+ function headersAreImmutable(response) {
37
+ try {
38
+ response.headers.delete(PROBE);
39
+ return false;
40
+ }
41
+ catch {
42
+ return true;
43
+ }
44
+ }
45
+ //# sourceMappingURL=with-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-headers.js","sourceRoot":"","sources":["../src/with-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,QAAkB,EAAE,IAAgC;IAC/E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAA;IAC5C,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,OAA6B,CAAC,CAAA;QAC5C,OAAO,QAAQ,CAAA;IAChB,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtB,OAAO,QAAQ,CAAA;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;QACxC,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;KAC/B,CAAC,CAAA;IACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClB,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,mFAAmF;AACnF,MAAM,KAAK,GAAG,0BAA0B,CAAA;AAExC,SAAS,mBAAmB,CAAC,QAAkB;IAC9C,IAAI,CAAC;QACJ,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9B,OAAO,KAAK,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC"}
package/dist/ws/bun.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- export { type RawSocket, type WSAdapter, type WSContext, WSContextImpl, type WSHandler } from "./cloudflare.ts";
1
+ export { type RawSocket, type WSAdapter, type WSAdapterOptions, type WSContext, WSContextImpl, type WSHandler, } from "./cloudflare.ts";
2
2
  import type { WSAdapter, WSContext, WSHandler } from "./cloudflare.ts";
3
+ import { type WSAdapterOptions } from "./shared.ts";
3
4
  type BunRawSocket = {
4
5
  close(code?: number, reason?: string): void;
5
6
  data: BunWSData;
7
+ getBufferedAmount?(): number;
6
8
  readyState: number;
7
9
  send(data: ArrayBufferLike | ArrayBufferView | string, compress?: boolean): number;
8
10
  };
@@ -11,8 +13,13 @@ type BunWSData = {
11
13
  socket: WSContext;
12
14
  };
13
15
  export type BunWSAdapter = WSAdapter & {
16
+ /** Pass to `Bun.serve({ websocket })`; honey's `serve()` does. */
14
17
  websocket: {
18
+ backpressureLimit: number;
15
19
  close(ws: BunRawSocket, code: number, reason: string): void;
20
+ closeOnBackpressureLimit: boolean;
21
+ idleTimeout: number;
22
+ maxPayloadLength: number;
16
23
  message(ws: BunRawSocket, data: ArrayBufferView | string): void;
17
24
  open(ws: BunRawSocket): void;
18
25
  };
@@ -20,9 +27,8 @@ export type BunWSAdapter = WSAdapter & {
20
27
  /**
21
28
  * Bun WebSocket adapter.
22
29
  * Returns adapter + websocket handler object for Bun.serve().
23
- * Bun has no onError callback (noted limitation).
24
- * Keepalive is not supported — Bun's WS API lacks ping/pong control.
25
- * Use nodeWebSocket() for keepalive support.
30
+ * Bun has no onError callback (noted limitation). Bun pings idle sockets itself
31
+ * (`idleTimeout`, whole seconds, at most 960); there is no `keepalive` option.
26
32
  */
27
- export declare function bunWebSocket(): BunWSAdapter;
33
+ export declare function bunWebSocket(opts?: WSAdapterOptions): BunWSAdapter;
28
34
  //# sourceMappingURL=bun.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../../src/ws/bun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE/G,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGtE,KAAK,YAAY,GAAG;IACnB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,IAAI,EAAE,SAAS,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAClF,CAAA;AAED,KAAK,SAAS,GAAG;IAChB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC3B,MAAM,EAAE,SAAS,CAAA;CACjB,CAAA;AAMD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACtC,SAAS,EAAE;QACV,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3D,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAA;QAC/D,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAAA;KAC5B,CAAA;CACD,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,YAAY,CA6C3C"}
1
+ {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../../src/ws/bun.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,aAAa,EACb,KAAK,SAAS,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEtE,OAAO,EAAmD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEpG,KAAK,YAAY,GAAG;IACnB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,IAAI,EAAE,SAAS,CAAA;IACf,iBAAiB,CAAC,IAAI,MAAM,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAClF,CAAA;AAED,KAAK,SAAS,GAAG;IAChB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC3B,MAAM,EAAE,SAAS,CAAA;CACjB,CAAA;AAMD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG;IACtC,kEAAkE;IAClE,SAAS,EAAE;QACV,iBAAiB,EAAE,MAAM,CAAA;QACzB,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3D,wBAAwB,EAAE,OAAO,CAAA;QACjC,WAAW,EAAE,MAAM,CAAA;QACnB,gBAAgB,EAAE,MAAM,CAAA;QACxB,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAA;QAC/D,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAAA;KAC5B,CAAA;CACD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAsElE"}
package/dist/ws/bun.js ADDED
@@ -0,0 +1,82 @@
1
+ export { WSContextImpl, } from "./cloudflare.js";
2
+ import { fireHandler, WSContextImpl } from "./cloudflare.js";
3
+ import { resolveWSOptions, selectProtocol, toArrayBuffer } from "./shared.js";
4
+ /**
5
+ * Bun WebSocket adapter.
6
+ * Returns adapter + websocket handler object for Bun.serve().
7
+ * Bun has no onError callback (noted limitation). Bun pings idle sockets itself
8
+ * (`idleTimeout`, whole seconds, at most 960); there is no `keepalive` option.
9
+ */
10
+ export function bunWebSocket(opts) {
11
+ const options = resolveWSOptions(opts);
12
+ const open = new Set();
13
+ const socketOf = (ws) => {
14
+ if (!ws.data.socket)
15
+ ws.data.socket = new WSContextImpl(ws, options);
16
+ return ws.data.socket;
17
+ };
18
+ return {
19
+ closeAll(code, reason) {
20
+ for (const ws of open) {
21
+ try {
22
+ ws.close(code, reason);
23
+ }
24
+ catch {
25
+ /* already closing */
26
+ }
27
+ }
28
+ },
29
+ options,
30
+ upgrade(req, env, handler) {
31
+ const server = env.server;
32
+ /*
33
+ * Socket is undefined here — Bun creates it lazily in the open callback.
34
+ * WSContext cast is safe: actual socket is assigned in open/message/close
35
+ * before any user code accesses it.
36
+ */
37
+ const protocol = selectProtocol(req, options);
38
+ const success = server.upgrade(req, {
39
+ data: { handler, socket: undefined },
40
+ headers: protocol === null ? undefined : { "sec-websocket-protocol": protocol },
41
+ });
42
+ if (!success) {
43
+ return {
44
+ response: new Response("WebSocket upgrade failed", { status: 500 }),
45
+ socket: undefined,
46
+ };
47
+ }
48
+ /* Node's Response rejects status 101 (Fetch spec: 200-599 only).
49
+ Create a valid Response and override status for the sentinel check. */
50
+ const response = new Response(null);
51
+ Object.defineProperty(response, "status", { value: 101 });
52
+ return {
53
+ response,
54
+ socket: undefined,
55
+ };
56
+ },
57
+ websocket: {
58
+ /* honey applies its own policy on send (WSContext); Bun's limit only bounds its queue */
59
+ backpressureLimit: Math.max(options.backpressureLimit, 1),
60
+ close(ws, code, reason) {
61
+ open.delete(ws);
62
+ const socket = socketOf(ws);
63
+ fireHandler("close", () => ws.data.handler.onClose?.(undefined, socket, code, reason));
64
+ },
65
+ closeOnBackpressureLimit: false,
66
+ idleTimeout: options.idleTimeout === 0 ? 0 : Math.min(Math.max(Math.ceil(options.idleTimeout / 1000), 1), 960),
67
+ maxPayloadLength: options.maxPayload,
68
+ message(ws, data) {
69
+ const socket = socketOf(ws);
70
+ /* Bun passes a Buffer for binary frames: hand over exactly its bytes, as an ArrayBuffer */
71
+ const normalized = typeof data === "string" ? data : toArrayBuffer(data);
72
+ fireHandler("message", () => ws.data.handler.onMessage?.(undefined, socket, normalized));
73
+ },
74
+ open(ws) {
75
+ open.add(ws);
76
+ const socket = socketOf(ws);
77
+ fireHandler("open", () => ws.data.handler.onOpen?.(undefined, socket));
78
+ },
79
+ },
80
+ };
81
+ }
82
+ //# sourceMappingURL=bun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/ws/bun.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,20 @@
1
+ import "./session.ts";
1
2
  import type { WSReadyState } from "../types.ts";
3
+ import { type ResolvedWSOptions, type WSAdapterOptions } from "./shared.ts";
4
+ export type { WSAdapterOptions } from "./shared.ts";
2
5
  export declare const WS_SEND_BUFFER_MAX = 32;
3
6
  export type WSContext<T = unknown> = {
7
+ /** Outbound bytes the runtime holds unsent, when it reports them (0 otherwise). Adapters' sockets have it; a hand-written stub may not. */
8
+ readonly bufferedAmount?: number;
9
+ /** Close the connection. A reason longer than 123 UTF-8 bytes is cut to fit. */
4
10
  close(code?: number, reason?: string): void;
5
11
  raw: T;
6
12
  readyState: WSReadyState;
13
+ /**
14
+ * Send a message; objects are sent as JSON. While the socket is still opening, up to 32
15
+ * messages wait for it; after it closed they are dropped. Over the adapter's backpressure
16
+ * limit the adapter's policy applies (close with 1013, or drop).
17
+ */
7
18
  send(data: ArrayBuffer | Uint8Array | object | string): void;
8
19
  };
9
20
  export type WSHandler<TCtx = unknown> = {
@@ -33,6 +44,10 @@ export type WSAdapter = {
33
44
  * and returns `response` before any middleware Promise.
34
45
  */
35
46
  preUpgrade?(req: Request): WSPreUpgrade | undefined;
47
+ /** Close every open connection (graceful shutdown). */
48
+ closeAll?(code: number, reason: string): void;
49
+ /** The adapter's resolved options. */
50
+ readonly options?: ResolvedWSOptions;
36
51
  };
37
52
  export type RawSocket = {
38
53
  close(code?: number, reason?: string): void;
@@ -42,14 +57,21 @@ export type RawSocket = {
42
57
  export declare class WSContextImpl<T extends RawSocket = RawSocket> implements WSContext<T> {
43
58
  raw: T;
44
59
  private sendBuffer;
45
- constructor(raw: T);
60
+ private readonly limits;
61
+ constructor(raw: T, opts?: Pick<ResolvedWSOptions, "backpressureLimit" | "backpressurePolicy">);
62
+ get bufferedAmount(): number;
46
63
  get readyState(): WSReadyState;
64
+ /** Send what was queued while the socket was opening (adapters without an `open` event call this). */
65
+ flush(): void;
47
66
  close(code?: number, reason?: string): void;
48
67
  send(data: ArrayBuffer | Uint8Array | object | string): void;
49
68
  }
69
+ /** Call an adapter event on the handler; whatever it throws is logged, never thrown into the runtime. */
70
+ export declare function fireHandler(phase: string, fn: () => unknown): void;
50
71
  /**
51
72
  * Cloudflare Workers WebSocket adapter.
52
- * Uses WebSocketPair + server.accept() + addEventListener.
73
+ * Uses WebSocketPair + server.accept() + addEventListener. `idleTimeout` is not enforced:
74
+ * Workers has no ping API and evicts idle sockets itself.
53
75
  */
54
- export declare function cfWebSocket(): WSAdapter;
76
+ export declare function cfWebSocket(opts?: WSAdapterOptions): WSAdapter;
55
77
  //# sourceMappingURL=cloudflare.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/ws/cloudflare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/ws/cloudflare.ts"],"names":[],"mappings":"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"}