void 0.10.13 → 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-qHGgPuWT.mjs → config-BQFq7QvD.mjs} +75 -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-C0i0sYMS.mjs → db-BxoUWL0F.mjs} +600 -115
- package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
- package/dist/{deploy-jBJT1fUT.mjs → deploy-CcDoeBIf.mjs} +3249 -1990
- 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-BzXf3Jh2.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-ChAADPQu.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 +1010 -293
- package/dist/{init-7JCAcKNQ.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-pRg81HqV.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-BvvgAz-3.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-CPx2ZxsH.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-z1jtHEi_.mjs → route-types-Da-DpyUp.mjs} +77 -25
- 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-ChWt4pX1.mjs → scan-BMH4rzlv.mjs} +42 -19
- package/dist/{scan-NU4xKGci.mjs → scan-CpK-57ug.mjs} +5 -4
- 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 +22 -3
- 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 +99 -25
- 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 +12 -10
- 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 +5 -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 +15 -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 +614 -160
- package/skills/void/docs/reference/config.md +67 -27
- package/skills/void/docs/reference/resource-inference.md +13 -9
- package/skills/void/docs/reference/structure.md +9 -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 -221
- 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
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { defineDatabaseProvider } from "./database-provider.mjs";
|
|
2
|
+
//#region src/database-providers/neon.ts
|
|
3
|
+
function getConnectionString(payload) {
|
|
4
|
+
if (!payload || typeof payload !== "object") return;
|
|
5
|
+
const record = payload;
|
|
6
|
+
const direct = record.connection_uri ?? record.connectionString;
|
|
7
|
+
if (typeof direct === "string") return direct;
|
|
8
|
+
if (Array.isArray(record.connection_uris)) for (const item of record.connection_uris) {
|
|
9
|
+
const result = getConnectionString(item);
|
|
10
|
+
if (result) return result;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function createNeonDatabaseProvider(options = {}) {
|
|
14
|
+
const apiKey = options.apiKey ?? process.env.NEON_API_KEY;
|
|
15
|
+
const apiBaseUrl = options.apiBaseUrl ?? "https://console.neon.tech/api/v2";
|
|
16
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
17
|
+
return defineDatabaseProvider({
|
|
18
|
+
id: "neon",
|
|
19
|
+
label: "Neon",
|
|
20
|
+
dialects: ["postgresql"],
|
|
21
|
+
async provision(input) {
|
|
22
|
+
if (!apiKey) throw new Error("NEON_API_KEY is required to provision a Neon database.");
|
|
23
|
+
if (input.dialect !== "postgresql") throw new Error("Neon provisions PostgreSQL databases only.");
|
|
24
|
+
const response = await fetchImpl(`${apiBaseUrl}/projects`, {
|
|
25
|
+
method: "POST",
|
|
26
|
+
headers: {
|
|
27
|
+
Authorization: `Bearer ${apiKey}`,
|
|
28
|
+
"Content-Type": "application/json"
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({ project: {
|
|
31
|
+
name: input.name,
|
|
32
|
+
...input.region ? { region_id: input.region } : {}
|
|
33
|
+
} }),
|
|
34
|
+
signal: input.signal
|
|
35
|
+
});
|
|
36
|
+
const payload = await response.json().catch(() => void 0);
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const message = typeof payload?.message === "string" ? payload.message : `${response.status} ${response.statusText}`.trim();
|
|
39
|
+
throw new Error(`Neon provisioning failed: ${message}`);
|
|
40
|
+
}
|
|
41
|
+
const connectionString = getConnectionString(payload);
|
|
42
|
+
if (!connectionString) throw new Error("Neon created the project but did not return a connection string.");
|
|
43
|
+
const project = payload?.project;
|
|
44
|
+
const projectId = typeof project?.id === "string" ? project.id : void 0;
|
|
45
|
+
return {
|
|
46
|
+
connectionString,
|
|
47
|
+
projectId,
|
|
48
|
+
dashboardUrl: projectId ? `https://console.neon.tech/app/projects/${projectId}` : void 0
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { createNeonDatabaseProvider };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as loadVoidAuthConfig, s as findVoidAuthConfig } from "./scan-
|
|
3
|
-
import { f as readConfig } from "./config-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { o as join } from "./dist-BrsS7cai.mjs";
|
|
2
|
+
import { c as loadVoidAuthConfig, s as findVoidAuthConfig } from "./scan-BMH4rzlv.mjs";
|
|
3
|
+
import { f as readConfig } from "./config-BQFq7QvD.mjs";
|
|
4
|
+
import { r as getMiniflareDatabasePath } from "./local-d1-BE8KBbMy.mjs";
|
|
5
|
+
import { a as resolveVoidAuthMigrationSchema } from "./route-types-Da-DpyUp.mjs";
|
|
6
|
+
import { a as loadLocalEnv } from "./env-D4Emu-M_.mjs";
|
|
7
|
+
import { n as applyPgAuthMigrations, r as applySqliteAuthMigrations, t as applyMySqlAuthMigrations } from "./auth-migrations-9vif1uj8.mjs";
|
|
8
8
|
//#region src/auth/node.ts
|
|
9
9
|
async function runLocalVoidAuthMigrations(root, dialect, persistRoot = join(root, ".void"), databaseId = "local", configPath = findVoidAuthConfig(root)) {
|
|
10
10
|
const authConfig = await loadVoidAuthConfig(configPath);
|
|
@@ -13,7 +13,10 @@ async function runLocalVoidAuthMigrations(root, dialect, persistRoot = join(root
|
|
|
13
13
|
providers: readConfig(root).auth?.providers ?? null,
|
|
14
14
|
userConfig: authConfig
|
|
15
15
|
};
|
|
16
|
-
const env =
|
|
16
|
+
const env = {
|
|
17
|
+
...loadLocalEnv(root),
|
|
18
|
+
...process.env
|
|
19
|
+
};
|
|
17
20
|
const migrationSchema = resolveVoidAuthMigrationSchema(runtime, env);
|
|
18
21
|
if (dialect === "sqlite") {
|
|
19
22
|
const { DatabaseSync } = await import("node:sqlite");
|
|
@@ -34,6 +37,24 @@ async function runLocalVoidAuthMigrations(root, dialect, persistRoot = join(root
|
|
|
34
37
|
}
|
|
35
38
|
const connectionString = typeof env.DATABASE_URL === "string" && env.DATABASE_URL.length > 0 ? env.DATABASE_URL : void 0;
|
|
36
39
|
if (!connectionString) return;
|
|
40
|
+
if (dialect === "mysql") {
|
|
41
|
+
const { createConnection } = await import("mysql2/promise");
|
|
42
|
+
const connection = await createConnection(connectionString);
|
|
43
|
+
try {
|
|
44
|
+
await applyMySqlAuthMigrations({
|
|
45
|
+
async all(sql, params) {
|
|
46
|
+
const [rows] = await connection.query(sql, params);
|
|
47
|
+
return rows;
|
|
48
|
+
},
|
|
49
|
+
async run(sql, params) {
|
|
50
|
+
await connection.query(sql, params);
|
|
51
|
+
}
|
|
52
|
+
}, migrationSchema);
|
|
53
|
+
} finally {
|
|
54
|
+
await connection.end();
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
37
58
|
const { Client } = await import("pg");
|
|
38
59
|
const client = new Client({ connectionString });
|
|
39
60
|
await client.connect();
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { G as normalizePlatformApiUrl, K as platformCredentialAccount, V as getActivePlatformConnection, W as listPlatformConnections, at as readKeyringPassword, it as deleteKeyringPassword, ot as writeKeyringPassword } from "./output-tFQLLj26.mjs";
|
|
2
|
+
import { n as OperatorClient, r as OperatorClientError } from "./cli/cli.mjs";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { createInterface } from "node:readline/promises";
|
|
5
|
+
import { setTimeout } from "node:timers/promises";
|
|
6
|
+
/** Operator authority never comes from repository-controlled metadata. */
|
|
7
|
+
function resolveOperatorOrigin(connection = "") {
|
|
8
|
+
if (connection) {
|
|
9
|
+
let normalized = null;
|
|
10
|
+
try {
|
|
11
|
+
normalized = normalizePlatformApiUrl(connection);
|
|
12
|
+
} catch {}
|
|
13
|
+
const matches = listPlatformConnections().filter((entry) => entry.id === connection || entry.installationId === connection || entry.apiUrl === normalized);
|
|
14
|
+
if (matches.length !== 1) throw new OperatorClientError("Select a registered platform connection ID or URL. Run `void connect <url> --no-login` to register it first.", "invalid_connection");
|
|
15
|
+
return matches[0].apiUrl;
|
|
16
|
+
}
|
|
17
|
+
if (process.env.VOID_API_URL) return normalizePlatformApiUrl(process.env.VOID_API_URL);
|
|
18
|
+
if (process.env.VOID_OPERATOR_TOKEN) throw new OperatorClientError("VOID_OPERATOR_TOKEN requires an explicit --connection or VOID_API_URL to select its recipient.", "explicit_origin_required");
|
|
19
|
+
const active = getActivePlatformConnection();
|
|
20
|
+
if (!active) throw new OperatorClientError("No default platform connection. Run `void connect <url>` or specify --connection.", "connection_required");
|
|
21
|
+
return active.apiUrl;
|
|
22
|
+
}
|
|
23
|
+
function readOperatorToken(origin) {
|
|
24
|
+
const token = process.env.VOID_OPERATOR_TOKEN || readKeyringPassword("dev.void.cli.operator", platformCredentialAccount(origin));
|
|
25
|
+
if (!token) throw new OperatorClientError("No operator session. Run `void platform auth login` or set VOID_OPERATOR_TOKEN with an explicit origin.", "authentication_required");
|
|
26
|
+
return token;
|
|
27
|
+
}
|
|
28
|
+
function saveOperatorToken(origin, token) {
|
|
29
|
+
if (!writeKeyringPassword("dev.void.cli.operator", platformCredentialAccount(origin), token)) throw new OperatorClientError("The system keychain is unavailable. Use `void platform auth token --token-stdin` with a full API session to obtain a token for VOID_OPERATOR_TOKEN; plaintext credential storage is disabled.", "keychain_unavailable");
|
|
30
|
+
}
|
|
31
|
+
function removeOperatorToken(origin) {
|
|
32
|
+
const account = platformCredentialAccount(origin);
|
|
33
|
+
if (readKeyringPassword("dev.void.cli.operator", account) && !deleteKeyringPassword("dev.void.cli.operator", account)) throw new OperatorClientError("The operator session was revoked, but its local keychain entry could not be removed.", "keychain_unavailable");
|
|
34
|
+
}
|
|
35
|
+
async function readOperatorApiTokenStdin() {
|
|
36
|
+
if (process.stdin.isTTY) throw new OperatorClientError("--token-stdin requires an API session token piped on standard input.", "invalid_token_input");
|
|
37
|
+
let input = "";
|
|
38
|
+
for await (const chunk of process.stdin) {
|
|
39
|
+
input += String(chunk);
|
|
40
|
+
if (input.length > 32768) throw new OperatorClientError("API session token input is too large.", "invalid_token_input");
|
|
41
|
+
}
|
|
42
|
+
const token = input.trim();
|
|
43
|
+
if (!token || token.length > 32768 || /\s/.test(token)) throw new OperatorClientError("Standard input must contain one API session token.", "invalid_token_input");
|
|
44
|
+
return token;
|
|
45
|
+
}
|
|
46
|
+
async function exchangeOperatorSession(origin, apiToken) {
|
|
47
|
+
const session = await new OperatorClient(origin, apiToken).request("/session", {
|
|
48
|
+
method: "POST",
|
|
49
|
+
body: {}
|
|
50
|
+
});
|
|
51
|
+
if (typeof session.token !== "string" || !session.token || session.apiVersion !== 1 || typeof session.expiresAt !== "string") throw new OperatorClientError("Operator API returned an invalid session.", "invalid_response");
|
|
52
|
+
return session;
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/cli/operator-cmd.ts
|
|
56
|
+
const MAX_RUNTIME_FOLLOW_ROWS = 1e4;
|
|
57
|
+
function printable(value) {
|
|
58
|
+
if (value === null || value === void 0) return "—";
|
|
59
|
+
if (typeof value === "string") return value.replace(/[\u0000-\u001f\u007f]/g, " ");
|
|
60
|
+
if (typeof value === "object") return JSON.stringify(value);
|
|
61
|
+
return String(value);
|
|
62
|
+
}
|
|
63
|
+
function table(rows, indent) {
|
|
64
|
+
if (!rows.length) return [`${indent}(none)`];
|
|
65
|
+
if (!rows.every((row) => row && typeof row === "object" && !Array.isArray(row))) return rows.map((row) => `${indent}${printable(row)}`);
|
|
66
|
+
const records = rows;
|
|
67
|
+
const keys = [...new Set(records.flatMap((row) => Object.keys(row)))].filter((key) => records.some((row) => row[key] !== null && typeof row[key] !== "object"));
|
|
68
|
+
const preferred = [
|
|
69
|
+
"id",
|
|
70
|
+
"name",
|
|
71
|
+
"login",
|
|
72
|
+
"email",
|
|
73
|
+
"slug",
|
|
74
|
+
"status",
|
|
75
|
+
"plan",
|
|
76
|
+
"action",
|
|
77
|
+
"target",
|
|
78
|
+
"created_at",
|
|
79
|
+
"version"
|
|
80
|
+
];
|
|
81
|
+
const columns = [...preferred.filter((key) => keys.includes(key)), ...keys.filter((key) => !preferred.includes(key))].slice(0, 7);
|
|
82
|
+
if (!columns.length) return records.flatMap((row) => humanLines(row, indent));
|
|
83
|
+
const widths = columns.map((key) => Math.min(64, Math.max(key.length, ...records.map((row) => printable(row[key]).length))));
|
|
84
|
+
const rowText = (values) => indent + values.map((value, index) => {
|
|
85
|
+
const width = widths[index];
|
|
86
|
+
return (value.length > width ? `${value.slice(0, width - 1)}…` : value).padEnd(width);
|
|
87
|
+
}).join(" ").trimEnd();
|
|
88
|
+
return [rowText(columns.map((key) => key.toUpperCase())), ...records.map((row) => rowText(columns.map((key) => printable(row[key]))))];
|
|
89
|
+
}
|
|
90
|
+
function eventLines(events, indent) {
|
|
91
|
+
if (!events.length) return [`${indent}(none)`];
|
|
92
|
+
return events.flatMap((event, index) => [`${indent}${index + 1}.`, ...humanLines(event, `${indent} `)]);
|
|
93
|
+
}
|
|
94
|
+
function humanLines(value, indent = "") {
|
|
95
|
+
if (Array.isArray(value)) return table(value, indent);
|
|
96
|
+
if (!value || typeof value !== "object") return [`${indent}${printable(value)}`];
|
|
97
|
+
return Object.entries(value).flatMap(([key, item]) => {
|
|
98
|
+
const label = key.replaceAll("_", " ").replace(/([a-z])([A-Z])/g, "$1 $2");
|
|
99
|
+
if (Array.isArray(item)) return [`${indent}${label}:`, ...key === "events" ? eventLines(item, `${indent} `) : table(item, `${indent} `)];
|
|
100
|
+
if (item && typeof item === "object") return [`${indent}${label}:`, ...humanLines(item, `${indent} `)];
|
|
101
|
+
return [`${indent}${label}: ${printable(item)}`];
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function output(value, json) {
|
|
105
|
+
console.log(json ? JSON.stringify(value) : humanLines(value).join("\n"));
|
|
106
|
+
}
|
|
107
|
+
function outputLogs(result, json) {
|
|
108
|
+
if (json) {
|
|
109
|
+
output(result, true);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (Array.isArray(result.lines)) {
|
|
113
|
+
for (const entry of result.lines) if (entry && typeof entry === "object") {
|
|
114
|
+
const line = entry;
|
|
115
|
+
console.log(`${line.ts ? `[${printable(line.ts)}] ` : ""}${printable(line.line ?? line.text ?? entry)}`);
|
|
116
|
+
} else console.log(printable(entry));
|
|
117
|
+
if (result.external) console.log(`External build logs: ${printable(result.external)}`);
|
|
118
|
+
if (result.terminal) console.log(`Build ${printable(result.status ?? "finished")}.`);
|
|
119
|
+
} else if (Array.isArray(result.data)) {
|
|
120
|
+
for (const entry of result.data) {
|
|
121
|
+
if (!entry || typeof entry !== "object") {
|
|
122
|
+
console.log(printable(entry));
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const row = entry;
|
|
126
|
+
console.log(`${printable(row.timestamp ?? row.ts)} ${printable(row.method)} ${printable(row.url)} ${printable(row.status ?? row.statusCode ?? row.outcome)}`);
|
|
127
|
+
if (Array.isArray(row.logs)) for (const log of row.logs) if (log && typeof log === "object") {
|
|
128
|
+
const record = log;
|
|
129
|
+
console.log(` ${record.level ? `[${printable(record.level)}] ` : ""}${printable(record.message ?? log)}`);
|
|
130
|
+
} else console.log(` ${printable(log)}`);
|
|
131
|
+
if (Array.isArray(row.exceptions)) for (const exception of row.exceptions) if (exception && typeof exception === "object") {
|
|
132
|
+
const record = exception;
|
|
133
|
+
const name = record.name ? `${printable(record.name)}: ` : "";
|
|
134
|
+
console.log(` ${name}${printable(record.message ?? exception)}`);
|
|
135
|
+
} else console.log(` ${printable(exception)}`);
|
|
136
|
+
}
|
|
137
|
+
if (result.nextCursor) console.log(`Next cursor: ${printable(result.nextCursor)}`);
|
|
138
|
+
} else output(result, false);
|
|
139
|
+
}
|
|
140
|
+
function runtimeLogFingerprint(row) {
|
|
141
|
+
const ingestedAt = row && typeof row === "object" && !Array.isArray(row) ? row.ingestedAt : void 0;
|
|
142
|
+
if (!row || typeof row !== "object" || Array.isArray(row) || typeof ingestedAt !== "number" || !Number.isSafeInteger(ingestedAt)) throw new OperatorClientError("Runtime log response has an invalid ingestion cursor.", "invalid_response");
|
|
143
|
+
return createHash("sha256").update(JSON.stringify(row)).digest("base64url");
|
|
144
|
+
}
|
|
145
|
+
async function confirmOperatorMutation(origin, preview, args) {
|
|
146
|
+
if (args.plan) {
|
|
147
|
+
output({
|
|
148
|
+
origin,
|
|
149
|
+
...preview
|
|
150
|
+
}, args.json);
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
if (!args.json || !args.yes) process.stderr.write(`${JSON.stringify({
|
|
154
|
+
origin,
|
|
155
|
+
...preview
|
|
156
|
+
}, null, 2)}\n`);
|
|
157
|
+
if (args.yes) return true;
|
|
158
|
+
if (!process.stdin.isTTY || !process.stderr.isTTY) throw new OperatorClientError("Mutations in non-interactive mode require --yes or --plan.", "confirmation_required");
|
|
159
|
+
const prompt = createInterface({
|
|
160
|
+
input: process.stdin,
|
|
161
|
+
output: process.stderr
|
|
162
|
+
});
|
|
163
|
+
try {
|
|
164
|
+
const answer = await prompt.question(`Apply this change to ${origin}? [y/N] `);
|
|
165
|
+
if (!/^y(es)?$/i.test(answer.trim())) throw new OperatorClientError("Cancelled.", "cancelled");
|
|
166
|
+
return true;
|
|
167
|
+
} finally {
|
|
168
|
+
prompt.close();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function runAuth(origin, args) {
|
|
172
|
+
if (args.action === "login" || args.action === "token" && args.tokenStdin) {
|
|
173
|
+
if (!args.tokenStdin && !process.stdin.isTTY) throw new OperatorClientError("Browser login requires an interactive terminal. Use --token-stdin to exchange an API session.", "interactive_login_required");
|
|
174
|
+
const session = await exchangeOperatorSession(origin, args.tokenStdin ? await readOperatorApiTokenStdin() : await import("./auth-W9WII-mN.mjs").then((n) => n.t).then(({ runPlatformLogin }) => runPlatformLogin(origin, args.provider, (url) => process.stderr.write(`Sign in at ${url}\n`))));
|
|
175
|
+
const { token, ...identity } = session;
|
|
176
|
+
if (args.action === "token") {
|
|
177
|
+
if (args.json) output({
|
|
178
|
+
origin,
|
|
179
|
+
...session
|
|
180
|
+
}, true);
|
|
181
|
+
else console.log(token);
|
|
182
|
+
} else {
|
|
183
|
+
saveOperatorToken(origin, token);
|
|
184
|
+
output({
|
|
185
|
+
origin,
|
|
186
|
+
...identity
|
|
187
|
+
}, args.json);
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const token = readOperatorToken(origin);
|
|
192
|
+
const client = new OperatorClient(origin, token);
|
|
193
|
+
if (args.action === "logout") {
|
|
194
|
+
try {
|
|
195
|
+
await client.request("/session/logout", {
|
|
196
|
+
method: "POST",
|
|
197
|
+
body: {}
|
|
198
|
+
});
|
|
199
|
+
} catch (error) {
|
|
200
|
+
if (!(error instanceof OperatorClientError) || error.status !== 401) throw error;
|
|
201
|
+
}
|
|
202
|
+
removeOperatorToken(origin);
|
|
203
|
+
output({
|
|
204
|
+
origin,
|
|
205
|
+
ok: true,
|
|
206
|
+
...process.env.VOID_OPERATOR_TOKEN ? { message: "Operator session revoked. Unset VOID_OPERATOR_TOKEN in your shell." } : {}
|
|
207
|
+
}, args.json);
|
|
208
|
+
} else {
|
|
209
|
+
const session = await client.request("/session");
|
|
210
|
+
if (args.action === "token") {
|
|
211
|
+
if (args.json) output({
|
|
212
|
+
origin,
|
|
213
|
+
token,
|
|
214
|
+
...session
|
|
215
|
+
}, true);
|
|
216
|
+
else console.log(token);
|
|
217
|
+
} else output({
|
|
218
|
+
origin,
|
|
219
|
+
...session
|
|
220
|
+
}, args.json);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/** Poll cursors until interrupted (runtime) or terminal (build), without mutation retries. */
|
|
224
|
+
async function followOperatorLogs(client, args, signal, pollIntervalMs = 2e3) {
|
|
225
|
+
const controller = new AbortController();
|
|
226
|
+
const stop = () => controller.abort();
|
|
227
|
+
process.once("SIGINT", stop);
|
|
228
|
+
const combined = signal ? AbortSignal.any([signal, controller.signal]) : controller.signal;
|
|
229
|
+
const query = { ...args.query };
|
|
230
|
+
let terminalBuildSince = null;
|
|
231
|
+
let legacyQuietSince = null;
|
|
232
|
+
let legacyQuietSeq = null;
|
|
233
|
+
let previousRuntimeRows = /* @__PURE__ */ new Map();
|
|
234
|
+
let currentRuntimeRows = /* @__PURE__ */ new Map();
|
|
235
|
+
let currentRuntimeRowCount = 0;
|
|
236
|
+
try {
|
|
237
|
+
while (!combined.aborted) {
|
|
238
|
+
const result = await client.request(args.path, {
|
|
239
|
+
query,
|
|
240
|
+
signal: combined
|
|
241
|
+
});
|
|
242
|
+
let visibleResult = result;
|
|
243
|
+
if (args.group === "deployment") {
|
|
244
|
+
if (!Array.isArray(result.data)) throw new OperatorClientError("Runtime log response is missing its data rows.", "invalid_response");
|
|
245
|
+
const data = result.data.filter((row) => {
|
|
246
|
+
currentRuntimeRowCount++;
|
|
247
|
+
if (currentRuntimeRowCount > MAX_RUNTIME_FOLLOW_ROWS) throw new OperatorClientError(`Runtime log follow window exceeded ${MAX_RUNTIME_FOLLOW_ROWS} rows. Retry without --follow and query a narrower history.`, "invalid_response");
|
|
248
|
+
const fingerprint = runtimeLogFingerprint(row);
|
|
249
|
+
const occurrence = (currentRuntimeRows.get(fingerprint) ?? 0) + 1;
|
|
250
|
+
currentRuntimeRows.set(fingerprint, occurrence);
|
|
251
|
+
return occurrence > (previousRuntimeRows.get(fingerprint) ?? 0);
|
|
252
|
+
});
|
|
253
|
+
visibleResult = {
|
|
254
|
+
...result,
|
|
255
|
+
data
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
outputLogs(visibleResult, args.json);
|
|
259
|
+
if (args.group === "build") {
|
|
260
|
+
if (typeof result.lastSeq !== "number" || !Number.isSafeInteger(result.lastSeq) || result.lastSeq < Number(query.since ?? 0)) throw new OperatorClientError("Build log response has an invalid cursor.", "invalid_response");
|
|
261
|
+
const previousSeq = Number(query.since ?? 0);
|
|
262
|
+
query.since = String(result.lastSeq);
|
|
263
|
+
if (result.hasMore === true) {
|
|
264
|
+
if (result.lastSeq === previousSeq) throw new OperatorClientError("Build log pagination did not advance.", "invalid_response");
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
if (result.logsComplete !== void 0 && result.logsComplete !== null && typeof result.logsComplete !== "boolean") throw new OperatorClientError("Build log response has an invalid completion state.", "invalid_response");
|
|
268
|
+
if (result.terminal === true) {
|
|
269
|
+
if (result.logsComplete === true) return;
|
|
270
|
+
const now = Date.now();
|
|
271
|
+
terminalBuildSince ??= now;
|
|
272
|
+
if (now - terminalBuildSince >= 12e4) throw new OperatorClientError("Build finished, but its log producer did not confirm completion. Retry the command to recover the final log tail.", "invalid_response");
|
|
273
|
+
if (result.logsComplete === null || result.logsComplete === void 0) {
|
|
274
|
+
if (legacyQuietSeq !== result.lastSeq) {
|
|
275
|
+
legacyQuietSeq = result.lastSeq;
|
|
276
|
+
legacyQuietSince = now;
|
|
277
|
+
} else {
|
|
278
|
+
legacyQuietSince ??= now;
|
|
279
|
+
if (now - legacyQuietSince >= 3e4) return;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
} else {
|
|
283
|
+
terminalBuildSince = null;
|
|
284
|
+
legacyQuietSince = null;
|
|
285
|
+
legacyQuietSeq = null;
|
|
286
|
+
}
|
|
287
|
+
} else {
|
|
288
|
+
if (typeof result.nextCursor === "string" && result.nextCursor) {
|
|
289
|
+
if (result.nextCursor === query.cursor) throw new OperatorClientError("Runtime log pagination did not advance.", "invalid_response");
|
|
290
|
+
query.cursor = result.nextCursor;
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
delete query.cursor;
|
|
294
|
+
if (typeof result.watermark !== "string" && typeof result.watermark !== "number") throw new OperatorClientError("Runtime log response is missing its follow watermark.", "invalid_response");
|
|
295
|
+
previousRuntimeRows = currentRuntimeRows;
|
|
296
|
+
currentRuntimeRows = /* @__PURE__ */ new Map();
|
|
297
|
+
currentRuntimeRowCount = 0;
|
|
298
|
+
query.after = String(result.watermark);
|
|
299
|
+
delete query.since;
|
|
300
|
+
}
|
|
301
|
+
await setTimeout(pollIntervalMs, void 0, { signal: combined });
|
|
302
|
+
}
|
|
303
|
+
} catch (error) {
|
|
304
|
+
if (!combined.aborted) throw error;
|
|
305
|
+
} finally {
|
|
306
|
+
process.removeListener("SIGINT", stop);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
async function runOperatorCommand(args) {
|
|
310
|
+
if (!args.action) {
|
|
311
|
+
const { printHelpPage } = await import("./cli/cli.mjs").then((n) => n.t);
|
|
312
|
+
printHelpPage(["platform", args.group]);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const origin = resolveOperatorOrigin(args.connection);
|
|
316
|
+
if (args.group === "auth") return runAuth(origin, args);
|
|
317
|
+
const client = new OperatorClient(origin, readOperatorToken(origin));
|
|
318
|
+
if (args.method === "POST") {
|
|
319
|
+
if (!args.plan && !args.yes && (!process.stdin.isTTY || !process.stderr.isTTY)) throw new OperatorClientError("Mutations in non-interactive mode require --yes or --plan.", "confirmation_required");
|
|
320
|
+
const preview = await client.request(args.path, {
|
|
321
|
+
method: "POST",
|
|
322
|
+
body: {
|
|
323
|
+
...args.body,
|
|
324
|
+
dryRun: true
|
|
325
|
+
},
|
|
326
|
+
timeoutMs: args.timeoutMs
|
|
327
|
+
});
|
|
328
|
+
if (preview.dryRun !== true || typeof preview.action !== "string" || !Object.hasOwn(preview, "target")) throw new OperatorClientError("The server did not return a valid mutation preview. No change was requested.", "invalid_preview");
|
|
329
|
+
if (!await confirmOperatorMutation(origin, preview, args)) return;
|
|
330
|
+
const body = {
|
|
331
|
+
...args.body,
|
|
332
|
+
...args.group === "worker" && args.action === "rollback-all" ? { versions: preview.versions } : {}
|
|
333
|
+
};
|
|
334
|
+
output(await client.request(args.path, {
|
|
335
|
+
method: "POST",
|
|
336
|
+
body,
|
|
337
|
+
timeoutMs: args.timeoutMs
|
|
338
|
+
}), args.json);
|
|
339
|
+
} else if (args.follow) await followOperatorLogs(client, args);
|
|
340
|
+
else {
|
|
341
|
+
const result = await client.request(args.path, { query: args.query });
|
|
342
|
+
if (args.action === "logs") outputLogs(result, args.json);
|
|
343
|
+
else output(result, args.json);
|
|
344
|
+
if (result.allOk === false) process.exitCode = 1;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//#endregion
|
|
348
|
+
export { runOperatorCommand };
|