void 0.25.0 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS_TEMPLATE.md +1 -3
- package/README.md +19 -9
- package/dist/{account-cmd-DcR1ywt8.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
- package/dist/{application-analysis-BVsVqc11.mjs → application-analysis-DKy02UY0.mjs} +21 -32
- package/dist/{application-routing-B7QEjqSR.mjs → application-routing-DQyUh_5S.mjs} +1 -1
- package/dist/{auth-7wuZ5ob8.mjs → auth-B5_tZLxT.mjs} +9 -9
- package/dist/{auth-CdgZ9uag.mjs → auth-BgX2qYSY.mjs} +1 -1
- package/dist/{auth-link-Z6E5DYvM.mjs → auth-link-D5RmKnzh.mjs} +5 -5
- package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
- package/dist/{auth-router-BdM4avI8.mjs → auth-router-Bap-pvbn.mjs} +6 -19
- package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
- package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
- package/dist/{build-cmd-CEE7D-hM.mjs → build-cmd-B58c8iS8.mjs} +8 -7
- package/dist/{cache-TcZnBLtH.mjs → cache-Bo52trKF.mjs} +8 -8
- package/dist/{cancel-deploy-CYoZmcmR.mjs → cancel-deploy-BZNz3Q26.mjs} +6 -5
- package/dist/{cf-access-AHKBzmuu.mjs → cf-access-ngGqZpHZ.mjs} +11 -12
- package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
- package/dist/cf-build-output-H9a97vME.mjs +2 -0
- package/dist/cli/cli.mjs +48 -83
- package/dist/cli/cloudflare-operation-process.mjs +71 -77
- package/dist/cli/env-schema-probe.d.mts +1 -1
- package/dist/cli/env-schema-probe.mjs +5 -6
- package/dist/client-By4JjMw_.mjs +2 -0
- package/dist/{client-RsPo8wsP.mjs → client-C2Prx_Bi.mjs} +30 -8
- package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
- package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
- package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
- package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
- package/dist/{cloudflare-operations-BhbK6yTq.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
- package/dist/{cloudflare-operations-CjaV4lZi.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
- package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
- package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
- package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
- package/dist/config-BtSFvXZx.mjs +2 -0
- package/dist/config-CLYAosnQ.mjs +78 -0
- package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
- package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
- package/dist/{connect-DCvUmPXY.mjs → connect-X0MUA1gk.mjs} +12 -11
- package/dist/{create-project-eAPgYq35.mjs → create-project-DxiyW6iX.mjs} +7 -7
- package/dist/{create-project-C734I-Mu.mjs → create-project-iwkbqiBU.mjs} +1 -1
- package/dist/{db-C07GEdKF.mjs → db-XnVMHzoV.mjs} +101 -133
- package/dist/{delete-pKMVsrpJ.mjs → delete-esYlMiSJ.mjs} +8 -8
- package/dist/{deploy-DfsAe-T0.mjs → deploy-BsEvnlJl.mjs} +2377 -2512
- package/dist/deploy-C1d-YTfp.mjs +2 -0
- package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
- package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
- package/dist/discover-EDUf6JJw.mjs +2 -0
- package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
- package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
- package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
- package/dist/{domain-D3uA9ize.mjs → domain-CbbBWhWE.mjs} +29 -30
- package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
- package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
- package/dist/{email-z3o2cwjH.mjs → email-CpuT42g7.mjs} +24 -19
- package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
- package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
- package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
- package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
- package/dist/{env-public-BX_r8HR6.d.mts → env-public-DR7ZM6d-.d.mts} +1 -1
- package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
- package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
- package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
- package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
- package/dist/{env-3Q8-_2IH.mjs → env-w9jOyGZn.mjs} +10 -9
- package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
- package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
- package/dist/{fetch-stream-IvCYKyQL.mjs → fetch-stream-PGgz4uGz.mjs} +26 -24
- package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
- package/dist/{gen-NjwoG9FK.mjs → gen-DtkQhvQg.mjs} +40 -57
- package/dist/gen-dA9hW7AV.mjs +2 -0
- package/dist/{github-cmd-DquUq-b1.mjs → github-cmd-D_FsOFxq.mjs} +65 -164
- package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
- package/dist/{handler-CZ4nAylQ.d.mts → handler-CNAwjRcW.d.mts} +5 -12
- package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
- package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
- package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
- package/dist/{help-DRZXC4fj.mjs → help-CVFBTmBx.mjs} +23 -38
- package/dist/help-DzKUrQvk.mjs +2 -0
- package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
- package/dist/index.d.mts +19 -2
- package/dist/index.mjs +632 -532
- package/dist/{info-BmA3_IFZ.mjs → info-PYWwkWyt.mjs} +4 -4
- package/dist/{init-DT7yuuyl.mjs → init-Bw-fRKGp.mjs} +161 -197
- package/dist/{limits-Bq5LG8Id.d.mts → limits-CFsDKQvU.d.mts} +1 -10
- package/dist/{limits-Cjuk2VPm.mjs → limits-D0vD1M9A.mjs} +1 -22
- package/dist/{link-CXOlqh2F.mjs → link-DlPG8iX3.mjs} +10 -10
- package/dist/{list-eEWVJEPn.mjs → list-2GN7_ueV.mjs} +11 -9
- package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
- package/dist/{live-Chw1eIMv.d.mts → live-Du8jXwOW.d.mts} +4 -2
- package/dist/{local-d1-Df4XpwhW.mjs → local-d1-ga5O_idV.mjs} +2 -2
- package/dist/{login-pWQHYVu2.mjs → login-D-Q4xw3Q.mjs} +7 -7
- package/dist/login-Dc-wuTDq.mjs +2 -0
- package/dist/{logs-DnxVX7TR.mjs → logs-rd8J-OFh.mjs} +28 -11
- package/dist/migrate-BHp07yJE.mjs +2 -0
- package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
- package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
- package/dist/{node-BkyRWRx8.mjs → node-DJicPvPj.mjs} +5 -5
- package/dist/{operator-args-CAVcmwUt.mjs → operator-args-BNsW5gfp.mjs} +10 -1
- package/dist/{operator-auth-CkmTE3rt.mjs → operator-auth-AzVLbrr3.mjs} +4 -8
- package/dist/{operator-client-LmwjxT6q.mjs → operator-client-BQtzyG-g.mjs} +3 -3
- package/dist/{operator-cmd-d-IEKgNk.mjs → operator-cmd-B6f6Cg9Z.mjs} +45 -14
- package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
- package/dist/{output-BBsUwdyT.mjs → output-C50ag2r3.mjs} +44 -2
- package/dist/pages/client.d.mts +19 -51
- package/dist/pages/client.mjs +204 -225
- package/dist/pages/head-client.d.mts +1 -1
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/head.mjs +1 -1
- package/dist/pages/index.d.mts +2 -2
- package/dist/pages/index.mjs +6 -12
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +21 -25
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -2
- package/dist/{plan-NPpwZ_kc.mjs → plan-BhLO2p4w.mjs} +4 -3
- package/dist/plan-CH2G51je.mjs +2 -0
- package/dist/{platform-args-Bzf8JPc2.mjs → platform-args-BoZkWQnJ.mjs} +4 -2
- package/dist/platform-args-DYgITk0D.mjs +2 -0
- package/dist/{platform-auth-config-0V0lA3pF.mjs → platform-auth-config-n603OANg.mjs} +45 -40
- package/dist/{platform-auth-protection-DFeJ-JkK.mjs → platform-auth-protection-zxDr0hWW.mjs} +9 -8
- package/dist/{platform-auth-recovery-ICy4muq6.mjs → platform-auth-recovery-tw9lgtgE.mjs} +8 -7
- package/dist/{platform-cmd-D7vSWMvV.mjs → platform-cmd-B8-bCb7t.mjs} +48 -23
- package/dist/{platform-cmd-BPySFOew.mjs → platform-cmd-C00YM14r.mjs} +1 -1
- package/dist/{platform-discovery-DDDUvnqp.mjs → platform-discovery-BC0HCKYt.mjs} +18 -4
- package/dist/{platform-domain-CUdY064e.mjs → platform-domain-p0kobLV8.mjs} +6 -5
- package/dist/{platform-lifecycle-Dm09JNkn.mjs → platform-lifecycle-D_QEY32D.mjs} +906 -389
- package/dist/{platform-lifecycle-BaUdTRPU.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
- package/dist/{platform-management-BSEc_ZeG.mjs → platform-management-BdYblvvE.mjs} +175 -32
- package/dist/{platform-management-Bp6aoH2C.mjs → platform-management-oi-SvI3f.mjs} +1 -1
- package/dist/{platform-plans-config-B0pOVQyW.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
- package/dist/{platform-recovery-WOZ95Uze.mjs → platform-recovery-PvNS9Nl2.mjs} +3 -3
- package/dist/{platform-registry-KfNEF84O.mjs → platform-registry-P387v42A.mjs} +17 -10
- package/dist/platform-setup-DVe42Ws7.mjs +299 -0
- package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
- package/dist/prepare-DRUV-g3X.mjs +2 -0
- package/dist/{prepare-DnaKBi--.mjs → prepare-Do96654b.mjs} +8 -8
- package/dist/{prepare-39EvOhI6.mjs → prepare-Dq9hTIbo.mjs} +4 -3
- package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-IOjBU8R6.mjs → project-BiaPQ7ur.mjs} +1 -1
- package/dist/{project-BkbfDs0V.mjs → project-DQstYTxO.mjs} +1 -1
- package/dist/{project-cmd-Bs5A392E.mjs → project-cmd-ti8_yTcA.mjs} +19 -19
- package/dist/{project-team-ohAWWaew.mjs → project-team-CDPE1Tsg.mjs} +15 -18
- package/dist/{project-token-CP01Jna6.mjs → project-token-CkZ1cN0Z.mjs} +14 -17
- package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
- package/dist/{project-zero-trust-BzkVgx35.mjs → project-zero-trust-DdjLR61k.mjs} +12 -9
- package/dist/{protocol-CjF_iI9X.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
- package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
- package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
- package/dist/{provision-Btj1jppf.mjs → provision-BfaLiWbj.mjs} +51 -42
- package/dist/{provision-BEv0k-qz.mjs → provision-Wu9ZBk9L.mjs} +2 -3
- package/dist/{requests-B3PBuGlX.mjs → requests-DFAqyYy8.mjs} +5 -5
- package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
- package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
- package/dist/{rollback-DDub9GsO.mjs → rollback-BKYXBduI.mjs} +30 -37
- package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
- package/dist/route-url-BgPja1GS.d.mts +5 -0
- package/dist/route-url-BjGv_KKY.mjs +28 -0
- package/dist/runner-9wjsSZx-.mjs +2 -0
- package/dist/{runner-Ol0TNjk6.mjs → runner-DMBKSrRk.mjs} +2 -2
- package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
- package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
- package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
- package/dist/runtime/ai.d.mts +11 -12
- package/dist/runtime/ai.mjs +47 -113
- package/dist/runtime/better-auth-mysql.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.mjs +4 -9
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +5 -10
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +3 -3
- package/dist/runtime/client-react.d.mts +2 -3
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.d.mts +2 -3
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.d.mts +2 -3
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.d.mts +2 -3
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.d.mts +2 -3
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.mjs +3 -10
- package/dist/runtime/email/testing.mjs +5 -5
- package/dist/runtime/email.d.mts +2 -1
- package/dist/runtime/email.mjs +11 -27
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/env-public.mjs +15 -20
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/fetch-stream.d.mts +2 -2
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.d.mts +2 -3
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +2 -2
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/kv.mjs +10 -11
- package/dist/runtime/limits.d.mts +2 -2
- package/dist/runtime/limits.mjs +2 -2
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-client.mjs +12 -22
- package/dist/runtime/live-server.mjs +27 -35
- package/dist/runtime/live.d.mts +2 -2
- package/dist/runtime/live.mjs +2 -2
- package/dist/runtime/migration-handler.mjs +35 -86
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/remote/binding-handler.d.mts +2 -2
- package/dist/runtime/remote/binding-handler.mjs +8 -9
- package/dist/runtime/remote/index.mjs +27 -77
- package/dist/runtime/route-url.d.mts +2 -4
- package/dist/runtime/route-url.mjs +1 -1
- package/dist/runtime/routing.d.mts +1 -1
- package/dist/runtime/routing.mjs +15 -26
- package/dist/runtime/sandbox.d.mts +1 -1
- package/dist/runtime/sandbox.mjs +14 -24
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws-server.mjs +30 -61
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/runtime/ws.mjs +1 -1
- package/dist/{sandbox-XZAqzFlG.d.mts → sandbox-C5LFoJMf.d.mts} +7 -7
- package/dist/{scan-C7okrLyM.mjs → scan-C3uDzz6J.mjs} +21 -18
- package/dist/{secret-3c72lY1U.mjs → secret-BAt2KMmO.mjs} +15 -15
- package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
- package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
- package/dist/{subcommand-prompt-Dhom39bd.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
- package/dist/sveltekit.d.mts +0 -2
- package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
- package/dist/validate-BJr9LfXy.mjs +2 -0
- package/dist/{validate-ctOrgiS3.mjs → validate-C9qJArv7.mjs} +9 -28
- package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
- package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
- package/dist/{ws-CL1w7GXU.d.mts → ws-CChrrAU-.d.mts} +1 -1
- package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
- package/{skills/void/docs → docs}/guide/ai.md +69 -64
- package/{skills/void/docs → docs}/guide/app-types.md +1 -1
- package/{skills/void/docs → docs}/guide/auth.md +37 -1
- package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
- package/{skills/void/docs → docs}/guide/database.md +23 -8
- package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
- package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
- package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
- package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
- package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
- package/{skills/void/docs → docs}/guide/jobs.md +2 -2
- package/{skills/void/docs → docs}/guide/live.md +12 -5
- package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +21 -9
- package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
- package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
- package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
- package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
- package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
- package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
- package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +2 -2
- package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +8 -2
- package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +7 -1
- package/{skills/void/docs → docs}/guide/platform/installation/setup.md +1 -1
- package/docs/guide/platform/installation/uninstall.md +102 -0
- package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
- package/{skills/void/docs → docs}/guide/queues.md +0 -2
- package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
- package/{skills/void/docs → docs}/guide/sandboxes.md +41 -22
- package/{skills/void/docs → docs}/guide/sse.md +0 -2
- package/{skills/void/docs → docs}/guide/storage.md +7 -2
- package/{skills/void/docs → docs}/guide/websockets.md +4 -0
- package/docs/integrations/agents.md +37 -0
- package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
- package/{skills/void/docs → docs}/integrations/hono.md +15 -7
- package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
- package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
- package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
- package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
- package/{skills/void/docs → docs}/reference/api/resources.md +11 -14
- package/{skills/void/docs → docs}/reference/api.md +35 -34
- package/{skills/void/docs → docs}/reference/cli/auth.md +3 -6
- package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
- package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
- package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
- package/{skills/void/docs → docs}/reference/cli/platform-config.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
- package/{skills/void/docs → docs}/reference/cli/platform-installation.md +15 -13
- package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
- package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
- package/{skills/void/docs → docs}/reference/cli/platform.md +4 -2
- package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
- package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
- package/{skills/void/docs → docs}/reference/cli.md +2 -2
- package/{skills/void/docs → docs}/reference/config.md +13 -13
- package/{skills/void/docs → docs}/reference/resource-inference.md +2 -16
- package/package.json +34 -30
- package/schema.json +1 -1
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
- package/skills/void/SKILL.md +11 -5
- package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
- package/dist/client-B4Me-9HE.mjs +0 -2
- package/dist/config-0acf1oys.mjs +0 -2
- package/dist/config-D8MOgiQV.mjs +0 -32
- package/dist/deploy-BDu1vhSH.mjs +0 -2
- package/dist/discover-AMCBXivQ.mjs +0 -2
- package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
- package/dist/gen-ById9r2j.mjs +0 -2
- package/dist/help-DPGBwomV.mjs +0 -2
- package/dist/login-C98-sw79.mjs +0 -2
- package/dist/migrate-CEu2X5DB.mjs +0 -2
- package/dist/plan-D1Q5rf-r.mjs +0 -2
- package/dist/platform-args-Cq6EjQro.mjs +0 -2
- package/dist/prepare-CnjcTV2s.mjs +0 -2
- package/dist/resolve-project-DtbidV4y.mjs +0 -2
- package/dist/route-url-CG7U-cRN.mjs +0 -15
- package/dist/runner-CXA9Fh8h.mjs +0 -2
- package/dist/validate-Dq_L3s0S.mjs +0 -2
- package/skills/void/docs/guide/platform/installation/uninstall.md +0 -69
- package/skills/void/docs/integrations/agents.md +0 -26
- package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
- package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
- package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
- package/{skills/void/docs → docs}/guide/deployment.md +0 -0
- package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
- package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
- package/{skills/void/docs → docs}/guide/email.md +0 -0
- package/{skills/void/docs → docs}/guide/index.md +0 -0
- package/{skills/void/docs → docs}/guide/kv.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
- package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
- package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
- package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
- package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
- package/{skills/void/docs → docs}/guide/ssg.md +0 -0
- package/{skills/void/docs → docs}/guide/ssr.md +0 -0
- package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
- package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
- package/{skills/void/docs → docs}/index.md +0 -0
- package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
- package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
- package/{skills/void/docs → docs}/reference/api/client.md +0 -0
- package/{skills/void/docs → docs}/reference/api/database.md +2 -2
- /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
- /package/{skills/void/docs → docs}/reference/structure.md +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
2
|
import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
|
|
3
|
-
import { m as readConfig } from "./config-
|
|
4
|
-
import { a as scanEmailHandlersSync } from "./email
|
|
5
|
-
import {
|
|
6
|
-
import { r as readProjectConfig } from "./project-
|
|
7
|
-
import {
|
|
8
|
-
import { c as getToken, u as openBrowser } from "./auth-
|
|
9
|
-
import { A as confirm,
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
3
|
+
import { m as readConfig } from "./config-DiowPT80.mjs";
|
|
4
|
+
import { a as scanEmailHandlersSync } from "./email-d_Aux1vM.mjs";
|
|
5
|
+
import { A as createDeployWranglerRunner, H as loadProvisionModule, L as resolveDeployTransport, M as isWranglerNonInteractiveOrCI, N as runWranglerAuthToken, O as discoverRootWranglerConfig, V as deriveWorkerName, d as applyEmailSetup, f as createNodeEmailDns, g as renderEmailChecklist, h as renderAddressMap, m as preflightEmail, p as findEmailConfigConflicts } from "./deploy-BsEvnlJl.mjs";
|
|
6
|
+
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
7
|
+
import { j as writeProvisionedWranglerConfig } from "./wrangler-D9KTuqnv.mjs";
|
|
8
|
+
import { c as getToken, u as openBrowser } from "./auth-B5_tZLxT.mjs";
|
|
9
|
+
import { A as confirm, L as log, U as password, tt as isCancel } from "./dist-D3m88sjf.mjs";
|
|
10
|
+
import { d as printSuccess, l as import_picocolors, r as createSpinner, u as note } from "./output-C50ag2r3.mjs";
|
|
11
|
+
import { n as PlatformApiError, r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
12
12
|
import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { tmpdir } from "node:os";
|
|
14
14
|
import { execSync } from "node:child_process";
|
|
@@ -82,10 +82,10 @@ async function emailDestinations(client, projectId) {
|
|
|
82
82
|
async function emailAllow(client, projectId, address) {
|
|
83
83
|
const dest = await client.addEmailDestination(projectId, address);
|
|
84
84
|
const sent = dest.verificationSent !== false && (dest.created || dest.platformVerificationPending);
|
|
85
|
-
if (dest.status === "verified") log.
|
|
85
|
+
if (dest.status === "verified") log.info(`${dest.address} is already verified.`);
|
|
86
86
|
else if (sent) {
|
|
87
|
-
log.success(`Verification email sent to ${dest.address}.`);
|
|
88
87
|
log.info("They click the link in their inbox — no Void or Cloudflare account needed. `void email destinations` to poll status.");
|
|
88
|
+
printSuccess(`Verification email sent to ${dest.address}.`);
|
|
89
89
|
} else if (dest.created) log.warn(`${dest.address} is on this project's list now, but Cloudflare already had the address pending (added by another project, or by hand), so no new verification email was sent — the link it mailed when the address was first added is the one to click. ${freshLinkHint(dest.address)}`);
|
|
90
90
|
else log.info(`${dest.address} is still pending — Cloudflare emailed them a verification link when the address was first added, and a repeat add sends nothing new. ${freshLinkHint(dest.address)}`);
|
|
91
91
|
}
|
|
@@ -104,7 +104,7 @@ async function emailDisallow(client, projectId, address) {
|
|
|
104
104
|
process.exit(1);
|
|
105
105
|
}
|
|
106
106
|
await client.removeEmailDestination(projectId, dest.id);
|
|
107
|
-
|
|
107
|
+
printSuccess(`Removed ${dest.address}. New sends to it are refused immediately; already admitted attempts may finish.`);
|
|
108
108
|
}
|
|
109
109
|
async function emailLogs(client, projectId, limit) {
|
|
110
110
|
const result = await client.getEmailLogs(projectId, limit);
|
|
@@ -492,14 +492,18 @@ async function emailDomainAdd(client, projectId, rawDomain, subdomain, deps = {}
|
|
|
492
492
|
].join("\n"), "Email Setup");
|
|
493
493
|
if (operation.error) log.error(operation.error);
|
|
494
494
|
log.info(`Run \`void email domain status ${target.emailDomain}\` to inspect setup.`);
|
|
495
|
-
if (operation.status === "completed")
|
|
495
|
+
if (operation.status === "completed") {
|
|
496
|
+
printSuccess(`Email domain ${target.emailDomain} configured.`);
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
496
499
|
return fail(`email: setup is ${operation.status}; operation ${operation.operationId} retains its confirmed progress on the platform.`);
|
|
497
500
|
}
|
|
498
501
|
return fail(`email: setup outcome is unknown (operation ${attemptId}). Nothing was revoked. Check \`void email domain status ${target.emailDomain}\` before starting another setup.`);
|
|
499
502
|
}
|
|
500
|
-
log.
|
|
503
|
+
log.info("Token stored encrypted on the platform for this zone connection — nothing is kept on this machine.");
|
|
501
504
|
printEmailDomainOutcome(row);
|
|
502
505
|
if (row.operationStatus !== "completed") return exit(1);
|
|
506
|
+
printSuccess(`Email domain ${row.domain} configured.`);
|
|
503
507
|
}
|
|
504
508
|
function emailDomainStatusText(status) {
|
|
505
509
|
if (status === "ready") return import_picocolors.default.green("ready");
|
|
@@ -542,6 +546,7 @@ async function emailDomainSync(client, projectId, rawDomain) {
|
|
|
542
546
|
const row = await client.syncEmailDomain(projectId, domain);
|
|
543
547
|
printEmailDomainOutcome(row);
|
|
544
548
|
if (row.operationStatus !== "completed") throw new Error(`email: reconciliation ${row.operationStatus ?? "pending"}; inspect operation ${row.operationId ?? row.domain}`);
|
|
549
|
+
printSuccess(`Email domain ${domain} reconciled.`);
|
|
545
550
|
}
|
|
546
551
|
/** Rotation applies to every domain sharing this zone connection. */
|
|
547
552
|
async function emailDomainRotateSecret(client, projectId, rawDomain, deps = {}) {
|
|
@@ -574,14 +579,14 @@ async function emailDomainRotateSecret(client, projectId, rawDomain, deps = {})
|
|
|
574
579
|
`Credential: ${operation.readiness.management.status}`
|
|
575
580
|
].join("\n"), "Email Secret Rotation");
|
|
576
581
|
if (operation.status !== "completed") throw new Error(`email: secret rotation ${operation.status}; inspect operation ${operation.operationId}`);
|
|
577
|
-
|
|
582
|
+
printSuccess("Zone ingress secret rotated and verified on the deployed Worker.");
|
|
578
583
|
return;
|
|
579
584
|
}
|
|
580
585
|
throw new Error(`email: secret rotation outcome is unknown (operation key ${attemptId}); inspect \`void email domain status ${domain}\` before starting another rotation.`);
|
|
581
586
|
}
|
|
582
587
|
printEmailDomainOutcome(row);
|
|
583
588
|
if (row.operationStatus !== "completed") throw new Error(`email: secret rotation ${row.operationStatus ?? "pending"}; inspect operation ${row.operationId ?? row.domain}`);
|
|
584
|
-
|
|
589
|
+
printSuccess("Zone ingress secret rotated and verified on the deployed Worker.");
|
|
585
590
|
}
|
|
586
591
|
async function emailDomainRemove(client, projectId, rawDomain, options = {}) {
|
|
587
592
|
const domain = normalizeEmailDomainInput(rawDomain);
|
|
@@ -592,7 +597,7 @@ async function emailDomainRemove(client, projectId, rawDomain, options = {}) {
|
|
|
592
597
|
(options.exit ?? ((code) => process.exit(code)))(1);
|
|
593
598
|
return;
|
|
594
599
|
}
|
|
595
|
-
|
|
600
|
+
printSuccess(`Removed ${domain}. Zone resources still used by other domains were retained.`);
|
|
596
601
|
}
|
|
597
602
|
async function runEmailDomainCommand(client, projectId, args) {
|
|
598
603
|
switch (args.domainVerb) {
|
|
@@ -736,7 +741,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
|
|
|
736
741
|
pendingLabel: "(no rule yet)"
|
|
737
742
|
}));
|
|
738
743
|
if (pre.ready) {
|
|
739
|
-
log.
|
|
744
|
+
log.info(`Email is set up on ${pre.domain}.`);
|
|
740
745
|
return;
|
|
741
746
|
}
|
|
742
747
|
log.warn(`Email is not set up on ${pre.domain} yet — run \`void email setup --platform cloudflare\`.`);
|
|
@@ -776,7 +781,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
|
|
|
776
781
|
return exit(1);
|
|
777
782
|
}
|
|
778
783
|
if ((out.patch.addresses ?? []).length > 0) log.info("Routing rules are created by the next `void deploy --platform cloudflare`, which applies the Email Routing plan from `addresses`.");
|
|
779
|
-
|
|
784
|
+
printSuccess(`Email set up on ${pre.domain}.`);
|
|
780
785
|
}
|
|
781
786
|
//#endregion
|
|
782
787
|
export { runEmailCommand };
|
|
@@ -4,7 +4,7 @@ import { n as globSync, t as glob } from "./dist-Bn8Kodjp.mjs";
|
|
|
4
4
|
/**
|
|
5
5
|
* Scan `email/` for inbound email handlers.
|
|
6
6
|
*
|
|
7
|
-
* The `email/` directory sits at the
|
|
7
|
+
* The `email/` directory sits at the source root alongside `crons/` and
|
|
8
8
|
* `queues/` — non-HTTP handlers all live at the top level, since each is
|
|
9
9
|
* wired into a separate worker export (`scheduled`, `queue`, `email`).
|
|
10
10
|
*
|
|
@@ -4,8 +4,10 @@ import { n as isIdentifier } from "./ast-CPGPjb0V.mjs";
|
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { parseSync } from "vite";
|
|
6
6
|
//#region src/ssr/entry.ts
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const SSR_SERVER_ENTRY_NAMES = ["main.ssr.ts", "main.ssr.tsx"];
|
|
8
|
+
const SSR_CLIENT_ENTRY_NAMES = ["main.client.ts", "main.client.tsx"];
|
|
9
|
+
const SSR_SERVER_ENTRY_RELATIVE_PATHS = SSR_SERVER_ENTRY_NAMES.map((name) => `src/${name}`);
|
|
10
|
+
const SSR_CLIENT_ENTRY_RELATIVE_PATHS = SSR_CLIENT_ENTRY_NAMES.map((name) => `src/${name}`);
|
|
9
11
|
function resolveSingleEntry(root, entries, label, paths = readProjectPaths(root)) {
|
|
10
12
|
const matches = entries.map((entryName) => ({
|
|
11
13
|
relativePath: relative(root, join(paths.ssrDir, entryName)),
|
|
@@ -18,8 +20,6 @@ function resolveSingleEntry(root, entries, label, paths = readProjectPaths(root)
|
|
|
18
20
|
}
|
|
19
21
|
return matches[0];
|
|
20
22
|
}
|
|
21
|
-
const SSR_SERVER_ENTRY_NAMES = ["main.ssr.ts", "main.ssr.tsx"];
|
|
22
|
-
const SSR_CLIENT_ENTRY_NAMES = ["main.client.ts", "main.client.tsx"];
|
|
23
23
|
function getSsrServerEntryPath(root, paths = readProjectPaths(root)) {
|
|
24
24
|
return resolveSingleEntry(root, SSR_SERVER_ENTRY_NAMES, "SSR", paths)?.absolutePath ?? null;
|
|
25
25
|
}
|
|
@@ -68,8 +68,8 @@ function validateSsrEntries(root, paths = readProjectPaths(root)) {
|
|
|
68
68
|
const server = resolveSingleEntry(root, SSR_SERVER_ENTRY_NAMES, "SSR", paths);
|
|
69
69
|
const client = resolveSingleEntry(root, SSR_CLIENT_ENTRY_NAMES, "SSR client", paths);
|
|
70
70
|
if (!server && !client) return null;
|
|
71
|
-
if (
|
|
72
|
-
if (!server
|
|
71
|
+
if (!client) throw new Error(`ssr: Missing client entry. Add one of: ${SSR_CLIENT_ENTRY_RELATIVE_PATHS.join(", ")}.`);
|
|
72
|
+
if (!server) throw new Error(`ssr: Missing server entry. Add one of: ${SSR_SERVER_ENTRY_RELATIVE_PATHS.join(", ")}.`);
|
|
73
73
|
validateServerRenderExport(server);
|
|
74
74
|
return {
|
|
75
75
|
server,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { t as parseDotenvFile } from "./dotenv-BfU6eqFt.mjs";
|
|
3
3
|
import { readdirSync } from "node:fs";
|
|
4
4
|
//#region src/shared/env.ts
|
|
5
5
|
/** Void's single local dotenv file. It is never a production configuration source. */
|
|
@@ -41,12 +41,12 @@ function findLegacyEnvFiles(root) {
|
|
|
41
41
|
* Tri-state override semantics:
|
|
42
42
|
* - `VOID_REMOTE=1` → force remote mode on
|
|
43
43
|
* - `VOID_REMOTE=0` → force remote mode off (e.g. local/CI builds of a
|
|
44
|
-
* project whose `void.
|
|
44
|
+
* project whose `void.config.ts` sets `remote: true`)
|
|
45
45
|
* - unset / any other value → fall back to `config.remote`
|
|
46
46
|
*
|
|
47
|
-
*
|
|
48
|
-
* (plugin-prerender.ts)
|
|
49
|
-
* dev and build stay in lockstep.
|
|
47
|
+
* The dev-server plugin (index.ts), the prerender build plugin
|
|
48
|
+
* (plugin-prerender.ts), and managed deploy (cli/deploy-managed-full.ts) must
|
|
49
|
+
* derive `remoteMode` through this helper so dev and build stay in lockstep.
|
|
50
50
|
*/
|
|
51
51
|
function resolveRemoteMode(configRemote) {
|
|
52
52
|
const override = process.env.VOID_REMOTE;
|
|
@@ -54,6 +54,25 @@ function resolveRemoteMode(configRemote) {
|
|
|
54
54
|
if (override === "0") return false;
|
|
55
55
|
return configRemote === true;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Names starting with this prefix are reserved for Void. Void sets them
|
|
59
|
+
* itself (proxy credentials, email and AI wiring), so `.env` and `env.ts`
|
|
60
|
+
* must not define them: Wrangler loads `.env` into the dev Worker on its own
|
|
61
|
+
* and writes it over `vars`, so dropping keys from `vars` cannot keep them
|
|
62
|
+
* out. `envSchemaPlugin` and `void env check` reject them instead.
|
|
63
|
+
*/
|
|
64
|
+
const RESERVED_ENV_PREFIX = "__VOID_";
|
|
65
|
+
/** Names in `keys` that use the reserved `__VOID_` prefix, in input order. */
|
|
66
|
+
function findReservedEnvKeys(keys) {
|
|
67
|
+
return Array.from(keys).filter((key) => key.startsWith(RESERVED_ENV_PREFIX));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The error for reserved names found in `.env` or `env.ts`. Shared by the
|
|
71
|
+
* Vite plugin and `void env check` so both print the same text.
|
|
72
|
+
*/
|
|
73
|
+
function reservedEnvKeysMessage(source, keys) {
|
|
74
|
+
return `${source} ${source === ".env" ? "defines" : "declares"} names reserved for Void: ${keys.join(", ")}. Void sets these itself; remove them. To trigger crons or queues locally, use the x-void-dev-trigger header printed at dev start.`;
|
|
75
|
+
}
|
|
57
76
|
const INTERNAL_ENV_KEY_SET = /* @__PURE__ */ new Set([
|
|
58
77
|
"__VOID_ACCESS_CREDENTIALS",
|
|
59
78
|
"__VOID_TOKEN",
|
|
@@ -93,4 +112,4 @@ function stripInternalEnvKeys(input) {
|
|
|
93
112
|
};
|
|
94
113
|
}
|
|
95
114
|
//#endregion
|
|
96
|
-
export {
|
|
115
|
+
export { isClientEnvKey as a, resolveRemoteMode as c, findReservedEnvKeys as i, stripInternalEnvKeys as l, LOCAL_ENV_FILE as n, loadLocalEnv as o, findLegacyEnvFiles as r, reservedEnvKeysMessage as s, CLOUDFLARE_DEPLOY_BUILD_ENV as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as getRawRuntimeEnv, i as envContext, n as INTERNAL_BINDING_PREFIXES, o as isIsrActive, r as asEnv, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-
|
|
1
|
+
import { a as getRawRuntimeEnv, i as envContext, n as INTERNAL_BINDING_PREFIXES, o as isIsrActive, r as asEnv, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-jZpP5n47.mjs";
|
|
2
2
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
3
|
//#region src/runtime/env.ts
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as VoidPlatformSandbox } from "./sandbox-
|
|
1
|
+
import { l as VoidPlatformSandbox } from "./sandbox-C5LFoJMf.mjs";
|
|
2
2
|
import { t as StandardSchemaV1 } from "./standard-schema-Fo_vCAZh.mjs";
|
|
3
3
|
//#region src/runtime/env-public.d.ts
|
|
4
4
|
type AnyValidator = StandardSchemaV1<unknown, unknown>;
|
|
@@ -4,8 +4,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
|
|
|
4
4
|
* Raw runtime env resolution — framework-internal only.
|
|
5
5
|
*
|
|
6
6
|
* This module is NOT exported in package.json, so it cannot be imported
|
|
7
|
-
* via "void/..." subpaths. Only framework modules
|
|
8
|
-
* (isr.ts, ai.ts, env.ts) can access it.
|
|
7
|
+
* via "void/..." subpaths. Only framework modules can import it by relative path.
|
|
9
8
|
*/
|
|
10
9
|
/** Prefixes for platform-internal bindings that must be hidden from user code. */
|
|
11
10
|
const INTERNAL_BINDING_PREFIXES = ["__VOID_", "__PROJECT_"];
|
|
@@ -24,7 +24,7 @@ function findEnvFileForPaths(root, paths) {
|
|
|
24
24
|
* - `void/env`'s `ValidatedEnv` so `env.X` is typed
|
|
25
25
|
* - `void/handler`'s `CloudBindings` so `c.env.X` is typed
|
|
26
26
|
*
|
|
27
|
-
* Uses `typeof import(
|
|
27
|
+
* Uses `typeof import(...)` on the env schema file so TypeScript handles the
|
|
28
28
|
* inference — codegen never analyses types itself.
|
|
29
29
|
*
|
|
30
30
|
* @param envFileAbs Absolute path to the user's env schema file.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as computeInvalidEmittedKeys, c as deriveSelfHostSchemaFacts, p as readEmittedWorkerVars, r as SelfHostSchemaError } from "./env-validation-
|
|
1
|
+
import { a as computeInvalidEmittedKeys, c as deriveSelfHostSchemaFacts, p as readEmittedWorkerVars, r as SelfHostSchemaError } from "./env-validation-Dxdx_5wo.mjs";
|
|
2
2
|
export { SelfHostSchemaError, computeInvalidEmittedKeys, deriveSelfHostSchemaFacts, readEmittedWorkerVars };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { a as join, n as dirname, u as resolve } from "./dist-BVqXeR_h.mjs";
|
|
2
2
|
import { i as voidWarn } from "./log-vqY3pqwI.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { a as
|
|
5
|
-
import {
|
|
3
|
+
import { n as scanWranglerDotenvKeys } from "./dotenv-BfU6eqFt.mjs";
|
|
4
|
+
import { a as isClientEnvKey, i as findReservedEnvKeys, n as LOCAL_ENV_FILE, o as loadLocalEnv, r as findLegacyEnvFiles, s as reservedEnvKeysMessage } from "./env-BxocywBB.mjs";
|
|
5
|
+
import { t as findEnvFile } from "./env-types-CwXgeMgL.mjs";
|
|
6
|
+
import { l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-2-TfIEzB.mjs";
|
|
6
7
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
8
|
import { pathToFileURL } from "node:url";
|
|
8
9
|
import { parse } from "jsonc-parser";
|
|
@@ -29,11 +30,7 @@ import { spawn } from "node:child_process";
|
|
|
29
30
|
* that ships in worker bundles.
|
|
30
31
|
*/
|
|
31
32
|
let loadCounter = 0;
|
|
32
|
-
/**
|
|
33
|
-
* Returns the specifier from a Node resolution error if the error looks
|
|
34
|
-
* like one — otherwise `null`. Both `ERR_MODULE_NOT_FOUND` and
|
|
35
|
-
* `ERR_UNSUPPORTED_DIR_IMPORT` have the specifier embedded in the message.
|
|
36
|
-
*/
|
|
33
|
+
/** Returns the failed specifier from a Node module-resolution error, or `null`. */
|
|
37
34
|
function extractFailedSpecifier(err) {
|
|
38
35
|
if (!(err instanceof Error)) return null;
|
|
39
36
|
const code = err.code;
|
|
@@ -132,6 +129,8 @@ function emptyReport() {
|
|
|
132
129
|
async function validateProdEnv(root, options) {
|
|
133
130
|
const legacyFiles = findLegacyEnvFiles(root);
|
|
134
131
|
if (legacyFiles.length > 0) throw new Error(`env: only .env is supported for local development. Remove ${legacyFiles.join(", ")} and follow the env migration guide.`);
|
|
132
|
+
const reservedInDotenv = options.productionOnly ? [] : findReservedEnvKeys(scanWranglerDotenvKeys(join(root, LOCAL_ENV_FILE)));
|
|
133
|
+
if (reservedInDotenv.length > 0) throw new Error(`env: ${reservedEnvKeysMessage(".env", reservedInDotenv)}`);
|
|
135
134
|
const envFile = findEnvFile(root);
|
|
136
135
|
if (!envFile) return {
|
|
137
136
|
hasSchema: false,
|
|
@@ -142,6 +141,8 @@ async function validateProdEnv(root, options) {
|
|
|
142
141
|
hasSchema: false,
|
|
143
142
|
report: emptyReport()
|
|
144
143
|
};
|
|
144
|
+
const reservedInSchema = findReservedEnvKeys(Object.keys(mod._getRegisteredSchema() ?? {}));
|
|
145
|
+
if (reservedInSchema.length > 0) throw new Error(`env: ${reservedEnvKeysMessage("env.ts", reservedInSchema)}`);
|
|
145
146
|
const local = options.productionOnly ? {} : loadLocalEnv(root, { onWarn: (message) => voidWarn(message) });
|
|
146
147
|
const shell = options.productionOnly ? Object.fromEntries(Object.entries(process.env).filter(([key]) => isClientEnvKey(key))) : process.env;
|
|
147
148
|
const merged = {
|
|
@@ -307,8 +308,8 @@ function selfHostSchemaFailureMessage(reason) {
|
|
|
307
308
|
* its message, stack, or cause (and `VOID_ENV_UNMASK` disables redaction). Any
|
|
308
309
|
* throw/reject from `fn` is caught, its original message/stack/cause DROPPED,
|
|
309
310
|
* and a fixed structural {@link SelfHostSchemaError} rethrown in its place. The
|
|
310
|
-
* managed `validateProdEnv` itself is NEVER wrapped — only the self-host
|
|
311
|
-
*
|
|
311
|
+
* managed `validateProdEnv` itself is NEVER wrapped — only the self-host call
|
|
312
|
+
* sites pass through here.
|
|
312
313
|
*/
|
|
313
314
|
async function withSchemaBoundary(reason, fn) {
|
|
314
315
|
try {
|
|
@@ -501,10 +502,9 @@ function invalidEnvReport(missing, invalidKeys) {
|
|
|
501
502
|
}
|
|
502
503
|
/**
|
|
503
504
|
* DISCHARGE half of the self-host gate — PURE parent work over the values-free
|
|
504
|
-
* {@link SelfHostEnvContext}
|
|
505
|
-
*
|
|
506
|
-
*
|
|
507
|
-
* the three fences unchanged:
|
|
505
|
+
* {@link SelfHostEnvContext}, plus at most one `wrangler secret list`. Runs NO
|
|
506
|
+
* project code, NO `loadEnv`, and imports NO env.ts, so the parent never
|
|
507
|
+
* evaluates arbitrary code with live credentials in scope. Applies three fences:
|
|
508
508
|
* - a PRESENT-EMPTY required key fails closed ALWAYS, before any wrangler spawn;
|
|
509
509
|
* - the pinned worker `name` is reconciled against the config's `name`, and the
|
|
510
510
|
* target account against the config's `account_id`, BOTH BEFORE `secret list`
|
|
@@ -686,13 +686,9 @@ function describeVarSource(source) {
|
|
|
686
686
|
* config var precedence over a same-named remote secret (`checkRemoteSecretsOverride`
|
|
687
687
|
* in wrangler-dist/cli.js warns "… will replace these remote secrets with the
|
|
688
688
|
* configuration values"), so shipping this would ship an empty value for a
|
|
689
|
-
* required secret (overwriting a remote one if it exists). The
|
|
690
|
-
* the empty assignment, not `secret put`.
|
|
691
|
-
*
|
|
692
|
-
* The empty value can come from ANY of the four build layers, so the
|
|
693
|
-
* remediation names each key's ACTUAL source (its {@link VarSource} provenance)
|
|
694
|
-
* — a dotenv file / `void.json` `worker.vars` / root `wrangler.jsonc` `vars` —
|
|
695
|
-
* instead of misdirecting the user to `.env` files.
|
|
689
|
+
* required secret (overwriting a remote one if it exists). The remedy is to
|
|
690
|
+
* REMOVE the empty assignment, not `secret put`. The remediation names each
|
|
691
|
+
* key's source (its {@link VarSource} provenance).
|
|
696
692
|
*/
|
|
697
693
|
function emptyAssignmentError(keys, sources) {
|
|
698
694
|
const sorted = [...keys].sort((a, b) => a.localeCompare(b));
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-
|
|
3
|
-
import { c as getToken } from "./auth-
|
|
4
|
-
import {
|
|
5
|
-
import { d as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
3
|
+
import { c as getToken } from "./auth-B5_tZLxT.mjs";
|
|
4
|
+
import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
|
|
5
|
+
import { d as printSuccess, u as note } from "./output-C50ag2r3.mjs";
|
|
6
|
+
import { r as generateEnvTypes, t as findEnvFile } from "./env-types-CwXgeMgL.mjs";
|
|
7
|
+
import { d as formatEnvReport, g as validateProdEnv, u as fetchRemoteSecretNames } from "./env-validation-Dxdx_5wo.mjs";
|
|
8
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
8
9
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
9
10
|
//#region src/cli/env.ts
|
|
10
11
|
async function runEnvCommand(root, args) {
|
|
@@ -24,7 +25,7 @@ async function runCheck(root, useRemoteSecrets) {
|
|
|
24
25
|
const platform = readDeploymentPlatform(root);
|
|
25
26
|
if (platform === "none") throw new Error("env: Deployment is disabled. Run `void init` to choose a platform.");
|
|
26
27
|
if (platform === "cloudflare") {
|
|
27
|
-
const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-
|
|
28
|
+
const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BlYLlowZ.mjs");
|
|
28
29
|
remoteSecrets = await listCloudflareSecrets(resolveCloudflareOperationContext(root));
|
|
29
30
|
} else {
|
|
30
31
|
const token = getToken(root);
|
|
@@ -50,7 +51,7 @@ async function runCheck(root, useRemoteSecrets) {
|
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
53
|
if (report.valid) {
|
|
53
|
-
|
|
54
|
+
printSuccess(useRemoteSecrets ? "All required remote env names are present; values validate at runtime." : "Local .env values are valid.");
|
|
54
55
|
return;
|
|
55
56
|
}
|
|
56
57
|
note(formatEnvReport(report), "Env validation failed");
|
|
@@ -67,7 +68,7 @@ function runTypes(root) {
|
|
|
67
68
|
mkdirSync(outDir, { recursive: true });
|
|
68
69
|
const { dts } = generateEnvTypes(envFile, outDir);
|
|
69
70
|
writeFileSync(join(outDir, "env.d.ts"), dts);
|
|
70
|
-
|
|
71
|
+
printSuccess(`Wrote ${join(".void", "env.d.ts")}.`);
|
|
71
72
|
}
|
|
72
73
|
//#endregion
|
|
73
74
|
export { runEnvCommand };
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
import { RouteMap } from "void/routes";
|
|
2
|
+
//#region src/runtime/fetch-error.d.ts
|
|
3
|
+
type FetchResponse<T = unknown> = Response & {
|
|
4
|
+
_data?: T;
|
|
5
|
+
};
|
|
6
|
+
type FetchError<T = unknown> = Error & {
|
|
7
|
+
request?: RequestInfo;
|
|
8
|
+
options?: RequestInit & Record<string, unknown>;
|
|
9
|
+
response?: FetchResponse<T>;
|
|
10
|
+
data?: T;
|
|
11
|
+
status?: number;
|
|
12
|
+
statusText?: string;
|
|
13
|
+
statusCode?: number;
|
|
14
|
+
statusMessage?: string;
|
|
15
|
+
};
|
|
16
|
+
type FetchErrorConstructor = new <T = unknown>(message: string, opts?: {
|
|
17
|
+
cause: unknown;
|
|
18
|
+
}) => FetchError<T>;
|
|
19
|
+
declare const FetchError: FetchErrorConstructor;
|
|
20
|
+
//#endregion
|
|
2
21
|
//#region src/runtime/fetch.d.ts
|
|
3
22
|
type MethodsOf<P extends keyof RouteMap> = keyof RouteMap[P] & string;
|
|
4
23
|
type DefaultMethod<P extends keyof RouteMap> = "GET" extends MethodsOf<P> ? "GET" : never;
|
|
@@ -54,4 +73,4 @@ type FetchOptions<P extends keyof RouteMap, M extends MethodsOf<P>> = BodyOption
|
|
|
54
73
|
declare function fetch<P extends keyof RouteMap & string>(path: HasRequiredInput<P, DefaultMethod<P>> extends false ? P : never): Promise<OutputOf<P, DefaultMethod<P>>>;
|
|
55
74
|
declare function fetch<P extends keyof RouteMap & string, M extends MethodsOf<P> = DefaultMethod<P>>(path: P, options: FetchOptions<P, M>): Promise<OutputOf<P, M>>;
|
|
56
75
|
//#endregion
|
|
57
|
-
export { fetch as t };
|
|
76
|
+
export { fetch as a, QueryOption as i, MethodsOf as n, FetchError as o, ParamsOption as r, BodyOption as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as ofetch } from "./fetch-error-Dj3crt0e.mjs";
|
|
2
|
-
import { t as interpolateRouteParams } from "./route-url-
|
|
2
|
+
import { t as interpolateRouteParams } from "./route-url-BjGv_KKY.mjs";
|
|
3
3
|
//#region src/runtime/fetch.ts
|
|
4
4
|
async function fetch(path, options) {
|
|
5
5
|
const url = interpolateRouteParams(path, options?.params);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { n as ofetch, t as FetchError } from "./fetch-error-Dj3crt0e.mjs";
|
|
2
|
-
import { t as interpolateRouteParams } from "./route-url-
|
|
2
|
+
import { t as interpolateRouteParams } from "./route-url-BjGv_KKY.mjs";
|
|
3
|
+
import { n as asUsageLimit, r as limitFromResponse } from "./limits-D0vD1M9A.mjs";
|
|
3
4
|
//#region src/runtime/fetch-stream.ts
|
|
4
5
|
/**
|
|
5
6
|
* Consume an SSE endpoint as an async generator of text chunks.
|
|
@@ -30,6 +31,10 @@ async function* fetchStream(path, options) {
|
|
|
30
31
|
signal: options?.signal,
|
|
31
32
|
baseURL: options?.baseURL,
|
|
32
33
|
responseType: "stream"
|
|
34
|
+
}).catch(async (error) => {
|
|
35
|
+
const response = error && typeof error === "object" && "response" in error ? error.response : null;
|
|
36
|
+
if (response instanceof Response) throw await limitFromResponse(response, "ai") ?? error;
|
|
37
|
+
throw error;
|
|
33
38
|
}))._data;
|
|
34
39
|
if (!body) return;
|
|
35
40
|
const reader = body.getReader();
|
|
@@ -39,11 +44,13 @@ async function* fetchStream(path, options) {
|
|
|
39
44
|
const terminal = (data) => {
|
|
40
45
|
if (event !== "void:error" && event !== "void:limit") return;
|
|
41
46
|
let message = "Generation was interrupted.";
|
|
47
|
+
let limit = null;
|
|
42
48
|
try {
|
|
43
49
|
const body = JSON.parse(data);
|
|
50
|
+
if (event === "void:limit") limit = asUsageLimit(body);
|
|
44
51
|
if (typeof body.message === "string") message = body.message;
|
|
45
52
|
} catch {}
|
|
46
|
-
throw new FetchError(message);
|
|
53
|
+
throw limit ?? new FetchError(message);
|
|
47
54
|
};
|
|
48
55
|
try {
|
|
49
56
|
while (true) {
|
|
@@ -67,35 +74,30 @@ async function* fetchStream(path, options) {
|
|
|
67
74
|
const data = trimmed.slice(6);
|
|
68
75
|
terminal(data);
|
|
69
76
|
if (data === "[DONE]") return;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (typeof parsed.response === "string") {
|
|
73
|
-
yield parsed.response;
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
if ("response" in parsed) continue;
|
|
77
|
-
} catch {}
|
|
78
|
-
yield data;
|
|
77
|
+
const chunk = chunkText(data);
|
|
78
|
+
if (chunk !== void 0) yield chunk;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const parsed = JSON.parse(data);
|
|
89
|
-
if (typeof parsed.response === "string") yield parsed.response;
|
|
90
|
-
else if (!("response" in parsed)) yield data;
|
|
91
|
-
} catch {
|
|
92
|
-
yield data;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
82
|
+
const trimmed = buffer.trim();
|
|
83
|
+
if (trimmed.startsWith("data: ")) {
|
|
84
|
+
const data = trimmed.slice(6);
|
|
85
|
+
terminal(data);
|
|
86
|
+
const chunk = data === "[DONE]" ? void 0 : chunkText(data);
|
|
87
|
+
if (chunk !== void 0) yield chunk;
|
|
95
88
|
}
|
|
96
89
|
} finally {
|
|
97
90
|
reader.releaseLock();
|
|
98
91
|
}
|
|
99
92
|
}
|
|
93
|
+
/** Workers AI frames carry text in `response`; other JSON with that key (e.g. usage metadata) is skipped. */
|
|
94
|
+
function chunkText(data) {
|
|
95
|
+
try {
|
|
96
|
+
const parsed = JSON.parse(data);
|
|
97
|
+
if (typeof parsed.response === "string") return parsed.response;
|
|
98
|
+
if ("response" in parsed) return;
|
|
99
|
+
} catch {}
|
|
100
|
+
return data;
|
|
101
|
+
}
|
|
100
102
|
//#endregion
|
|
101
103
|
export { fetchStream as t };
|
|
@@ -1,24 +1,9 @@
|
|
|
1
|
+
import { i as QueryOption, n as MethodsOf, r as ParamsOption, t as BodyOption } from "./fetch-BPCYVi3H.mjs";
|
|
1
2
|
import { RouteMap } from "void/routes";
|
|
2
3
|
//#region src/runtime/fetch-stream.d.ts
|
|
3
|
-
type MethodsOf<P extends keyof RouteMap> = keyof RouteMap[P] & string;
|
|
4
4
|
type InputOf<P extends keyof RouteMap, M extends MethodsOf<P>> = RouteMap[P][M] extends {
|
|
5
5
|
input: infer I;
|
|
6
6
|
} ? I : {};
|
|
7
|
-
type BodyOption<I> = "body" extends keyof I ? {
|
|
8
|
-
body: I["body" & keyof I];
|
|
9
|
-
} : {
|
|
10
|
-
body?: Record<string, unknown> | BodyInit | null;
|
|
11
|
-
};
|
|
12
|
-
type QueryOption<I> = "query" extends keyof I ? {
|
|
13
|
-
query: I["query" & keyof I];
|
|
14
|
-
} : {
|
|
15
|
-
query?: Record<string, string>;
|
|
16
|
-
};
|
|
17
|
-
type ParamsOption<I> = "params" extends keyof I ? {
|
|
18
|
-
params: I["params" & keyof I];
|
|
19
|
-
} : {
|
|
20
|
-
params?: Record<string, string>;
|
|
21
|
-
};
|
|
22
7
|
type StreamOptions<P extends keyof RouteMap, M extends MethodsOf<P>> = BodyOption<InputOf<P, M>> & QueryOption<InputOf<P, M>> & ParamsOption<InputOf<P, M>> & {
|
|
23
8
|
method?: M;
|
|
24
9
|
headers?: HeadersInit;
|