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
package/AGENTS_TEMPLATE.md
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
## Void
|
|
2
2
|
|
|
3
3
|
- This project uses [Void](https://void.cloud), a full-stack Vite framework for Cloudflare Workers with file-based API routing, server-rendered pages, and typed backend services.
|
|
4
|
-
-
|
|
5
|
-
- Use Void's CLI and typed APIs for development and infrastructure. Void infers Cloudflare bindings from your imports; use Void commands to manage them.
|
|
6
|
-
- Before working with Void, read the relevant Markdown docs in `node_modules/void/skills/void/docs/`. Start with `guide/quickstart.md` for setup and `reference/cli.md` for commands; consult the other guides and references for any Void feature.
|
|
4
|
+
- Use Void's CLI and typed APIs. Before working with Void, read the relevant Markdown docs in `node_modules/void/docs/`; start with `guide/quickstart.md` for setup and `reference/cli.md` for commands.
|
package/README.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Void
|
|
2
2
|
|
|
3
|
-
Build and deploy full-stack
|
|
3
|
+
Build and deploy full-stack apps with [Vite](https://vite.dev), running on Cloudflare Workers.
|
|
4
|
+
|
|
5
|
+
Void brings together three open-source tools for you and your coding agents:
|
|
6
|
+
|
|
7
|
+
- **Void SDK:** Build your server and client together with file-based API routes, server-rendered pages, and typed APIs for databases, storage, and AI. Carry types from database queries to the UI.
|
|
8
|
+
- **Void CLI:** Build your app, provision the Cloudflare resources it uses, apply migrations, and deploy with one command. Manage resources, inspect logs, and roll back through the same CLI.
|
|
9
|
+
- **Void Platform:** Install a shared deployment environment in your Cloudflare account for your team or customers, with access controls, resource limits, and usage reporting.
|
|
10
|
+
|
|
11
|
+
The SDK's features are optional and composable. Use React, Vue, Svelte, or Solid for Void pages, or keep a [supported application framework](https://void.cloud/integrations/frameworks/overview) for routing and rendering while Void handles resource APIs, migrations, and deployment.
|
|
4
12
|
|
|
5
13
|
## Getting Started
|
|
6
14
|
|
|
@@ -12,26 +20,28 @@ npx void init
|
|
|
12
20
|
npm run dev
|
|
13
21
|
```
|
|
14
22
|
|
|
15
|
-
Choose
|
|
23
|
+
Choose your UI framework and starter, then select Cloudflare to deploy to your account:
|
|
16
24
|
|
|
17
25
|
```sh
|
|
18
26
|
npx void deploy
|
|
19
27
|
```
|
|
20
28
|
|
|
21
|
-
Void builds
|
|
29
|
+
Void builds the app, provisions resources, applies database migrations, and prints your deployed URL. Follow the [Quickstart](https://void.cloud/guide/quickstart) for your first app or to add Void to an existing Vite project.
|
|
22
30
|
|
|
23
|
-
|
|
31
|
+
To deploy to a team platform, run `npx void connect <url>` first, then use the same deploy command. See [Install a Void Platform](https://void.cloud/guide/self-hosted-platform) to host one in your Cloudflare account or customize its open-source runtime.
|
|
24
32
|
|
|
25
33
|
## Documentation
|
|
26
34
|
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
Read the [Void documentation](https://void.cloud) online or use the Markdown guides and references in `node_modules/void/docs/`, included with the `void` package.
|
|
36
|
+
|
|
37
|
+
`void init` adds a minimal `AGENTS.md` in new projects and asks before changing instructions in existing projects. It also links bundled skills for detected coding agents.
|
|
38
|
+
|
|
39
|
+
- [Server routes](https://void.cloud/guide/server-routing) and [pages](https://void.cloud/guide/pages-routing/overview)
|
|
29
40
|
- [Database](https://void.cloud/guide/database) and [type safety](https://void.cloud/guide/type-safety)
|
|
30
41
|
- [Deployment](https://void.cloud/guide/deployment)
|
|
31
42
|
- [Framework integrations](https://void.cloud/integrations/frameworks/overview)
|
|
32
43
|
- [API](https://void.cloud/reference/api) and [CLI](https://void.cloud/reference/cli) reference
|
|
33
|
-
|
|
34
|
-
To share a deployment platform with your team, see [Install a Void Platform](https://void.cloud/guide/self-hosted-platform).
|
|
44
|
+
- [Coding agents](https://void.cloud/integrations/agents)
|
|
35
45
|
|
|
36
46
|
## License
|
|
37
47
|
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { c as getToken, f as removeToken } from "./auth-
|
|
2
|
-
import { L as log } from "./
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { c as getToken, f as removeToken } from "./auth-B5_tZLxT.mjs";
|
|
2
|
+
import { L as log } from "./dist-D3m88sjf.mjs";
|
|
3
|
+
import { d as printSuccess } from "./output-C50ag2r3.mjs";
|
|
4
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
5
|
+
import { n as runLoginCommand } from "./login-D-Q4xw3Q.mjs";
|
|
5
6
|
import { execSync } from "node:child_process";
|
|
6
7
|
//#region src/cli/account-cmd.ts
|
|
7
8
|
async function runAccountCommand(root, args) {
|
|
8
9
|
switch (args.subcommand) {
|
|
9
10
|
case "login": return runLoginCommand(root);
|
|
10
|
-
case "link": return import("./auth-link-
|
|
11
|
+
case "link": return import("./auth-link-D5RmKnzh.mjs").then(({ runAuthLink }) => runAuthLink(root, args.connectionId));
|
|
11
12
|
case "logout":
|
|
12
|
-
if (removeToken(root))
|
|
13
|
+
if (removeToken(root)) printSuccess("Logged out.");
|
|
13
14
|
else log.info("Not logged in.");
|
|
14
15
|
return;
|
|
15
16
|
case "whoami": {
|
|
@@ -33,7 +34,7 @@ async function runAccountCommand(root, args) {
|
|
|
33
34
|
const cmd = platform === "darwin" ? "pbcopy" : platform === "win32" ? "clip" : "xclip -selection clipboard";
|
|
34
35
|
try {
|
|
35
36
|
execSync(cmd, { input: token });
|
|
36
|
-
|
|
37
|
+
printSuccess("Token copied to clipboard.");
|
|
37
38
|
} catch {
|
|
38
39
|
log.warn("Could not copy to clipboard. Run `void account token` again.");
|
|
39
40
|
}
|
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
import { a as join, i as isAbsolute, t as basename } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import { c as scanWebSocketRoutes,
|
|
2
|
+
import { c as scanWebSocketRoutes, h as needsApplicationDatabase, i as inferProjectBindings, l as scanWebSocketRoutesSync, n as FRAMEWORK_SCAN_DIRS, p as readResourceDefinition, r as detectFramework, s as isWebSocketPatternFile } from "./plugin-inference-BlQbOL0P.mjs";
|
|
3
3
|
import { i as resolveProjectPaths, n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
|
|
4
4
|
import { t as findVoidAuthConfig } from "./config-DPByhVck.mjs";
|
|
5
|
-
import { h as resolveBindingNames, u as getDatabaseDialect } from "./config-
|
|
5
|
+
import { h as resolveBindingNames, u as getDatabaseDialect } from "./config-DiowPT80.mjs";
|
|
6
6
|
import { n as globSync, t as glob } from "./dist-Bn8Kodjp.mjs";
|
|
7
7
|
import { n as isIdentifier } from "./ast-CPGPjb0V.mjs";
|
|
8
8
|
import { a as staticLiteral, i as staticExportInitializers, n as parseRouteFilename, o as unwrapStaticExpression, t as isRouteEnabledForEnvironment } from "./parse-filename-CUbj-1MP.mjs";
|
|
9
9
|
import { n as resourceNameWords } from "./resource-name-C7LVpcRm.mjs";
|
|
10
10
|
import { t as collectMigrations } from "./collect-DiTn9yr6.mjs";
|
|
11
|
-
import { a as scanEmailHandlersSync, i as scanEmailHandlers, r as hasEmailHandlers } from "./email
|
|
12
|
-
import { t as scanPages } from "./scan-
|
|
13
|
-
import { o as isSandboxEnabled } from "./config-
|
|
11
|
+
import { a as scanEmailHandlersSync, i as scanEmailHandlers, r as hasEmailHandlers } from "./email-d_Aux1vM.mjs";
|
|
12
|
+
import { t as scanPages } from "./scan-C3uDzz6J.mjs";
|
|
13
|
+
import { o as isSandboxEnabled } from "./config-B_ggY-IO.mjs";
|
|
14
14
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
15
15
|
import { parseSync } from "vite";
|
|
16
16
|
//#region src/crons/scan.ts
|
|
17
|
-
const
|
|
18
|
-
"ts",
|
|
19
|
-
"mts",
|
|
20
|
-
"js",
|
|
21
|
-
"mjs"
|
|
22
|
-
];
|
|
17
|
+
const JOB_PATTERN = "**/*.{ts,mts,js,mjs}";
|
|
23
18
|
function extractJobName(filePath) {
|
|
24
19
|
return filePath.replace(/\.[^.]+$/, "");
|
|
25
20
|
}
|
|
@@ -50,17 +45,15 @@ function parseJobFiles(root, jobsDir, files) {
|
|
|
50
45
|
});
|
|
51
46
|
}
|
|
52
47
|
async function scanJobs(root, jobsDir = "crons") {
|
|
53
|
-
|
|
54
|
-
return parseJobFiles(root, jobsDir, await glob(pattern, {
|
|
48
|
+
return parseJobFiles(root, jobsDir, await glob(JOB_PATTERN, {
|
|
55
49
|
cwd: resolveDir(root, jobsDir),
|
|
56
50
|
absolute: false
|
|
57
51
|
}).catch(() => []));
|
|
58
52
|
}
|
|
59
53
|
function scanJobsSync(root, jobsDir = "crons") {
|
|
60
|
-
const pattern = `**/*.{${JOB_EXTENSIONS.join(",")}}`;
|
|
61
54
|
let files;
|
|
62
55
|
try {
|
|
63
|
-
files = globSync(
|
|
56
|
+
files = globSync(JOB_PATTERN, {
|
|
64
57
|
cwd: resolveDir(root, jobsDir),
|
|
65
58
|
absolute: false
|
|
66
59
|
});
|
|
@@ -91,10 +84,11 @@ function scanDurableObjectModules(root) {
|
|
|
91
84
|
const modules = readdirSync(directory, { withFileTypes: true }).filter((entry) => entry.isFile() && MODULE_PATTERN.test(entry.name) && !entry.name.endsWith(".d.ts")).sort((a, b) => a.name.localeCompare(b.name)).map((entry) => {
|
|
92
85
|
const filePath = join(directory, entry.name);
|
|
93
86
|
const name = readResourceDefinition(filePath, readFileSync(filePath, "utf-8"), DURABLE_HELPERS)?.name;
|
|
94
|
-
|
|
87
|
+
const resourceName = name ?? inferDurableResourceName(entry.name);
|
|
88
|
+
if (resourceNameWords(resourceName).length === 0) throw new Error(`durable: cannot derive a name from durable-objects/${entry.name}.`);
|
|
95
89
|
return {
|
|
96
90
|
filePath,
|
|
97
|
-
...deriveDurableResourceIdentity(
|
|
91
|
+
...deriveDurableResourceIdentity(resourceName),
|
|
98
92
|
...name === void 0 ? {} : { name }
|
|
99
93
|
};
|
|
100
94
|
});
|
|
@@ -109,12 +103,7 @@ function scanDurableObjectModules(root) {
|
|
|
109
103
|
}
|
|
110
104
|
//#endregion
|
|
111
105
|
//#region src/queues/scan.ts
|
|
112
|
-
const
|
|
113
|
-
"ts",
|
|
114
|
-
"mts",
|
|
115
|
-
"js",
|
|
116
|
-
"mjs"
|
|
117
|
-
];
|
|
106
|
+
const QUEUE_PATTERN = "**/*.{ts,mts,js,mjs}";
|
|
118
107
|
function extractName(filePath) {
|
|
119
108
|
return filePath.replace(/\.[^.]+$/, "").replaceAll("/", "-");
|
|
120
109
|
}
|
|
@@ -127,8 +116,10 @@ const OPTION_NAMES = [
|
|
|
127
116
|
"maxRetries",
|
|
128
117
|
"retryDelay"
|
|
129
118
|
];
|
|
130
|
-
function
|
|
131
|
-
|
|
119
|
+
function resolveQueuesDir(root, queuesDir) {
|
|
120
|
+
return isAbsolute(queuesDir) ? queuesDir : join(root, queuesDir);
|
|
121
|
+
}
|
|
122
|
+
function parseQueueFiles(queuesDirPath, files) {
|
|
132
123
|
const definitions = files.filter((filePath) => !filePath.split("/").some((segment) => segment.startsWith("_"))).sort().map((filePath) => {
|
|
133
124
|
const absPath = join(queuesDirPath, filePath);
|
|
134
125
|
const source = readFileSync(absPath, "utf-8");
|
|
@@ -166,26 +157,24 @@ function parseQueueFiles(root, queuesDir, files) {
|
|
|
166
157
|
return definitions;
|
|
167
158
|
}
|
|
168
159
|
async function scanQueues(root, queuesDir = "queues") {
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
return parseQueueFiles(root, queuesDir, await glob(pattern, {
|
|
160
|
+
const queuesDirPath = resolveQueuesDir(root, queuesDir);
|
|
161
|
+
return parseQueueFiles(queuesDirPath, await glob(QUEUE_PATTERN, {
|
|
172
162
|
cwd: queuesDirPath,
|
|
173
163
|
absolute: false
|
|
174
164
|
}).catch(() => []));
|
|
175
165
|
}
|
|
176
166
|
function scanQueuesSync(root, queuesDir = "queues") {
|
|
177
|
-
const
|
|
167
|
+
const queuesDirPath = resolveQueuesDir(root, queuesDir);
|
|
178
168
|
let files;
|
|
179
169
|
try {
|
|
180
|
-
|
|
181
|
-
files = globSync(pattern, {
|
|
170
|
+
files = globSync(QUEUE_PATTERN, {
|
|
182
171
|
cwd: queuesDirPath,
|
|
183
172
|
absolute: false
|
|
184
173
|
});
|
|
185
174
|
} catch {
|
|
186
175
|
files = [];
|
|
187
176
|
}
|
|
188
|
-
return parseQueueFiles(
|
|
177
|
+
return parseQueueFiles(queuesDirPath, files);
|
|
189
178
|
}
|
|
190
179
|
//#endregion
|
|
191
180
|
//#region src/router/detect-exports.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as scanRoutes, t as analyzeApplicationSync } from "./application-analysis-
|
|
1
|
+
import { n as scanRoutes, t as analyzeApplicationSync } from "./application-analysis-DKy02UY0.mjs";
|
|
2
2
|
//#region src/application-routing.ts
|
|
3
3
|
/** Complete route/page analysis using the same resource and handler inventories. */
|
|
4
4
|
async function completeApplicationAnalysis(analysis) {
|
|
@@ -2,10 +2,11 @@ import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
|
2
2
|
import { C as deleteKeyringPassword, T as writeKeyringPassword, c as normalizePlatformApiUrl, i as getActivePlatformConnection, s as listPlatformConnections, u as platformCredentialAccount, w as readKeyringPassword } from "./platform-registry-P387v42A.mjs";
|
|
3
3
|
import { i as readProjectPlatformUrl, r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
4
4
|
import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
|
|
5
|
-
import { t as ensureCloudflaredToken } from "./cf-access-
|
|
5
|
+
import { t as ensureCloudflaredToken } from "./cf-access-ngGqZpHZ.mjs";
|
|
6
6
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
7
7
|
import { createHash, randomBytes } from "node:crypto";
|
|
8
8
|
import { homedir } from "node:os";
|
|
9
|
+
import { browserPageLead, browserPageStatus, renderBrowserPage } from "@void/platform/browser-page";
|
|
9
10
|
//#region src/cli/auth.ts
|
|
10
11
|
const CONFIG_DIR = join(homedir(), ".void");
|
|
11
12
|
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
@@ -175,11 +176,10 @@ function getProxyUrl(root = process.cwd()) {
|
|
|
175
176
|
return proxyUrl;
|
|
176
177
|
}
|
|
177
178
|
function page(title, message) {
|
|
178
|
-
return
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
</head><body><div class="card"><h1>${title}</h1><p>${message}</p></div></body></html>`;
|
|
179
|
+
return renderBrowserPage({
|
|
180
|
+
title,
|
|
181
|
+
content: browserPageStatus(title === "Login failed" ? "error" : "success") + browserPageLead(title, message)
|
|
182
|
+
});
|
|
183
183
|
}
|
|
184
184
|
function openBrowser(url, execFile) {
|
|
185
185
|
const ignore = () => {};
|
|
@@ -274,7 +274,7 @@ async function awaitBrowserCallback(options) {
|
|
|
274
274
|
}
|
|
275
275
|
if (settled) return;
|
|
276
276
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
277
|
-
res.end(page("
|
|
277
|
+
res.end(page(options.successTitle ?? "Signed in to Void", "You can close this tab and return to the terminal."));
|
|
278
278
|
succeed(result);
|
|
279
279
|
});
|
|
280
280
|
server.on("connection", (socket) => socket.unref());
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as getApiUrl, m as runPlatformLogin, s as getSiteDomain } from "./auth-
|
|
1
|
+
import { a as getApiUrl, m as runPlatformLogin, s as getSiteDomain } from "./auth-B5_tZLxT.mjs";
|
|
2
2
|
export { getApiUrl, getSiteDomain, runPlatformLogin };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as getApiUrl, c as getToken, h as savePlatformToken, m as runPlatformLogin, u as openBrowser } from "./auth-
|
|
2
|
-
import { L as log } from "./
|
|
3
|
-
import { r as PlatformClient } from "./client-
|
|
4
|
-
import { r as selectPlatformLoginMethod } from "./login-
|
|
5
|
-
import { t as discoverPlatform } from "./platform-cmd-
|
|
1
|
+
import { a as getApiUrl, c as getToken, h as savePlatformToken, m as runPlatformLogin, u as openBrowser } from "./auth-B5_tZLxT.mjs";
|
|
2
|
+
import { L as log } from "./dist-D3m88sjf.mjs";
|
|
3
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
4
|
+
import { r as selectPlatformLoginMethod } from "./login-D-Q4xw3Q.mjs";
|
|
5
|
+
import { t as discoverPlatform } from "./platform-cmd-B8-bCb7t.mjs";
|
|
6
6
|
import { execFile } from "node:child_process";
|
|
7
7
|
//#region src/cli/auth-link.ts
|
|
8
8
|
async function runAuthLink(root, connectionId) {
|
|
@@ -36,7 +36,6 @@ function resolveColumnType(dialect, idStrategy, fieldName, field) {
|
|
|
36
36
|
}
|
|
37
37
|
if (useIdType) return idStrategy === "serial" ? "INTEGER" : "TEXT";
|
|
38
38
|
if (field.type === "boolean" || field.type === "date" || field.type === "number") return "INTEGER";
|
|
39
|
-
if (field.type === "json" || field.type === "string[]" || field.type === "number[]") return "TEXT";
|
|
40
39
|
return "TEXT";
|
|
41
40
|
}
|
|
42
41
|
function buildColumnDefinition(dialect, schema, fieldName, field, options = {}) {
|
|
@@ -67,25 +66,21 @@ function buildModifyMySqlColumnSql(schema, tableName, fieldName, field) {
|
|
|
67
66
|
function buildCreateIndexSql(dialect, tableName, fieldName, unique) {
|
|
68
67
|
return `CREATE ${unique ? "UNIQUE " : ""}INDEX${dialect === "mysql" ? "" : " IF NOT EXISTS"} ${quoteIdentifier(createIndexName(tableName, fieldName, unique), dialect)} ON ${quoteIdentifier(tableName, dialect)} (${quoteIdentifier(fieldName, dialect)})`;
|
|
69
68
|
}
|
|
70
|
-
async function
|
|
71
|
-
const indexRows = await runner.all(`PRAGMA index_list(${quotePragmaArg(table.name)})`);
|
|
72
|
-
const existingIndexes = new Set(indexRows.map((row) => String(row.name)));
|
|
69
|
+
async function createMissingIndexes(runner, dialect, table, existingIndexes) {
|
|
73
70
|
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
74
71
|
if (!field.index && !field.unique) continue;
|
|
75
72
|
const indexName = createIndexName(table.name, fieldName, field.unique);
|
|
76
73
|
if (existingIndexes.has(indexName)) continue;
|
|
77
|
-
await runner.run(buildCreateIndexSql(
|
|
74
|
+
await runner.run(buildCreateIndexSql(dialect, table.name, fieldName, field.unique));
|
|
78
75
|
}
|
|
79
76
|
}
|
|
77
|
+
async function ensureSqliteIndexes(runner, table) {
|
|
78
|
+
const indexRows = await runner.all(`PRAGMA index_list(${quotePragmaArg(table.name)})`);
|
|
79
|
+
await createMissingIndexes(runner, "sqlite", table, new Set(indexRows.map((row) => String(row.name))));
|
|
80
|
+
}
|
|
80
81
|
async function ensurePgIndexes(runner, schemaName, table) {
|
|
81
82
|
const indexRows = await runner.all("SELECT indexname FROM pg_indexes WHERE schemaname = $1 AND tablename = $2", [schemaName, table.name]);
|
|
82
|
-
|
|
83
|
-
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
84
|
-
if (!field.index && !field.unique) continue;
|
|
85
|
-
const indexName = createIndexName(table.name, fieldName, field.unique);
|
|
86
|
-
if (existingIndexes.has(indexName)) continue;
|
|
87
|
-
await runner.run(buildCreateIndexSql("postgresql", table.name, fieldName, field.unique));
|
|
88
|
-
}
|
|
83
|
+
await createMissingIndexes(runner, "postgresql", table, new Set(indexRows.map((row) => String(row.indexname))));
|
|
89
84
|
}
|
|
90
85
|
async function applySqliteAuthMigrations(runner, schema) {
|
|
91
86
|
const tableRows = await runner.all("SELECT name FROM sqlite_master WHERE type = 'table'");
|
|
@@ -146,12 +141,7 @@ async function applyMySqlAuthMigrations(runner, schema) {
|
|
|
146
141
|
}
|
|
147
142
|
}
|
|
148
143
|
const indexRows = await runner.all("SELECT index_name FROM information_schema.statistics WHERE table_schema = ? AND table_name = ?", [databaseName, table.name]);
|
|
149
|
-
|
|
150
|
-
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
151
|
-
if (!field.index && !field.unique) continue;
|
|
152
|
-
const indexName = createIndexName(table.name, fieldName, field.unique);
|
|
153
|
-
if (!existingIndexes.has(indexName)) await runner.run(buildCreateIndexSql("mysql", table.name, fieldName, field.unique));
|
|
154
|
-
}
|
|
144
|
+
await createMissingIndexes(runner, "mysql", table, new Set(indexRows.map((row) => String(row.index_name))));
|
|
155
145
|
}
|
|
156
146
|
}
|
|
157
147
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { s as listPlatformConnections } from "./platform-registry-P387v42A.mjs";
|
|
2
2
|
import { n as readDeploymentPlatform } from "./project-DQstYTxO.mjs";
|
|
3
|
-
import { K as select, tt as isCancel } from "./
|
|
3
|
+
import { K as select, tt as isCancel } from "./dist-D3m88sjf.mjs";
|
|
4
4
|
//#region src/cli/auth-router.ts
|
|
5
5
|
async function chooseDestination(root, args, interactive) {
|
|
6
6
|
const saved = readDeploymentPlatform(root);
|
|
@@ -36,26 +36,13 @@ async function chooseDestination(root, args, interactive) {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
async function runAuthRouter(root, args, interactive = Boolean(process.stdin.isTTY)) {
|
|
39
|
-
if (args.subcommand === "link") {
|
|
40
|
-
const { runAccountCommand } = await import("./account-cmd-CDry3B5V.mjs");
|
|
41
|
-
await runAccountCommand(root, {
|
|
42
|
-
subcommand: "link",
|
|
43
|
-
...args.connectionId ? { connectionId: args.connectionId } : {}
|
|
44
|
-
});
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (args.subcommand === "token") {
|
|
48
|
-
const { runAccountCommand } = await import("./account-cmd-CDry3B5V.mjs");
|
|
49
|
-
await runAccountCommand(root, { subcommand: "token" });
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
39
|
const destination = await chooseDestination(root, args, interactive);
|
|
53
40
|
if (destination.platform === "cloudflare") {
|
|
54
|
-
const { runCloudflareCommand } = await import("./cloudflare-cmd-
|
|
55
|
-
await runCloudflareCommand(root, { subcommand: args.subcommand
|
|
41
|
+
const { runCloudflareCommand } = await import("./cloudflare-cmd-lHqNlJGW.mjs");
|
|
42
|
+
await runCloudflareCommand(root, { subcommand: args.subcommand });
|
|
56
43
|
return;
|
|
57
44
|
}
|
|
58
|
-
const { runAccountCommand } = await import("./account-cmd-
|
|
45
|
+
const { runAccountCommand } = await import("./account-cmd-CfUXh_nU.mjs");
|
|
59
46
|
const subcommand = args.subcommand === "status" ? "whoami" : args.subcommand;
|
|
60
47
|
if (!destination.apiUrl) {
|
|
61
48
|
await runAccountCommand(root, { subcommand });
|
|
@@ -44,10 +44,6 @@ type VoidAuthEnv = Record<string, unknown> & {
|
|
|
44
44
|
connectionString?: string;
|
|
45
45
|
};
|
|
46
46
|
BETTER_AUTH_SECRET?: string;
|
|
47
|
-
GITHUB_OAUTH_ID?: string;
|
|
48
|
-
GITHUB_OAUTH_SECRET?: string;
|
|
49
|
-
GOOGLE_OAUTH_ID?: string;
|
|
50
|
-
GOOGLE_OAUTH_SECRET?: string;
|
|
51
47
|
};
|
|
52
48
|
type VoidAuthRuntimeApi = {
|
|
53
49
|
resolveVoidAuthOptions(request: Request, env: VoidAuthEnv, runtime: VoidAuthRuntimeOptions, databaseOverride?: NonNullable<BetterAuthOptions["database"]>, disposeOverride?: () => Promise<void>): Promise<{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as isVoidSocialAuthProvider, r as getVoidAuthProviderEnvNames } from "./providers-
|
|
1
|
+
import { a as isVoidSocialAuthProvider, r as getVoidAuthProviderEnvNames } from "./providers-BXuhmuub.mjs";
|
|
2
2
|
import { t as authContext } from "./auth-3sGB0zJ1.mjs";
|
|
3
3
|
import { randomBytes, scrypt, timingSafeEqual } from "node:crypto";
|
|
4
4
|
import { betterAuth } from "better-auth";
|
|
@@ -9,11 +9,16 @@ function resolveSecret(env, dev) {
|
|
|
9
9
|
if (dev) return "void-dev-better-auth-secret-1234567890";
|
|
10
10
|
throw new Error("auth: Missing Better Auth secret. Set BETTER_AUTH_SECRET.");
|
|
11
11
|
}
|
|
12
|
-
function readEnvString(env,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
function readEnvString(env, key) {
|
|
13
|
+
const value = env[key];
|
|
14
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
15
|
+
}
|
|
16
|
+
/** Local development uses `DATABASE_URL`; production uses the Hyperdrive binding. */
|
|
17
|
+
function resolveConnectionString(env, database) {
|
|
18
|
+
const hyperdrive = env.HYPERDRIVE?.connectionString;
|
|
19
|
+
const connectionString = readEnvString(env, "DATABASE_URL") ?? (typeof hyperdrive === "string" && hyperdrive.length > 0 ? hyperdrive : void 0);
|
|
20
|
+
if (!connectionString) throw new Error(`auth: Better Auth requires DATABASE_URL for local ${database} dev or HYPERDRIVE in production.`);
|
|
21
|
+
return connectionString;
|
|
17
22
|
}
|
|
18
23
|
const PASSWORD_SALT_LENGTH = 16;
|
|
19
24
|
const SCRYPT_KEY_LENGTH = 64;
|
|
@@ -56,12 +61,8 @@ function resolveEmailAndPassword(configuredProviders) {
|
|
|
56
61
|
}
|
|
57
62
|
function resolveSocialProviderCredentials(env, provider) {
|
|
58
63
|
const envNames = getVoidAuthProviderEnvNames(provider);
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
if (envNames.legacyClientId) clientIdKeys.push(envNames.legacyClientId);
|
|
62
|
-
if (envNames.legacyClientSecret) clientSecretKeys.push(envNames.legacyClientSecret);
|
|
63
|
-
const clientId = readEnvString(env, ...clientIdKeys);
|
|
64
|
-
const clientSecret = readEnvString(env, ...clientSecretKeys);
|
|
64
|
+
const clientId = readEnvString(env, envNames.clientId);
|
|
65
|
+
const clientSecret = readEnvString(env, envNames.clientSecret);
|
|
65
66
|
if (!clientId || !clientSecret) throw new Error(`auth: Missing credentials for provider '${provider}'. Set ${envNames.clientId} and ${envNames.clientSecret}, or remove '${provider}' from auth.providers.`);
|
|
66
67
|
return {
|
|
67
68
|
clientId,
|
|
@@ -112,6 +113,82 @@ function resolveUserConfig(userConfig, defaults, request, env, dialect) {
|
|
|
112
113
|
...userConfig
|
|
113
114
|
});
|
|
114
115
|
}
|
|
116
|
+
const SESSION_SAFE_METHODS = /* @__PURE__ */ new Set([
|
|
117
|
+
"GET",
|
|
118
|
+
"HEAD",
|
|
119
|
+
"OPTIONS"
|
|
120
|
+
]);
|
|
121
|
+
function isRequestOrigin(origin, requestUrl) {
|
|
122
|
+
try {
|
|
123
|
+
const from = new URL(origin);
|
|
124
|
+
const to = new URL(requestUrl);
|
|
125
|
+
return from.host === to.host && (from.protocol === to.protocol || from.protocol === "https:");
|
|
126
|
+
} catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Headers used to look up the signed-in session for app routes and WebSockets.
|
|
132
|
+
*
|
|
133
|
+
* The session cookie is SameSite=Lax, so a page on another origin of the same
|
|
134
|
+
* site (for example a sibling subdomain) can still send it with a WebSocket
|
|
135
|
+
* handshake or a POST that needs no CORS preflight. For those requests the
|
|
136
|
+
* cookie only counts when the Origin is the request origin or one Better Auth
|
|
137
|
+
* trusts, following Better Auth's own origin check for its endpoints. The
|
|
138
|
+
* request is not rejected; it is resolved without a user.
|
|
139
|
+
*/
|
|
140
|
+
async function sessionHeaders(request, auth) {
|
|
141
|
+
const headers = request.headers;
|
|
142
|
+
if (!headers.has("cookie")) return headers;
|
|
143
|
+
if (SESSION_SAFE_METHODS.has(request.method) && headers.get("upgrade")?.toLowerCase() !== "websocket") return headers;
|
|
144
|
+
const origin = headers.get("origin");
|
|
145
|
+
if (!origin || isRequestOrigin(origin, request.url)) return headers;
|
|
146
|
+
if (origin === "null" && headers.get("sec-fetch-site") === "same-origin") return headers;
|
|
147
|
+
const advanced = auth.options.advanced;
|
|
148
|
+
if (advanced?.disableCSRFCheck === true || advanced?.disableOriginCheck === true && advanced.disableCSRFCheck === void 0) return headers;
|
|
149
|
+
const context = await auth.$context;
|
|
150
|
+
if (context.isTrustedOrigin(origin, { allowRelativePaths: false })) return headers;
|
|
151
|
+
const trustedOrigins = auth.options.trustedOrigins;
|
|
152
|
+
if (typeof trustedOrigins === "function") {
|
|
153
|
+
const requestOrigins = (await trustedOrigins(request)).filter((value) => Boolean(value));
|
|
154
|
+
if (context.isTrustedOrigin.call({ trustedOrigins: requestOrigins }, origin, { allowRelativePaths: false })) return headers;
|
|
155
|
+
}
|
|
156
|
+
const withoutCookie = new Headers(headers);
|
|
157
|
+
withoutCookie.delete("cookie");
|
|
158
|
+
console.warn(`auth: Ignored the session cookie on a ${request.method} request from ${origin}. Add this origin to auth trustedOrigins if it should use the signed-in session.`);
|
|
159
|
+
return withoutCookie;
|
|
160
|
+
}
|
|
161
|
+
const LOOPBACK_IP = /^(127\.|::1$|::ffff:127\.)/;
|
|
162
|
+
/**
|
|
163
|
+
* The client IP set by Cloudflare's edge, or null outside a deployed Worker.
|
|
164
|
+
* `request.cf` keeps a client-supplied header from being trusted on Node, Bun
|
|
165
|
+
* or Deno, and local previews report a loopback address.
|
|
166
|
+
*/
|
|
167
|
+
function cloudflareClientIp(request) {
|
|
168
|
+
const cf = request.cf;
|
|
169
|
+
if (typeof cf !== "object" || cf === null) return null;
|
|
170
|
+
const ip = request.headers.get("cf-connecting-ip");
|
|
171
|
+
if (!ip || LOOPBACK_IP.test(ip)) return null;
|
|
172
|
+
return ip;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Better Auth enables rate limiting only when NODE_ENV is "production", which
|
|
176
|
+
* Workers never set. Turn it on for deployed Cloudflare requests and key it by
|
|
177
|
+
* Cloudflare's client IP header. Explicit user settings still win.
|
|
178
|
+
*/
|
|
179
|
+
function applyCloudflareRateLimitDefaults(options) {
|
|
180
|
+
return {
|
|
181
|
+
...options,
|
|
182
|
+
rateLimit: {
|
|
183
|
+
...options.rateLimit,
|
|
184
|
+
enabled: options.rateLimit?.enabled ?? true
|
|
185
|
+
},
|
|
186
|
+
advanced: {
|
|
187
|
+
...options.advanced,
|
|
188
|
+
ipAddress: options.advanced?.ipAddress ?? { ipAddressHeaders: ["cf-connecting-ip"] }
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
115
192
|
function assertRuntimeDialect(runtime, dialect) {
|
|
116
193
|
if (runtime.dialect !== dialect) throw new Error(`auth: Runtime mismatch. Expected ${dialect}, received '${runtime.dialect}'.`);
|
|
117
194
|
}
|
|
@@ -134,8 +211,9 @@ function createVoidAuthRuntime(dialect, resolveDatabase, runVoidAuthMigrations)
|
|
|
134
211
|
...socialProviders ? { socialProviders } : {},
|
|
135
212
|
trustedOrigins: [origin]
|
|
136
213
|
};
|
|
214
|
+
const resolved = resolveUserConfig(runtime.userConfig, defaults, request, env, dialect);
|
|
137
215
|
return {
|
|
138
|
-
options:
|
|
216
|
+
options: runtime.dev !== true && cloudflareClientIp(request) ? applyCloudflareRateLimitDefaults(resolved) : resolved,
|
|
139
217
|
dispose
|
|
140
218
|
};
|
|
141
219
|
}
|
|
@@ -150,7 +228,7 @@ function createVoidAuthRuntime(dialect, resolveDatabase, runVoidAuthMigrations)
|
|
|
150
228
|
const { auth, dispose } = await createVoidAuth(request, env, runtime, databaseOverride, disposeOverride);
|
|
151
229
|
try {
|
|
152
230
|
return (await auth.api.getSession({
|
|
153
|
-
headers: request
|
|
231
|
+
headers: await sessionHeaders(request, auth),
|
|
154
232
|
asResponse: false,
|
|
155
233
|
returnHeaders: true
|
|
156
234
|
})).response ?? null;
|
|
@@ -168,7 +246,7 @@ function createVoidAuthRuntime(dialect, resolveDatabase, runVoidAuthMigrations)
|
|
|
168
246
|
c.set("__voidAuth", auth);
|
|
169
247
|
try {
|
|
170
248
|
const result = await auth.api.getSession({
|
|
171
|
-
headers: c.req.raw
|
|
249
|
+
headers: await sessionHeaders(c.req.raw, auth),
|
|
172
250
|
asResponse: false,
|
|
173
251
|
returnHeaders: true
|
|
174
252
|
});
|
|
@@ -211,4 +289,4 @@ function createVoidAuthRuntime(dialect, resolveDatabase, runVoidAuthMigrations)
|
|
|
211
289
|
};
|
|
212
290
|
}
|
|
213
291
|
//#endregion
|
|
214
|
-
export { createVoidAuthRuntime as t };
|
|
292
|
+
export { createVoidAuthRuntime as n, resolveConnectionString as r, assertRuntimeDialect as t };
|
|
@@ -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 {
|
|
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, l as import_picocolors } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { n as PlatformApiError, r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
6
|
+
import { i as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
|
|
7
7
|
import { appendFileSync, writeFileSync } from "node:fs";
|
|
8
8
|
//#region src/cli/build-cmd.ts
|
|
9
9
|
const POLL_MS = 1e3;
|
|
@@ -147,7 +147,8 @@ async function runBuildLogsCommand(root, args) {
|
|
|
147
147
|
outro(dim("Build still running — pass -f to follow."));
|
|
148
148
|
return;
|
|
149
149
|
}
|
|
150
|
-
|
|
150
|
+
if (status === "complete") printSuccess("Build succeeded.");
|
|
151
|
+
else outro(dim(`Build ${status}.`));
|
|
151
152
|
}
|
|
152
153
|
//#endregion
|
|
153
154
|
export { runBuildCommand };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import {
|
|
4
|
-
import { r as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { c as getToken } from "./auth-B5_tZLxT.mjs";
|
|
3
|
+
import { L as log } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { d as printSuccess, r as createSpinner, s as formatCount } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
6
|
+
import { i as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
|
|
7
7
|
//#region src/cli/cache.ts
|
|
8
8
|
async function runPurgeCacheCommand(root, projectSlug) {
|
|
9
9
|
console.log();
|
|
@@ -38,13 +38,13 @@ async function runPurgeCacheCommand(root, projectSlug) {
|
|
|
38
38
|
try {
|
|
39
39
|
const result = await client.purgeCache(projectId);
|
|
40
40
|
s.stop("Cache purged.");
|
|
41
|
-
log.
|
|
41
|
+
log.info("Edge cache will clear within seconds.");
|
|
42
|
+
printSuccess(`Purged ${formatCount(result.purged, "cached page")}.`);
|
|
42
43
|
} catch (err) {
|
|
43
44
|
s.stop("Cache purge failed.");
|
|
44
45
|
log.error(err instanceof Error ? err.message : String(err));
|
|
45
46
|
process.exit(1);
|
|
46
47
|
}
|
|
47
|
-
outro(dim("Edge cache will clear within seconds."));
|
|
48
48
|
}
|
|
49
49
|
//#endregion
|
|
50
50
|
export { runPurgeCacheCommand };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import { A as confirm, H as outro, L as log, tt as isCancel } from "./
|
|
4
|
-
import {
|
|
2
|
+
import { c as getToken } from "./auth-B5_tZLxT.mjs";
|
|
3
|
+
import { A as confirm, H as outro, L as log, tt as isCancel } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { d as printSuccess } from "./output-C50ag2r3.mjs";
|
|
5
|
+
import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
|
|
5
6
|
//#region src/cli/cancel-deploy.ts
|
|
6
7
|
const ACTIVE_STATUSES = /* @__PURE__ */ new Set([
|
|
7
8
|
"pending",
|
|
@@ -48,7 +49,7 @@ async function runCancelDeployCommand(root, deployId) {
|
|
|
48
49
|
return;
|
|
49
50
|
}
|
|
50
51
|
await client.cancelDeployment(linked.projectId, target.id);
|
|
51
|
-
|
|
52
|
+
printSuccess(`Cancellation requested for deployment ${target.id}.`);
|
|
52
53
|
}
|
|
53
54
|
function formatDeployment(deployment) {
|
|
54
55
|
const suffix = deployment.commit ? ` (${deployment.commit.slice(0, 7)})` : "";
|