devflare 1.0.0-next.6 → 1.0.0-next.60

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 (609) hide show
  1. package/LICENSE +21 -0
  2. package/LLM.md +17315 -2144
  3. package/README.md +397 -607
  4. package/bin/devflare.js +30 -14
  5. package/dist/_chunks/account-Cflj6rw3.js +462 -0
  6. package/dist/_chunks/account-resources-CsmVowJp.js +159 -0
  7. package/dist/_chunks/ai-CBEuLdoP.js +322 -0
  8. package/dist/_chunks/api-TzdliH-6.js +568 -0
  9. package/dist/_chunks/build-Dp8k2SWa.js +24 -0
  10. package/dist/_chunks/build-artifacts-DLEYfdVL.js +483 -0
  11. package/dist/_chunks/cli-BlVetiEh.js +1171 -0
  12. package/dist/_chunks/cloudflare-BaloqI3H.js +157 -0
  13. package/dist/_chunks/colors-DiK6wPJ5.js +13 -0
  14. package/dist/_chunks/command-utils-CSnoFdxM.js +45 -0
  15. package/dist/_chunks/compiler-CgIFPfRA.js +521 -0
  16. package/dist/_chunks/config-BwRb2_vD.js +78 -0
  17. package/dist/_chunks/config-path-C3ac6r66.js +42 -0
  18. package/dist/_chunks/context-CX50Y2Kb.js +2250 -0
  19. package/dist/_chunks/decorators-QmV57ixr.js +19 -0
  20. package/dist/_chunks/dependencies-C2oxFjU_.js +57 -0
  21. package/dist/_chunks/deploy-Blrdr3Gv.js +1032 -0
  22. package/dist/_chunks/dev-DRP6LR2H.js +3524 -0
  23. package/dist/_chunks/doctor-n_eqvv52.js +219 -0
  24. package/dist/_chunks/durable-object-DMtH0XYX.js +234 -0
  25. package/dist/_chunks/env-S0_nMVz1.js +125 -0
  26. package/dist/_chunks/family-D3SV6I0N.js +143 -0
  27. package/dist/_chunks/generated-artifacts-dMJY4KAt.js +32 -0
  28. package/dist/_chunks/glob-CmQOvunB.js +56 -0
  29. package/dist/_chunks/init-DnkJOmpW.js +165 -0
  30. package/dist/_chunks/loader-E_UGyTrJ.js +1330 -0
  31. package/dist/_chunks/local-dev-vars-CTSa-wvF.js +81 -0
  32. package/dist/_chunks/local-hyperdrive-CJ90j46O.js +119 -0
  33. package/dist/_chunks/local-media-bindings-DsAW4AMF.js +335 -0
  34. package/dist/_chunks/local-secrets-6sMstHXw.js +123 -0
  35. package/dist/_chunks/login-D9-EwpSA.js +51 -0
  36. package/dist/_chunks/package-metadata-DjHBLB-z.js +39 -0
  37. package/dist/_chunks/preferences-BKp_7XJx.js +241 -0
  38. package/dist/_chunks/preview-C3Cdr8an.js +462 -0
  39. package/dist/_chunks/preview-registry-ClAbLTHH.js +1186 -0
  40. package/dist/_chunks/preview-resources-D_aFwtZR.js +359 -0
  41. package/dist/_chunks/previews-D-GPVCeq.js +1133 -0
  42. package/dist/_chunks/productions-me2YvmWK.js +504 -0
  43. package/dist/_chunks/r2-presign-runtime-zTOLS0Ea.js +291 -0
  44. package/dist/_chunks/ref-CYJNAAe_.js +178 -0
  45. package/dist/_chunks/remote-CZnP-HLJ.js +79 -0
  46. package/dist/_chunks/remote-config-D39BY9ji.js +132 -0
  47. package/dist/_chunks/resolve-package-qizBfCIm.js +152 -0
  48. package/dist/_chunks/rolldown-runtime-CvQ6eiug.js +14 -0
  49. package/dist/_chunks/routes-BMU7ga_l.js +851 -0
  50. package/dist/_chunks/runtime-RekfD_2X.js +874 -0
  51. package/dist/_chunks/schema-normalization-Zgm4W6O6.js +667 -0
  52. package/dist/_chunks/secrets-CxVCXmdh.js +95 -0
  53. package/dist/_chunks/tail-aMFzd-2K.js +239 -0
  54. package/dist/_chunks/token-Dmi0KXyX.js +333 -0
  55. package/dist/_chunks/tokens-iVcgNXi-.js +221 -0
  56. package/dist/_chunks/types-ByjwxoVA.js +484 -0
  57. package/dist/_chunks/ui-BUoZApvE.js +103 -0
  58. package/dist/_chunks/usage-BBTGzjon.js +272 -0
  59. package/dist/_chunks/vite-CtvgOi1c.js +1267 -0
  60. package/dist/_chunks/vite-utils-OVLMV605.js +183 -0
  61. package/dist/_chunks/worker-CtTVZeTH.js +410 -0
  62. package/dist/_chunks/worker-bundler-dTTnYU3n.js +458 -0
  63. package/dist/_chunks/worker-entrypoint-CQW77lG8.js +247 -0
  64. package/dist/_chunks/workerName-CFJsLZA-.js +23 -0
  65. package/dist/bridge/client.d.ts +49 -7
  66. package/dist/bridge/client.d.ts.map +1 -1
  67. package/dist/bridge/gateway-runtime.d.ts +8 -0
  68. package/dist/bridge/gateway-runtime.d.ts.map +1 -0
  69. package/dist/bridge/index.d.ts +6 -6
  70. package/dist/bridge/index.d.ts.map +1 -1
  71. package/dist/bridge/log.d.ts +5 -0
  72. package/dist/bridge/log.d.ts.map +1 -0
  73. package/dist/bridge/miniflare-gateway.d.ts +45 -0
  74. package/dist/bridge/miniflare-gateway.d.ts.map +1 -0
  75. package/dist/bridge/miniflare.d.ts +92 -2
  76. package/dist/bridge/miniflare.d.ts.map +1 -1
  77. package/dist/bridge/proxy.d.ts +12 -11
  78. package/dist/bridge/proxy.d.ts.map +1 -1
  79. package/dist/bridge/r2-presign-runtime.d.ts +9 -0
  80. package/dist/bridge/r2-presign-runtime.d.ts.map +1 -0
  81. package/dist/bridge/server.d.ts +2 -1
  82. package/dist/bridge/server.d.ts.map +1 -1
  83. package/dist/bridge/v2/body-streams.d.ts +53 -0
  84. package/dist/bridge/v2/body-streams.d.ts.map +1 -0
  85. package/dist/bridge/v2/codec.d.ts +106 -0
  86. package/dist/bridge/v2/codec.d.ts.map +1 -0
  87. package/dist/bridge/v2/control-messages.d.ts +46 -0
  88. package/dist/bridge/v2/control-messages.d.ts.map +1 -0
  89. package/dist/bridge/v2/frames.d.ts +109 -0
  90. package/dist/bridge/v2/frames.d.ts.map +1 -0
  91. package/dist/bridge/v2/index.d.ts +11 -0
  92. package/dist/bridge/v2/index.d.ts.map +1 -0
  93. package/dist/bridge/v2/serialization.d.ts +48 -0
  94. package/dist/bridge/v2/serialization.d.ts.map +1 -0
  95. package/dist/bridge/v2/transport.d.ts +31 -0
  96. package/dist/bridge/v2/transport.d.ts.map +1 -0
  97. package/dist/bridge/v2/value-codec.d.ts +61 -0
  98. package/dist/bridge/v2/value-codec.d.ts.map +1 -0
  99. package/dist/bridge/{serialization.d.ts → v2/value-serialization.d.ts} +40 -18
  100. package/dist/bridge/v2/value-serialization.d.ts.map +1 -0
  101. package/dist/bridge/{protocol.d.ts → v2/wire.d.ts} +32 -8
  102. package/dist/bridge/v2/wire.d.ts.map +1 -0
  103. package/dist/bridge/v2/ws-relay.d.ts +53 -0
  104. package/dist/bridge/v2/ws-relay.d.ts.map +1 -0
  105. package/dist/browser-shim/handler.d.ts +2 -2
  106. package/dist/browser-shim/handler.d.ts.map +1 -1
  107. package/dist/browser-shim/index.d.ts +2 -2
  108. package/dist/browser-shim/server.d.ts +63 -0
  109. package/dist/browser-shim/server.d.ts.map +1 -1
  110. package/dist/browser.d.ts +5778 -43
  111. package/dist/browser.d.ts.map +1 -1
  112. package/dist/browser.js +73 -142
  113. package/dist/bundler/defaults.d.ts +23 -0
  114. package/dist/bundler/defaults.d.ts.map +1 -0
  115. package/dist/bundler/do-bundler.d.ts +7 -0
  116. package/dist/bundler/do-bundler.d.ts.map +1 -1
  117. package/dist/bundler/index.d.ts +3 -1
  118. package/dist/bundler/index.d.ts.map +1 -1
  119. package/dist/bundler/rolldown-shared.d.ts +53 -0
  120. package/dist/bundler/rolldown-shared.d.ts.map +1 -0
  121. package/dist/bundler/worker-bundler.d.ts +13 -0
  122. package/dist/bundler/worker-bundler.d.ts.map +1 -0
  123. package/dist/bundler/worker-compat.d.ts +4 -0
  124. package/dist/bundler/worker-compat.d.ts.map +1 -0
  125. package/dist/cli/build-manifest.d.ts +66 -0
  126. package/dist/cli/build-manifest.d.ts.map +1 -0
  127. package/dist/cli/command-utils.d.ts +18 -0
  128. package/dist/cli/command-utils.d.ts.map +1 -0
  129. package/dist/cli/commands/account.d.ts +2 -2
  130. package/dist/cli/commands/account.d.ts.map +1 -1
  131. package/dist/cli/commands/ai.d.ts +1 -1
  132. package/dist/cli/commands/ai.d.ts.map +1 -1
  133. package/dist/cli/commands/build-artifacts.d.ts +40 -0
  134. package/dist/cli/commands/build-artifacts.d.ts.map +1 -0
  135. package/dist/cli/commands/build.d.ts +2 -2
  136. package/dist/cli/commands/build.d.ts.map +1 -1
  137. package/dist/cli/commands/config.d.ts +4 -0
  138. package/dist/cli/commands/config.d.ts.map +1 -0
  139. package/dist/cli/commands/deploy/metadata.d.ts +18 -0
  140. package/dist/cli/commands/deploy/metadata.d.ts.map +1 -0
  141. package/dist/cli/commands/deploy/prepare.d.ts +23 -0
  142. package/dist/cli/commands/deploy/prepare.d.ts.map +1 -0
  143. package/dist/cli/commands/deploy/runtime.d.ts +4 -0
  144. package/dist/cli/commands/deploy/runtime.d.ts.map +1 -0
  145. package/dist/cli/commands/deploy/verification.d.ts +36 -0
  146. package/dist/cli/commands/deploy/verification.d.ts.map +1 -0
  147. package/dist/cli/commands/deploy.d.ts +2 -2
  148. package/dist/cli/commands/deploy.d.ts.map +1 -1
  149. package/dist/cli/commands/dev.d.ts +9 -1
  150. package/dist/cli/commands/dev.d.ts.map +1 -1
  151. package/dist/cli/commands/doctor.d.ts +2 -2
  152. package/dist/cli/commands/doctor.d.ts.map +1 -1
  153. package/dist/cli/commands/init.d.ts +2 -2
  154. package/dist/cli/commands/init.d.ts.map +1 -1
  155. package/dist/cli/commands/login.d.ts +4 -0
  156. package/dist/cli/commands/login.d.ts.map +1 -0
  157. package/dist/cli/commands/previews-support/cleanup.d.ts +9 -0
  158. package/dist/cli/commands/previews-support/cleanup.d.ts.map +1 -0
  159. package/dist/cli/commands/previews-support/family.d.ts +10 -0
  160. package/dist/cli/commands/previews-support/family.d.ts.map +1 -0
  161. package/dist/cli/commands/previews-support/render.d.ts +8 -0
  162. package/dist/cli/commands/previews-support/render.d.ts.map +1 -0
  163. package/dist/cli/commands/previews-support/theme.d.ts +10 -0
  164. package/dist/cli/commands/previews-support/theme.d.ts.map +1 -0
  165. package/dist/cli/commands/previews-support/types.d.ts +70 -0
  166. package/dist/cli/commands/previews-support/types.d.ts.map +1 -0
  167. package/dist/cli/commands/previews.d.ts +4 -0
  168. package/dist/cli/commands/previews.d.ts.map +1 -0
  169. package/dist/cli/commands/productions.d.ts +4 -0
  170. package/dist/cli/commands/productions.d.ts.map +1 -0
  171. package/dist/cli/commands/remote.d.ts +1 -1
  172. package/dist/cli/commands/remote.d.ts.map +1 -1
  173. package/dist/cli/commands/secrets.d.ts +4 -0
  174. package/dist/cli/commands/secrets.d.ts.map +1 -0
  175. package/dist/cli/commands/tail.d.ts +44 -0
  176. package/dist/cli/commands/tail.d.ts.map +1 -0
  177. package/dist/cli/commands/token.d.ts +4 -0
  178. package/dist/cli/commands/token.d.ts.map +1 -0
  179. package/dist/cli/commands/type-generation/discovery.d.ts +7 -0
  180. package/dist/cli/commands/type-generation/discovery.d.ts.map +1 -0
  181. package/dist/cli/commands/type-generation/generator.d.ts +121 -0
  182. package/dist/cli/commands/type-generation/generator.d.ts.map +1 -0
  183. package/dist/cli/commands/type-generation/models.d.ts +27 -0
  184. package/dist/cli/commands/type-generation/models.d.ts.map +1 -0
  185. package/dist/cli/commands/types.d.ts +2 -2
  186. package/dist/cli/commands/types.d.ts.map +1 -1
  187. package/dist/cli/commands/worker.d.ts +4 -0
  188. package/dist/cli/commands/worker.d.ts.map +1 -0
  189. package/dist/cli/config-path.d.ts +6 -0
  190. package/dist/cli/config-path.d.ts.map +1 -0
  191. package/dist/cli/dependencies.d.ts +2 -1
  192. package/dist/cli/dependencies.d.ts.map +1 -1
  193. package/dist/cli/deploy-strategy.d.ts +17 -0
  194. package/dist/cli/deploy-strategy.d.ts.map +1 -0
  195. package/dist/cli/deploy-target.d.ts +17 -0
  196. package/dist/cli/deploy-target.d.ts.map +1 -0
  197. package/dist/cli/generated-artifacts.d.ts +12 -0
  198. package/dist/cli/generated-artifacts.d.ts.map +1 -0
  199. package/dist/cli/gradual-deploy.d.ts +49 -0
  200. package/dist/cli/gradual-deploy.d.ts.map +1 -0
  201. package/dist/cli/help-pages/pages/account.d.ts +3 -0
  202. package/dist/cli/help-pages/pages/account.d.ts.map +1 -0
  203. package/dist/cli/help-pages/pages/core.d.ts +4 -0
  204. package/dist/cli/help-pages/pages/core.d.ts.map +1 -0
  205. package/dist/cli/help-pages/pages/index.d.ts +3 -0
  206. package/dist/cli/help-pages/pages/index.d.ts.map +1 -0
  207. package/dist/cli/help-pages/pages/misc.d.ts +3 -0
  208. package/dist/cli/help-pages/pages/misc.d.ts.map +1 -0
  209. package/dist/cli/help-pages/pages/previews.d.ts +3 -0
  210. package/dist/cli/help-pages/pages/previews.d.ts.map +1 -0
  211. package/dist/cli/help-pages/pages/productions.d.ts +3 -0
  212. package/dist/cli/help-pages/pages/productions.d.ts.map +1 -0
  213. package/dist/cli/help-pages/render.d.ts +12 -0
  214. package/dist/cli/help-pages/render.d.ts.map +1 -0
  215. package/dist/cli/help-pages/shared.d.ts +15 -0
  216. package/dist/cli/help-pages/shared.d.ts.map +1 -0
  217. package/dist/cli/help-pages/types.d.ts +23 -0
  218. package/dist/cli/help-pages/types.d.ts.map +1 -0
  219. package/dist/cli/help.d.ts +6 -0
  220. package/dist/cli/help.d.ts.map +1 -0
  221. package/dist/cli/index.d.ts +1 -0
  222. package/dist/cli/index.d.ts.map +1 -1
  223. package/dist/cli/index.js +2 -0
  224. package/dist/cli/package-metadata.d.ts +16 -0
  225. package/dist/cli/package-metadata.d.ts.map +1 -0
  226. package/dist/cli/preview-bindings.d.ts +49 -0
  227. package/dist/cli/preview-bindings.d.ts.map +1 -0
  228. package/dist/cli/preview.d.ts +10 -0
  229. package/dist/cli/preview.d.ts.map +1 -0
  230. package/dist/cli/ui.d.ts +37 -0
  231. package/dist/cli/ui.d.ts.map +1 -0
  232. package/dist/cli/workspace-build-guard.d.ts +14 -0
  233. package/dist/cli/workspace-build-guard.d.ts.map +1 -0
  234. package/dist/cli/wrangler-auth.d.ts +1 -1
  235. package/dist/cloudflare/account-core.d.ts +6 -0
  236. package/dist/cloudflare/account-core.d.ts.map +1 -0
  237. package/dist/cloudflare/account-resources.d.ts +40 -0
  238. package/dist/cloudflare/account-resources.d.ts.map +1 -0
  239. package/dist/cloudflare/account-status.d.ts +11 -0
  240. package/dist/cloudflare/account-status.d.ts.map +1 -0
  241. package/dist/cloudflare/account-workers.d.ts +14 -0
  242. package/dist/cloudflare/account-workers.d.ts.map +1 -0
  243. package/dist/cloudflare/account.d.ts +7 -64
  244. package/dist/cloudflare/account.d.ts.map +1 -1
  245. package/dist/cloudflare/api.d.ts +71 -3
  246. package/dist/cloudflare/api.d.ts.map +1 -1
  247. package/dist/cloudflare/auth.d.ts +1 -1
  248. package/dist/cloudflare/auth.d.ts.map +1 -1
  249. package/dist/cloudflare/index.d.ts +61 -6
  250. package/dist/cloudflare/index.d.ts.map +1 -1
  251. package/dist/cloudflare/index.js +4 -13
  252. package/dist/cloudflare/known-permission-group-ids.generated.d.ts +10 -0
  253. package/dist/cloudflare/known-permission-group-ids.generated.d.ts.map +1 -0
  254. package/dist/cloudflare/kv-namespace.d.ts +4 -0
  255. package/dist/cloudflare/kv-namespace.d.ts.map +1 -0
  256. package/dist/cloudflare/preferences.d.ts +7 -0
  257. package/dist/cloudflare/preferences.d.ts.map +1 -1
  258. package/dist/cloudflare/preview-registry-cache.d.ts +6 -0
  259. package/dist/cloudflare/preview-registry-cache.d.ts.map +1 -0
  260. package/dist/cloudflare/preview-registry-inference.d.ts +14 -0
  261. package/dist/cloudflare/preview-registry-inference.d.ts.map +1 -0
  262. package/dist/cloudflare/preview-registry-records.d.ts +4 -0
  263. package/dist/cloudflare/preview-registry-records.d.ts.map +1 -0
  264. package/dist/cloudflare/preview-registry-shape.d.ts +47 -0
  265. package/dist/cloudflare/preview-registry-shape.d.ts.map +1 -0
  266. package/dist/cloudflare/preview-registry-store.d.ts +14 -0
  267. package/dist/cloudflare/preview-registry-store.d.ts.map +1 -0
  268. package/dist/cloudflare/preview-registry-transport.d.ts +4 -0
  269. package/dist/cloudflare/preview-registry-transport.d.ts.map +1 -0
  270. package/dist/cloudflare/preview-registry-types.d.ts +103 -0
  271. package/dist/cloudflare/preview-registry-types.d.ts.map +1 -0
  272. package/dist/cloudflare/preview-registry.d.ts +42 -0
  273. package/dist/cloudflare/preview-registry.d.ts.map +1 -0
  274. package/dist/cloudflare/preview-urls.d.ts +3 -0
  275. package/dist/cloudflare/preview-urls.d.ts.map +1 -0
  276. package/dist/cloudflare/registry-schema.d.ts +253 -0
  277. package/dist/cloudflare/registry-schema.d.ts.map +1 -0
  278. package/dist/cloudflare/remote-config.d.ts.map +1 -1
  279. package/dist/cloudflare/tokens.d.ts +44 -0
  280. package/dist/cloudflare/tokens.d.ts.map +1 -0
  281. package/dist/cloudflare/types.d.ts +124 -7
  282. package/dist/cloudflare/types.d.ts.map +1 -1
  283. package/dist/cloudflare/usage.d.ts +31 -3
  284. package/dist/cloudflare/usage.d.ts.map +1 -1
  285. package/dist/config/binding-resolution-helpers.d.ts +41 -0
  286. package/dist/config/binding-resolution-helpers.d.ts.map +1 -0
  287. package/dist/config/compatibility.d.ts +3 -0
  288. package/dist/config/compatibility.d.ts.map +1 -0
  289. package/dist/config/compiler/bindings.d.ts +14 -0
  290. package/dist/config/compiler/bindings.d.ts.map +1 -0
  291. package/dist/config/compiler/core-helpers.d.ts +6 -0
  292. package/dist/config/compiler/core-helpers.d.ts.map +1 -0
  293. package/dist/config/compiler/do-workers.d.ts +34 -0
  294. package/dist/config/compiler/do-workers.d.ts.map +1 -0
  295. package/dist/config/compiler/paths.d.ts +18 -0
  296. package/dist/config/compiler/paths.d.ts.map +1 -0
  297. package/dist/config/compiler/types.d.ts +308 -0
  298. package/dist/config/compiler/types.d.ts.map +1 -0
  299. package/dist/config/compiler.d.ts +22 -134
  300. package/dist/config/compiler.d.ts.map +1 -1
  301. package/dist/config/cron.d.ts +19 -0
  302. package/dist/config/cron.d.ts.map +1 -0
  303. package/dist/config/define.d.ts +8 -5
  304. package/dist/config/define.d.ts.map +1 -1
  305. package/dist/config/deploy-resources.d.ts +58 -0
  306. package/dist/config/deploy-resources.d.ts.map +1 -0
  307. package/dist/config/env-vars.d.ts +309 -0
  308. package/dist/config/env-vars.d.ts.map +1 -0
  309. package/dist/config/framework-providers.d.ts +9 -0
  310. package/dist/config/framework-providers.d.ts.map +1 -0
  311. package/dist/config/index.d.ts +12 -5
  312. package/dist/config/index.d.ts.map +1 -1
  313. package/dist/config/loader.d.ts +2 -1
  314. package/dist/config/loader.d.ts.map +1 -1
  315. package/dist/config/local-dev-vars.d.ts +15 -0
  316. package/dist/config/local-dev-vars.d.ts.map +1 -0
  317. package/dist/config/preview-resources.d.ts +83 -0
  318. package/dist/config/preview-resources.d.ts.map +1 -0
  319. package/dist/config/preview.d.ts +29 -0
  320. package/dist/config/preview.d.ts.map +1 -0
  321. package/dist/config/ref.d.ts +16 -25
  322. package/dist/config/ref.d.ts.map +1 -1
  323. package/dist/config/resolve-phased.d.ts +72 -0
  324. package/dist/config/resolve-phased.d.ts.map +1 -0
  325. package/dist/config/resolve.d.ts +11 -0
  326. package/dist/config/resolve.d.ts.map +1 -0
  327. package/dist/config/resource-resolution.d.ts +80 -0
  328. package/dist/config/resource-resolution.d.ts.map +1 -0
  329. package/dist/config/schema-bindings.d.ts +2124 -0
  330. package/dist/config/schema-bindings.d.ts.map +1 -0
  331. package/dist/config/schema-build.d.ts +67 -0
  332. package/dist/config/schema-build.d.ts.map +1 -0
  333. package/dist/config/schema-env.d.ts +3821 -0
  334. package/dist/config/schema-env.d.ts.map +1 -0
  335. package/dist/config/schema-normalization.d.ts +272 -0
  336. package/dist/config/schema-normalization.d.ts.map +1 -0
  337. package/dist/config/schema-runtime.d.ts +597 -0
  338. package/dist/config/schema-runtime.d.ts.map +1 -0
  339. package/dist/config/schema-types-bindings-platform.d.ts +520 -0
  340. package/dist/config/schema-types-bindings-platform.d.ts.map +1 -0
  341. package/dist/config/schema-types-bindings-resources.d.ts +802 -0
  342. package/dist/config/schema-types-bindings-resources.d.ts.map +1 -0
  343. package/dist/config/schema-types-bindings.d.ts +293 -0
  344. package/dist/config/schema-types-bindings.d.ts.map +1 -0
  345. package/dist/config/schema-types-build.d.ts +86 -0
  346. package/dist/config/schema-types-build.d.ts.map +1 -0
  347. package/dist/config/schema-types-runtime-server.d.ts +196 -0
  348. package/dist/config/schema-types-runtime-server.d.ts.map +1 -0
  349. package/dist/config/schema-types-runtime.d.ts +913 -0
  350. package/dist/config/schema-types-runtime.d.ts.map +1 -0
  351. package/dist/config/schema-types.d.ts +458 -0
  352. package/dist/config/schema-types.d.ts.map +1 -0
  353. package/dist/config/schema.d.ts +5796 -2023
  354. package/dist/config/schema.d.ts.map +1 -1
  355. package/dist/config/service-bindings-validation.d.ts +36 -0
  356. package/dist/config/service-bindings-validation.d.ts.map +1 -0
  357. package/dist/config-entry.d.ts +7 -0
  358. package/dist/config-entry.d.ts.map +1 -0
  359. package/dist/config-entry.js +3 -0
  360. package/dist/decorators/durable-object.d.ts.map +1 -1
  361. package/dist/decorators/index.d.ts +2 -2
  362. package/dist/decorators/index.js +2 -9
  363. package/dist/dev-server/d1-migrations.d.ts +36 -0
  364. package/dist/dev-server/d1-migrations.d.ts.map +1 -0
  365. package/dist/dev-server/dev-server-state.d.ts +59 -0
  366. package/dist/dev-server/dev-server-state.d.ts.map +1 -0
  367. package/dist/dev-server/gateway-script.d.ts +22 -0
  368. package/dist/dev-server/gateway-script.d.ts.map +1 -0
  369. package/dist/dev-server/index.d.ts +1 -1
  370. package/dist/dev-server/miniflare-bindings.d.ts +90 -0
  371. package/dist/dev-server/miniflare-bindings.d.ts.map +1 -0
  372. package/dist/dev-server/miniflare-dev-config.d.ts +49 -0
  373. package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -0
  374. package/dist/dev-server/miniflare-log.d.ts +20 -0
  375. package/dist/dev-server/miniflare-log.d.ts.map +1 -0
  376. package/dist/dev-server/miniflare-worker-config.d.ts +100 -0
  377. package/dist/dev-server/miniflare-worker-config.d.ts.map +1 -0
  378. package/dist/dev-server/reload-queue.d.ts +13 -0
  379. package/dist/dev-server/reload-queue.d.ts.map +1 -0
  380. package/dist/dev-server/runtime-stdio.d.ts +8 -0
  381. package/dist/dev-server/runtime-stdio.d.ts.map +1 -0
  382. package/dist/dev-server/server-startup-helpers.d.ts +84 -0
  383. package/dist/dev-server/server-startup-helpers.d.ts.map +1 -0
  384. package/dist/dev-server/server.d.ts +2 -0
  385. package/dist/dev-server/server.d.ts.map +1 -1
  386. package/dist/dev-server/vite-process.d.ts +24 -0
  387. package/dist/dev-server/vite-process.d.ts.map +1 -0
  388. package/dist/dev-server/vite-utils.d.ts +19 -1
  389. package/dist/dev-server/vite-utils.d.ts.map +1 -1
  390. package/dist/dev-server/worker-source-watcher.d.ts +17 -0
  391. package/dist/dev-server/worker-source-watcher.d.ts.map +1 -0
  392. package/dist/dev-server/worker-surface-paths.d.ts +6 -0
  393. package/dist/dev-server/worker-surface-paths.d.ts.map +1 -0
  394. package/dist/env.d.ts +10 -0
  395. package/dist/env.d.ts.map +1 -1
  396. package/dist/index.d.ts +8 -12
  397. package/dist/index.d.ts.map +1 -1
  398. package/dist/index.js +9 -297
  399. package/dist/runtime/context-events.d.ts +13 -0
  400. package/dist/runtime/context-events.d.ts.map +1 -0
  401. package/dist/runtime/context-types.d.ts +82 -0
  402. package/dist/runtime/context-types.d.ts.map +1 -0
  403. package/dist/runtime/context.d.ts +20 -44
  404. package/dist/runtime/context.d.ts.map +1 -1
  405. package/dist/runtime/exports.d.ts +70 -55
  406. package/dist/runtime/exports.d.ts.map +1 -1
  407. package/dist/runtime/index.d.ts +11 -5
  408. package/dist/runtime/index.d.ts.map +1 -1
  409. package/dist/runtime/index.js +5 -184
  410. package/dist/runtime/middleware.d.ts +119 -67
  411. package/dist/runtime/middleware.d.ts.map +1 -1
  412. package/dist/runtime/r2-presign.d.ts +164 -0
  413. package/dist/runtime/r2-presign.d.ts.map +1 -0
  414. package/dist/runtime/router/index.d.ts +7 -0
  415. package/dist/runtime/router/index.d.ts.map +1 -0
  416. package/dist/runtime/router/types.d.ts +24 -0
  417. package/dist/runtime/router/types.d.ts.map +1 -0
  418. package/dist/runtime/validation.d.ts +18 -4
  419. package/dist/runtime/validation.d.ts.map +1 -1
  420. package/dist/secrets/local-secrets.d.ts +46 -0
  421. package/dist/secrets/local-secrets.d.ts.map +1 -0
  422. package/dist/shims/local-hyperdrive.d.ts +12 -0
  423. package/dist/shims/local-hyperdrive.d.ts.map +1 -0
  424. package/dist/shims/local-media-bindings.d.ts +19 -0
  425. package/dist/shims/local-media-bindings.d.ts.map +1 -0
  426. package/dist/shims/local-worker-loader.d.ts +3 -0
  427. package/dist/shims/local-worker-loader.d.ts.map +1 -0
  428. package/dist/sveltekit/index.d.ts +1 -1
  429. package/dist/sveltekit/index.d.ts.map +1 -1
  430. package/dist/sveltekit/index.js +313 -169
  431. package/dist/sveltekit/local-bindings.d.ts +4 -0
  432. package/dist/sveltekit/local-bindings.d.ts.map +1 -0
  433. package/dist/sveltekit/platform.d.ts +20 -2
  434. package/dist/sveltekit/platform.d.ts.map +1 -1
  435. package/dist/test/ai-search.d.ts +39 -0
  436. package/dist/test/ai-search.d.ts.map +1 -0
  437. package/dist/test/alarm.d.ts +55 -0
  438. package/dist/test/alarm.d.ts.map +1 -0
  439. package/dist/test/binding-hints.d.ts +10 -0
  440. package/dist/test/binding-hints.d.ts.map +1 -0
  441. package/dist/test/cf.d.ts +71 -35
  442. package/dist/test/cf.d.ts.map +1 -1
  443. package/dist/test/containers.d.ts +87 -0
  444. package/dist/test/containers.d.ts.map +1 -0
  445. package/dist/test/email.d.ts +16 -7
  446. package/dist/test/email.d.ts.map +1 -1
  447. package/dist/test/index.d.ts +20 -21
  448. package/dist/test/index.d.ts.map +1 -1
  449. package/dist/test/index.js +5082 -75
  450. package/dist/test/offline-bindings.d.ts +124 -0
  451. package/dist/test/offline-bindings.d.ts.map +1 -0
  452. package/dist/test/queue.d.ts.map +1 -1
  453. package/dist/test/remote-ai.d.ts.map +1 -1
  454. package/dist/test/remote-cloudflare.d.ts +13 -0
  455. package/dist/test/remote-cloudflare.d.ts.map +1 -0
  456. package/dist/test/remote-vectorize.d.ts.map +1 -1
  457. package/dist/test/resolve-service-bindings.d.ts +64 -4
  458. package/dist/test/resolve-service-bindings.d.ts.map +1 -1
  459. package/dist/test/scheduled.d.ts.map +1 -1
  460. package/dist/test/should-skip.d.ts +14 -18
  461. package/dist/test/should-skip.d.ts.map +1 -1
  462. package/dist/test/simple-context-bindings.d.ts +13 -0
  463. package/dist/test/simple-context-bindings.d.ts.map +1 -0
  464. package/dist/test/simple-context-durable-objects.d.ts +6 -0
  465. package/dist/test/simple-context-durable-objects.d.ts.map +1 -0
  466. package/dist/test/simple-context-env.d.ts +35 -0
  467. package/dist/test/simple-context-env.d.ts.map +1 -0
  468. package/dist/test/simple-context-gateway-script.d.ts +2 -0
  469. package/dist/test/simple-context-gateway-script.d.ts.map +1 -0
  470. package/dist/test/simple-context-handlers.d.ts +12 -0
  471. package/dist/test/simple-context-handlers.d.ts.map +1 -0
  472. package/dist/test/simple-context-lifecycle.d.ts +32 -0
  473. package/dist/test/simple-context-lifecycle.d.ts.map +1 -0
  474. package/dist/test/simple-context-mfconfig.d.ts +18 -0
  475. package/dist/test/simple-context-mfconfig.d.ts.map +1 -0
  476. package/dist/test/simple-context-multi-worker.d.ts +16 -0
  477. package/dist/test/simple-context-multi-worker.d.ts.map +1 -0
  478. package/dist/test/simple-context-paths.d.ts +40 -0
  479. package/dist/test/simple-context-paths.d.ts.map +1 -0
  480. package/dist/test/simple-context-runtime.d.ts +19 -0
  481. package/dist/test/simple-context-runtime.d.ts.map +1 -0
  482. package/dist/test/simple-context-startup.d.ts +11 -0
  483. package/dist/test/simple-context-startup.d.ts.map +1 -0
  484. package/dist/test/simple-context-transport.d.ts +14 -0
  485. package/dist/test/simple-context-transport.d.ts.map +1 -0
  486. package/dist/test/simple-context.d.ts +8 -27
  487. package/dist/test/simple-context.d.ts.map +1 -1
  488. package/dist/test/tail.d.ts +3 -2
  489. package/dist/test/tail.d.ts.map +1 -1
  490. package/dist/test/utilities/analytics-engine.d.ts +22 -0
  491. package/dist/test/utilities/analytics-engine.d.ts.map +1 -0
  492. package/dist/test/utilities/artifacts.d.ts +11 -0
  493. package/dist/test/utilities/artifacts.d.ts.map +1 -0
  494. package/dist/test/utilities/context.d.ts +39 -0
  495. package/dist/test/utilities/context.d.ts.map +1 -0
  496. package/dist/test/utilities/d1.d.ts +21 -0
  497. package/dist/test/utilities/d1.d.ts.map +1 -0
  498. package/dist/test/utilities/env.d.ts +45 -0
  499. package/dist/test/utilities/env.d.ts.map +1 -0
  500. package/dist/test/utilities/kv.d.ts +11 -0
  501. package/dist/test/utilities/kv.d.ts.map +1 -0
  502. package/dist/test/utilities/media.d.ts +16 -0
  503. package/dist/test/utilities/media.d.ts.map +1 -0
  504. package/dist/test/utilities/platform.d.ts +41 -0
  505. package/dist/test/utilities/platform.d.ts.map +1 -0
  506. package/dist/test/utilities/queue.d.ts +5 -0
  507. package/dist/test/utilities/queue.d.ts.map +1 -0
  508. package/dist/test/utilities/r2.d.ts +2 -0
  509. package/dist/test/utilities/r2.d.ts.map +1 -0
  510. package/dist/test/utilities/send-email.d.ts +27 -0
  511. package/dist/test/utilities/send-email.d.ts.map +1 -0
  512. package/dist/test/utilities/stream-flagship.d.ts +27 -0
  513. package/dist/test/utilities/stream-flagship.d.ts.map +1 -0
  514. package/dist/test/utilities/vectorize.d.ts +38 -0
  515. package/dist/test/utilities/vectorize.d.ts.map +1 -0
  516. package/dist/test/utilities/workflows.d.ts +26 -0
  517. package/dist/test/utilities/workflows.d.ts.map +1 -0
  518. package/dist/test/utilities.d.ts +14 -98
  519. package/dist/test/utilities.d.ts.map +1 -1
  520. package/dist/test/worker.d.ts +6 -0
  521. package/dist/test/worker.d.ts.map +1 -1
  522. package/dist/transform/durable-object.d.ts.map +1 -1
  523. package/dist/transform/index.d.ts +2 -2
  524. package/dist/transform/worker-entrypoint.d.ts +5 -0
  525. package/dist/transform/worker-entrypoint.d.ts.map +1 -1
  526. package/dist/utils/entrypoint-discovery.d.ts +6 -3
  527. package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
  528. package/dist/utils/glob.d.ts.map +1 -1
  529. package/dist/utils/resolve-package.d.ts.map +1 -1
  530. package/dist/utils/send-email.d.ts +15 -0
  531. package/dist/utils/send-email.d.ts.map +1 -0
  532. package/dist/utils/send-email.js +163 -0
  533. package/dist/vite/config-file.d.ts +25 -0
  534. package/dist/vite/config-file.d.ts.map +1 -0
  535. package/dist/vite/index.d.ts +3 -2
  536. package/dist/vite/index.d.ts.map +1 -1
  537. package/dist/vite/index.js +2 -339
  538. package/dist/vite/plugin-config-hook.d.ts +28 -0
  539. package/dist/vite/plugin-config-hook.d.ts.map +1 -0
  540. package/dist/vite/plugin-context.d.ts +27 -0
  541. package/dist/vite/plugin-context.d.ts.map +1 -0
  542. package/dist/vite/plugin-durable-objects.d.ts +18 -0
  543. package/dist/vite/plugin-durable-objects.d.ts.map +1 -0
  544. package/dist/vite/plugin-programmatic.d.ts +44 -0
  545. package/dist/vite/plugin-programmatic.d.ts.map +1 -0
  546. package/dist/vite/plugin-service-bindings.d.ts +13 -0
  547. package/dist/vite/plugin-service-bindings.d.ts.map +1 -0
  548. package/dist/vite/plugin-transform.d.ts +41 -0
  549. package/dist/vite/plugin-transform.d.ts.map +1 -0
  550. package/dist/vite/plugin.d.ts +10 -41
  551. package/dist/vite/plugin.d.ts.map +1 -1
  552. package/dist/worker-entry/composed-worker.d.ts +7 -0
  553. package/dist/worker-entry/composed-worker.d.ts.map +1 -0
  554. package/dist/worker-entry/durable-object-discovery.d.ts +20 -0
  555. package/dist/worker-entry/durable-object-discovery.d.ts.map +1 -0
  556. package/dist/worker-entry/extensions.d.ts +5 -0
  557. package/dist/worker-entry/extensions.d.ts.map +1 -0
  558. package/dist/worker-entry/routes.d.ts +22 -0
  559. package/dist/worker-entry/routes.d.ts.map +1 -0
  560. package/dist/worker-entry/surface-paths.d.ts +26 -0
  561. package/dist/worker-entry/surface-paths.d.ts.map +1 -0
  562. package/dist/worker-entry/validate-fetch-style.d.ts +12 -0
  563. package/dist/worker-entry/validate-fetch-style.d.ts.map +1 -0
  564. package/dist/workflows/local-workflow-entrypoints.d.ts +7 -0
  565. package/dist/workflows/local-workflow-entrypoints.d.ts.map +1 -0
  566. package/package.json +160 -117
  567. package/R2.md +0 -170
  568. package/dist/account-rvrj687w.js +0 -397
  569. package/dist/ai-dx4fr9jh.js +0 -107
  570. package/dist/bridge/protocol.d.ts.map +0 -1
  571. package/dist/bridge/serialization.d.ts.map +0 -1
  572. package/dist/browser-shim/worker.d.ts +0 -14
  573. package/dist/browser-shim/worker.d.ts.map +0 -1
  574. package/dist/build-nz5yrj7f.js +0 -53
  575. package/dist/deploy-a5pcxd5w.js +0 -70
  576. package/dist/dev-7agn9g5s.js +0 -2418
  577. package/dist/doctor-v7jy4s3r.js +0 -190
  578. package/dist/durable-object-t4kbb0yt.js +0 -13
  579. package/dist/index-18hvb6gb.js +0 -194
  580. package/dist/index-1xpj0m4r.js +0 -57
  581. package/dist/index-37x76zdn.js +0 -4
  582. package/dist/index-3t6rypgc.js +0 -13
  583. package/dist/index-62b3gt2g.js +0 -12
  584. package/dist/index-67qcae0f.js +0 -183
  585. package/dist/index-9ats0s83.js +0 -70
  586. package/dist/index-a855bdsx.js +0 -18
  587. package/dist/index-ccrh4w3t.js +0 -1133
  588. package/dist/index-d8bdkx2h.js +0 -109
  589. package/dist/index-gz1gndna.js +0 -307
  590. package/dist/index-hcex3rgh.js +0 -266
  591. package/dist/index-k7r18na8.js +0 -0
  592. package/dist/index-n3np2d6t.js +0 -462
  593. package/dist/index-n7rs26ft.js +0 -77
  594. package/dist/index-npc1c8jx.js +0 -44
  595. package/dist/index-p7g30wd2.js +0 -281
  596. package/dist/index-rbht7m9r.js +0 -36
  597. package/dist/index-rprrn24p.js +0 -2153
  598. package/dist/index-tfyxa77h.js +0 -850
  599. package/dist/index-tk6ej9dj.js +0 -94
  600. package/dist/index-v8vvsn9x.js +0 -169
  601. package/dist/index-z14anrqp.js +0 -226
  602. package/dist/init-f9mgmew3.js +0 -186
  603. package/dist/remote-q59qk463.js +0 -97
  604. package/dist/test/bridge-context.d.ts +0 -76
  605. package/dist/test/bridge-context.d.ts.map +0 -1
  606. package/dist/test/multi-worker-context.d.ts +0 -114
  607. package/dist/test/multi-worker-context.d.ts.map +0 -1
  608. package/dist/types-vss6vrz7.js +0 -455
  609. package/dist/worker-entrypoint-m9th0rg0.js +0 -13
@@ -0,0 +1,247 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-CvQ6eiug.js";
2
+ import MagicString from "magic-string";
3
+ import ts from "typescript";
4
+ //#region src/worker-entry/extensions.ts
5
+ /** Extensions accepted as worker source modules. */
6
+ const SUPPORTED_WORKER_EXTENSIONS = [
7
+ ".ts",
8
+ ".tsx",
9
+ ".mts",
10
+ ".mjs",
11
+ ".cts",
12
+ ".cjs",
13
+ ".js",
14
+ ".jsx"
15
+ ];
16
+ /** Subset of {@link SUPPORTED_WORKER_EXTENSIONS} that may host TypeScript-only syntax. */
17
+ const TS_WORKER_EXTENSIONS = [
18
+ ".ts",
19
+ ".tsx",
20
+ ".mts",
21
+ ".cts"
22
+ ];
23
+ //#endregion
24
+ //#region src/transform/worker-entrypoint.ts
25
+ var worker_entrypoint_exports = /* @__PURE__ */ __exportAll({
26
+ findExportedFunctions: () => findExportedFunctions,
27
+ shouldEmitTsSyntax: () => shouldEmitTsSyntax,
28
+ shouldTransformWorker: () => shouldTransformWorker,
29
+ transformWorkerEntrypoint: () => transformWorkerEntrypoint
30
+ });
31
+ /**
32
+ * Find all exported functions in a worker.ts file using TypeScript AST
33
+ */
34
+ function findExportedFunctions(code) {
35
+ const functions = [];
36
+ const sourceFile = ts.createSourceFile("worker.ts", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
37
+ function visit(node) {
38
+ if (ts.isFunctionDeclaration(node) && node.name) {
39
+ const modifiers = ts.getModifiers(node);
40
+ const isExported = modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
41
+ const isDefault = modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
42
+ if (isExported) {
43
+ const isAsync = modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? false;
44
+ const funcName = isDefault ? "fetch" : node.name.text;
45
+ const params = node.parameters.map((p) => code.substring(p.getStart(sourceFile), p.getEnd())).join(", ");
46
+ const returnType = node.type ? code.substring(node.type.getStart(sourceFile), node.type.getEnd()) : void 0;
47
+ functions.push({
48
+ name: funcName,
49
+ isAsync,
50
+ params,
51
+ returnType,
52
+ start: node.getStart(sourceFile),
53
+ end: node.getEnd(),
54
+ isDefault
55
+ });
56
+ }
57
+ }
58
+ if (ts.isFunctionDeclaration(node) && !node.name) {
59
+ const modifiers = ts.getModifiers(node);
60
+ const isExported = modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
61
+ const isDefault = modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
62
+ if (isExported && isDefault) {
63
+ const isAsync = modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? false;
64
+ const params = node.parameters.map((p) => code.substring(p.getStart(sourceFile), p.getEnd())).join(", ");
65
+ const returnType = node.type ? code.substring(node.type.getStart(sourceFile), node.type.getEnd()) : void 0;
66
+ functions.push({
67
+ name: "fetch",
68
+ isAsync,
69
+ params,
70
+ returnType,
71
+ start: node.getStart(sourceFile),
72
+ end: node.getEnd(),
73
+ isDefault: true
74
+ });
75
+ }
76
+ }
77
+ if (ts.isVariableStatement(node)) {
78
+ if (ts.getModifiers(node)?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {
79
+ for (const decl of node.declarationList.declarations) if (ts.isIdentifier(decl.name) && decl.initializer) {
80
+ let funcExpr;
81
+ if (ts.isFunctionExpression(decl.initializer)) funcExpr = decl.initializer;
82
+ else if (ts.isArrowFunction(decl.initializer)) funcExpr = decl.initializer;
83
+ if (funcExpr) {
84
+ const isAsync = ts.getModifiers(funcExpr)?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? (ts.isArrowFunction(funcExpr) && funcExpr.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) ?? false;
85
+ const params = funcExpr.parameters.map((p) => code.substring(p.getStart(sourceFile), p.getEnd())).join(", ");
86
+ const returnType = funcExpr.type ? code.substring(funcExpr.type.getStart(sourceFile), funcExpr.type.getEnd()) : void 0;
87
+ functions.push({
88
+ name: decl.name.text,
89
+ isAsync,
90
+ params,
91
+ returnType,
92
+ start: node.getStart(sourceFile),
93
+ end: node.getEnd()
94
+ });
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ts.forEachChild(node, visit);
100
+ }
101
+ visit(sourceFile);
102
+ return functions;
103
+ }
104
+ /**
105
+ * Returns true when the filename has an extension that permits TS-only syntax.
106
+ * Gates injection of interfaces and type annotations into emitted worker code.
107
+ */
108
+ function shouldEmitTsSyntax(filename) {
109
+ const lower = filename.toLowerCase();
110
+ return TS_WORKER_EXTENSIONS.some((ext) => lower.endsWith(ext));
111
+ }
112
+ /**
113
+ * Check if a file should be transformed as a worker entrypoint
114
+ * Returns true if the file has exported functions that could be RPC methods
115
+ */
116
+ function shouldTransformWorker(code, filePath) {
117
+ const lower = filePath.toLowerCase();
118
+ if (!SUPPORTED_WORKER_EXTENSIONS.some((ext) => lower.endsWith(`worker${ext}`))) return false;
119
+ return findExportedFunctions(code).length > 0;
120
+ }
121
+ /**
122
+ * Transform a worker.ts file into a WorkerEntrypoint class
123
+ *
124
+ * @param code - Source code to transform
125
+ * @param id - File path/id for source mapping
126
+ * @param options - Transform options
127
+ * @returns Transformed code with source map
128
+ */
129
+ function transformWorkerEntrypoint(code, id, options = {}) {
130
+ const className = options.className ?? "Worker";
131
+ const injectContext = options.injectContext ?? true;
132
+ const emitTs = shouldEmitTsSyntax(id);
133
+ const functions = findExportedFunctions(code);
134
+ if (functions.length === 0) return null;
135
+ const fetchFn = functions.find((f) => f.name === "fetch");
136
+ const rpcMethods = functions.filter((f) => f.name !== "fetch");
137
+ const needsFetchHelpers = Boolean(fetchFn);
138
+ const s = new MagicString(code);
139
+ const importStatement = `import { WorkerEntrypoint } from 'cloudflare:workers'\n`;
140
+ if (needsFetchHelpers) {
141
+ const runtimeImports = ["createFetchEvent", "invokeFetchHandler"];
142
+ if (injectContext) runtimeImports.push("runWithEventContext");
143
+ s.prepend(`import { ${runtimeImports.join(", ")} } from 'devflare/runtime'\n`);
144
+ }
145
+ s.prepend(importStatement);
146
+ const sourceFile = ts.createSourceFile("worker.ts", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
147
+ const internalNameFor = (name) => name === "fetch" ? "__originalFetch" : `__original_${name}`;
148
+ function visit(node) {
149
+ if (ts.isFunctionDeclaration(node)) {
150
+ const modifiers = ts.getModifiers(node);
151
+ const exportMod = modifiers?.find((m) => m.kind === ts.SyntaxKind.ExportKeyword);
152
+ const defaultMod = modifiers?.find((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
153
+ const asyncMod = modifiers?.find((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
154
+ if (exportMod) {
155
+ const isDefault = Boolean(defaultMod);
156
+ const logicalName = isDefault ? "fetch" : node.name?.text;
157
+ if (logicalName) {
158
+ const internal = internalNameFor(logicalName);
159
+ if (isDefault && !node.name) {
160
+ const funcKeyword = node.getChildren(sourceFile).find((c) => c.kind === ts.SyntaxKind.FunctionKeyword);
161
+ if (funcKeyword) {
162
+ const asyncKw = asyncMod ? "async " : "";
163
+ s.overwrite(node.getStart(sourceFile), funcKeyword.getStart(sourceFile), `const ${internal} = ${asyncKw}`);
164
+ }
165
+ } else if (node.name) {
166
+ s.remove(exportMod.getStart(sourceFile), exportMod.getEnd());
167
+ if (defaultMod) s.remove(defaultMod.getStart(sourceFile), defaultMod.getEnd());
168
+ s.overwrite(node.name.getStart(sourceFile), node.name.getEnd(), internal);
169
+ }
170
+ }
171
+ }
172
+ } else if (ts.isVariableStatement(node)) {
173
+ const exportMod = ts.getModifiers(node)?.find((m) => m.kind === ts.SyntaxKind.ExportKeyword);
174
+ if (exportMod) {
175
+ let rewroteAny = false;
176
+ for (const decl of node.declarationList.declarations) if (ts.isIdentifier(decl.name) && decl.initializer && (ts.isFunctionExpression(decl.initializer) || ts.isArrowFunction(decl.initializer))) {
177
+ const internal = internalNameFor(decl.name.text);
178
+ s.overwrite(decl.name.getStart(sourceFile), decl.name.getEnd(), internal);
179
+ rewroteAny = true;
180
+ }
181
+ if (rewroteAny) s.remove(exportMod.getStart(sourceFile), exportMod.getEnd());
182
+ }
183
+ }
184
+ ts.forEachChild(node, visit);
185
+ }
186
+ visit(sourceFile);
187
+ let classBody = `\n\n// ============ Devflare WorkerEntrypoint ============\nclass ${className} extends WorkerEntrypoint {\n`;
188
+ if (fetchFn) {
189
+ classBody += `\t${emitTs ? "async fetch(request: Request): Promise<Response>" : "async fetch(request)"} {\n`;
190
+ classBody += `\t\tconst __devflareEvent = createFetchEvent(request, this.env, this.ctx)\n`;
191
+ if (injectContext) {
192
+ classBody += `\t\treturn runWithEventContext(\n`;
193
+ classBody += `\t\t\t__devflareEvent,\n`;
194
+ classBody += `\t\t\t() => invokeFetchHandler(__originalFetch, __devflareEvent)\n`;
195
+ classBody += `\t\t)\n`;
196
+ classBody += `\t}\n`;
197
+ } else {
198
+ classBody += `\t\treturn invokeFetchHandler(__originalFetch, __devflareEvent)\n`;
199
+ classBody += `\t}\n`;
200
+ }
201
+ }
202
+ for (const fn of rpcMethods) {
203
+ const asyncPrefix = fn.isAsync ? "async " : "";
204
+ const paramNames = extractParamNames(fn.params);
205
+ const signatureParams = emitTs ? fn.params : paramNames;
206
+ const returnType = emitTs && fn.returnType ? `: ${fn.returnType}` : "";
207
+ classBody += `\n\t${asyncPrefix}${fn.name}(${signatureParams})${returnType} {\n`;
208
+ classBody += `\t\treturn __original_${fn.name}(${paramNames})\n`;
209
+ classBody += `\t}\n`;
210
+ }
211
+ classBody += `}\n\n`;
212
+ classBody += `export { ${className} }\n`;
213
+ classBody += `export { ${className} as default }\n`;
214
+ classBody += `// ============ End Devflare WorkerEntrypoint ============\n`;
215
+ s.append(classBody);
216
+ return {
217
+ code: s.toString(),
218
+ map: s.generateMap({
219
+ source: id,
220
+ file: id + ".map",
221
+ includeContent: true
222
+ }),
223
+ rpcMethods: rpcMethods.map((fn) => fn.name),
224
+ className
225
+ };
226
+ }
227
+ /**
228
+ * Extract parameter names from a parameter string
229
+ * "a: number, b: string" -> "a, b"
230
+ */
231
+ function extractParamNames(params) {
232
+ if (!params.trim()) return "";
233
+ const tempCode = `function f(${params}) {}`;
234
+ const sourceFile = ts.createSourceFile("temp.ts", tempCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
235
+ const names = [];
236
+ function visit(node) {
237
+ if (ts.isFunctionDeclaration(node)) {
238
+ for (const param of node.parameters) if (ts.isIdentifier(param.name)) names.push(param.name.text);
239
+ else if (ts.isObjectBindingPattern(param.name) || ts.isArrayBindingPattern(param.name)) names.push(tempCode.substring(param.name.getStart(sourceFile), param.name.getEnd()));
240
+ }
241
+ ts.forEachChild(node, visit);
242
+ }
243
+ visit(sourceFile);
244
+ return names.join(", ");
245
+ }
246
+ //#endregion
247
+ export { worker_entrypoint_exports as n, SUPPORTED_WORKER_EXTENSIONS as r, transformWorkerEntrypoint as t };
@@ -0,0 +1,23 @@
1
+ //#region src/workerName.ts
2
+ /**
3
+ * The current worker's name from devflare.config.ts
4
+ *
5
+ * This value is injected at build time by the devflare bundler.
6
+ * In development (non-bundled), it will be 'unknown' or throw an error.
7
+ *
8
+ * @example
9
+ * import { workerName } from 'devflare'
10
+ *
11
+ * export default {
12
+ * fetch(request) {
13
+ * return new Response(`Hello from ${workerName}`)
14
+ * }
15
+ * }
16
+ */
17
+ const workerName = (() => {
18
+ if (typeof __DEVFLARE_WORKER_NAME__ !== "undefined") return __DEVFLARE_WORKER_NAME__;
19
+ if (typeof process !== "undefined" && process.env?.DEVFLARE_WORKER_NAME) return process.env.DEVFLARE_WORKER_NAME;
20
+ return "unknown";
21
+ })();
22
+ //#endregion
23
+ export { workerName as t };
@@ -1,5 +1,7 @@
1
+ type WebSocketConstructor = new (url: string) => WebSocket;
2
+ export declare function resolveBridgeWebSocketConstructor(runtimeWebSocket?: unknown): Promise<WebSocketConstructor>;
1
3
  export interface BridgeClientOptions {
2
- /** Bridge WebSocket URL (default: ws://localhost:8686) */
4
+ /** Bridge WebSocket URL (default: ws://localhost:8787) */
3
5
  url?: string;
4
6
  /** Auto-reconnect on disconnect */
5
7
  autoReconnect?: boolean;
@@ -17,22 +19,38 @@ export interface ActiveStream {
17
19
  controller: ReadableStreamDefaultController<Uint8Array>;
18
20
  buffer: Uint8Array[];
19
21
  creditRemaining: number;
22
+ /** Resolver for a pending pull waiting on bytes or end */
23
+ pendingPull: {
24
+ resolve: () => void;
25
+ reject: (error: Error) => void;
26
+ } | null;
27
+ /** Stream ended (from server) — signal pull to flush and close */
28
+ ended: boolean;
29
+ /** Stream was cancelled locally or aborted */
30
+ closed: boolean;
20
31
  }
21
32
  export interface ActiveWsProxy {
22
33
  clientWs: WebSocket;
23
34
  onMessage: (data: Uint8Array | string) => void;
24
35
  onClose: (code?: number, reason?: string) => void;
25
36
  }
37
+ export interface PendingWsOpen {
38
+ resolve: () => void;
39
+ reject: (error: Error) => void;
40
+ }
26
41
  export declare class BridgeClient {
27
42
  private ws;
43
+ private codec;
44
+ private adapter;
28
45
  private url;
29
46
  private autoReconnect;
30
47
  private reconnectDelay;
31
48
  private connectTimeout;
32
- private pendingCalls;
33
49
  private activeStreams;
34
50
  private wsProxies;
51
+ private pendingWsOpens;
35
52
  private outgoingStreams;
53
+ private eventListeners;
36
54
  private connectPromise;
37
55
  private isConnected;
38
56
  constructor(options?: BridgeClientOptions);
@@ -42,13 +60,31 @@ export declare class BridgeClient {
42
60
  getHttpUrl(): string;
43
61
  /** Connect to the bridge */
44
62
  connect(): Promise<void>;
45
- /** Disconnect from the bridge */
63
+ private openConnectionWithPackageFallback;
64
+ private openConnection;
65
+ /** Disconnect from the bridge and tear down all pending state */
46
66
  disconnect(): void;
67
+ /** Alias for disconnect() */
68
+ close(): void;
47
69
  /** Check if connected */
48
70
  get connected(): boolean;
49
71
  private handleDisconnect;
72
+ /** Reject/close all pending streams and ws proxies (codec owns RPC pending). */
73
+ private cleanupPending;
50
74
  /** Call an RPC method */
51
75
  call(method: string, params: unknown[], timeoutMs?: number): Promise<unknown>;
76
+ /**
77
+ * Subscribe to bridge `event` notifications for a topic.
78
+ *
79
+ * Pass `'*'` to receive every event regardless of topic. Returns an
80
+ * unsubscribe function; calling it removes this listener. Subscriptions
81
+ * survive auto-reconnect and are only dropped on an explicit disconnect().
82
+ *
83
+ * NOTE: no gateway currently emits `event` frames, so listeners will not
84
+ * fire until an event producer is wired on the gateway side. The subscriber
85
+ * surface is provided so consumers can register ahead of that work.
86
+ */
87
+ on(topic: string, cb: (data: unknown) => void): () => void;
52
88
  /** Create a proxied WebSocket to a Durable Object */
53
89
  createWsProxy(binding: string, id: string, url: string, headers?: [string, string][]): Promise<{
54
90
  wid: number;
@@ -59,12 +95,15 @@ export declare class BridgeClient {
59
95
  }>;
60
96
  /** Create a readable stream that pulls from the bridge */
61
97
  createReadableStream(sid: number): ReadableStream<Uint8Array>;
62
- private handleMessage;
63
98
  private handleJsonMessage;
64
- private handleBinaryMessage;
65
- private handleRpcOk;
66
- private handleRpcErr;
99
+ /**
100
+ * Receive a v2 binary frame. Frame format is byte-identical to the legacy
101
+ * v1 frames for kinds 1 (StreamChunk) and 2 (WsData); v2 owns kind 3
102
+ * (BodyChunk) which the codec handles internally before reaching here.
103
+ */
104
+ private handleV2BinaryFrame;
67
105
  private handleEvent;
106
+ private dispatchEvent;
68
107
  private handleStreamPull;
69
108
  private pumpStream;
70
109
  private handleStreamChunk;
@@ -72,11 +111,14 @@ export declare class BridgeClient {
72
111
  private handleStreamAbort;
73
112
  private handleWsData;
74
113
  private handleWsClose;
114
+ private handleWsOpened;
75
115
  private ensureConnected;
76
116
  private send;
117
+ private sendBinary;
77
118
  }
78
119
  /** Get or create the default bridge client */
79
120
  export declare function getClient(options?: BridgeClientOptions): BridgeClient;
80
121
  /** Reset the default client (for testing) */
81
122
  export declare function resetClient(): void;
123
+ export {};
82
124
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,mBAAmB;IACnC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACjC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,+BAA+B,CAAC,UAAU,CAAC,CAAA;IACvD,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,KAAK,IAAI,CAAA;IAC9C,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD;AAMD,qBAAa,YAAY;IACxB,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAAQ;IAE3B,YAAY,OAAO,GAAE,mBAAwB,EAK5C;IAED,4BAA4B;IAC5B,MAAM,IAAI,MAAM,CAEf;IAED,6CAA6C;IAC7C,UAAU,IAAI,MAAM,CAGnB;IAMD,4BAA4B;IACtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA0C7B;IAED,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAYjB;IAED,yBAAyB;IACzB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,OAAO,CAAC,gBAAgB;IA6BxB,yBAAyB;IACnB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BjF;IAMD,qDAAqD;IAC/C,aAAa,CAClB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC1B,OAAO,CAAC;QACV,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,KAAK,IAAI,CAAA;QACzC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,KAAK,IAAI,KAAK,IAAI,CAAA;QACjE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAA;KACpE,CAAC,CA6CD;IAMD,0DAA0D;IAC1D,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAyC5D;IAMD,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,gBAAgB;YAQV,UAAU;IAyCxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;YAYP,eAAe;IAM7B,OAAO,CAAC,IAAI;CAMZ;AAQD,8CAA8C;AAC9C,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAKrE;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared gateway helpers (base64, R2 serializers, email) and the RPC method
3
+ * dispatcher. Designed to be embedded verbatim at the top level of a worker
4
+ * module. All symbols are declared with `function`/`const` so they are
5
+ * hoisted in both embedding sites.
6
+ */
7
+ export declare const GATEWAY_RUNTIME_JS = "\nconst RAW_EMAIL = 'EmailMessage::raw'\n\n// Inline body cap for proxied DO/service-fetch responses. Matches\n// HTTP_TRANSFER_THRESHOLD in wire.ts (512 KB). A larger body would exceed\n// workerd's ~1 MB WebSocket message limit once base64-encoded into the rpc.ok\n// frame, so it is rejected with a clear error rather than silently truncated.\nconst HTTP_TRANSFER_THRESHOLD = 512 * 1024\n\nfunction arrayBufferToBase64(buffer) {\n\tconst bytes = new Uint8Array(buffer)\n\tlet binary = ''\n\tfor (let i = 0; i < bytes.byteLength; i++) binary += String.fromCharCode(bytes[i])\n\treturn btoa(binary)\n}\n\nfunction base64ToArrayBuffer(base64) {\n\tconst binary = atob(base64)\n\tconst bytes = new Uint8Array(binary.length)\n\tfor (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i)\n\treturn bytes.buffer\n}\n\n// Binary WsData frame codec (10-byte header: kind:u8, id:u32 LE, seq:u32 LE,\n// flags:u8 + payload). MUST match wire.ts encodeBinaryFrame/decodeBinaryFrame so\n// the bridge client and this gateway agree on the WS-data wire format\n// (BinaryKind.WsData = 2, BinaryFlags.TEXT = 2).\nfunction encodeWsDataFrame(wid, flags, payload) {\n\tconst frame = new Uint8Array(10 + payload.byteLength)\n\tconst view = new DataView(frame.buffer)\n\tview.setUint8(0, 2)\n\tview.setUint32(1, wid, true)\n\tview.setUint32(5, 0, true)\n\tview.setUint8(9, flags)\n\tframe.set(payload, 10)\n\treturn frame\n}\n\nfunction decodeWsDataFrame(buffer) {\n\tconst bytes = new Uint8Array(buffer)\n\tif (bytes.byteLength < 10) return null\n\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n\treturn {\n\t\tkind: view.getUint8(0),\n\t\tid: view.getUint32(1, true),\n\t\tflags: view.getUint8(9),\n\t\tpayload: bytes.subarray(10)\n\t}\n}\n\nfunction serializeR2Object(obj) {\n\tif (!obj) return null\n\treturn {\n\t\t__type: 'R2Object',\n\t\tkey: obj.key,\n\t\tversion: obj.version,\n\t\tsize: obj.size,\n\t\tetag: obj.etag,\n\t\thttpEtag: obj.httpEtag,\n\t\tchecksums: obj.checksums,\n\t\tuploaded: obj.uploaded?.toISOString(),\n\t\thttpMetadata: obj.httpMetadata,\n\t\tcustomMetadata: obj.customMetadata,\n\t\trange: obj.range,\n\t\tstorageClass: obj.storageClass\n\t}\n}\n\nfunction serializeR2ObjectBody(obj, bodyData) {\n\tif (!obj) return null\n\treturn {\n\t\t__type: 'R2ObjectBody',\n\t\tkey: obj.key,\n\t\tversion: obj.version,\n\t\tsize: obj.size,\n\t\tetag: obj.etag,\n\t\thttpEtag: obj.httpEtag,\n\t\tchecksums: obj.checksums,\n\t\tuploaded: obj.uploaded?.toISOString(),\n\t\thttpMetadata: obj.httpMetadata,\n\t\tcustomMetadata: obj.customMetadata,\n\t\trange: obj.range,\n\t\tstorageClass: obj.storageClass,\n\t\tbodyData\n\t}\n}\n\nfunction serializeR2Objects(result) {\n\tif (!result) return null\n\treturn {\n\t\tobjects: result.objects.map(serializeR2Object),\n\t\ttruncated: result.truncated,\n\t\tcursor: result.cursor,\n\t\tdelimitedPrefixes: result.delimitedPrefixes\n\t}\n}\n\nasync function serializeResponse(response) {\n\tlet body = null\n\tif (response.body) {\n\t\tconst bytes = await response.arrayBuffer()\n\t\tif (bytes.byteLength > HTTP_TRANSFER_THRESHOLD) {\n\t\t\tthrow new Error(\n\t\t\t\t'[devflare][bridge] Response body (' + bytes.byteLength + ' bytes) exceeds the '\n\t\t\t\t+ HTTP_TRANSFER_THRESHOLD + '-byte inline limit. DO and service-binding fetch responses '\n\t\t\t\t+ 'are delivered inline over the bridge WebSocket and cannot be streamed locally; keep '\n\t\t\t\t+ 'proxied response bodies under the limit (large R2 objects are exempt \u2014 read them through '\n\t\t\t\t+ 'the R2 binding, which uses the HTTP transfer side-channel).'\n\t\t\t)\n\t\t}\n\t\tif (bytes.byteLength > 0) {\n\t\t\tbody = { type: 'bytes', data: arrayBufferToBase64(bytes) }\n\t\t}\n\t}\n\treturn {\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\theaders: [...response.headers.entries()],\n\t\tbody\n\t}\n}\n\nfunction deserializeRequest(serializedReq) {\n\treturn new Request(serializedReq.url, {\n\t\tmethod: serializedReq.method,\n\t\theaders: serializedReq.headers,\n\t\tbody: serializedReq.body?.type === 'bytes'\n\t\t\t? base64ToArrayBuffer(serializedReq.body.data)\n\t\t\t: undefined,\n\t\tredirect: serializedReq.redirect\n\t})\n}\n\nfunction createEmailMessageRaw(raw) {\n\tif (typeof raw === 'string' || raw instanceof ReadableStream) {\n\t\treturn raw\n\t}\n\tif (raw instanceof ArrayBuffer || raw instanceof Uint8Array) {\n\t\treturn new Response(raw).body\n\t}\n\tthrow new Error('Unsupported EmailMessage raw payload')\n}\n\nfunction isDurableObjectNamespace(binding) {\n\treturn !!binding\n\t\t&& typeof binding.idFromName === 'function'\n\t\t&& typeof binding.idFromString === 'function'\n\t\t&& typeof binding.newUniqueId === 'function'\n}\n\n/**\n * Resolve a (possibly jurisdiction-scoped) DurableObjectNamespace.\n * Forwards the jurisdiction faithfully when the binding supports it\n * (real Cloudflare), and degrades to the plain binding otherwise\n * (miniflare/workerd local emulation, which does not pin jurisdictions).\n */\nfunction resolveDoNamespace(binding, jurisdiction) {\n\tif (jurisdiction && typeof binding.jurisdiction === 'function') {\n\t\treturn binding.jurisdiction(jurisdiction)\n\t}\n\treturn binding\n}\n\n/**\n * Execute an RPC method against the gateway's bindings.\n *\n * Method format: \"binding.operation\". Operations must be namespaced by\n * binding kind (e.g. \"kv.get\", \"r2.head\", \"d1.stmt.first\", \"do.fetch\",\n * \"service.fetch\", \"queue.send\", \"email.send\", \"ai.run\"). Bare verbs and the legacy\n * \"stmt.*\" / \"stub.*\" sub-prefixes were removed in B3-final and now throw.\n * Method vocabulary must stay in sync with the canonical server in\n * src/bridge/server.ts.\n */\nasync function executeRpcMethod(method, params, env, _ctx) {\n\tconst parts = method.split('.')\n\tif (parts.length < 2) throw new Error('Invalid method format: ' + method)\n\n\tconst bindingName = parts[0]\n\tconst operation = parts.slice(1).join('.')\n\tconst binding = env[bindingName]\n\n\tif (!binding) throw new Error('Binding not found: ' + bindingName)\n\n\tconst isNamespaced =\n\t\toperation.indexOf('kv.') === 0 ||\n\t\toperation.indexOf('r2.') === 0 ||\n\t\toperation.indexOf('d1.') === 0 ||\n\t\toperation.indexOf('do.') === 0 ||\n\t\toperation.indexOf('service.') === 0 ||\n\t\toperation.indexOf('queue.') === 0 ||\n\t\toperation.indexOf('email.') === 0 ||\n\t\toperation.indexOf('ai.') === 0 ||\n\t\toperation.indexOf('workflow.') === 0 ||\n\t\toperation.indexOf('var.') === 0\n\tif (!isNamespaced) {\n\t\tthrow new Error(createUnsupportedBridgeOperationErrorMessage(bindingName, operation))\n\t}\n\n\t// KV\n\tif (operation === 'kv.get') return binding.get(params[0], params[1])\n\tif (operation === 'kv.put') return binding.put(params[0], params[1], params[2])\n\tif (operation === 'kv.delete') return binding.delete(params[0])\n\tif (operation === 'kv.list') return binding.list(params[0])\n\tif (operation === 'kv.getWithMetadata') return binding.getWithMetadata(params[0], params[1])\n\n\t// DO get (returns DOStub reference)\n\tif (operation === 'do.get') {\n\t\treturn { __type: 'DOStub', binding: bindingName, id: params[0] }\n\t}\n\n\t// R2\n\tif (operation === 'r2.head') return serializeR2Object(await binding.head(params[0]))\n\tif (operation === 'r2.get') {\n\t\tconst obj = await binding.get(params[0], params[1])\n\t\tif (!obj) return null\n\t\tconst body = await obj.arrayBuffer()\n\t\treturn serializeR2ObjectBody(obj, arrayBufferToBase64(body))\n\t}\n\tif (operation === 'r2.put') {\n\t\tlet value = params[1]\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (value.__type === 'ArrayBuffer' || value.__type === 'Uint8Array') {\n\t\t\t\tvalue = base64ToArrayBuffer(value.data)\n\t\t\t}\n\t\t}\n\t\treturn serializeR2Object(await binding.put(params[0], value, params[2]))\n\t}\n\tif (operation === 'r2.delete') return binding.delete(params[0])\n\tif (operation === 'r2.list') return serializeR2Objects(await binding.list(params[0]))\n\n\t// D1\n\tif (operation === 'd1.exec') return binding.exec(params[0])\n\tif (operation === 'd1.batch') {\n\t\tconst statements = params[0].map((s) => binding.prepare(s.sql).bind(...(s.bindings || [])))\n\t\treturn binding.batch(statements)\n\t}\n\tif (operation.indexOf('d1.stmt.') === 0) {\n\t\tconst mode = operation.split('.')[2]\n\t\tconst [sql, ...rest] = params\n\t\tlet bindings = rest\n\t\tlet extraParam\n\t\tif (mode === 'first' || mode === 'raw') {\n\t\t\textraParam = rest[rest.length - 1]\n\t\t\tbindings = rest.slice(0, -1)\n\t\t}\n\t\tlet stmt = binding.prepare(sql)\n\t\tif (bindings.length > 0) stmt = stmt.bind(...bindings)\n\t\tif (mode === 'first') {\n\t\t\tif (typeof extraParam === 'string' && extraParam.length > 0) return stmt.first(extraParam)\n\t\t\treturn stmt.first()\n\t\t}\n\t\tif (mode === 'all') return stmt.all()\n\t\tif (mode === 'run') return stmt.run()\n\t\tif (mode === 'raw') return stmt.raw(extraParam)\n\t\tthrow new Error('Unknown stmt mode: ' + mode)\n\t}\n\n\t// Durable Objects\n\tif (operation === 'do.idFromName') {\n\t\tconst ns = resolveDoNamespace(binding, params[1])\n\t\tconst id = ns.idFromName(params[0])\n\t\treturn { __type: 'DOId', hex: id.toString() }\n\t}\n\tif (operation === 'do.idFromString') {\n\t\tconst id = binding.idFromString(params[0])\n\t\treturn { __type: 'DOId', hex: id.toString() }\n\t}\n\tif (operation === 'do.newUniqueId') {\n\t\tconst ns = resolveDoNamespace(binding, params[1])\n\t\tconst id = ns.newUniqueId(params[0])\n\t\treturn { __type: 'DOId', hex: id.toString() }\n\t}\n\tif (operation === 'do.fetch') {\n\t\tconst [, serializedId, serializedReq] = params\n\t\tconst id = binding.idFromString(serializedId.hex)\n\t\tconst stub = binding.get(id)\n\t\tconst response = await stub.fetch(new Request(serializedReq.url, {\n\t\t\tmethod: serializedReq.method,\n\t\t\theaders: serializedReq.headers,\n\t\t\tbody: serializedReq.body?.type === 'bytes'\n\t\t\t\t? base64ToArrayBuffer(serializedReq.body.data)\n\t\t\t\t: undefined\n\t\t}))\n\t\treturn serializeResponse(response)\n\t}\n\tif (operation === 'do.rpc') {\n\t\tconst [, serializedId, methodName, args] = params\n\t\tconst id = binding.idFromString(serializedId.hex)\n\t\tconst stub = binding.get(id)\n\t\tconst response = await stub.fetch(new Request('http://do/_rpc', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ method: methodName, params: args })\n\t\t}))\n\t\tconst result = await response.json()\n\t\tif (!result.ok) throw new Error(result.error?.message || 'RPC failed')\n\t\treturn result.result\n\t}\n\n\t// Service Bindings\n\tif (operation === 'service.fetch') {\n\t\tif (!binding || typeof binding.fetch !== 'function') {\n\t\t\tthrow new Error('Service binding ' + bindingName + ' does not support fetch()')\n\t\t}\n\t\tconst response = await binding.fetch(deserializeRequest(params[0]))\n\t\treturn serializeResponse(response)\n\t}\n\tif (operation === 'service.rpc') {\n\t\tconst methodName = params[0]\n\t\tif (typeof methodName !== 'string') {\n\t\t\tthrow new Error('Service binding ' + bindingName + ' RPC method name must be a string')\n\t\t}\n\t\tconst args = Array.isArray(params[1]) ? params[1] : []\n\t\tconst method = binding && binding[methodName]\n\t\tif (typeof method !== 'function') {\n\t\t\tthrow new Error('Service binding ' + bindingName + ' does not support ' + methodName + '()')\n\t\t}\n\t\treturn method.apply(binding, args)\n\t}\n\n\t// Queues\n\tif (operation === 'queue.send') return binding.send(params[0], params[1])\n\tif (operation === 'queue.sendBatch') return binding.sendBatch(params[0], params[1])\n\n\t// Send Email\n\tif (operation === 'email.send') {\n\t\tif (binding && typeof binding.send === 'function') {\n\t\t\tconst message = params[0]\n\t\t\tif (message && typeof message === 'object' && 'from' in message && 'to' in message && 'raw' in message) {\n\t\t\t\treturn binding.send({\n\t\t\t\t\tfrom: message.from,\n\t\t\t\t\tto: message.to,\n\t\t\t\t\t[RAW_EMAIL]: createEmailMessageRaw(message.raw)\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn binding.send(message)\n\t\t}\n\t\treturn { ok: true, simulated: true }\n\t}\n\n\t// Workflows\n\tif (operation === 'workflow.create') {\n\t\treturn serializeWorkflowInstance(await binding.create(params[0]))\n\t}\n\tif (operation === 'workflow.get') {\n\t\treturn serializeWorkflowInstance(await binding.get(params[0]))\n\t}\n\tif (operation === 'workflow.status') {\n\t\treturn (await binding.get(params[0])).status()\n\t}\n\tif (operation === 'workflow.pause') {\n\t\treturn (await binding.get(params[0])).pause()\n\t}\n\tif (operation === 'workflow.resume') {\n\t\treturn (await binding.get(params[0])).resume()\n\t}\n\tif (operation === 'workflow.terminate') {\n\t\treturn (await binding.get(params[0])).terminate()\n\t}\n\tif (operation === 'workflow.restart') {\n\t\treturn (await binding.get(params[0])).restart()\n\t}\n\tif (operation === 'workflow.sendEvent') {\n\t\treturn (await binding.get(params[0])).sendEvent(params[1])\n\t}\n\n\t// AI / generic run()\n\tif (operation === 'ai.run') {\n\t\tif (typeof binding.run !== 'function') {\n\t\t\tthrow new Error('Binding ' + bindingName + ' does not support run(): ' + method)\n\t\t}\n\t\treturn binding.run(params[0], params[1])\n\t}\n\n\tthrow new Error('Unknown operation: ' + method)\n}\n\nfunction createUnsupportedBridgeOperationErrorMessage(bindingName, operation) {\n\tconst base = \"[devflare][bridge] Unsupported bridge operation '\" + operation + \"' for binding '\" + bindingName + \"'.\"\n\tif (operation === 'fetch') {\n\t\treturn base + ' Devflare could not dispatch fetch() for this binding through the local bridge. '\n\t\t\t+ 'Expected Cloudflare API: env.' + bindingName + '.fetch(request). '\n\t\t\t+ 'If this came from SvelteKit platform.env, make sure the binding is declared as a service binding; '\n\t\t\t+ 'this is a Devflare local bridge issue when service bindings fall back to a bare fetch operation.'\n\t}\n\tif (operation === 'toString') {\n\t\treturn base + ' A platform.env value was coerced to a string through the bridge. '\n\t\t\t+ 'For SvelteKit local dev, declared vars should be plain string values and missing env names should read as undefined.'\n\t}\n\treturn base + ' Bare verbs and the legacy stmt.*/stub.* sub-prefixes are not supported; '\n\t\t+ 'use the namespaced form (e.g. kv.get, r2.put, d1.stmt.first, do.fetch, service.fetch).'\n}\n\nfunction serializeWorkflowInstance(instance) {\n\treturn {\n\t\t__type: 'WorkflowInstance',\n\t\tid: instance.id\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// WebSocket bridge (shared with src/bridge/server.ts in shape)\n// ---------------------------------------------------------------------------\n// NOTE: wsProxies is intentionally created per handleBridgeWebSocket call so\n// state never leaks across connections or across gateway-script regenerations.\n\nasync function handleBridgeRpcCall(msg, ws, env, ctx) {\n\ttry {\n\t\tconst result = await executeRpcMethod(msg.method, msg.params, env, ctx)\n\t\tws.send(JSON.stringify({ t: 'rpc.ok', id: msg.id, result }))\n\t} catch (error) {\n\t\tws.send(JSON.stringify({\n\t\t\tt: 'rpc.err',\n\t\t\tid: msg.id,\n\t\t\terror: {\n\t\t\t\tcode: error?.code || 'INTERNAL_ERROR',\n\t\t\t\tmessage: error?.message || String(error)\n\t\t\t}\n\t\t}))\n\t}\n}\n\nasync function handleBridgeWsOpen(msg, ws, env, wsProxies) {\n\ttry {\n\t\tconst binding = env[msg.target.binding]\n\t\tconst id = binding.idFromString(msg.target.id)\n\t\tconst stub = binding.get(id)\n\n\t\tconst headers = new Headers(msg.target.headers || [])\n\t\theaders.set('Upgrade', 'websocket')\n\n\t\tconst response = await stub.fetch(new Request(msg.target.url, { method: 'GET', headers }))\n\t\tconst doWs = response.webSocket\n\n\t\tif (!doWs) {\n\t\t\tws.send(JSON.stringify({\n\t\t\t\tt: 'rpc.err',\n\t\t\t\tid: 'ws_' + msg.wid,\n\t\t\t\terror: { code: 'WS_FAILED', message: 'No WebSocket returned' }\n\t\t\t}))\n\t\t\treturn\n\t\t}\n\n\t\tdoWs.accept()\n\t\twsProxies.set(msg.wid, { doWs })\n\n\t\tdoWs.addEventListener('message', (event) => {\n\t\t\tconst isText = typeof event.data === 'string'\n\t\t\tconst payload = isText\n\t\t\t\t? new TextEncoder().encode(event.data)\n\t\t\t\t: new Uint8Array(event.data)\n\t\t\tconst flags = isText ? 2 : 0\n\t\t\tws.send(encodeWsDataFrame(msg.wid, flags, payload))\n\t\t})\n\n\t\tdoWs.addEventListener('close', (event) => {\n\t\t\tws.send(JSON.stringify({ t: 'ws.close', wid: msg.wid, code: event.code, reason: event.reason }))\n\t\t\twsProxies.delete(msg.wid)\n\t\t})\n\n\t\tws.send(JSON.stringify({ t: 'ws.opened', wid: msg.wid }))\n\t} catch (error) {\n\t\tws.send(JSON.stringify({\n\t\t\tt: 'rpc.err',\n\t\t\tid: 'ws_' + msg.wid,\n\t\t\terror: { code: 'WS_FAILED', message: error.message }\n\t\t}))\n\t}\n}\n\nfunction handleBridgeWsClose(msg, wsProxies) {\n\tconst proxy = wsProxies.get(msg.wid)\n\tif (proxy) {\n\t\tproxy.doWs.close(msg.code, msg.reason)\n\t\twsProxies.delete(msg.wid)\n\t}\n}\n\n// Relay an inbound binary WsData frame (client -> DO). Mirrors server.ts\n// handleBinaryMessage: decode the frame, look up the proxy by ws id, and forward\n// the payload to the DO socket honoring the TEXT flag.\nfunction handleBridgeBinaryMessage(buffer, wsProxies) {\n\tconst frame = decodeWsDataFrame(buffer)\n\tif (!frame || frame.kind !== 2) return\n\tconst proxy = wsProxies.get(frame.id)\n\tif (!proxy) return\n\tif ((frame.flags & 2) !== 0) {\n\t\tproxy.doWs.send(new TextDecoder().decode(frame.payload))\n\t} else {\n\t\tproxy.doWs.send(frame.payload)\n\t}\n}\n\nasync function handleBridgeJsonMessage(data, ws, env, ctx, wsProxies) {\n\tconst msg = JSON.parse(data)\n\tswitch (msg.t) {\n\t\tcase 'hello':\n\t\t\t// v2 handshake \u2014 acknowledge with welcome echoing the negotiated\n\t\t\t// capability intersection. The gateway advertises only what it\n\t\t\t// implements end-to-end: 'ws-relay' (binary WsData relay to/from DO\n\t\t\t// sockets) and 'http-transfer' (the R2 transfer HTTP side-channel).\n\t\t\t// 'streams' is intentionally NOT advertised \u2014 large DO/service-fetch\n\t\t\t// responses are inlined, not streamed, in this gateway.\n\t\t\tws.send(JSON.stringify({\n\t\t\t\tt: 'welcome',\n\t\t\t\tprotocolVersion: 2,\n\t\t\t\tcapabilities: ['ws-relay', 'http-transfer']\n\t\t\t\t\t.filter((c) => Array.isArray(msg.capabilities) && msg.capabilities.includes(c))\n\t\t\t\t\t.sort()\n\t\t\t}))\n\t\t\tbreak\n\t\tcase 'rpc.call':\n\t\t\tawait handleBridgeRpcCall(msg, ws, env, ctx)\n\t\t\tbreak\n\t\tcase 'ws.open':\n\t\t\tawait handleBridgeWsOpen(msg, ws, env, wsProxies)\n\t\t\tbreak\n\t\tcase 'ws.close':\n\t\t\thandleBridgeWsClose(msg, wsProxies)\n\t\t\tbreak\n\t}\n}\n\nfunction handleBridgeWebSocket(request, env, ctx) {\n\tconst { 0: client, 1: server } = new WebSocketPair()\n\tserver.accept()\n\n\t// Per-connection state: recreated for every bridge client so reloads and\n\t// concurrent clients never share WS proxy entries.\n\tconst wsProxies = new Map()\n\n\tserver.addEventListener('message', async (event) => {\n\t\ttry {\n\t\t\tif (typeof event.data === 'string') {\n\t\t\t\tawait handleBridgeJsonMessage(event.data, server, env, ctx, wsProxies)\n\t\t\t} else {\n\t\t\t\thandleBridgeBinaryMessage(event.data, wsProxies)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('[Gateway] Error:', error)\n\t\t}\n\t})\n\n\tserver.addEventListener('close', () => {\n\t\tfor (const proxy of wsProxies.values()) {\n\t\t\t// Best-effort cleanup: the DO-side WS may already be closed or in an\n\t\t\t// invalid state; any throw here would abort sibling closes. Surface\n\t\t\t// the swallowed error when DEVFLARE_DEBUG_BRIDGE is enabled.\n\t\t\ttry { proxy.doWs.close() } catch (error) {\n\t\t\t\tif (globalThis.DEVFLARE_DEBUG_BRIDGE) {\n\t\t\t\t\tconsole.warn('[devflare:bridge] proxy.doWs.close() failed', error)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twsProxies.clear()\n\t})\n\n\treturn new Response(null, { status: 101, webSocket: client })\n}\n\n// ---------------------------------------------------------------------------\n// HTTP transfer for R2 bodies (shared with src/bridge/server.ts in shape)\n// ---------------------------------------------------------------------------\n\nasync function handleHttpTransfer(request, env, url) {\n\tconst transferIdEncoded = url.pathname.split('/').pop()\n\tconst transferId = decodeURIComponent(transferIdEncoded || '')\n\tconst [binding, ...keyParts] = transferId.split(':')\n\tconst key = keyParts.join(':')\n\tconst bucket = env[binding]\n\n\tif (!bucket) return new Response('Bucket not found: ' + binding, { status: 404 })\n\n\tif (request.method === 'PUT' || request.method === 'POST') {\n\t\tconst result = await bucket.put(key, request.body)\n\t\treturn new Response(JSON.stringify(serializeR2Object(result)), {\n\t\t\theaders: { 'Content-Type': 'application/json' }\n\t\t})\n\t}\n\n\tif (request.method === 'GET') {\n\t\tconst object = await bucket.get(key)\n\t\tif (!object) return new Response('Not found', { status: 404 })\n\t\treturn new Response(object.body, {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': object.httpMetadata?.contentType || 'application/octet-stream',\n\t\t\t\t'Content-Length': String(object.size)\n\t\t\t}\n\t\t})\n\t}\n\n\treturn new Response('Method not allowed', { status: 405 })\n}\n";
8
+ //# sourceMappingURL=gateway-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime.d.ts","sourceRoot":"","sources":["../../src/bridge/gateway-runtime.ts"],"names":[],"mappings":"AAcA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,+1pBAilB9B,CAAA"}
@@ -1,7 +1,7 @@
1
- export { type JsonMsg, type RpcCall, type RpcOk, type RpcErr, type StreamPull, type StreamOpen, type StreamEnd, type StreamAbort, type WsOpen, type WsOpened, type WsClose, type EventMsg, type HttpTransfer, type DecodedBinaryFrame, BinaryKind, BinaryFlags, BINARY_HEADER_SIZE, encodeBinaryFrame, decodeBinaryFrame, isFin, isText, parseJsonMsg, stringifyJsonMsg, nextRpcId, nextStreamId, nextWsId, resetIdCounters, DEFAULT_CHUNK_SIZE, HTTP_TRANSFER_THRESHOLD, DEFAULT_BRIDGE_PORT, DEFAULT_HTTP_PORT } from './protocol';
2
- export { type SerializedRequest, type SerializedResponse, type BodyRef, serializeRequest, deserializeRequest, serializeResponse, deserializeResponse, serializeValue, deserializeValue, serializeDOId } from './serialization';
3
- export { type BridgeClientOptions, type PendingCall, BridgeClient, getClient } from './client';
4
- export { type EnvProxyOptions, type BindingHints, createEnvProxy, bridgeEnv, env, initEnv, setBindingHints } from './proxy';
5
- export { startMiniflare, startMiniflareFromConfig, getMiniflare, stopMiniflare, type MiniflareInstance, type MiniflareOptions } from './miniflare';
6
- export { default as gateway } from './server';
1
+ export { type JsonMsg, type RpcCall, type RpcOk, type RpcErr, type StreamPull, type StreamOpen, type StreamEnd, type StreamAbort, type WsOpen, type WsOpened, type WsClose, type EventMsg, type HttpTransfer, type DecodedBinaryFrame, BinaryKind, BinaryFlags, BINARY_HEADER_SIZE, encodeBinaryFrame, decodeBinaryFrame, isFin, isText, parseJsonMsg, stringifyJsonMsg, nextRpcId, nextStreamId, nextWsId, resetIdCounters, DEFAULT_CHUNK_SIZE, HTTP_TRANSFER_THRESHOLD, DEFAULT_BRIDGE_PORT, DEFAULT_HTTP_PORT } from './v2/wire.js';
2
+ export { type SerializedRequest, type SerializedResponse, type BodyRef, serializeRequest, deserializeRequest, serializeResponse, deserializeResponse, serializeValue, deserializeValue, serializeDOId } from './v2/value-serialization.js';
3
+ export { type BridgeClientOptions, type PendingCall, BridgeClient, getClient } from './client.js';
4
+ export { type EnvProxyOptions, type BindingHints, createEnvProxy, bridgeEnv, initEnv, setBindingHints } from './proxy.js';
5
+ export { startMiniflare, startMiniflareFromConfig, getMiniflare, stopMiniflare, type MiniflareInstance, type MiniflareOptions } from './miniflare.js';
6
+ export { default as gateway } from './server.js';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,YAAY,EACZ,SAAS,EACT,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,cAAc,EACd,SAAS,EACT,GAAG,EACH,OAAO,EACP,eAAe,EACf,MAAM,SAAS,CAAA;AAGhB,OAAO,EACN,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,YAAY,EACZ,SAAS,EACT,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,cAAc,EACd,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,SAAS,CAAA;AAGhB,OAAO,EACN,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const bridgeLog: {
2
+ warn(message: string, error?: unknown): void;
3
+ debug(message: string, error?: unknown): void;
4
+ };
5
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/bridge/log.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,SAAS;IACrB,IAAI,UAAU,MAAM,UAAU,OAAO,GAAG,IAAI;IAI5C,KAAK,UAAU,MAAM,UAAU,OAAO,GAAG,IAAI;CAI7C,CAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Local presign context for a running Miniflare instance: the HTTP origin the
3
+ * gateway listens on plus the per-boot HMAC secret it validates presigned R2
4
+ * URLs with. Feed these to `presignR2Put`/`presignR2Get` (as
5
+ * `DEVFLARE_R2_PRESIGN_ORIGIN`/`DEVFLARE_R2_PRESIGN_SECRET` env values) to
6
+ * mint URLs this instance accepts.
7
+ */
8
+ export interface R2PresignContext {
9
+ /** Gateway HTTP origin, e.g. `http://127.0.0.1:8787`. */
10
+ origin: string;
11
+ /** Per-boot HMAC signing secret shared with the gateway worker. */
12
+ secret: string;
13
+ }
14
+ /** Binding-map shapes accepted by Miniflare options (array or name → id record). */
15
+ type NamedBindings = string[] | Record<string, string> | undefined;
16
+ /** Whether a Miniflare binding map actually declares at least one binding. */
17
+ export declare function hasNamedBindings(bindings: NamedBindings): boolean;
18
+ /**
19
+ * Generates a lightweight HTTP-only gateway worker script for
20
+ * `startMiniflare()` usage (tests, scripts, programmatic access).
21
+ *
22
+ * The RPC dispatch logic is shared with `dev-server/gateway-script.ts` via
23
+ * `GATEWAY_RUNTIME_JS`, and the local presigned-R2 endpoint via
24
+ * `R2_PRESIGN_RUNTIME_JS`. This gateway exposes the dispatcher over a plain
25
+ * HTTP endpoint (`POST /_devflare/rpc`). The full WebSocket bridge with
26
+ * streaming and WebSocket proxying lives in `./server.ts` / the dev-server
27
+ * gateway.
28
+ */
29
+ export declare function generateGatewayScript(): string;
30
+ /**
31
+ * Ensure a per-boot R2 presign secret is present in the worker bindings when
32
+ * R2 buckets are configured, so the embedded gateway endpoint can validate
33
+ * presigned URLs. Respects a caller-provided secret; returns a `null` context
34
+ * (and the options untouched) when the instance has no R2 buckets.
35
+ */
36
+ export declare function resolveR2PresignSetup<TOptions extends {
37
+ r2Buckets?: NamedBindings;
38
+ port?: number;
39
+ bindings?: Record<string, unknown>;
40
+ }>(options: TOptions): {
41
+ options: TOptions;
42
+ r2Presign: R2PresignContext | null;
43
+ };
44
+ export {};
45
+ //# sourceMappingURL=miniflare-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miniflare-gateway.d.ts","sourceRoot":"","sources":["../../src/bridge/miniflare-gateway.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAChC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;CACd;AAED,oFAAoF;AACpF,KAAK,aAAa,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;AAElE,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAUjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA2C9C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,SAAS;IAChB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC,EACA,OAAO,EAAE,QAAQ,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,CAuB9E"}