@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
@@ -1,916 +0,0 @@
1
- /** Python SDK code generator.
2
- *
3
- * Input is the SDK request model (codegen-sdk-model.ts). Identifiers come from per-scope
4
- * NameScopes (module, class, method) and every spec string reaches source through pyString,
5
- * docstring or comment writers (codegen-lang.ts).
6
- */
7
-
8
- import { readFileSync } from "node:fs"
9
- import type { OpenApiSpecInput } from "./codegen.ts"
10
- import { methodsOf, namespacesOf } from "./codegen-ir.ts"
11
- import type { IRNamespace, IRSchema } from "./codegen-ir.ts"
12
- import { NameScope, cmpCodeUnit, pyClassName, pyDocLines, pyIdentifier, pyString } from "./codegen-lang.ts"
13
- import { buildSdkModel } from "./codegen-sdk-model.ts"
14
- import type { SdkModel, SdkOp } from "./codegen-sdk-model.ts"
15
- import { irToPythonNamed, isPyAttributeKey, pyIdent } from "./python-type-emitter.ts"
16
- import type { PyTypeNames } from "./python-type-emitter.ts"
17
-
18
- interface PySDKOptions {
19
- name?: string
20
- throwOnError?: boolean
21
- staleTime?: number
22
- staleMaxEntries?: number
23
- }
24
-
25
- interface ServiceMapEntry {
26
- method: string
27
- path: string
28
- operationId: string
29
- invalidate?: string[]
30
- }
31
-
32
- interface PySDKResult {
33
- files: Record<string, string>
34
- serviceMap: Record<string, ServiceMapEntry>
35
- }
36
-
37
- const PYTHON_FUTURE = "from __future__ import annotations"
38
- const STATIC_FILE_NAMES = [
39
- "_runtime.py",
40
- "_errors.py",
41
- "_invalidation.py",
42
- "_sse.py",
43
- "_ws.py",
44
- "_transport.py",
45
- "_realtime.py",
46
- ] as const
47
- const RUNTIME_TEMPLATE_CACHE = new Map<string, string>()
48
-
49
- const ERROR_NAMES: Record<number, string> = {
50
- 400: "BadRequestError",
51
- 401: "UnauthorizedError",
52
- 403: "ForbiddenError",
53
- 404: "NotFoundError",
54
- 409: "ConflictError",
55
- 422: "UnprocessableEntityError",
56
- 429: "RateLimitError",
57
- 500: "InternalServerError",
58
- 502: "BadGatewayError",
59
- 503: "ServiceUnavailableError",
60
- 504: "GatewayTimeoutError",
61
- }
62
-
63
- const ERROR_CLASSES = [
64
- "APIError",
65
- "APIStatusError",
66
- "BadGatewayError",
67
- "BadRequestError",
68
- "ConflictError",
69
- "ForbiddenError",
70
- "GatewayTimeoutError",
71
- "InternalServerError",
72
- "NotFoundError",
73
- "RateLimitError",
74
- "ServiceUnavailableError",
75
- "UnauthorizedError",
76
- "UnprocessableEntityError",
77
- ]
78
-
79
- const TRANSPORT_EXPORTS = [
80
- "LongpollAdapter",
81
- "SseAdapter",
82
- "TransportAdapter",
83
- "TransportConn",
84
- "TransportKind",
85
- "TransportOpts",
86
- "WsAdapter",
87
- ]
88
-
89
- const REALTIME_EXPORTS = ["ConnectionState", "ResumableConnection"]
90
-
91
- /** Names a generated module-level type must not take: package exports, typing and builtins. */
92
- const PY_MODULE_RESERVED = [
93
- "AsyncSDK",
94
- "SDK",
95
- ...ERROR_CLASSES,
96
- ...TRANSPORT_EXPORTS,
97
- ...REALTIME_EXPORTS,
98
- "ClientConfig",
99
- "InvalidationConfig",
100
- "SDKResult",
101
- "SSEEvent",
102
- "PathParamError",
103
- "FileInput",
104
- "Any",
105
- "AsyncIterator",
106
- "Literal",
107
- "NotRequired",
108
- "TypeAlias",
109
- "TypedDict",
110
- "bool",
111
- "bytes",
112
- "dict",
113
- "float",
114
- "int",
115
- "list",
116
- "object",
117
- "str",
118
- "tuple",
119
- "type",
120
- "httpx",
121
- "asyncio",
122
- "threading",
123
- "uuid",
124
- ]
125
-
126
- export function loadPythonRuntimeTemplates(): Map<string, string> {
127
- if (RUNTIME_TEMPLATE_CACHE.size > 0) return RUNTIME_TEMPLATE_CACHE
128
- for (const name of STATIC_FILE_NAMES) {
129
- const url = new URL(`./client-python/${name}`, import.meta.url)
130
- RUNTIME_TEMPLATE_CACHE.set(name, readFileSync(url, "utf8"))
131
- }
132
- RUNTIME_TEMPLATE_CACHE.set("py.typed", "")
133
- return RUNTIME_TEMPLATE_CACHE
134
- }
135
-
136
- /* ── types ── */
137
-
138
- type PyNames = {
139
- module: NameScope
140
- types: PyTypeNames
141
- /** class name → source, for every emitted type (schemas first, then hoisted). */
142
- decls: Map<string, string>
143
- declOrder: string[]
144
- schemaNames: Map<string, string>
145
- }
146
-
147
- function typedDictSource(name: string, ir: Extract<IRSchema, { kind: "object" }>, names: PyTypeNames): string {
148
- const fields = ir.fields.slice().sort((a, b) => cmpCodeUnit(a.name, b.name))
149
- const rendered = fields.map((f) => {
150
- const t = irToPythonNamed(f.schema, names, name, f.name)
151
- return { annotation: f.required ? t : `NotRequired[${t}]`, field: f }
152
- })
153
- if (fields.every((f) => isPyAttributeKey(f.name))) {
154
- const l = [`class ${name}(TypedDict, total=False):`]
155
- for (const r of rendered) l.push(` ${r.field.name}: ${r.annotation}`)
156
- if (rendered.length === 0) l.push(` pass`)
157
- return l.join("\n")
158
- }
159
- /* functional syntax: any JSON key is allowed; annotations are strings, so forward refs work */
160
- const l = [`${name} = TypedDict(`, ` ${pyString(name)},`, ` {`]
161
- for (const r of rendered) l.push(` ${pyString(r.field.name)}: ${pyString(r.annotation)},`)
162
- l.push(` },`, ` total=False,`, `)`)
163
- return l.join("\n")
164
- }
165
-
166
- function buildPyNames(model: SdkModel): PyNames {
167
- const module = new NameScope(PY_MODULE_RESERVED)
168
- const schemaNames = new Map<string, string>()
169
- for (const name of model.schemaNames) {
170
- const base = pyClassName(name)
171
- schemaNames.set(name, module.has(base) ? module.claim(`${base}Model`) : module.claim(base))
172
- }
173
- const decls = new Map<string, string>()
174
- const declOrder: string[] = []
175
- const hoistKeys = new Map<string, string>()
176
- const names: PyNames = { declOrder, decls, module, schemaNames, types: undefined as unknown as PyTypeNames }
177
- names.types = {
178
- hoist: (key, base, schema) => {
179
- const hit = hoistKeys.get(key)
180
- if (hit) return hit
181
- const name = module.claim(pyClassName(base))
182
- hoistKeys.set(key, name)
183
- decls.set(name, "")
184
- declOrder.push(name)
185
- decls.set(name, typedDictSource(name, schema, names.types))
186
- return name
187
- },
188
- ref: (name) => schemaNames.get(name) ?? pyClassName(name),
189
- }
190
- return names
191
- }
192
-
193
- function buildPyTypes(model: SdkModel, names: PyNames): string {
194
- const body: string[] = []
195
- for (const name of model.schemaNames) {
196
- const ir = model.ir.schemas[name]
197
- const pyName = names.types.ref(name)
198
- if (ir.kind === "object" && ir.fields.length > 0) {
199
- body.push(typedDictSource(pyName, ir, names.types))
200
- } else {
201
- /* string alias: lazy, so the order of definitions does not matter */
202
- const t = irToPythonNamed(ir, names.types, pyName, "")
203
- body.push(`${pyName}: TypeAlias = ${pyString(t)}`)
204
- }
205
- body.push("")
206
- }
207
- return body.join("\n")
208
- }
209
-
210
- function typesFile(schemaSource: string, names: PyNames): string {
211
- const hoisted = names.declOrder.map((n) => `${names.decls.get(n)}\n`).join("\n")
212
- const bodyText = `${schemaSource}\n${hoisted}`
213
- const typing = ["Any", "Literal", "NotRequired", "TypeAlias", "TypedDict"].filter((sym) =>
214
- new RegExp(`\\b${sym}\\b`).test(bodyText),
215
- )
216
- const fileInput = /\bFileInput\b/.test(bodyText)
217
- /* string aliases mention `Any`/`Literal` only inside quotes; keep them importable for checkers */
218
- if (/TypeAlias = /.test(bodyText)) {
219
- for (const sym of ["Any", "Literal"]) if (!typing.includes(sym)) typing.push(sym)
220
- }
221
- const l: string[] = []
222
- l.push("# ruff: noqa: E501")
223
- l.push(PYTHON_FUTURE)
224
- l.push("")
225
- if (typing.length > 0) l.push(`from typing import ${typing.sort(cmpCodeUnit).join(", ")}`)
226
- if (fileInput) l.push(`from ._runtime import FileInput`)
227
- if (typing.length > 0 || fileInput) l.push("")
228
- l.push(bodyText)
229
- const exported = [...names.schemaNames.values(), ...names.declOrder]
230
- if (exported.length === 0) l.push("__all__: list[str] = []")
231
- else l.push(`__all__ = [${exported.map(pyString).join(", ")}]`)
232
- l.push("")
233
- return l.join("\n")
234
- }
235
-
236
- /* ── client ── */
237
-
238
- type PyParam = { local: string; wire: string }
239
-
240
- type PyOpPlan = {
241
- op: SdkOp
242
- methodName: string
243
- pathParams: PyParam[]
244
- queryParams: Array<PyParam & { required: boolean; type: string }>
245
- headerParams: Array<PyParam & { required: boolean; type: string }>
246
- body?: { local: string; type: string; required: boolean }
247
- multipart?: { files: string[]; listFiles: string[] }
248
- returnType: string
249
- }
250
-
251
- /** kwargs the generated methods always take; params must not reuse them. */
252
- /** What client.py may import from the runtime modules; each name only when the bodies use it. */
253
- const PY_CLIENT_IMPORTS: ReadonlyArray<readonly [string, readonly string[]]> = [
254
- [
255
- "._runtime",
256
- [
257
- "ClientConfig",
258
- "SDKResult",
259
- "_AuthState",
260
- "_build_headers",
261
- "_build_url",
262
- "_do_request_async",
263
- "_do_request_sync",
264
- "_expand_path",
265
- "_form_content",
266
- "_format_value",
267
- "_has_header",
268
- "_multipart_parts",
269
- "_open_stream",
270
- "_parse_body",
271
- "_raise_for_status",
272
- "_set_header",
273
- "_to_ws_url",
274
- ],
275
- ],
276
- ["._invalidation", ["_StaleTracker", "_StaleTrackerSync"]],
277
- ["._sse", ["SSEEvent", "parse_sse_stream"]],
278
- ["._ws", ["_TypedWebSocket"]],
279
- ["._transport", ["LongpollAdapter", "SseAdapter", "TransportOpts", "WsAdapter"]],
280
- ["._realtime", ["ResumableConnection"]],
281
- ]
282
-
283
- /**
284
- * Module-scope names a generated method body evaluates at runtime (calls and attribute access, not
285
- * annotations, which `from __future__ import annotations` never evaluates). A parameter local must
286
- * never shadow one: a path param named `uuid` would turn `str(uuid.uuid4())` into an
287
- * AttributeError. Underscore names cannot collide, since parameter locals never start with `_`.
288
- */
289
- export const PY_BODY_GLOBALS: readonly string[] = [
290
- "httpx",
291
- "str",
292
- "threading",
293
- "uuid",
294
- ...PY_CLIENT_IMPORTS.flatMap(([, syms]) => syms.filter((n) => !n.startsWith("_"))),
295
- ]
296
-
297
- const PY_METHOD_RESERVED = [
298
- "self",
299
- "timeout",
300
- "headers",
301
- "cancel_token",
302
- "idempotency_key",
303
- "last_event_id",
304
- "protocols",
305
- "reconnect_token",
306
- ...PY_BODY_GLOBALS,
307
- ]
308
-
309
- function planPyOp(op: SdkOp, methodName: string, names: PyNames, model: SdkModel): PyOpPlan {
310
- const locals = new NameScope(PY_METHOD_RESERVED)
311
- const typeParent = pyClassName(op.id)
312
- const plan: PyOpPlan = { headerParams: [], methodName, op, pathParams: [], queryParams: [], returnType: "None" }
313
- const b = op.body
314
- const hasBodyArg = b !== undefined && op.stream !== "ws" && op.stream !== "realtime"
315
- const bodyLocal = hasBodyArg ? locals.claim("body") : ""
316
- for (const p of op.pathParams) plan.pathParams.push({ local: locals.claim(pyIdentifier(p.name)), wire: p.name })
317
- if (op.stream !== "realtime") {
318
- for (const q of op.query) {
319
- if (op.stream === "sse" && /^last[-_]?event[-_]?id$/i.test(q.name)) continue
320
- plan.queryParams.push({
321
- local: locals.claim(pyIdentifier(q.name)),
322
- required: q.required === true,
323
- type: irToPythonNamed(q.schema, names.types, typeParent, q.name),
324
- wire: q.name,
325
- })
326
- }
327
- for (const h of op.headers) {
328
- plan.headerParams.push({
329
- local: locals.claim(pyIdentifier(h.name)),
330
- required: h.required === true,
331
- type: irToPythonNamed(h.schema, names.types, typeParent, h.name),
332
- wire: h.name,
333
- })
334
- }
335
- }
336
- if (hasBodyArg && b) {
337
- let type: string
338
- switch (b.kind) {
339
- case "json":
340
- case "form":
341
- type = irToPythonNamed(b.schema, names.types, typeParent, "Body")
342
- break
343
- case "binary":
344
- type = "bytes | AsyncIterator[bytes]"
345
- break
346
- case "text":
347
- type = "str"
348
- break
349
- case "multipart": {
350
- const files: string[] = []
351
- const listFiles: string[] = []
352
- const fields = b.parts.map((part) => {
353
- const schema = part.schema ? model.resolve(part.schema) : ({ kind: "unknown" } as IRSchema)
354
- if (part.type === "file") {
355
- if (schema.kind === "array") listFiles.push(part.name)
356
- else files.push(part.name)
357
- return {
358
- name: part.name,
359
- required: false,
360
- schema: { kind: "unknown" } as IRSchema,
361
- file: true,
362
- list: schema.kind === "array",
363
- }
364
- }
365
- return {
366
- file: false,
367
- list: false,
368
- name: part.name,
369
- required: false,
370
- schema: part.schema ?? ({ kind: "unknown" } as IRSchema),
371
- }
372
- })
373
- const objectIR: Extract<IRSchema, { kind: "object" }> = {
374
- fields: fields.map((f) => ({ name: f.name, required: f.required, schema: f.schema })),
375
- kind: "object",
376
- }
377
- type = names.types.hoist(`${op.id}.multipart`, `${typeParent}Body`, objectIR)
378
- /* file parts: re-render with the FileInput alias instead of Any */
379
- const decl = names.decls.get(type) ?? ""
380
- let patched = decl
381
- for (const f of fields.filter((x) => x.file)) {
382
- const key = pyString(f.name)
383
- const t = f.list ? "list[FileInput]" : "FileInput"
384
- patched = patched
385
- .replace(` ${f.name}: NotRequired[Any]`, ` ${f.name}: NotRequired[${t}]`)
386
- .replace(` ${key}: "NotRequired[Any]",`, ` ${key}: ${pyString(`NotRequired[${t}]`)},`)
387
- }
388
- names.decls.set(type, patched)
389
- plan.multipart = { files, listFiles }
390
- break
391
- }
392
- }
393
- plan.body = { local: bodyLocal, required: b.required, type }
394
- }
395
- if (op.stream === null) {
396
- const s = op.success
397
- if (s.kind === "json")
398
- plan.returnType = s.schema ? irToPythonNamed(s.schema, names.types, typeParent, "Response") : "Any"
399
- else if (s.kind === "text") plan.returnType = "str"
400
- else if (s.kind === "binary") plan.returnType = "bytes"
401
- else plan.returnType = "None"
402
- }
403
- return plan
404
- }
405
-
406
- function signature(plan: PyOpPlan, throwOnError: boolean, isAsync: boolean): string[] {
407
- const { op } = plan
408
- const defKw = op.stream === "ws" || op.stream === "realtime" || !isAsync ? "def" : "async def"
409
- const pos: string[] = ["self", ...plan.pathParams.map((p) => `${p.local}: str`)]
410
- const kw: string[] = []
411
-
412
- if (op.stream === "realtime") {
413
- kw.push(
414
- `reconnect_token: str | None = None`,
415
- `last_event_id: str | None = None`,
416
- `headers: dict[str, str] | None = None`,
417
- )
418
- return emitSignature(defKw, plan.methodName, pos, kw, "ResumableConnection")
419
- }
420
-
421
- if (plan.body) {
422
- if (plan.body.required) pos.push(`${plan.body.local}: ${plan.body.type}`)
423
- else kw.push(`${plan.body.local}: ${optional(plan.body.type)} = None`)
424
- }
425
- for (const q of [...plan.queryParams, ...plan.headerParams]) {
426
- if (q.required) pos.push(`${q.local}: ${q.type}`)
427
- else kw.push(`${q.local}: ${optional(q.type)} = None`)
428
- }
429
- if (op.stream === "sse") kw.push(`last_event_id: str | None = None`, `headers: dict[str, str] | None = None`)
430
- if (op.stream === "ws") {
431
- kw.push(
432
- `protocols: list[str] | None = None`,
433
- `reconnect_token: str | None = None`,
434
- `headers: dict[str, str] | None = None`,
435
- )
436
- }
437
- if (op.stream === null) {
438
- if (op.idempotent) kw.push(`idempotency_key: str | None = None`)
439
- kw.push(`timeout: float | None = None`, `headers: dict[str, str] | None = None`)
440
- kw.push(`cancel_token: "threading.Event | None" = None`)
441
- }
442
-
443
- let ret: string
444
- if (op.stream === "sse") ret = "AsyncIterator[SSEEvent]"
445
- else if (op.stream === "ws") ret = "_TypedWebSocket"
446
- else if (throwOnError) ret = plan.returnType
447
- else ret = `SDKResult[${plan.returnType}]`
448
- return emitSignature(defKw, plan.methodName, pos, kw, ret)
449
- }
450
-
451
- function optional(t: string): string {
452
- return t.endsWith("| None") ? t : `${t} | None`
453
- }
454
-
455
- function emitSignature(defKw: string, name: string, pos: string[], kw: string[], ret: string): string[] {
456
- if (kw.length === 0) return [` ${defKw} ${name}(${pos.join(", ")}) -> ${ret}:`]
457
- const l = [` ${defKw} ${name}(${pos.join(", ")},`, ` *,`]
458
- kw.forEach((k, i) => l.push(` ${k}${i < kw.length - 1 ? "," : ""}`))
459
- l.push(` ) -> ${ret}:`)
460
- return l
461
- }
462
-
463
- function docstring(op: SdkOp): string[] {
464
- const text = op.summary || op.description
465
- const lines = text ? pyDocLines(text) : []
466
- if (lines.length === 0 && op.errorStatuses.length === 0) return []
467
- const out: string[] = []
468
- if (op.errorStatuses.length === 0 && lines.length === 1) return [` """${lines[0]}"""`]
469
- out.push(` """${lines[0] ?? ""}`)
470
- for (const line of lines.slice(1)) out.push(line === "" ? "" : ` ${line}`)
471
- if (op.errorStatuses.length > 0) {
472
- out.push(``)
473
- out.push(` Raises:`)
474
- for (const status of op.errorStatuses)
475
- out.push(` ${ERROR_NAMES[status] ?? "APIStatusError"}: HTTP ${status}`)
476
- }
477
- out.push(` """`)
478
- return out
479
- }
480
-
481
- function pathExpr(plan: PyOpPlan): string {
482
- if (plan.pathParams.length === 0) return pyString(plan.op.path)
483
- const dict = plan.pathParams.map((p) => `${pyString(p.wire)}: ${p.local}`).join(", ")
484
- return `_expand_path(${pyString(plan.op.path)}, {${dict}})`
485
- }
486
-
487
- function paramsDict(plan: PyOpPlan): string {
488
- const entries = plan.queryParams.map((q) => `${pyString(q.wire)}: ${q.local}`)
489
- return `{${entries.join(", ")}}`
490
- }
491
-
492
- function headerLines(plan: PyOpPlan, configRef: string, authRef: string, base: string): string[] {
493
- const l: string[] = []
494
- l.push(` _extra: dict[str, str] = ${base}`)
495
- for (const h of plan.headerParams) {
496
- l.push(` if ${h.local} is not None:`)
497
- l.push(` _extra[${pyString(h.wire)}] = _format_value(${h.local})`)
498
- }
499
- l.push(` _extra.update(headers or {})`)
500
- l.push(` _headers = _build_headers(${configRef}, extra=_extra, bearer_token=${authRef}.token)`)
501
- return l
502
- }
503
-
504
- function bodyArgs(plan: PyOpPlan, l: string[]): string {
505
- const b = plan.op.body
506
- const local = plan.body?.local
507
- if (!b || !local) return ""
508
- switch (b.kind) {
509
- case "json":
510
- return `json=${local}`
511
- case "form":
512
- l.push(` _headers.setdefault("Content-Type", "application/x-www-form-urlencoded")`)
513
- return `content=_form_content(${local})`
514
- case "text":
515
- l.push(` _set_header(_headers, "Content-Type", ${pyString(b.contentType)})`)
516
- return `content=${local}.encode() if ${local} is not None else None`
517
- case "binary":
518
- l.push(` _set_header(_headers, "Content-Type", ${pyString(b.contentType)})`)
519
- return `content=${local}`
520
- case "multipart": {
521
- const files = plan.multipart?.files ?? []
522
- const listFiles = plan.multipart?.listFiles ?? []
523
- l.push(
524
- ` _data, _files = _multipart_parts(${local}, files=[${files.map(pyString).join(", ")}], list_files=[${listFiles.map(pyString).join(", ")}])`,
525
- )
526
- return `data=_data, files=_files`
527
- }
528
- }
529
- }
530
-
531
- function methodBody(plan: PyOpPlan, throwOnError: boolean, isAsync: boolean, isTopLevel: boolean): string[] {
532
- const l: string[] = []
533
- const { op } = plan
534
- const self = isTopLevel ? "self" : "self._client"
535
- const configRef = `${self}._config`
536
- const authRef = `${self}._auth`
537
- const clientRef = isAsync ? `${self}._async_client` : `${self}._sync_client`
538
- const trackerRef = `${self}._stale_tracker`
539
- const aw = isAsync ? "await " : ""
540
-
541
- if (op.stream === "realtime") {
542
- l.push(` _url = _build_url(${configRef}.base_url, ${pathExpr(plan)})`)
543
- l.push(` _opts = TransportOpts(`)
544
- l.push(` reconnect_token=reconnect_token,`)
545
- l.push(` last_event_id=last_event_id,`)
546
- l.push(` headers=_build_headers(${configRef}, extra=headers, bearer_token=${authRef}.token),`)
547
- l.push(` )`)
548
- l.push(` _transports: list[Any] = [WsAdapter(), SseAdapter(), LongpollAdapter()]`)
549
- l.push(` return ResumableConnection(_url, _transports, _opts)`)
550
- return l
551
- }
552
-
553
- l.push(` _path = ${pathExpr(plan)}`)
554
-
555
- if (op.stream === "ws") {
556
- l.push(` _params: dict[str, Any] = ${paramsDict(plan)}`)
557
- l.push(` if reconnect_token is not None:`)
558
- l.push(` _params["reconnect_token"] = reconnect_token`)
559
- l.push(...headerLines(plan, configRef, authRef, "{}"))
560
- l.push(` _url = _build_url(${configRef}.base_url, _path, _params)`)
561
- l.push(` _ws_url = _to_ws_url(_url)`)
562
- l.push(` return _TypedWebSocket(_ws_url, protocols=protocols, extra_headers=_headers)`)
563
- return l
564
- }
565
-
566
- if (op.stream === "sse") {
567
- l.push(` _params: dict[str, Any] = ${paramsDict(plan)}`)
568
- l.push(...headerLines(plan, configRef, authRef, `{"Accept": "text/event-stream"}`))
569
- l.push(` if last_event_id is not None:`)
570
- l.push(` _headers["Last-Event-ID"] = last_event_id`)
571
- const args = bodyArgs(plan, l)
572
- l.push(` _url = _build_url(${configRef}.base_url, _path, _params)`)
573
- l.push(
574
- ` async with _open_stream(${clientRef}, ${configRef}, ${pyString(op.method)}, _url, _headers${args ? `, ${args}` : ""}) as _response:`,
575
- )
576
- l.push(` async for _event in parse_sse_stream(_response):`)
577
- l.push(` yield _event`)
578
- return l
579
- }
580
-
581
- l.push(` _params: dict[str, Any] = ${paramsDict(plan)}`)
582
- l.push(...headerLines(plan, configRef, authRef, "{}"))
583
- if (op.idempotent) {
584
- /* explicit header (any casing) > idempotency_key kwarg > uuid4 */
585
- l.push(` if not _has_header(_headers, "Idempotency-Key"):`)
586
- l.push(
587
- ` _headers["Idempotency-Key"] = idempotency_key if idempotency_key is not None else str(uuid.uuid4())`,
588
- )
589
- }
590
- const args = bodyArgs(plan, l)
591
- const dictEntries = plan.pathParams.map((p) => `${pyString(p.wire)}: ${p.local}`)
592
- l.push(
593
- ` _path_params: dict[str, str] | None = ${dictEntries.length > 0 ? `{${dictEntries.join(", ")}}` : "None"}`,
594
- )
595
- l.push(` _selector = ${pyString(`${op.method} `)} + _path`)
596
- l.push(` _request_meta = ${aw}${trackerRef}.build_request_meta(_selector, _path, ${pyString(op.method)})`)
597
- l.push(` _url = _build_url(${configRef}.base_url, _path, _params)`)
598
- l.push(` _response = ${aw}${isAsync ? "_do_request_async" : "_do_request_sync"}(`)
599
- l.push(` ${clientRef}, ${configRef}, ${pyString(op.method)}, _url,`)
600
- l.push(` headers=_headers,${args ? ` ${args},` : ""} timeout=timeout,`)
601
- l.push(` cancel_token=cancel_token, operation=${pyString(`${op.method} ${op.path}`)},`)
602
- l.push(` request_meta=_request_meta, auth=${authRef},`)
603
- l.push(` )`)
604
- l.push(` if 200 <= _response.status_code < 300:`)
605
- const targets = op.invalidates.map(pyString).join(", ")
606
- l.push(` ${aw}${trackerRef}.mark_stale([${targets}], _path_params, _selector)`)
607
- l.push(` if _request_meta is not None and _request_meta.is_stale:`)
608
- l.push(
609
- ` ${aw}${trackerRef}.clear_stale(_selector, _path, ${pyString(op.method)}, _request_meta.seq_snapshot)`,
610
- )
611
- const kind = op.success.kind
612
- if (throwOnError) {
613
- l.push(` _raise_for_status(_response)`)
614
- l.push(` return _parse_body(_response, ${pyString(kind)})`)
615
- } else {
616
- l.push(` if not 200 <= _response.status_code < 300:`)
617
- l.push(
618
- ` return SDKResult(data=None, error=_parse_body(_response), status=_response.status_code, response=_response)`,
619
- )
620
- l.push(
621
- ` return SDKResult(data=_parse_body(_response, ${pyString(kind)}), error=None, status=_response.status_code, response=_response)`,
622
- )
623
- }
624
- return l
625
- }
626
-
627
- type PyClassNode = {
628
- asyncName: string
629
- syncName?: string
630
- path: string[]
631
- ns: IRNamespace
632
- children: Array<{ attr: string; node: PyClassNode }>
633
- plans: PyOpPlan[]
634
- }
635
-
636
- function isSyncCapable(op: SdkOp): boolean {
637
- return op.stream === null && op.body?.kind !== "binary"
638
- }
639
-
640
- function hasSyncContent(node: PyClassNode): boolean {
641
- return node.plans.some((p) => isSyncCapable(p.op)) || node.children.some((c) => hasSyncContent(c.node))
642
- }
643
-
644
- function trackerInit(cls: string): string[] {
645
- return [
646
- " _inv = config.invalidation",
647
- ` self._stale_tracker = ${cls}(`,
648
- " stale_time=_inv.stale_time if _inv is not None else 0.0,",
649
- " stale_max_entries=(",
650
- " _inv.stale_max_entries if _inv is not None else 1000",
651
- " ),",
652
- " max_sources_per_target=(",
653
- " _inv.max_sources_per_target if _inv is not None else 16",
654
- " ),",
655
- " )",
656
- ]
657
- }
658
-
659
- function buildPyClient(
660
- model: SdkModel,
661
- names: PyNames,
662
- options: PySDKOptions,
663
- serviceMap: Record<string, ServiceMapEntry>,
664
- ): string {
665
- const throwOnError = options.throwOnError !== false
666
- function planNs(ns: IRNamespace, path: string[], reserved: string[]): PyClassNode {
667
- const members = new NameScope(reserved)
668
- const node: PyClassNode = {
669
- asyncName: path.length === 0 ? "AsyncSDK" : names.module.claim(`_${path.map(pyClassName).join("")}Resource`),
670
- children: [],
671
- ns,
672
- path,
673
- plans: [],
674
- }
675
- if (path.length > 0) node.syncName = names.module.claim(`_Sync${path.map(pyClassName).join("")}Resource`)
676
- for (const [seg, childNs] of namespacesOf(ns)) {
677
- const attr = members.claim(pyIdent(seg))
678
- node.children.push({ attr, node: planNs(childNs, [...path, seg], ["_client"]) })
679
- }
680
- for (const [seg, irOp] of methodsOf(ns)) {
681
- const op = model.opsById.get(irOp.id)
682
- if (!op) continue
683
- let base = pyIdentifier(seg)
684
- if (op.stream === "realtime") {
685
- /* realtime methods keep the `connectX` name they always had */
686
- const ident = pyIdentifier(seg)
687
- base = /^connect(_|$)/.test(ident) ? ident : `connect${ident.charAt(0).toUpperCase()}${ident.slice(1)}`
688
- }
689
- node.plans.push(planPyOp(op, members.claim(base), names, model))
690
- }
691
- return node
692
- }
693
- const root = planNs(
694
- model.ir.tree,
695
- [],
696
- ["_config", "_auth", "_async_client", "_sync_client", "_stale_tracker", "is_stale", "aclose", "close"],
697
- )
698
-
699
- const body: string[] = []
700
- const invEntries = Object.entries(serviceMap).filter(([, v]) => v.invalidate && v.invalidate.length > 0)
701
- body.push("_INVALIDATION_MAP: dict[str, dict[str, Any]] = {")
702
- for (const [opId, entry] of invEntries) {
703
- body.push(` ${pyString(opId)}: {`)
704
- body.push(` "method": ${pyString(entry.method)},`)
705
- body.push(` "path": ${pyString(entry.path)},`)
706
- body.push(` "invalidate": [${(entry.invalidate ?? []).map(pyString).join(", ")}],`)
707
- body.push(` },`)
708
- }
709
- body.push("}")
710
- body.push("")
711
-
712
- /* children before parents so class names resolve at definition time */
713
- /* every resource holds the root SDK: nested resources reach config and clients directly */
714
- function emitAsync(node: PyClassNode): void {
715
- for (const c of node.children) emitAsync(c.node)
716
- if (node.path.length === 0) return
717
- body.push(`class ${node.asyncName}:`)
718
- body.push(` def __init__(self, _client: "AsyncSDK") -> None:`)
719
- body.push(` self._client = _client`)
720
- for (const c of node.children) body.push(` self.${c.attr} = ${c.node.asyncName}(_client)`)
721
- body.push("")
722
- for (const plan of node.plans) {
723
- body.push(...signature(plan, throwOnError, true))
724
- body.push(...docstring(plan.op))
725
- body.push(...methodBody(plan, throwOnError, true, false))
726
- body.push("")
727
- }
728
- body.push("")
729
- }
730
-
731
- function emitSync(node: PyClassNode): void {
732
- for (const c of node.children) emitSync(c.node)
733
- if (node.path.length === 0 || !hasSyncContent(node)) return
734
- body.push(`class ${node.syncName}:`)
735
- body.push(` def __init__(self, _client: "SDK") -> None:`)
736
- body.push(` self._client = _client`)
737
- for (const c of node.children) {
738
- if (hasSyncContent(c.node)) body.push(` self.${c.attr} = ${c.node.syncName}(_client)`)
739
- }
740
- body.push("")
741
- for (const plan of node.plans.filter((p) => isSyncCapable(p.op))) {
742
- body.push(...signature(plan, throwOnError, false))
743
- body.push(...docstring(plan.op))
744
- body.push(...methodBody(plan, throwOnError, false, false))
745
- body.push("")
746
- }
747
- body.push("")
748
- }
749
-
750
- emitAsync(root)
751
- emitSync(root)
752
-
753
- body.push("class SDK:")
754
- body.push(" def __init__(self, config: ClientConfig) -> None:")
755
- body.push(" self._config = config")
756
- body.push(" self._auth = _AuthState(config.bearer_token)")
757
- body.push(" self._sync_client = httpx.Client(")
758
- body.push(" transport=config.sync_transport,")
759
- body.push(" )")
760
- body.push(...trackerInit("_StaleTrackerSync"))
761
- for (const c of root.children) {
762
- if (hasSyncContent(c.node)) body.push(` self.${c.attr} = ${c.node.syncName}(self)`)
763
- }
764
- body.push("")
765
- body.push(" def close(self) -> None:")
766
- body.push(' """Closes the underlying HTTP client."""')
767
- body.push(" self._sync_client.close()")
768
- body.push("")
769
- body.push(" def is_stale(self, method: str, path: str) -> bool:")
770
- body.push(' """Returns True when (method, path) sits inside an active stale window."""')
771
- body.push(" return self._stale_tracker.is_stale(method, path)")
772
- body.push("")
773
- for (const plan of root.plans.filter((p) => isSyncCapable(p.op))) {
774
- body.push(...signature(plan, throwOnError, false))
775
- body.push(...docstring(plan.op))
776
- body.push(...methodBody(plan, throwOnError, false, true))
777
- body.push("")
778
- }
779
- body.push("")
780
-
781
- body.push("class AsyncSDK:")
782
- body.push(" def __init__(self, config: ClientConfig) -> None:")
783
- body.push(" self._config = config")
784
- body.push(" self._auth = _AuthState(config.bearer_token)")
785
- body.push(" self._async_client = httpx.AsyncClient(")
786
- body.push(" transport=config.transport,")
787
- body.push(" )")
788
- body.push(...trackerInit("_StaleTracker"))
789
- for (const c of root.children) body.push(` self.${c.attr} = ${c.node.asyncName}(self)`)
790
- body.push("")
791
- body.push(" async def aclose(self) -> None:")
792
- body.push(' """Closes the underlying HTTP client."""')
793
- body.push(" await self._async_client.aclose()")
794
- body.push("")
795
- body.push(" async def is_stale(self, method: str, path: str) -> bool:")
796
- body.push(' """Returns True when (method, path) sits inside an active stale window."""')
797
- body.push(" return await self._stale_tracker.is_stale(method, path)")
798
- body.push("")
799
- for (const plan of root.plans) {
800
- body.push(...signature(plan, throwOnError, true))
801
- body.push(...docstring(plan.op))
802
- body.push(...methodBody(plan, throwOnError, true, true))
803
- body.push("")
804
- }
805
-
806
- return body.join("\n")
807
- }
808
-
809
- function clientFile(bodyText: string, names: PyNames): string {
810
- const uses = (sym: string) => new RegExp(`(?<![\\w.])${sym.replace(/[.]/g, "\\.")}\\b`).test(bodyText)
811
- const imports: string[] = []
812
- if (/\bthreading\b/.test(bodyText)) imports.push("import threading")
813
- if (/\buuid\.uuid4\b/.test(bodyText)) imports.push("import uuid")
814
- imports.push("import httpx")
815
-
816
- const typingUsed = ["Any", "AsyncIterator", "Literal", "NotRequired", "TypedDict"].filter(uses)
817
- if (typingUsed.length > 0) imports.push(`from typing import ${typingUsed.join(", ")}`)
818
-
819
- for (const [mod, syms] of PY_CLIENT_IMPORTS) {
820
- const used = syms.filter(uses)
821
- if (used.length === 0) continue
822
- imports.push(`from ${mod} import (`)
823
- for (const s of used) imports.push(` ${s},`)
824
- imports.push(")")
825
- }
826
-
827
- const typeNames = [...names.schemaNames.values(), ...names.declOrder].filter(uses).sort(cmpCodeUnit)
828
- if (typeNames.length > 0) {
829
- imports.push("from .types import (")
830
- for (const n of typeNames) imports.push(` ${n},`)
831
- imports.push(")")
832
- }
833
-
834
- const out: string[] = []
835
- out.push("# ruff: noqa: E501")
836
- out.push(PYTHON_FUTURE)
837
- out.push("")
838
- out.push(...imports)
839
- out.push("")
840
- out.push(bodyText)
841
- out.push("")
842
- return out.join("\n")
843
- }
844
-
845
- function buildPyInit(names: PyNames): string {
846
- const typeNames = [...names.schemaNames.values()].sort(cmpCodeUnit)
847
-
848
- const l: string[] = []
849
- l.push(PYTHON_FUTURE)
850
- l.push("")
851
- l.push("from .client import AsyncSDK, SDK")
852
- l.push("from ._errors import (")
853
- for (const name of ERROR_CLASSES) l.push(` ${name},`)
854
- l.push(")")
855
- l.push("from ._runtime import ClientConfig, InvalidationConfig, PathParamError")
856
- l.push("from ._transport import (")
857
- for (const name of TRANSPORT_EXPORTS) l.push(` ${name},`)
858
- l.push(")")
859
- l.push("from ._realtime import (")
860
- for (const name of REALTIME_EXPORTS) l.push(` ${name},`)
861
- l.push(")")
862
- if (typeNames.length > 0) {
863
- l.push("from .types import (")
864
- for (const name of typeNames) l.push(` ${name},`)
865
- l.push(")")
866
- }
867
-
868
- l.push("")
869
- const allExports = [
870
- "AsyncSDK",
871
- "SDK",
872
- ...ERROR_CLASSES,
873
- "ClientConfig",
874
- "InvalidationConfig",
875
- "PathParamError",
876
- ...TRANSPORT_EXPORTS,
877
- ...REALTIME_EXPORTS,
878
- ...typeNames,
879
- ]
880
- l.push("__all__ = [")
881
- for (const name of allExports) l.push(` ${pyString(name)},`)
882
- l.push("]")
883
- l.push("")
884
- return l.join("\n")
885
- }
886
-
887
- function buildServiceMap(model: SdkModel): Record<string, ServiceMapEntry> {
888
- const result: Record<string, ServiceMapEntry> = Object.create(null)
889
- for (const op of model.ops) {
890
- result[op.id] = {
891
- invalidate: op.invalidates.length > 0 ? op.invalidates : undefined,
892
- method: op.method,
893
- operationId: op.id,
894
- path: op.path,
895
- }
896
- }
897
- return result
898
- }
899
-
900
- export function generatePythonSDK(spec: Record<string, unknown>, options: PySDKOptions = {}): PySDKResult {
901
- const templates = loadPythonRuntimeTemplates()
902
- const model = buildSdkModel(spec as unknown as OpenApiSpecInput)
903
- const serviceMap = buildServiceMap(model)
904
- const names = buildPyNames(model)
905
-
906
- const files: Record<string, string> = {}
907
- for (const [name, content] of templates) files[name] = content
908
-
909
- /* schema types claim their names first; the client then hoists into the same table */
910
- const schemaSource = buildPyTypes(model, names)
911
- files["client.py"] = clientFile(buildPyClient(model, names, options, serviceMap), names)
912
- files["types.py"] = typesFile(schemaSource, names)
913
- files["__init__.py"] = buildPyInit(names)
914
-
915
- return { files, serviceMap }
916
- }