void 0.22.0 → 0.23.0

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 (276) hide show
  1. package/README.md +5 -1
  2. package/dist/{account-cmd-CjyxcGkM.mjs → account-cmd-C84Ee8cO.mjs} +4 -4
  3. package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
  4. package/dist/application-routing-B7QEjqSR.mjs +27 -0
  5. package/dist/{auth-CZuiVsFh.mjs → auth-CCjt0hcq.mjs} +1 -1
  6. package/dist/{auth-DLNN0D3Z.mjs → auth-CSkdO2Bb.mjs} +4 -47
  7. package/dist/{auth-link-BLO4ptzo.mjs → auth-link-CioEg6uY.mjs} +4 -4
  8. package/dist/{auth-router-ZUg9MF_U.mjs → auth-router-BsR981d4.mjs} +4 -4
  9. package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
  10. package/dist/{build-cmd-BxR5FROK.mjs → build-cmd-LzvNJORH.mjs} +17 -5
  11. package/dist/{cache-D0sWhgKI.mjs → cache-C4MvnrMH.mjs} +2 -2
  12. package/dist/{cancel-deploy-D4NUqFbi.mjs → cancel-deploy-abUxpP2n.mjs} +2 -2
  13. package/dist/{cf-build-output-BJ6yGEIS.mjs → cf-build-output-BPqOT964.mjs} +2 -1
  14. package/dist/cf-build-output-_0HNWysu.mjs +2 -0
  15. package/dist/cli/cli.mjs +80 -455
  16. package/dist/cli/{cf-compat.mjs → cloudflare-operation-process.mjs} +442 -421
  17. package/dist/cli/env-schema-probe.d.mts +2 -1
  18. package/dist/cli/env-schema-probe.mjs +3 -3
  19. package/dist/client-Cu7jWiF1.mjs +2 -0
  20. package/dist/{client-BTZ3XkrB.mjs → client-RV8NVeB8.mjs} +140 -21
  21. package/dist/{cloudflare-auth-DQkqoMYa.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -38
  22. package/dist/{cloudflare-cmd-BKlfGHAy.mjs → cloudflare-cmd-BcrVyTmJ.mjs} +5 -5
  23. package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
  24. package/dist/{cloudflare-connect-Ctmrw579.mjs → cloudflare-connect-B8uPZ4nx.mjs} +3 -3
  25. package/dist/{cloudflare-operations-BT6OWFBk.mjs → cloudflare-operations-AiWashgg.mjs} +1 -1
  26. package/dist/{cloudflare-operations-B9tzgjmf.mjs → cloudflare-operations-fxHb-byx.mjs} +116 -172
  27. package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
  28. package/dist/{config-VavjpDnp.d.mts → config-BMHb8RCj.d.mts} +1 -0
  29. package/dist/config-C_XRIPx2.mjs +89 -0
  30. package/dist/config-entry.d.mts +1 -1
  31. package/dist/{connect-Dg-WkW-C.mjs → connect-Bd4kJd9U.mjs} +5 -5
  32. package/dist/{create-project-DdoqwFLF.mjs → create-project-Boczwj5r.mjs} +1 -1
  33. package/dist/{create-project-l9J7pbtm.mjs → create-project-bMf6ffLZ.mjs} +2 -2
  34. package/dist/{db-gp2sCXyN.mjs → db-8uG64XLl.mjs} +21 -21
  35. package/dist/{delete-TTedbH6B.mjs → delete-NvbiyeJf.mjs} +2 -2
  36. package/dist/{deploy-CH-o2CaZ.mjs → deploy-DzAIwqNU.mjs} +908 -582
  37. package/dist/{deploy-B19L2Bra.mjs → deploy-bjXdFCtn.mjs} +1 -1
  38. package/dist/{domain-JRF59P_r.mjs → domain-y5Tvydvo.mjs} +3 -3
  39. package/dist/{email-Bo6G9LOZ.mjs → email-B3umsW75.mjs} +13 -28
  40. package/dist/{env-BYOrWQnv.mjs → env-BS6qYHDb.mjs} +4 -4
  41. package/dist/{env-public-BxU_0yTL.d.mts → env-public-BX_r8HR6.d.mts} +1 -1
  42. package/dist/{env-validation-BB4GkLxn.mjs → env-validation-BPn7vk-V.mjs} +18 -71
  43. package/dist/{env-validation-BXge7uyK.mjs → env-validation-DbTg7-ar.mjs} +1 -1
  44. package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
  45. package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
  46. package/dist/{gen-sCtlCOdA.mjs → gen-B580--vC.mjs} +2 -2
  47. package/dist/gen-BVaUUumi.mjs +2 -0
  48. package/dist/{github-cmd-0-7PexDq.mjs → github-cmd-v45BdfKX.mjs} +2 -2
  49. package/dist/{handler-HEcZsaij.d.mts → handler-CZ4nAylQ.d.mts} +1 -1
  50. package/dist/help-DofyZuY7.mjs +2 -0
  51. package/dist/{help-GKtwl07I.mjs → help-daGKjXGk.mjs} +229 -747
  52. package/dist/index.d.mts +1 -1
  53. package/dist/index.mjs +288 -1502
  54. package/dist/info-B97bTX9N.mjs +113 -0
  55. package/dist/{init-FZx3Elvz.mjs → init-Bvy7zrBo.mjs} +46 -15
  56. package/dist/limits-Bq5LG8Id.d.mts +27 -0
  57. package/dist/limits-Cjuk2VPm.mjs +68 -0
  58. package/dist/{link-BrQfb_CU.mjs → link-CDqqCjFl.mjs} +3 -3
  59. package/dist/{list-D44jmIAM.mjs → list-CZj0dzKY.mjs} +3 -3
  60. package/dist/{live-CKJlvlNp.d.mts → live-Chw1eIMv.d.mts} +1 -1
  61. package/dist/{local-d1-Bg9OzEEO.mjs → local-d1-2CMnpuW_.mjs} +2 -2
  62. package/dist/login-DYt_An22.mjs +2 -0
  63. package/dist/{login-CAsAsQ-_.mjs → login-UZKFM_u7.mjs} +3 -3
  64. package/dist/{logs-BjKvFnVM.mjs → logs-CUZ6t9t3.mjs} +3 -3
  65. package/dist/migrate-8_2u55MD.mjs +2 -0
  66. package/dist/{migrate-BPITvDJN.mjs → migrate-DHul7PRV.mjs} +2 -1
  67. package/dist/{node-Dt7z256D.mjs → node-BkyRWRx8.mjs} +1 -1
  68. package/dist/operator-args-CLgKGlwU.mjs +690 -0
  69. package/dist/{operator-cmd-BK5CCiT9.mjs → operator-cmd-DBA6dl0m.mjs} +68 -22
  70. package/dist/pages/client.d.mts +34 -2
  71. package/dist/pages/client.mjs +59 -3
  72. package/dist/pages/index.d.mts +1 -1
  73. package/dist/pages/index.mjs +1 -1
  74. package/dist/pages/islands-plugin.mjs +1 -1
  75. package/dist/pages/protocol.d.mts +2 -2
  76. package/dist/pages/protocol.mjs +2 -308
  77. package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
  78. package/dist/plan-D1Q5rf-r.mjs +2 -0
  79. package/dist/plan-NPpwZ_kc.mjs +58 -0
  80. package/dist/platform-args-BJdRtlLq.mjs +506 -0
  81. package/dist/platform-args-D3RXyR6h.mjs +2 -0
  82. package/dist/{platform-auth-config-BlN8xTdD.mjs → platform-auth-config-B56E9YP1.mjs} +3 -3
  83. package/dist/{platform-auth-protection-7d5aV2Jg.mjs → platform-auth-protection-BDWO_aER.mjs} +2 -2
  84. package/dist/{platform-auth-recovery-Dxij8ZbR.mjs → platform-auth-recovery-1gg4CSRe.mjs} +3 -3
  85. package/dist/{platform-cmd-E0FuL212.mjs → platform-cmd-Bt-1w6pY.mjs} +1 -1
  86. package/dist/{platform-cmd-B3hwKrFK.mjs → platform-cmd-DMcQStSc.mjs} +24 -3
  87. package/dist/{platform-domain-D6Xcy9ZX.mjs → platform-domain-BNkcz0OB.mjs} +2 -2
  88. package/dist/{platform-lifecycle-k0E0xoxx.mjs → platform-lifecycle-9OyBALhH.mjs} +327 -215
  89. package/dist/{platform-lifecycle-DMh_qrry.mjs → platform-lifecycle-BE6C_jxh.mjs} +1 -1
  90. package/dist/{platform-management-Brz_BDiT.mjs → platform-management-CjwLVQwN.mjs} +6 -3
  91. package/dist/{platform-management-DOtss0BN.mjs → platform-management-CnyTdcWX.mjs} +1 -1
  92. package/dist/platform-plans-config-BNGKGr4P.mjs +359 -0
  93. package/dist/{platform-recovery-BvtcXON5.mjs → platform-recovery-D6KSpuFm.mjs} +2 -2
  94. package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
  95. package/dist/{prepare-C-6YZyyg.mjs → prepare-B5Mkic5u.mjs} +1 -1
  96. package/dist/{prepare-CRhJbVrG.mjs → prepare-DOsL0CC9.mjs} +4 -20
  97. package/dist/prepare-cgvDMtSb.mjs +2 -0
  98. package/dist/{project-cmd-BZLCqOqw.mjs → project-cmd-CNzrqvBv.mjs} +16 -16
  99. package/dist/{project-team-BvgM0WoX.mjs → project-team-DQOWPfQT.mjs} +2 -2
  100. package/dist/{project-token-l5DqK6Az.mjs → project-token-CTDYU0Cc.mjs} +2 -2
  101. package/dist/{project-zero-trust-v6Mvpp8y.mjs → project-zero-trust-BNAkW-_0.mjs} +2 -2
  102. package/dist/{protocol-BBa6cstI.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
  103. package/dist/protocol-U7bfjHmA.mjs +331 -0
  104. package/dist/{provision-Fr9pRqce.mjs → provision-C4ORE7G7.mjs} +1 -1
  105. package/dist/{provision-C4IGqkBf.mjs → provision-CJFgTZY8.mjs} +89 -198
  106. package/dist/{requests-DN-BbNiM.mjs → requests-MhxYnau8.mjs} +2 -2
  107. package/dist/resource-name-C7LVpcRm.mjs +11 -0
  108. package/dist/{rollback-D7rzSaZM.mjs → rollback-CJ6iSDoU.mjs} +3 -3
  109. package/dist/route-url-CG7U-cRN.mjs +15 -0
  110. package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
  111. package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
  112. package/dist/runtime/ai.d.mts +12 -8
  113. package/dist/runtime/ai.mjs +84 -17
  114. package/dist/runtime/better-auth-mysql.mjs +1 -1
  115. package/dist/runtime/better-auth-pg.mjs +1 -1
  116. package/dist/runtime/better-auth.mjs +1 -1
  117. package/dist/runtime/client-react.mjs +2 -2
  118. package/dist/runtime/client-solid.mjs +2 -2
  119. package/dist/runtime/client-svelte.mjs +2 -2
  120. package/dist/runtime/client-vue.mjs +2 -2
  121. package/dist/runtime/client.mjs +2 -2
  122. package/dist/runtime/durable.d.mts +3 -1
  123. package/dist/runtime/durable.mjs +4 -1
  124. package/dist/runtime/email/testing.mjs +1 -1
  125. package/dist/runtime/env-public.d.mts +1 -1
  126. package/dist/runtime/fetch-stream.mjs +1 -1
  127. package/dist/runtime/fetch.mjs +1 -1
  128. package/dist/runtime/handler.d.mts +1 -1
  129. package/dist/runtime/kv.mjs +0 -1
  130. package/dist/runtime/limits.d.mts +2 -0
  131. package/dist/runtime/limits.mjs +2 -0
  132. package/dist/runtime/live-client.d.mts +1 -1
  133. package/dist/runtime/live-server.mjs +25 -16
  134. package/dist/runtime/live.d.mts +1 -1
  135. package/dist/runtime/migration-handler.mjs +62 -42
  136. package/dist/runtime/route-url.d.mts +4 -0
  137. package/dist/runtime/route-url.mjs +2 -0
  138. package/dist/runtime/routing.d.mts +180 -0
  139. package/dist/runtime/routing.mjs +1082 -0
  140. package/dist/runtime/sandbox-container.d.mts +1 -1
  141. package/dist/runtime/sandbox-container.mjs +1 -1
  142. package/dist/runtime/sandbox.d.mts +3 -3
  143. package/dist/runtime/sandbox.mjs +75 -45
  144. package/dist/runtime/sse.mjs +1 -1
  145. package/dist/runtime/validator.d.mts +1 -1
  146. package/dist/runtime/ws-server.d.mts +4 -2
  147. package/dist/runtime/ws-server.mjs +27 -2
  148. package/dist/runtime/ws.d.mts +2 -2
  149. package/dist/runtime/ws.mjs +8 -6
  150. package/dist/{sandbox-qpNBT8a3.d.mts → sandbox-XZAqzFlG.d.mts} +11 -8
  151. package/dist/{sandbox-container-DdNEBfCc.d.mts → sandbox-container-Bo0eiFKz.d.mts} +2 -1
  152. package/dist/{sandbox-container-4fdqLnyb.mjs → sandbox-container-C6ItmVuN.mjs} +4 -2
  153. package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
  154. package/dist/{secret-BOtOl_cb.mjs → secret-Dli5fP0B.mjs} +4 -4
  155. package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
  156. package/dist/validate-Dq_L3s0S.mjs +2 -0
  157. package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
  158. package/dist/{wrangler-DQF1vKyf.mjs → wrangler-7K-bW_DL.mjs} +8 -239
  159. package/dist/{ws-BoY7vQML.d.mts → ws-CL1w7GXU.d.mts} +13 -2
  160. package/package.json +15 -8
  161. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
  162. package/skills/void/SKILL.md +50 -135
  163. package/skills/void/docs/guide/ai.md +94 -84
  164. package/skills/void/docs/guide/app-types.md +3 -32
  165. package/skills/void/docs/guide/auth.md +12 -116
  166. package/skills/void/docs/guide/database/d1.md +9 -54
  167. package/skills/void/docs/guide/database/mysql.md +1 -1
  168. package/skills/void/docs/guide/database/postgresql.md +5 -26
  169. package/skills/void/docs/guide/database.md +23 -75
  170. package/skills/void/docs/guide/deployment.md +27 -113
  171. package/skills/void/docs/guide/durable-state.md +43 -18
  172. package/skills/void/docs/guide/edge/headers.md +3 -47
  173. package/skills/void/docs/guide/edge/prerendering.md +5 -20
  174. package/skills/void/docs/guide/edge/redirects.md +11 -64
  175. package/skills/void/docs/guide/edge/revalidation.md +5 -18
  176. package/skills/void/docs/guide/edge/rewrites.md +56 -284
  177. package/skills/void/docs/guide/edge/static-assets.md +22 -72
  178. package/skills/void/docs/guide/email/domains.md +112 -0
  179. package/skills/void/docs/guide/email/receiving.md +139 -0
  180. package/skills/void/docs/guide/email/sending.md +231 -0
  181. package/skills/void/docs/guide/email.md +13 -619
  182. package/skills/void/docs/guide/env-migration.md +11 -11
  183. package/skills/void/docs/guide/env-vars.md +9 -29
  184. package/skills/void/docs/guide/index.md +0 -15
  185. package/skills/void/docs/guide/jobs.md +3 -18
  186. package/skills/void/docs/guide/kv.md +5 -11
  187. package/skills/void/docs/guide/live.md +5 -56
  188. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
  189. package/skills/void/docs/guide/pages-routing/head.md +10 -10
  190. package/skills/void/docs/guide/pages-routing/islands.md +6 -36
  191. package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
  192. package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
  193. package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
  194. package/skills/void/docs/guide/pages-routing/overview.md +7 -17
  195. package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
  196. package/skills/void/docs/guide/platform/administration/access.md +1 -4
  197. package/skills/void/docs/guide/platform/administration/email.md +35 -8
  198. package/skills/void/docs/guide/platform/administration/operations.md +26 -4
  199. package/skills/void/docs/guide/platform/administration/plans.md +126 -0
  200. package/skills/void/docs/guide/platform/administration/projects.md +5 -2
  201. package/skills/void/docs/guide/platform/administration/zero-trust.md +23 -152
  202. package/skills/void/docs/guide/platform/development/runtime.md +3 -13
  203. package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
  204. package/skills/void/docs/guide/platform/installation/credentials.md +6 -4
  205. package/skills/void/docs/guide/platform/installation/domains.md +30 -2
  206. package/skills/void/docs/guide/platform/installation/first-deployment.md +2 -0
  207. package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
  208. package/skills/void/docs/guide/platform/installation/prerequisites.md +20 -15
  209. package/skills/void/docs/guide/platform/installation/setup.md +9 -5
  210. package/skills/void/docs/guide/platform-administration.md +1 -0
  211. package/skills/void/docs/guide/queues.md +7 -9
  212. package/skills/void/docs/guide/quickstart.md +38 -37
  213. package/skills/void/docs/guide/remote-dev.md +4 -9
  214. package/skills/void/docs/guide/sandboxes.md +29 -21
  215. package/skills/void/docs/guide/server-routing.md +9 -72
  216. package/skills/void/docs/guide/sse.md +4 -18
  217. package/skills/void/docs/guide/ssg.md +3 -15
  218. package/skills/void/docs/guide/ssr.md +14 -62
  219. package/skills/void/docs/guide/storage.md +9 -4
  220. package/skills/void/docs/guide/type-safety.md +3 -14
  221. package/skills/void/docs/guide/typed-fetch.md +3 -7
  222. package/skills/void/docs/guide/websockets.md +68 -40
  223. package/skills/void/docs/integrations/agents.md +3 -3
  224. package/skills/void/docs/integrations/cloudflare.md +85 -316
  225. package/skills/void/docs/integrations/frameworks/analog.md +5 -64
  226. package/skills/void/docs/integrations/frameworks/astro.md +4 -73
  227. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
  228. package/skills/void/docs/integrations/frameworks/overview.md +11 -54
  229. package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
  230. package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
  231. package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
  232. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
  233. package/skills/void/docs/reference/api/auth.md +156 -0
  234. package/skills/void/docs/reference/api/client.md +87 -0
  235. package/skills/void/docs/reference/api/database.md +95 -0
  236. package/skills/void/docs/reference/api/durable.md +46 -0
  237. package/skills/void/docs/reference/api/env.md +50 -0
  238. package/skills/void/docs/reference/api/handlers.md +254 -0
  239. package/skills/void/docs/reference/api/pages.md +241 -0
  240. package/skills/void/docs/reference/api/plugin.md +39 -0
  241. package/skills/void/docs/reference/api/resources.md +109 -0
  242. package/skills/void/docs/reference/api/rewrites.md +76 -0
  243. package/skills/void/docs/reference/api/types.md +92 -0
  244. package/skills/void/docs/reference/api.md +56 -1218
  245. package/skills/void/docs/reference/cli/auth.md +88 -0
  246. package/skills/void/docs/reference/cli/database.md +128 -0
  247. package/skills/void/docs/reference/cli/deploy.md +85 -0
  248. package/skills/void/docs/reference/cli/domains.md +41 -0
  249. package/skills/void/docs/reference/cli/email.md +129 -0
  250. package/skills/void/docs/reference/cli/generate.md +116 -0
  251. package/skills/void/docs/reference/cli/github.md +189 -0
  252. package/skills/void/docs/reference/cli/platform-config.md +92 -0
  253. package/skills/void/docs/reference/cli/platform-email.md +81 -0
  254. package/skills/void/docs/reference/cli/platform-installation.md +127 -0
  255. package/skills/void/docs/reference/cli/platform-operations.md +90 -0
  256. package/skills/void/docs/reference/cli/platform-users.md +89 -0
  257. package/skills/void/docs/reference/cli/platform-zero-trust.md +45 -0
  258. package/skills/void/docs/reference/cli/platform.md +70 -0
  259. package/skills/void/docs/reference/cli/project.md +214 -0
  260. package/skills/void/docs/reference/cli/secrets.md +76 -0
  261. package/skills/void/docs/reference/cli/setup.md +70 -0
  262. package/skills/void/docs/reference/cli.md +32 -1682
  263. package/skills/void/docs/reference/config.md +12 -18
  264. package/skills/void/docs/reference/resource-inference.md +3 -58
  265. package/skills/void/docs/reference/structure.md +14 -41
  266. package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
  267. package/dist/client-Czz8o5jP.mjs +0 -2
  268. package/dist/gen-CNJ62MM7.mjs +0 -2
  269. package/dist/help-CmZzxUba.mjs +0 -2
  270. package/dist/login-CGcRKEoi.mjs +0 -2
  271. package/dist/migrate-CYfbKkXh.mjs +0 -2
  272. package/dist/plan-BEZ8VJW0.mjs +0 -256
  273. package/dist/plan-DpuOr14e.mjs +0 -2
  274. package/dist/prepare-Bm3iq-u4.mjs +0 -2
  275. package/dist/validate-EKmJWxmy.mjs +0 -2
  276. /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { n as OperatorClient, r as OperatorClientError } from "./operator-client-DUwumHpQ.mjs";
2
2
  import { a as resolveOperatorOrigin, i as removeOperatorToken, n as readOperatorApiTokenStdin, o as saveOperatorToken, r as readOperatorToken, t as exchangeOperatorSession } from "./operator-auth-8KnOVXVd.mjs";
3
3
  import { createHash } from "node:crypto";
4
- import { createInterface } from "node:readline/promises";
5
4
  import { setTimeout } from "node:timers/promises";
5
+ import { createInterface } from "node:readline/promises";
6
6
  //#region src/cli/operator-cmd.ts
7
7
  const MAX_RUNTIME_FOLLOW_ROWS = 1e4;
8
8
  function printable(value) {
@@ -137,9 +137,9 @@ async function runAuth(origin, args) {
137
137
  if (args.action === "login" || args.action === "token" && args.tokenStdin) {
138
138
  if (!args.tokenStdin && !process.stdin.isTTY) throw new OperatorClientError("Browser login requires an interactive terminal. Use --token-stdin to exchange an API session.", "interactive_login_required");
139
139
  const apiToken = args.tokenStdin ? await readOperatorApiTokenStdin() : await (async () => {
140
- const { discoverPlatform } = await import("./platform-cmd-E0FuL212.mjs");
141
- const { selectPlatformLoginMethod } = await import("./login-CGcRKEoi.mjs");
142
- const { runPlatformLogin } = await import("./auth-CZuiVsFh.mjs");
140
+ const { discoverPlatform } = await import("./platform-cmd-Bt-1w6pY.mjs");
141
+ const { selectPlatformLoginMethod } = await import("./login-DYt_An22.mjs");
142
+ const { runPlatformLogin } = await import("./auth-CCjt0hcq.mjs");
143
143
  return runPlatformLogin(origin, (await selectPlatformLoginMethod(await discoverPlatform(origin), args.providerExplicit ? args.provider : void 0)).id, (url) => process.stderr.write(`Sign in at ${url}\n`));
144
144
  })();
145
145
  const session = await exchangeOperatorSession(origin, apiToken);
@@ -199,8 +199,6 @@ async function followOperatorLogs(client, args, signal, pollIntervalMs = 2e3) {
199
199
  const combined = signal ? AbortSignal.any([signal, controller.signal]) : controller.signal;
200
200
  const query = { ...args.query };
201
201
  let terminalBuildSince = null;
202
- let legacyQuietSince = null;
203
- let legacyQuietSeq = null;
204
202
  let previousRuntimeRows = /* @__PURE__ */ new Map();
205
203
  let currentRuntimeRows = /* @__PURE__ */ new Map();
206
204
  let currentRuntimeRowCount = 0;
@@ -238,23 +236,11 @@ async function followOperatorLogs(client, args, signal, pollIntervalMs = 2e3) {
238
236
  if (result.logsComplete !== void 0 && result.logsComplete !== null && typeof result.logsComplete !== "boolean") throw new OperatorClientError("Build log response has an invalid completion state.", "invalid_response");
239
237
  if (result.terminal === true) {
240
238
  if (result.logsComplete === true) return;
239
+ if (result.logsComplete === null || result.logsComplete === void 0) throw new OperatorClientError("This platform cannot confirm that the final build logs were captured. Upgrade the platform runtime, or read the retained logs without --follow.", "log_completion_unavailable");
241
240
  const now = Date.now();
242
241
  terminalBuildSince ??= now;
243
242
  if (now - terminalBuildSince >= 12e4) throw new OperatorClientError("Build finished, but its log producer did not confirm completion. Retry the command to recover the final log tail.", "invalid_response");
244
- if (result.logsComplete === null || result.logsComplete === void 0) {
245
- if (legacyQuietSeq !== result.lastSeq) {
246
- legacyQuietSeq = result.lastSeq;
247
- legacyQuietSince = now;
248
- } else {
249
- legacyQuietSince ??= now;
250
- if (now - legacyQuietSince >= 3e4) return;
251
- }
252
- }
253
- } else {
254
- terminalBuildSince = null;
255
- legacyQuietSince = null;
256
- legacyQuietSeq = null;
257
- }
243
+ } else terminalBuildSince = null;
258
244
  } else {
259
245
  if (typeof result.nextCursor === "string" && result.nextCursor) {
260
246
  if (result.nextCursor === query.cursor) throw new OperatorClientError("Runtime log pagination did not advance.", "invalid_response");
@@ -277,9 +263,57 @@ async function followOperatorLogs(client, args, signal, pollIntervalMs = 2e3) {
277
263
  process.removeListener("SIGINT", stop);
278
264
  }
279
265
  }
266
+ async function migrateDeploymentAssets(client, origin, args) {
267
+ const target = decodeURIComponent(args.path.slice(13, -15));
268
+ const seenCursors = /* @__PURE__ */ new Set();
269
+ let body = { ...args.body };
270
+ if (typeof body.cursor === "string") seenCursors.add(body.cursor);
271
+ let authorized = false;
272
+ while (true) {
273
+ const preview = await client.request(args.path, {
274
+ method: "POST",
275
+ body: {
276
+ ...body,
277
+ dryRun: true
278
+ },
279
+ timeoutMs: args.timeoutMs
280
+ });
281
+ if (preview.dryRun !== true || preview.action !== "deployment.migrate-assets" || preview.target !== target || typeof preview.expected !== "string" || !preview.expected.trim()) throw new OperatorClientError("The server did not return a valid asset migration preview. No asset batch was requested.", "invalid_preview");
282
+ if (!await confirmOperatorMutation(origin, {
283
+ ...preview,
284
+ scope: "Copy and verify all remaining asset batches for this deployment; keep original assets."
285
+ }, authorized ? {
286
+ ...args,
287
+ yes: true
288
+ } : args)) return;
289
+ authorized = true;
290
+ const result = await client.request(args.path, {
291
+ method: "POST",
292
+ body: {
293
+ ...body,
294
+ expected: preview.expected
295
+ },
296
+ timeoutMs: args.timeoutMs
297
+ });
298
+ const nextCursor = result.nextCursor;
299
+ if (result.dryRun !== false || result.action !== "deployment.migrate-assets" || result.target !== target || typeof result.complete !== "boolean" || (result.complete ? nextCursor !== null : typeof nextCursor !== "string" || !nextCursor.trim() || seenCursors.has(nextCursor))) throw new OperatorClientError("The server returned an invalid asset migration continuation. Inspect the deployment before resuming; no batch was retried.", "invalid_response", void 0, {
300
+ target,
301
+ lastSuccessfulCursor: body.cursor ?? null,
302
+ result
303
+ });
304
+ output(result, args.json);
305
+ if (result.complete) return;
306
+ const cursor = nextCursor;
307
+ seenCursors.add(cursor);
308
+ body = {
309
+ ...args.body,
310
+ cursor
311
+ };
312
+ }
313
+ }
280
314
  async function runOperatorCommand(args) {
281
315
  if (!args.action) {
282
- const { printHelpPage } = await import("./help-CmZzxUba.mjs");
316
+ const { printHelpPage } = await import("./help-DofyZuY7.mjs");
283
317
  printHelpPage(["platform", args.group]);
284
318
  return;
285
319
  }
@@ -288,6 +322,7 @@ async function runOperatorCommand(args) {
288
322
  const client = new OperatorClient(origin, readOperatorToken(origin));
289
323
  if (args.method === "POST") {
290
324
  if (!args.plan && !args.yes && (!process.stdin.isTTY || !process.stderr.isTTY)) throw new OperatorClientError("Mutations in non-interactive mode require --yes or --plan.", "confirmation_required");
325
+ if (args.group === "deployment" && args.action === "migrate-assets") return migrateDeploymentAssets(client, origin, args);
291
326
  if (args.tokenStdin && (args.group === "email" && (args.action === "domain-add" || args.action === "domain-remove") || args.group === "zero-trust" && args.action === "configure")) args = {
292
327
  ...args,
293
328
  body: {
@@ -304,11 +339,17 @@ async function runOperatorCommand(args) {
304
339
  timeoutMs: args.timeoutMs
305
340
  });
306
341
  if (preview.dryRun !== true || typeof preview.action !== "string" || !Object.hasOwn(preview, "target")) throw new OperatorClientError("The server did not return a valid mutation preview. No change was requested.", "invalid_preview");
307
- const recoveryFence = args.group === "email" && args.action === "operation-resolve" ? operationRecoveryFence(preview.target) : {};
342
+ let recoveryFence = args.group === "email" && args.action === "operation-resolve" ? operationRecoveryFence(preview.target) : {};
343
+ if (args.group === "email" && args.action === "shared-recipient-resolve") {
344
+ const target = preview.target;
345
+ if (!target || typeof target.recoveryFence !== "string" || !/^[a-f0-9]{64}$/.test(target.recoveryFence)) throw new OperatorClientError("The server did not return a valid shared recipient recovery fence. No change was requested.", "invalid_preview");
346
+ recoveryFence = { recoveryFence: target.recoveryFence };
347
+ }
308
348
  if (!await confirmOperatorMutation(origin, preview, args)) return;
309
349
  const body = {
310
350
  ...args.body,
311
351
  ...args.group === "worker" && args.action === "rollback-all" ? { versions: preview.versions } : {},
352
+ ...args.group === "project" && args.action === "normalize" ? { expected: preview.changes } : {},
312
353
  ...recoveryFence
313
354
  };
314
355
  output(await client.request(args.path, {
@@ -320,6 +361,11 @@ async function runOperatorCommand(args) {
320
361
  else {
321
362
  const result = await client.request(args.path, { query: args.query });
322
363
  if (args.action === "logs" && args.group !== "email") outputLogs(result, args.json);
364
+ else if (args.group === "system" && args.action === "asset-migrations" && !args.json && Array.isArray(result.deployments)) console.log([
365
+ ...humanLines({ pagination: result.pagination }),
366
+ "deployments:",
367
+ ...eventLines(result.deployments, " ")
368
+ ].join("\n"));
323
369
  else output(result, args.json);
324
370
  if (result.allOk === false) process.exitCode = 1;
325
371
  }
@@ -1,5 +1,7 @@
1
- import { t as PageObject } from "../protocol-BBa6cstI.mjs";
1
+ import { t as PageObject } from "../protocol-CjF_iI9X.mjs";
2
2
  import { n as CacheForInput, r as CacheForResult } from "../prefetch-Ce6la4EI.mjs";
3
+ import { UsageLimitData } from "@void/edge";
4
+ import { ActionUrl, ResolveActionBody, ResolveActionParams } from "void/routes";
3
5
  //#region src/pages/action-result.d.ts
4
6
  type ActionErrorHandlingScope = "callSite" | "boundary";
5
7
  type ActionResult<T = PageObject | undefined> = {
@@ -11,6 +13,7 @@ type ActionResult<T = PageObject | undefined> = {
11
13
  };
12
14
  export declare class VoidActionError extends Error {
13
15
  readonly body: unknown;
16
+ readonly limit: UsageLimitData | null;
14
17
  readonly status: number;
15
18
  readonly statusText: string;
16
19
  readonly url: string;
@@ -109,6 +112,19 @@ export declare function createPageNavigationEngine(config: PageNavigationEngineC
109
112
  //#region src/pages/form-value-equality.d.ts
110
113
  export declare function isEqualFormValue(a: unknown, b: unknown): boolean;
111
114
  //#endregion
115
+ //#region src/pages/form-presentation.d.ts
116
+ type FormMethod = "post" | "put" | "patch" | "delete";
117
+ type FormModel<Args extends Array<unknown> = []> = {
118
+ readonly pending: boolean;
119
+ readonly error: VoidActionError | null;
120
+ readonly errors: Readonly<Record<string, string | undefined>>;
121
+ } & { [K in FormMethod]: (...args: Args) => void | Promise<void>; };
122
+ export declare function formErrorMessage(form: Pick<FormModel, "error" | "errors">): string | null;
123
+ export declare function formRetryMessage(error: VoidActionError | null): string | null;
124
+ export declare function formSubmissionBlocked(form: Pick<FormModel, "pending" | "error">, now?: number): boolean;
125
+ /** One deadline, capped for browser timers; no polling and no automatic submission. */
126
+ export declare function scheduleFormRetry(error: VoidActionError | null, ready: () => void): () => void;
127
+ //#endregion
112
128
  //#region src/pages/client.d.ts
113
129
  export type VisitOptions = {
114
130
  method?: string;
@@ -185,6 +201,22 @@ export declare function hasFiles(data: unknown): boolean;
185
201
  export declare function objectToFormData(source: Record<string, unknown>, form?: FormData, parentKey?: string): FormData;
186
202
  export declare const ssrProxy: VoidRouter;
187
203
  export declare function submitAction(router: VoidRouter, url: string, options: VisitOptions): Promise<ActionResult>;
204
+ type ActionMethod = "POST" | "PUT" | "PATCH" | "DELETE";
205
+ type HasParams<U extends string> = [ResolveActionParams<U>] extends [never] ? false : true;
206
+ type ActionOptions<U extends string> = {
207
+ data?: ResolveActionBody<U>;
208
+ method?: ActionMethod;
209
+ } & (HasParams<U> extends true ? {
210
+ params: ResolveActionParams<U>;
211
+ } : {
212
+ params?: never;
213
+ });
214
+ export type ActionClient = {
215
+ setActionRouter(router: VoidRouter): void;
216
+ action<U extends ActionUrl & string>(url: U, ...args: HasParams<U> extends true ? [options: ActionOptions<U>] : [options?: ActionOptions<U>]): Promise<ActionResult>;
217
+ };
218
+ /** Creates an action client with its own router for each framework adapter. */
219
+ export declare function createActionClient(): ActionClient;
188
220
  export declare function createVoidRouter(config: VoidRouterConfig): Promise<{
189
221
  router: VoidRouter;
190
222
  initialPageData: PageData;
@@ -195,4 +227,4 @@ export declare function createVoidRouter(config: VoidRouterConfig): Promise<{
195
227
  export declare function scheduleHydration(el: Element, loader: () => Promise<unknown>, props: Record<string, unknown>, strategy: string, hydrateFn: (el: Element, mod: unknown, props: Record<string, unknown>) => void | Promise<void>): void;
196
228
  export declare function initIslands(islands: Record<string, () => Promise<unknown>>, hydrateFn: (el: Element, mod: unknown, props: Record<string, unknown>) => void | Promise<void>): void;
197
229
  //#endregion
198
- export type { ActionErrorHandlingScope, ActionResult, PageNavigationEngine, PageNavigationResource, PageNavigationResult };
230
+ export type { ActionErrorHandlingScope, ActionResult, FormMethod, FormModel, PageNavigationEngine, PageNavigationResource, PageNavigationResult };
@@ -1,15 +1,20 @@
1
+ import { t as interpolateRouteParams } from "../route-url-CG7U-cRN.mjs";
1
2
  import { n as initClientHead, t as applyClientHead } from "../head-client-DzmJGN4C.mjs";
2
3
  import { n as parseCacheFor, t as PrefetchCache } from "../prefetch-Bsc_Pb6c.mjs";
4
+ import { readUsageLimit } from "@void/edge";
3
5
  //#region src/pages/action-result.ts
4
6
  var VoidActionError = class extends Error {
5
7
  body;
8
+ limit;
6
9
  status;
7
10
  statusText;
8
11
  url;
9
12
  constructor({ body, status, statusText, url }) {
10
- super(statusText ? `Action failed with ${status} ${statusText}` : `Action failed with ${status}`);
13
+ const limit = status === 429 ? readUsageLimit(body) : null;
14
+ super(limit?.message ?? (statusText ? `Action failed with ${status} ${statusText}` : `Action failed with ${status}`));
11
15
  this.name = "VoidActionError";
12
16
  this.body = body;
17
+ this.limit = limit;
13
18
  this.status = status;
14
19
  this.statusText = statusText;
15
20
  this.url = url;
@@ -377,7 +382,7 @@ async function createPageNavigationEngine(config) {
377
382
  window.location.href = url;
378
383
  return;
379
384
  }
380
- pageData = _staticPageDataCacheKeys.has(getPageDataCacheKey(fetchUrl, method)) ? clonePageData(cachedPageData) : cachedPageData;
385
+ pageData = clonePageData(cachedPageData);
381
386
  deferredRegistry.setupResolved(pageData);
382
387
  if (!_prefetchCache.isFresh(cacheEntry)) {
383
388
  const bgHeaders = {
@@ -732,6 +737,33 @@ function isEqualFormValue(a, b) {
732
737
  return false;
733
738
  }
734
739
  //#endregion
740
+ //#region src/pages/form-presentation.ts
741
+ function formErrorMessage(form) {
742
+ return form.error?.message ?? (Object.values(form.errors).filter(Boolean).join(". ") || null);
743
+ }
744
+ function formRetryMessage(error) {
745
+ return error?.limit?.retryAt ? `Try again after ${new Date(error.limit.retryAt).toUTCString()}.` : null;
746
+ }
747
+ function formSubmissionBlocked(form, now = Date.now()) {
748
+ return form.pending || (form.error?.limit?.retryAt ? Date.parse(form.error.limit.retryAt) > now : false);
749
+ }
750
+ /** One deadline, capped for browser timers; no polling and no automatic submission. */
751
+ function scheduleFormRetry(error, ready) {
752
+ const retryAt = error?.limit?.retryAt;
753
+ if (!retryAt) return () => {};
754
+ let timer;
755
+ const schedule = () => {
756
+ const remaining = Date.parse(retryAt) - Date.now();
757
+ if (remaining <= 0) {
758
+ ready();
759
+ return;
760
+ }
761
+ timer = setTimeout(schedule, Math.min(remaining, 2147483647));
762
+ };
763
+ schedule();
764
+ return () => clearTimeout(timer);
765
+ }
766
+ //#endregion
735
767
  //#region src/pages/client.ts
736
768
  function currentUrl() {
737
769
  return window.location.pathname + window.location.search + window.location.hash;
@@ -883,6 +915,30 @@ async function submitAction(router, url, options) {
883
915
  throw error;
884
916
  }
885
917
  }
918
+ /** Creates an action client with its own router for each framework adapter. */
919
+ function createActionClient() {
920
+ let _router = null;
921
+ /** Called during app initialization to store the router instance */
922
+ function setActionRouter(router) {
923
+ _router = router;
924
+ }
925
+ /** Programmatic page action call with a router update */
926
+ async function action(url, ...args) {
927
+ if (!_router) throw new Error("action(): called before router initialization.");
928
+ const options = args[0];
929
+ const data = options?.data;
930
+ const method = options?.method || "POST";
931
+ const resolvedUrl = interpolateRouteParams(url, options?.params);
932
+ return submitAction(_router, resolvedUrl, {
933
+ method,
934
+ data
935
+ });
936
+ }
937
+ return {
938
+ action,
939
+ setActionRouter
940
+ };
941
+ }
886
942
  async function createVoidRouter(config) {
887
943
  {
888
944
  const engine = await createPageNavigationEngine(config);
@@ -1003,4 +1059,4 @@ function initIslands(islands, hydrateFn) {
1003
1059
  });
1004
1060
  }
1005
1061
  //#endregion
1006
- export { VoidActionError, categorizeActionError, createPageNavigationEngine, createRouterFacade, createSsrRouter, createVoidRouter, hasFiles, idleNavigationState, initIslands, isAbortError, isCallSiteActionError, isEqualFormValue, isFile, objectToFormData, scheduleHydration, ssrProxy, submitAction };
1062
+ export { VoidActionError, categorizeActionError, createActionClient, createPageNavigationEngine, createRouterFacade, createSsrRouter, createVoidRouter, formErrorMessage, formRetryMessage, formSubmissionBlocked, hasFiles, idleNavigationState, initIslands, isAbortError, isCallSiteActionError, isEqualFormValue, isFile, objectToFormData, scheduleFormRetry, scheduleHydration, ssrProxy, submitAction };
@@ -1,5 +1,5 @@
1
1
  import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-Do8P4puT.mjs";
2
- import "../config-VavjpDnp.mjs";
2
+ import "../config-BMHb8RCj.mjs";
3
3
  import { i as PageDefinition, n as LayoutDefinition, o as PageScanResult, r as NamedLayoutDefinition } from "../types-BAp5AEBU.mjs";
4
4
  import { t as serializePageData } from "../serialize-CfSwWfF2.mjs";
5
5
  //#region src/project-paths.d.ts
@@ -1,8 +1,8 @@
1
1
  import { a as join } from "../dist-BVqXeR_h.mjs";
2
2
  import { r as resolvePagesDir } from "../project-paths-GgcMozYz.mjs";
3
3
  import { m as readConfig } from "../config-Br_JZD6u.mjs";
4
+ import { a as resolveNamedLayout, i as resolveLayoutIds, n as resolveEffectiveLayoutChain, r as resolveLayoutChain, t as scanPages } from "../scan-C7okrLyM.mjs";
4
5
  import { i as parseRedirectsFile } from "../headers-DWi2IXWx.mjs";
5
- import { a as resolveNamedLayout, i as resolveLayoutIds, n as resolveEffectiveLayoutChain, r as resolveLayoutChain, t as scanPages } from "../scan-4tfN-PSn.mjs";
6
6
  import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "../head-D_QRR5Yd.mjs";
7
7
  import { t as serializePageData } from "../serialize-BPvnNQuA.mjs";
8
8
  //#region src/pages/manifest.ts
@@ -1,6 +1,6 @@
1
1
  import { n as dirname, u as resolve } from "../dist-BVqXeR_h.mjs";
2
2
  import { n as isIdentifier, r as isLiteral } from "../ast-CPGPjb0V.mjs";
3
- import { n as resolveEffectiveLayoutChain, t as scanPages } from "../scan-4tfN-PSn.mjs";
3
+ import { n as resolveEffectiveLayoutChain, t as scanPages } from "../scan-C7okrLyM.mjs";
4
4
  import { t as MagicString } from "../dist-AoCzRTJE.mjs";
5
5
  import { existsSync, readFileSync, readdirSync } from "node:fs";
6
6
  import { normalizePath, parseSync } from "vite";
@@ -1,3 +1,3 @@
1
- import { w as ValidationError } from "../handler-HEcZsaij.mjs";
2
- import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-BBa6cstI.mjs";
1
+ import { w as ValidationError } from "../handler-CZ4nAylQ.mjs";
2
+ import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-CjF_iI9X.mjs";
3
3
  export { PageObject, PageRenderResult, ValidationError, flattenValidationErrors, handlePageGet, handlePageMutation, safeJsonStringify };