void 0.26.1 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/{account-cmd-CfUXh_nU.mjs → account-cmd-Ci00cncT.mjs} +5 -5
- package/dist/{agents-B_pX_HmQ.mjs → agents-CuNtT0D_.mjs} +5 -2
- package/dist/{application-analysis-DKy02UY0.mjs → application-analysis-D72ZQfMZ.mjs} +118 -135
- package/dist/{application-routing-DQyUh_5S.mjs → application-routing-Dy589Vgn.mjs} +1 -2
- package/dist/atomic-write-Dq6R0BPN.mjs +18 -0
- package/dist/{auth-B5_tZLxT.mjs → auth-B6iOCjKI.mjs} +23 -56
- package/dist/{auth-link-D5RmKnzh.mjs → auth-link-DWr6Afao.mjs} +10 -10
- package/dist/{auth-migrations-BwHgeEsD.mjs → auth-migrations-Cgs0k6lS.mjs} +28 -5
- package/dist/{auth-router-Bap-pvbn.mjs → auth-router-DP14wVkZ.mjs} +4 -4
- package/dist/auth-wn6F8dB8.mjs +2 -0
- package/dist/base64-DVrOndmI.mjs +16 -0
- package/dist/{better-auth-shared-CPvWD3nG.d.mts → better-auth-shared-B74NJIus.d.mts} +8 -13
- package/dist/{better-auth-shared-DPpj8zxc.mjs → better-auth-shared-CMXlZG7W.mjs} +56 -68
- package/dist/{build-cmd-B58c8iS8.mjs → build-cmd-Cr3FJxv0.mjs} +5 -5
- package/dist/{cache-Bo52trKF.mjs → cache-D0Tt28cn.mjs} +5 -5
- package/dist/{cancel-deploy-BZNz3Q26.mjs → cancel-deploy-CJKvk7AN.mjs} +4 -4
- package/dist/{cf-access-TWNzXltp.mjs → cf-access-BM9G0lhO.mjs} +4 -3
- package/dist/{cf-access-ngGqZpHZ.mjs → cf-access-CWP4avfP.mjs} +3 -7
- package/dist/cf-build-output-2u583yJK.mjs +2 -0
- package/dist/{cf-build-output-DjvB_872.mjs → cf-build-output-Bc8i3dzE.mjs} +2 -2
- package/dist/cf-user-agent-ChjQp2MU.mjs +33 -0
- package/dist/cli/cli.mjs +198 -311
- package/dist/cli/cloudflare-operation-process.mjs +46 -14
- package/dist/cli/env-schema-probe.d.mts +5 -43
- package/dist/cli/env-schema-probe.mjs +14 -80
- package/dist/client-C1BjRn3g.mjs +2 -0
- package/dist/{client-C2Prx_Bi.mjs → client-DM9Kcf4e.mjs} +161 -415
- package/dist/{cloudflare-auth-CuxfF6OA.mjs → cloudflare-auth-CqFBDo52.mjs} +12 -39
- package/dist/{cloudflare-cmd-lHqNlJGW.mjs → cloudflare-cmd-CTrn-lXJ.mjs} +6 -5
- package/dist/{cloudflare-config-BmhBv3HV.mjs → cloudflare-config-DV60XFFK.mjs} +16 -28
- package/dist/{cloudflare-connect-2G3rL2rP.mjs → cloudflare-connect-BosmCNlq.mjs} +3 -3
- package/dist/{cloudflare-operations-CwI1bChl.mjs → cloudflare-operations-BKdSfNBN.mjs} +26 -34
- package/dist/{cloudflare-operations-BlYLlowZ.mjs → cloudflare-operations-Ds-lX3Ts.mjs} +1 -1
- package/dist/{cloudflare-process-2-TfIEzB.mjs → cloudflare-process-CeDWJRhj.mjs} +12 -7
- package/dist/collect-NUlJMpLY.mjs +2 -0
- package/dist/{collect-DiTn9yr6.mjs → collect-xjffdCdk.mjs} +1 -1
- package/dist/{config-CSa15FvD.d.mts → config-7qoq2p9v.d.mts} +2 -2
- package/dist/{config-CLYAosnQ.mjs → config-BEm9vRvS.mjs} +11 -5
- package/dist/{config-DiowPT80.mjs → config-Bx_1SpnO.mjs} +87 -177
- package/dist/config-CNnrSMYm.mjs +2 -0
- package/dist/{config-DPByhVck.mjs → config-D0GY5ItR.mjs} +1 -1
- package/dist/config-entry.d.mts +1 -1
- package/dist/{connect-X0MUA1gk.mjs → connect-nukQSoEO.mjs} +8 -8
- package/dist/{create-project-DxiyW6iX.mjs → create-project-D4APeBwX.mjs} +7 -7
- package/dist/{create-project-iwkbqiBU.mjs → create-project-DL7YXpjj.mjs} +1 -1
- package/dist/{db-XnVMHzoV.mjs → db-27RztQLy.mjs} +173 -263
- package/dist/{delete-esYlMiSJ.mjs → delete-BbsZFZIw.mjs} +5 -5
- package/dist/deploy-B06EQq4t.mjs +6009 -0
- package/dist/deploy-Db2ALnQP.mjs +3 -0
- package/dist/deploy-managed-static-CGswbcay.mjs +2277 -0
- package/dist/deploy-transport-BiicfoQW.mjs +180 -0
- package/dist/deploy.d.mts +10 -0
- package/dist/deploy.mjs +82 -0
- package/dist/dev-inbox-Rd6j_8vM.mjs +217 -0
- package/dist/discover-CTUiSsfG.mjs +2 -0
- package/dist/{discover-CkCYv9T_.mjs → discover-D2PGT63u.mjs} +2 -2
- package/dist/{dist-BVqXeR_h.mjs → dist-ipQi0Q8y.mjs} +2 -3
- package/dist/{domain-CbbBWhWE.mjs → domain-Bfq9n03H.mjs} +7 -22
- package/dist/{dotenv-BfU6eqFt.mjs → dotenv-CNazY3-w.mjs} +4 -16
- package/dist/{email-d_Aux1vM.mjs → email-BcjSyAL0.mjs} +4 -20
- package/dist/{email-CpuT42g7.mjs → email-DIwaQU4P.mjs} +99 -191
- package/dist/email-cloudflare-CH053RxK.mjs +1096 -0
- package/dist/email-protocol-D9nTvhCp.mjs +82 -0
- package/dist/{entry-CMAkqBmU.mjs → entry-ehmBvs5w.mjs} +2 -2
- package/dist/{env-BxocywBB.mjs → env-BJjULvL0.mjs} +2 -2
- package/dist/{env-DMA3cXZt.mjs → env-BhdWMrNy.mjs} +2 -13
- package/dist/{env-w9jOyGZn.mjs → env-C6ipBLp3.mjs} +8 -8
- package/dist/{env-public-DR7ZM6d-.d.mts → env-public-CCdykygU.d.mts} +6 -23
- package/dist/{env-raw-jZpP5n47.mjs → env-raw-Cklzcde3.mjs} +3 -20
- package/dist/{env-types-CwXgeMgL.mjs → env-types-DS2_y4X8.mjs} +2 -2
- package/dist/{env-validation-CrVNjsPm.mjs → env-validation-CTn-HhG1.mjs} +1 -1
- package/dist/env-validation-cE0zcmzO.mjs +486 -0
- package/dist/{gen-DtkQhvQg.mjs → gen-CnN1Xidx.mjs} +131 -253
- package/dist/gen-F8pSZnhc.mjs +2 -0
- package/dist/{generate-GDbL7sUr.mjs → generate-Dat0UTry.mjs} +38 -4
- package/dist/generate-Rii9klHB.mjs +2 -0
- package/dist/generated-wrangler-config-DeWj5F9Y.mjs +18 -0
- package/dist/{github-cmd-D_FsOFxq.mjs → github-cmd-BdkU4Nhe.mjs} +27 -71
- package/dist/{handler-BHAn2fZJ.mjs → handler-BZ1t7-Rv.mjs} +2 -2
- package/dist/{handler-CNAwjRcW.d.mts → handler-_PqY82xe.d.mts} +1 -1
- package/dist/{headers-DlfR78Nu.mjs → headers-Di1FsD3e.mjs} +26 -81
- package/dist/{help-CVFBTmBx.mjs → help-Bug7pyK_.mjs} +18 -10
- package/dist/help-s9q7LTcu.mjs +2 -0
- package/dist/{inbound-PfQDLXc5.mjs → inbound-DmkTQeWp.mjs} +71 -222
- package/dist/{inbound-CH5Mksyy.d.mts → inbound-brj2-TM5.d.mts} +19 -58
- package/dist/index.d.mts +2 -18
- package/dist/index.mjs +200 -496
- package/dist/{info-PYWwkWyt.mjs → info-CujPwtMe.mjs} +5 -5
- package/dist/{init-Bw-fRKGp.mjs → init-ZWOJvc-Z.mjs} +179 -388
- package/dist/isr-config-DPjXM8J2.mjs +194 -0
- package/dist/{link-DlPG8iX3.mjs → link-UEc7bnF4.mjs} +8 -8
- package/dist/{list-2GN7_ueV.mjs → list-CuWeOnzk.mjs} +6 -17
- package/dist/{live-CgQuTpqD.mjs → live-BxLX-JqJ.mjs} +19 -17
- package/dist/{live-Du8jXwOW.d.mts → live-DJONVlQK.d.mts} +1 -1
- package/dist/load-user-env-DD5qveNU.mjs +49 -0
- package/dist/{local-d1-ga5O_idV.mjs → local-d1-BM3p74mm.mjs} +6 -6
- package/dist/{login-D-Q4xw3Q.mjs → login-CZ2Cqa-D.mjs} +11 -11
- package/dist/login-DhK7o1oJ.mjs +2 -0
- package/dist/{logs-rd8J-OFh.mjs → logs-TihRcLTk.mjs} +5 -5
- package/dist/migrate-BgT-hmu8.mjs +2 -0
- package/dist/{migrate-NLsjBbuM.mjs → migrate-uFwojusJ.mjs} +69 -21
- package/dist/migration-handler-Cg0Y4EPu.mjs +470 -0
- package/dist/{migration-handler-DM4clYj5.d.mts → migration-handler-CwlEQUoo.d.mts} +17 -26
- package/dist/{mime-DxCznlJq.mjs → mime-srOklVVv.mjs} +92 -395
- package/dist/{node-DJicPvPj.mjs → node-DoKbo1SZ.mjs} +8 -24
- package/dist/{operator-args-BNsW5gfp.mjs → operator-args-UnE8Y2eK.mjs} +27 -26
- package/dist/{operator-auth-AzVLbrr3.mjs → operator-auth-Cr2zCc-J.mjs} +2 -2
- package/dist/{operator-client-BQtzyG-g.mjs → operator-client-C-ROjk1I.mjs} +4 -4
- package/dist/{operator-cmd-B6f6Cg9Z.mjs → operator-cmd-C5lCctnc.mjs} +8 -8
- package/dist/operator-cmd-Cjk5DiRx.mjs +2 -0
- package/dist/{output-C50ag2r3.mjs → output-FNHKw5Ac.mjs} +36 -5
- package/dist/{package-json-DXfiT1jV.mjs → package-json-BjYqR-So.mjs} +1 -1
- package/dist/pages/client.d.mts +1 -1
- package/dist/pages/client.mjs +91 -5
- package/dist/pages/index.d.mts +1 -2
- package/dist/pages/index.mjs +6 -6
- package/dist/pages/islands-plugin.mjs +5 -83
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +1 -1
- package/dist/pages/serialize.mjs +1 -1
- package/dist/{platform-args-BoZkWQnJ.mjs → platform-args-C6Mb_I3a.mjs} +34 -58
- package/dist/platform-args-Cm7x-fot.mjs +2 -0
- package/dist/{platform-auth-config-n603OANg.mjs → platform-auth-config-CJmNkFT2.mjs} +10 -11
- package/dist/{platform-auth-protection-zxDr0hWW.mjs → platform-auth-protection-D5wvsI-Y.mjs} +36 -26
- package/dist/{platform-auth-recovery-tw9lgtgE.mjs → platform-auth-recovery-D_0I3n-1.mjs} +8 -9
- package/dist/{platform-cmd-C00YM14r.mjs → platform-cmd-Cuj4oUVo.mjs} +1 -1
- package/dist/{platform-cmd-B8-bCb7t.mjs → platform-cmd-DxxZO6e5.mjs} +17 -16
- package/dist/{platform-discovery-BC0HCKYt.mjs → platform-discovery-CHhNs8Nn.mjs} +1 -1
- package/dist/{platform-domain-p0kobLV8.mjs → platform-domain-zLXnW1G_.mjs} +5 -5
- package/dist/{platform-lifecycle-D_QEY32D.mjs → platform-lifecycle-DOW-wLfx.mjs} +1398 -2043
- package/dist/{platform-lifecycle-vFqtNPPa.mjs → platform-lifecycle-_gfnjUBr.mjs} +1 -1
- package/dist/{platform-management-oi-SvI3f.mjs → platform-management-CYrLvTGH.mjs} +1 -1
- package/dist/{platform-management-BdYblvvE.mjs → platform-management-t7HKy4-U.mjs} +632 -124
- package/dist/{platform-plans-config-CjiFv5J4.mjs → platform-plans-config-CNH6zbPX.mjs} +15 -11
- package/dist/{platform-recovery-PvNS9Nl2.mjs → platform-recovery-DeucI7A9.mjs} +6 -9
- package/dist/{platform-registry-P387v42A.mjs → platform-registry-B9mWX9LO.mjs} +18 -19
- package/dist/{platform-setup-DVe42Ws7.mjs → platform-setup-CTf6MMT9.mjs} +19 -26
- package/dist/{plugin-inference-BlQbOL0P.mjs → plugin-inference-DsARdQKE.mjs} +18 -33
- package/dist/{prepare-Dq9hTIbo.mjs → prepare-C4zfwks4.mjs} +3 -3
- package/dist/{prepare-Do96654b.mjs → prepare-CSH9dKTI.mjs} +11 -13
- package/dist/prepare-dr9uxQSV.mjs +2 -0
- package/dist/{prerender-render-Ct20jftc.mjs → prerender-render-Bfsumdkv.mjs} +8 -2
- package/dist/prerender-render.d.mts +2 -0
- package/dist/prerender-render.mjs +2 -2
- package/dist/project-DiiOBZPF.mjs +2 -0
- package/dist/{project-cmd-ti8_yTcA.mjs → project-cmd-Dq75AXzy.mjs} +19 -19
- package/dist/{project-paths-GgcMozYz.mjs → project-paths-DMvEeSau.mjs} +9 -14
- package/dist/{project-DQstYTxO.mjs → project-rqDnVsJN.mjs} +8 -4
- package/dist/{project-team-CDPE1Tsg.mjs → project-team-B3_QcStG.mjs} +6 -6
- package/dist/{project-token-CkZ1cN0Z.mjs → project-token-CvsRvv2I.mjs} +5 -5
- package/dist/{project-tsconfig-CVJhNMxs.mjs → project-tsconfig-bveqhlYA.mjs} +3 -5
- package/dist/{project-zero-trust-DdjLR61k.mjs → project-zero-trust-D1ICiwN_.mjs} +5 -5
- package/dist/{protocol-BPZaNqBo.d.mts → protocol-4H7V_3Os.d.mts} +1 -1
- package/dist/{protocol-CfaUwNs8.mjs → protocol-RNP0u7UY.mjs} +9 -3
- package/dist/{provision-BfaLiWbj.mjs → provision-DDh7ITVS.mjs} +118 -865
- package/dist/{requests-DFAqyYy8.mjs → requests-3CL3BuZh.mjs} +4 -4
- package/dist/resolve-project-B9Hr0D3n.mjs +2 -0
- package/dist/resolve-project-C_Cu7E8a.mjs +48 -0
- package/dist/{rollback-BKYXBduI.mjs → rollback-Ce1d_0J9.mjs} +7 -17
- package/dist/{route-types-CbtsIeFn.mjs → route-types-IrBuwJ7u.mjs} +35 -70
- package/dist/routing-assets-VkrKIbxE.mjs +139 -0
- package/dist/{runner-9wjsSZx-.mjs → runner-B5huK2eC.mjs} +1 -1
- package/dist/{runner-DMBKSrRk.mjs → runner-DcVDrzuR.mjs} +7 -28
- package/dist/{runner-mysql-CEzKtmFb.mjs → runner-mysql-CCtyI0p6.mjs} +4 -3
- package/dist/runner-mysql-CaJq-hd6.mjs +2 -0
- package/dist/runner-pg-BJhFZZG4.mjs +2 -0
- package/dist/{runner-pg-DV8p_zjA.mjs → runner-pg-CPd-CB_F.mjs} +1 -1
- package/dist/runtime/ai.mjs +9 -22
- package/dist/runtime/better-auth-mysql.d.mts +2 -5
- package/dist/runtime/better-auth-mysql.mjs +6 -31
- package/dist/runtime/better-auth-pg.d.mts +2 -5
- package/dist/runtime/better-auth-pg.mjs +6 -32
- package/dist/runtime/better-auth.d.mts +2 -4
- package/dist/runtime/better-auth.mjs +9 -19
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.d.mts +16 -0
- package/dist/runtime/durable.mjs +26 -2
- package/dist/runtime/email/testing.d.mts +1 -1
- package/dist/runtime/email/testing.mjs +9 -23
- package/dist/runtime/email-protocol.d.mts +12 -0
- package/dist/runtime/email-protocol.mjs +2 -70
- package/dist/runtime/email.d.mts +1 -1
- package/dist/runtime/email.mjs +79 -221
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/env-public.mjs +12 -38
- package/dist/runtime/env.d.mts +1 -12
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +1 -1
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/kv.mjs +1 -1
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-server.mjs +1 -16
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/migration-handler-mysql.d.mts +2 -2
- package/dist/runtime/migration-handler-mysql.mjs +3 -2
- package/dist/runtime/migration-handler-pg.d.mts +2 -2
- package/dist/runtime/migration-handler-pg.mjs +1 -1
- package/dist/runtime/migration-handler.d.mts +2 -2
- package/dist/runtime/migration-handler.mjs +2 -470
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/remote/binding-handler.mjs +62 -62
- package/dist/runtime/remote/index.mjs +16 -77
- package/dist/runtime/routing.d.mts +1 -4
- package/dist/runtime/routing.mjs +82 -218
- package/dist/runtime/sandbox-container.d.mts +2 -2
- package/dist/runtime/sandbox-container.mjs +2 -2
- package/dist/runtime/sandbox.d.mts +2 -2
- package/dist/runtime/sandbox.mjs +13 -6
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -3
- package/dist/runtime/ws-server.mjs +6 -28
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/{sandbox-container-Bo0eiFKz.d.mts → sandbox-container-ChQRum-j.d.mts} +3 -1
- package/dist/{sandbox-container-C6ItmVuN.mjs → sandbox-container-DBKIqDEK.mjs} +12 -1
- package/dist/{sandbox-C5LFoJMf.d.mts → sandbox-q3waMc2T.d.mts} +1 -1
- package/dist/{scan-C3uDzz6J.mjs → scan-C0BMdmEd.mjs} +84 -7
- package/dist/{secret-BAt2KMmO.mjs → secret-B5J8bBsI.mjs} +62 -80
- package/dist/{serialize-BPvnNQuA.mjs → serialize-BtQyaYoC.mjs} +10 -4
- package/dist/{skills-BgVMvQdy.mjs → skills-BJsan98C.mjs} +2 -2
- package/dist/{subcommand-prompt-BSlnD1fI.mjs → subcommand-prompt-gQ-NDA-u.mjs} +38 -43
- package/dist/sveltekit.mjs +1 -1
- package/dist/validate-C9xtFOYR.mjs +2 -0
- package/dist/{validate-C9qJArv7.mjs → validate-CheZGRE7.mjs} +4 -8
- package/dist/version-metadata-DIrqEHQo.mjs +73 -0
- package/dist/{wrangler-D9KTuqnv.mjs → wrangler-BYs07Rxy.mjs} +119 -378
- package/dist/{ws-CChrrAU-.d.mts → ws-aKVYB-fA.d.mts} +1 -1
- package/dist/yarn-pnp-DLbEFMT0.mjs +92 -0
- package/docs/guide/auth.md +2 -0
- package/docs/guide/database/postgresql.md +2 -0
- package/docs/guide/database.md +2 -0
- package/docs/guide/deployment.md +2 -2
- package/docs/guide/durable-state.md +24 -0
- package/docs/guide/platform/administration/access.md +5 -1
- package/docs/guide/platform/administration/connected-apps.md +55 -0
- package/docs/guide/platform/installation/credentials.md +3 -1
- package/docs/guide/platform/installation/first-deployment.md +1 -1
- package/docs/guide/project-collaboration.md +1 -1
- package/docs/guide/quickstart.md +2 -0
- package/docs/guide/sandboxes.md +2 -0
- package/docs/reference/api/deploy.md +23 -0
- package/docs/reference/api/pages.md +2 -0
- package/docs/reference/api.md +2 -1
- package/docs/reference/cli/auth.md +1 -1
- package/docs/reference/cli/database.md +9 -3
- package/docs/reference/cli/deploy.md +1 -1
- package/docs/reference/cli/platform-installation.md +1 -1
- package/docs/reference/cli/setup.md +2 -0
- package/package.json +14 -17
- package/skills/void/SKILL.md +4 -2
- package/dist/auth-BgX2qYSY.mjs +0 -2
- package/dist/cf-build-output-H9a97vME.mjs +0 -2
- package/dist/client-By4JjMw_.mjs +0 -2
- package/dist/collect-DLyFDiKW.mjs +0 -2
- package/dist/config-5r-YpMC-.mjs +0 -2
- package/dist/config-B_ggY-IO.mjs +0 -89
- package/dist/config-BtSFvXZx.mjs +0 -2
- package/dist/config-write-AHGesphx.mjs +0 -61
- package/dist/deploy-BsEvnlJl.mjs +0 -10455
- package/dist/deploy-C1d-YTfp.mjs +0 -2
- package/dist/dev-inbox-CK-UuPob.mjs +0 -297
- package/dist/discover-EDUf6JJw.mjs +0 -2
- package/dist/dist-_UUlL6bg.mjs +0 -2
- package/dist/env-validation-Dxdx_5wo.mjs +0 -951
- package/dist/gen-dA9hW7AV.mjs +0 -2
- package/dist/head-client-DzmJGN4C.mjs +0 -90
- package/dist/help-DzKUrQvk.mjs +0 -2
- package/dist/login-Dc-wuTDq.mjs +0 -2
- package/dist/migrate-BHp07yJE.mjs +0 -2
- package/dist/operator-cmd-Cwn50lOV.mjs +0 -2
- package/dist/pages/head-client.d.mts +0 -13
- package/dist/pages/head-client.mjs +0 -2
- package/dist/platform-args-DYgITk0D.mjs +0 -2
- package/dist/prepare-DRUV-g3X.mjs +0 -2
- package/dist/project-BiaPQ7ur.mjs +0 -2
- package/dist/provision-Wu9ZBk9L.mjs +0 -2
- package/dist/resolve-project-BIeYs9Cw.mjs +0 -2
- package/dist/resolve-project-CP8rZs_p.mjs +0 -28
- package/dist/runner-mysql-CkFqZ6CE.mjs +0 -2
- package/dist/runner-pg-BGYRFdRp.mjs +0 -2
- package/dist/runtime/env-helpers.d.mts +0 -2
- package/dist/runtime/env-helpers.mjs +0 -2
- package/dist/validate-BJr9LfXy.mjs +0 -2
- package/dist/yarn-pnp-CUX_iTPA.mjs +0 -188
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as StandardSchemaV1 } from "./standard-schema-Fo_vCAZh.mjs";
|
|
2
2
|
import { r as AuthUser } from "./auth-DkcFflXV.mjs";
|
|
3
|
-
import { a as CloudEnv } from "./handler-
|
|
3
|
+
import { a as CloudEnv } from "./handler-_PqY82xe.mjs";
|
|
4
4
|
import { WebSocketRouteMap } from "void/routes";
|
|
5
5
|
//#region src/runtime/ws.d.ts
|
|
6
6
|
type MaybePromise<T> = T | Promise<T>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { a as join, n as dirname } from "./dist-ipQi0Q8y.mjs";
|
|
2
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
|
+
//#region src/cli/yarn-pnp.ts
|
|
5
|
+
const drizzleKitBin = join(fileURLToPath(import.meta.resolve("drizzle-kit")), "..", "bin.cjs");
|
|
6
|
+
/** Read the PnP runtime files in `dir` only, or `undefined` when neither exists. */
|
|
7
|
+
function readPnpRuntimeAt(dir) {
|
|
8
|
+
const cjs = join(dir, ".pnp.cjs");
|
|
9
|
+
const loader = join(dir, ".pnp.loader.mjs");
|
|
10
|
+
const cjsExists = existsSync(cjs);
|
|
11
|
+
const loaderExists = existsSync(loader);
|
|
12
|
+
if (!cjsExists && !loaderExists) return;
|
|
13
|
+
return {
|
|
14
|
+
pnpCjs: cjsExists ? cjs : void 0,
|
|
15
|
+
pnpLoader: loaderExists ? loader : void 0
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Whether `dir` has its own package-manager lockfile, i.e. it is an install
|
|
20
|
+
* root: workspace members share the root lockfile. `packageManager` is not a
|
|
21
|
+
* signal, because a Yarn workspace member may pin it and still resolve through
|
|
22
|
+
* the root's `.pnp.cjs`.
|
|
23
|
+
*/
|
|
24
|
+
function hasLocalLockfile(dir) {
|
|
25
|
+
return existsSync(join(dir, "pnpm-lock.yaml")) || existsSync(join(dir, "package-lock.json")) || existsSync(join(dir, "yarn.lock")) || existsSync(join(dir, "bun.lock")) || existsSync(join(dir, "bun.lockb"));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Find Yarn Berry PnP runtime files at `start` or its nearest ancestor, since a
|
|
29
|
+
* monorepo keeps `.pnp.cjs` at the workspace root. A lockfile at `start` stops
|
|
30
|
+
* the walk: an outer PnP graph lacks the local install's dependencies.
|
|
31
|
+
*/
|
|
32
|
+
function findYarnPnpRuntime(start) {
|
|
33
|
+
const local = readPnpRuntimeAt(start);
|
|
34
|
+
if (local !== void 0) return {
|
|
35
|
+
dir: start,
|
|
36
|
+
runtime: local
|
|
37
|
+
};
|
|
38
|
+
if (hasLocalLockfile(start)) return;
|
|
39
|
+
let dir = dirname(start);
|
|
40
|
+
if (dir === start) return;
|
|
41
|
+
while (true) {
|
|
42
|
+
const found = readPnpRuntimeAt(dir);
|
|
43
|
+
if (found !== void 0) return {
|
|
44
|
+
dir,
|
|
45
|
+
runtime: found
|
|
46
|
+
};
|
|
47
|
+
const parent = dirname(dir);
|
|
48
|
+
if (parent === dir) return;
|
|
49
|
+
dir = parent;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Like {@link findYarnPnpRuntime}, but only when Yarn has installed into that
|
|
54
|
+
* same directory. A committed `.pnp.cjs` alone does not prove an install: its
|
|
55
|
+
* ZIP archives may not be fetched yet.
|
|
56
|
+
*/
|
|
57
|
+
function findInstalledYarnPnpRuntime(start) {
|
|
58
|
+
const found = findYarnPnpRuntime(start);
|
|
59
|
+
return found && isYarnPnpInstalled(found.dir) ? found.runtime : void 0;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Yarn writes `.yarn/install-state.gz` on every install; a zero-install
|
|
63
|
+
* checkout instead commits a populated `.yarn/cache`.
|
|
64
|
+
*/
|
|
65
|
+
function isYarnPnpInstalled(dir) {
|
|
66
|
+
if (existsSync(join(dir, ".yarn", "install-state.gz"))) return true;
|
|
67
|
+
const cacheDir = join(dir, ".yarn", "cache");
|
|
68
|
+
if (!existsSync(cacheDir)) return false;
|
|
69
|
+
try {
|
|
70
|
+
return readdirSync(cacheDir).some((e) => e.endsWith(".zip"));
|
|
71
|
+
} catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build a child env that loads the Yarn PnP runtime found at or above `root`,
|
|
77
|
+
* like `yarn node` does. Existing `NODE_OPTIONS` go after our flags so the PnP
|
|
78
|
+
* `--require` patches resolution first.
|
|
79
|
+
*/
|
|
80
|
+
function buildDrizzleKitSpawnEnv(root) {
|
|
81
|
+
const env = { ...process.env };
|
|
82
|
+
const pnp = findYarnPnpRuntime(root)?.runtime;
|
|
83
|
+
if (!pnp) return env;
|
|
84
|
+
const flags = [];
|
|
85
|
+
if (pnp.pnpCjs) flags.push(`--require ${JSON.stringify(pnp.pnpCjs)}`);
|
|
86
|
+
if (pnp.pnpLoader) flags.push(`--experimental-loader ${pathToFileURL(pnp.pnpLoader).href}`);
|
|
87
|
+
const injected = flags.join(" ");
|
|
88
|
+
env.NODE_OPTIONS = process.env.NODE_OPTIONS ? `${injected} ${process.env.NODE_OPTIONS}` : injected;
|
|
89
|
+
return env;
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { hasLocalLockfile as i, drizzleKitBin as n, findInstalledYarnPnpRuntime as r, buildDrizzleKitSpawnEnv as t };
|
package/docs/guide/auth.md
CHANGED
|
@@ -127,6 +127,8 @@ Auth sessions use the same database as your app. Void creates `BETTER_AUTH_SECRE
|
|
|
127
127
|
|
|
128
128
|
Local development needs no secret setup. To preview a production build locally, provide `BETTER_AUTH_SECRET`.
|
|
129
129
|
|
|
130
|
+
Responses to signed-in requests get `Cache-Control: no-store`, so neither the browser cache nor a shared cache keeps a user's data. A route keeps its own policy when it sets `no-store`, or `private` together with `no-cache`. To answer repeat requests with `304`, use `private, no-cache` with Hono's [`etag()`](https://hono.dev/docs/middleware/builtin/etag) middleware. If you set the `ETag` yourself, make it differ per user, so the `304` doesn't reuse another account's page. The browser cache keeps a copy of a `private, no-cache` page, so the Back button can show it again after the user signs out. Keep the default `no-store` for pages that must not stay in the browser cache.
|
|
131
|
+
|
|
130
132
|
`POST`, `PUT`, `PATCH` and `DELETE` requests and WebSocket connections from another origin don't use the signed-in session unless that origin is in `trustedOrigins`. If a separate frontend calls your app, add its origin there (see [Customization](#customization)). If your routes use their own cookies, check the request `Origin` yourself, for example with Hono's [`csrf()`](https://hono.dev/docs/middleware/builtin/csrf) middleware.
|
|
131
133
|
|
|
132
134
|
Deployed apps on Cloudflare limit auth requests per client IP with Better Auth's defaults, for example 3 sign-in attempts per 10 seconds. Each Worker instance keeps its own count. Change or turn off the limits with `rateLimit` in `auth.ts`. To share one count across instances, set `rateLimit: { storage: 'database' }`, then run `void db generate` for a direct Cloudflare deploy.
|
|
@@ -40,6 +40,8 @@ For a Void platform, deploy prompts for the connection string if needed. You can
|
|
|
40
40
|
|
|
41
41
|
Void provisions Hyperdrive without saving the connection string in project config. Both `postgres://` and `postgresql://` URLs are supported, including provider query strings such as `?sslmode=require`.
|
|
42
42
|
|
|
43
|
+
The Hyperdrive that Void creates connects with TLS in Cloudflare's default `require` mode. Hyperdrive does not use the `sslmode=verify-ca`, `sslmode=verify-full`, or `sslrootcert` settings from your connection string. To have Hyperdrive verify your database against a specific certificate authority on a direct Cloudflare deploy, [create the Hyperdrive in Cloudflare with that certificate](https://developers.cloudflare.com/hyperdrive/configuration/tls-ssl-certificates-for-hyperdrive/) and add its ID to [`cloudflare.hyperdrive`](../../integrations/cloudflare.md#databases-and-secrets).
|
|
44
|
+
|
|
43
45
|
## Schema Definition
|
|
44
46
|
|
|
45
47
|
Import schema helpers from `void/schema-pg`:
|
package/docs/guide/database.md
CHANGED
|
@@ -47,6 +47,8 @@ Choose a database during `void init`, or set `database` in `void.config.ts`:
|
|
|
47
47
|
| Managed by | Void | Bring your own database | Bring your own database |
|
|
48
48
|
| Connection | Automatic D1 binding | Hyperdrive | Hyperdrive |
|
|
49
49
|
|
|
50
|
+
A Void platform keeps Hyperdrive query caching off for your database connection, so reads reflect completed writes. An existing connection is updated on the project's next deploy.
|
|
51
|
+
|
|
50
52
|
## Schema Definition
|
|
51
53
|
|
|
52
54
|
Define your tables in `db/schema.ts` using column helpers from `void/schema-d1`, `void/schema-pg`, or `void/schema-mysql`.
|
package/docs/guide/deployment.md
CHANGED
|
@@ -73,7 +73,7 @@ If CI runs typechecking before deploy, run `void prepare` after installing depen
|
|
|
73
73
|
Use the API URL from your administrator. In a new or unlinked app:
|
|
74
74
|
|
|
75
75
|
```sh
|
|
76
|
-
void connect
|
|
76
|
+
void connect platform.example.com
|
|
77
77
|
void deploy --platform void --project my-app
|
|
78
78
|
```
|
|
79
79
|
|
|
@@ -86,7 +86,7 @@ Project owners can [share access](./project-collaboration.md). To install a plat
|
|
|
86
86
|
For a single deployment to a different platform, connect and name its project:
|
|
87
87
|
|
|
88
88
|
```sh
|
|
89
|
-
void connect
|
|
89
|
+
void connect second.example.com
|
|
90
90
|
VOID_API_URL=https://second.example.com void deploy --platform void --project my-app
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -163,3 +163,27 @@ Typed state works in local development and direct Cloudflare deploys of native V
|
|
|
163
163
|
Custom Durable Object modules are not supported on Void platforms, in meta-frameworks, or on Node.js, Bun, and Deno.
|
|
164
164
|
|
|
165
165
|
This is separate from [typed WebSocket routes](./websockets.md), which also use SQLite-backed Durable Objects and work on both direct Cloudflare and hosted Void deployments.
|
|
166
|
+
|
|
167
|
+
## Native Durable Object classes
|
|
168
|
+
|
|
169
|
+
Use `defineDurableObject` to keep a native Cloudflare class, including classes extending Cloudflare Agents. Void discovers its binding and exports the class without replacing its constructor, lifecycle, or RPC methods. Like Durable State, this supports direct Cloudflare deployments.
|
|
170
|
+
|
|
171
|
+
```ts
|
|
172
|
+
// durable-objects/workspace.ts
|
|
173
|
+
import { DurableObject } from 'cloudflare:workers';
|
|
174
|
+
import { defineDurableObject } from 'void/durable';
|
|
175
|
+
|
|
176
|
+
class WorkspaceObject extends DurableObject {
|
|
177
|
+
async fetch() {
|
|
178
|
+
return new Response('Workspace');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export const Workspace = defineDurableObject({
|
|
183
|
+
name: 'workspace',
|
|
184
|
+
class: WorkspaceObject,
|
|
185
|
+
});
|
|
186
|
+
export default Workspace;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Call `Workspace.get('project-id')` from a server handler to obtain its typed stub. Keep the resource name and instance name stable across deployments to retain storage.
|
|
@@ -11,7 +11,7 @@ For the browser admin UI, open `<API URL>/admin` and use the administrator login
|
|
|
11
11
|
Connect to your platform's API URL, then sign in as an administrator:
|
|
12
12
|
|
|
13
13
|
```sh
|
|
14
|
-
void connect
|
|
14
|
+
void connect platform.example.com --no-login
|
|
15
15
|
void platform auth login
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -158,3 +158,7 @@ Invitation history remains available after an involved account is removed. The s
|
|
|
158
158
|
remains visible when that account's login no longer exists.
|
|
159
159
|
|
|
160
160
|
`void platform signup open` allows anyone to sign up. Everyone who signs up can deploy apps on your application domain, so check how those apps [share cookies](/guide/platform/installation/domains#adding-a-domain) before opening signup. Use `void platform signup restrict` to require an allowlist match again. Disallowing an entry affects future signup; it does not suspend an existing account.
|
|
161
|
+
|
|
162
|
+
## Connected apps
|
|
163
|
+
|
|
164
|
+
Register separate applications as OAuth clients through [Connected apps](./connected-apps.md). Users connect their identity and approve each publish on Void.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Connected apps
|
|
2
|
+
|
|
3
|
+
A connected app is a separate application registered as an OAuth client on your Void installation. Users sign in on Void and decide whether to connect it. The application operator may be different from the platform administrator.
|
|
4
|
+
|
|
5
|
+
## Register an application
|
|
6
|
+
|
|
7
|
+
Open **Admin → Connected apps**. Enter the app name, its operator, and each exact HTTPS callback URL on a separate line. Wildcards and callback query strings are not supported. Enable individual publish approvals if the app builds and deploys projects.
|
|
8
|
+
|
|
9
|
+
Save the returned client ID and secret on the app's server. Void shows the secret once. The client secret authenticates that application; it does not grant access to users' accounts. Register a new client if you need replacement credentials, then disable the old one.
|
|
10
|
+
|
|
11
|
+
**Disable and revoke access** invalidates the client's grants, pending sign-ins, and publish approvals. Registration and disablement appear in the operator audit.
|
|
12
|
+
|
|
13
|
+
Local development permits exact HTTP callbacks on localhost when the platform's development authentication bypass is explicitly enabled. Production clients require HTTPS.
|
|
14
|
+
|
|
15
|
+
## Connect and disconnect
|
|
16
|
+
|
|
17
|
+
The app sends users to Void's authorization page, where Void displays its registered name, operator, callback origin, and requested permission. Sign-in permits reading the user's ID and username. It does not provide an account token or project management access.
|
|
18
|
+
|
|
19
|
+
Users can disconnect applications at `<platform API URL>/oauth/connections`. Grants also expire after an hour and become invalid when their platform login session is revoked or their account is suspended. Applications must request a new sign-in when access expires.
|
|
20
|
+
|
|
21
|
+
## Approve a publish
|
|
22
|
+
|
|
23
|
+
The app builds first, then sends the user to Void with the prepared artifact. Void displays the project name, checkpoint label, resources, manifest, and artifact digest. The user must explicitly approve on Void.
|
|
24
|
+
|
|
25
|
+
Approval permits one deployment to that user's chosen project. Void creates a missing project during approval; existing projects require ownership. The app receives a credential valid for up to fifteen minutes, restricted to that artifact's asset uploads, deployment, and receipt. Retries use the same receipt.
|
|
26
|
+
|
|
27
|
+
Published code can use that project's existing secrets and resources. Review the app operator and deployment details before approving code for an existing project. Migrations and resource changes in the approved manifest take effect during deployment.
|
|
28
|
+
|
|
29
|
+
Disabling the app or disconnecting its grant stops authorization for subsequent actions and is checked again before a queued deployment publishes. Disconnecting does not remove an app that has already been published; manage that project through Void.
|
|
30
|
+
|
|
31
|
+
## Build an OAuth client
|
|
32
|
+
|
|
33
|
+
Discover endpoints at `/.well-known/oauth-authorization-server` on the platform API origin. Use authorization code flow with `scope=profile`, a random `state`, and S256 PKCE. Authenticate token exchanges using HTTP Basic client authentication. Send access tokens as Bearer credentials to `/oauth/userinfo`; its response contains `sub` and `preferred_username`.
|
|
34
|
+
|
|
35
|
+
For publishing, package the built app with [`prepareDeployArtifact`](/reference/api/deploy). POST to `/oauth/deployment-requests` using the profile token:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
{
|
|
39
|
+
redirect_uri: registeredCallback,
|
|
40
|
+
state: publishState,
|
|
41
|
+
code_challenge: publishChallenge,
|
|
42
|
+
code_challenge_method: 'S256',
|
|
43
|
+
slug: projectSlug,
|
|
44
|
+
checkpoint: checkpointLabel,
|
|
45
|
+
artifact: prepared.artifact
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Redirect the browser to the returned `authorization_url`. Exchange its code with the publish verifier and the same registered callback. The response includes `project_id`, `approval_id`, and a `deploy:approve` access token. This publish flow is a Void extension; requesting that scope in an ordinary sign-in does not authorize deployment.
|
|
50
|
+
|
|
51
|
+
Use the token to request URLs from `POST /projects/:id/deploy/upload-urls`, upload the declared assets, and send the artifact to `POST /projects/:id/deploy`. Set `x-void-deploy-idempotency-key` to `approval_id`. Deployment uses Void's managed deployment protocol and requires the platform deployment Queue. The credential cannot read secrets, mint project tokens, delete projects, or deploy different bytes.
|
|
52
|
+
|
|
53
|
+
Revoke identity grants with `POST /oauth/revoke`, authenticated as the client. No refresh token or OpenID Connect ID token is issued.
|
|
54
|
+
|
|
55
|
+
If the API is protected by Cloudflare Access, the application operator must also configure a service identity permitted by that Access application's policy. Server OAuth endpoints and approved deployment requests still validate their own client, grant, and project authority; browser consent requires the user's company identity.
|
|
@@ -39,6 +39,8 @@ Use the following permissions for the core platform. Cloudflare may label write
|
|
|
39
39
|
| Account | Hyperdrive | Write | Write |
|
|
40
40
|
| Account | Account Analytics | Read | Read |
|
|
41
41
|
| Account | AI Gateway | Edit | Edit when installing with browser login |
|
|
42
|
+
| Account | Containers | — | Edit |
|
|
43
|
+
| Account | Cloudchamber | — | Edit |
|
|
42
44
|
| Zone | Zone | Read | — |
|
|
43
45
|
| Zone | DNS | Edit | — |
|
|
44
46
|
| Zone | Workers Routes | Edit | — |
|
|
@@ -72,7 +74,7 @@ The installer deploys the email gateway, prepares the shared mail route, and ver
|
|
|
72
74
|
|
|
73
75
|
## R2 Upload Credentials
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
The installer opens the **R2 token creation** form with a token name based on your platform's display name, **Object Read & Write**, and **Apply to all buckets in this account (including newly created buckets)** preselected. Review the settings and create an account token, or a user token if your role requires it. Save its **Access Key ID** and **Secret Access Key** in your password manager, then paste both into the installer. These differ from the management and runtime API tokens. See [R2’s token instructions](https://developers.cloudflare.com/r2/api/tokens/).
|
|
76
78
|
|
|
77
79
|
## Signing and Encryption Keys {#signing-and-encryption-keys}
|
|
78
80
|
|
|
@@ -17,7 +17,7 @@ void platform system health
|
|
|
17
17
|
Administrator login is separate from the credentials used to deploy apps. In a new or unlinked Void app directory, connect using the installed API URL and deploy your first project:
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
|
-
void connect
|
|
20
|
+
void connect void-company-api.example.workers.dev
|
|
21
21
|
void deploy --platform void --project my-first-app
|
|
22
22
|
```
|
|
23
23
|
|
|
@@ -54,7 +54,7 @@ Connect to the platform from your invitation, then see invitations addressed to
|
|
|
54
54
|
your account and respond using the invitation ID:
|
|
55
55
|
|
|
56
56
|
```sh
|
|
57
|
-
void connect
|
|
57
|
+
void connect api.example.com
|
|
58
58
|
void project team pending
|
|
59
59
|
void project team accept <invitation-id>
|
|
60
60
|
# or
|
package/docs/guide/quickstart.md
CHANGED
|
@@ -36,6 +36,8 @@ bunx void init
|
|
|
36
36
|
|
|
37
37
|
Choose your UI framework, a starter, and a deployment target. Vite+ is the default build tool. D1 is a good first database: it runs locally without a separate database server. Choose Cloudflare to deploy to your own account, or skip deployment setup for now.
|
|
38
38
|
|
|
39
|
+
You do not need to install Vite+ globally. Setup preserves your existing package-manager versions and lockfiles.
|
|
40
|
+
|
|
39
41
|
With pnpm, `pnpm create void my-app` also creates the project directory and configures native build permissions for you.
|
|
40
42
|
|
|
41
43
|
## Run locally
|
package/docs/guide/sandboxes.md
CHANGED
|
@@ -56,6 +56,8 @@ File operations live under `sandbox.files`: `readFile`, `writeFile`, `stat`, `ls
|
|
|
56
56
|
|
|
57
57
|
To reach a server inside the container, await `sandbox.fetch(port, new Request(url))`. `sandbox.running()` checks whether the container is running; `sandbox.destroy()` stops it.
|
|
58
58
|
|
|
59
|
+
On native Cloudflare deployments, `sandbox.fetch()` also supports WebSocket upgrade requests. Return its response from your Worker handler to connect the client to the container. WebSocket upgrades are currently unavailable on managed Void deployments.
|
|
60
|
+
|
|
59
61
|
`getSandbox()` options include `inactivityTimeoutMs` (default ten minutes, maximum six hours), `enableInternet` (default `false`), and string `labels`. Internet access and labels take effect on the next container start. `binding` selects a custom native binding; managed platforms use the configured binding.
|
|
60
62
|
|
|
61
63
|
For code that runs on both deployment targets, use `getSandbox()`. Direct access through `c.env.SANDBOX` is available only on local and native Cloudflare deployments.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Deployment artifacts
|
|
2
|
+
|
|
3
|
+
Use `void/deploy` from Node.js to prepare a built Void app for a managed platform deployment without platform credentials.
|
|
4
|
+
|
|
5
|
+
Build the app in managed mode inside its isolated environment:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
VOID_DEPLOY_BUILD=1 VOID_DEPLOY_PROJECT_ID=artifact npm run build
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
These values select a platform-compatible build. `artifact` is a build marker, not an existing project ID or a credential; the target project is selected during publish approval.
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { prepareDeployArtifact } from 'void/deploy';
|
|
15
|
+
|
|
16
|
+
const { artifact, assets } = await prepareDeployArtifact('/path/to/app');
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`artifact` contains the deployment manifest, content-addressed asset metadata, and base64 Worker modules. `assets` maps asset URL paths to base64 bytes. Keep this result immutable while requesting [publish approval](/guide/platform/administration/connected-apps).
|
|
20
|
+
|
|
21
|
+
Preparation packages existing build output; it does not build, contact a platform, provision resources, or deploy. It supports Void Cloudflare Worker builds. Node targets, static output, remote data, deploy-time prerendering, Sandbox, and Live resources require the normal `void deploy` workflow instead.
|
|
22
|
+
|
|
23
|
+
Run preparation inside the same isolated environment as the app build. App configuration and build plugins execute project code; keep platform credentials on the publishing server.
|
|
@@ -218,6 +218,8 @@ Imported from `"@void/solid"`.
|
|
|
218
218
|
|
|
219
219
|
Solid `Link` GET `data` is merged into the rendered `href` query string. Primitive values are serialized with `String(value)`, arrays become repeated keys, `null` and `undefined` are omitted, and nested objects throw. `prefetch` and `reloadDocument` are GET-only and throw for mutation links.
|
|
220
220
|
|
|
221
|
+
Solid re-creates the page on GET navigation and whenever the route or its params change, so `useForm()` picks up the destination record's URL and defaults; layouts persist. Within the same record, back/forward, mutations, and `router.refresh()` keep the page and update its props in place, as do resolved deferred props, so read props inside JSX or memos instead of copying them in the component body. Set `preserveState` explicitly to override the default for navigation within the same record.
|
|
222
|
+
|
|
221
223
|
## Markdown Package {#markdown-package}
|
|
222
224
|
|
|
223
225
|
The optional `@void/md` package adds Markdown pages to Pages Routing. Install it alongside a Pages adapter and add `voidMarkdown()` to your Vite plugins.
|
package/docs/reference/api.md
CHANGED
|
@@ -25,6 +25,7 @@ Use this reference to find public imports, signatures, and return types. For set
|
|
|
25
25
|
| [Durable State and WebSockets](./api/durable.md) | Persistent objects and typed connections. |
|
|
26
26
|
| [Database and seeding](./api/database.md) | Queries, operators, and seed scripts. |
|
|
27
27
|
| [KV, storage, AI, and logging](./api/resources.md) | Resource clients, cache revalidation, and logs. |
|
|
28
|
+
| [Deployment artifacts](./api/deploy.md) | Package built apps for managed deployment. |
|
|
28
29
|
| [Types](./api/types.md) | Handler context, route types, and head metadata. |
|
|
29
30
|
| [Environment variables](./api/env.md) | Validated environment values and binding types. |
|
|
30
31
|
| [Pages adapters](./api/pages.md) | React, Vue, Svelte, Solid, and Markdown. |
|
|
@@ -41,7 +42,7 @@ Import Void's app-facing APIs from these paths:
|
|
|
41
42
|
| `void/client` | `fetch`, `fetchStream`, `FetchError`, `auth`, `createAuthClient`, `AuthUser`, `AuthSession`, `AuthState` |
|
|
42
43
|
| `void/client/{framework}` | Same as `void/client`, with framework-specific Better Auth clients for `react`, `vue`, `svelte`, and `solid` |
|
|
43
44
|
| `void/ws` | `defineRoom`, `defineWebSocket`, `connect`, WebSocket context and connection types |
|
|
44
|
-
| `void/durable` | `defineDurableState`, typed state/RPC/context/migration types
|
|
45
|
+
| `void/durable` | `defineDurableState`, `defineDurableObject`, typed state/RPC/context/migration types |
|
|
45
46
|
| `void/sse` | `eventStream`, `formatSse`, `formatSseText`, `getLastEventId`, `SseStreamClosedError`, SSE message and stream types |
|
|
46
47
|
| `void/sse/client` | `connectEventStream`, browser `EventSource` wrapper types |
|
|
47
48
|
| `void/live` | `defineLiveStream`, SSE topic fanout runtime types. Server-only. |
|
|
@@ -13,7 +13,7 @@ void connect --platform void
|
|
|
13
13
|
|
|
14
14
|
Connect a project to its deployment destination. With no arguments, choose Cloudflare or a Void platform interactively. A URL selects a Void platform directly. `--platform void` offers saved platforms and an option to enter another URL.
|
|
15
15
|
|
|
16
|
-
You can
|
|
16
|
+
You can use a hostname: `void connect platform.example.com` connects over HTTPS. Loopback hosts (`localhost`, `127.0.0.1`, and `[::1]`) default to HTTP, so use `void connect localhost:8787` for a local platform. This also works in the interactive prompt. Include a scheme to override the default, for example `void connect https://localhost:8787`.
|
|
17
17
|
|
|
18
18
|
For Cloudflare, Void signs in through the browser when needed, selects an accessible account, and saves `cloudflare.account_id` in `void.config.ts` or resolved state in `void.lock.json`. It shares this setup with `void init`. An existing account selection is preserved; conflicting or inaccessible account settings must be resolved before continuing.
|
|
19
19
|
|
|
@@ -24,15 +24,21 @@ Show migration status. Displays which migrations are applied or pending locally,
|
|
|
24
24
|
|
|
25
25
|
## `void db reset` {#void-db-reset}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
```
|
|
28
|
+
void db reset [--yes]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Drop the development database and re-apply all migrations. D1 resets the local database; PostgreSQL and MySQL drop all tables in the `DATABASE_URL` database from `.env`.
|
|
32
|
+
|
|
33
|
+
When that `DATABASE_URL` points to a host other than `localhost`, Void names the database and asks before dropping its tables. Pass `--yes` to skip the prompt in scripts and CI; without a terminal, the command stops unless `--yes` is set. If `.env` uses the same URL as your deployment (for example after `void db connect`), reset drops the deployed tables.
|
|
28
34
|
|
|
29
35
|
## `void db seed` {#void-db-seed}
|
|
30
36
|
|
|
31
37
|
```
|
|
32
|
-
void db seed [--file <path>]
|
|
38
|
+
void db seed [--file <path>] [--yes]
|
|
33
39
|
```
|
|
34
40
|
|
|
35
|
-
Reset the local database, re-apply all migrations, then execute a seed file.
|
|
41
|
+
Reset the local database, re-apply all migrations, then execute a seed file. The reset works like `void db reset`, including the prompt and `--yes`.
|
|
36
42
|
|
|
37
43
|
If `--file` is omitted, Void looks for default seed files in this order: `db/seed.ts`, `db/seed.mts`, `db/seed.js`, `db/seed.mjs`, `db/seed.sql`.
|
|
38
44
|
|
|
@@ -62,7 +62,7 @@ If no project is linked and no override is provided, CLI prompts to link or crea
|
|
|
62
62
|
To deploy to another connected Void platform for one invocation:
|
|
63
63
|
|
|
64
64
|
```sh
|
|
65
|
-
void connect
|
|
65
|
+
void connect second.example.com
|
|
66
66
|
VOID_API_URL=https://second.example.com void deploy --platform void --project my-app
|
|
67
67
|
```
|
|
68
68
|
|
|
@@ -40,7 +40,7 @@ The installed platform needs a separate runtime token to provision resources for
|
|
|
40
40
|
|
|
41
41
|
To enable email during install or upgrade, set both `VOID_EMAIL_SENDER_DOMAIN` and `VOID_EMAIL_SHARED_ZONE_ID`. Void records the pair for later upgrades; supplying only one is an error.
|
|
42
42
|
|
|
43
|
-
Use `--dashboard-url https://dash.example.com` when deploying the optional user
|
|
43
|
+
Use `--dashboard-url `[`https://dash.example.com`](https://dash.example.com) when deploying the optional user
|
|
44
44
|
dashboard separately. The URL must be an HTTPS origin without credentials, a
|
|
45
45
|
path, query, or fragment. Void permits that origin's login callbacks and saves
|
|
46
46
|
it for later maintenance; it does not deploy a dashboard Worker. Omission keeps
|
|
@@ -33,6 +33,8 @@ void init [--tsconfig] [--github] [--git | --no-git]
|
|
|
33
33
|
|
|
34
34
|
Set up a new or existing Void project. In an empty directory, choose Vite+ or Vite, a framework, and a D1, PostgreSQL, MySQL, or Static Pages starter.
|
|
35
35
|
|
|
36
|
+
Vite+ projects install dependencies through `vp install`; no global Vite+ installation is required. Void preserves existing package-manager versions and lockfiles. New Vite+ projects without a package-manager configuration use pnpm without pinning a version.
|
|
37
|
+
|
|
36
38
|
In an existing app, Void adds missing dependencies and scripts and updates the Vite config. If it cannot edit your config, it prints the snippet to add.
|
|
37
39
|
|
|
38
40
|
The wizard also sets up TypeScript, agent instructions, environment declarations, and a deployment target. Choose Cloudflare, a Void platform, or skip deployment setup. If you skip sign-in, run `void connect` when you're ready. See [Quick Start](../../guide/quickstart.md).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "void",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Full-stack framework and deployment CLI for Cloudflare Workers, powered by Vite.",
|
|
5
5
|
"homepage": "https://void.cloud",
|
|
6
6
|
"bugs": {
|
|
@@ -26,23 +26,15 @@
|
|
|
26
26
|
],
|
|
27
27
|
"type": "module",
|
|
28
28
|
"imports": {
|
|
29
|
-
"#self": "./dist/index.mjs",
|
|
30
29
|
"#self/_env": "./dist/runtime/env.mjs",
|
|
31
30
|
"#self/email": "./dist/runtime/email.mjs",
|
|
32
31
|
"#self/env": "./dist/runtime/env-public.mjs",
|
|
33
32
|
"#self/client": "./dist/runtime/client.mjs",
|
|
34
33
|
"#self/handler": "./dist/runtime/handler.mjs",
|
|
35
|
-
"#self/pages-head": "./dist/pages/head.mjs",
|
|
36
|
-
"#self/pages-protocol": "./dist/pages/protocol.mjs",
|
|
37
34
|
"#self/queues": "./dist/runtime/queues.mjs",
|
|
38
35
|
"#self/remote": "./dist/runtime/remote/index.mjs",
|
|
39
36
|
"#self/remote/binding-handler": "./dist/runtime/remote/binding-handler.mjs",
|
|
40
|
-
"#self/response": "./dist/runtime/response.mjs",
|
|
41
37
|
"#self/sandbox": "./dist/runtime/sandbox.mjs",
|
|
42
|
-
"#self/sse": "./dist/runtime/sse.mjs",
|
|
43
|
-
"#self/sse/client": "./dist/runtime/sse-client.mjs",
|
|
44
|
-
"#self/live": "./dist/runtime/live.mjs",
|
|
45
|
-
"#self/live/client": "./dist/runtime/live-client.mjs",
|
|
46
38
|
"#self/runtime/live-server": "./dist/runtime/live-server.mjs",
|
|
47
39
|
"#self/runtime/fetch": "./dist/runtime/fetch.mjs",
|
|
48
40
|
"#self/runtime/fetch-stream": "./dist/runtime/fetch-stream.mjs",
|
|
@@ -335,6 +327,10 @@
|
|
|
335
327
|
"types": "./dist/runtime/limits.d.mts",
|
|
336
328
|
"import": "./dist/runtime/limits.mjs",
|
|
337
329
|
"require": "./dist/runtime/limits.mjs"
|
|
330
|
+
},
|
|
331
|
+
"./deploy": {
|
|
332
|
+
"types": "./dist/deploy.d.mts",
|
|
333
|
+
"import": "./dist/deploy.mjs"
|
|
338
334
|
}
|
|
339
335
|
},
|
|
340
336
|
"dependencies": {
|
|
@@ -346,15 +342,15 @@
|
|
|
346
342
|
"@cloudflare/workers-auth": "^0.13.1",
|
|
347
343
|
"@cloudflare/workers-types": "^5.20261009.1",
|
|
348
344
|
"@napi-rs/keyring": "^2.1.0",
|
|
349
|
-
"@void/deploy-cloudflare": "0.
|
|
350
|
-
"@void/deploy-core": "0.
|
|
351
|
-
"@void/edge": "0.
|
|
352
|
-
"@void/isr": "0.
|
|
353
|
-
"@void/platform": "0.
|
|
345
|
+
"@void/deploy-cloudflare": "0.28.0",
|
|
346
|
+
"@void/deploy-core": "0.28.0",
|
|
347
|
+
"@void/edge": "0.28.0",
|
|
348
|
+
"@void/isr": "0.28.0",
|
|
349
|
+
"@void/platform": "0.28.0",
|
|
354
350
|
"better-auth": "^1.7.7",
|
|
355
351
|
"better-sqlite3": "^13.0.3",
|
|
356
352
|
"blake3-jit": "^1.1.0",
|
|
357
|
-
"cf": "^1.0.0-beta.
|
|
353
|
+
"cf": "^1.0.0-beta.14",
|
|
358
354
|
"drizzle-arktype": "^0.1.3",
|
|
359
355
|
"drizzle-kit": "^0.31.11",
|
|
360
356
|
"drizzle-orm": "^0.45.3",
|
|
@@ -371,7 +367,8 @@
|
|
|
371
367
|
"mysql2": "^3.24.5",
|
|
372
368
|
"pg": "^8.23.1",
|
|
373
369
|
"postal-mime": "^4.0.5",
|
|
374
|
-
"proper-lockfile": "^4.1.2"
|
|
370
|
+
"proper-lockfile": "^4.1.2",
|
|
371
|
+
"terminal-link": "^5.0.0"
|
|
375
372
|
},
|
|
376
373
|
"devDependencies": {
|
|
377
374
|
"@electric-sql/pglite": "0.5.8",
|
|
@@ -397,7 +394,7 @@
|
|
|
397
394
|
"zod": "^4.6.5"
|
|
398
395
|
},
|
|
399
396
|
"peerDependencies": {
|
|
400
|
-
"@void/md": "0.
|
|
397
|
+
"@void/md": "0.28.0",
|
|
401
398
|
"arktype": ">=2.0.0",
|
|
402
399
|
"valibot": ">=1.0.0-beta.7",
|
|
403
400
|
"vite": "^8.0.0",
|
package/skills/void/SKILL.md
CHANGED
|
@@ -22,8 +22,9 @@ Use `void` and `@void/*` in imports, examples, and package manifests. Follow the
|
|
|
22
22
|
project's existing framework and deployment destination. Deploying to a Void
|
|
23
23
|
platform requires an explicit `void connect <url>` first; never infer a platform
|
|
24
24
|
from old examples, tokens, or project IDs.
|
|
25
|
-
Platform hostnames passed to `void connect` default to HTTPS
|
|
26
|
-
|
|
25
|
+
Platform hostnames passed to `void connect` default to HTTPS. Loopback hosts
|
|
26
|
+
(`localhost`, `127.0.0.1`, and `[::1]`) default to HTTP: `void connect localhost:8787`.
|
|
27
|
+
An explicit scheme overrides the default.
|
|
27
28
|
For a one-time deployment elsewhere, connect to that platform, then set
|
|
28
29
|
`VOID_API_URL` for the deploy command and pass `--project <slug>`. This preserves
|
|
29
30
|
the app's existing saved destination, including when the target project is new.
|
|
@@ -50,6 +51,7 @@ the app's existing saved destination, including when the target project is new.
|
|
|
50
51
|
| SSR and caching | `docs/guide/ssr.md`, `docs/guide/edge/*.md` |
|
|
51
52
|
| Rewrites, redirects, fallbacks | `docs/guide/edge/rewrites.md`, `docs/guide/edge/redirects.md`, `docs/reference/config.md` |
|
|
52
53
|
| Static site generation | `docs/guide/ssg.md` |
|
|
54
|
+
| Connected apps and artifact preparation | `docs/guide/platform/administration/connected-apps.md`, `docs/reference/api/deploy.md` |
|
|
53
55
|
| Deployment and CI | `docs/guide/deployment.md`, `docs/reference/cli/deploy.md` |
|
|
54
56
|
| Install or maintain a company platform | `docs/guide/self-hosted-platform.md`, `docs/reference/cli/platform-installation.md` |
|
|
55
57
|
| Develop or deploy a platform fork | `docs/guide/platform-development.md`, `docs/guide/self-hosted-platform.md` |
|
package/dist/auth-BgX2qYSY.mjs
DELETED
package/dist/client-By4JjMw_.mjs
DELETED
package/dist/config-5r-YpMC-.mjs
DELETED