void 0.10.12 → 0.20.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/AGENTS_TEMPLATE.md +6 -0
- package/{skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md → LICENSE} +1 -1
- package/README.md +34 -8
- package/dist/{auth-qgMlYp7Z.d.mts → auth-DkcFflXV.d.mts} +10 -11
- package/dist/auth-W9WII-mN.mjs +630 -0
- package/dist/{auth-cmd-BqsdZJp5.mjs → auth-cmd-CYVhSNFy.mjs} +4 -3
- package/dist/{auth-migrations-BTZ-ATvQ.mjs → auth-migrations-9vif1uj8.mjs} +53 -12
- package/dist/{better-auth-shared-BQooDxbw.mjs → better-auth-shared-CYw1T3k4.mjs} +7 -10
- package/dist/{better-auth-shared-DealXecJ.d.mts → better-auth-shared-DSCeohOK.d.mts} +10 -5
- package/dist/{build-cmd-Bujrv5q-.mjs → build-cmd-CkVD1uOh.mjs} +6 -4
- package/dist/{cache-C11V8Fxq.mjs → cache-QcUfR-ff.mjs} +9 -5
- package/dist/{cancel-deploy-fwFYF04b.mjs → cancel-deploy-DsvWKFTe.mjs} +3 -2
- package/dist/cf-access-AJ1ehiFR.mjs +42 -0
- package/dist/cf-access-DsSsZUPr.mjs +67 -0
- package/dist/cli/cli.d.mts +1 -1
- package/dist/cli/cli.mjs +1592 -153
- package/dist/cli/env-schema-probe.d.mts +48 -61
- package/dist/cli/env-schema-probe.mjs +10 -58
- package/dist/{client-Gb71-XkG.mjs → client-CyCHWSO_.mjs} +61 -463
- package/dist/cloudflare-auth-DRkGe7-s.mjs +170 -0
- package/dist/cloudflare-cmd-D3ME2GAe.mjs +62 -0
- package/dist/cloudflare-connect-BivMefMA.mjs +56 -0
- package/dist/cloudflare-operations-CPTpRW6d.mjs +566 -0
- package/dist/{config-BkTvs43g.mjs → config-BQFq7QvD.mjs} +85 -41
- package/dist/{config-CutEMNGJ.mjs → config-NOG_U1aK.mjs} +10 -15
- package/dist/connect-D9Yr-T5f.mjs +79 -0
- package/dist/{create-project-DsYvl3TB.mjs → create-project-DMV-csEm.mjs} +26 -16
- package/dist/database-provider.d.mts +21 -0
- package/dist/database-provider.mjs +6 -0
- package/dist/{db-DOiJMRt2.mjs → db-BxoUWL0F.mjs} +600 -115
- package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
- package/dist/{deploy-u7Rv9q_q.mjs → deploy-CcDoeBIf.mjs} +3451 -1986
- package/dist/dev-inbox-DkgRWLkW.mjs +307 -0
- package/dist/{discover-CJHyvYfR.mjs → discover-xvfrgJeo.mjs} +3 -3
- package/dist/{magic-string.es-ZQjdJFFn.mjs → dist-BR1quN_w.mjs} +570 -216
- package/dist/{dist-DaKKDf8D.mjs → dist-BrsS7cai.mjs} +17 -2
- package/dist/{dist-BuiRJkTd.mjs → dist-m40_XgNh.mjs} +48 -33
- package/dist/{domain-DiaNQbrl.mjs → domain-gu_iaHmn.mjs} +41 -4
- package/dist/dotenv-VQxupEUv.mjs +181 -0
- package/dist/edge.d.mts +2 -0
- package/dist/edge.mjs +2 -0
- package/dist/email-Ce6SQq-i.mjs +182 -0
- package/dist/email-r6DHJyAB.mjs +262 -0
- package/dist/{entry-D7yy4xVH.mjs → entry-DU3oDoQ3.mjs} +2 -2
- package/dist/env-D4Emu-M_.mjs +95 -0
- package/dist/env-DmU2To0C.mjs +73 -0
- package/dist/env-helpers-CyKtOBpj.d.mts +22 -0
- package/dist/env-public-D_6u46fX.d.mts +135 -0
- package/dist/{env-types-QBj-ndax.mjs → env-types-BNPhro-M.mjs} +2 -2
- package/dist/{env-validation-Dea3v3ej.mjs → env-validation-ENpMy6Ez.mjs} +68 -122
- package/dist/{gen-o_w-8yI8.mjs → gen-BKw6qHIg.mjs} +70 -15
- package/dist/{github-cmd-DKcGUNsj.mjs → github-cmd-DJS5Ab-H.mjs} +39 -31
- package/dist/{handler-Cjh8uM3Y.d.mts → handler-D1hLsObx.d.mts} +124 -122
- package/dist/{head-nmvOgFjd.d.mts → head-Do8P4puT.d.mts} +9 -8
- package/dist/{headers-nsHIFixA.mjs → headers-D8QfRX9Y.mjs} +12 -10
- package/dist/inbound-BJ70in1n.d.mts +354 -0
- package/dist/inbound-CNKxb3FY.mjs +694 -0
- package/dist/index.d.mts +61 -34
- package/dist/index.mjs +1048 -321
- package/dist/{init-3rgHKBVi.mjs → init-Dx5cgKqK.mjs} +329 -271
- package/dist/link-D_rm5sRH.mjs +52 -0
- package/dist/{list-CPwFDZ_c.mjs → list-M8XShti7.mjs} +37 -5
- package/dist/{runner-kapo9aPs.mjs → local-d1-BE8KBbMy.mjs} +116 -6
- package/dist/{login-BT3H8PN3.mjs → login-C8-UuLnp.mjs} +17 -15
- package/dist/{logs-Bt313ax7.mjs → logs-DwFU7dMW.mjs} +16 -2
- package/dist/mime-BJD7d_qL.mjs +1216 -0
- package/dist/neon-DHwd2zvC.mjs +54 -0
- package/dist/{node-Da0UcsGA.mjs → node-BkaXcpAc.mjs} +29 -8
- package/dist/operator-cmd-DYWRbWUA.mjs +348 -0
- package/dist/{agents-CtgBYqld.mjs → output-tFQLLj26.mjs} +676 -211
- package/dist/{package-json-Cx1osYo6.mjs → package-json-CPoWX79C.mjs} +1 -1
- package/dist/pages/client.d.mts +43 -41
- package/dist/pages/client.mjs +40 -33
- package/dist/pages/head-client.d.mts +10 -12
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/index.d.mts +37 -14
- package/dist/pages/index.mjs +5 -5
- package/dist/pages/islands-plugin.d.mts +25 -27
- package/dist/pages/islands-plugin.mjs +6 -4
- package/dist/pages/prefetch.d.mts +6 -7
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -1
- package/dist/pages/serialize.d.mts +7 -8
- package/dist/platform-cmd-BEOVv1PN.mjs +123 -0
- package/dist/platform-domain-BszUfiS8.mjs +228 -0
- package/dist/platform-lifecycle-CjSr6xf0.mjs +4450 -0
- package/dist/platform-management-W30iCaTL.mjs +698 -0
- package/dist/platform-recovery-pHHv4ZSg.mjs +99 -0
- package/dist/{plugin-inference-DMeavIJ6.mjs → plugin-inference-BDRfZngg.mjs} +35 -19
- package/dist/prepare-BfJvFUtJ.mjs +14 -0
- package/dist/{prepare-BoKHgMNx.mjs → prepare-CBetXvsN.mjs} +15 -24
- package/dist/{preset-BjyR3lzz.mjs → preset-lAy0B0BQ.mjs} +25 -212
- package/dist/{project-cmd-D_w-4w5B.mjs → project-cmd-DCpk1cDt.mjs} +25 -12
- package/dist/{project-paths-BQd7OmIo.mjs → project-paths-SK8nMHPp.mjs} +3 -1
- package/dist/{project-tsconfig-B-QtXjLQ.mjs → project-tsconfig-Ql2XsSQp.mjs} +2 -2
- package/dist/{protocol-Bnb0LFp3.d.mts → protocol-C-pqYJjE.d.mts} +3 -4
- package/dist/{provision-rShh6MKY.mjs → provision-Blnstcm2.mjs} +78 -45
- package/dist/r2-conditions-D1Wk8i7b.mjs +30 -0
- package/dist/{requests-B8sZxaFM.mjs → requests-Dn8Vheh1.mjs} +5 -3
- package/dist/{resolve-project-BBMtLLV9.mjs → resolve-project--Vxawf7z.mjs} +2 -2
- package/dist/rollback-CtlPXEBi.mjs +166 -0
- package/dist/{rolldown-runtime-DJK8HYOj.mjs → rolldown-runtime-rQ84J-ij.mjs} +1 -1
- package/dist/{route-types-COI2DsZv.mjs → route-types-Da-DpyUp.mjs} +85 -26
- package/dist/routes-stub.d.mts +22 -23
- package/dist/runner-mysql-CgRFl3s6.mjs +61 -0
- package/dist/{runner-pg-CHM76xuC.mjs → runner-pg-DCkWPsWS.mjs} +18 -6
- package/dist/runtime/ai.d.mts +21 -14
- package/dist/runtime/ai.mjs +5 -4
- package/dist/runtime/auth-client-react.d.mts +3 -5
- package/dist/runtime/auth-client-solid.d.mts +3 -5
- package/dist/runtime/auth-client-svelte.d.mts +3 -5
- package/dist/runtime/auth-client-vue.d.mts +3 -5
- package/dist/runtime/auth-client.d.mts +3 -5
- package/dist/runtime/auth.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.d.mts +10 -0
- package/dist/runtime/better-auth-mysql.mjs +49 -0
- package/dist/runtime/better-auth-pg.d.mts +8 -9
- package/dist/runtime/better-auth-pg.mjs +2 -2
- package/dist/runtime/better-auth.d.mts +8 -9
- package/dist/runtime/better-auth.mjs +2 -2
- package/dist/runtime/client-react.d.mts +1 -1
- package/dist/runtime/client-solid.d.mts +1 -1
- package/dist/runtime/client-svelte.d.mts +1 -1
- package/dist/runtime/client-vue.d.mts +1 -1
- package/dist/runtime/client.d.mts +1 -1
- package/dist/runtime/db-mysql.d.mts +2 -0
- package/dist/runtime/db-mysql.mjs +1 -0
- package/dist/runtime/db.d.mts +10 -11
- package/dist/runtime/durable.d.mts +47 -0
- package/dist/runtime/durable.mjs +146 -0
- package/dist/runtime/email/testing.d.mts +112 -0
- package/dist/runtime/email/testing.mjs +283 -0
- package/dist/runtime/email.d.mts +30 -0
- package/dist/runtime/email.mjs +573 -0
- package/dist/runtime/env-helpers.d.mts +2 -2
- package/dist/runtime/env-helpers.mjs +5 -42
- package/dist/runtime/env-public-client.d.mts +10 -11
- package/dist/runtime/env-public-client.mjs +1 -1
- package/dist/runtime/env-public.d.mts +2 -2
- package/dist/runtime/env-public.mjs +104 -49
- package/dist/runtime/env.d.mts +19 -18
- package/dist/runtime/env.mjs +15 -2
- package/dist/runtime/fetch-stream.d.mts +20 -21
- package/dist/runtime/fetch.d.mts +15 -16
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/isr.d.mts +21 -22
- package/dist/runtime/isr.mjs +26 -8
- package/dist/runtime/kv.d.mts +9 -10
- package/dist/runtime/live-client.d.mts +5 -7
- package/dist/runtime/live-client.mjs +9 -7
- package/dist/runtime/live-server.d.mts +4 -5
- package/dist/runtime/live.d.mts +22 -24
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/log.d.mts +16 -17
- package/dist/runtime/migration-handler-mysql.d.mts +4 -0
- package/dist/runtime/migration-handler-mysql.mjs +81 -0
- package/dist/runtime/migration-handler-pg.d.mts +2 -4
- package/dist/runtime/migration-handler.d.mts +5 -6
- package/dist/runtime/migration-handler.mjs +4 -3
- package/dist/runtime/queues.d.mts +3 -4
- package/dist/runtime/queues.mjs +2 -1
- package/dist/runtime/remote/binding-handler.d.mts +10 -12
- package/dist/runtime/remote/binding-handler.mjs +24 -3
- package/dist/runtime/remote/index.d.mts +5 -6
- package/dist/runtime/remote/index.mjs +21 -18
- package/dist/runtime/response.d.mts +10 -11
- package/dist/runtime/sandbox.d.mts +56 -55
- package/dist/runtime/sandbox.mjs +57 -49
- package/dist/runtime/schema-mysql.d.mts +1 -0
- package/dist/runtime/schema-mysql.mjs +2 -0
- package/dist/runtime/seed.d.mts +14 -9
- package/dist/runtime/sse-client.d.mts +6 -7
- package/dist/runtime/sse.d.mts +11 -12
- package/dist/runtime/storage.d.mts +3 -4
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +12 -12
- package/dist/runtime/ws-server.mjs +32 -4
- package/dist/runtime/ws.d.mts +19 -21
- package/dist/{scan-DYXkrasO.mjs → scan-BMH4rzlv.mjs} +53 -31
- package/dist/{scan-DEwlM_Xy.mjs → scan-CpK-57ug.mjs} +9 -5
- package/dist/{secret-Dt32J6RI.mjs → secret-BqTxGqki.mjs} +62 -5
- package/dist/{skills-CLjN0uUO.mjs → skills-Q46GZMO-.mjs} +6 -4
- package/dist/{standard-schema-DJ0HW7QP.d.mts → standard-schema-Fo_vCAZh.d.mts} +6 -6
- package/dist/{subcommand-prompt-BzV8iQZo.mjs → subcommand-prompt-WfySCQ7S.mjs} +67 -48
- package/dist/sveltekit.d.mts +12 -11
- package/dist/sveltekit.mjs +1 -1
- package/dist/types-BAp5AEBU.d.mts +79 -0
- package/dist/types-CKWnYgfy.d.mts +1 -0
- package/dist/{validate-Cw_RLeTj.mjs → validate-Bihr8WBi.mjs} +3 -3
- package/dist/wrangler--imS8n0d.mjs +1796 -0
- package/dist/{yarn-pnp-DJn3SAHF.mjs → yarn-pnp-DxSInkzL.mjs} +1 -1
- package/package.json +79 -65
- package/schema.json +35 -3
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
- package/skills/void/SKILL.md +59 -2
- package/skills/void/docs/guide/ai.md +32 -14
- package/skills/void/docs/guide/app-types.md +6 -6
- package/skills/void/docs/guide/auth.md +14 -16
- package/skills/void/docs/guide/database/d1.md +6 -0
- package/skills/void/docs/guide/database/mysql.md +60 -0
- package/skills/void/docs/guide/database/postgresql.md +14 -9
- package/skills/void/docs/guide/database.md +39 -26
- package/skills/void/docs/guide/deployment.md +163 -22
- package/skills/void/docs/guide/durable-state.md +140 -0
- package/skills/void/docs/guide/edge/headers.md +5 -5
- package/skills/void/docs/guide/edge/prerendering.md +2 -0
- package/skills/void/docs/guide/edge/revalidation.md +21 -6
- package/skills/void/docs/guide/edge/rewrites.md +18 -14
- package/skills/void/docs/guide/edge/static-assets.md +23 -8
- package/skills/void/docs/guide/email.md +609 -0
- package/skills/void/docs/guide/env-migration.md +109 -0
- package/skills/void/docs/guide/env-vars.md +70 -248
- package/skills/void/docs/guide/index.md +15 -17
- package/skills/void/docs/guide/jobs.md +8 -5
- package/skills/void/docs/guide/live.md +7 -15
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +8 -4
- package/skills/void/docs/guide/pages-routing/islands.md +3 -3
- package/skills/void/docs/guide/pages-routing/loaders.md +6 -4
- package/skills/void/docs/guide/pages-routing/overview.md +7 -7
- package/skills/void/docs/guide/platform-administration.md +212 -0
- package/skills/void/docs/guide/platform-development.md +235 -0
- package/skills/void/docs/guide/queues.md +10 -10
- package/skills/void/docs/guide/quickstart.md +46 -67
- package/skills/void/docs/guide/remote-dev.md +8 -6
- package/skills/void/docs/guide/sandboxes.md +33 -16
- package/skills/void/docs/guide/self-hosted-platform.md +553 -0
- package/skills/void/docs/guide/server-routing.md +25 -5
- package/skills/void/docs/guide/sse.md +4 -4
- package/skills/void/docs/guide/ssg.md +5 -3
- package/skills/void/docs/guide/storage.md +2 -2
- package/skills/void/docs/guide/websockets.md +18 -7
- package/skills/void/docs/index.md +3 -3
- package/skills/void/docs/integrations/agents.md +6 -64
- package/skills/void/docs/integrations/cloudflare.md +165 -146
- package/skills/void/docs/integrations/frameworks/analog.md +4 -4
- package/skills/void/docs/integrations/frameworks/astro.md +5 -5
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -5
- package/skills/void/docs/integrations/frameworks/overview.md +3 -3
- package/skills/void/docs/integrations/frameworks/react-router.md +3 -3
- package/skills/void/docs/integrations/frameworks/sveltekit.md +3 -3
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +2 -2
- package/skills/void/docs/integrations/nodejs-bun-deno.md +11 -4
- package/skills/void/docs/reference/api.md +42 -6
- package/skills/void/docs/reference/cli.md +637 -159
- package/skills/void/docs/reference/config.md +80 -25
- package/skills/void/docs/reference/resource-inference.md +13 -9
- package/skills/void/docs/reference/structure.md +10 -11
- package/AGENT_PROMPT.md +0 -19
- package/dist/cf-access-Bqw81xAf.mjs +0 -22
- package/dist/env-CZy5MorI.mjs +0 -299
- package/dist/env-helpers-z4stu8uc.d.mts +0 -52
- package/dist/env-mask-Dd47NbR6.mjs +0 -90
- package/dist/env-public-BfiLcMBk.d.mts +0 -140
- package/dist/link-CdGHSIy-.mjs +0 -45
- package/dist/mcp-DoM3_nhd.mjs +0 -377
- package/dist/project-paths-GpziKeQQ.d.mts +0 -25
- package/dist/providers-BNKRacMr.d.mts +0 -7
- package/dist/proxy-D-3_D-Gl.mjs +0 -5
- package/dist/rollback-CkvTFXx5.mjs +0 -90
- package/dist/runtime/isr-cache.d.mts +0 -207
- package/dist/runtime/isr-cache.mjs +0 -523
- package/dist/types-lLjNE9Qp.d.mts +0 -51
- package/getting-started-prompt.txt +0 -28
- package/skills/void/command/void.md +0 -7
- package/skills/void/docs/integrations/auth-providers.md +0 -0
- package/skills/void/docs/integrations/payment-processors.md +0 -0
- package/skills/void/docs/node_modules/@iconify/vue/README.md +0 -408
- package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +0 -5
- package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +0 -103
- package/skills/void/docs/node_modules/oxc-minify/README.md +0 -78
- package/skills/void/docs/node_modules/reka-ui/README.md +0 -80
- package/skills/void/docs/node_modules/vitepress/README.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/api-examples.md +0 -49
- package/skills/void/docs/node_modules/vitepress/template/index.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +0 -85
- package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +0 -101
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +0 -19
- package/skills/void/docs/node_modules/void/CLAUDE.md +0 -219
- package/skills/void/docs/node_modules/void/README.md +0 -90
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +0 -685
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +0 -396
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +0 -219
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +0 -37
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +0 -189
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +0 -143
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +0 -1272
- package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +0 -19
- package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +0 -22
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +0 -153
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +0 -565
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +0 -127
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +0 -600
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +0 -386
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +0 -95
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +0 -58
- package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +0 -32
- package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +0 -99
- package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +0 -79
- package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +0 -44
- package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +0 -65
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +0 -403
- package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +0 -48
- package/skills/void/docs/node_modules/void/node_modules/hono/README.md +0 -85
- package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +0 -452
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +0 -76
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +0 -325
- package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +0 -398
- package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +0 -96
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +0 -183
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +0 -94
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +0 -63
- package/skills/void/docs/node_modules/void/node_modules/zod/README.md +0 -191
- package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +0 -175
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +0 -76
- package/skills/void/docs/node_modules/void/skills/void/command/void.md +0 -7
- package/skills/void/docs/node_modules/void/test/e2e/README.md +0 -85
|
@@ -1,462 +1,10 @@
|
|
|
1
|
-
import { n as __exportAll } from "./rolldown-runtime-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { t as cfAccessHeaders } from "./cf-access-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { Entry } from "@napi-rs/keyring";
|
|
9
|
-
import { spawnSync } from "node:child_process";
|
|
10
|
-
//#region src/cli/cf-access.ts
|
|
11
|
-
const probedHosts = /* @__PURE__ */ new Set();
|
|
12
|
-
/**
|
|
13
|
-
* If the CLI is about to talk to a Cloudflare-Access-gated staging host,
|
|
14
|
-
* probe the locally-installed `cloudflared` binary for a cached user JWT
|
|
15
|
-
* and export it as `CF_ACCESS_TOKEN`. On interactive shells with no cached
|
|
16
|
-
* token, open a browser login flow to populate the cache, then re-read it.
|
|
17
|
-
*
|
|
18
|
-
* Cached per-host so that an early non-gated call (e.g. prod) does not
|
|
19
|
-
* permanently disable the probe for a later gated call (e.g. staging) in
|
|
20
|
-
* the same process. Noop when:
|
|
21
|
-
* - a service-token pair is already set (CI path)
|
|
22
|
-
* - `CF_ACCESS_TOKEN` is already set (manual override or prior probe)
|
|
23
|
-
* - the target host is not gated
|
|
24
|
-
* - `cloudflared` is not installed
|
|
25
|
-
*/
|
|
26
|
-
function ensureCloudflaredToken(apiUrl) {
|
|
27
|
-
if (process.env.CF_ACCESS_CLIENT_ID && process.env.CF_ACCESS_CLIENT_SECRET) return;
|
|
28
|
-
if (process.env.CF_ACCESS_TOKEN) return;
|
|
29
|
-
if (!isGatedHost(apiUrl)) return;
|
|
30
|
-
const host = new URL(apiUrl).hostname;
|
|
31
|
-
if (probedHosts.has(host)) return;
|
|
32
|
-
probedHosts.add(host);
|
|
33
|
-
let token = runCloudflared([
|
|
34
|
-
"access",
|
|
35
|
-
"token",
|
|
36
|
-
`-app=${apiUrl}`
|
|
37
|
-
]);
|
|
38
|
-
if (!token && process.stdin.isTTY && process.stdout.isTTY) {
|
|
39
|
-
runCloudflared([
|
|
40
|
-
"access",
|
|
41
|
-
"login",
|
|
42
|
-
apiUrl
|
|
43
|
-
], {
|
|
44
|
-
inherit: true,
|
|
45
|
-
timeoutMs: 12e4
|
|
46
|
-
});
|
|
47
|
-
token = runCloudflared([
|
|
48
|
-
"access",
|
|
49
|
-
"token",
|
|
50
|
-
`-app=${apiUrl}`
|
|
51
|
-
]);
|
|
52
|
-
}
|
|
53
|
-
if (token) process.env.CF_ACCESS_TOKEN = token;
|
|
54
|
-
}
|
|
55
|
-
function runCloudflared(args, opts) {
|
|
56
|
-
try {
|
|
57
|
-
const result = spawnSync("cloudflared", args, {
|
|
58
|
-
encoding: "utf-8",
|
|
59
|
-
stdio: opts?.inherit ? "inherit" : [
|
|
60
|
-
"ignore",
|
|
61
|
-
"pipe",
|
|
62
|
-
"pipe"
|
|
63
|
-
],
|
|
64
|
-
timeout: opts?.timeoutMs ?? 5e3
|
|
65
|
-
});
|
|
66
|
-
if (result.error || result.status !== 0) return null;
|
|
67
|
-
const out = (result.stdout ?? "").trim();
|
|
68
|
-
return out.length > 0 ? out : null;
|
|
69
|
-
} catch {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
function isGatedHost(apiUrl) {
|
|
74
|
-
try {
|
|
75
|
-
const host = new URL(apiUrl).hostname;
|
|
76
|
-
return host.endsWith(".staging.void.cloud") || host.endsWith(".staging.void.app");
|
|
77
|
-
} catch {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
//#endregion
|
|
82
|
-
//#region src/cli/project.ts
|
|
83
|
-
var project_exports = /* @__PURE__ */ __exportAll({
|
|
84
|
-
isVoidInternalStaging: () => isVoidInternalStaging,
|
|
85
|
-
readProjectConfig: () => readProjectConfig,
|
|
86
|
-
removeProjectConfig: () => removeProjectConfig,
|
|
87
|
-
writeProjectConfig: () => writeProjectConfig
|
|
88
|
-
});
|
|
89
|
-
const PROJECT_FILE = ".void/project.json";
|
|
90
|
-
function readProjectConfigFile(root) {
|
|
91
|
-
const filePath = join(root, PROJECT_FILE);
|
|
92
|
-
try {
|
|
93
|
-
const raw = readFileSync(filePath, "utf-8");
|
|
94
|
-
const config = JSON.parse(raw);
|
|
95
|
-
if (typeof config !== "object" || config === null || Array.isArray(config)) return null;
|
|
96
|
-
return config;
|
|
97
|
-
} catch {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Read the project config from the project root.
|
|
103
|
-
* Returns null if no project.json exists.
|
|
104
|
-
* A file containing only internal metadata is not treated as a linked project.
|
|
105
|
-
*/
|
|
106
|
-
function readProjectConfig(root) {
|
|
107
|
-
const config = readProjectConfigFile(root);
|
|
108
|
-
if (!config || typeof config.projectId !== "string" || typeof config.slug !== "string") return null;
|
|
109
|
-
const result = {
|
|
110
|
-
projectId: config.projectId,
|
|
111
|
-
slug: config.slug
|
|
112
|
-
};
|
|
113
|
-
if (config.voidInternalStaging === true) result.voidInternalStaging = true;
|
|
114
|
-
return result;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Internal-only platform developers' staging switch.
|
|
118
|
-
* This intentionally lives with the project link state, not public void.json.
|
|
119
|
-
*/
|
|
120
|
-
function isVoidInternalStaging(root) {
|
|
121
|
-
return readProjectConfigFile(root)?.voidInternalStaging === true;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Write the project config to the project root.
|
|
125
|
-
*/
|
|
126
|
-
function writeProjectConfig(root, config) {
|
|
127
|
-
const filePath = join(root, PROJECT_FILE);
|
|
128
|
-
const existing = readProjectConfigFile(root);
|
|
129
|
-
const next = {
|
|
130
|
-
projectId: config.projectId,
|
|
131
|
-
slug: config.slug
|
|
132
|
-
};
|
|
133
|
-
if (config.voidInternalStaging === true || existing?.voidInternalStaging === true) next.voidInternalStaging = true;
|
|
134
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
135
|
-
writeFileSync(filePath, JSON.stringify(next, null, 2) + "\n");
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Remove the project config file. Returns true if removed, false if it didn't exist.
|
|
139
|
-
*/
|
|
140
|
-
function removeProjectConfig(root) {
|
|
141
|
-
const filePath = join(root, PROJECT_FILE);
|
|
142
|
-
try {
|
|
143
|
-
rmSync(filePath);
|
|
144
|
-
return true;
|
|
145
|
-
} catch {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
//#endregion
|
|
150
|
-
//#region src/cli/auth.ts
|
|
151
|
-
const CONFIG_DIR = join(homedir(), ".void");
|
|
152
|
-
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
153
|
-
const KEYRING_SERVICE = "dev.void.cli";
|
|
154
|
-
function keyringGet(account) {
|
|
155
|
-
try {
|
|
156
|
-
return new Entry(KEYRING_SERVICE, account).getPassword();
|
|
157
|
-
} catch {
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
function keyringSet(account, password) {
|
|
162
|
-
try {
|
|
163
|
-
new Entry(KEYRING_SERVICE, account).setPassword(password);
|
|
164
|
-
return true;
|
|
165
|
-
} catch {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
function keyringDelete(account) {
|
|
170
|
-
try {
|
|
171
|
-
new Entry(KEYRING_SERVICE, account).deletePassword();
|
|
172
|
-
return true;
|
|
173
|
-
} catch {
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
function readConfig() {
|
|
178
|
-
try {
|
|
179
|
-
return JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
|
|
180
|
-
} catch {
|
|
181
|
-
return {};
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
function writeConfig(config) {
|
|
185
|
-
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
186
|
-
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", { mode: 384 });
|
|
187
|
-
}
|
|
188
|
-
function isStagingMode(root = process.cwd()) {
|
|
189
|
-
return isVoidInternalStaging(root);
|
|
190
|
-
}
|
|
191
|
-
function getSiteDomain(root = process.cwd()) {
|
|
192
|
-
return isStagingMode(root) ? "staging.void.app" : "void.app";
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Read the deploy token.
|
|
196
|
-
* Priority: VOID_TOKEN env var > system keychain > ~/.void/config.json (auto-migrated)
|
|
197
|
-
*/
|
|
198
|
-
function getToken(root = process.cwd()) {
|
|
199
|
-
const envToken = process.env.VOID_TOKEN;
|
|
200
|
-
if (envToken) return envToken;
|
|
201
|
-
const account = isStagingMode(root) ? "stagingToken" : "token";
|
|
202
|
-
const keyringToken = keyringGet(account);
|
|
203
|
-
if (keyringToken) return keyringToken;
|
|
204
|
-
const config = readConfig();
|
|
205
|
-
const fileToken = config[account];
|
|
206
|
-
if (fileToken) {
|
|
207
|
-
if (keyringSet(account, fileToken)) {
|
|
208
|
-
delete config[account];
|
|
209
|
-
try {
|
|
210
|
-
writeConfig(config);
|
|
211
|
-
} catch {}
|
|
212
|
-
}
|
|
213
|
-
return fileToken;
|
|
214
|
-
}
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
function getTokenSource() {
|
|
218
|
-
return process.env.VOID_TOKEN ? "ci" : "manual";
|
|
219
|
-
}
|
|
220
|
-
function saveToken(token, root = process.cwd()) {
|
|
221
|
-
const account = isStagingMode(root) ? "stagingToken" : "token";
|
|
222
|
-
if (keyringSet(account, token)) return;
|
|
223
|
-
console.warn(import_picocolors.default.yellow("System keychain unavailable, storing token in ~/.void/config.json"));
|
|
224
|
-
const config = readConfig();
|
|
225
|
-
config[account] = token;
|
|
226
|
-
writeConfig(config);
|
|
227
|
-
}
|
|
228
|
-
function removeToken(root = process.cwd()) {
|
|
229
|
-
const account = isStagingMode(root) ? "stagingToken" : "token";
|
|
230
|
-
let removed = false;
|
|
231
|
-
if (keyringDelete(account)) removed = true;
|
|
232
|
-
try {
|
|
233
|
-
const config = readConfig();
|
|
234
|
-
if (config[account]) {
|
|
235
|
-
delete config[account];
|
|
236
|
-
writeConfig(config);
|
|
237
|
-
removed = true;
|
|
238
|
-
}
|
|
239
|
-
} catch {}
|
|
240
|
-
return removed;
|
|
241
|
-
}
|
|
242
|
-
const DEFAULT_API_URL = "https://api.void.cloud";
|
|
243
|
-
const STAGING_API_URL = "https://api.staging.void.cloud";
|
|
244
|
-
function base64Url(buffer) {
|
|
245
|
-
return buffer.toString("base64").replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", "");
|
|
246
|
-
}
|
|
247
|
-
function createCodeVerifier() {
|
|
248
|
-
return base64Url(randomBytes(32));
|
|
249
|
-
}
|
|
250
|
-
function createCodeChallenge(verifier) {
|
|
251
|
-
return base64Url(createHash("sha256").update(verifier).digest());
|
|
252
|
-
}
|
|
253
|
-
async function exchangeLoginCode(apiUrl, code, state, codeVerifier) {
|
|
254
|
-
const base = apiUrl.endsWith("/") ? apiUrl : `${apiUrl}/`;
|
|
255
|
-
ensureCloudflaredToken(apiUrl);
|
|
256
|
-
const res = await fetch(new URL("auth/cli/token", base), {
|
|
257
|
-
method: "POST",
|
|
258
|
-
headers: {
|
|
259
|
-
"Content-Type": "application/json",
|
|
260
|
-
...cfAccessHeaders(process.env)
|
|
261
|
-
},
|
|
262
|
-
body: JSON.stringify({
|
|
263
|
-
code,
|
|
264
|
-
state,
|
|
265
|
-
code_verifier: codeVerifier
|
|
266
|
-
})
|
|
267
|
-
});
|
|
268
|
-
if (!res.ok) throw new Error(`auth: Failed to exchange login code (${res.status}). Try logging in again.`);
|
|
269
|
-
let body;
|
|
270
|
-
try {
|
|
271
|
-
body = await res.json();
|
|
272
|
-
} catch {
|
|
273
|
-
throw new Error("auth: Login code exchange returned an invalid response.");
|
|
274
|
-
}
|
|
275
|
-
if (!body || typeof body !== "object" || !("token" in body) || typeof body.token !== "string" || body.token.length === 0) throw new Error("auth: Login code exchange did not return a token.");
|
|
276
|
-
return body.token;
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Read the API URL from environment or config file.
|
|
280
|
-
* Priority: VOID_API_URL env var > ~/.void/config.json > default
|
|
281
|
-
*/
|
|
282
|
-
function getApiUrl(root = process.cwd()) {
|
|
283
|
-
return process.env.VOID_API_URL ?? readConfig().api ?? (isStagingMode(root) ? STAGING_API_URL : DEFAULT_API_URL);
|
|
284
|
-
}
|
|
285
|
-
function page(title, message) {
|
|
286
|
-
return `<!DOCTYPE html>
|
|
287
|
-
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
288
|
-
<title>${title} - Void</title>
|
|
289
|
-
<style>:root{color-scheme:light dark}*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,-apple-system,sans-serif;min-height:100vh;display:flex;align-items:center;justify-content:center;background:#fafafa;color:#111}.card{text-align:center;padding:3rem}h1{font-size:1.5rem;font-weight:600;margin-bottom:.75rem}p{color:#666;font-size:1rem}@media (prefers-color-scheme:dark){body{background:#0a0a0a;color:#fafafa}p{color:#a3a3a3}}</style>
|
|
290
|
-
</head><body><div class="card"><h1>${title}</h1><p>${message}</p></div></body></html>`;
|
|
291
|
-
}
|
|
292
|
-
function openBrowser(url, execFile) {
|
|
293
|
-
const ignore = () => {};
|
|
294
|
-
if (process.platform === "win32") {
|
|
295
|
-
execFile("cmd.exe", [
|
|
296
|
-
"/c",
|
|
297
|
-
"start",
|
|
298
|
-
"",
|
|
299
|
-
url
|
|
300
|
-
], ignore);
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
if (process.platform === "darwin") {
|
|
304
|
-
execFile("open", [url], ignore);
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
if (process.env.WSL_DISTRO_NAME || process.env.WSL_INTEROP) {
|
|
308
|
-
execFile("wslview", [url], (error) => {
|
|
309
|
-
if (error) execFile("cmd.exe", [
|
|
310
|
-
"/c",
|
|
311
|
-
"start",
|
|
312
|
-
"",
|
|
313
|
-
url
|
|
314
|
-
], ignore);
|
|
315
|
-
});
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
execFile("xdg-open", [url], ignore);
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Start a local HTTP callback server, open the browser to a caller-built
|
|
322
|
-
* authorize URL, and wait for the redirect back to `http://localhost:PORT/callback`.
|
|
323
|
-
*
|
|
324
|
-
* The server validates the `state` it appended to the callback URL against the
|
|
325
|
-
* incoming request, then runs the caller's `finalize` hook INSIDE the request
|
|
326
|
-
* handler (so the browser only ever sees the success page after the underlying
|
|
327
|
-
* exchange/link actually succeeded). On finalize success it renders the success
|
|
328
|
-
* HTML and resolves with finalize's return value; on finalize failure it
|
|
329
|
-
* renders the same "could not complete" failure page the login flow uses and
|
|
330
|
-
* rejects with the thrown error. The server is always closed before settling.
|
|
331
|
-
*
|
|
332
|
-
* `onUrl` is invoked with the authorize URL once the local server is listening,
|
|
333
|
-
* so callers can show the URL to the user as a manual fallback when the browser
|
|
334
|
-
* fails to open (common on WSL2, headless SSH, Docker, etc.). To match the
|
|
335
|
-
* login flow it fires immediately before the browser is opened.
|
|
336
|
-
*
|
|
337
|
-
* `execFile` is injectable so tests can avoid launching a real browser.
|
|
338
|
-
*/
|
|
339
|
-
async function awaitBrowserCallback(options) {
|
|
340
|
-
const http = await import("node:http");
|
|
341
|
-
const { state, buildAuthUrl, finalize, describeError, validate, onUrl } = options;
|
|
342
|
-
const timeoutMs = options.timeoutMs ?? 300 * 1e3;
|
|
343
|
-
const execFile = options.execFile ?? (await import("node:child_process")).execFile;
|
|
344
|
-
return new Promise((resolve, reject) => {
|
|
345
|
-
let settled = false;
|
|
346
|
-
const fail = (error) => {
|
|
347
|
-
if (settled) return;
|
|
348
|
-
settled = true;
|
|
349
|
-
server.close();
|
|
350
|
-
reject(error);
|
|
351
|
-
};
|
|
352
|
-
const succeed = (result) => {
|
|
353
|
-
if (settled) return;
|
|
354
|
-
settled = true;
|
|
355
|
-
server.close();
|
|
356
|
-
resolve(result);
|
|
357
|
-
};
|
|
358
|
-
const server = http.createServer(async (req, res) => {
|
|
359
|
-
const url = new URL(req.url, `http://localhost`);
|
|
360
|
-
if (url.pathname !== "/callback") {
|
|
361
|
-
res.writeHead(404);
|
|
362
|
-
res.end("Not found");
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
if (url.searchParams.get("state") !== state) {
|
|
366
|
-
res.writeHead(400, { "Content-Type": "text/html" });
|
|
367
|
-
res.end(page("Login failed", "Invalid login callback. Please try again."));
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
const errorMessage = describeError?.(url.searchParams);
|
|
371
|
-
if (errorMessage) {
|
|
372
|
-
res.writeHead(403, { "Content-Type": "text/html" });
|
|
373
|
-
res.end(page("Login failed", errorMessage));
|
|
374
|
-
fail(new Error(errorMessage));
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
const invalidMessage = validate?.(url.searchParams);
|
|
378
|
-
if (invalidMessage) {
|
|
379
|
-
res.writeHead(400, { "Content-Type": "text/html" });
|
|
380
|
-
res.end(page("Login failed", invalidMessage));
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
let result;
|
|
384
|
-
try {
|
|
385
|
-
result = await finalize(url.searchParams);
|
|
386
|
-
} catch (err) {
|
|
387
|
-
if (settled) return;
|
|
388
|
-
res.writeHead(400, { "Content-Type": "text/html" });
|
|
389
|
-
res.end(page("Login failed", "Could not complete login. Please try again."));
|
|
390
|
-
fail(err instanceof Error ? err : /* @__PURE__ */ new Error("auth: Failed to complete login."));
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
if (settled) return;
|
|
394
|
-
res.writeHead(200, { "Content-Type": "text/html" });
|
|
395
|
-
res.end(page("Login successful!", "You can close this tab and return to the terminal."));
|
|
396
|
-
succeed(result);
|
|
397
|
-
});
|
|
398
|
-
server.on("connection", (socket) => socket.unref());
|
|
399
|
-
server.listen(0, "127.0.0.1", async () => {
|
|
400
|
-
const addr = server.address();
|
|
401
|
-
if (!addr || typeof addr === "string") {
|
|
402
|
-
fail(/* @__PURE__ */ new Error("auth: Failed to start local callback server."));
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
const port = addr.port;
|
|
406
|
-
const callback = new URL(`http://localhost:${port}/callback`);
|
|
407
|
-
callback.searchParams.set("state", state);
|
|
408
|
-
let authUrl;
|
|
409
|
-
try {
|
|
410
|
-
authUrl = await buildAuthUrl(callback);
|
|
411
|
-
} catch (err) {
|
|
412
|
-
fail(err instanceof Error ? err : /* @__PURE__ */ new Error("auth: Failed to build authorize URL."));
|
|
413
|
-
return;
|
|
414
|
-
}
|
|
415
|
-
onUrl?.(authUrl);
|
|
416
|
-
openBrowser(authUrl, execFile);
|
|
417
|
-
});
|
|
418
|
-
setTimeout(() => {
|
|
419
|
-
fail(/* @__PURE__ */ new Error("auth: Login timed out after 5 minutes. Try again."));
|
|
420
|
-
}, timeoutMs).unref();
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
/**
|
|
424
|
-
* Start a local HTTP server, open the browser to the platform login page,
|
|
425
|
-
* and wait for the OAuth callback with a short-lived code. The CLI exchanges
|
|
426
|
-
* the code itself so the localhost callback never accepts bearer tokens.
|
|
427
|
-
*
|
|
428
|
-
* `onUrl` is invoked with the login URL once the local server is listening,
|
|
429
|
-
* so callers can show the URL to the user as a manual fallback when the
|
|
430
|
-
* browser fails to open (common on WSL2, headless SSH, Docker, etc.).
|
|
431
|
-
*/
|
|
432
|
-
async function runLogin(root = process.cwd(), provider = "github", onUrl) {
|
|
433
|
-
const { execFile } = await import("node:child_process");
|
|
434
|
-
const apiUrl = getApiUrl(root);
|
|
435
|
-
const state = randomBytes(32).toString("hex");
|
|
436
|
-
const codeVerifier = createCodeVerifier();
|
|
437
|
-
const codeChallenge = createCodeChallenge(codeVerifier);
|
|
438
|
-
return awaitBrowserCallback({
|
|
439
|
-
state,
|
|
440
|
-
execFile,
|
|
441
|
-
onUrl,
|
|
442
|
-
buildAuthUrl: (callback) => {
|
|
443
|
-
const loginUrl = new URL("auth/login", apiUrl.endsWith("/") ? apiUrl : `${apiUrl}/`);
|
|
444
|
-
loginUrl.searchParams.set("redirect", callback.href);
|
|
445
|
-
loginUrl.searchParams.set("provider", provider);
|
|
446
|
-
loginUrl.searchParams.set("code_challenge", codeChallenge);
|
|
447
|
-
loginUrl.searchParams.set("code_challenge_method", "S256");
|
|
448
|
-
return loginUrl.href;
|
|
449
|
-
},
|
|
450
|
-
describeError: (p) => p.get("error") === "signup_restricted" ? "Signup restricted: your email is not on the approved list for this environment." : null,
|
|
451
|
-
validate: (p) => {
|
|
452
|
-
if (p.has("token")) return "Invalid login callback. Please try again.";
|
|
453
|
-
if (!p.get("code")) return "No authorization code received. Please try again.";
|
|
454
|
-
return null;
|
|
455
|
-
},
|
|
456
|
-
finalize: (params) => exchangeLoginCode(apiUrl, params.get("code"), state, codeVerifier)
|
|
457
|
-
});
|
|
458
|
-
}
|
|
459
|
-
//#endregion
|
|
1
|
+
import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
|
|
2
|
+
import { o as join } from "./dist-BrsS7cai.mjs";
|
|
3
|
+
import { G as normalizePlatformApiUrl, p as getPackageDir } from "./output-tFQLLj26.mjs";
|
|
4
|
+
import { t as cfAccessHeaders } from "./cf-access-AJ1ehiFR.mjs";
|
|
5
|
+
import { a as getApiUrl } from "./auth-W9WII-mN.mjs";
|
|
6
|
+
import { t as ensureCloudflaredToken } from "./cf-access-DsSsZUPr.mjs";
|
|
7
|
+
import { readFileSync } from "node:fs";
|
|
460
8
|
//#region src/cli/client.ts
|
|
461
9
|
var client_exports = /* @__PURE__ */ __exportAll({
|
|
462
10
|
PlatformApiError: () => PlatformApiError,
|
|
@@ -538,17 +86,19 @@ var PlatformClient = class {
|
|
|
538
86
|
baseUrl;
|
|
539
87
|
authHeaders;
|
|
540
88
|
cliLog;
|
|
89
|
+
apiUrl;
|
|
541
90
|
constructor(token, options) {
|
|
542
|
-
if (typeof options === "string") this.baseUrl = options;
|
|
91
|
+
if (typeof options === "string") this.baseUrl = normalizePlatformApiUrl(options);
|
|
543
92
|
else {
|
|
544
|
-
this.baseUrl = options?.apiUrl ?? getApiUrl(options?.root);
|
|
93
|
+
this.baseUrl = normalizePlatformApiUrl(options?.apiUrl ?? getApiUrl(options?.root));
|
|
545
94
|
this.cliLog = options?.cliLog;
|
|
546
95
|
}
|
|
96
|
+
this.apiUrl = this.baseUrl;
|
|
547
97
|
ensureCloudflaredToken(this.baseUrl);
|
|
548
98
|
this.authHeaders = {
|
|
549
99
|
Authorization: `Bearer ${token}`,
|
|
550
100
|
...VOID_CLI_VERSION !== null && { "X-Void-CLI-Version": VOID_CLI_VERSION },
|
|
551
|
-
...cfAccessHeaders(process.env)
|
|
101
|
+
...cfAccessHeaders(process.env, this.baseUrl)
|
|
552
102
|
};
|
|
553
103
|
}
|
|
554
104
|
async whoami() {
|
|
@@ -853,6 +403,14 @@ var PlatformClient = class {
|
|
|
853
403
|
if (!res.ok) await throwPlatformApiError("Failed to get resources", res);
|
|
854
404
|
return res.json();
|
|
855
405
|
}
|
|
406
|
+
async createPrerenderToken(projectId) {
|
|
407
|
+
const res = await fetch(`${this.baseUrl}/projects/${projectId}/prerender-token`, {
|
|
408
|
+
method: "POST",
|
|
409
|
+
headers: { ...this.authHeaders }
|
|
410
|
+
});
|
|
411
|
+
if (!res.ok) await throwPlatformApiError("Failed to create prerender token", res);
|
|
412
|
+
return (await res.json()).token;
|
|
413
|
+
}
|
|
856
414
|
async provisionDatabase(projectId, connectionString) {
|
|
857
415
|
const res = await fetch(`${this.baseUrl}/projects/${projectId}/database`, {
|
|
858
416
|
method: "POST",
|
|
@@ -1043,6 +601,46 @@ var PlatformClient = class {
|
|
|
1043
601
|
if (!res.ok) await throwPlatformApiError("Failed to complete GitHub join", res);
|
|
1044
602
|
return res.json();
|
|
1045
603
|
}
|
|
604
|
+
async getEmailUsage(projectId) {
|
|
605
|
+
const res = await fetch(`${this.baseUrl}/projects/${projectId}/email/usage`, { headers: { ...this.authHeaders } });
|
|
606
|
+
if (!res.ok) await throwPlatformApiError("Failed to fetch email usage", res);
|
|
607
|
+
return res.json();
|
|
608
|
+
}
|
|
609
|
+
async getEmailLogs(projectId, limit) {
|
|
610
|
+
const url = new URL(`${this.baseUrl}/projects/${projectId}/email/logs`);
|
|
611
|
+
if (limit !== void 0) url.searchParams.set("limit", String(limit));
|
|
612
|
+
const res = await fetch(url, { headers: { ...this.authHeaders } });
|
|
613
|
+
if (!res.ok) await throwPlatformApiError("Failed to fetch email logs", res);
|
|
614
|
+
return res.json();
|
|
615
|
+
}
|
|
616
|
+
async listEmailDestinations(projectId) {
|
|
617
|
+
const res = await fetch(`${this.baseUrl}/projects/${projectId}/email/destinations`, { headers: { ...this.authHeaders } });
|
|
618
|
+
if (!res.ok) await throwPlatformApiError("Failed to list email destinations", res);
|
|
619
|
+
return res.json();
|
|
620
|
+
}
|
|
621
|
+
async addEmailDestination(projectId, address) {
|
|
622
|
+
const res = await fetch(`${this.baseUrl}/projects/${projectId}/email/destinations`, {
|
|
623
|
+
method: "POST",
|
|
624
|
+
headers: {
|
|
625
|
+
"Content-Type": "application/json",
|
|
626
|
+
...this.authHeaders
|
|
627
|
+
},
|
|
628
|
+
body: JSON.stringify({ address })
|
|
629
|
+
});
|
|
630
|
+
if (!res.ok) await throwPlatformApiError("Failed to add email destination", res);
|
|
631
|
+
return {
|
|
632
|
+
...await res.json(),
|
|
633
|
+
created: res.status === 201
|
|
634
|
+
};
|
|
635
|
+
}
|
|
636
|
+
async removeEmailDestination(projectId, destinationId) {
|
|
637
|
+
const res = await fetch(`${this.baseUrl}/projects/${projectId}/email/destinations/${destinationId}`, {
|
|
638
|
+
method: "DELETE",
|
|
639
|
+
headers: { ...this.authHeaders }
|
|
640
|
+
});
|
|
641
|
+
if (!res.ok) await throwPlatformApiError("Failed to remove email destination", res);
|
|
642
|
+
return res.json();
|
|
643
|
+
}
|
|
1046
644
|
};
|
|
1047
645
|
//#endregion
|
|
1048
|
-
export {
|
|
646
|
+
export { isExpiredTokenError as a, isCliOutdatedError as i, PlatformClient as n, parsePlatformErrorBody as o, client_exports as r, PlatformApiError as t };
|