stitchkit 0.93.0 → 0.94.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 (1082) hide show
  1. package/CHANGELOG.md +198 -0
  2. package/README.md +5 -2
  3. package/dist/agent-runtime/children-control.d.ts +6 -0
  4. package/dist/agent-runtime/children-control.d.ts.map +1 -0
  5. package/dist/agent-runtime/children-spawn.d.ts +6 -0
  6. package/dist/agent-runtime/children-spawn.d.ts.map +1 -0
  7. package/dist/agent-runtime/children-state.d.ts +46 -0
  8. package/dist/agent-runtime/children-state.d.ts.map +1 -0
  9. package/dist/agent-runtime/children-usage.d.ts +8 -0
  10. package/dist/agent-runtime/children-usage.d.ts.map +1 -0
  11. package/dist/agent-runtime/children.d.ts +11 -14
  12. package/dist/agent-runtime/children.d.ts.map +1 -1
  13. package/dist/agent-runtime/coding-shell-process.d.ts.map +1 -1
  14. package/dist/agent-runtime/coding-tool-contract.d.ts +2 -1
  15. package/dist/agent-runtime/coding-tool-contract.d.ts.map +1 -1
  16. package/dist/agent-runtime/coding-tool-listing.d.ts.map +1 -1
  17. package/dist/agent-runtime/coding-tool-search-patch.d.ts.map +1 -1
  18. package/dist/agent-runtime/contained-darwin.d.ts +38 -0
  19. package/dist/agent-runtime/contained-darwin.d.ts.map +1 -0
  20. package/dist/agent-runtime/contained-files.d.ts +11 -26
  21. package/dist/agent-runtime/contained-files.d.ts.map +1 -1
  22. package/dist/agent-runtime/contained-scan.d.ts +21 -0
  23. package/dist/agent-runtime/contained-scan.d.ts.map +1 -0
  24. package/dist/agent-runtime/contained-write.d.ts +9 -0
  25. package/dist/agent-runtime/contained-write.d.ts.map +1 -0
  26. package/dist/agent-runtime/deferred-tool-types.d.ts +4 -3
  27. package/dist/agent-runtime/deferred-tool-types.d.ts.map +1 -1
  28. package/dist/agent-runtime/events.d.ts +1 -1
  29. package/dist/agent-runtime/events.d.ts.map +1 -1
  30. package/dist/agent-runtime/harness-control.d.ts +0 -1
  31. package/dist/agent-runtime/harness-control.d.ts.map +1 -1
  32. package/dist/agent-runtime/harness.d.ts +0 -5
  33. package/dist/agent-runtime/harness.d.ts.map +1 -1
  34. package/dist/agent-runtime/managed-tools.d.ts +3 -2
  35. package/dist/agent-runtime/managed-tools.d.ts.map +1 -1
  36. package/dist/agent-runtime/observability.d.ts +1 -1
  37. package/dist/agent-runtime/observability.d.ts.map +1 -1
  38. package/dist/agent-runtime/openrouter.d.ts +29 -0
  39. package/dist/agent-runtime/openrouter.d.ts.map +1 -0
  40. package/dist/agent-runtime/projections.d.ts +1 -1
  41. package/dist/agent-runtime/projections.d.ts.map +1 -1
  42. package/dist/agent-runtime/run-acquisition.d.ts +17 -0
  43. package/dist/agent-runtime/run-acquisition.d.ts.map +1 -0
  44. package/dist/agent-runtime/run-execution-state.d.ts +133 -0
  45. package/dist/agent-runtime/run-execution-state.d.ts.map +1 -0
  46. package/dist/agent-runtime/run-execution.d.ts +17 -33
  47. package/dist/agent-runtime/run-execution.d.ts.map +1 -1
  48. package/dist/agent-runtime/run-failure.d.ts +18 -0
  49. package/dist/agent-runtime/run-failure.d.ts.map +1 -0
  50. package/dist/agent-runtime/run-model-attempts.d.ts +6 -0
  51. package/dist/agent-runtime/run-model-attempts.d.ts.map +1 -0
  52. package/dist/agent-runtime/run-prompt-history.d.ts +58 -0
  53. package/dist/agent-runtime/run-prompt-history.d.ts.map +1 -0
  54. package/dist/agent-runtime/run-provider-ledger.d.ts +26 -0
  55. package/dist/agent-runtime/run-provider-ledger.d.ts.map +1 -0
  56. package/dist/agent-runtime/run-stream-parts.d.ts +17 -0
  57. package/dist/agent-runtime/run-stream-parts.d.ts.map +1 -0
  58. package/dist/agent-runtime/run-terminal.d.ts +11 -0
  59. package/dist/agent-runtime/run-terminal.d.ts.map +1 -0
  60. package/dist/agent-runtime/run-turn-preparation.d.ts +22 -0
  61. package/dist/agent-runtime/run-turn-preparation.d.ts.map +1 -0
  62. package/dist/agent-runtime/runtime-admission-gate.d.ts +29 -0
  63. package/dist/agent-runtime/runtime-admission-gate.d.ts.map +1 -0
  64. package/dist/agent-runtime/runtime-control.d.ts +9 -0
  65. package/dist/agent-runtime/runtime-control.d.ts.map +1 -0
  66. package/dist/agent-runtime/runtime-recovery.d.ts +10 -0
  67. package/dist/agent-runtime/runtime-recovery.d.ts.map +1 -0
  68. package/dist/agent-runtime/runtime-state.d.ts +36 -0
  69. package/dist/agent-runtime/runtime-state.d.ts.map +1 -0
  70. package/dist/agent-runtime/runtime-submit.d.ts +5 -0
  71. package/dist/agent-runtime/runtime-submit.d.ts.map +1 -0
  72. package/dist/agent-runtime/runtime.d.ts +10 -5
  73. package/dist/agent-runtime/runtime.d.ts.map +1 -1
  74. package/dist/agent-runtime/schedule-records.d.ts +34 -0
  75. package/dist/agent-runtime/schedule-records.d.ts.map +1 -0
  76. package/dist/agent-runtime/schedules.d.ts +34 -0
  77. package/dist/agent-runtime/schedules.d.ts.map +1 -1
  78. package/dist/agent-runtime/sqlite-bun.d.ts +12 -0
  79. package/dist/agent-runtime/sqlite-bun.d.ts.map +1 -0
  80. package/dist/agent-runtime/sqlite-events.d.ts +5 -0
  81. package/dist/agent-runtime/sqlite-events.d.ts.map +1 -0
  82. package/dist/agent-runtime/sqlite-history.d.ts +7 -0
  83. package/dist/agent-runtime/sqlite-history.d.ts.map +1 -0
  84. package/dist/agent-runtime/sqlite-ledger.d.ts +7 -0
  85. package/dist/agent-runtime/sqlite-ledger.d.ts.map +1 -0
  86. package/dist/agent-runtime/sqlite-node.d.ts +12 -0
  87. package/dist/agent-runtime/sqlite-node.d.ts.map +1 -0
  88. package/dist/agent-runtime/sqlite-reads.d.ts +14 -0
  89. package/dist/agent-runtime/sqlite-reads.d.ts.map +1 -0
  90. package/dist/agent-runtime/sqlite-rows.d.ts +178 -0
  91. package/dist/agent-runtime/sqlite-rows.d.ts.map +1 -0
  92. package/dist/agent-runtime/sqlite-schema.d.ts +7 -0
  93. package/dist/agent-runtime/sqlite-schema.d.ts.map +1 -0
  94. package/dist/agent-runtime/sqlite-transactions.d.ts +25 -0
  95. package/dist/agent-runtime/sqlite-transactions.d.ts.map +1 -0
  96. package/dist/agent-runtime/sqlite.d.ts +10 -6
  97. package/dist/agent-runtime/sqlite.d.ts.map +1 -1
  98. package/dist/agent-runtime/store-archive.d.ts +16 -0
  99. package/dist/agent-runtime/store-archive.d.ts.map +1 -0
  100. package/dist/agent-runtime/store-conformance-lifecycle.d.ts +434 -0
  101. package/dist/agent-runtime/store-conformance-lifecycle.d.ts.map +1 -0
  102. package/dist/agent-runtime/store-conformance-ordering.d.ts +18 -0
  103. package/dist/agent-runtime/store-conformance-ordering.d.ts.map +1 -0
  104. package/dist/agent-runtime/store-conformance-support.d.ts +130 -0
  105. package/dist/agent-runtime/store-conformance-support.d.ts.map +1 -0
  106. package/dist/agent-runtime/store-conformance-terminal.d.ts +12 -0
  107. package/dist/agent-runtime/store-conformance-terminal.d.ts.map +1 -0
  108. package/dist/agent-runtime/store-conformance.d.ts +40 -0
  109. package/dist/agent-runtime/store-conformance.d.ts.map +1 -0
  110. package/dist/agent-runtime/store-create.d.ts +11 -0
  111. package/dist/agent-runtime/store-create.d.ts.map +1 -0
  112. package/dist/agent-runtime/store-driver-contract.d.ts +814 -0
  113. package/dist/agent-runtime/store-driver-contract.d.ts.map +1 -0
  114. package/dist/agent-runtime/store-events.d.ts +7 -89
  115. package/dist/agent-runtime/store-events.d.ts.map +1 -1
  116. package/dist/agent-runtime/store-memory.d.ts +4 -0
  117. package/dist/agent-runtime/store-memory.d.ts.map +1 -0
  118. package/dist/agent-runtime/store-mutate.d.ts +13 -0
  119. package/dist/agent-runtime/store-mutate.d.ts.map +1 -0
  120. package/dist/agent-runtime/store-purge.d.ts +1 -1
  121. package/dist/agent-runtime/store-purge.d.ts.map +1 -1
  122. package/dist/agent-runtime/store-reads.d.ts +29 -0
  123. package/dist/agent-runtime/store-reads.d.ts.map +1 -0
  124. package/dist/agent-runtime/store-reduce-history.d.ts +10 -0
  125. package/dist/agent-runtime/store-reduce-history.d.ts.map +1 -0
  126. package/dist/agent-runtime/store-reduce-run.d.ts +14 -0
  127. package/dist/agent-runtime/store-reduce-run.d.ts.map +1 -0
  128. package/dist/agent-runtime/store-reduce-shared.d.ts +76 -0
  129. package/dist/agent-runtime/store-reduce-shared.d.ts.map +1 -0
  130. package/dist/agent-runtime/store-reduce-terminal.d.ts +6 -0
  131. package/dist/agent-runtime/store-reduce-terminal.d.ts.map +1 -0
  132. package/dist/agent-runtime/store-reducer.d.ts +24 -0
  133. package/dist/agent-runtime/store-reducer.d.ts.map +1 -0
  134. package/dist/agent-runtime/store-snapshot.d.ts +19 -0
  135. package/dist/agent-runtime/store-snapshot.d.ts.map +1 -0
  136. package/dist/agent-runtime/store.d.ts +1 -1
  137. package/dist/agent-runtime/store.d.ts.map +1 -1
  138. package/dist/application/admission-rate.d.ts +21 -0
  139. package/dist/application/admission-rate.d.ts.map +1 -0
  140. package/dist/application/admission-run.d.ts +8 -0
  141. package/dist/application/admission-run.d.ts.map +1 -0
  142. package/dist/application/admission.d.ts +1 -1
  143. package/dist/application/admission.d.ts.map +1 -1
  144. package/dist/application/diagnostic-journal-lock.d.ts +9 -34
  145. package/dist/application/diagnostic-journal-lock.d.ts.map +1 -1
  146. package/dist/application/diagnostic-journal-manager.d.ts.map +1 -1
  147. package/dist/application/diagnostic-journal-storage.d.ts.map +1 -1
  148. package/dist/application/events.d.ts +1 -1
  149. package/dist/application/events.d.ts.map +1 -1
  150. package/dist/application/file-state-store.d.ts +23 -0
  151. package/dist/application/file-state-store.d.ts.map +1 -0
  152. package/dist/application/health.d.ts +1 -1
  153. package/dist/application/health.d.ts.map +1 -1
  154. package/dist/application/kernel-admission.d.ts +8 -0
  155. package/dist/application/kernel-admission.d.ts.map +1 -0
  156. package/dist/application/kernel-contract.d.ts +142 -0
  157. package/dist/application/kernel-contract.d.ts.map +1 -0
  158. package/dist/application/kernel-resource-context.d.ts +24 -0
  159. package/dist/application/kernel-resource-context.d.ts.map +1 -0
  160. package/dist/application/kernel-restart.d.ts +5 -0
  161. package/dist/application/kernel-restart.d.ts.map +1 -0
  162. package/dist/application/kernel-rollback.d.ts +4 -0
  163. package/dist/application/kernel-rollback.d.ts.map +1 -0
  164. package/dist/application/kernel-shutdown.d.ts +6 -0
  165. package/dist/application/kernel-shutdown.d.ts.map +1 -0
  166. package/dist/application/kernel-start.d.ts +20 -0
  167. package/dist/application/kernel-start.d.ts.map +1 -0
  168. package/dist/application/kernel-state.d.ts +116 -0
  169. package/dist/application/kernel-state.d.ts.map +1 -0
  170. package/dist/application/kernel.d.ts +9 -140
  171. package/dist/application/kernel.d.ts.map +1 -1
  172. package/dist/application/latest-sink.d.ts +1 -1
  173. package/dist/application/latest-sink.d.ts.map +1 -1
  174. package/dist/application/notification-outbox.d.ts.map +1 -1
  175. package/dist/application/opentelemetry.d.ts +1 -1
  176. package/dist/application/opentelemetry.d.ts.map +1 -1
  177. package/dist/application/schedule.d.ts +0 -1
  178. package/dist/application/schedule.d.ts.map +1 -1
  179. package/dist/application/watch-hub-core.d.ts +122 -0
  180. package/dist/application/watch-hub-core.d.ts.map +1 -0
  181. package/dist/application/watch-hub.d.ts +3 -3
  182. package/dist/application/watch-hub.d.ts.map +1 -1
  183. package/dist/browser/client-executors.d.ts +14 -0
  184. package/dist/browser/client-executors.d.ts.map +1 -0
  185. package/dist/browser/client-multipart.d.ts +1 -1
  186. package/dist/browser/client-multipart.d.ts.map +1 -1
  187. package/dist/browser/client-url.d.ts +1 -1
  188. package/dist/browser/client-url.d.ts.map +1 -1
  189. package/dist/browser/client.d.ts +3 -2
  190. package/dist/browser/client.d.ts.map +1 -1
  191. package/dist/browser/contract-stream.d.ts +1 -1
  192. package/dist/browser/contract-stream.d.ts.map +1 -1
  193. package/dist/browser/http-fetch.d.ts +22 -0
  194. package/dist/browser/http-fetch.d.ts.map +1 -0
  195. package/dist/browser/http.d.ts +2 -4
  196. package/dist/browser/http.d.ts.map +1 -1
  197. package/dist/browser/live-state-core.d.ts +63 -0
  198. package/dist/browser/live-state-core.d.ts.map +1 -0
  199. package/dist/browser/live-state.d.ts.map +1 -1
  200. package/dist/browser/realtime-client.d.ts +26 -0
  201. package/dist/browser/realtime-client.d.ts.map +1 -0
  202. package/dist/browser/resumable.d.ts +1 -28
  203. package/dist/browser/resumable.d.ts.map +1 -1
  204. package/dist/browser/retained.d.ts.map +1 -0
  205. package/dist/browser/socket-io-connection.d.ts +82 -0
  206. package/dist/browser/socket-io-connection.d.ts.map +1 -0
  207. package/dist/browser/socket-io-peer.d.ts +20 -0
  208. package/dist/browser/socket-io-peer.d.ts.map +1 -0
  209. package/dist/browser/socket-io-trace.d.ts +31 -0
  210. package/dist/browser/socket-io-trace.d.ts.map +1 -0
  211. package/dist/browser/socket-io.d.ts +24 -18
  212. package/dist/browser/socket-io.d.ts.map +1 -1
  213. package/dist/browser/stream.d.ts +14 -2
  214. package/dist/browser/stream.d.ts.map +1 -1
  215. package/dist/contract/client-types.d.ts +134 -0
  216. package/dist/contract/client-types.d.ts.map +1 -0
  217. package/dist/contract/define-validation.d.ts +30 -0
  218. package/dist/contract/define-validation.d.ts.map +1 -0
  219. package/dist/contract/define.d.ts +47 -394
  220. package/dist/contract/define.d.ts.map +1 -1
  221. package/dist/contract/normalize.d.ts +56 -0
  222. package/dist/contract/normalize.d.ts.map +1 -0
  223. package/dist/contract/runtime-context.d.ts +131 -0
  224. package/dist/contract/runtime-context.d.ts.map +1 -0
  225. package/dist/contract/tool-options.d.ts +105 -0
  226. package/dist/contract/tool-options.d.ts.map +1 -0
  227. package/dist/contract/tool-view.d.ts +148 -0
  228. package/dist/contract/tool-view.d.ts.map +1 -0
  229. package/dist/declaration/declaration.d.ts.map +1 -0
  230. package/dist/durability/contract.d.ts +259 -0
  231. package/dist/durability/contract.d.ts.map +1 -0
  232. package/dist/durability/effect.d.ts +24 -0
  233. package/dist/durability/effect.d.ts.map +1 -0
  234. package/dist/durability/engine.d.ts +14 -0
  235. package/dist/durability/engine.d.ts.map +1 -0
  236. package/dist/durability/events.d.ts +103 -0
  237. package/dist/durability/events.d.ts.map +1 -0
  238. package/dist/durability/json.d.ts +3 -0
  239. package/dist/durability/json.d.ts.map +1 -0
  240. package/dist/durability/ledger.d.ts +27 -0
  241. package/dist/durability/ledger.d.ts.map +1 -0
  242. package/dist/durability/parks.d.ts +22 -0
  243. package/dist/durability/parks.d.ts.map +1 -0
  244. package/dist/durability/scheduler.d.ts +30 -0
  245. package/dist/durability/scheduler.d.ts.map +1 -0
  246. package/dist/entrypoints/agent-runtime/browser.d.ts +5 -0
  247. package/dist/entrypoints/agent-runtime/browser.d.ts.map +1 -0
  248. package/dist/entrypoints/agent-runtime/browser.js +124 -0
  249. package/dist/entrypoints/agent-runtime/coding-tools.d.ts +2 -0
  250. package/dist/entrypoints/agent-runtime/coding-tools.d.ts.map +1 -0
  251. package/dist/entrypoints/agent-runtime/coding-tools.js +22 -0
  252. package/dist/entrypoints/agent-runtime/harness.d.ts +2 -0
  253. package/dist/entrypoints/agent-runtime/harness.d.ts.map +1 -0
  254. package/dist/entrypoints/agent-runtime/harness.js +739 -0
  255. package/dist/entrypoints/agent-runtime/openrouter.d.ts +2 -0
  256. package/dist/entrypoints/agent-runtime/openrouter.d.ts.map +1 -0
  257. package/dist/entrypoints/agent-runtime/openrouter.js +270 -0
  258. package/dist/entrypoints/agent-runtime/sandbox.d.ts +5 -0
  259. package/dist/entrypoints/agent-runtime/sandbox.d.ts.map +1 -0
  260. package/dist/entrypoints/agent-runtime/sandbox.js +797 -0
  261. package/dist/entrypoints/agent-runtime/sqlite/bun.d.ts +2 -0
  262. package/dist/entrypoints/agent-runtime/sqlite/bun.d.ts.map +1 -0
  263. package/dist/entrypoints/agent-runtime/sqlite/bun.js +44 -0
  264. package/dist/entrypoints/agent-runtime/sqlite/node.d.ts +2 -0
  265. package/dist/entrypoints/agent-runtime/sqlite/node.d.ts.map +1 -0
  266. package/dist/entrypoints/agent-runtime/sqlite/node.js +46 -0
  267. package/dist/entrypoints/agent-runtime/testing.d.ts +4 -0
  268. package/dist/entrypoints/agent-runtime/testing.d.ts.map +1 -0
  269. package/dist/entrypoints/agent-runtime/testing.js +1116 -0
  270. package/dist/entrypoints/agent-runtime.d.ts +42 -0
  271. package/dist/entrypoints/agent-runtime.d.ts.map +1 -0
  272. package/dist/entrypoints/agent-runtime.js +2670 -0
  273. package/dist/entrypoints/application/diagnostic-journal.d.ts +21 -0
  274. package/dist/entrypoints/application/diagnostic-journal.d.ts.map +1 -0
  275. package/dist/entrypoints/application/diagnostic-journal.js +492 -0
  276. package/dist/entrypoints/application/grammy.d.ts +2 -0
  277. package/dist/entrypoints/application/grammy.d.ts.map +1 -0
  278. package/dist/entrypoints/application/grammy.js +169 -0
  279. package/dist/entrypoints/application/opentelemetry.d.ts +2 -0
  280. package/dist/entrypoints/application/opentelemetry.d.ts.map +1 -0
  281. package/dist/entrypoints/application/opentelemetry.js +250 -0
  282. package/dist/entrypoints/application/schemas.d.ts +15 -0
  283. package/dist/entrypoints/application/schemas.d.ts.map +1 -0
  284. package/dist/entrypoints/application/schemas.js +27 -0
  285. package/dist/entrypoints/application.d.ts +23 -0
  286. package/dist/entrypoints/application.d.ts.map +1 -0
  287. package/dist/entrypoints/application.js +2016 -0
  288. package/dist/entrypoints/bin/upgrade-cli.d.ts.map +1 -0
  289. package/dist/entrypoints/bin/upgrade-cli.js +177 -0
  290. package/dist/entrypoints/cli.d.ts +44 -0
  291. package/dist/entrypoints/cli.d.ts.map +1 -0
  292. package/dist/entrypoints/cli.js +773 -0
  293. package/dist/entrypoints/contract.d.ts +12 -0
  294. package/dist/entrypoints/contract.d.ts.map +1 -0
  295. package/dist/entrypoints/contract.js +64 -0
  296. package/dist/entrypoints/declaration.d.ts +2 -0
  297. package/dist/entrypoints/declaration.d.ts.map +1 -0
  298. package/dist/entrypoints/declaration.js +183 -0
  299. package/dist/entrypoints/files.d.ts +5 -0
  300. package/dist/entrypoints/files.d.ts.map +1 -0
  301. package/dist/entrypoints/files.js +111 -0
  302. package/dist/entrypoints/geo.d.ts +3 -0
  303. package/dist/entrypoints/geo.d.ts.map +1 -0
  304. package/dist/entrypoints/geo.js +245 -0
  305. package/dist/entrypoints/google.d.ts +2 -0
  306. package/dist/entrypoints/google.d.ts.map +1 -0
  307. package/dist/entrypoints/google.js +175 -0
  308. package/dist/entrypoints/index.d.ts +17 -0
  309. package/dist/entrypoints/index.d.ts.map +1 -0
  310. package/dist/entrypoints/index.js +764 -0
  311. package/dist/entrypoints/live.d.ts +19 -0
  312. package/dist/entrypoints/live.d.ts.map +1 -0
  313. package/dist/entrypoints/live.js +302 -0
  314. package/dist/entrypoints/node.d.ts +19 -0
  315. package/dist/entrypoints/node.d.ts.map +1 -0
  316. package/dist/entrypoints/node.js +308 -0
  317. package/dist/entrypoints/oauth.d.ts +2 -0
  318. package/dist/entrypoints/oauth.d.ts.map +1 -0
  319. package/dist/entrypoints/oauth.js +170 -0
  320. package/dist/entrypoints/observability.d.ts +19 -0
  321. package/dist/entrypoints/observability.d.ts.map +1 -0
  322. package/dist/entrypoints/observability.js +567 -0
  323. package/dist/entrypoints/primitives.d.ts +3 -0
  324. package/dist/entrypoints/primitives.d.ts.map +1 -0
  325. package/dist/entrypoints/primitives.js +749 -0
  326. package/dist/entrypoints/react.d.ts +5 -0
  327. package/dist/entrypoints/react.d.ts.map +1 -0
  328. package/dist/entrypoints/react.js +403 -0
  329. package/dist/entrypoints/release.d.ts +15 -0
  330. package/dist/entrypoints/release.d.ts.map +1 -0
  331. package/dist/entrypoints/release.js +196 -0
  332. package/dist/entrypoints/remote.d.ts +9 -0
  333. package/dist/entrypoints/remote.d.ts.map +1 -0
  334. package/dist/entrypoints/remote.js +66 -0
  335. package/dist/entrypoints/server.d.ts +39 -0
  336. package/dist/entrypoints/server.d.ts.map +1 -0
  337. package/dist/entrypoints/server.js +2009 -0
  338. package/dist/entrypoints/telegram.d.ts +3 -0
  339. package/dist/entrypoints/telegram.d.ts.map +1 -0
  340. package/dist/entrypoints/telegram.js +224 -0
  341. package/dist/entrypoints/testing.d.ts +10 -0
  342. package/dist/entrypoints/testing.d.ts.map +1 -0
  343. package/dist/entrypoints/testing.js +1377 -0
  344. package/dist/entrypoints/tools/connections.d.ts +19 -0
  345. package/dist/entrypoints/tools/connections.d.ts.map +1 -0
  346. package/dist/entrypoints/tools/connections.js +1110 -0
  347. package/dist/entrypoints/tools/contract.d.ts +29 -0
  348. package/dist/entrypoints/tools/contract.d.ts.map +1 -0
  349. package/dist/entrypoints/tools/contract.js +24 -0
  350. package/dist/entrypoints/tools/invoker.d.ts +9 -0
  351. package/dist/entrypoints/tools/invoker.d.ts.map +1 -0
  352. package/dist/entrypoints/tools/invoker.js +20 -0
  353. package/dist/entrypoints/tools.d.ts +54 -0
  354. package/dist/entrypoints/tools.d.ts.map +1 -0
  355. package/dist/entrypoints/tools.js +3009 -0
  356. package/dist/entrypoints/tracking/server.d.ts +15 -0
  357. package/dist/entrypoints/tracking/server.d.ts.map +1 -0
  358. package/dist/entrypoints/tracking.d.ts +24 -0
  359. package/dist/entrypoints/tracking.d.ts.map +1 -0
  360. package/dist/entrypoints/tracking.js +1140 -0
  361. package/dist/files/boundary.d.ts.map +1 -1
  362. package/dist/files/file-io.d.ts +14 -0
  363. package/dist/files/file-io.d.ts.map +1 -0
  364. package/dist/google/google.d.ts.map +1 -0
  365. package/dist/index-0b1ess5e.js +38 -0
  366. package/dist/index-1j8pm5t0.js +412 -0
  367. package/dist/index-1zbbzgfh.js +89 -0
  368. package/dist/index-2bxbyab0.js +47 -0
  369. package/dist/index-2gxzjvyr.js +266 -0
  370. package/dist/index-35mh5bhj.js +177 -0
  371. package/dist/index-48ffdxgk.js +6 -0
  372. package/dist/index-4gcnakhx.js +82 -0
  373. package/dist/index-55hkhm67.js +343 -0
  374. package/dist/index-79z7m7dt.js +675 -0
  375. package/dist/index-7f68ghdn.js +3618 -0
  376. package/dist/index-7p1f0vp2.js +154 -0
  377. package/dist/index-83bdg97s.js +16 -0
  378. package/dist/index-863ea9jb.js +154 -0
  379. package/dist/index-8p52kd5p.js +242 -0
  380. package/dist/index-d9pk3td4.js +326 -0
  381. package/dist/index-dce5wxcq.js +63 -0
  382. package/dist/index-e01r054k.js +105 -0
  383. package/dist/index-ensd0r74.js +595 -0
  384. package/dist/index-eqqvgdb3.js +46 -0
  385. package/dist/index-gxrt5h6v.js +341 -0
  386. package/dist/index-h6eeys1v.js +211 -0
  387. package/dist/index-ham5sz8m.js +734 -0
  388. package/dist/index-het2he5g.js +1387 -0
  389. package/dist/index-hffjpmq9.js +30 -0
  390. package/dist/index-hmp4800j.js +51 -0
  391. package/dist/index-k30h66yd.js +317 -0
  392. package/dist/index-k5hsfc3j.js +31 -0
  393. package/dist/index-khtgb21r.js +92 -0
  394. package/dist/index-m9zn6cpq.js +51 -0
  395. package/dist/index-ndddxtyx.js +324 -0
  396. package/dist/index-ngfhvfpd.js +30 -0
  397. package/dist/index-np4m8hd3.js +1205 -0
  398. package/dist/index-p3vsv1fb.js +3493 -0
  399. package/dist/index-p5r7qpdd.js +85 -0
  400. package/dist/index-p9e0w8hs.js +1084 -0
  401. package/dist/index-p9sh0xx4.js +64 -0
  402. package/dist/index-paz6sgdp.js +371 -0
  403. package/dist/index-px2gm2jp.js +448 -0
  404. package/dist/index-qwhynv6x.js +103 -0
  405. package/dist/index-s812ycat.js +65 -0
  406. package/dist/index-sp1tzwnb.js +281 -0
  407. package/dist/index-t9rhjr9f.js +2306 -0
  408. package/dist/index-v260df89.js +342 -0
  409. package/dist/index-w906953s.js +946 -0
  410. package/dist/index-wdkt63w3.js +214 -0
  411. package/dist/index-wqgjfstn.js +18 -0
  412. package/dist/index-wsm5w4ee.js +1023 -0
  413. package/dist/index-xw3s75nj.js +100 -0
  414. package/dist/index-yw4fzmdz.js +268 -0
  415. package/dist/index-zfrhfn82.js +85 -0
  416. package/dist/index-znfs20ss.js +98 -0
  417. package/dist/internal/atomic-file.d.ts +23 -2
  418. package/dist/internal/atomic-file.d.ts.map +1 -1
  419. package/dist/internal/backoff.d.ts +29 -0
  420. package/dist/internal/backoff.d.ts.map +1 -0
  421. package/dist/internal/canonical-json.d.ts +21 -11
  422. package/dist/internal/canonical-json.d.ts.map +1 -1
  423. package/dist/internal/channel.d.ts.map +1 -0
  424. package/dist/internal/exclusive-lock.d.ts +51 -0
  425. package/dist/internal/exclusive-lock.d.ts.map +1 -0
  426. package/dist/internal/logger.d.ts.map +1 -0
  427. package/dist/internal/process-identity.d.ts +47 -0
  428. package/dist/internal/process-identity.d.ts.map +1 -0
  429. package/dist/internal/request.d.ts.map +1 -0
  430. package/dist/internal/stable-digest.d.ts +0 -43
  431. package/dist/internal/stable-digest.d.ts.map +1 -1
  432. package/dist/internal/typed.d.ts +0 -8
  433. package/dist/internal/typed.d.ts.map +1 -1
  434. package/dist/internal/with-exclusive-lock.d.ts +67 -0
  435. package/dist/internal/with-exclusive-lock.d.ts.map +1 -0
  436. package/dist/internal/zod-issues.d.ts +38 -0
  437. package/dist/internal/zod-issues.d.ts.map +1 -0
  438. package/dist/json-schema/dialect.d.ts +17 -0
  439. package/dist/json-schema/dialect.d.ts.map +1 -0
  440. package/dist/json-schema/json-schema.d.ts.map +1 -0
  441. package/dist/live/watch-client.d.ts.map +1 -1
  442. package/dist/live/watch-delta.d.ts.map +1 -1
  443. package/dist/oauth/authorization-code.d.ts +57 -0
  444. package/dist/oauth/authorization-code.d.ts.map +1 -0
  445. package/dist/observability/audit.d.ts +3 -3
  446. package/dist/observability/audit.d.ts.map +1 -1
  447. package/dist/observability/bounded-logger.d.ts +1 -1
  448. package/dist/observability/bounded-logger.d.ts.map +1 -1
  449. package/dist/observability/bounded-sink.d.ts +81 -0
  450. package/dist/observability/bounded-sink.d.ts.map +1 -0
  451. package/dist/observability/context.d.ts +1 -1
  452. package/dist/observability/context.d.ts.map +1 -1
  453. package/dist/observability/event.d.ts +2 -1
  454. package/dist/observability/event.d.ts.map +1 -1
  455. package/dist/observability/work.d.ts +1 -1
  456. package/dist/observability/work.d.ts.map +1 -1
  457. package/dist/primitives/audit.d.ts +1 -1
  458. package/dist/primitives/audit.d.ts.map +1 -1
  459. package/dist/primitives/export-operation.d.ts +4 -2
  460. package/dist/primitives/export-operation.d.ts.map +1 -1
  461. package/dist/realtime/registry.d.ts +0 -5
  462. package/dist/realtime/registry.d.ts.map +1 -1
  463. package/dist/realtime/socket.d.ts +1 -1
  464. package/dist/realtime/socket.d.ts.map +1 -1
  465. package/dist/server/bun.d.ts +0 -1
  466. package/dist/server/bun.d.ts.map +1 -1
  467. package/dist/server/context-contribution.d.ts +1 -1
  468. package/dist/server/context-contribution.d.ts.map +1 -1
  469. package/dist/server/context.d.ts +2 -2
  470. package/dist/server/context.d.ts.map +1 -1
  471. package/dist/server/contract-method.d.ts +15 -0
  472. package/dist/server/contract-method.d.ts.map +1 -0
  473. package/dist/server/contract-stream.d.ts +1 -1
  474. package/dist/server/contract-stream.d.ts.map +1 -1
  475. package/dist/server/create.d.ts +8 -0
  476. package/dist/server/create.d.ts.map +1 -1
  477. package/dist/server/endpoint-dispatch.d.ts +10 -0
  478. package/dist/server/endpoint-dispatch.d.ts.map +1 -0
  479. package/dist/server/endpoint-response.d.ts +19 -0
  480. package/dist/server/endpoint-response.d.ts.map +1 -0
  481. package/dist/server/error-dispatch.d.ts +17 -1
  482. package/dist/server/error-dispatch.d.ts.map +1 -1
  483. package/dist/server/error-hook.d.ts +2 -2
  484. package/dist/server/error-hook.d.ts.map +1 -1
  485. package/dist/server/handler-state.d.ts +44 -0
  486. package/dist/server/handler-state.d.ts.map +1 -0
  487. package/dist/server/implement-registry.d.ts +54 -0
  488. package/dist/server/implement-registry.d.ts.map +1 -0
  489. package/dist/server/implement.d.ts +9 -55
  490. package/dist/server/implement.d.ts.map +1 -1
  491. package/dist/server/middleware/auth.d.ts +1 -31
  492. package/dist/server/middleware/auth.d.ts.map +1 -1
  493. package/dist/server/middleware/cors.d.ts +17 -0
  494. package/dist/server/middleware/cors.d.ts.map +1 -1
  495. package/dist/server/middleware/jwt.d.ts +31 -0
  496. package/dist/server/middleware/jwt.d.ts.map +1 -0
  497. package/dist/server/middleware/trust-fence.d.ts +1 -1
  498. package/dist/server/middleware/trust-fence.d.ts.map +1 -1
  499. package/dist/server/multipart-reader.d.ts +22 -0
  500. package/dist/server/multipart-reader.d.ts.map +1 -0
  501. package/dist/server/multipart.d.ts +1 -1
  502. package/dist/server/multipart.d.ts.map +1 -1
  503. package/dist/server/oauth/cimd.d.ts +88 -0
  504. package/dist/server/oauth/cimd.d.ts.map +1 -0
  505. package/dist/server/oauth/endpoints.d.ts +39 -0
  506. package/dist/server/oauth/endpoints.d.ts.map +1 -0
  507. package/dist/server/oauth/metadata.d.ts +28 -0
  508. package/dist/server/oauth/metadata.d.ts.map +1 -0
  509. package/dist/server/oauth/provider.d.ts +117 -0
  510. package/dist/server/oauth/provider.d.ts.map +1 -0
  511. package/dist/server/realtime.d.ts +1 -1
  512. package/dist/server/realtime.d.ts.map +1 -1
  513. package/dist/server/request-completion.d.ts +16 -0
  514. package/dist/server/request-completion.d.ts.map +1 -0
  515. package/dist/server/response-metadata.d.ts +1 -1
  516. package/dist/server/response-metadata.d.ts.map +1 -1
  517. package/dist/server/route-table.d.ts +9 -0
  518. package/dist/server/route-table.d.ts.map +1 -0
  519. package/dist/server/stream.d.ts +0 -13
  520. package/dist/server/stream.d.ts.map +1 -1
  521. package/dist/server/streaming-pump.d.ts +66 -0
  522. package/dist/server/streaming-pump.d.ts.map +1 -0
  523. package/dist/server/streaming-route.d.ts +12 -5
  524. package/dist/server/streaming-route.d.ts.map +1 -1
  525. package/dist/server/types.d.ts +10 -4
  526. package/dist/server/types.d.ts.map +1 -1
  527. package/dist/server/unix-client-bun.d.ts.map +1 -1
  528. package/dist/server/unix-client-http1.d.ts +76 -0
  529. package/dist/server/unix-client-http1.d.ts.map +1 -0
  530. package/dist/server/unix-client.d.ts.map +1 -1
  531. package/dist/testing/handler-clients.d.ts +32 -0
  532. package/dist/testing/handler-clients.d.ts.map +1 -0
  533. package/dist/testing/managed-resource-conformance-scenarios.d.ts.map +1 -1
  534. package/dist/testing/realtime-probe.d.ts +33 -0
  535. package/dist/testing/realtime-probe.d.ts.map +1 -0
  536. package/dist/testing/surface-conformance.d.ts +2 -32
  537. package/dist/testing/surface-conformance.d.ts.map +1 -1
  538. package/dist/testing/surface-manifest-digest.d.ts +44 -0
  539. package/dist/testing/surface-manifest-digest.d.ts.map +1 -0
  540. package/dist/testing/surface-manifest.d.ts +30 -4
  541. package/dist/testing/surface-manifest.d.ts.map +1 -1
  542. package/dist/tools/agent.d.ts +1 -1
  543. package/dist/tools/agent.d.ts.map +1 -1
  544. package/dist/tools/cli/args-fields.d.ts +31 -0
  545. package/dist/tools/cli/args-fields.d.ts.map +1 -0
  546. package/dist/tools/cli/args-route.d.ts +42 -0
  547. package/dist/tools/cli/args-route.d.ts.map +1 -0
  548. package/dist/tools/cli/args-view.d.ts +32 -0
  549. package/dist/tools/cli/args-view.d.ts.map +1 -0
  550. package/dist/tools/cli/args.d.ts +80 -0
  551. package/dist/tools/cli/args.d.ts.map +1 -0
  552. package/dist/tools/cli/argument-error.d.ts +5 -0
  553. package/dist/tools/cli/argument-error.d.ts.map +1 -0
  554. package/dist/tools/cli/checkpoint.d.ts +24 -0
  555. package/dist/tools/cli/checkpoint.d.ts.map +1 -0
  556. package/dist/tools/cli/command.d.ts +70 -0
  557. package/dist/tools/cli/command.d.ts.map +1 -0
  558. package/dist/tools/cli/config.d.ts +90 -0
  559. package/dist/tools/cli/config.d.ts.map +1 -0
  560. package/dist/tools/cli/create-cli.d.ts +36 -0
  561. package/dist/tools/cli/create-cli.d.ts.map +1 -0
  562. package/dist/tools/cli/download.d.ts +8 -0
  563. package/dist/tools/cli/download.d.ts.map +1 -0
  564. package/dist/tools/cli/format.d.ts +50 -0
  565. package/dist/tools/cli/format.d.ts.map +1 -0
  566. package/dist/tools/cli/help.d.ts +24 -0
  567. package/dist/tools/cli/help.d.ts.map +1 -0
  568. package/dist/tools/cli/installer.d.ts +34 -0
  569. package/dist/tools/cli/installer.d.ts.map +1 -0
  570. package/dist/tools/cli/invoke.d.ts +144 -0
  571. package/dist/tools/cli/invoke.d.ts.map +1 -0
  572. package/dist/tools/cli/io.d.ts +10 -0
  573. package/dist/tools/cli/io.d.ts.map +1 -0
  574. package/dist/tools/cli/managed-surface.d.ts +30 -0
  575. package/dist/tools/cli/managed-surface.d.ts.map +1 -0
  576. package/dist/tools/cli/manifest.d.ts +80 -0
  577. package/dist/tools/cli/manifest.d.ts.map +1 -0
  578. package/dist/tools/cli/policy.d.ts +27 -0
  579. package/dist/tools/cli/policy.d.ts.map +1 -0
  580. package/dist/tools/cli/prepare.d.ts +14 -0
  581. package/dist/tools/cli/prepare.d.ts.map +1 -0
  582. package/dist/tools/cli/profile.d.ts +40 -0
  583. package/dist/tools/cli/profile.d.ts.map +1 -0
  584. package/dist/tools/cli/run-managed.d.ts +5 -0
  585. package/dist/tools/cli/run-managed.d.ts.map +1 -0
  586. package/dist/tools/cli/run-native.d.ts +9 -0
  587. package/dist/tools/cli/run-native.d.ts.map +1 -0
  588. package/dist/tools/cli/session.d.ts +40 -0
  589. package/dist/tools/cli/session.d.ts.map +1 -0
  590. package/dist/tools/cli/signature.d.ts +81 -0
  591. package/dist/tools/cli/signature.d.ts.map +1 -0
  592. package/dist/tools/cli/stream.d.ts +93 -0
  593. package/dist/tools/cli/stream.d.ts.map +1 -0
  594. package/dist/tools/cli/update.d.ts +145 -0
  595. package/dist/tools/cli/update.d.ts.map +1 -0
  596. package/dist/tools/cli/view.d.ts +12 -0
  597. package/dist/tools/cli/view.d.ts.map +1 -0
  598. package/dist/tools/cli/wait.d.ts +54 -0
  599. package/dist/tools/cli/wait.d.ts.map +1 -0
  600. package/dist/tools/connections/runtime.d.ts +1 -1
  601. package/dist/tools/connections/runtime.d.ts.map +1 -1
  602. package/dist/tools/connections/types.d.ts +3 -3
  603. package/dist/tools/connections/types.d.ts.map +1 -1
  604. package/dist/tools/durability-context.d.ts +1 -1
  605. package/dist/tools/durability-context.d.ts.map +1 -1
  606. package/dist/tools/execute-args.d.ts +23 -0
  607. package/dist/tools/execute-args.d.ts.map +1 -0
  608. package/dist/tools/execute-hooks.d.ts +146 -0
  609. package/dist/tools/execute-hooks.d.ts.map +1 -0
  610. package/dist/tools/execute-result.d.ts +40 -0
  611. package/dist/tools/execute-result.d.ts.map +1 -0
  612. package/dist/tools/execute.d.ts +31 -193
  613. package/dist/tools/execute.d.ts.map +1 -1
  614. package/dist/tools/internal/surface-projector.d.ts +9 -6
  615. package/dist/tools/internal/surface-projector.d.ts.map +1 -1
  616. package/dist/tools/internal/tool-view.d.ts +41 -0
  617. package/dist/tools/internal/tool-view.d.ts.map +1 -0
  618. package/dist/tools/invoker.d.ts +13 -4
  619. package/dist/tools/invoker.d.ts.map +1 -1
  620. package/dist/tools/lifecycle.d.ts +1 -1
  621. package/dist/tools/lifecycle.d.ts.map +1 -1
  622. package/dist/tools/list-names.d.ts +3 -3
  623. package/dist/tools/list-names.d.ts.map +1 -1
  624. package/dist/tools/manifest.d.ts +2 -2
  625. package/dist/tools/manifest.d.ts.map +1 -1
  626. package/dist/tools/mcp/app.d.ts +62 -0
  627. package/dist/tools/mcp/app.d.ts.map +1 -0
  628. package/dist/tools/mcp/catalog.d.ts +68 -0
  629. package/dist/tools/mcp/catalog.d.ts.map +1 -0
  630. package/dist/tools/mcp/handler.d.ts +46 -0
  631. package/dist/tools/mcp/handler.d.ts.map +1 -0
  632. package/dist/tools/mcp/mount.d.ts +152 -0
  633. package/dist/tools/mcp/mount.d.ts.map +1 -0
  634. package/dist/tools/mcp/prepare.d.ts +76 -0
  635. package/dist/tools/mcp/prepare.d.ts.map +1 -0
  636. package/dist/tools/mcp/progress.d.ts +46 -0
  637. package/dist/tools/mcp/progress.d.ts.map +1 -0
  638. package/dist/tools/mcp/register.d.ts +36 -0
  639. package/dist/tools/mcp/register.d.ts.map +1 -0
  640. package/dist/tools/mcp/round-context.d.ts +38 -0
  641. package/dist/tools/mcp/round-context.d.ts.map +1 -0
  642. package/dist/tools/mcp/round-policy.d.ts +33 -0
  643. package/dist/tools/mcp/round-policy.d.ts.map +1 -0
  644. package/dist/tools/mcp/round.d.ts +53 -0
  645. package/dist/tools/mcp/round.d.ts.map +1 -0
  646. package/dist/tools/mcp/runtime-tools.d.ts +25 -0
  647. package/dist/tools/mcp/runtime-tools.d.ts.map +1 -0
  648. package/dist/tools/mcp/stdio-signals.d.ts +33 -0
  649. package/dist/tools/mcp/stdio-signals.d.ts.map +1 -0
  650. package/dist/tools/mcp/stdio.d.ts +20 -0
  651. package/dist/tools/mcp/stdio.d.ts.map +1 -0
  652. package/dist/tools/mcp/trace.d.ts +12 -0
  653. package/dist/tools/mcp/trace.d.ts.map +1 -0
  654. package/dist/tools/mount.d.ts +14 -7
  655. package/dist/tools/mount.d.ts.map +1 -1
  656. package/dist/tools/native-definition.d.ts +4 -3
  657. package/dist/tools/native-definition.d.ts.map +1 -1
  658. package/dist/tools/operations/async-operation-binding-types.d.ts +127 -0
  659. package/dist/tools/operations/async-operation-binding-types.d.ts.map +1 -0
  660. package/dist/tools/operations/async-operation-binding.d.ts +28 -0
  661. package/dist/tools/operations/async-operation-binding.d.ts.map +1 -0
  662. package/dist/tools/operations/async-operation-canonical-types.d.ts +110 -0
  663. package/dist/tools/operations/async-operation-canonical-types.d.ts.map +1 -0
  664. package/dist/tools/operations/async-operation-canonical.d.ts +7 -0
  665. package/dist/tools/operations/async-operation-canonical.d.ts.map +1 -0
  666. package/dist/tools/operations/async-operation-contract.d.ts.map +1 -0
  667. package/dist/tools/operations/async-operation-id.d.ts +23 -0
  668. package/dist/tools/operations/async-operation-id.d.ts.map +1 -0
  669. package/dist/tools/operations/async-operation-runtime-tools.d.ts +41 -0
  670. package/dist/tools/operations/async-operation-runtime-tools.d.ts.map +1 -0
  671. package/dist/tools/operations/async-operation-runtime-types.d.ts +69 -0
  672. package/dist/tools/operations/async-operation-runtime-types.d.ts.map +1 -0
  673. package/dist/tools/operations/async-operation-runtime.d.ts +5 -0
  674. package/dist/tools/operations/async-operation-runtime.d.ts.map +1 -0
  675. package/dist/tools/operations/define-wait-tool.d.ts +22 -0
  676. package/dist/tools/operations/define-wait-tool.d.ts.map +1 -0
  677. package/dist/tools/operations/mount-wait.d.ts.map +1 -0
  678. package/dist/tools/operations/wait-core.d.ts.map +1 -0
  679. package/dist/tools/remote.d.ts +1 -1
  680. package/dist/tools/remote.d.ts.map +1 -1
  681. package/dist/tools/runtime-tool.d.ts +13 -4
  682. package/dist/tools/runtime-tool.d.ts.map +1 -1
  683. package/dist/tools/schema/coerce.d.ts.map +1 -0
  684. package/dist/tools/schema/flatten-join.d.ts.map +1 -0
  685. package/dist/tools/schema/flatten.d.ts.map +1 -0
  686. package/dist/tools/schema/portable-formats.d.ts.map +1 -0
  687. package/dist/tools/schema/presentation.d.ts +24 -0
  688. package/dist/tools/schema/presentation.d.ts.map +1 -0
  689. package/dist/tools/schema/schema.d.ts.map +1 -0
  690. package/dist/tools/schema/untyped-properties.d.ts.map +1 -0
  691. package/dist/tools/surface.d.ts +2 -3
  692. package/dist/tools/surface.d.ts.map +1 -1
  693. package/dist/tools/tool-logger.d.ts +1 -1
  694. package/dist/tools/tool-logger.d.ts.map +1 -1
  695. package/dist/tools/toolkit.d.ts +4 -4
  696. package/dist/tools/toolkit.d.ts.map +1 -1
  697. package/dist/tools/transfer/define-download-tool.d.ts +18 -0
  698. package/dist/tools/transfer/define-download-tool.d.ts.map +1 -0
  699. package/dist/tools/transfer/define-upload-tool.d.ts +16 -0
  700. package/dist/tools/transfer/define-upload-tool.d.ts.map +1 -0
  701. package/dist/tools/transfer/define-view-file-tool.d.ts +10 -0
  702. package/dist/tools/transfer/define-view-file-tool.d.ts.map +1 -0
  703. package/dist/tools/transfer/download-core.d.ts +20 -0
  704. package/dist/tools/transfer/download-core.d.ts.map +1 -0
  705. package/dist/tools/transfer/managed-file-error.d.ts +6 -0
  706. package/dist/tools/transfer/managed-file-error.d.ts.map +1 -0
  707. package/dist/tools/transfer/mount-download.d.ts +41 -0
  708. package/dist/tools/transfer/mount-download.d.ts.map +1 -0
  709. package/dist/tools/transfer/mount-upload.d.ts +21 -0
  710. package/dist/tools/transfer/mount-upload.d.ts.map +1 -0
  711. package/dist/tools/transfer/native-result.d.ts.map +1 -0
  712. package/dist/tools/transfer/upload-core.d.ts +4 -0
  713. package/dist/tools/transfer/upload-core.d.ts.map +1 -0
  714. package/dist/tools/transfer/view-file-contract.d.ts.map +1 -0
  715. package/dist/tools/transfer/view-file.d.ts +62 -0
  716. package/dist/tools/transfer/view-file.d.ts.map +1 -0
  717. package/dist/tools/transports.d.ts +1 -1
  718. package/dist/tools/transports.d.ts.map +1 -1
  719. package/dist/tracking/client-listeners.d.ts +30 -0
  720. package/dist/tracking/client-listeners.d.ts.map +1 -0
  721. package/dist/tracking/client-visit.d.ts +61 -0
  722. package/dist/tracking/client-visit.d.ts.map +1 -0
  723. package/dist/tracking/client.d.ts +3 -2
  724. package/dist/tracking/client.d.ts.map +1 -1
  725. package/dist/tracking/contract.d.ts +1 -1
  726. package/dist/tracking/contract.d.ts.map +1 -1
  727. package/llms/agent-runtime-browser.txt +33 -0
  728. package/llms/agent-runtime-coding-tools.txt +58 -0
  729. package/llms/agent-runtime-harness.txt +45 -0
  730. package/llms/agent-runtime-openrouter.txt +22 -0
  731. package/llms/agent-runtime-sandbox.txt +159 -0
  732. package/llms/agent-runtime-sqlite-bun.txt +29 -0
  733. package/llms/agent-runtime-sqlite-node.txt +26 -0
  734. package/llms/agent-runtime-testing.txt +30 -0
  735. package/llms/agent-runtime.2.txt +550 -0
  736. package/llms/agent-runtime.3.txt +311 -0
  737. package/llms/agent-runtime.txt +893 -0
  738. package/llms/application-diagnostic-journal.txt +30 -0
  739. package/llms/application-grammy.txt +27 -0
  740. package/llms/application-opentelemetry.txt +27 -0
  741. package/llms/application-schemas.txt +42 -0
  742. package/llms/application.2.txt +487 -0
  743. package/llms/application.txt +886 -0
  744. package/llms/cli.2.txt +80 -0
  745. package/llms/cli.txt +948 -0
  746. package/llms/contract.txt +606 -0
  747. package/llms/declaration.txt +286 -0
  748. package/llms/files.txt +33 -0
  749. package/llms/geo.txt +114 -0
  750. package/llms/google.txt +27 -0
  751. package/llms/live.txt +471 -0
  752. package/llms/node.txt +43 -0
  753. package/llms/oauth.txt +136 -0
  754. package/llms/observability.txt +893 -0
  755. package/llms/primitives.txt +158 -0
  756. package/llms/react.txt +184 -0
  757. package/llms/release.txt +176 -0
  758. package/llms/remote.txt +25 -0
  759. package/llms/server.2.txt +361 -0
  760. package/llms/server.3.txt +1031 -0
  761. package/llms/server.4.txt +905 -0
  762. package/llms/server.5.txt +250 -0
  763. package/llms/server.txt +996 -0
  764. package/llms/stitchkit.2.txt +836 -0
  765. package/llms/stitchkit.3.txt +147 -0
  766. package/llms/stitchkit.txt +260 -0
  767. package/llms/telegram.txt +30 -0
  768. package/llms/testing.txt +676 -0
  769. package/llms/tools-connections.txt +45 -0
  770. package/llms/tools-contract.txt +9 -0
  771. package/llms/tools-invoker.txt +9 -0
  772. package/llms/tools.2.txt +647 -0
  773. package/llms/tools.3.txt +288 -0
  774. package/llms/tools.txt +966 -0
  775. package/llms/tracking-server.txt +32 -0
  776. package/llms/tracking.txt +263 -0
  777. package/llms/upgrading-0.37.0-0.50.0.txt +947 -0
  778. package/llms/upgrading-0.53.0-0.67.0.txt +1174 -0
  779. package/llms/upgrading-0.68.0-0.94.0.txt +1159 -0
  780. package/llms/upgrading.txt +215 -0
  781. package/llms-full.txt +312 -77
  782. package/llms.txt +54 -5
  783. package/package.json +84 -83
  784. package/dist/agent-runtime/durability-contract.d.ts +0 -176
  785. package/dist/agent-runtime/durability-contract.d.ts.map +0 -1
  786. package/dist/agent-runtime/durability-json.d.ts +0 -3
  787. package/dist/agent-runtime/durability-json.d.ts.map +0 -1
  788. package/dist/agent-runtime/durability-ledger.d.ts +0 -16
  789. package/dist/agent-runtime/durability-ledger.d.ts.map +0 -1
  790. package/dist/agent-runtime/durability-scheduler.d.ts +0 -29
  791. package/dist/agent-runtime/durability-scheduler.d.ts.map +0 -1
  792. package/dist/agent-runtime/durability.d.ts +0 -14
  793. package/dist/agent-runtime/durability.d.ts.map +0 -1
  794. package/dist/agent-runtime/store-driver.d.ts +0 -814
  795. package/dist/agent-runtime/store-driver.d.ts.map +0 -1
  796. package/dist/agent-runtime-browser.d.ts +0 -5
  797. package/dist/agent-runtime-browser.d.ts.map +0 -1
  798. package/dist/agent-runtime-browser.js +0 -124
  799. package/dist/agent-runtime-coding-tools.d.ts +0 -2
  800. package/dist/agent-runtime-coding-tools.d.ts.map +0 -1
  801. package/dist/agent-runtime-coding-tools.js +0 -23
  802. package/dist/agent-runtime-harness.d.ts +0 -2
  803. package/dist/agent-runtime-harness.d.ts.map +0 -1
  804. package/dist/agent-runtime-harness.js +0 -729
  805. package/dist/agent-runtime-openrouter.d.ts +0 -29
  806. package/dist/agent-runtime-openrouter.d.ts.map +0 -1
  807. package/dist/agent-runtime-openrouter.js +0 -270
  808. package/dist/agent-runtime-sandbox.d.ts +0 -5
  809. package/dist/agent-runtime-sandbox.d.ts.map +0 -1
  810. package/dist/agent-runtime-sandbox.js +0 -798
  811. package/dist/agent-runtime-sqlite-bun.d.ts +0 -11
  812. package/dist/agent-runtime-sqlite-bun.d.ts.map +0 -1
  813. package/dist/agent-runtime-sqlite-bun.js +0 -42
  814. package/dist/agent-runtime-sqlite-node.d.ts +0 -11
  815. package/dist/agent-runtime-sqlite-node.d.ts.map +0 -1
  816. package/dist/agent-runtime-sqlite-node.js +0 -44
  817. package/dist/agent-runtime-testing.d.ts +0 -3
  818. package/dist/agent-runtime-testing.d.ts.map +0 -1
  819. package/dist/agent-runtime-testing.js +0 -156
  820. package/dist/agent-runtime.d.ts +0 -38
  821. package/dist/agent-runtime.d.ts.map +0 -1
  822. package/dist/agent-runtime.js +0 -2607
  823. package/dist/application/channel.d.ts.map +0 -1
  824. package/dist/application-diagnostic-journal.d.ts +0 -21
  825. package/dist/application-diagnostic-journal.d.ts.map +0 -1
  826. package/dist/application-diagnostic-journal.js +0 -632
  827. package/dist/application-grammy.d.ts +0 -2
  828. package/dist/application-grammy.d.ts.map +0 -1
  829. package/dist/application-grammy.js +0 -169
  830. package/dist/application-opentelemetry.d.ts +0 -2
  831. package/dist/application-opentelemetry.d.ts.map +0 -1
  832. package/dist/application-opentelemetry.js +0 -250
  833. package/dist/application-schemas.d.ts +0 -15
  834. package/dist/application-schemas.d.ts.map +0 -1
  835. package/dist/application-schemas.js +0 -27
  836. package/dist/application.d.ts +0 -22
  837. package/dist/application.d.ts.map +0 -1
  838. package/dist/application.js +0 -1977
  839. package/dist/cli.d.ts +0 -41
  840. package/dist/cli.d.ts.map +0 -1
  841. package/dist/cli.js +0 -753
  842. package/dist/contract/index.d.ts +0 -8
  843. package/dist/contract/index.d.ts.map +0 -1
  844. package/dist/contract/index.js +0 -55
  845. package/dist/declaration.d.ts.map +0 -1
  846. package/dist/declaration.js +0 -183
  847. package/dist/files.d.ts +0 -3
  848. package/dist/files.d.ts.map +0 -1
  849. package/dist/files.js +0 -15
  850. package/dist/geo.d.ts +0 -3
  851. package/dist/geo.d.ts.map +0 -1
  852. package/dist/geo.js +0 -245
  853. package/dist/google.d.ts.map +0 -1
  854. package/dist/google.js +0 -175
  855. package/dist/index-0a349c33.js +0 -470
  856. package/dist/index-0j3vcp5m.js +0 -28
  857. package/dist/index-2c2bjw3s.js +0 -51
  858. package/dist/index-2na0qrfn.js +0 -214
  859. package/dist/index-2qzskm8h.js +0 -63
  860. package/dist/index-3bmnp41g.js +0 -2169
  861. package/dist/index-3xwxfj4z.js +0 -334
  862. package/dist/index-4fpa9dy2.js +0 -51
  863. package/dist/index-6kyksz9y.js +0 -268
  864. package/dist/index-77fekveh.js +0 -44
  865. package/dist/index-7gnkny4z.js +0 -326
  866. package/dist/index-7zbps32p.js +0 -89
  867. package/dist/index-9f8ztey6.js +0 -588
  868. package/dist/index-a11g2kry.js +0 -866
  869. package/dist/index-a916km3r.js +0 -45
  870. package/dist/index-actkayzn.js +0 -367
  871. package/dist/index-bn2cjajt.js +0 -524
  872. package/dist/index-bx75zwt7.js +0 -63
  873. package/dist/index-cby4ar3v.js +0 -46
  874. package/dist/index-cnyk6te3.js +0 -77
  875. package/dist/index-cxqhvq21.js +0 -413
  876. package/dist/index-e0znv5gn.js +0 -176
  877. package/dist/index-e42wzzz5.js +0 -154
  878. package/dist/index-f477k430.js +0 -324
  879. package/dist/index-f9mb610r.js +0 -177
  880. package/dist/index-fadnxwna.js +0 -1046
  881. package/dist/index-fq77yfzc.js +0 -1303
  882. package/dist/index-h9etkkyk.js +0 -1126
  883. package/dist/index-hrbajay7.js +0 -1196
  884. package/dist/index-kw9t5ayn.js +0 -507
  885. package/dist/index-mzvgxp0n.js +0 -80
  886. package/dist/index-n0f51dfn.js +0 -3170
  887. package/dist/index-p13mwz16.js +0 -16
  888. package/dist/index-s8cnx02s.js +0 -90
  889. package/dist/index-sr93cwf9.js +0 -325
  890. package/dist/index-tmwcrptx.js +0 -85
  891. package/dist/index-v5573g1k.js +0 -142
  892. package/dist/index-vjpvjqpn.js +0 -86
  893. package/dist/index-vk3kq9sb.js +0 -3344
  894. package/dist/index-wc4x00bn.js +0 -103
  895. package/dist/index-wnfk50r0.js +0 -211
  896. package/dist/index-yewwh1w4.js +0 -647
  897. package/dist/index-yn8remb1.js +0 -290
  898. package/dist/index-ywd0y6m1.js +0 -394
  899. package/dist/index-zwkgfq1s.js +0 -345
  900. package/dist/index.d.ts +0 -14
  901. package/dist/index.d.ts.map +0 -1
  902. package/dist/index.js +0 -632
  903. package/dist/internal/errors.d.ts +0 -92
  904. package/dist/internal/errors.d.ts.map +0 -1
  905. package/dist/internal/observability-sink.d.ts +0 -81
  906. package/dist/internal/observability-sink.d.ts.map +0 -1
  907. package/dist/live.d.ts +0 -19
  908. package/dist/live.d.ts.map +0 -1
  909. package/dist/live.js +0 -282
  910. package/dist/logger.d.ts.map +0 -1
  911. package/dist/node.d.ts +0 -18
  912. package/dist/node.d.ts.map +0 -1
  913. package/dist/node.js +0 -303
  914. package/dist/oauth.d.ts +0 -57
  915. package/dist/oauth.d.ts.map +0 -1
  916. package/dist/oauth.js +0 -170
  917. package/dist/observability/index.d.ts +0 -19
  918. package/dist/observability/index.d.ts.map +0 -1
  919. package/dist/observability/index.js +0 -569
  920. package/dist/primitives.d.ts +0 -3
  921. package/dist/primitives.d.ts.map +0 -1
  922. package/dist/primitives.js +0 -754
  923. package/dist/react.d.ts +0 -5
  924. package/dist/react.d.ts.map +0 -1
  925. package/dist/react.js +0 -403
  926. package/dist/release.d.ts +0 -15
  927. package/dist/release.d.ts.map +0 -1
  928. package/dist/release.js +0 -196
  929. package/dist/remote.d.ts +0 -9
  930. package/dist/remote.d.ts.map +0 -1
  931. package/dist/remote.js +0 -88
  932. package/dist/retained.d.ts.map +0 -1
  933. package/dist/server/file-state-store.d.ts +0 -23
  934. package/dist/server/file-state-store.d.ts.map +0 -1
  935. package/dist/server/index.d.ts +0 -36
  936. package/dist/server/index.d.ts.map +0 -1
  937. package/dist/server/index.js +0 -1745
  938. package/dist/server/request.d.ts.map +0 -1
  939. package/dist/telegram.d.ts +0 -3
  940. package/dist/telegram.d.ts.map +0 -1
  941. package/dist/telegram.js +0 -224
  942. package/dist/testing/agent-store-conformance.d.ts +0 -40
  943. package/dist/testing/agent-store-conformance.d.ts.map +0 -1
  944. package/dist/testing.d.ts +0 -39
  945. package/dist/testing.d.ts.map +0 -1
  946. package/dist/testing.js +0 -2209
  947. package/dist/tool-invoker.d.ts +0 -9
  948. package/dist/tool-invoker.d.ts.map +0 -1
  949. package/dist/tool-invoker.js +0 -21
  950. package/dist/tools/async-operation-contract.d.ts.map +0 -1
  951. package/dist/tools/async-operation.d.ts +0 -332
  952. package/dist/tools/async-operation.d.ts.map +0 -1
  953. package/dist/tools/cli-args.d.ts +0 -143
  954. package/dist/tools/cli-args.d.ts.map +0 -1
  955. package/dist/tools/cli-checkpoint.d.ts +0 -24
  956. package/dist/tools/cli-checkpoint.d.ts.map +0 -1
  957. package/dist/tools/cli-command.d.ts +0 -70
  958. package/dist/tools/cli-command.d.ts.map +0 -1
  959. package/dist/tools/cli-format.d.ts +0 -49
  960. package/dist/tools/cli-format.d.ts.map +0 -1
  961. package/dist/tools/cli-installer.d.ts +0 -34
  962. package/dist/tools/cli-installer.d.ts.map +0 -1
  963. package/dist/tools/cli-invoke.d.ts +0 -143
  964. package/dist/tools/cli-invoke.d.ts.map +0 -1
  965. package/dist/tools/cli-manifest.d.ts +0 -80
  966. package/dist/tools/cli-manifest.d.ts.map +0 -1
  967. package/dist/tools/cli-policy.d.ts +0 -27
  968. package/dist/tools/cli-policy.d.ts.map +0 -1
  969. package/dist/tools/cli-profile.d.ts +0 -40
  970. package/dist/tools/cli-profile.d.ts.map +0 -1
  971. package/dist/tools/cli-signature.d.ts +0 -81
  972. package/dist/tools/cli-signature.d.ts.map +0 -1
  973. package/dist/tools/cli-stream.d.ts +0 -93
  974. package/dist/tools/cli-stream.d.ts.map +0 -1
  975. package/dist/tools/cli-update.d.ts +0 -126
  976. package/dist/tools/cli-update.d.ts.map +0 -1
  977. package/dist/tools/cli-view.d.ts +0 -12
  978. package/dist/tools/cli-view.d.ts.map +0 -1
  979. package/dist/tools/cli-wait.d.ts +0 -54
  980. package/dist/tools/cli-wait.d.ts.map +0 -1
  981. package/dist/tools/cli.d.ts +0 -94
  982. package/dist/tools/cli.d.ts.map +0 -1
  983. package/dist/tools/coerce.d.ts.map +0 -1
  984. package/dist/tools/connections/index.d.ts +0 -20
  985. package/dist/tools/connections/index.d.ts.map +0 -1
  986. package/dist/tools/connections/index.js +0 -1107
  987. package/dist/tools/define-download-tool.d.ts +0 -18
  988. package/dist/tools/define-download-tool.d.ts.map +0 -1
  989. package/dist/tools/define-upload-tool.d.ts +0 -16
  990. package/dist/tools/define-upload-tool.d.ts.map +0 -1
  991. package/dist/tools/define-view-file-tool.d.ts +0 -10
  992. package/dist/tools/define-view-file-tool.d.ts.map +0 -1
  993. package/dist/tools/define-wait-tool.d.ts +0 -22
  994. package/dist/tools/define-wait-tool.d.ts.map +0 -1
  995. package/dist/tools/download-core.d.ts +0 -20
  996. package/dist/tools/download-core.d.ts.map +0 -1
  997. package/dist/tools/flatten-join.d.ts.map +0 -1
  998. package/dist/tools/flatten.d.ts.map +0 -1
  999. package/dist/tools/json-schema-dialect.d.ts +0 -17
  1000. package/dist/tools/json-schema-dialect.d.ts.map +0 -1
  1001. package/dist/tools/json-schema.d.ts.map +0 -1
  1002. package/dist/tools/managed-file-error.d.ts +0 -6
  1003. package/dist/tools/managed-file-error.d.ts.map +0 -1
  1004. package/dist/tools/mcp-app.d.ts +0 -62
  1005. package/dist/tools/mcp-app.d.ts.map +0 -1
  1006. package/dist/tools/mcp-catalog.d.ts +0 -68
  1007. package/dist/tools/mcp-catalog.d.ts.map +0 -1
  1008. package/dist/tools/mcp-handler.d.ts +0 -46
  1009. package/dist/tools/mcp-handler.d.ts.map +0 -1
  1010. package/dist/tools/mcp-prepare.d.ts +0 -75
  1011. package/dist/tools/mcp-prepare.d.ts.map +0 -1
  1012. package/dist/tools/mcp-progress.d.ts +0 -46
  1013. package/dist/tools/mcp-progress.d.ts.map +0 -1
  1014. package/dist/tools/mcp-round-policy.d.ts +0 -33
  1015. package/dist/tools/mcp-round-policy.d.ts.map +0 -1
  1016. package/dist/tools/mcp-round.d.ts +0 -61
  1017. package/dist/tools/mcp-round.d.ts.map +0 -1
  1018. package/dist/tools/mcp-stdio-signals.d.ts +0 -33
  1019. package/dist/tools/mcp-stdio-signals.d.ts.map +0 -1
  1020. package/dist/tools/mcp-stdio.d.ts +0 -20
  1021. package/dist/tools/mcp-stdio.d.ts.map +0 -1
  1022. package/dist/tools/mcp-trace.d.ts +0 -12
  1023. package/dist/tools/mcp-trace.d.ts.map +0 -1
  1024. package/dist/tools/mcp.d.ts +0 -152
  1025. package/dist/tools/mcp.d.ts.map +0 -1
  1026. package/dist/tools/mount-download.d.ts +0 -41
  1027. package/dist/tools/mount-download.d.ts.map +0 -1
  1028. package/dist/tools/mount-upload.d.ts +0 -21
  1029. package/dist/tools/mount-upload.d.ts.map +0 -1
  1030. package/dist/tools/mount-wait.d.ts.map +0 -1
  1031. package/dist/tools/native-mcp.d.ts +0 -20
  1032. package/dist/tools/native-mcp.d.ts.map +0 -1
  1033. package/dist/tools/native-result.d.ts.map +0 -1
  1034. package/dist/tools/oauth-metadata.d.ts +0 -28
  1035. package/dist/tools/oauth-metadata.d.ts.map +0 -1
  1036. package/dist/tools/oauth-provider.d.ts +0 -184
  1037. package/dist/tools/oauth-provider.d.ts.map +0 -1
  1038. package/dist/tools/portable-formats.d.ts.map +0 -1
  1039. package/dist/tools/presentation.d.ts +0 -22
  1040. package/dist/tools/presentation.d.ts.map +0 -1
  1041. package/dist/tools/schema.d.ts.map +0 -1
  1042. package/dist/tools/untyped-properties.d.ts.map +0 -1
  1043. package/dist/tools/upload-core.d.ts +0 -4
  1044. package/dist/tools/upload-core.d.ts.map +0 -1
  1045. package/dist/tools/view-file-contract.d.ts.map +0 -1
  1046. package/dist/tools/view-file.d.ts +0 -62
  1047. package/dist/tools/view-file.d.ts.map +0 -1
  1048. package/dist/tools/wait-core.d.ts.map +0 -1
  1049. package/dist/tools-contract.d.ts +0 -29
  1050. package/dist/tools-contract.d.ts.map +0 -1
  1051. package/dist/tools-contract.js +0 -24
  1052. package/dist/tools.d.ts +0 -50
  1053. package/dist/tools.d.ts.map +0 -1
  1054. package/dist/tools.js +0 -2930
  1055. package/dist/tracking-server.d.ts +0 -15
  1056. package/dist/tracking-server.d.ts.map +0 -1
  1057. package/dist/tracking.d.ts +0 -24
  1058. package/dist/tracking.d.ts.map +0 -1
  1059. package/dist/tracking.js +0 -1092
  1060. package/dist/upgrade-cli.d.ts.map +0 -1
  1061. package/dist/upgrade-cli.js +0 -177
  1062. /package/dist/{retained.d.ts → browser/retained.d.ts} +0 -0
  1063. /package/dist/{declaration.d.ts → declaration/declaration.d.ts} +0 -0
  1064. /package/dist/{upgrade-cli.d.ts → entrypoints/bin/upgrade-cli.d.ts} +0 -0
  1065. /package/dist/{tracking-server.js → entrypoints/tracking/server.js} +0 -0
  1066. /package/dist/{google.d.ts → google/google.d.ts} +0 -0
  1067. /package/dist/{index-pq95qkbf.js → index-5jm36zv1.js} +0 -0
  1068. /package/dist/{application → internal}/channel.d.ts +0 -0
  1069. /package/dist/{logger.d.ts → internal/logger.d.ts} +0 -0
  1070. /package/dist/{server → internal}/request.d.ts +0 -0
  1071. /package/dist/{tools → json-schema}/json-schema.d.ts +0 -0
  1072. /package/dist/tools/{async-operation-contract.d.ts → operations/async-operation-contract.d.ts} +0 -0
  1073. /package/dist/tools/{mount-wait.d.ts → operations/mount-wait.d.ts} +0 -0
  1074. /package/dist/tools/{wait-core.d.ts → operations/wait-core.d.ts} +0 -0
  1075. /package/dist/tools/{coerce.d.ts → schema/coerce.d.ts} +0 -0
  1076. /package/dist/tools/{flatten-join.d.ts → schema/flatten-join.d.ts} +0 -0
  1077. /package/dist/tools/{flatten.d.ts → schema/flatten.d.ts} +0 -0
  1078. /package/dist/tools/{portable-formats.d.ts → schema/portable-formats.d.ts} +0 -0
  1079. /package/dist/tools/{schema.d.ts → schema/schema.d.ts} +0 -0
  1080. /package/dist/tools/{untyped-properties.d.ts → schema/untyped-properties.d.ts} +0 -0
  1081. /package/dist/tools/{native-result.d.ts → transfer/native-result.d.ts} +0 -0
  1082. /package/dist/tools/{view-file-contract.d.ts → transfer/view-file-contract.d.ts} +0 -0
@@ -0,0 +1,2009 @@
1
+ import {
2
+ DEFAULT_STREAM_HEARTBEAT_MS,
3
+ UnixClientTransportError,
4
+ bindProcessSignals,
5
+ bindRealtimeServer,
6
+ composeWebSocketHandlers,
7
+ contextContributionDelta,
8
+ createHandler,
9
+ createImplementRegistry,
10
+ createScopedImplementRegistry,
11
+ createSocketIOServer,
12
+ createUnixClientTransport,
13
+ implementRegistry,
14
+ mergeContextContribution,
15
+ ndjsonRoute,
16
+ parseMultipart,
17
+ prepareContextContribution,
18
+ socketIoLane,
19
+ sseRoute,
20
+ streamingRoute,
21
+ webSocketLane
22
+ } from "../index-p3vsv1fb.js";
23
+ import"../index-y91ry9h2.js";
24
+ import {
25
+ withDeadline
26
+ } from "../index-b9aefrqd.js";
27
+ import {
28
+ ShutdownOptionsSchema,
29
+ ShutdownResultSchema,
30
+ ShutdownStateSchema,
31
+ ShutdownStatusSchema,
32
+ createServerLifecycle
33
+ } from "../index-3z73fh2c.js";
34
+ import"../index-ndddxtyx.js";
35
+ import"../index-dce5wxcq.js";
36
+ import {
37
+ inputIsQuery
38
+ } from "../index-48ffdxgk.js";
39
+ import"../index-7p1f0vp2.js";
40
+ import {
41
+ DEFAULT_CONTRACT_STREAM_FRAME_BYTES
42
+ } from "../index-wqgjfstn.js";
43
+ import {
44
+ signJwt,
45
+ verifyJwt,
46
+ verifyPkce
47
+ } from "../index-e01r054k.js";
48
+ import {
49
+ deriveCodeChallenge
50
+ } from "../index-hr4tzbwq.js";
51
+ import {
52
+ DEFAULT_CORS_ALLOW_HEADERS,
53
+ DEFAULT_CORS_EXPOSE_HEADERS,
54
+ corsHeaders,
55
+ corsPreflightResponse,
56
+ createImplement,
57
+ createMultipartStream,
58
+ createScopedImplement,
59
+ defineMultipartStream,
60
+ implement
61
+ } from "../index-2gxzjvyr.js";
62
+ import"../index-2bxbyab0.js";
63
+ import"../index-rxfy4cq7.js";
64
+ import"../index-k30h66yd.js";
65
+ import {
66
+ joinRoutePath,
67
+ parseTrailingWildcard
68
+ } from "../index-4gcnakhx.js";
69
+ import"../index-6k1937bx.js";
70
+ import {
71
+ isWithinDir,
72
+ realPathWithinDir
73
+ } from "../index-sbdmyz75.js";
74
+ import {
75
+ getTraceId
76
+ } from "../index-zfrhfn82.js";
77
+ import {
78
+ extractIp,
79
+ generateTraceId,
80
+ getClientInfo,
81
+ isPublicIp,
82
+ resolveSocketIp,
83
+ resolveTraceId
84
+ } from "../index-35mh5bhj.js";
85
+ import"../index-zcgf3gqf.js";
86
+ import {
87
+ jsonSchemaFields,
88
+ toJsonSchema
89
+ } from "../index-eqqvgdb3.js";
90
+ import {
91
+ errorCode,
92
+ normalizeError
93
+ } from "../index-znfs20ss.js";
94
+ import {
95
+ formatZodError,
96
+ zodIssues
97
+ } from "../index-p5r7qpdd.js";
98
+ import {
99
+ AppError,
100
+ STITCH_ERROR_STATUS,
101
+ appError,
102
+ badRequest,
103
+ conflict,
104
+ forbidden,
105
+ isStitchErrorCode,
106
+ notFound,
107
+ rateLimited,
108
+ unauthorized
109
+ } from "../index-2vtcmrj9.js";
110
+ import {
111
+ isUnsafeKey
112
+ } from "../index-kzfs85xp.js";
113
+ import {
114
+ isRecord
115
+ } from "../index-hffjpmq9.js";
116
+
117
+ // src/application/file-state-store.ts
118
+ import { mkdir, open, readdir, readFile, rename, stat, unlink } from "node:fs/promises";
119
+ import { basename, dirname, join } from "node:path";
120
+ var ABANDONED_LOCK_MULTIPLIER = 10;
121
+ var ABANDONED_HEARTBEATS = 30;
122
+ var MIN_HEARTBEAT_MS = 10;
123
+ var delay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
124
+ async function missing(error) {
125
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
126
+ }
127
+ function existing(error) {
128
+ return error instanceof Error && "code" in error && error.code === "EEXIST";
129
+ }
130
+ async function ownerState(lockPath) {
131
+ let owner;
132
+ try {
133
+ owner = JSON.parse(await readFile(lockPath, "utf8"));
134
+ } catch {
135
+ return "unknown";
136
+ }
137
+ if (typeof owner !== "object" || owner === null || !("pid" in owner) || typeof owner.pid !== "number" || !Number.isSafeInteger(owner.pid) || owner.pid <= 0) {
138
+ return "unknown";
139
+ }
140
+ try {
141
+ process.kill(owner.pid, 0);
142
+ return "alive";
143
+ } catch (error) {
144
+ return error instanceof Error && "code" in error && error.code === "ESRCH" ? "gone" : "unknown";
145
+ }
146
+ }
147
+ async function sweepTemporaries(path, staleLockMs) {
148
+ const prefix = `${basename(path)}.tmp.`;
149
+ const directory = dirname(path);
150
+ let entries;
151
+ try {
152
+ entries = await readdir(directory);
153
+ } catch {
154
+ return;
155
+ }
156
+ for (const entry of entries) {
157
+ if (!entry.startsWith(prefix))
158
+ continue;
159
+ const candidate = join(directory, entry);
160
+ const info = await stat(candidate).catch(() => null);
161
+ if (info && Date.now() - info.mtimeMs > staleLockMs) {
162
+ await unlink(candidate).catch(() => {
163
+ return;
164
+ });
165
+ }
166
+ }
167
+ }
168
+ async function reclaim(lockPath, observed, staleLockMs, abandonedAfterMs) {
169
+ const guardPath = `${lockPath}.reclaim`;
170
+ let guard;
171
+ try {
172
+ guard = await open(guardPath, "wx");
173
+ } catch (error) {
174
+ if (!existing(error))
175
+ throw error;
176
+ const orphan = await stat(guardPath).catch(() => null);
177
+ if (orphan && Date.now() - orphan.mtimeMs > staleLockMs) {
178
+ await unlink(guardPath).catch(() => {
179
+ return;
180
+ });
181
+ }
182
+ return false;
183
+ }
184
+ try {
185
+ const current = await stat(lockPath).catch(() => null);
186
+ if (!current || current.dev !== observed.dev || current.ino !== observed.ino || current.mtimeMs !== observed.mtimeMs) {
187
+ return false;
188
+ }
189
+ const owner = await ownerState(lockPath);
190
+ const age = Date.now() - current.mtimeMs;
191
+ if (owner !== "gone" && age < abandonedAfterMs)
192
+ return false;
193
+ await unlink(lockPath);
194
+ return true;
195
+ } finally {
196
+ await guard.close().catch(() => {
197
+ return;
198
+ });
199
+ await unlink(guardPath).catch(() => {
200
+ return;
201
+ });
202
+ }
203
+ }
204
+ function createFileStateStore(path, options) {
205
+ const lockPath = `${path}.lock`;
206
+ const lockTimeoutMs = options.lockTimeoutMs ?? 1e4;
207
+ const staleLockMs = options.staleLockMs ?? 3000;
208
+ const retryMs = options.retryMs ?? 10;
209
+ const heartbeatMs = Math.max(MIN_HEARTBEAT_MS, Math.floor(staleLockMs / 3));
210
+ const abandonedAfterMs = Math.max(staleLockMs * ABANDONED_LOCK_MULTIPLIER, heartbeatMs * ABANDONED_HEARTBEATS);
211
+ if (staleLockMs >= lockTimeoutMs) {
212
+ throw new Error(`[stitchkit] createFileStateStore: staleLockMs (${staleLockMs}) must be below lockTimeoutMs (${lockTimeoutMs}), or a crashed holder blocks every update until the timeout`);
213
+ }
214
+ let sweptTemporaries = false;
215
+ const parseFile = async () => {
216
+ let source;
217
+ try {
218
+ source = await readFile(path, "utf8");
219
+ } catch (error) {
220
+ if (await missing(error))
221
+ return null;
222
+ throw error;
223
+ }
224
+ try {
225
+ return options.schema.parse(JSON.parse(source));
226
+ } catch (error) {
227
+ await options.onCorrupt?.({ path, error });
228
+ if ((options.corrupt ?? "throw") === "empty")
229
+ return null;
230
+ throw error;
231
+ }
232
+ };
233
+ const acquire = async () => {
234
+ await mkdir(dirname(path), { recursive: true });
235
+ if (!sweptTemporaries) {
236
+ sweptTemporaries = true;
237
+ await sweepTemporaries(path, staleLockMs);
238
+ }
239
+ const deadline = Date.now() + lockTimeoutMs;
240
+ while (true) {
241
+ try {
242
+ const handle = await open(lockPath, "wx");
243
+ const token = crypto.randomUUID();
244
+ try {
245
+ await handle.writeFile(JSON.stringify({ token, pid: process.pid, acquiredAt: Date.now() }));
246
+ await handle.sync();
247
+ } catch (error) {
248
+ await handle.close().catch(() => {
249
+ return;
250
+ });
251
+ await unlink(lockPath).catch(() => {
252
+ return;
253
+ });
254
+ throw error;
255
+ }
256
+ return {
257
+ refresh: async () => {
258
+ const now = new Date;
259
+ await handle.utimes(now, now);
260
+ },
261
+ release: async () => {
262
+ await handle.close();
263
+ try {
264
+ const owner = JSON.parse(await readFile(lockPath, "utf8"));
265
+ if (isRecord(owner) && owner.token === token)
266
+ await unlink(lockPath);
267
+ } catch (error) {
268
+ if (!await missing(error))
269
+ throw error;
270
+ }
271
+ }
272
+ };
273
+ } catch (error) {
274
+ if (!existing(error))
275
+ throw error;
276
+ try {
277
+ const lock = await stat(lockPath);
278
+ if (Date.now() - lock.mtimeMs > staleLockMs) {
279
+ if (await reclaim(lockPath, lock, staleLockMs, abandonedAfterMs))
280
+ continue;
281
+ }
282
+ } catch (statError) {
283
+ if (await missing(statError))
284
+ continue;
285
+ throw statError;
286
+ }
287
+ if (Date.now() >= deadline) {
288
+ throw new Error(`[stitchkit] timed out acquiring state lock for ${path}`);
289
+ }
290
+ await delay(retryMs);
291
+ }
292
+ }
293
+ };
294
+ const write = async (state) => {
295
+ const validated = options.schema.parse(state);
296
+ const temporary = `${path}.tmp.${process.pid}.${crypto.randomUUID()}`;
297
+ const handle = await open(temporary, "wx");
298
+ try {
299
+ try {
300
+ await handle.writeFile(`${JSON.stringify(validated)}
301
+ `);
302
+ await handle.sync();
303
+ } finally {
304
+ await handle.close();
305
+ }
306
+ await rename(temporary, path);
307
+ } catch (error) {
308
+ await unlink(temporary).catch(() => {
309
+ return;
310
+ });
311
+ throw error;
312
+ }
313
+ };
314
+ return {
315
+ read: parseFile,
316
+ async update(transition) {
317
+ const lock = await acquire();
318
+ const heartbeat = setInterval(() => void lock.refresh().catch(() => {
319
+ return;
320
+ }), heartbeatMs);
321
+ try {
322
+ const next = await transition(await parseFile());
323
+ await write(next.state);
324
+ return next.result;
325
+ } finally {
326
+ clearInterval(heartbeat);
327
+ await lock.release();
328
+ }
329
+ }
330
+ };
331
+ }
332
+ // src/realtime/registry.ts
333
+ var authorizedRoom = Symbol("stitchkit.authorized-room");
334
+ function freezeRoom(name) {
335
+ return Object.freeze({ name, [authorizedRoom]: true });
336
+ }
337
+ async function leaveQuietly(member, room) {
338
+ try {
339
+ await member.connection.raw.leave(room);
340
+ } catch {}
341
+ }
342
+ async function replayMember(member, options, token, isClosed) {
343
+ if (!options.replay || member.disconnected || isClosed())
344
+ return !member.disconnected && !isClosed();
345
+ const attempts = Math.max(1, options.replayAttempts ?? 3);
346
+ for (let attempt = 0;attempt < attempts && !member.disconnected && !isClosed(); attempt += 1) {
347
+ member.buffer = [];
348
+ member.overflow = false;
349
+ const before = await options.revision?.();
350
+ if (member.disconnected || isClosed())
351
+ break;
352
+ const frames = await options.replay({
353
+ identity: member.identity,
354
+ rooms: Object.freeze([...member.joined].map(token)),
355
+ revision: before
356
+ });
357
+ const after = await options.revision?.();
358
+ if (member.disconnected || isClosed())
359
+ break;
360
+ if (options.revision && !Object.is(before, after))
361
+ continue;
362
+ if (member.overflow)
363
+ continue;
364
+ for (const frame of frames)
365
+ member.connection.events.emit(frame.event, ...frame.args);
366
+ const buffered = member.buffer;
367
+ member.buffer = null;
368
+ for (const deferred of buffered ?? [])
369
+ deferred();
370
+ return !member.disconnected && !isClosed();
371
+ }
372
+ member.buffer = null;
373
+ member.overflow = false;
374
+ if (!member.disconnected)
375
+ await options.onResyncRequired?.(member.connection.raw.id, member.identity);
376
+ return false;
377
+ }
378
+ function bindSocketRegistry(server, options) {
379
+ const members = new Map;
380
+ const minted = new WeakSet;
381
+ let revision = 0;
382
+ let closed = false;
383
+ const setups = new Set;
384
+ const maxBufferedFrames = Math.max(1, options.maxBufferedFrames ?? 1000);
385
+ const token = (name) => {
386
+ const created = freezeRoom(name);
387
+ minted.add(created);
388
+ return created;
389
+ };
390
+ const assertToken = (room) => {
391
+ if (!minted.has(room))
392
+ throw new Error("Room was not authorized by this registry");
393
+ return room.name;
394
+ };
395
+ const remove = async (member) => {
396
+ if (member.disconnected)
397
+ return;
398
+ member.disconnected = true;
399
+ member.connection.raw.off?.("disconnect", member.disconnect);
400
+ members.delete(member.connection.raw.id);
401
+ for (const room of member.joined)
402
+ await leaveQuietly(member, room);
403
+ member.joined.clear();
404
+ member.buffer = null;
405
+ revision += 1;
406
+ };
407
+ const resyncMember = (member) => {
408
+ if (member.replayPromise)
409
+ return member.replayPromise;
410
+ const active = replayMember(member, options, token, () => closed).finally(() => {
411
+ if (member.replayPromise === active)
412
+ member.replayPromise = undefined;
413
+ });
414
+ member.replayPromise = active;
415
+ return active;
416
+ };
417
+ const setupConnection = async (connection) => {
418
+ if (closed)
419
+ return;
420
+ const member = {
421
+ connection,
422
+ identity: connection.raw.data,
423
+ authorized: new Set,
424
+ joined: new Set,
425
+ buffer: null,
426
+ overflow: false,
427
+ disconnected: false,
428
+ disconnect: () => {
429
+ return;
430
+ }
431
+ };
432
+ member.disconnect = () => void remove(member);
433
+ connection.raw.on("disconnect", member.disconnect);
434
+ members.set(connection.raw.id, member);
435
+ try {
436
+ const authorized = new Set(await options.rooms(connection.raw.data));
437
+ if (member.disconnected || closed) {
438
+ await remove(member);
439
+ return;
440
+ }
441
+ member.authorized = authorized;
442
+ for (const name of authorized) {
443
+ await connection.raw.join(name);
444
+ if (member.disconnected || closed) {
445
+ await leaveQuietly(member, name);
446
+ await remove(member);
447
+ return;
448
+ }
449
+ member.joined.add(name);
450
+ }
451
+ if (closed) {
452
+ await remove(member);
453
+ return;
454
+ }
455
+ revision += 1;
456
+ await resyncMember(member);
457
+ } catch {
458
+ await remove(member);
459
+ }
460
+ };
461
+ const stopListening = server.onConnection((connection) => {
462
+ let setup;
463
+ setup = setupConnection(connection).finally(() => setups.delete(setup));
464
+ setups.add(setup);
465
+ return setup;
466
+ });
467
+ return {
468
+ room: token,
469
+ async join(socketId, room) {
470
+ const name = assertToken(room);
471
+ const member = members.get(socketId);
472
+ if (!member)
473
+ throw new Error(`Unknown socket: ${socketId}`);
474
+ if (!member.authorized.has(name))
475
+ throw new Error(`Socket is not authorized for room: ${name}`);
476
+ if (member.joined.has(name))
477
+ return;
478
+ await member.connection.raw.join(name);
479
+ if (!member.disconnected)
480
+ member.joined.add(name);
481
+ revision += 1;
482
+ },
483
+ async leave(socketId, room) {
484
+ const name = assertToken(room);
485
+ const member = members.get(socketId);
486
+ if (!member?.joined.has(name))
487
+ return;
488
+ await member.connection.raw.leave(name);
489
+ member.joined.delete(name);
490
+ revision += 1;
491
+ },
492
+ emitTo(room, event, ...args) {
493
+ const name = assertToken(room);
494
+ let recipients = 0;
495
+ for (const member of members.values()) {
496
+ if (!member.joined.has(name) || member.disconnected)
497
+ continue;
498
+ recipients += 1;
499
+ if (!member.buffer) {
500
+ member.connection.events.emit(event, ...args);
501
+ } else if (member.buffer.length >= maxBufferedFrames) {
502
+ member.overflow = true;
503
+ } else {
504
+ member.buffer.push(() => member.connection.events.emit(event, ...args));
505
+ }
506
+ }
507
+ return recipients;
508
+ },
509
+ resync: async (socketId) => {
510
+ const member = members.get(socketId);
511
+ return member ? resyncMember(member) : false;
512
+ },
513
+ snapshot() {
514
+ const connections = [...members.values()].map((member) => Object.freeze({
515
+ socketId: member.connection.raw.id,
516
+ identity: member.identity,
517
+ rooms: Object.freeze([...member.joined].sort()),
518
+ replaying: member.buffer !== null
519
+ }));
520
+ const roomMap = {};
521
+ for (const entry of connections) {
522
+ for (const name of entry.rooms) {
523
+ roomMap[name] = Object.freeze([...roomMap[name] ?? [], entry.socketId]);
524
+ }
525
+ }
526
+ return Object.freeze({
527
+ revision,
528
+ connections: Object.freeze(connections),
529
+ rooms: Object.freeze(roomMap)
530
+ });
531
+ },
532
+ async unbind() {
533
+ if (closed)
534
+ return;
535
+ closed = true;
536
+ stopListening();
537
+ await Promise.allSettled([...setups]);
538
+ const active = [...members.values()];
539
+ for (const member of active)
540
+ await remove(member);
541
+ }
542
+ };
543
+ }
544
+ // src/server/bun.ts
545
+ import { chmodSync, statSync, unlinkSync } from "node:fs";
546
+ function reclaimStaleUnixSocket(path) {
547
+ const stats = statSync(path, { throwIfNoEntry: false });
548
+ if (stats === undefined)
549
+ return;
550
+ if (!stats.isSocket()) {
551
+ throw new Error(`[stitchkit] createServer: "${path}" exists and is not a socket — refusing to remove it; remove it manually if it is debris`);
552
+ }
553
+ if (typeof process.getuid === "function" && stats.uid !== process.getuid()) {
554
+ throw new Error(`[stitchkit] createServer: unix socket "${path}" is owned by another user — refusing to reclaim it`);
555
+ }
556
+ const standalone = Bun.main.startsWith("/$bunfs/");
557
+ const interpreter = standalone ? Bun.which("bun") : process.execPath;
558
+ if (!interpreter) {
559
+ throw new Error(`[stitchkit] createServer: unix socket "${path}" already exists and no \`bun\` binary is on PATH to probe it from this compiled executable — remove the file manually if the previous process is dead`);
560
+ }
561
+ const probe = Bun.spawnSync({
562
+ cmd: [
563
+ interpreter,
564
+ "-e",
565
+ 'try { const socket = await Bun.connect({ unix: Bun.env.STITCHKIT_UNIX_PROBE ?? "", socket: { data() { return undefined; } } }); socket.end(); process.exit(0); } catch (error) { process.exit(error && typeof error === "object" && "code" in error && error.code === "EACCES" ? 2 : 1); }'
566
+ ],
567
+ env: { ...process.env, STITCHKIT_UNIX_PROBE: path },
568
+ timeout: 2000
569
+ });
570
+ if (probe.exitedDueToTimeout) {
571
+ throw new Error(`[stitchkit] createServer: liveness probe for unix socket "${path}" timed out — refusing to reclaim; remove the file manually if the previous process is dead`);
572
+ }
573
+ if (probe.exitCode === 0 || probe.exitCode === 2) {
574
+ throw new Error(`[stitchkit] createServer: unix socket "${path}" is already in use${probe.exitCode === 2 ? " (connect permission denied)" : " by a live listener"}`);
575
+ }
576
+ unlinkSync(path);
577
+ }
578
+ function assertUnixListenConfig(config, unixPath) {
579
+ if (unixPath.length === 0) {
580
+ throw new Error("[stitchkit] createServer: `unix` must be a non-empty socket path");
581
+ }
582
+ if (config.port !== undefined || config.hostname !== undefined) {
583
+ throw new Error("[stitchkit] createServer: `unix` is mutually exclusive with `port`/`hostname`");
584
+ }
585
+ if (config.socket) {
586
+ throw new Error("[stitchkit] createServer: the Socket.IO lifecycle cannot listen on a unix socket — socket.io clients dial TCP only");
587
+ }
588
+ }
589
+ async function waitForRequestDrain(server) {
590
+ while (server.pendingRequests > 0) {
591
+ await new Promise((resolve) => setTimeout(resolve, 5));
592
+ }
593
+ }
594
+ function createServer(config) {
595
+ const {
596
+ websocket: configuredWebSocket,
597
+ socket,
598
+ development,
599
+ bun: bunExtra,
600
+ port = 3000,
601
+ hostname
602
+ } = config;
603
+ const unixPath = typeof config.unix === "string" ? config.unix : config.unix?.path;
604
+ const unixMode = typeof config.unix === "string" ? undefined : config.unix?.mode;
605
+ if (unixPath !== undefined)
606
+ assertUnixListenConfig(config, unixPath);
607
+ const socketRoutePrefix = socket?.route.path.replace(/\*socketPath$/, "");
608
+ const websocket = configuredWebSocket ?? socket?.websocket;
609
+ const openSockets = new Set;
610
+ const socketDrainWaiters = new Set;
611
+ let hadWebSockets = false;
612
+ const resolveSocketDrain = () => {
613
+ if (openSockets.size !== 0)
614
+ return;
615
+ for (const resolve of socketDrainWaiters)
616
+ resolve();
617
+ socketDrainWaiters.clear();
618
+ };
619
+ const waitForSocketDrain = () => {
620
+ if (openSockets.size === 0)
621
+ return Promise.resolve();
622
+ return new Promise((resolve) => socketDrainWaiters.add(resolve));
623
+ };
624
+ const trackedWebSocket = websocket ? {
625
+ ...websocket,
626
+ open(ws) {
627
+ hadWebSockets = true;
628
+ openSockets.add(ws);
629
+ websocket.open?.(ws);
630
+ },
631
+ close(ws, code, reason) {
632
+ openSockets.delete(ws);
633
+ resolveSocketDrain();
634
+ websocket.close?.(ws, code, reason);
635
+ }
636
+ } : undefined;
637
+ let runtime;
638
+ const requireRuntime = () => {
639
+ if (!runtime)
640
+ throw new Error("[stitchkit] Bun server lifecycle started before Bun.serve");
641
+ return runtime;
642
+ };
643
+ const adapter = {
644
+ beginShutdown: () => socket?.beginShutdown(),
645
+ pendingRequests: () => runtime?.pendingRequests ?? 0,
646
+ pendingWebSockets: () => openSockets.size,
647
+ async closeRealtime() {
648
+ const logicalClose = socket?.close();
649
+ for (const ws of openSockets)
650
+ ws.close(1001, "Server shutting down");
651
+ await Promise.all([logicalClose, waitForSocketDrain()]);
652
+ },
653
+ async terminateRealtime() {
654
+ const count = openSockets.size;
655
+ const physicalClose = waitForSocketDrain();
656
+ for (const ws of [...openSockets])
657
+ ws.terminate();
658
+ await physicalClose;
659
+ return count;
660
+ },
661
+ async stopGracefully() {
662
+ await new Promise((resolve) => setTimeout(resolve, 0));
663
+ const server2 = requireRuntime();
664
+ if (server2.pendingRequests === 0 && openSockets.size === 0) {
665
+ const stopping2 = server2.stop(true);
666
+ if (!hadWebSockets)
667
+ await stopping2;
668
+ else
669
+ stopping2.catch(() => {
670
+ return;
671
+ });
672
+ return;
673
+ }
674
+ const stopping = server2.stop(false);
675
+ if (!hadWebSockets) {
676
+ await stopping;
677
+ return;
678
+ }
679
+ stopping.catch(() => {
680
+ return;
681
+ });
682
+ await waitForRequestDrain(server2);
683
+ },
684
+ async forceStop() {
685
+ const logicalClose = socket?.close();
686
+ const physicalClose = waitForSocketDrain();
687
+ for (const ws of [...openSockets])
688
+ ws.terminate();
689
+ const stopping = requireRuntime().stop(true);
690
+ if (!hadWebSockets)
691
+ await stopping;
692
+ else
693
+ stopping.catch(() => {
694
+ return;
695
+ });
696
+ await Promise.all([logicalClose, physicalClose]);
697
+ }
698
+ };
699
+ const lifecycle = createServerLifecycle(() => adapter);
700
+ const handler = createHandler(config);
701
+ const consumerFetch = config.wrapFetch ? config.wrapFetch(handler) : handler;
702
+ const admittedFetch = lifecycle.wrapFetch(consumerFetch);
703
+ const fetch = async (request, server2) => {
704
+ if (socket && socketRoutePrefix) {
705
+ const pathname = new URL(request.url).pathname;
706
+ if (pathname.startsWith(socketRoutePrefix)) {
707
+ return await socket.route.handler(request, {
708
+ params: { socketPath: pathname.slice(socketRoutePrefix.length) },
709
+ server: server2
710
+ });
711
+ }
712
+ }
713
+ return admittedFetch(request, server2);
714
+ };
715
+ if (unixPath !== undefined) {
716
+ reclaimStaleUnixSocket(unixPath);
717
+ const { reusePort, ipv6Only, http3, http2, http1, idleTimeout, ...unixExtra } = bunExtra ?? {};
718
+ runtime = trackedWebSocket ? Bun.serve({
719
+ ...unixExtra,
720
+ ...development && { development },
721
+ unix: unixPath,
722
+ websocket: trackedWebSocket,
723
+ fetch
724
+ }) : Bun.serve({
725
+ ...unixExtra,
726
+ ...development && { development },
727
+ unix: unixPath,
728
+ fetch
729
+ });
730
+ if (unixMode !== undefined)
731
+ chmodSync(unixPath, unixMode);
732
+ } else {
733
+ runtime = trackedWebSocket ? Bun.serve({
734
+ ...bunExtra,
735
+ ...development && { development },
736
+ port,
737
+ hostname,
738
+ websocket: trackedWebSocket,
739
+ fetch
740
+ }) : Bun.serve({
741
+ ...bunExtra,
742
+ ...development && { development },
743
+ port,
744
+ hostname,
745
+ fetch
746
+ });
747
+ }
748
+ const server = runtime;
749
+ return {
750
+ url: server.url.toString().replace(/\/$/, ""),
751
+ port: server.port ?? (unixPath !== undefined ? 0 : port),
752
+ runtime: server,
753
+ get status() {
754
+ return lifecycle.status;
755
+ },
756
+ shutdown: lifecycle.shutdown
757
+ };
758
+ }
759
+ // src/server/swept-map.ts
760
+ function createSweptMap(options) {
761
+ const store = new Map;
762
+ const timer = setInterval(() => {
763
+ const now = Date.now();
764
+ for (const [key, value] of store) {
765
+ if (options.isExpired(value, now))
766
+ store.delete(key);
767
+ }
768
+ }, options.intervalMs);
769
+ timer.unref();
770
+ return {
771
+ store,
772
+ destroy() {
773
+ clearInterval(timer);
774
+ store.clear();
775
+ }
776
+ };
777
+ }
778
+
779
+ // src/server/cache.ts
780
+ function createCache(options = {}) {
781
+ const maxEntries = options.maxEntries ?? 1000;
782
+ if (!Number.isInteger(maxEntries) || maxEntries < 1) {
783
+ throw new Error("cache.maxEntries must be a positive integer");
784
+ }
785
+ const { store, destroy } = createSweptMap({
786
+ intervalMs: 30000,
787
+ isExpired: (entry, now) => entry.expiresAt < now
788
+ });
789
+ return {
790
+ destroy,
791
+ get(key) {
792
+ const entry = store.get(key);
793
+ if (!entry)
794
+ return null;
795
+ if (entry.expiresAt < Date.now()) {
796
+ store.delete(key);
797
+ return null;
798
+ }
799
+ return entry.data;
800
+ },
801
+ set(key, data, maxAgeSeconds) {
802
+ if (!Number.isFinite(maxAgeSeconds) || maxAgeSeconds < 0) {
803
+ throw new Error("cache maxAgeSeconds must be a non-negative finite number");
804
+ }
805
+ store.delete(key);
806
+ store.set(key, { data, expiresAt: Date.now() + maxAgeSeconds * 1000 });
807
+ while (store.size > maxEntries) {
808
+ const oldest = store.keys().next().value;
809
+ if (oldest === undefined)
810
+ break;
811
+ store.delete(oldest);
812
+ }
813
+ },
814
+ invalidate(prefix) {
815
+ for (const key of store.keys()) {
816
+ if (key.startsWith(prefix))
817
+ store.delete(key);
818
+ }
819
+ },
820
+ clear() {
821
+ store.clear();
822
+ }
823
+ };
824
+ }
825
+ function cacheHeaders(maxAge, scope = "public") {
826
+ return {
827
+ "Cache-Control": `${scope}, max-age=${maxAge}`
828
+ };
829
+ }
830
+ // src/server/error-hook.ts
831
+ function createErrorHook(config) {
832
+ if (config.vocabulary && (config.codeMap !== undefined || config.unmappedCode !== undefined)) {
833
+ throw new Error("[stitchkit] createErrorHook: `vocabulary` carries the wire map — it cannot be combined with `codeMap` or `unmappedCode`");
834
+ }
835
+ return async (ctx, error, endpoint) => {
836
+ const appErr = normalizeError(error);
837
+ const stitchCode = isStitchErrorCode(appErr.code) ? appErr.code : undefined;
838
+ const vocabularyMap = config.vocabulary?.codeMap;
839
+ const configuredMap = vocabularyMap ?? config.codeMap;
840
+ const mapped = stitchCode === undefined ? undefined : configuredMap?.[stitchCode];
841
+ const fallback = mapped === undefined && stitchCode !== undefined ? typeof config.unmappedCode === "function" ? config.unmappedCode(stitchCode) : config.unmappedCode : undefined;
842
+ const code = mapped ?? fallback ?? appErr.code;
843
+ const info = {
844
+ code,
845
+ status: appErr.status,
846
+ message: appErr.message,
847
+ details: appErr.details,
848
+ hint: appErr.hint
849
+ };
850
+ await config.onError?.(error, info, ctx, endpoint);
851
+ const body = await config.render(info, ctx, endpoint);
852
+ return new Response(JSON.stringify(body), {
853
+ status: info.status,
854
+ headers: { "content-type": "application/json" }
855
+ });
856
+ };
857
+ }
858
+ // src/server/event-bus.ts
859
+ function isDecision(value) {
860
+ if (typeof value !== "object" || value === null)
861
+ return false;
862
+ const outcome = Reflect.get(value, "outcome");
863
+ if (outcome === "allow" || outcome === "defer")
864
+ return true;
865
+ return outcome === "deny" && typeof Reflect.get(value, "reason") === "string";
866
+ }
867
+ function createEventBus(options = {}) {
868
+ const subscriptions = new Map;
869
+ const declared = options.topics;
870
+ function add(event, fn, once) {
871
+ let set = subscriptions.get(event);
872
+ if (!set) {
873
+ set = new Set;
874
+ subscriptions.set(event, set);
875
+ }
876
+ const sub = { fn, once };
877
+ set.add(sub);
878
+ return () => {
879
+ set.delete(sub);
880
+ };
881
+ }
882
+ function declarationFor(event, verb) {
883
+ if (declared === undefined) {
884
+ if (verb === "emit")
885
+ return;
886
+ throw new Error(`[stitchkit] event bus: ${verb}("${event}") needs declared topics — pass \`topics\` from defineEvents. Its delivery deadline and undecided outcome come from the declaration, and neither has a default.`);
887
+ }
888
+ const topic = Reflect.get(declared, event);
889
+ if (topic === undefined) {
890
+ throw new Error(`[stitchkit] event bus: "${event}" is not a declared topic. Declared: ${Object.keys(declared).join(", ") || "(none)"}.`);
891
+ }
892
+ const expected = { emit: "emit", serial: "emitSerial", decision: "decide" };
893
+ if (expected[topic.mode] !== verb) {
894
+ throw new Error(`[stitchkit] event bus: "${event}" is declared with mode '${topic.mode}', so it is delivered with ${expected[topic.mode]}(), not ${verb}().`);
895
+ }
896
+ return topic;
897
+ }
898
+ function planned(event) {
899
+ const set = subscriptions.get(event) ?? new Set;
900
+ return { set, subs: [...set] };
901
+ }
902
+ function report(error, event) {
903
+ options.onListenerError?.(error, event);
904
+ }
905
+ return {
906
+ emit(event, data) {
907
+ declarationFor(event, "emit");
908
+ const { set, subs } = planned(event);
909
+ for (const sub of subs) {
910
+ if (!set.has(sub))
911
+ continue;
912
+ if (sub.once)
913
+ set.delete(sub);
914
+ try {
915
+ const result = sub.fn(data);
916
+ if (result instanceof Promise)
917
+ result.catch((err) => report(err, event));
918
+ } catch (err) {
919
+ report(err, event);
920
+ }
921
+ }
922
+ },
923
+ async emitSerial(event, data) {
924
+ const topic = declarationFor(event, "emitSerial");
925
+ const timeoutMs = topic?.listenerTimeoutMs ?? 0;
926
+ const { set, subs } = planned(event);
927
+ for (const sub of subs) {
928
+ if (!set.has(sub))
929
+ continue;
930
+ if (sub.once)
931
+ set.delete(sub);
932
+ try {
933
+ const outcome = await withDeadline(sub.fn(data), timeoutMs);
934
+ if (!outcome.settled) {
935
+ report(new Error(`listener did not settle within ${timeoutMs}ms`), event);
936
+ }
937
+ } catch (err) {
938
+ report(err, event);
939
+ }
940
+ }
941
+ },
942
+ async decide(event, data) {
943
+ const topic = declarationFor(event, "decide");
944
+ const timeoutMs = topic?.listenerTimeoutMs ?? 0;
945
+ const undecided = topic?.whenAllDefer ?? "deny";
946
+ const { set, subs } = planned(event);
947
+ let allowed = false;
948
+ for (const sub of subs) {
949
+ if (!set.has(sub))
950
+ continue;
951
+ if (sub.once)
952
+ set.delete(sub);
953
+ let vote;
954
+ try {
955
+ const outcome = await withDeadline(sub.fn(data), timeoutMs);
956
+ if (!outcome.settled) {
957
+ vote = { outcome: "deny", reason: `listener did not vote within ${timeoutMs}ms` };
958
+ } else if (isDecision(outcome.value)) {
959
+ vote = outcome.value;
960
+ } else {
961
+ vote = {
962
+ outcome: "deny",
963
+ reason: 'listener returned no decision — a decision listener returns { outcome: "allow" | "deny" | "defer" }'
964
+ };
965
+ }
966
+ } catch (err) {
967
+ vote = {
968
+ outcome: "deny",
969
+ reason: err instanceof Error ? `listener threw: ${err.message}` : "listener threw"
970
+ };
971
+ }
972
+ if (vote.outcome === "deny") {
973
+ report(new Error(vote.reason), event);
974
+ return vote;
975
+ }
976
+ if (vote.outcome === "allow")
977
+ allowed = true;
978
+ }
979
+ if (allowed)
980
+ return { outcome: "allow" };
981
+ return undecided === "allow" ? { outcome: "allow" } : { outcome: "deny", reason: "no listener claimed this event" };
982
+ },
983
+ on(event, handler) {
984
+ return add(event, handler, false);
985
+ },
986
+ once(event, handler) {
987
+ return add(event, handler, true);
988
+ },
989
+ off(event, handler) {
990
+ const set = subscriptions.get(event);
991
+ if (!set)
992
+ return;
993
+ for (const sub of set) {
994
+ if (sub.fn === handler)
995
+ set.delete(sub);
996
+ }
997
+ },
998
+ clear() {
999
+ subscriptions.clear();
1000
+ }
1001
+ };
1002
+ }
1003
+ // src/server/file.ts
1004
+ import { readFile as readFile2, stat as stat2 } from "node:fs/promises";
1005
+ import { resolve } from "node:path";
1006
+
1007
+ // src/server/mime.ts
1008
+ import { extname } from "node:path";
1009
+ var MIME_BY_EXT = {
1010
+ ".html": "text/html; charset=utf-8",
1011
+ ".css": "text/css; charset=utf-8",
1012
+ ".js": "text/javascript; charset=utf-8",
1013
+ ".mjs": "text/javascript; charset=utf-8",
1014
+ ".json": "application/json; charset=utf-8",
1015
+ ".svg": "image/svg+xml",
1016
+ ".png": "image/png",
1017
+ ".jpg": "image/jpeg",
1018
+ ".jpeg": "image/jpeg",
1019
+ ".gif": "image/gif",
1020
+ ".webp": "image/webp",
1021
+ ".avif": "image/avif",
1022
+ ".ico": "image/x-icon",
1023
+ ".woff2": "font/woff2",
1024
+ ".txt": "text/plain; charset=utf-8",
1025
+ ".wasm": "application/wasm",
1026
+ ".mp4": "video/mp4",
1027
+ ".webm": "video/webm",
1028
+ ".mov": "video/quicktime",
1029
+ ".ogv": "video/ogg",
1030
+ ".mp3": "audio/mpeg",
1031
+ ".m4a": "audio/mp4",
1032
+ ".wav": "audio/wav",
1033
+ ".flac": "audio/flac",
1034
+ ".oga": "audio/ogg",
1035
+ ".ogg": "audio/ogg",
1036
+ ".pdf": "application/pdf",
1037
+ ".zip": "application/zip"
1038
+ };
1039
+ function mimeForPath(path) {
1040
+ return MIME_BY_EXT[extname(path).toLowerCase()] ?? "application/octet-stream";
1041
+ }
1042
+
1043
+ // src/server/file.ts
1044
+ function staticRoute(prefix, dir) {
1045
+ const cleanPrefix = prefix.replace(/\/+$/, "");
1046
+ const root = resolve(dir.replace(/\/+$/, ""));
1047
+ return {
1048
+ method: "GET",
1049
+ path: `${cleanPrefix}/*filePath`,
1050
+ handler: async (req) => {
1051
+ const pathname = new URL(req.url).pathname;
1052
+ let rel;
1053
+ try {
1054
+ rel = decodeURIComponent(pathname.slice(cleanPrefix.length)).replace(/^\/+/, "");
1055
+ } catch {
1056
+ return new Response("Bad request", { status: 400 });
1057
+ }
1058
+ const target = resolve(root, rel);
1059
+ if (!isWithinDir(root, target))
1060
+ return new Response("Forbidden", { status: 403 });
1061
+ const realTarget = await realPathWithinDir(root, target);
1062
+ if (realTarget === null)
1063
+ return new Response("Not found", { status: 404 });
1064
+ const info = await stat2(realTarget).catch(() => null);
1065
+ if (!info?.isFile())
1066
+ return new Response("Not found", { status: 404 });
1067
+ return new Response(await readFile2(realTarget), {
1068
+ headers: {
1069
+ "Content-Type": mimeForPath(realTarget),
1070
+ "X-Content-Type-Options": "nosniff"
1071
+ }
1072
+ });
1073
+ }
1074
+ };
1075
+ }
1076
+ function parseByteRange(header, size) {
1077
+ if (!header)
1078
+ return null;
1079
+ const match = /^bytes=(.+)$/.exec(header.trim());
1080
+ const rawSpec = match?.[1];
1081
+ if (rawSpec === undefined)
1082
+ return null;
1083
+ const spec = rawSpec.trim();
1084
+ if (spec.includes(","))
1085
+ return null;
1086
+ const dash = spec.indexOf("-");
1087
+ if (dash === -1)
1088
+ return null;
1089
+ const startStr = spec.slice(0, dash).trim();
1090
+ const endStr = spec.slice(dash + 1).trim();
1091
+ if (startStr === "") {
1092
+ if (!/^\d+$/.test(endStr))
1093
+ return null;
1094
+ const suffix = Number(endStr);
1095
+ if (suffix === 0 || size === 0)
1096
+ return "unsatisfiable";
1097
+ return { start: Math.max(0, size - suffix), end: size - 1 };
1098
+ }
1099
+ if (!/^\d+$/.test(startStr))
1100
+ return null;
1101
+ const start = Number(startStr);
1102
+ if (size === 0 || start >= size)
1103
+ return "unsatisfiable";
1104
+ if (endStr === "")
1105
+ return { start, end: size - 1 };
1106
+ if (!/^\d+$/.test(endStr))
1107
+ return null;
1108
+ const end = Number(endStr);
1109
+ if (end < start)
1110
+ return null;
1111
+ return { start, end: end >= size ? size - 1 : end };
1112
+ }
1113
+ function weakETag(size, mtimeMs) {
1114
+ return `W/"${size.toString(16)}-${Math.floor(mtimeMs).toString(16)}"`;
1115
+ }
1116
+ function leSeconds(aMs, bMs) {
1117
+ return Math.floor(aMs / 1000) <= Math.floor(bMs / 1000);
1118
+ }
1119
+ function isNotModified(req, v) {
1120
+ const inm = req.headers.get("if-none-match");
1121
+ if (inm !== null) {
1122
+ const value = inm.trim();
1123
+ if (value === "*")
1124
+ return true;
1125
+ if (v.etag === undefined)
1126
+ return false;
1127
+ return value.split(",").map((t) => t.trim()).includes(v.etag);
1128
+ }
1129
+ const ims = req.headers.get("if-modified-since");
1130
+ if (ims !== null) {
1131
+ if (v.lastModifiedMs === undefined)
1132
+ return false;
1133
+ const since = Date.parse(ims);
1134
+ if (Number.isNaN(since))
1135
+ return false;
1136
+ return leSeconds(v.lastModifiedMs, since);
1137
+ }
1138
+ return false;
1139
+ }
1140
+ function ifRangeMatches(req, v) {
1141
+ const ir = req.headers.get("if-range");
1142
+ if (ir === null)
1143
+ return true;
1144
+ const value = ir.trim();
1145
+ if (v.etag !== undefined && value === v.etag)
1146
+ return true;
1147
+ if (v.lastModifiedMs !== undefined) {
1148
+ const asDate = Date.parse(value);
1149
+ if (!Number.isNaN(asDate))
1150
+ return leSeconds(v.lastModifiedMs, asDate);
1151
+ }
1152
+ return false;
1153
+ }
1154
+ function asciiFilename(filename) {
1155
+ let out = "";
1156
+ for (let i = 0;i < filename.length; i++) {
1157
+ const code = filename.charCodeAt(i);
1158
+ out += code >= 32 && code < 127 && code !== 34 && code !== 92 ? filename.charAt(i) : "_";
1159
+ }
1160
+ return out;
1161
+ }
1162
+ function contentDisposition(disposition, filename) {
1163
+ return `${disposition}; filename="${asciiFilename(filename)}"; filename*=UTF-8''${encodeURIComponent(filename)}`;
1164
+ }
1165
+ async function serveFile(req, opts) {
1166
+ if (req.method !== "GET" && req.method !== "HEAD") {
1167
+ return new Response("Method not allowed", {
1168
+ status: 405,
1169
+ headers: { Allow: "GET, HEAD" }
1170
+ });
1171
+ }
1172
+ const file = Bun.file(opts.path);
1173
+ if (!await file.exists()) {
1174
+ return new Response("Not found", { status: 404 });
1175
+ }
1176
+ const size = file.size;
1177
+ const mtimeMs = file.lastModified;
1178
+ const contentType = opts.contentType ?? mimeForPath(opts.path);
1179
+ const useEtag = opts.etag !== false;
1180
+ const useLastModified = opts.lastModified !== false;
1181
+ const etag = useEtag ? weakETag(size, mtimeMs) : undefined;
1182
+ const validators = {
1183
+ etag,
1184
+ lastModifiedMs: useLastModified ? mtimeMs : undefined
1185
+ };
1186
+ const isHead = req.method === "HEAD";
1187
+ const base = new Headers;
1188
+ base.set("Accept-Ranges", "bytes");
1189
+ base.set("X-Content-Type-Options", "nosniff");
1190
+ if (etag)
1191
+ base.set("ETag", etag);
1192
+ if (useLastModified)
1193
+ base.set("Last-Modified", new Date(mtimeMs).toUTCString());
1194
+ if (opts.cacheControl)
1195
+ base.set("Cache-Control", opts.cacheControl);
1196
+ if (opts.filename) {
1197
+ base.set("Content-Disposition", contentDisposition(opts.disposition ?? "inline", opts.filename));
1198
+ } else if (opts.disposition) {
1199
+ base.set("Content-Disposition", opts.disposition);
1200
+ }
1201
+ if ((useEtag || useLastModified) && isNotModified(req, validators)) {
1202
+ return new Response(null, { status: 304, headers: base });
1203
+ }
1204
+ const rangeHeader = req.headers.get("range");
1205
+ const range = rangeHeader !== null && ifRangeMatches(req, validators) ? parseByteRange(rangeHeader, size) : null;
1206
+ if (range === "unsatisfiable") {
1207
+ base.set("Content-Range", `bytes */${size}`);
1208
+ base.set("Content-Type", contentType);
1209
+ return new Response(null, { status: 416, headers: base });
1210
+ }
1211
+ if (range) {
1212
+ const length = range.end - range.start + 1;
1213
+ base.set("Content-Type", contentType);
1214
+ base.set("Content-Range", `bytes ${range.start}-${range.end}/${size}`);
1215
+ base.set("Content-Length", String(length));
1216
+ const body = isHead ? null : file.slice(range.start, range.end + 1);
1217
+ return new Response(body, { status: 206, headers: base });
1218
+ }
1219
+ base.set("Content-Type", contentType);
1220
+ base.set("Content-Length", String(size));
1221
+ return new Response(isHead ? null : file, { status: 200, headers: base });
1222
+ }
1223
+ // src/server/lifecycle.ts
1224
+ function composeLifecycleHooks(...hooks) {
1225
+ return {
1226
+ onRequest: async (request) => {
1227
+ for (const hook of hooks) {
1228
+ const response = await hook?.onRequest?.(request);
1229
+ if (response instanceof Response)
1230
+ return response;
1231
+ }
1232
+ return;
1233
+ },
1234
+ authorize: async (ctx, endpoint) => {
1235
+ for (const hook of hooks)
1236
+ await hook?.authorize?.(ctx, endpoint);
1237
+ },
1238
+ beforeHandle: async (ctx, endpoint) => {
1239
+ for (const hook of hooks)
1240
+ await hook?.beforeHandle?.(ctx, endpoint);
1241
+ },
1242
+ afterHandle: async (ctx, result, endpoint) => {
1243
+ let current = result;
1244
+ for (const hook of hooks) {
1245
+ const transformed = await hook?.afterHandle?.(ctx, current, endpoint);
1246
+ if (transformed !== undefined)
1247
+ current = transformed;
1248
+ }
1249
+ return current;
1250
+ },
1251
+ onError: async (ctx, error, endpoint) => {
1252
+ for (const hook of hooks) {
1253
+ const response = await hook?.onError?.(ctx, error, endpoint);
1254
+ if (response instanceof Response)
1255
+ return response;
1256
+ }
1257
+ return;
1258
+ }
1259
+ };
1260
+ }
1261
+ // src/server/middleware/cookies.ts
1262
+ function parseCookieHeader(header) {
1263
+ if (!header)
1264
+ return [];
1265
+ const pairs = [];
1266
+ for (const pair of header.split(";")) {
1267
+ const eq = pair.indexOf("=");
1268
+ if (eq === -1)
1269
+ continue;
1270
+ const key = pair.slice(0, eq).trim();
1271
+ if (!key)
1272
+ continue;
1273
+ const raw = pair.slice(eq + 1).trim();
1274
+ let value = raw;
1275
+ try {
1276
+ value = decodeURIComponent(raw);
1277
+ } catch {}
1278
+ pairs.push([key, value]);
1279
+ }
1280
+ return pairs;
1281
+ }
1282
+ function parseCookies(header) {
1283
+ const cookies = {};
1284
+ for (const [key, value] of parseCookieHeader(header)) {
1285
+ if (isUnsafeKey(key))
1286
+ continue;
1287
+ cookies[key] = value;
1288
+ }
1289
+ return cookies;
1290
+ }
1291
+ function serializeCookie(name, value, opts = {}) {
1292
+ let cookie = `${name}=${encodeURIComponent(value)}`;
1293
+ if (opts.maxAge !== undefined)
1294
+ cookie += `; Max-Age=${opts.maxAge}`;
1295
+ if (opts.path)
1296
+ cookie += `; Path=${opts.path}`;
1297
+ if (opts.domain)
1298
+ cookie += `; Domain=${opts.domain}`;
1299
+ if (opts.secure)
1300
+ cookie += "; Secure";
1301
+ if (opts.httpOnly)
1302
+ cookie += "; HttpOnly";
1303
+ if (opts.sameSite)
1304
+ cookie += `; SameSite=${opts.sameSite}`;
1305
+ return cookie;
1306
+ }
1307
+ function defineCookie(config) {
1308
+ const { name, duplicates = "last", ...options } = config;
1309
+ const getAll = (req) => parseCookieHeader(req.headers.get("cookie")).flatMap(([key, value]) => key === name ? [value] : []);
1310
+ return {
1311
+ get(req) {
1312
+ const values = getAll(req);
1313
+ if (values.length === 0)
1314
+ return;
1315
+ if (duplicates === "first")
1316
+ return values[0];
1317
+ if (duplicates === "reject") {
1318
+ return new Set(values).size === 1 ? values[0] : undefined;
1319
+ }
1320
+ return values[values.length - 1];
1321
+ },
1322
+ getAll,
1323
+ set(value) {
1324
+ return serializeCookie(name, value, options);
1325
+ },
1326
+ clear() {
1327
+ return serializeCookie(name, "", { ...options, maxAge: 0 });
1328
+ }
1329
+ };
1330
+ }
1331
+
1332
+ // src/server/middleware/auth.ts
1333
+ function extractToken(req, cookieName) {
1334
+ const authHeader = req.headers.get("authorization");
1335
+ if (authHeader?.startsWith("Bearer "))
1336
+ return authHeader.slice(7);
1337
+ if (cookieName) {
1338
+ const cookies = parseCookies(req.headers.get("cookie"));
1339
+ return cookies[cookieName] ?? null;
1340
+ }
1341
+ return null;
1342
+ }
1343
+ function isThenable(value) {
1344
+ try {
1345
+ return "then" in value && typeof value.then === "function";
1346
+ } catch {
1347
+ return false;
1348
+ }
1349
+ }
1350
+ var scopedAuthHookBrand = Symbol("stitchkit.scoped-auth-hook");
1351
+ var authOwnershipPlans = new WeakMap;
1352
+ function createShadowContext(ctx) {
1353
+ const shadow = {
1354
+ params: ctx.params,
1355
+ input: ctx.input,
1356
+ source: ctx.source
1357
+ };
1358
+ Object.defineProperties(shadow, Object.getOwnPropertyDescriptors(ctx));
1359
+ return shadow;
1360
+ }
1361
+ function createAuthHook(config) {
1362
+ const onAnonymous = config.onAnonymous ?? (() => unauthorized());
1363
+ const onForbidden = config.onForbidden ?? (() => forbidden());
1364
+ async function auth(ctx, endpoint) {
1365
+ const identity = ctx.source === "http" ? await config.resolve(ctx) : await config.resolveFromContext?.(ctx) ?? null;
1366
+ config.inject?.(ctx, identity);
1367
+ const scope = endpoint.scope ?? config.defaultScope;
1368
+ if (!scope)
1369
+ return;
1370
+ const entry = Object.hasOwn(config.rules, scope) ? config.rules[scope] : undefined;
1371
+ if (!entry) {
1372
+ throw new Error(`[stitchkit] auth: no rule for scope "${scope}"`);
1373
+ }
1374
+ const rule = typeof entry === "object" ? entry.rule : entry;
1375
+ if (typeof entry === "object" && entry.inject && identity !== null) {
1376
+ const fields = entry.inject(identity, ctx);
1377
+ if (typeof fields === "object" && fields !== null && isThenable(fields)) {
1378
+ throw new Error(`[stitchkit] auth: the inject of scope "${scope}" must be synchronous — an async inject merges a Promise, not fields`);
1379
+ }
1380
+ mergeContextContribution(ctx, fields, scope);
1381
+ }
1382
+ if (rule === "public")
1383
+ return;
1384
+ if (!identity) {
1385
+ onAnonymous();
1386
+ return;
1387
+ }
1388
+ if (rule === "authenticated")
1389
+ return;
1390
+ const result = await rule(identity, ctx);
1391
+ if (result === false) {
1392
+ onForbidden();
1393
+ return;
1394
+ }
1395
+ if (result === true)
1396
+ return;
1397
+ mergeContextContribution(ctx, result, scope);
1398
+ }
1399
+ auth[scopedAuthHookBrand] = () => {
1400
+ return;
1401
+ };
1402
+ authOwnershipPlans.set(auth, {
1403
+ defaultScope: config.defaultScope,
1404
+ hook: auth,
1405
+ scopes: new Set(Object.keys(config.rules))
1406
+ });
1407
+ return auth;
1408
+ }
1409
+ function composeAuthHooks(config) {
1410
+ const plans = [];
1411
+ for (const hook of config.hooks) {
1412
+ const plan = authOwnershipPlans.get(hook);
1413
+ if (!plan) {
1414
+ throw new TypeError("[stitchkit] auth: composeAuthHooks accepts only hooks created by createAuthHook or composeAuthHooks");
1415
+ }
1416
+ if (plan.defaultScope !== undefined && plan.defaultScope !== config.defaultScope) {
1417
+ throw new TypeError(`[stitchkit] auth: child default scope ${JSON.stringify(plan.defaultScope)} must match the composite default scope`);
1418
+ }
1419
+ plans.push(plan);
1420
+ }
1421
+ const defaultScope = config.defaultScope;
1422
+ if (defaultScope !== undefined && !plans.some((plan) => plan.scopes.has(defaultScope))) {
1423
+ throw new TypeError(`[stitchkit] auth: composite default scope ${JSON.stringify(defaultScope)} has no owner`);
1424
+ }
1425
+ const ownedScopes = new Set;
1426
+ for (const plan of plans) {
1427
+ for (const scope of plan.scopes)
1428
+ ownedScopes.add(scope);
1429
+ }
1430
+ async function composed(ctx, endpoint) {
1431
+ const scope = endpoint.scope ?? config.defaultScope;
1432
+ if (!scope)
1433
+ return;
1434
+ const owners = plans.filter((plan) => plan.scopes.has(scope));
1435
+ if (owners.length === 0) {
1436
+ throw new Error(`[stitchkit] auth: no rule for scope "${scope}"`);
1437
+ }
1438
+ const scopedEndpoint = { ...endpoint, scope };
1439
+ const contribution = Object.create(null);
1440
+ const contributionOwners = new Set;
1441
+ for (const owner of owners) {
1442
+ ctx.signal?.throwIfAborted();
1443
+ const shadow = createShadowContext(ctx);
1444
+ await owner.hook(shadow, scopedEndpoint);
1445
+ const ownerContribution = prepareContextContribution(contextContributionDelta(ctx, shadow, scope), scope);
1446
+ for (const key of Object.keys(ownerContribution)) {
1447
+ if (contributionOwners.has(key)) {
1448
+ throw new TypeError(`[stitchkit] auth: multiple owners contributed context key ${JSON.stringify(key)} for scope ${JSON.stringify(scope)}`);
1449
+ }
1450
+ contributionOwners.add(key);
1451
+ }
1452
+ Object.assign(contribution, ownerContribution);
1453
+ }
1454
+ ctx.signal?.throwIfAborted();
1455
+ mergeContextContribution(ctx, contribution, scope);
1456
+ }
1457
+ composed[scopedAuthHookBrand] = () => {
1458
+ return;
1459
+ };
1460
+ authOwnershipPlans.set(composed, {
1461
+ defaultScope: config.defaultScope,
1462
+ hook: composed,
1463
+ scopes: ownedScopes
1464
+ });
1465
+ return composed;
1466
+ }
1467
+ function createBearerResolver(config) {
1468
+ return async (req) => {
1469
+ const token = extractToken(req);
1470
+ if (!token)
1471
+ return null;
1472
+ return config.lookup(token, req);
1473
+ };
1474
+ }
1475
+ // src/server/middleware/trust-fence.ts
1476
+ var DEFAULT_PORTS = new Set(["80", "443"]);
1477
+ function readAuthority(value) {
1478
+ if (value.includes("*"))
1479
+ return;
1480
+ const match = /^(\[[^\]]+\]|[^:[\]]+)(?::(\d{1,5}))?$/.exec(value.trim());
1481
+ if (!match?.[1])
1482
+ return;
1483
+ const port = match[2] ?? null;
1484
+ if (port !== null) {
1485
+ const numeric = Number(port);
1486
+ if (numeric < 1 || numeric > 65535)
1487
+ return;
1488
+ }
1489
+ let url;
1490
+ try {
1491
+ url = new URL(`http://${match[1]}`);
1492
+ } catch {
1493
+ return;
1494
+ }
1495
+ if (url.pathname !== "/" || url.search !== "" || url.username !== "" || url.hostname === "") {
1496
+ return;
1497
+ }
1498
+ return { hostname: url.hostname, port };
1499
+ }
1500
+ function comparablePort(port) {
1501
+ return port === null || DEFAULT_PORTS.has(port) ? null : port;
1502
+ }
1503
+ function isLoopbackAddress(address) {
1504
+ if (address === "")
1505
+ return false;
1506
+ const bare = address.replace(/^\[|\]$/g, "").replace(/^::ffff:/i, "");
1507
+ if (bare === "::1")
1508
+ return true;
1509
+ const octets = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(bare);
1510
+ return octets?.[1] === "127";
1511
+ }
1512
+ function createTrustFence(config) {
1513
+ if (config.trustedHosts.length === 0) {
1514
+ throw new Error("[stitchkit] trust fence: `trustedHosts` cannot be empty — a fence that trusts nothing refuses every request, which is never what a running server wants. List the authorities this server answers on.");
1515
+ }
1516
+ const trusted = [];
1517
+ for (const entry of config.trustedHosts) {
1518
+ const authority = readAuthority(entry);
1519
+ if (!authority) {
1520
+ throw new Error(`[stitchkit] trust fence: "${entry}" is not an authority. An entry is \`host\` or \`host:port\` — no scheme, no path, no credentials, no wildcard. An entry that cannot be read back as a canonical authority is refused here rather than quietly matching nothing.`);
1521
+ }
1522
+ trusted.push(authority);
1523
+ }
1524
+ const trustedOrigins = [];
1525
+ for (const entry of config.trustedOrigins ?? []) {
1526
+ const authority = readAuthority(entry);
1527
+ if (!authority) {
1528
+ throw new Error(`[stitchkit] trust fence: trustedOrigins entry "${entry}" is not an authority. An entry is \`host\` or \`host:port\` — no scheme, no path, no wildcard, the same form as trustedHosts.`);
1529
+ }
1530
+ trustedOrigins.push(authority);
1531
+ }
1532
+ function refuse(refusal) {
1533
+ config.onRefused?.(refusal);
1534
+ config.logger?.warn?.("[stitchkit] trust fence refused a request", {
1535
+ reason: refusal.reason,
1536
+ lane: refusal.lane,
1537
+ host: refusal.host,
1538
+ origin: refusal.origin
1539
+ });
1540
+ return refusal;
1541
+ }
1542
+ function check(request, lane) {
1543
+ const host = request.headers.get("host");
1544
+ const origin = request.headers.get("origin");
1545
+ const site = request.headers.get("sec-fetch-site");
1546
+ if (host === null) {
1547
+ return refuse({ reason: "missing-host", lane, host, origin, site });
1548
+ }
1549
+ const requested = readAuthority(host);
1550
+ if (!requested) {
1551
+ return refuse({ reason: "untrusted-host", lane, host, origin, site });
1552
+ }
1553
+ const matched = trusted.some((entry) => entry.hostname === requested.hostname && (entry.port === null || entry.port === requested.port));
1554
+ if (!matched) {
1555
+ return refuse({ reason: "untrusted-host", lane, host, origin, site });
1556
+ }
1557
+ if (site === "cross-site") {
1558
+ return refuse({ reason: "cross-site", lane, host, origin, site });
1559
+ }
1560
+ if (origin !== null && origin !== "null") {
1561
+ let originAuthority;
1562
+ try {
1563
+ const parsed = new URL(origin);
1564
+ originAuthority = { hostname: parsed.hostname, port: parsed.port || null };
1565
+ } catch {
1566
+ originAuthority = undefined;
1567
+ }
1568
+ const sameAuthority = originAuthority !== undefined && originAuthority.hostname === requested.hostname && comparablePort(originAuthority.port) === comparablePort(requested.port);
1569
+ const declared = originAuthority !== undefined && trustedOrigins.some((entry) => entry.hostname === originAuthority.hostname && (entry.port === null || entry.port === originAuthority.port));
1570
+ const agrees = sameAuthority || declared;
1571
+ if (!agrees) {
1572
+ return refuse({ reason: "origin-mismatch", lane, host, origin, site });
1573
+ }
1574
+ }
1575
+ return;
1576
+ }
1577
+ return {
1578
+ hooks: {
1579
+ onRequest: (request) => check(request, "http") === undefined ? undefined : new Response(null, { status: 403 })
1580
+ },
1581
+ allowRequest: (request) => check(request, "socket") === undefined,
1582
+ check
1583
+ };
1584
+ }
1585
+ // src/server/openapi.ts
1586
+ var ERROR_ENVELOPE_SCHEMA = {
1587
+ type: "object",
1588
+ properties: {
1589
+ error: {
1590
+ type: "object",
1591
+ properties: {
1592
+ code: { type: "string" },
1593
+ message: { type: "string" },
1594
+ details: {},
1595
+ hint: { type: "string" }
1596
+ },
1597
+ required: ["code"]
1598
+ }
1599
+ },
1600
+ required: ["error"]
1601
+ };
1602
+ function toOpenApiPath(path) {
1603
+ return path.replace(/:([^/]+)/g, "{$1}");
1604
+ }
1605
+ function safeJson(schema, io) {
1606
+ if (!schema)
1607
+ return {};
1608
+ try {
1609
+ return toJsonSchema(schema, io, "any");
1610
+ } catch {
1611
+ return {};
1612
+ }
1613
+ }
1614
+ function errorResponse(description) {
1615
+ return {
1616
+ description,
1617
+ content: { "application/json": { schema: ERROR_ENVELOPE_SCHEMA } }
1618
+ };
1619
+ }
1620
+ function errorResponses(scope) {
1621
+ const responses = {
1622
+ "400": errorResponse("Validation error"),
1623
+ "500": errorResponse("Server error")
1624
+ };
1625
+ if (scope && scope !== "public") {
1626
+ responses["401"] = errorResponse("Unauthorized");
1627
+ responses["403"] = errorResponse("Forbidden");
1628
+ }
1629
+ return responses;
1630
+ }
1631
+ function generateOpenApiDocument(config) {
1632
+ const groups = [
1633
+ ...(config.services ?? []).map((service) => ({ pathPrefix: undefined, service })),
1634
+ ...(config.groups ?? []).flatMap((group) => group.services.map((service) => ({ pathPrefix: group.pathPrefix, service })))
1635
+ ];
1636
+ const paths = {};
1637
+ for (const { pathPrefix, service } of groups) {
1638
+ for (const [key, method] of Object.entries(service.methods)) {
1639
+ if (method.expose && !method.expose.includes("HTTP"))
1640
+ continue;
1641
+ if (config.includeMethod && !config.includeMethod(method))
1642
+ continue;
1643
+ const servicePath = joinRoutePath("/", service.prefix, method.path === "/" ? "" : method.path);
1644
+ const fullPath = toOpenApiPath(pathPrefix ? joinRoutePath(pathPrefix, servicePath) : servicePath);
1645
+ const parameters = [];
1646
+ const trailingWildcard = parseTrailingWildcard(fullPath);
1647
+ let wildcardSchema = { type: "string" };
1648
+ for (const field of jsonSchemaFields(safeJson(method.paramsSchema, "input"))) {
1649
+ if (trailingWildcard && field.name === trailingWildcard.name) {
1650
+ wildcardSchema = field.schema;
1651
+ continue;
1652
+ }
1653
+ parameters.push({
1654
+ name: field.name,
1655
+ in: "path",
1656
+ required: true,
1657
+ schema: field.schema,
1658
+ ...field.description && { description: field.description }
1659
+ });
1660
+ }
1661
+ const inputInQuery = inputIsQuery(method.method);
1662
+ if (inputInQuery && method.inputSchema) {
1663
+ for (const field of jsonSchemaFields(safeJson(method.inputSchema, "input"))) {
1664
+ parameters.push({
1665
+ name: field.name,
1666
+ in: "query",
1667
+ required: field.required,
1668
+ schema: field.schema,
1669
+ ...field.description && { description: field.description }
1670
+ });
1671
+ }
1672
+ }
1673
+ const responses = { ...errorResponses(method.scope) };
1674
+ if (method.rawResponse) {
1675
+ responses["200"] = method.method === "HEAD" ? { description: "Headers only" } : {
1676
+ description: "Success",
1677
+ content: {
1678
+ [method.contentType ?? "application/octet-stream"]: {
1679
+ schema: { type: "string", format: "binary" }
1680
+ }
1681
+ }
1682
+ };
1683
+ } else if (method.stream) {
1684
+ const mediaType = method.stream.format === "sse" ? "text/event-stream" : "application/x-ndjson";
1685
+ responses["200"] = {
1686
+ description: "Validated streaming response",
1687
+ content: {
1688
+ [mediaType]: {
1689
+ schema: { type: "string" },
1690
+ "x-stitchkit-item-schema": safeJson(method.stream.item, "output"),
1691
+ "x-stitchkit-max-frame-bytes": method.stream.maxFrameBytes ?? DEFAULT_CONTRACT_STREAM_FRAME_BYTES,
1692
+ "x-stitchkit-terminal-required": Boolean(method.stream.terminal),
1693
+ "x-stitchkit-stream-framing": method.stream.framing ?? "envelope",
1694
+ "x-stitchkit-stream-completion": method.stream.completion ?? "stream-end",
1695
+ "x-stitchkit-final-line": method.stream.finalLine ?? "allow"
1696
+ }
1697
+ }
1698
+ };
1699
+ } else if (method.outputSchema) {
1700
+ responses[String(method.responseMeta?.status ?? 200)] = {
1701
+ description: "Success",
1702
+ content: { "application/json": { schema: safeJson(method.outputSchema, "output") } }
1703
+ };
1704
+ } else {
1705
+ responses[String(method.responseMeta?.status ?? 204)] = { description: "No content" };
1706
+ }
1707
+ const operation = {
1708
+ summary: method.desc,
1709
+ operationId: `${service.name}_${key}`,
1710
+ "x-stitchkit-scope": method.scope,
1711
+ "x-stitchkit-has-input": Boolean(method.inputSchema),
1712
+ "x-stitchkit-has-output": Boolean(method.outputSchema || method.stream),
1713
+ ...method.stream && { "x-stitchkit-stream": true },
1714
+ ...parameters.length > 0 && { parameters },
1715
+ responses
1716
+ };
1717
+ if (trailingWildcard) {
1718
+ operation["x-stitchkit-trailing-wildcard"] = {
1719
+ parameter: trailingWildcard.name,
1720
+ required: true,
1721
+ schema: wildcardSchema,
1722
+ description: `Matches zero or more trailing path segments and exposes their '/'-joined remainder as params.${trailingWildcard.name}.`
1723
+ };
1724
+ }
1725
+ if (!inputInQuery && (method.inputSchema || method.multipart)) {
1726
+ if (method.multipart) {
1727
+ const inputJson = safeJson(method.inputSchema, "input");
1728
+ const baseProps = isRecord(inputJson.properties) ? inputJson.properties : {};
1729
+ const baseRequired = Array.isArray(inputJson.required) ? inputJson.required : [];
1730
+ const fileProperties = {};
1731
+ const requiredFiles = [];
1732
+ for (const [field, policy] of Object.entries(method.multipart.files)) {
1733
+ const binary = {
1734
+ type: "string",
1735
+ format: "binary",
1736
+ ...policy.maxBytes !== undefined && { maxLength: policy.maxBytes },
1737
+ ...policy.contentTypes !== undefined && {
1738
+ "x-accepted-content-types": policy.contentTypes
1739
+ }
1740
+ };
1741
+ fileProperties[field] = policy.multiple === true ? {
1742
+ type: "array",
1743
+ items: binary,
1744
+ minItems: policy.required === false ? 0 : 1,
1745
+ ...policy.maxFiles !== undefined && { maxItems: policy.maxFiles }
1746
+ } : binary;
1747
+ if (policy.required !== false)
1748
+ requiredFiles.push(field);
1749
+ }
1750
+ operation.requestBody = {
1751
+ required: baseRequired.length > 0 || requiredFiles.length > 0,
1752
+ content: {
1753
+ "multipart/form-data": {
1754
+ schema: {
1755
+ type: "object",
1756
+ properties: {
1757
+ ...baseProps,
1758
+ ...fileProperties
1759
+ },
1760
+ required: [...baseRequired, ...requiredFiles]
1761
+ }
1762
+ }
1763
+ }
1764
+ };
1765
+ } else if (method.inputSchema) {
1766
+ const required = jsonSchemaFields(safeJson(method.inputSchema, "input")).some((f) => f.required);
1767
+ const schema = safeJson(method.inputSchema, "input");
1768
+ operation.requestBody = {
1769
+ required,
1770
+ content: method.safelistedBody ? { "application/json": { schema }, "text/plain": { schema } } : { "application/json": { schema } }
1771
+ };
1772
+ }
1773
+ }
1774
+ const pathItem = paths[fullPath] ?? {};
1775
+ pathItem[method.method.toLowerCase()] = operation;
1776
+ paths[fullPath] = pathItem;
1777
+ }
1778
+ }
1779
+ return {
1780
+ openapi: "3.1.0",
1781
+ info: config.info,
1782
+ ...config.servers && { servers: config.servers },
1783
+ paths
1784
+ };
1785
+ }
1786
+ function openApiRoute(path, document) {
1787
+ return {
1788
+ method: "GET",
1789
+ path,
1790
+ handler: () => Response.json(document)
1791
+ };
1792
+ }
1793
+ // src/server/rate-limit.ts
1794
+ function refillBucket(entry, config, now) {
1795
+ const elapsed = (now - entry.lastRefill) / 1000;
1796
+ entry.tokens = Math.min(config.max, entry.tokens + elapsed / config.window * config.max);
1797
+ entry.lastRefill = now;
1798
+ }
1799
+ var MAX_BUCKETS = 1e5;
1800
+ function createRateLimiter() {
1801
+ const { store: buckets, destroy } = createSweptMap({
1802
+ intervalMs: 60000,
1803
+ isExpired: (entry, now) => now - entry.lastRefill > 300000
1804
+ });
1805
+ return {
1806
+ destroy,
1807
+ check(key, config) {
1808
+ const now = Date.now();
1809
+ const entry = buckets.get(key);
1810
+ if (entry) {
1811
+ buckets.delete(key);
1812
+ buckets.set(key, entry);
1813
+ refillBucket(entry, config, now);
1814
+ if (entry.tokens < 1)
1815
+ return false;
1816
+ entry.tokens -= 1;
1817
+ return true;
1818
+ }
1819
+ if (buckets.size >= MAX_BUCKETS) {
1820
+ const lru = buckets.keys().next().value;
1821
+ if (lru !== undefined)
1822
+ buckets.delete(lru);
1823
+ }
1824
+ const fresh = { tokens: config.max, lastRefill: now };
1825
+ buckets.set(key, fresh);
1826
+ if (fresh.tokens < 1)
1827
+ return false;
1828
+ fresh.tokens -= 1;
1829
+ return true;
1830
+ },
1831
+ remaining(key, config) {
1832
+ const entry = buckets.get(key);
1833
+ if (!entry)
1834
+ return config.max;
1835
+ refillBucket(entry, config, Date.now());
1836
+ return Math.floor(entry.tokens);
1837
+ }
1838
+ };
1839
+ }
1840
+ // src/server/raw.ts
1841
+ function respondJson(data) {
1842
+ if (data === null || data === undefined)
1843
+ return new Response(null, { status: 204 });
1844
+ return Response.json(data);
1845
+ }
1846
+ function errorResponse2(error) {
1847
+ const appErr = normalizeError(error);
1848
+ const res = Response.json(appErr.toJSON(), { status: appErr.status });
1849
+ const traceId = getTraceId();
1850
+ if (traceId)
1851
+ res.headers.set("x-request-id", traceId);
1852
+ return res;
1853
+ }
1854
+ async function parseBody(req, schema) {
1855
+ const raw = await req.json().catch(() => null);
1856
+ if (raw === null)
1857
+ return null;
1858
+ const parsed = schema.safeParse(raw);
1859
+ return parsed.success ? parsed.data : null;
1860
+ }
1861
+ // src/server/release-signal.ts
1862
+ function bindReleaseRefreshSignal(marker, options = {}) {
1863
+ const signal = options.signal ?? "SIGUSR2";
1864
+ const source = options.source ?? process;
1865
+ const handler = () => {
1866
+ try {
1867
+ options.onRefresh?.(marker.refresh());
1868
+ } catch (error) {
1869
+ try {
1870
+ options.onError?.(error);
1871
+ } catch {}
1872
+ }
1873
+ };
1874
+ source.on(signal, handler);
1875
+ return () => source.off(signal, handler);
1876
+ }
1877
+ // src/server/stream.ts
1878
+ function streamSSE(generator) {
1879
+ const encoder = new TextEncoder;
1880
+ let cancelled = false;
1881
+ const stream = new ReadableStream({
1882
+ async start(controller) {
1883
+ try {
1884
+ for await (const chunk of generator) {
1885
+ if (cancelled)
1886
+ return;
1887
+ const data = JSON.stringify(chunk);
1888
+ controller.enqueue(encoder.encode(`data: ${data}
1889
+
1890
+ `));
1891
+ }
1892
+ if (cancelled)
1893
+ return;
1894
+ controller.enqueue(encoder.encode(`data: [DONE]
1895
+
1896
+ `));
1897
+ controller.close();
1898
+ } catch (err) {
1899
+ if (cancelled)
1900
+ return;
1901
+ const envelope = normalizeError(err).toJSON();
1902
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(envelope)}
1903
+
1904
+ `));
1905
+ controller.close();
1906
+ }
1907
+ },
1908
+ cancel() {
1909
+ cancelled = true;
1910
+ generator.return(undefined).catch(() => {
1911
+ return;
1912
+ });
1913
+ }
1914
+ });
1915
+ return new Response(stream, {
1916
+ headers: {
1917
+ "Content-Type": "text/event-stream",
1918
+ "Cache-Control": "no-cache",
1919
+ Connection: "keep-alive"
1920
+ }
1921
+ });
1922
+ }
1923
+ export {
1924
+ zodIssues,
1925
+ webSocketLane,
1926
+ weakETag,
1927
+ verifyPkce,
1928
+ verifyJwt,
1929
+ unauthorized,
1930
+ streamingRoute,
1931
+ streamSSE,
1932
+ staticRoute,
1933
+ sseRoute,
1934
+ socketIoLane,
1935
+ signJwt,
1936
+ serveFile,
1937
+ serializeCookie,
1938
+ respondJson,
1939
+ resolveTraceId,
1940
+ resolveSocketIp,
1941
+ rateLimited,
1942
+ parseMultipart,
1943
+ parseCookies,
1944
+ parseCookieHeader,
1945
+ parseByteRange,
1946
+ parseBody,
1947
+ openApiRoute,
1948
+ notFound,
1949
+ normalizeError,
1950
+ ndjsonRoute,
1951
+ isWithinDir,
1952
+ isStitchErrorCode,
1953
+ isPublicIp,
1954
+ isLoopbackAddress,
1955
+ implementRegistry,
1956
+ implement,
1957
+ getClientInfo,
1958
+ generateTraceId,
1959
+ generateOpenApiDocument,
1960
+ formatZodError,
1961
+ forbidden,
1962
+ extractToken,
1963
+ extractIp,
1964
+ errorResponse2 as errorResponse,
1965
+ errorCode,
1966
+ deriveCodeChallenge,
1967
+ defineMultipartStream,
1968
+ defineCookie,
1969
+ createUnixClientTransport,
1970
+ createTrustFence,
1971
+ createSocketIOServer,
1972
+ createServer,
1973
+ createScopedImplementRegistry,
1974
+ createScopedImplement,
1975
+ createRateLimiter,
1976
+ createMultipartStream,
1977
+ createImplementRegistry,
1978
+ createImplement,
1979
+ createHandler,
1980
+ createFileStateStore,
1981
+ createEventBus,
1982
+ createErrorHook,
1983
+ createCache,
1984
+ createBearerResolver,
1985
+ createAuthHook,
1986
+ corsPreflightResponse,
1987
+ corsHeaders,
1988
+ conflict,
1989
+ composeWebSocketHandlers,
1990
+ composeLifecycleHooks,
1991
+ composeAuthHooks,
1992
+ cacheHeaders,
1993
+ bindSocketRegistry,
1994
+ bindReleaseRefreshSignal,
1995
+ bindRealtimeServer,
1996
+ bindProcessSignals,
1997
+ badRequest,
1998
+ appError,
1999
+ UnixClientTransportError,
2000
+ ShutdownStatusSchema,
2001
+ ShutdownStateSchema,
2002
+ ShutdownResultSchema,
2003
+ ShutdownOptionsSchema,
2004
+ STITCH_ERROR_STATUS,
2005
+ DEFAULT_STREAM_HEARTBEAT_MS,
2006
+ DEFAULT_CORS_EXPOSE_HEADERS,
2007
+ DEFAULT_CORS_ALLOW_HEADERS,
2008
+ AppError
2009
+ };