void 0.26.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-CDry3B5V.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
- package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
- package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
- package/dist/{auth-D52yG7hl.mjs → auth-B5_tZLxT.mjs} +7 -7
- package/dist/{auth-B60QDbjg.mjs → auth-BgX2qYSY.mjs} +1 -1
- package/dist/{auth-link-DjeOptYi.mjs → auth-link-D5RmKnzh.mjs} +5 -5
- package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
- package/dist/{auth-router-BRxIuqDi.mjs → auth-router-Bap-pvbn.mjs} +4 -17
- 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-Ce3C8huo.mjs → build-cmd-B58c8iS8.mjs} +7 -6
- package/dist/{cache-CS8Yxr5a.mjs → cache-Bo52trKF.mjs} +7 -7
- package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-BZNz3Q26.mjs} +5 -4
- package/dist/{cf-access-YTlqvAsk.mjs → cf-access-ngGqZpHZ.mjs} +10 -11
- 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.mjs +5 -6
- package/dist/client-By4JjMw_.mjs +2 -0
- package/dist/{client-mC-dFGDD.mjs → client-C2Prx_Bi.mjs} +28 -6
- 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-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
- package/dist/{cloudflare-operations-DYa3coIk.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-H6EvP62X.mjs → connect-X0MUA1gk.mjs} +10 -9
- package/dist/{create-project-B2kk9Q0o.mjs → create-project-DxiyW6iX.mjs} +6 -6
- package/dist/{create-project-Dbb4uiN-.mjs → create-project-iwkbqiBU.mjs} +1 -1
- package/dist/{db-DpCKZto0.mjs → db-XnVMHzoV.mjs} +100 -132
- package/dist/{delete-CxlSvsvW.mjs → delete-esYlMiSJ.mjs} +6 -6
- package/dist/{deploy-CeEbnv4b.mjs → deploy-BsEvnlJl.mjs} +2346 -2495
- 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-B_9VgOm6.mjs → domain-CbbBWhWE.mjs} +28 -29
- package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
- package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
- package/dist/{email-BokHgjKj.mjs → email-CpuT42g7.mjs} +23 -18
- 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-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-BdTc-K2L.mjs → env-w9jOyGZn.mjs} +9 -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-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
- package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
- package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
- package/dist/gen-dA9hW7AV.mjs +2 -0
- package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-D_FsOFxq.mjs} +64 -163
- package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
- package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
- 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-Bv44e2tm.mjs → help-CVFBTmBx.mjs} +13 -32
- 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 +617 -530
- package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
- package/dist/{init-BMf4T03q.mjs → init-Bw-fRKGp.mjs} +160 -197
- package/dist/{link-BqYsSS_I.mjs → link-DlPG8iX3.mjs} +9 -9
- package/dist/{list-_kBToO-l.mjs → list-2GN7_ueV.mjs} +8 -7
- package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
- package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
- package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
- package/dist/{login-DFuo-RWO.mjs → login-D-Q4xw3Q.mjs} +7 -7
- package/dist/login-Dc-wuTDq.mjs +2 -0
- package/dist/{logs-DYgnh6dH.mjs → logs-rd8J-OFh.mjs} +27 -10
- 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-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
- package/dist/{operator-args-DdY54Bgb.mjs → operator-args-BNsW5gfp.mjs} +10 -1
- package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-AzVLbrr3.mjs} +1 -1
- package/dist/{operator-client-BFqpp6z0.mjs → operator-client-BQtzyG-g.mjs} +1 -1
- package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-B6f6Cg9Z.mjs} +24 -11
- package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
- package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -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-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
- package/dist/plan-CH2G51je.mjs +2 -0
- package/dist/{platform-args-DSV2p4nY.mjs → platform-args-BoZkWQnJ.mjs} +1 -1
- package/dist/platform-args-DYgITk0D.mjs +2 -0
- package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-n603OANg.mjs} +40 -36
- package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-zxDr0hWW.mjs} +8 -7
- package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-tw9lgtgE.mjs} +7 -6
- package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-B8-bCb7t.mjs} +10 -10
- package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-C00YM14r.mjs} +1 -1
- package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-p0kobLV8.mjs} +5 -5
- package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-D_QEY32D.mjs} +75 -386
- package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
- package/dist/{platform-management-BrF9STZp.mjs → platform-management-BdYblvvE.mjs} +6 -6
- package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-oi-SvI3f.mjs} +1 -1
- package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
- package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-PvNS9Nl2.mjs} +2 -2
- 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-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
- package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
- package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-ti8_yTcA.mjs} +18 -18
- package/dist/{project-team-Yiww3-go.mjs → project-team-CDPE1Tsg.mjs} +14 -17
- package/dist/{project-token-BrtT2NkY.mjs → project-token-CkZ1cN0Z.mjs} +13 -16
- package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
- package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-DdjLR61k.mjs} +11 -8
- package/dist/{protocol-BX8t2jiw.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-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
- package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
- package/dist/{requests-TIz_jtSu.mjs → requests-DFAqyYy8.mjs} +4 -4
- package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
- package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
- package/dist/{rollback-dBqICPzj.mjs → rollback-BKYXBduI.mjs} +29 -36
- 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--2KF6Kua.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 +1 -1
- package/dist/runtime/ai.mjs +34 -95
- 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.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/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 +4 -81
- 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.mjs +2 -2
- 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/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
- package/dist/{secret-AKnNXNP5.mjs → secret-BAt2KMmO.mjs} +14 -14
- package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
- package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
- package/dist/{subcommand-prompt-B6WS9Aoz.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-ymhap6M_.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-C79j4aED.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 +5 -3
- 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/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 +10 -5
- package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
- 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/domains.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -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 +2 -2
- 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/cli/auth.md +0 -5
- 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 +1 -1
- package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
- package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
- 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/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 +1 -1
- package/{skills/void/docs → docs}/reference/config.md +13 -13
- package/{skills/void/docs → docs}/reference/resource-inference.md +1 -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 +6 -3
- package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
- package/dist/client-BxVixJBI.mjs +0 -2
- package/dist/config-0acf1oys.mjs +0 -2
- package/dist/config-D8MOgiQV.mjs +0 -32
- package/dist/deploy-qmiLE1G1.mjs +0 -2
- package/dist/discover-AMCBXivQ.mjs +0 -2
- package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
- package/dist/gen-qCBwH3fZ.mjs +0 -2
- package/dist/help-Dw5f9Xrg.mjs +0 -2
- package/dist/login-D7meQg_3.mjs +0 -2
- package/dist/migrate-CEu2X5DB.mjs +0 -2
- package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
- package/dist/plan-COtUvdMA.mjs +0 -2
- package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
- package/dist/prepare-BBknoZI1.mjs +0 -2
- package/dist/resolve-project-DtbidV4y.mjs +0 -2
- package/dist/route-url-CG7U-cRN.mjs +0 -15
- package/dist/runner-voIltZrY.mjs +0 -2
- package/dist/validate-pna7R3Pv.mjs +0 -2
- 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/app-types.md +0 -0
- 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/database.md +8 -8
- 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/credentials.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/uninstall.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/resources.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/api.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/cli/platform.md +0 -0
- /package/{skills/void/docs → docs}/reference/structure.md +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as readDeploymentPlatform } from "./project-DQstYTxO.mjs";
|
|
2
|
-
import { c as getToken, s as getSiteDomain } from "./auth-
|
|
3
|
-
import { H as outro, L as log } from "./
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { c as getToken, s as getSiteDomain } from "./auth-B5_tZLxT.mjs";
|
|
3
|
+
import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { i as dim, l as import_picocolors, m as tablePrefix, s as formatCount } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
6
6
|
//#region src/cli/projects.ts
|
|
7
7
|
async function runProjectsCommand(root) {
|
|
8
8
|
console.log();
|
|
@@ -38,77 +38,77 @@ async function runProjectsCommand(root) {
|
|
|
38
38
|
async function runProjectCommand(root, args) {
|
|
39
39
|
const cloudflare = readDeploymentPlatform(root) === "cloudflare";
|
|
40
40
|
if (args.subcommand === "status") {
|
|
41
|
-
const { runListCommand } = await import("./list-
|
|
41
|
+
const { runListCommand } = await import("./list-2GN7_ueV.mjs");
|
|
42
42
|
return runListCommand(root, args.name || void 0);
|
|
43
43
|
}
|
|
44
44
|
if (args.subcommand === "link") {
|
|
45
45
|
if (cloudflare) throw new Error("project: Direct Cloudflare apps are identified by cloudflare.name in void.config.ts and do not need linking.");
|
|
46
|
-
const { runLink } = await import("./link-
|
|
46
|
+
const { runLink } = await import("./link-DlPG8iX3.mjs");
|
|
47
47
|
return runLink(root, args.name || void 0);
|
|
48
48
|
}
|
|
49
49
|
if (args.subcommand === "list") {
|
|
50
50
|
if (cloudflare) {
|
|
51
|
-
const { runListCommand } = await import("./list-
|
|
51
|
+
const { runListCommand } = await import("./list-2GN7_ueV.mjs");
|
|
52
52
|
return runListCommand(root);
|
|
53
53
|
}
|
|
54
54
|
return runProjectsCommand(root);
|
|
55
55
|
}
|
|
56
56
|
if (args.subcommand === "token") {
|
|
57
57
|
if (cloudflare) throw new Error("project: CI deploy credentials are available only for Void platform projects.");
|
|
58
|
-
const { runProjectTokenCommand } = await import("./project-token-
|
|
58
|
+
const { runProjectTokenCommand } = await import("./project-token-CkZ1cN0Z.mjs");
|
|
59
59
|
return runProjectTokenCommand(root, args);
|
|
60
60
|
}
|
|
61
61
|
if (args.subcommand === "team") {
|
|
62
62
|
if (args.action === "") {
|
|
63
|
-
const { printHelpPage } = await import("./help-
|
|
63
|
+
const { printHelpPage } = await import("./help-DzKUrQvk.mjs");
|
|
64
64
|
printHelpPage(["project", "team"]);
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
67
|
const accountInvitationAction = args.action === "pending" || args.action === "accept" || args.action === "decline";
|
|
68
68
|
if (cloudflare && !accountInvitationAction) throw new Error("project: Teams are available only for projects hosted on a Void platform, not direct Cloudflare deployments.");
|
|
69
|
-
const { runProjectTeamCommand } = await import("./project-team-
|
|
69
|
+
const { runProjectTeamCommand } = await import("./project-team-CDPE1Tsg.mjs");
|
|
70
70
|
return runProjectTeamCommand(root, args);
|
|
71
71
|
}
|
|
72
72
|
if (args.subcommand === "zero-trust") {
|
|
73
73
|
if (cloudflare) throw new Error("project: Zero Trust overrides are available only for projects hosted on a Void platform.");
|
|
74
74
|
if (args.action === "") {
|
|
75
|
-
const { printHelpPage } = await import("./help-
|
|
75
|
+
const { printHelpPage } = await import("./help-DzKUrQvk.mjs");
|
|
76
76
|
printHelpPage(["project", "zero-trust"]);
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
const action = args.action;
|
|
80
|
-
const { runProjectZeroTrustCommand } = await import("./project-zero-trust-
|
|
80
|
+
const { runProjectZeroTrustCommand } = await import("./project-zero-trust-DdjLR61k.mjs");
|
|
81
81
|
return runProjectZeroTrustCommand(root, {
|
|
82
82
|
...args,
|
|
83
83
|
action
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
if (args.subcommand === "logs") {
|
|
87
|
-
const { runLogsCommand } = await import("./logs-
|
|
87
|
+
const { runLogsCommand } = await import("./logs-rd8J-OFh.mjs");
|
|
88
88
|
return runLogsCommand(root, args.filter, args.range, args.deployment || void 0, args.level || void 0);
|
|
89
89
|
}
|
|
90
90
|
if (args.subcommand === "requests") {
|
|
91
91
|
if (cloudflare) throw new Error("project: Historical request analytics require the Void platform. Use `void project logs` for a live Cloudflare tail.");
|
|
92
|
-
const { runRequestsCommand } = await import("./requests-
|
|
92
|
+
const { runRequestsCommand } = await import("./requests-DFAqyYy8.mjs");
|
|
93
93
|
return runRequestsCommand(root, args.range, args.status || void 0);
|
|
94
94
|
}
|
|
95
95
|
if (args.subcommand === "rollback") {
|
|
96
|
-
const { runRollbackCommand } = await import("./rollback-
|
|
96
|
+
const { runRollbackCommand } = await import("./rollback-BKYXBduI.mjs");
|
|
97
97
|
return runRollbackCommand(root, args.deployId || void 0);
|
|
98
98
|
}
|
|
99
99
|
if (args.subcommand === "cancel") {
|
|
100
100
|
if (cloudflare) throw new Error("project: Direct Cloudflare deploys activate only after readiness succeeds, so there is no remote build to cancel.");
|
|
101
|
-
const { runCancelDeployCommand } = await import("./cancel-deploy-
|
|
101
|
+
const { runCancelDeployCommand } = await import("./cancel-deploy-BZNz3Q26.mjs");
|
|
102
102
|
return runCancelDeployCommand(root, args.deployId || void 0);
|
|
103
103
|
}
|
|
104
104
|
if (args.subcommand === "delete") {
|
|
105
105
|
if (cloudflare) throw new Error("project: Refusing to delete Cloudflare resources through this command. Direct deployments are additive and existing resources may be shared.");
|
|
106
|
-
const { runDeleteCommand } = await import("./delete-
|
|
106
|
+
const { runDeleteCommand } = await import("./delete-esYlMiSJ.mjs");
|
|
107
107
|
return runDeleteCommand(root, args.name || void 0, { force: args.force });
|
|
108
108
|
}
|
|
109
109
|
if (args.subcommand === "purge-cache") {
|
|
110
110
|
if (cloudflare) throw new Error("project: Direct Cloudflare ISR cache purge is not available yet; redeploy or purge the configured KV namespace explicitly.");
|
|
111
|
-
const { runPurgeCacheCommand } = await import("./cache-
|
|
111
|
+
const { runPurgeCacheCommand } = await import("./cache-Bo52trKF.mjs");
|
|
112
112
|
return runPurgeCacheCommand(root, args.projectSlug || void 0);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
-
import { c as getToken, i as getAccountCredential } from "./auth-
|
|
3
|
-
import { H as outro, L as log } from "./
|
|
4
|
-
import {
|
|
5
|
-
import { l as
|
|
6
|
-
import { r as
|
|
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
1
|
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import { H as outro, L as log } from "./
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { r as
|
|
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
1
|
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import { H as outro, L as log } from "./
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { r as
|
|
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 };
|