void 0.26.0 → 0.27.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 (365) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-l-FM7Ioq.mjs} +8 -7
  4. package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-D52yG7hl.mjs → auth-Dn2vw-SG.mjs} +9 -9
  7. package/dist/{auth-B60QDbjg.mjs → auth-LMJcNESe.mjs} +1 -1
  8. package/dist/{auth-link-DjeOptYi.mjs → auth-link-vz9Z2kmG.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BRxIuqDi.mjs → auth-router-DvsCUVw4.mjs} +6 -19
  11. package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
  12. package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
  13. package/dist/{build-cmd-Ce3C8huo.mjs → build-cmd-D6we0VjO.mjs} +8 -7
  14. package/dist/{cache-CS8Yxr5a.mjs → cache-CZRdzKx1.mjs} +8 -8
  15. package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-CQ3NnMvf.mjs} +6 -5
  16. package/dist/{cf-access-YTlqvAsk.mjs → cf-access-BcIBSKqG.mjs} +11 -12
  17. package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
  18. package/dist/cf-build-output-H9a97vME.mjs +2 -0
  19. package/dist/cf-user-agent-lKblH3zU.mjs +17 -0
  20. package/dist/cli/cli.mjs +48 -83
  21. package/dist/cli/cloudflare-operation-process.mjs +78 -78
  22. package/dist/cli/env-schema-probe.mjs +5 -6
  23. package/dist/{client-mC-dFGDD.mjs → client-DlDJuY0s.mjs} +30 -8
  24. package/dist/client-tso2OfcG.mjs +2 -0
  25. package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
  26. package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
  27. package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
  28. package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
  29. package/dist/{cloudflare-operations-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  30. package/dist/{cloudflare-operations-DYa3coIk.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
  31. package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
  32. package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
  33. package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
  34. package/dist/config-BtSFvXZx.mjs +2 -0
  35. package/dist/config-CLYAosnQ.mjs +78 -0
  36. package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
  37. package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
  38. package/dist/config-entry.d.mts +1 -1
  39. package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
  40. package/dist/{connect-H6EvP62X.mjs → connect-BfPBHHm-.mjs} +12 -11
  41. package/dist/{create-project-B2kk9Q0o.mjs → create-project-BdXEFKal.mjs} +7 -7
  42. package/dist/{create-project-Dbb4uiN-.mjs → create-project-qFDC45zg.mjs} +1 -1
  43. package/dist/{db-DpCKZto0.mjs → db-Xs80hcaA.mjs} +101 -133
  44. package/dist/{delete-CxlSvsvW.mjs → delete-d2vuou3j.mjs} +7 -7
  45. package/dist/{deploy-CeEbnv4b.mjs → deploy-Bqe1PYBw.mjs} +2351 -2497
  46. package/dist/deploy-VsWsVQkw.mjs +2 -0
  47. package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
  48. package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
  49. package/dist/discover-EDUf6JJw.mjs +2 -0
  50. package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
  51. package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
  52. package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
  53. package/dist/{domain-B_9VgOm6.mjs → domain-BsDUBAvt.mjs} +29 -30
  54. package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
  55. package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
  56. package/dist/{email-BokHgjKj.mjs → email-_lGAHOhp.mjs} +24 -19
  57. package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
  58. package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
  59. package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
  60. package/dist/{env-BdTc-K2L.mjs → env-C74QepDE.mjs} +10 -10
  61. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
  62. package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
  63. package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
  64. package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
  65. package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
  66. package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  67. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  68. package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
  69. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  70. package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
  71. package/dist/gen-dA9hW7AV.mjs +2 -0
  72. package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-DaDdBbSS.mjs} +65 -164
  73. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  74. package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
  75. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  76. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  77. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  78. package/dist/{help-Bv44e2tm.mjs → help-0bTe_lID.mjs} +13 -32
  79. package/dist/help-DfQYVfGY.mjs +2 -0
  80. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  81. package/dist/index.d.mts +19 -2
  82. package/dist/index.mjs +619 -532
  83. package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
  84. package/dist/{init-BMf4T03q.mjs → init-DaBGmaXC.mjs} +161 -198
  85. package/dist/{link-BqYsSS_I.mjs → link-C6fjafep.mjs} +10 -10
  86. package/dist/{list-_kBToO-l.mjs → list-BTFBlqKl.mjs} +9 -8
  87. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  88. package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
  89. package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
  90. package/dist/{login-DFuo-RWO.mjs → login-GKcNUmtI.mjs} +7 -7
  91. package/dist/login-mx_ydhmp.mjs +2 -0
  92. package/dist/{logs-DYgnh6dH.mjs → logs-BiMSULmc.mjs} +28 -11
  93. package/dist/migrate-BHp07yJE.mjs +2 -0
  94. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  95. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  96. package/dist/{node-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
  97. package/dist/{operator-args-DdY54Bgb.mjs → operator-args-DOBhIaIg.mjs} +10 -1
  98. package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-BEZ_u0Cz.mjs} +2 -2
  99. package/dist/{operator-client-BFqpp6z0.mjs → operator-client-DbDv4vtE.mjs} +2 -2
  100. package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-BT4hgavL.mjs} +24 -11
  101. package/dist/operator-cmd-CwBB-1yb.mjs +2 -0
  102. package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -2
  103. package/dist/pages/client.d.mts +19 -51
  104. package/dist/pages/client.mjs +204 -225
  105. package/dist/pages/head-client.d.mts +1 -1
  106. package/dist/pages/head.d.mts +1 -1
  107. package/dist/pages/head.mjs +1 -1
  108. package/dist/pages/index.d.mts +2 -2
  109. package/dist/pages/index.mjs +6 -12
  110. package/dist/pages/islands-plugin.d.mts +1 -1
  111. package/dist/pages/islands-plugin.mjs +21 -25
  112. package/dist/pages/protocol.d.mts +2 -2
  113. package/dist/pages/protocol.mjs +2 -2
  114. package/dist/{plan-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
  115. package/dist/plan-CH2G51je.mjs +2 -0
  116. package/dist/platform-args-D4E1PjVw.mjs +2 -0
  117. package/dist/{platform-args-DSV2p4nY.mjs → platform-args-DUeXY9Om.mjs} +1 -1
  118. package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-CkSx3usH.mjs} +40 -36
  119. package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-BJimB_p9.mjs} +9 -8
  120. package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-BU6izFAU.mjs} +8 -7
  121. package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-BbY1dWiM.mjs} +14 -13
  122. package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-BbmJiq5O.mjs} +1 -1
  123. package/dist/{platform-discovery-BC0HCKYt.mjs → platform-discovery-DIYz8V63.mjs} +1 -1
  124. package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-CHVS6cV0.mjs} +6 -6
  125. package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-ByAlpkhV.mjs} +1 -1
  126. package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-DzCwqhFq.mjs} +76 -387
  127. package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-CBOT4BSM.mjs} +1 -1
  128. package/dist/{platform-management-BrF9STZp.mjs → platform-management-CuuVDhyt.mjs} +7 -7
  129. package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CN-heS4q.mjs} +5 -4
  130. package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-CskSJgLh.mjs} +3 -3
  131. package/dist/{platform-registry-P387v42A.mjs → platform-registry-Cjv2Qf0r.mjs} +5 -1
  132. package/dist/platform-setup-BBxRxmFC.mjs +299 -0
  133. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  134. package/dist/prepare-DRUV-g3X.mjs +2 -0
  135. package/dist/{prepare-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
  136. package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
  137. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  138. package/dist/prerender-render.mjs +1 -1
  139. package/dist/{project-DQstYTxO.mjs → project-BAm2aB6Q.mjs} +1 -1
  140. package/dist/{project-BiaPQ7ur.mjs → project-DedqCp59.mjs} +1 -1
  141. package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-DaoRrn-8.mjs} +19 -19
  142. package/dist/{project-team-Yiww3-go.mjs → project-team-Q_lCA7Io.mjs} +15 -18
  143. package/dist/{project-token-BrtT2NkY.mjs → project-token-BArgK9o1.mjs} +14 -17
  144. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  145. package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-KO9Hu2Pq.mjs} +12 -9
  146. package/dist/{protocol-BX8t2jiw.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  147. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  148. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  149. package/dist/{provision-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
  150. package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  151. package/dist/{requests-TIz_jtSu.mjs → requests-C7Oeoh5u.mjs} +5 -5
  152. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  153. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  154. package/dist/{rollback-dBqICPzj.mjs → rollback-DVAtrLAl.mjs} +30 -37
  155. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  156. package/dist/route-url-BgPja1GS.d.mts +5 -0
  157. package/dist/route-url-BjGv_KKY.mjs +28 -0
  158. package/dist/runner-9wjsSZx-.mjs +2 -0
  159. package/dist/{runner--2KF6Kua.mjs → runner-DMBKSrRk.mjs} +2 -2
  160. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  161. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  162. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  163. package/dist/runtime/ai.d.mts +1 -1
  164. package/dist/runtime/ai.mjs +34 -95
  165. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  166. package/dist/runtime/better-auth-mysql.mjs +4 -9
  167. package/dist/runtime/better-auth-pg.d.mts +1 -1
  168. package/dist/runtime/better-auth-pg.mjs +5 -10
  169. package/dist/runtime/better-auth.d.mts +1 -1
  170. package/dist/runtime/better-auth.mjs +3 -3
  171. package/dist/runtime/client-react.d.mts +2 -3
  172. package/dist/runtime/client-react.mjs +2 -2
  173. package/dist/runtime/client-solid.d.mts +2 -3
  174. package/dist/runtime/client-solid.mjs +2 -2
  175. package/dist/runtime/client-svelte.d.mts +2 -3
  176. package/dist/runtime/client-svelte.mjs +2 -2
  177. package/dist/runtime/client-vue.d.mts +2 -3
  178. package/dist/runtime/client-vue.mjs +2 -2
  179. package/dist/runtime/client.d.mts +2 -3
  180. package/dist/runtime/client.mjs +2 -2
  181. package/dist/runtime/db.mjs +1 -1
  182. package/dist/runtime/durable.mjs +3 -10
  183. package/dist/runtime/email/testing.mjs +5 -5
  184. package/dist/runtime/email.d.mts +2 -1
  185. package/dist/runtime/email.mjs +11 -27
  186. package/dist/runtime/env-public.mjs +15 -20
  187. package/dist/runtime/env.mjs +1 -1
  188. package/dist/runtime/fetch-stream.d.mts +2 -2
  189. package/dist/runtime/fetch-stream.mjs +1 -1
  190. package/dist/runtime/fetch.d.mts +2 -3
  191. package/dist/runtime/fetch.mjs +1 -1
  192. package/dist/runtime/handler.d.mts +1 -1
  193. package/dist/runtime/handler.mjs +2 -2
  194. package/dist/runtime/isr.mjs +1 -1
  195. package/dist/runtime/kv.mjs +10 -11
  196. package/dist/runtime/live-client.d.mts +1 -1
  197. package/dist/runtime/live-client.mjs +12 -22
  198. package/dist/runtime/live-server.mjs +27 -35
  199. package/dist/runtime/live.d.mts +2 -2
  200. package/dist/runtime/live.mjs +2 -2
  201. package/dist/runtime/migration-handler.mjs +4 -81
  202. package/dist/runtime/queues.mjs +1 -1
  203. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  204. package/dist/runtime/remote/binding-handler.mjs +8 -9
  205. package/dist/runtime/remote/index.mjs +27 -77
  206. package/dist/runtime/route-url.d.mts +2 -4
  207. package/dist/runtime/route-url.mjs +1 -1
  208. package/dist/runtime/routing.d.mts +1 -1
  209. package/dist/runtime/routing.mjs +15 -26
  210. package/dist/runtime/sandbox.mjs +2 -2
  211. package/dist/runtime/sse.mjs +1 -1
  212. package/dist/runtime/storage.mjs +1 -1
  213. package/dist/runtime/validator.d.mts +1 -1
  214. package/dist/runtime/ws-server.d.mts +2 -2
  215. package/dist/runtime/ws-server.mjs +30 -61
  216. package/dist/runtime/ws.d.mts +1 -1
  217. package/dist/runtime/ws.mjs +1 -1
  218. package/dist/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
  219. package/dist/{secret-AKnNXNP5.mjs → secret-BvtB7IjY.mjs} +15 -15
  220. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  221. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  222. package/dist/{subcommand-prompt-B6WS9Aoz.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  223. package/dist/sveltekit.d.mts +0 -2
  224. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  225. package/dist/validate-BJr9LfXy.mjs +2 -0
  226. package/dist/{validate-ymhap6M_.mjs → validate-C9qJArv7.mjs} +9 -28
  227. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  228. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  229. package/dist/{ws-C79j4aED.d.mts → ws-CChrrAU-.d.mts} +1 -1
  230. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  231. package/{skills/void/docs → docs}/guide/ai.md +5 -3
  232. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  233. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  234. package/{skills/void/docs → docs}/guide/deployment.md +2 -2
  235. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  236. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  237. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  238. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  239. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  240. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  241. package/{skills/void/docs → docs}/guide/live.md +10 -5
  242. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
  243. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  244. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  245. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  246. package/{skills/void/docs → docs}/guide/platform/administration/access.md +3 -11
  247. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  248. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  249. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  250. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  251. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  252. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  253. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +4 -2
  254. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
  255. package/{skills/void/docs → docs}/guide/project-collaboration.md +7 -3
  256. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  257. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  258. package/{skills/void/docs → docs}/guide/sandboxes.md +2 -2
  259. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  260. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  261. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  262. package/docs/integrations/agents.md +37 -0
  263. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  264. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  265. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  266. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  267. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  268. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  269. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  270. package/{skills/void/docs → docs}/reference/cli/auth.md +1 -6
  271. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  272. package/{skills/void/docs → docs}/reference/cli/deploy.md +1 -1
  273. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  274. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  275. package/{skills/void/docs → docs}/reference/cli/platform-config.md +1 -1
  276. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  277. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
  278. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  279. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  280. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  281. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  282. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  283. package/{skills/void/docs → docs}/reference/cli.md +1 -1
  284. package/{skills/void/docs → docs}/reference/config.md +13 -13
  285. package/{skills/void/docs → docs}/reference/resource-inference.md +1 -16
  286. package/package.json +34 -30
  287. package/schema.json +1 -1
  288. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  289. package/skills/void/SKILL.md +9 -5
  290. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  291. package/dist/client-BxVixJBI.mjs +0 -2
  292. package/dist/config-0acf1oys.mjs +0 -2
  293. package/dist/config-D8MOgiQV.mjs +0 -32
  294. package/dist/deploy-qmiLE1G1.mjs +0 -2
  295. package/dist/discover-AMCBXivQ.mjs +0 -2
  296. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  297. package/dist/gen-qCBwH3fZ.mjs +0 -2
  298. package/dist/help-Dw5f9Xrg.mjs +0 -2
  299. package/dist/login-D7meQg_3.mjs +0 -2
  300. package/dist/migrate-CEu2X5DB.mjs +0 -2
  301. package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
  302. package/dist/plan-COtUvdMA.mjs +0 -2
  303. package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
  304. package/dist/prepare-BBknoZI1.mjs +0 -2
  305. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  306. package/dist/route-url-CG7U-cRN.mjs +0 -15
  307. package/dist/runner-voIltZrY.mjs +0 -2
  308. package/dist/validate-pna7R3Pv.mjs +0 -2
  309. package/skills/void/docs/integrations/agents.md +0 -26
  310. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  311. package/{skills/void/docs → docs}/guide/app-types.md +0 -0
  312. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  313. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  314. package/{skills/void/docs → docs}/guide/database.md +8 -8
  315. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  316. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  317. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  318. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  319. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  320. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  321. package/{skills/void/docs → docs}/guide/email.md +0 -0
  322. package/{skills/void/docs → docs}/guide/index.md +0 -0
  323. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  324. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  325. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  326. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  327. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  328. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  329. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  330. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  331. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  332. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +0 -0
  333. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  334. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
  335. package/{skills/void/docs → docs}/guide/platform/installation/uninstall.md +0 -0
  336. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  337. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  338. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  339. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  340. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  341. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  342. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  343. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  344. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  345. package/{skills/void/docs → docs}/index.md +0 -0
  346. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  347. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  348. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  349. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  350. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  351. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  352. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  353. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  354. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  355. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  356. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  357. /package/{skills/void/docs → docs}/reference/api/resources.md +0 -0
  358. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  359. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  360. /package/{skills/void/docs → docs}/reference/api.md +0 -0
  361. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  362. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  363. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  364. /package/{skills/void/docs → docs}/reference/cli/platform.md +0 -0
  365. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -9,6 +9,11 @@
9
9
  */
10
10
  function resolveHead(configHead, middlewareHead, pageHead) {
11
11
  if (!configHead && !middlewareHead && !pageHead) return;
12
+ const layers = [
13
+ configHead,
14
+ middlewareHead,
15
+ pageHead
16
+ ];
12
17
  const result = {};
13
18
  const title = pageHead?.title ?? middlewareHead?.title ?? configHead?.title;
14
19
  if (title !== void 0) {
@@ -16,62 +21,40 @@ function resolveHead(configHead, middlewareHead, pageHead) {
16
21
  result.title = template ? template.replace("%s", title) : title;
17
22
  }
18
23
  const metaMap = /* @__PURE__ */ new Map();
19
- const metaOrder = [];
20
- for (const layer of [
21
- configHead,
22
- middlewareHead,
23
- pageHead
24
- ]) {
24
+ for (const layer of layers) {
25
25
  if (!layer?.meta) continue;
26
26
  for (const entry of layer.meta) {
27
27
  const key = entry.charset ? "charset" : entry.property ? `property:${entry.property}` : `name:${entry.name ?? ""}`;
28
- if (!metaMap.has(key)) metaOrder.push(key);
29
28
  metaMap.set(key, entry);
30
29
  }
31
30
  }
32
- if (metaMap.size > 0) result.meta = metaOrder.map((key) => metaMap.get(key));
33
- const links = [];
34
- for (const layer of [
35
- configHead,
36
- middlewareHead,
37
- pageHead
38
- ]) if (layer?.link) links.push(...layer.link);
31
+ if (metaMap.size > 0) result.meta = [...metaMap.values()];
32
+ const links = layers.flatMap((layer) => layer?.link ?? []);
39
33
  if (links.length > 0) result.link = links;
40
- const scripts = [];
41
- for (const layer of [
42
- configHead,
43
- middlewareHead,
44
- pageHead
45
- ]) if (layer?.script) scripts.push(...layer.script);
34
+ const scripts = layers.flatMap((layer) => layer?.script ?? []);
46
35
  if (scripts.length > 0) result.script = scripts;
47
- const htmlAttrs = {};
48
- let hasHtmlAttrs = false;
49
- for (const layer of [
50
- configHead,
51
- middlewareHead,
52
- pageHead
53
- ]) if (layer?.htmlAttrs) {
54
- Object.assign(htmlAttrs, layer.htmlAttrs);
55
- hasHtmlAttrs = true;
56
- }
57
- if (hasHtmlAttrs) result.htmlAttrs = htmlAttrs;
58
- const bodyAttrs = {};
59
- let hasBodyAttrs = false;
60
- for (const layer of [
61
- configHead,
62
- middlewareHead,
63
- pageHead
64
- ]) if (layer?.bodyAttrs) {
65
- Object.assign(bodyAttrs, layer.bodyAttrs);
66
- hasBodyAttrs = true;
67
- }
68
- if (hasBodyAttrs) result.bodyAttrs = bodyAttrs;
36
+ const htmlAttrs = mergeAttrs(layers, "htmlAttrs");
37
+ if (htmlAttrs) result.htmlAttrs = htmlAttrs;
38
+ const bodyAttrs = mergeAttrs(layers, "bodyAttrs");
39
+ if (bodyAttrs) result.bodyAttrs = bodyAttrs;
69
40
  if (result.title === void 0 && !result.meta && !result.link && !result.script && !result.htmlAttrs && !result.bodyAttrs) return;
70
41
  return result;
71
42
  }
43
+ /** Shallow-merge an attribute map across layers; undefined when no layer sets it. */
44
+ function mergeAttrs(layers, key) {
45
+ let merged;
46
+ for (const layer of layers) {
47
+ const attrs = layer?.[key];
48
+ if (attrs) merged = Object.assign(merged ?? {}, attrs);
49
+ }
50
+ return merged;
51
+ }
72
52
  function escapeHtml(s) {
73
53
  return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
74
54
  }
55
+ function serializeAttrs(attrs) {
56
+ return Object.entries(attrs).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
57
+ }
75
58
  /** Serialize a HeadDescriptor to HTML tags for injection into `<head>`. */
76
59
  function renderHeadToString(head) {
77
60
  const parts = [];
@@ -84,13 +67,10 @@ function renderHeadToString(head) {
84
67
  if (entry.content !== void 0) attrs.push(`content="${escapeHtml(entry.content)}"`);
85
68
  parts.push(`<meta ${attrs.join(" ")}>`);
86
69
  }
87
- if (head.link) for (const entry of head.link) {
88
- const attrs = Object.entries(entry).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
89
- parts.push(`<link ${attrs}>`);
90
- }
70
+ if (head.link) for (const entry of head.link) parts.push(`<link ${serializeAttrs(entry)}>`);
91
71
  if (head.script) for (const entry of head.script) {
92
72
  const { innerHTML, ...rest } = entry;
93
- const attrs = Object.entries(rest).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
73
+ const attrs = serializeAttrs(rest);
94
74
  if (innerHTML) parts.push(`<script${attrs ? " " + attrs : ""}>${innerHTML}<\/script>`);
95
75
  else if (attrs) parts.push(`<script ${attrs}><\/script>`);
96
76
  }
@@ -98,14 +78,12 @@ function renderHeadToString(head) {
98
78
  }
99
79
  /** Serialize htmlAttrs to an attribute string (includes leading space). */
100
80
  function renderHtmlAttrs(head) {
101
- if (!head.htmlAttrs) return "";
102
- const attrs = Object.entries(head.htmlAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
81
+ const attrs = head.htmlAttrs ? serializeAttrs(head.htmlAttrs) : "";
103
82
  return attrs ? " " + attrs : "";
104
83
  }
105
84
  /** Serialize bodyAttrs to an attribute string (includes leading space). */
106
85
  function renderBodyAttrs(head) {
107
- if (!head.bodyAttrs) return "";
108
- const attrs = Object.entries(head.bodyAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
86
+ const attrs = head.bodyAttrs ? serializeAttrs(head.bodyAttrs) : "";
109
87
  return attrs ? " " + attrs : "";
110
88
  }
111
89
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { a as convertFallbacksConfig, c as convertRewritesConfig, f as isProtocolRelative, l as countSplats, n as VALID_REDIRECT_STATUSES, o as convertHeadersConfig, p as parseHostPrefixedSource, s as convertRedirectsConfig } from "./config-Br_JZD6u.mjs";
2
+ import { a as convertFallbacksConfig, c as convertRewritesConfig, f as isProtocolRelative, l as countSplats, n as VALID_REDIRECT_STATUSES, o as convertHeadersConfig, p as parseHostPrefixedSource, s as convertRedirectsConfig } from "./config-DiowPT80.mjs";
3
3
  import { i as voidWarn } from "./log-vqY3pqwI.mjs";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  //#region src/cli/headers.ts
@@ -186,8 +186,8 @@ function splitRedirectRulesByForce(rules) {
186
186
  * - `routing.redirects` + `routing.rewrites` → `redirectRules`
187
187
  * - `routing.fallbacks` → `fallbackRules`
188
188
  *
189
- * Returns `fallbackRules === undefined` when empty so callers that default to
190
- * "no post-asset phase" behave identically to the old deploy code.
189
+ * Returns `fallbackRules === undefined` when empty, meaning "no post-asset
190
+ * phase".
191
191
  *
192
192
  * Duplicate linting is NOT called here (callers decide which warning surface
193
193
  * to use — CLI vs. Vite logger). `redundantForceOn3xx` is returned raw for
@@ -1,8 +1,8 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { H as outro } from "./prompts-6OSVA7DJ.mjs";
2
+ import { H as outro } from "./dist-D3m88sjf.mjs";
3
+ import { c as helpLine, l as import_picocolors, p as sectionTitle, t as categoryTitle, u as note } from "./output-C50ag2r3.mjs";
3
4
  import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
4
- import { c as import_picocolors, d as sectionTitle, l as note, s as helpLine, t as categoryTitle } from "./output-BvdaehtE.mjs";
5
- import { n as operatorGroups, t as operatorCommands } from "./operator-args-DdY54Bgb.mjs";
5
+ import { n as operatorGroups, t as operatorCommands } from "./operator-args-DOBhIaIg.mjs";
6
6
  import { readFileSync } from "node:fs";
7
7
  //#region src/cli/ascii.ts
8
8
  const asciiArts = [
@@ -82,7 +82,7 @@ function operatorHelpTree() {
82
82
  })),
83
83
  ...(entry.booleans ?? []).map((flag) => ({
84
84
  command: `--${flag}`,
85
- description: flag === "follow" ? "Poll new logs until interrupted or the build ends" : flag === "ended" ? "Attest that the original provider execution has ended" : flag === "public-apps" ? "Manage public app rules without identity policies" : flag === "protect-new-projects" ? "Protect newly created projects by default" : flag === "check" && group === "zero-trust" ? "Also check the saved settings against Cloudflare Access (several API calls)" : flag === "token-stdin" && group === "zero-trust" ? "Read the Access management API token from stdin" : flag === "token-stdin" && group === "email" ? entry.action === "domain-remove" ? "Read a replacement Cloudflare token for blocked project cleanup from stdin" : "Read a scoped Cloudflare API token from stdin" : "Read a full API session from stdin for explicit operator session exchange"
85
+ description: flag === "follow" ? "Poll new logs until interrupted or the build ends" : flag === "ended" ? "Attest that the original provider execution has ended" : flag === "public-apps" ? "Manage public app rules without identity policies" : flag === "protect-new-projects" ? "Protect newly created projects by default" : flag === "check" && group === "zero-trust" ? "Also check the saved settings against Cloudflare Access (several API calls)" : flag === "token-stdin" && group === "zero-trust" ? "Read the Access management API token from stdin" : flag === "token-stdin" && group === "email" ? entry.action === "domain-remove" ? "Read a replacement Cloudflare token for blocked project cleanup from stdin" : "Read a scoped Cloudflare API token from stdin" : flag === "all" ? "Rotate every project" : "Read a full API session from stdin for explicit operator session exchange"
86
86
  }))
87
87
  ]
88
88
  }]))
@@ -119,13 +119,9 @@ const HELP_TREE = {
119
119
  summary: "Set up Void in a new or existing project.",
120
120
  usage: ["void init [options]"],
121
121
  options: [
122
- {
123
- command: "--agents",
124
- description: "Set up agent instructions and skills"
125
- },
126
122
  {
127
123
  command: "--tsconfig",
128
- description: "Only update tsconfig.json"
124
+ description: "Update tsconfig.json and set up coding agents"
129
125
  },
130
126
  {
131
127
  command: "--git",
@@ -137,23 +133,16 @@ const HELP_TREE = {
137
133
  },
138
134
  {
139
135
  command: "--github",
140
- description: "Only create the GitHub Actions deploy workflow (OIDC, no stored token)"
136
+ description: "Create the GitHub Actions deploy workflow and set up coding agents"
141
137
  }
142
138
  ],
143
- examples: [
144
- {
145
- command: "void init",
146
- description: "Scaffold or configure the current project"
147
- },
148
- {
149
- command: "void init --agents",
150
- description: "Install agent instructions and skills"
151
- },
152
- {
153
- command: "void init --github",
154
- description: "Scaffold the GitHub Actions deploy workflow"
155
- }
156
- ]
139
+ examples: [{
140
+ command: "void init",
141
+ description: "Scaffold or configure the current project"
142
+ }, {
143
+ command: "void init --github",
144
+ description: "Scaffold the GitHub Actions deploy workflow"
145
+ }]
157
146
  },
158
147
  migrate: {
159
148
  summary: "Move legacy Void project settings into void.config.ts.",
@@ -1762,9 +1751,6 @@ function printGlobalHelp() {
1762
1751
  globalCommandLine(["prepare"], "void prepare"),
1763
1752
  ...globalCommandLines("gen", { route: "route <path> [--methods]" }),
1764
1753
  "",
1765
- categoryTitle("agent"),
1766
- helpLine("void init --agents", requiredOption(["init"], "--agents").description),
1767
- "",
1768
1754
  categoryTitle("help"),
1769
1755
  helpLine("void help <command>", "Show command-specific help"),
1770
1756
  helpLine("void <command> --help", "Show command-specific help")
@@ -1819,11 +1805,6 @@ function globalCommandLine(path, command) {
1819
1805
  function globalOptionLines(path) {
1820
1806
  return (requiredPage(path).options ?? []).map((option) => helpLine(` ${option.command}`, option.description));
1821
1807
  }
1822
- function requiredOption(path, command) {
1823
- const option = requiredPage(path).options?.find((entry) => entry.command === command);
1824
- if (!option) throw new Error(`Missing help option: ${formatHelpPath(path)} ${command}`);
1825
- return option;
1826
- }
1827
1808
  function requiredPage(path) {
1828
1809
  const page = findHelpPage(path);
1829
1810
  if (!page) throw new Error(`Missing help page: ${formatHelpPath(path)}`);
@@ -0,0 +1,2 @@
1
+ import { r as printHelpPage } from "./help-0bTe_lID.mjs";
2
+ export { printHelpPage };
@@ -1,18 +1,20 @@
1
- import { i as normalizeEmail, n as MimeError, o as validateAddressParts, r as buildMime } from "./mime-D5Nmdzf7.mjs";
2
- import { a as getRawRuntimeEnv } from "./env-raw-Cx8ElDdj.mjs";
3
- import { EMAIL_MAX_RESPONSE_BYTES } from "@void/platform/email-protocol";
1
+ import { i as normalizeEmail, n as MimeError, o as validateAddressParts, r as buildMime } from "./mime-DxCznlJq.mjs";
2
+ import { a as getRawRuntimeEnv } from "./env-raw-jZpP5n47.mjs";
3
+ import { EMAIL_MAX_ACTIONS, EMAIL_MAX_INBOUND_BYTES, EMAIL_MAX_INBOUND_HEADERS, EMAIL_MAX_METADATA_BYTES, EMAIL_MAX_REPLY_BYTES, EMAIL_MAX_RESPONSE_BYTES } from "@void/platform/email-protocol";
4
4
  //#region src/runtime/email/inbound.ts
5
5
  const VALID_SLUG = /^[a-z0-9](?:[a-z0-9-]{0,54}[a-z0-9])?$/;
6
- const MAX_ACTIONS = 100;
6
+ const MAX_ACTIONS = EMAIL_MAX_ACTIONS;
7
7
  const MAX_ACTION_ADDRESS_LENGTH = 320;
8
- const MAX_ACTION_METADATA_BYTES = 8192;
8
+ const MAX_ACTION_METADATA_BYTES = EMAIL_MAX_METADATA_BYTES;
9
+ /** Bounds on a forward's headers. */
10
+ const MAX_FORWARD_HEADERS = 32;
9
11
  const MAX_FORWARD_HEADER_LENGTH = 1024;
10
12
  /** Maximum normalized SMTP rejection reason length. */
11
13
  const MAX_REJECT_REASON_LENGTH = 1e3;
12
14
  /** Inbound admission limits also applied by the handler test harness. */
13
- const MAX_INBOUND_BYTES = 10485760;
14
- const MAX_INBOUND_HEADERS = 1024;
15
- const MAX_REPLY_BYTES = 5242880;
15
+ const MAX_INBOUND_BYTES = EMAIL_MAX_INBOUND_BYTES;
16
+ const MAX_INBOUND_HEADERS = EMAIL_MAX_INBOUND_HEADERS;
17
+ const MAX_REPLY_BYTES = EMAIL_MAX_REPLY_BYTES;
16
18
  const EMAIL_STREAM_DEADLINE_MS = 15e3;
17
19
  const EMAIL_ACTION_TERMINAL_BYTES = 5;
18
20
  const actionEncoder = new TextEncoder();
@@ -78,7 +80,7 @@ var ParseEmailError = class extends Error {
78
80
  * one-shot.
79
81
  */
80
82
  async function parseEmail(message) {
81
- if (message.rawSize > 10485760) throw new ParseEmailError("INBOUND_TOO_LARGE", `parseEmail: message size ${message.rawSize} bytes exceeds maximum of ${MAX_INBOUND_BYTES} bytes.`);
83
+ if (message.rawSize > MAX_INBOUND_BYTES) throw new ParseEmailError("INBOUND_TOO_LARGE", `parseEmail: message size ${message.rawSize} bytes exceeds maximum of ${MAX_INBOUND_BYTES} bytes.`);
82
84
  const { default: PostalMime } = await import("postal-mime");
83
85
  const cached = proxyRawCache.get(message);
84
86
  try {
@@ -135,12 +137,12 @@ function invalidForwardHeaders(cause) {
135
137
  */
136
138
  function assertForwardHeadersWithinBounds(headers) {
137
139
  const names = Object.keys(headers);
138
- if (names.length > 32) throw new MimeError("MIME_ERROR", `forward: ${names.length} headers, over the 32-header limit.`);
140
+ if (names.length > MAX_FORWARD_HEADERS) throw new MimeError("MIME_ERROR", `forward: ${names.length} headers, over the ${MAX_FORWARD_HEADERS}-header limit.`);
139
141
  for (const name of names) {
140
- if (name.length > 1024) throw new MimeError("MIME_ERROR", `forward: header name is ${name.length} characters, over the ${MAX_FORWARD_HEADER_LENGTH}-character limit.`);
142
+ if (name.length > MAX_FORWARD_HEADER_LENGTH) throw new MimeError("MIME_ERROR", `forward: header name is ${name.length} characters, over the ${MAX_FORWARD_HEADER_LENGTH}-character limit.`);
141
143
  const value = headers[name];
142
144
  if (typeof value !== "string") throw new MimeError("MIME_ERROR", `forward: header "${name.slice(0, 64)}" value is not a string.`);
143
- if (value.length > 1024) throw new MimeError("MIME_ERROR", `forward: header "${name.slice(0, 64)}" value is ${value.length} characters, over the ${MAX_FORWARD_HEADER_LENGTH}-character limit.`);
145
+ if (value.length > MAX_FORWARD_HEADER_LENGTH) throw new MimeError("MIME_ERROR", `forward: header "${name.slice(0, 64)}" value is ${value.length} characters, over the ${MAX_FORWARD_HEADER_LENGTH}-character limit.`);
144
146
  }
145
147
  }
146
148
  /**
@@ -152,10 +154,9 @@ function assertForwardHeadersWithinBounds(headers) {
152
154
  * The reason goes into the SMTP reply to the connecting client, and a
153
155
  * handler may build it from the inbound message: a remote sender's CRLF is
154
156
  * then a line injected into that reply, and a multi-megabyte reason is a
155
- * transient-heap amplifier. The router already refuses both, but on your
156
- * own account `enactEmailActions` handed the recorded string to the native
157
- * `setReject()` untouched, so the same handler injected there and was
158
- * clean here. NORMALIZED rather than refused, unlike the forward bounds
157
+ * transient-heap amplifier. The router already refuses both; normalizing at
158
+ * record time covers the native `setReject()` replay on your own account
159
+ * too. NORMALIZED rather than refused, unlike the forward bounds
159
160
  * above: a reject is the handler's terminal decision, and throwing out of
160
161
  * it would drop that decision and bounce the message as a dispatch error
161
162
  * (see the `MAX_ACTIONS` note in `setReject`). Slice FIRST, then replace: a
@@ -431,7 +432,7 @@ function fitsHeaderLine(name, value) {
431
432
  * Whether `value` carries a C0 control other than HTAB, or DEL. The
432
433
  * sibling of `fitsHeaderLine` for the other way a remote-controlled id can
433
434
  * be unrepresentable: a threading value is emitted verbatim, so a control
434
- * inside it reached the reply's `In-Reply-To` / `References` line raw —
435
+ * inside it would reach the reply's `In-Reply-To` / `References` line raw —
435
436
  * `\x01` and DEL pass a WHATWG `Headers`, which refuses only CR, LF and
436
437
  * NUL — and an RFC 5322 §3.6.4 `msg-id` is `dot-atom-text`, which admits no
437
438
  * control at all. HTAB is not one here: it is the whitespace that separates
@@ -488,7 +489,7 @@ function dropControlIds(chain) {
488
489
  * replacements below cost 66 bytes of heap per match, so at this size they
489
490
  * cost at most 135 KB, and the reply's own `Subject` line is at most ~20 KB
490
491
  * — 4096 code units x 3 UTF-8 octets, base64'd in 45-octet encoded-words
491
- * with their framing — against a `MAX_MESSAGE_BYTES` of 10 MiB, so the
492
+ * with their framing — against a `MAX_MESSAGE_BYTES` of 5 MiB, so the
492
493
  * subject alone can never push the reply over the limit.
493
494
  */
494
495
  const MAX_REPLY_SUBJECT_CHARS = 4096;
@@ -512,13 +513,11 @@ function prefixReplySubject(original) {
512
513
  * `header_size_limit` discards header bytes past 100 KiB. A message-id is
513
514
  * tens of characters, so 8 KiB carries a chain over a hundred replies deep
514
515
  * with every id intact — an order of magnitude past any conversation — and
515
- * a value this size, folded and encoded, is at most ~25 KB of a 10 MiB
516
+ * a value this size, folded and encoded, is at most ~25 KB of a 5 MiB
516
517
  * reply, so the chain alone can never push the reply over the limit.
517
518
  * Unbounded, it could: the inbound header can be the whole 10 MiB message,
518
- * and 10 MiB of short ids passes the line guard — every id folds — yet
519
- * `foldHeader`'s continuations put the rendered reply over
520
- * `MAX_MESSAGE_BYTES`, and `buildMime` threw (measured: 10,777,129 bytes
521
- * from a 10,485,557-character chain) for a reply the guide promises is sent.
519
+ * and short ids pass the line guard — every id folds — yet `foldHeader`'s
520
+ * continuations would put the rendered reply over `MAX_MESSAGE_BYTES`.
522
521
  *
523
522
  * Past the bound the NEWEST ids are kept, whole, and the parent's id still
524
523
  * ends the chain. That is what a mail client threads on: it links the reply
@@ -733,4 +732,4 @@ async function enactEmailActions(message, actions) {
733
732
  }
734
733
  }
735
734
  //#endregion
736
- export { defineEmail as a, parseEmail as c, createMessageProxy as i, replyEmail as l, MAX_INBOUND_HEADERS as n, enactEmailActions as o, ParseEmailError as r, isForwardableEmailMessage as s, MAX_INBOUND_BYTES as t };
735
+ export { createMessageProxy as a, isForwardableEmailMessage as c, bytesToReadableStream as i, parseEmail as l, MAX_INBOUND_HEADERS as n, defineEmail as o, ParseEmailError as r, enactEmailActions as s, MAX_INBOUND_BYTES as t, replyEmail as u };
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { n as HeadDescriptor } from "./head-Do8P4puT.mjs";
1
+ import { n as HeadDescriptor } from "./head-C8K_iGe6.mjs";
2
2
  import { r as AuthUser } from "./auth-DkcFflXV.mjs";
3
- import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-BeK3weD4.mjs";
3
+ import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-CNAwjRcW.mjs";
4
4
  import { t as QueueMap } from "./queues-BWKt1Xo4.mjs";
5
5
  import { PluginConfig } from "@cloudflare/vite-plugin";
6
6
  import { Plugin } from "vite";
@@ -49,6 +49,23 @@ export declare function shouldBindWorkersAi(command: string, needsAI: boolean, r
49
49
  export declare function resolveWorkersAiBindingName(resolvedAi: unknown, configuredName?: string): string;
50
50
  //#endregion
51
51
  //#region src/index.d.ts
52
+ /**
53
+ * Void plugin — the main entry point.
54
+ *
55
+ * Composes:
56
+ * 1. Routing plugin (file-based routing from routes/ and middleware/)
57
+ * 2. Migration plugin (auto-apply .sql migrations on dev startup)
58
+ * 3. @cloudflare/vite-plugin (workerd runtime, HMR, builds)
59
+ *
60
+ * Binding inference runs synchronously here so results are available
61
+ * before the Cloudflare plugin initializes.
62
+ *
63
+ * The Cloudflare plugin reads Void's generated config and provides it to our
64
+ * config function. Bindings already defined there (with real IDs for
65
+ * production deployment) are preserved — we only add inferred bindings
66
+ * that are missing. This allows `vite build && wrangler deploy` to work
67
+ * for deploying directly to Cloudflare without the Void platform.
68
+ */
52
69
  export declare function voidPlugin(options?: {
53
70
  persistTo?: string;
54
71
  auxiliaryWorkers?: PluginConfig["auxiliaryWorkers"];