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,9 +1,9 @@
|
|
|
1
|
-
import { r as readProjectConfig } from "./project-
|
|
2
|
-
import { c as getToken, i as getAccountCredential } from "./auth-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { r as
|
|
1
|
+
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
+
import { c as getToken, i as getAccountCredential } from "./auth-B5_tZLxT.mjs";
|
|
3
|
+
import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { d as printSuccess, f as sanitizeTerminalText, s as formatCount, u as note } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { c as parsePlatformErrorBody, l as platformErrorMessage, n as PlatformApiError, r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
6
|
+
import { r as requireProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
|
|
7
7
|
//#region src/cli/project-team.ts
|
|
8
8
|
function clean(value) {
|
|
9
9
|
return (value ?? "—").replace(/[\u0000-\u001f\u007f]/g, " ");
|
|
@@ -33,11 +33,7 @@ function invitationLines(invitations, pending) {
|
|
|
33
33
|
}
|
|
34
34
|
async function resolveProjectId(root, client, projectSlug) {
|
|
35
35
|
const requestedSlug = getRequestedProjectSlug({ projectSlug });
|
|
36
|
-
if (requestedSlug)
|
|
37
|
-
const project = resolveProjectBySlug(await client.listProjects(), requestedSlug);
|
|
38
|
-
if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
|
|
39
|
-
return project.projectId;
|
|
40
|
-
}
|
|
36
|
+
if (requestedSlug) return (await requireProjectBySlug(client, requestedSlug)).projectId;
|
|
41
37
|
const linked = readProjectConfig(root);
|
|
42
38
|
if (!linked) throw new Error("No linked project. Run `void project link` or pass --project <slug>.");
|
|
43
39
|
return linked.projectId;
|
|
@@ -83,12 +79,13 @@ async function runProjectTeamCommand(root, args) {
|
|
|
83
79
|
throw invitationResponseError(error, client.apiUrl);
|
|
84
80
|
}
|
|
85
81
|
if (args.action === "accept") log.info("Open the invited application’s directory and run `void project link` if it is not linked yet. If it is linked to another project, use a separate checkout. Accepting an invitation keeps existing project links.");
|
|
86
|
-
|
|
82
|
+
printSuccess(`Project invitation ${args.action === "accept" ? "accepted" : "declined"}.`);
|
|
87
83
|
return;
|
|
88
84
|
}
|
|
89
85
|
const projectId = await resolveProjectId(root, client, "projectSlug" in args ? args.projectSlug : "");
|
|
90
86
|
if (args.action === "list") {
|
|
91
|
-
const members = await client.listProjectMembers(projectId);
|
|
87
|
+
const { members, warnings } = await client.listProjectMembers(projectId);
|
|
88
|
+
for (const warning of warnings ?? []) log.warn(sanitizeTerminalText(warning));
|
|
92
89
|
note(memberLines(members), "Project Team");
|
|
93
90
|
outro(formatCount(members.length, "member"));
|
|
94
91
|
return;
|
|
@@ -108,26 +105,26 @@ async function runProjectTeamCommand(root, args) {
|
|
|
108
105
|
const delivery = result.delivery.status === "sent" ? "" : ` (email delivery: ${result.delivery.status.replace("_", " ")})`;
|
|
109
106
|
const action = result.refreshed ? "Updated invitation for" : "Invited";
|
|
110
107
|
if (result.delivery.status !== "sent") note(`Invitation: ${clean(result.invitation.id)}\nShare these steps with the invited user:\n\nvoid connect '${client.apiUrl.replaceAll("'", "'\\''")}'\nvoid project team pending\nvoid project team accept ${clean(result.invitation.id)}`, "Invitation saved; email was not sent");
|
|
111
|
-
|
|
108
|
+
printSuccess(`${action} ${clean(invitationEmail(result.invitation))} as ${args.role}${delivery}.`);
|
|
112
109
|
return;
|
|
113
110
|
}
|
|
114
111
|
if (args.action === "role") {
|
|
115
112
|
await client.updateProjectMemberRole(projectId, args.userId, args.role);
|
|
116
|
-
|
|
113
|
+
printSuccess(`Changed ${args.userId} to ${args.role}.`);
|
|
117
114
|
return;
|
|
118
115
|
}
|
|
119
116
|
if (args.action === "remove") {
|
|
120
117
|
await client.removeProjectMember(projectId, args.userId);
|
|
121
|
-
|
|
118
|
+
printSuccess(`Removed ${args.userId} from the project.`);
|
|
122
119
|
return;
|
|
123
120
|
}
|
|
124
121
|
if (args.action === "revoke") {
|
|
125
122
|
await client.revokeProjectInvitation(projectId, args.invitationId);
|
|
126
|
-
|
|
123
|
+
printSuccess(`Revoked invitation ${args.invitationId}.`);
|
|
127
124
|
return;
|
|
128
125
|
}
|
|
129
126
|
await client.leaveProject(projectId);
|
|
130
|
-
|
|
127
|
+
printSuccess("Left the project.");
|
|
131
128
|
}
|
|
132
129
|
//#endregion
|
|
133
130
|
export { runProjectTeamCommand };
|
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
import { r as readProjectConfig } from "./project-
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import { H as outro, L as log } from "./
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { r as
|
|
1
|
+
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
+
import { c as getToken } from "./auth-B5_tZLxT.mjs";
|
|
3
|
+
import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { d as printSuccess, i as dim, m as tablePrefix } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
6
|
+
import { r as requireProjectBySlug } from "./resolve-project-CP8rZs_p.mjs";
|
|
7
7
|
//#region src/cli/project-token.ts
|
|
8
8
|
async function resolveTarget(root, args) {
|
|
9
9
|
const humanToken = getToken(root);
|
|
10
10
|
if (!humanToken) throw new Error("project: Sign in with a human account before managing CI credentials.");
|
|
11
11
|
const client = new PlatformClient(humanToken, { root });
|
|
12
|
-
if (args.projectSlug) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
projectId: resolved.projectId,
|
|
18
|
-
slug: args.projectSlug
|
|
19
|
-
};
|
|
20
|
-
}
|
|
12
|
+
if (args.projectSlug) return {
|
|
13
|
+
client,
|
|
14
|
+
projectId: (await requireProjectBySlug(client, args.projectSlug)).projectId,
|
|
15
|
+
slug: args.projectSlug
|
|
16
|
+
};
|
|
21
17
|
const linked = readProjectConfig(root);
|
|
22
18
|
if (!linked) throw new Error("project: No linked project. Pass --project <name>.");
|
|
23
19
|
return {
|
|
@@ -34,9 +30,10 @@ function printIssued(args, result, apiUrl) {
|
|
|
34
30
|
}));
|
|
35
31
|
return;
|
|
36
32
|
}
|
|
37
|
-
log.
|
|
33
|
+
log.info(`Credential ${result.id} is valid until ${result.expiresAt}.`);
|
|
38
34
|
log.warn("Copy this token now. Void will not display it again.");
|
|
39
35
|
console.log(`\nVOID_TOKEN=${result.token}\nVOID_API_URL=${apiUrl}\n`);
|
|
36
|
+
printSuccess("Project deploy credential created.");
|
|
40
37
|
}
|
|
41
38
|
async function runProjectTokenCommand(root, args) {
|
|
42
39
|
if (!args.json) console.log();
|
|
@@ -52,7 +49,7 @@ async function runProjectTokenCommand(root, args) {
|
|
|
52
49
|
ok: true,
|
|
53
50
|
id: args.credentialId
|
|
54
51
|
}));
|
|
55
|
-
else
|
|
52
|
+
else printSuccess(`Revoked ${args.credentialId}.`);
|
|
56
53
|
} else {
|
|
57
54
|
const rows = await client.listProjectTokens(projectId);
|
|
58
55
|
if (args.json) {
|
|
@@ -23,7 +23,8 @@ function writeFileIfChanged(path, content) {
|
|
|
23
23
|
*
|
|
24
24
|
* @param hasRouteTypes - When true, include routes.d.ts. When omitted,
|
|
25
25
|
* auto-detect by checking for a routes/ directory.
|
|
26
|
-
* @param
|
|
26
|
+
* @param hasDb - When true, include db.d.ts and redirect `void/db` to it.
|
|
27
|
+
* @param hasSchema - When true, configure `@schema` paths for the user's
|
|
27
28
|
* Drizzle schema.
|
|
28
29
|
*/
|
|
29
30
|
function createProjectTsconfig(root, hasRouteTypes, hasDb, hasSchema, options = {}) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r as readProjectConfig } from "./project-
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { r as
|
|
1
|
+
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
+
import { c as getToken } from "./auth-B5_tZLxT.mjs";
|
|
3
|
+
import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { d as printSuccess, f as sanitizeTerminalText, u as note } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
6
|
+
import { r as requireProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
|
|
7
7
|
//#region src/cli/project-zero-trust.ts
|
|
8
8
|
async function resolveTarget(root, args) {
|
|
9
9
|
const token = getToken(root);
|
|
@@ -11,8 +11,7 @@ async function resolveTarget(root, args) {
|
|
|
11
11
|
const client = new PlatformClient(token, { root });
|
|
12
12
|
const requestedSlug = getRequestedProjectSlug({ projectSlug: args.projectSlug });
|
|
13
13
|
if (requestedSlug) {
|
|
14
|
-
const project =
|
|
15
|
-
if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
|
|
14
|
+
const project = await requireProjectBySlug(client, requestedSlug);
|
|
16
15
|
return {
|
|
17
16
|
client,
|
|
18
17
|
projectId: project.projectId,
|
|
@@ -56,7 +55,11 @@ async function runProjectZeroTrustCommand(root, args) {
|
|
|
56
55
|
outro(`${slug} Zero Trust update is still in progress. Run \`void project zero-trust reconcile\` to continue, or wait for scheduled maintenance.`);
|
|
57
56
|
return;
|
|
58
57
|
}
|
|
59
|
-
|
|
58
|
+
if (result.project.last_error || result.project.state === "error") {
|
|
59
|
+
outro(`${slug} Zero Trust needs attention (${result.project.state}).`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
printSuccess(args.action === "protect" ? `${slug} is protected by Zero Trust.` : args.action === "public" ? `${slug} is public.` : `${slug} Zero Trust reconciled (${result.project.state}).`);
|
|
60
63
|
}
|
|
61
64
|
//#endregion
|
|
62
65
|
export { runProjectZeroTrustCommand };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as HeadDescriptor, t as HeadConfig } from "./head-
|
|
2
|
-
import { n as CloudBindings, r as CloudContext } from "./handler-
|
|
1
|
+
import { n as HeadDescriptor, t as HeadConfig } from "./head-C8K_iGe6.mjs";
|
|
2
|
+
import { n as CloudBindings, r as CloudContext } from "./handler-CNAwjRcW.mjs";
|
|
3
3
|
import { a as PageRenderMode, t as DevCssAsset } from "./types-BAp5AEBU.mjs";
|
|
4
4
|
//#region src/pages/protocol.d.ts
|
|
5
5
|
/** Escape characters that are unsafe inside inline <script> tags to prevent XSS. */
|
|
@@ -20,6 +20,8 @@ type PageHandler = ((c: CloudContext) => unknown | Promise<unknown>) | undefined
|
|
|
20
20
|
type PageHeadHandler = ((c: CloudContext, props: Record<string, unknown>) => HeadDescriptor | undefined) | undefined;
|
|
21
21
|
type PageRenderOptions = {
|
|
22
22
|
renderMode?: PageRenderMode;
|
|
23
|
+
/** Dev server build: rejected deferred props keep their raw error message. */
|
|
24
|
+
dev?: boolean;
|
|
23
25
|
};
|
|
24
26
|
type AssetTags = {
|
|
25
27
|
css: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as isConvertedResponse } from "./response-Tn7rU0MV.mjs";
|
|
2
|
-
import { i as
|
|
3
|
-
import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "./head-
|
|
2
|
+
import { i as separateDeferred, n as DEFERRED, t as ValidationError } from "./validation-error-Dg9Recn1.mjs";
|
|
3
|
+
import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "./head-D2VF4ApL.mjs";
|
|
4
4
|
import { t as serializePageData } from "./serialize-BPvnNQuA.mjs";
|
|
5
5
|
//#region src/pages/protocol.ts
|
|
6
6
|
const POWERED_BY = { "X-Powered-By": "Void" };
|
|
@@ -44,30 +44,17 @@ function adjustCspValue(value, nonce) {
|
|
|
44
44
|
sources
|
|
45
45
|
};
|
|
46
46
|
});
|
|
47
|
-
const
|
|
48
|
-
if (styleElem) {
|
|
49
|
-
if (!styleElem.sources.some((source) => hasCompatibleStyleSource(source, nonceSource))) styleElem.sources.push(nonceSource);
|
|
50
|
-
return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
|
|
51
|
-
}
|
|
52
|
-
const style = parsed.find((directive) => directive.name === "style-src");
|
|
47
|
+
const style = parsed.find((directive) => directive.name === "style-src-elem") ?? parsed.find((directive) => directive.name === "style-src");
|
|
53
48
|
if (style) {
|
|
54
49
|
if (!style.sources.some((source) => hasCompatibleStyleSource(source, nonceSource))) style.sources.push(nonceSource);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const defaultSrc = parsed.find((directive) => directive.name === "default-src");
|
|
58
|
-
if (defaultSrc) {
|
|
50
|
+
} else {
|
|
51
|
+
const defaultSrc = parsed.find((directive) => directive.name === "default-src");
|
|
59
52
|
parsed.push({
|
|
60
53
|
name: "style-src",
|
|
61
54
|
originalName: "style-src",
|
|
62
|
-
sources: [...defaultSrc
|
|
55
|
+
sources: [...defaultSrc?.sources ?? [], nonceSource]
|
|
63
56
|
});
|
|
64
|
-
return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
|
|
65
57
|
}
|
|
66
|
-
parsed.push({
|
|
67
|
-
name: "style-src",
|
|
68
|
-
originalName: "style-src",
|
|
69
|
-
sources: [nonceSource]
|
|
70
|
-
});
|
|
71
58
|
return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
|
|
72
59
|
}
|
|
73
60
|
function adjustDevCssCsp(headers, nonce) {
|
|
@@ -116,6 +103,13 @@ function renderClientOnlyPage(pageObj, assetTags, renderFn) {
|
|
|
116
103
|
</body>
|
|
117
104
|
</html>`;
|
|
118
105
|
}
|
|
106
|
+
async function renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags) {
|
|
107
|
+
const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
|
|
108
|
+
return {
|
|
109
|
+
html: renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags),
|
|
110
|
+
assetTags
|
|
111
|
+
};
|
|
112
|
+
}
|
|
119
113
|
function pageJsonResponse(c, pageObj) {
|
|
120
114
|
return Response.json(pageObj, { headers: pageResponseHeaders(c, {
|
|
121
115
|
"X-VoidPages": "true",
|
|
@@ -172,12 +166,24 @@ function renderedResponse(c, result, contentType, assetTags) {
|
|
|
172
166
|
...POWERED_BY
|
|
173
167
|
}), assetTags?.devCssNonce) });
|
|
174
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Message sent to the browser for a rejected deferred prop. HTTPException
|
|
171
|
+
* messages are deliberate and pass through, as in the page error handler.
|
|
172
|
+
* Anything else is logged and, outside dev, replaced with a generic message so
|
|
173
|
+
* internal details (SQL, hostnames, URLs) do not reach the page.
|
|
174
|
+
*/
|
|
175
|
+
function deferredErrorMessage(err, dev) {
|
|
176
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
177
|
+
if (err && typeof err === "object" && "getResponse" in err && typeof err.getResponse === "function") return message;
|
|
178
|
+
console.error(err);
|
|
179
|
+
return dev ? message : "Internal Server Error";
|
|
180
|
+
}
|
|
175
181
|
/** Build a streaming response that sends an initial chunk then streams deferred results. */
|
|
176
|
-
function streamDeferredResponse(initialChunk, deferredMap, c, contentType, formatResolved, formatRejected, assetTags) {
|
|
182
|
+
function streamDeferredResponse(initialChunk, deferredMap, c, contentType, dev, formatResolved, formatRejected, assetTags) {
|
|
177
183
|
const encoder = new TextEncoder();
|
|
178
184
|
const { readable, writable } = new TransformStream();
|
|
179
185
|
const writer = writable.getWriter();
|
|
180
|
-
const pendingChunks = Object.entries(deferredMap).map(([group, { resolver }]) => resolver(c).then((data) => formatResolved(group, data)).catch((err) => formatRejected(group, err
|
|
186
|
+
const pendingChunks = Object.entries(deferredMap).map(([group, { resolver }]) => resolver(c).then((data) => formatResolved(group, data)).catch((err) => formatRejected(group, deferredErrorMessage(err, dev))));
|
|
181
187
|
(async () => {
|
|
182
188
|
await writeRenderResult(writer, encoder, initialChunk);
|
|
183
189
|
await Promise.all(pendingChunks.map(async (chunk) => writer.write(encoder.encode(await chunk))));
|
|
@@ -185,10 +191,7 @@ function streamDeferredResponse(initialChunk, deferredMap, c, contentType, forma
|
|
|
185
191
|
})().catch((error) => {
|
|
186
192
|
writer.abort(error).catch(() => {});
|
|
187
193
|
});
|
|
188
|
-
return
|
|
189
|
-
"content-type": contentType,
|
|
190
|
-
...POWERED_BY
|
|
191
|
-
}), assetTags?.devCssNonce) });
|
|
194
|
+
return renderedResponse(c, readable, contentType, assetTags);
|
|
192
195
|
}
|
|
193
196
|
/** Handle GET page request — run handler, return page object or SSR HTML */
|
|
194
197
|
async function handlePageGet(handler, headFn, c, componentId, renderFn, getAssetTags, configHead, options) {
|
|
@@ -209,7 +212,7 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
|
|
|
209
212
|
const { immediateProps, deferredMap } = separateDeferred(props);
|
|
210
213
|
const hasDeferred = Object.keys(deferredMap).length > 0;
|
|
211
214
|
const deferredKeys = {};
|
|
212
|
-
|
|
215
|
+
for (const [group, { keys }] of Object.entries(deferredMap)) for (const key of keys) deferredKeys[key] = group;
|
|
213
216
|
const pageObj = {
|
|
214
217
|
component: componentId,
|
|
215
218
|
props: immediateProps,
|
|
@@ -249,7 +252,7 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
|
|
|
249
252
|
const headers = new Headers(c.res.headers);
|
|
250
253
|
appendVary(headers, "X-VoidPages");
|
|
251
254
|
c.header("Vary", headers.get("Vary"));
|
|
252
|
-
return streamDeferredResponse(JSON.stringify(pageObj) + "\n", deferredMap, c, "application/x-ndjson", (group, data) => JSON.stringify({
|
|
255
|
+
return streamDeferredResponse(JSON.stringify(pageObj) + "\n", deferredMap, c, "application/x-ndjson", options?.dev === true, (group, data) => JSON.stringify({
|
|
253
256
|
__deferred: group,
|
|
254
257
|
data
|
|
255
258
|
}) + "\n", (group, error) => JSON.stringify({
|
|
@@ -257,10 +260,9 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
|
|
|
257
260
|
error
|
|
258
261
|
}) + "\n");
|
|
259
262
|
}
|
|
260
|
-
const assetTags =
|
|
261
|
-
const html = renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags);
|
|
263
|
+
const { html, assetTags } = await renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags);
|
|
262
264
|
if (!hasDeferred) return renderedResponse(c, html, "text/html; charset=utf-8", assetTags);
|
|
263
|
-
return streamDeferredResponse(html, deferredMap, c, "text/html; charset=utf-8", (group, data) => `\n<script>window.__resolveDeferred?window.__resolveDeferred(${safeJsonStringify(group)},${safeJsonStringify(data)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},${safeJsonStringify(data)}])<\/script>`, (group, error) => `\n<script>window.__rejectDeferred?window.__rejectDeferred(${safeJsonStringify(group)},${safeJsonStringify(error)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},0,${safeJsonStringify(error)}])<\/script>`, assetTags);
|
|
265
|
+
return streamDeferredResponse(html, deferredMap, c, "text/html; charset=utf-8", options?.dev === true, (group, data) => `\n<script>window.__resolveDeferred?window.__resolveDeferred(${safeJsonStringify(group)},${safeJsonStringify(data)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},${safeJsonStringify(data)}])<\/script>`, (group, error) => `\n<script>window.__rejectDeferred?window.__rejectDeferred(${safeJsonStringify(group)},${safeJsonStringify(error)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},0,${safeJsonStringify(error)}])<\/script>`, assetTags);
|
|
264
266
|
}
|
|
265
267
|
function isSameOriginAction(request) {
|
|
266
268
|
const origin = new URL(request.url).origin;
|
|
@@ -295,37 +297,32 @@ async function handlePageMutation(mutationHandler, getHandler, headFn, c, compon
|
|
|
295
297
|
...head && { head }
|
|
296
298
|
};
|
|
297
299
|
}
|
|
300
|
+
/** Re-run the GET loader and respond with the page, optionally carrying validation errors. */
|
|
301
|
+
async function respondWithPage(errors) {
|
|
302
|
+
const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), errors);
|
|
303
|
+
if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
|
|
304
|
+
const { html, assetTags } = await renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags);
|
|
305
|
+
return renderedResponse(c, html, "text/html; charset=utf-8", assetTags);
|
|
306
|
+
}
|
|
307
|
+
function respondWithErrors(errors) {
|
|
308
|
+
if (renderMode === "island") return Promise.resolve(Response.json({ errors }, { status: 422 }));
|
|
309
|
+
return respondWithPage(errors);
|
|
310
|
+
}
|
|
298
311
|
let result;
|
|
299
312
|
try {
|
|
300
313
|
result = mutationHandler ? await mutationHandler(c) : void 0;
|
|
301
314
|
} catch (e) {
|
|
302
|
-
if (e instanceof ValidationError)
|
|
303
|
-
if (renderMode === "island") return Response.json({ errors: e.errors }, { status: 422 });
|
|
304
|
-
const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), e.errors);
|
|
305
|
-
if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
|
|
306
|
-
const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
|
|
307
|
-
return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
|
|
308
|
-
}
|
|
315
|
+
if (e instanceof ValidationError) return respondWithErrors(e.errors);
|
|
309
316
|
throw e;
|
|
310
317
|
}
|
|
311
318
|
if (result instanceof Response) {
|
|
312
319
|
const status = result.status;
|
|
313
320
|
if (status >= 300 && status < 400) return result;
|
|
314
|
-
if (status === 400)
|
|
315
|
-
const errors = flattenValidationErrors(await result.json());
|
|
316
|
-
if (renderMode === "island") return Response.json({ errors }, { status: 422 });
|
|
317
|
-
const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), errors);
|
|
318
|
-
if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
|
|
319
|
-
const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
|
|
320
|
-
return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
|
|
321
|
-
}
|
|
321
|
+
if (status === 400) return respondWithErrors(flattenValidationErrors(await result.json()));
|
|
322
322
|
if (status !== 204) return result;
|
|
323
323
|
}
|
|
324
324
|
if (renderMode === "island") return Response.json({ success: true });
|
|
325
|
-
|
|
326
|
-
if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
|
|
327
|
-
const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
|
|
328
|
-
return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
|
|
325
|
+
return respondWithPage(null);
|
|
329
326
|
}
|
|
330
327
|
//#endregion
|
|
331
328
|
export { safeJsonStringify as i, handlePageGet as n, handlePageMutation as r, flattenValidationErrors as t };
|
|
@@ -47,21 +47,10 @@ function isVoidAuthProvider(value) {
|
|
|
47
47
|
}
|
|
48
48
|
function getVoidAuthProviderEnvNames(provider) {
|
|
49
49
|
const normalized = provider.toUpperCase().replaceAll("-", "_");
|
|
50
|
-
|
|
50
|
+
return {
|
|
51
51
|
clientId: `AUTH_${normalized}_CLIENT_ID`,
|
|
52
52
|
clientSecret: `AUTH_${normalized}_CLIENT_SECRET`
|
|
53
53
|
};
|
|
54
|
-
if (provider === "github") return {
|
|
55
|
-
...envNames,
|
|
56
|
-
legacyClientId: "GITHUB_OAUTH_ID",
|
|
57
|
-
legacyClientSecret: "GITHUB_OAUTH_SECRET"
|
|
58
|
-
};
|
|
59
|
-
if (provider === "google") return {
|
|
60
|
-
...envNames,
|
|
61
|
-
legacyClientId: "GOOGLE_OAUTH_ID",
|
|
62
|
-
legacyClientSecret: "GOOGLE_OAUTH_SECRET"
|
|
63
|
-
};
|
|
64
|
-
return envNames;
|
|
65
54
|
}
|
|
66
55
|
//#endregion
|
|
67
56
|
export { isVoidSocialAuthProvider as a, isVoidAuthProvider as i, VOID_EMAIL_AUTH_PROVIDER as n, getVoidAuthProviderEnvNames as r, VOID_AUTH_PROVIDERS as t };
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { a as join, n as dirname, o as normalize, t as basename, u as resolve$2 } from "./dist-BVqXeR_h.mjs";
|
|
2
2
|
import { i as voidWarn, r as voidLog } from "./log-vqY3pqwI.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { r as
|
|
6
|
-
import { c as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-B-wekeR6.mjs";
|
|
3
|
+
import { _ as persistMaterializedWranglerConfig, j as writeProvisionedWranglerConfig, s as assertNoDuplicateMembers, y as readProvisionedBindingEntry } from "./wrangler-D9KTuqnv.mjs";
|
|
4
|
+
import { n as scanWranglerDotenvKeys } from "./dotenv-BfU6eqFt.mjs";
|
|
5
|
+
import { l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-2-TfIEzB.mjs";
|
|
7
6
|
import { createRequire } from "node:module";
|
|
8
7
|
import { closeSync, existsSync, fsyncSync, lstatSync, openSync, readFileSync, readlinkSync, realpathSync, renameSync, unlinkSync, writeSync } from "node:fs";
|
|
9
8
|
import { isRecord } from "@void/deploy-core";
|
|
@@ -282,21 +281,6 @@ function assertNoTransportRedirectInProjectDotenv(root, platform = process.platf
|
|
|
282
281
|
}
|
|
283
282
|
}
|
|
284
283
|
/**
|
|
285
|
-
* Child-process env with every CF Access credential scrubbed. Mirrors `buildEnv`
|
|
286
|
-
* in `deploy.ts`: Access credentials are needed only by this CLI's own guarded
|
|
287
|
-
* HTTP requests and must never leak into the spawned wrangler process (which may
|
|
288
|
-
* in turn run user hooks). This includes the short-lived cloudflared
|
|
289
|
-
* `CF_ACCESS_TOKEN` JWT used by local readiness probes.
|
|
290
|
-
*
|
|
291
|
-
* Pins ONE transport context: scrubs every {@link TRANSPORT_REDIRECT_ENV_VARS}
|
|
292
|
-
* from the child env, then re-sets `CLOUDFLARE_API_BASE_URL` to the SINGLE resolved
|
|
293
|
-
* `apiBaseUrl` so the spawned wrangler and the Hyperdrive REST lister hit the exact same
|
|
294
|
-
* endpoint. Scrubbing the compliance/staging/env selectors makes the explicit base
|
|
295
|
-
* authoritative (they can no longer re-derive a different base). Combined with
|
|
296
|
-
* {@link assertNoTransportRedirectInProjectDotenv} (which blocks a project dotenv from
|
|
297
|
-
* repopulating any of them via wrangler's per-command reload), the pin cannot be moved.
|
|
298
|
-
*/
|
|
299
|
-
/**
|
|
300
284
|
* Delete `name` from `env` IN PLACE, honoring the platform's env-key case rule.
|
|
301
285
|
* Windows environment keys are CASE-INSENSITIVE: a spawned child's `process.env`
|
|
302
286
|
* resolves `WRANGLER_OUTPUT_FILE_PATH` from an ambient `Wrangler_Output_File_Path`
|
|
@@ -314,6 +298,21 @@ function deleteEnvVarCaseAware(env, name, platform = process.platform) {
|
|
|
314
298
|
const lower = name.toLowerCase();
|
|
315
299
|
for (const key of Object.keys(env)) if (key.toLowerCase() === lower) delete env[key];
|
|
316
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Child-process env with every CF Access credential scrubbed. Mirrors `buildEnv`
|
|
303
|
+
* in `deploy.ts`: Access credentials are needed only by this CLI's own guarded
|
|
304
|
+
* HTTP requests and must never leak into the spawned wrangler process (which may
|
|
305
|
+
* in turn run user hooks). This includes the short-lived cloudflared
|
|
306
|
+
* `CF_ACCESS_TOKEN` JWT used by local readiness probes.
|
|
307
|
+
*
|
|
308
|
+
* Pins ONE transport context: scrubs every {@link TRANSPORT_REDIRECT_ENV_VARS}
|
|
309
|
+
* from the child env, then re-sets `CLOUDFLARE_API_BASE_URL` to the SINGLE resolved
|
|
310
|
+
* `apiBaseUrl` so the spawned wrangler and the Hyperdrive REST lister hit the exact same
|
|
311
|
+
* endpoint. Scrubbing the compliance/staging/env selectors makes the explicit base
|
|
312
|
+
* authoritative (they can no longer re-derive a different base). Combined with
|
|
313
|
+
* {@link assertNoTransportRedirectInProjectDotenv} (which blocks a project dotenv from
|
|
314
|
+
* repopulating any of them via wrangler's per-command reload), the pin cannot be moved.
|
|
315
|
+
*/
|
|
317
316
|
function provisionEnv(ctx) {
|
|
318
317
|
const env = { ...process.env };
|
|
319
318
|
const platform = ctx?.platform ?? process.platform;
|
|
@@ -332,6 +331,17 @@ function provisionEnv(ctx) {
|
|
|
332
331
|
scrub("CLOUDFLARE_ACCOUNT_ID");
|
|
333
332
|
env.CLOUDFLARE_ACCOUNT_ID = ctx.accountId;
|
|
334
333
|
}
|
|
334
|
+
if (ctx?.apiToken) {
|
|
335
|
+
for (const name of [
|
|
336
|
+
"CLOUDFLARE_API_TOKEN",
|
|
337
|
+
"CF_API_TOKEN",
|
|
338
|
+
"CLOUDFLARE_API_KEY",
|
|
339
|
+
"CF_API_KEY",
|
|
340
|
+
"CLOUDFLARE_EMAIL",
|
|
341
|
+
"CF_EMAIL"
|
|
342
|
+
]) scrub(name);
|
|
343
|
+
env.CLOUDFLARE_API_TOKEN = ctx.apiToken;
|
|
344
|
+
}
|
|
335
345
|
return env;
|
|
336
346
|
}
|
|
337
347
|
/**
|
|
@@ -574,7 +584,7 @@ function armRetentionWatchdog(lock, info) {
|
|
|
574
584
|
try {
|
|
575
585
|
process.kill(process.platform === "win32" ? info.pid : -info.pid, 0);
|
|
576
586
|
} catch (error) {
|
|
577
|
-
dead = error
|
|
587
|
+
dead = isAlreadyGoneKillError(error);
|
|
578
588
|
}
|
|
579
589
|
if (dead) {
|
|
580
590
|
lock.release().then(() => resolveWatchdog(), (error) => {
|
|
@@ -636,7 +646,8 @@ function createDefaultRunWrangler(root, options) {
|
|
|
636
646
|
env: {
|
|
637
647
|
...provisionEnv({
|
|
638
648
|
accountId: opts.accountId,
|
|
639
|
-
apiBaseUrl: opts.apiBaseUrl
|
|
649
|
+
apiBaseUrl: opts.apiBaseUrl,
|
|
650
|
+
apiToken: opts.apiToken
|
|
640
651
|
}),
|
|
641
652
|
...opts.suppressLogs ? { WRANGLER_WRITE_LOGS: "false" } : {}
|
|
642
653
|
},
|
|
@@ -700,14 +711,14 @@ function createDefaultRunWrangler(root, options) {
|
|
|
700
711
|
try {
|
|
701
712
|
process.kill(child.pid, 0);
|
|
702
713
|
} catch (error) {
|
|
703
|
-
|
|
714
|
+
groupGone = isAlreadyGoneKillError(error);
|
|
704
715
|
}
|
|
705
716
|
return groupGone;
|
|
706
717
|
}
|
|
707
718
|
try {
|
|
708
719
|
process.kill(-child.pid, 0);
|
|
709
720
|
} catch (error) {
|
|
710
|
-
|
|
721
|
+
groupGone = isAlreadyGoneKillError(error);
|
|
711
722
|
}
|
|
712
723
|
return groupGone;
|
|
713
724
|
};
|
|
@@ -1134,7 +1145,7 @@ function assertQuarantineClearedOrClear(lockTarget, onBeforeClear) {
|
|
|
1134
1145
|
if (probeTarget !== void 0) try {
|
|
1135
1146
|
process.kill(probeTarget, 0);
|
|
1136
1147
|
} catch (error) {
|
|
1137
|
-
|
|
1148
|
+
confirmedDead = isAlreadyGoneKillError(error);
|
|
1138
1149
|
}
|
|
1139
1150
|
if (!confirmedDead) {
|
|
1140
1151
|
const who = pid !== void 0 || pgid !== void 0 ? `process group ${String(pgid ?? pid)}` : "an unrecorded process";
|
|
@@ -1436,7 +1447,7 @@ function parseJsonObject(value) {
|
|
|
1436
1447
|
* config, delegating to the STRICT canonical reader in `wrangler.ts`
|
|
1437
1448
|
* ({@link readProvisionedBindingEntry}). Unlike the old loose first-match `.find()`, this
|
|
1438
1449
|
* validates the target field's outer shape, fails closed on a DUPLICATE binding, and runs
|
|
1439
|
-
* the worker-wide CROSS-TYPE collision check
|
|
1450
|
+
* the worker-wide CROSS-TYPE collision check — so a
|
|
1440
1451
|
* duplicate/collision config can never be reported `reused` or pass a create postcondition.
|
|
1441
1452
|
*/
|
|
1442
1453
|
function readBindingEntry(configPath, field, binding) {
|
|
@@ -1444,8 +1455,8 @@ function readBindingEntry(configPath, field, binding) {
|
|
|
1444
1455
|
}
|
|
1445
1456
|
/**
|
|
1446
1457
|
* Read + parse the root wrangler config (fresh each call — wrangler mutates it).
|
|
1447
|
-
* BOM-aware (wrangler +
|
|
1448
|
-
* we must too, else a BOM-prefixed config would look unparseable). FAILS CLOSED
|
|
1458
|
+
* BOM-aware (wrangler + `writeProvisionedWranglerConfig` strip a leading BOM before
|
|
1459
|
+
* parsing, so we must too, else a BOM-prefixed config would look unparseable). FAILS CLOSED
|
|
1449
1460
|
* on a genuine parse error or a non-object root: never silently treat a real
|
|
1450
1461
|
* config as `{}`, which would miss existing ids (re-provision/orphan) and mask a
|
|
1451
1462
|
* corrupt file. A missing file is fine (nothing to read-first → `{}`).
|
|
@@ -1474,7 +1485,7 @@ function assertDiscoverySucceeded(result, label) {
|
|
|
1474
1485
|
/**
|
|
1475
1486
|
* STRICT list validator shared by KV + D1. Rejects the ENTIRE list (throws) if ANY
|
|
1476
1487
|
* member is not a well-formed object carrying a non-empty name AND a
|
|
1477
|
-
* FORMAT-VALID id (per {@link ResourceListSpec.
|
|
1488
|
+
* FORMAT-VALID id (per {@link ResourceListSpec.hasValidId}). A member is NEVER
|
|
1478
1489
|
* silently filtered, and a member with a malformed id is NEVER accepted, because
|
|
1479
1490
|
* either could BE the requested target (or signal a corrupt list) and treating it as
|
|
1480
1491
|
* "absent" would mint a duplicate. Validates EVERY member up front — BEFORE any
|
|
@@ -1565,20 +1576,20 @@ function isAlreadyExistsError(result) {
|
|
|
1565
1576
|
return result.errorCode === 7502;
|
|
1566
1577
|
}
|
|
1567
1578
|
/**
|
|
1568
|
-
*
|
|
1569
|
-
*
|
|
1570
|
-
*
|
|
1571
|
-
*
|
|
1579
|
+
* Not-found classifier shared by R2 + queues. Given an `<res> info`-by-name probe,
|
|
1580
|
+
* returns `true` (confirmed absent → safe to create) ONLY on a clean non-zero exit
|
|
1581
|
+
* with the provider's typed not-found result (R2 error code 10006; the queue
|
|
1582
|
+
* operation's `not-found` failure). Everything else returns `false` so the caller
|
|
1572
1583
|
* fails closed — a signal/spawn failure, an auth/network/metrics error, or a
|
|
1573
1584
|
* GENERIC "not found" (e.g. `Account not found`) is NEVER treated as absence,
|
|
1574
1585
|
* which would mint a duplicate resource.
|
|
1575
1586
|
*/
|
|
1576
|
-
function isConfirmedAbsent(result, kind
|
|
1587
|
+
function isConfirmedAbsent(result, kind) {
|
|
1577
1588
|
return isCleanFailure(result) && (kind === "r2" ? result.errorCode === 10006 : result.failure === "not-found");
|
|
1578
1589
|
}
|
|
1579
1590
|
/** Only a completed, typed not-found response confirms queue absence. */
|
|
1580
|
-
function isQueueConfirmedAbsent(result,
|
|
1581
|
-
return isConfirmedAbsent(result, "queue"
|
|
1591
|
+
function isQueueConfirmedAbsent(result, _name) {
|
|
1592
|
+
return isConfirmedAbsent(result, "queue");
|
|
1582
1593
|
}
|
|
1583
1594
|
/** Reuse and post-create verification require clean success and the exact returned name. */
|
|
1584
1595
|
function queueInfoConfirmsExists(result, name) {
|
|
@@ -1999,8 +2010,8 @@ function redactRejection(error, redactText) {
|
|
|
1999
2010
|
* `wrangler <res> create --update-config` write real ids into the root config.
|
|
2000
2011
|
* For resources that already exist (adopt path) — where `create` cannot run —
|
|
2001
2012
|
* the real id is captured from `wrangler <res> list/info` (or, for Hyperdrive,
|
|
2002
|
-
* the account-list existence seam) and written through
|
|
2003
|
-
* fields. Pure provisioning: NO build, deploy, or drift-check. Idempotent +
|
|
2013
|
+
* the account-list existence seam) and written through `writeProvisionedWranglerConfig`'s
|
|
2014
|
+
* adopt fields. Pure provisioning: NO build, deploy, or drift-check. Idempotent +
|
|
2004
2015
|
* read-first: a binding already pointing at a real id is left untouched.
|
|
2005
2016
|
*/
|
|
2006
2017
|
async function provisionCloudflareResources(root, rootWranglerPath, desired, opts) {
|
|
@@ -2305,7 +2316,7 @@ async function reconcileR2(desired, configPath, runWrangler, write, persistCreat
|
|
|
2305
2316
|
name: bucketName,
|
|
2306
2317
|
action: "adopted"
|
|
2307
2318
|
});
|
|
2308
|
-
} else if (isConfirmedAbsent(info, "r2"
|
|
2319
|
+
} else if (isConfirmedAbsent(info, "r2")) {
|
|
2309
2320
|
const created = await runWrangler({
|
|
2310
2321
|
type: "r2.bucket.create",
|
|
2311
2322
|
name: bucketName,
|
|
@@ -2436,7 +2447,7 @@ async function reconcileQueues(desired, configPath, runWrangler, resources) {
|
|
|
2436
2447
|
});
|
|
2437
2448
|
continue;
|
|
2438
2449
|
}
|
|
2439
|
-
if (!isConfirmedAbsent(info, "queue"
|
|
2450
|
+
if (!isConfirmedAbsent(info, "queue")) throw new Error(`provision: "wrangler queues info ${name}" failed or did not confirm the queue exists: ${info.stderr || info.stdout || "no output"}`);
|
|
2440
2451
|
const created = await runWrangler({
|
|
2441
2452
|
type: "queues.create",
|
|
2442
2453
|
name,
|
|
@@ -2484,9 +2495,7 @@ async function provisionCloudflareResourcesLocked(root, configPath, desired, opt
|
|
|
2484
2495
|
const log = opts?.log ?? defaultLogger;
|
|
2485
2496
|
const resources = [];
|
|
2486
2497
|
const write = (patch) => writeProvisionedWranglerConfig(root, patch, { configPath });
|
|
2487
|
-
const persistCreatedConfig = () =>
|
|
2488
|
-
if (basename(configPath) === ".void-wrangler.jsonc") persistCloudflareConfig(dirname(configPath));
|
|
2489
|
-
};
|
|
2498
|
+
const persistCreatedConfig = () => persistMaterializedWranglerConfig(configPath);
|
|
2490
2499
|
const hasRemoteWork = !!desired.d1 || desired.kvNamespaces.length > 0 || !!desired.r2 || !!desired.hyperdrive || desired.queues.length > 0;
|
|
2491
2500
|
if (hasRemoteWork && !effectiveAccountId) throw new Error("provision: no Cloudflare account is resolvable — set \"account_id\" in your root wrangler config or export CLOUDFLARE_ACCOUNT_ID before deploying. Refusing to provision resources without a pinned account (wrangler would otherwise fall back to an ambient/interactive account that is never persisted, so a later retry could rebind them elsewhere).");
|
|
2492
2501
|
if (hasRemoteWork) assertNoTransportRedirectInProjectDotenv(root);
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { r as
|
|
2
|
-
|
|
3
|
-
export { WranglerQuarantineError, acquireProvisionLock, assertNoTransportRedirectInProjectDotenv, assertValidResourceName, checkCloudflareProvisionDrift, createDefaultRunWrangler, deleteEnvVarCaseAware, enableD1ReadReplicationViaApi, isAlreadyGoneKillError, isQuarantineError, isQueueConfirmedAbsent, isRealD1Id, isRealKvId, normalizeRunWranglerResult, provisionCloudflareResources, provisionEnv, resolvePinnedApiBaseUrl, resolveProperLockfileKey, scanWranglerDotenvKeys };
|
|
1
|
+
import { _ as resolvePinnedApiBaseUrl, a as checkCloudflareProvisionDrift, c as enableD1ReadReplicationViaApi, d as isQueueConfirmedAbsent, f as isRealD1Id, g as provisionEnv, h as provisionCloudflareResources, i as assertValidResourceName, l as isAlreadyGoneKillError, m as normalizeRunWranglerResult, n as acquireProvisionLock, o as createDefaultRunWrangler, p as isRealKvId, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware, t as WranglerQuarantineError, u as isQuarantineError, v as resolveProperLockfileKey } from "./provision-BfaLiWbj.mjs";
|
|
2
|
+
export { WranglerQuarantineError, acquireProvisionLock, assertNoTransportRedirectInProjectDotenv, assertValidResourceName, checkCloudflareProvisionDrift, createDefaultRunWrangler, deleteEnvVarCaseAware, enableD1ReadReplicationViaApi, isAlreadyGoneKillError, isQuarantineError, isQueueConfirmedAbsent, isRealD1Id, isRealKvId, normalizeRunWranglerResult, provisionCloudflareResources, provisionEnv, resolvePinnedApiBaseUrl, resolveProperLockfileKey };
|