void 0.21.0 → 0.21.2

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.
Files changed (71) hide show
  1. package/README.md +3 -2
  2. package/dist/{auth-cmd-MkBG2u1f.mjs → account-cmd-D8OC-U7y.mjs} +8 -8
  3. package/dist/{auth-link-Devmv96E.mjs → auth-link-BYFeMJAp.mjs} +3 -3
  4. package/dist/auth-router-OHZNmrb_.mjs +74 -0
  5. package/dist/{build-cmd-DsBGwtfs.mjs → build-cmd-Bft7EY51.mjs} +2 -2
  6. package/dist/{cache-BMw8eMyF.mjs → cache-CKV1Gz2w.mjs} +2 -2
  7. package/dist/{cancel-deploy-B3_s9NIN.mjs → cancel-deploy-BAKmkX4f.mjs} +2 -2
  8. package/dist/cli/cf-compat.mjs +13 -3
  9. package/dist/cli/cli.mjs +112 -60
  10. package/dist/{connect-BvC9kolB.mjs → connect-DLx1pRYk.mjs} +3 -3
  11. package/dist/{create-project-C9lQhRzj.mjs → create-project-BZBl_gQ0.mjs} +1 -1
  12. package/dist/{create-project-CI-17RVJ.mjs → create-project-JV9-6ICF.mjs} +1 -1
  13. package/dist/{db-R7IQgOv5.mjs → db-B98_UV4H.mjs} +8 -8
  14. package/dist/{delete-CghI_NXn.mjs → delete-BEEyqlwd.mjs} +2 -2
  15. package/dist/{deploy-H968Lo4T.mjs → deploy-Bsymb0_c.mjs} +85 -48
  16. package/dist/{deploy-CYPymbtG.mjs → deploy-CsjbRNyv.mjs} +1 -1
  17. package/dist/{domain-CITt8lC-.mjs → domain-Av2AkLQP.mjs} +2 -2
  18. package/dist/{email-_8VmyX7V.mjs → email-CUqa6TtH.mjs} +3 -3
  19. package/dist/{env-DV4r3nHz.mjs → env-D4RIGEzz.mjs} +2 -2
  20. package/dist/gen-B87rlalt.mjs +2 -0
  21. package/dist/{gen-CFOEEc-t.mjs → gen-pg-Ojg8Y.mjs} +1 -1
  22. package/dist/{github-cmd-jYjha2LO.mjs → github-cmd-BEK4VprE.mjs} +4 -4
  23. package/dist/{help-C46mnlUS.mjs → help-iQOt7WHk.mjs} +40 -9
  24. package/dist/help-r_vrpH_d.mjs +2 -0
  25. package/dist/index.mjs +5 -5
  26. package/dist/{init-CSXmvxKu.mjs → init-D5niUPAz.mjs} +5 -5
  27. package/dist/{link-DxMOALXk.mjs → link-3lGrfXzd.mjs} +3 -3
  28. package/dist/{list-0wQs0oYg.mjs → list-CVjGr_C6.mjs} +2 -2
  29. package/dist/{login-CKk5NX4d.mjs → login-BgQJzxAl.mjs} +3 -3
  30. package/dist/login-Bz0zEPoy.mjs +2 -0
  31. package/dist/{logs-hxWBSoej.mjs → logs-DbzD-QDf.mjs} +2 -2
  32. package/dist/{migrate-DcW8F2W8.mjs → migrate-BV8qHiCb.mjs} +1 -1
  33. package/dist/migrate-BXY3B3m7.mjs +2 -0
  34. package/dist/{operator-cmd-BEUYhaHB.mjs → operator-cmd-CR6Lxzt0.mjs} +3 -3
  35. package/dist/{output-urU86XeT.mjs → output-CCH48AMM.mjs} +4 -4
  36. package/dist/{platform-auth-config-Df6yVw-e.mjs → platform-auth-config-De7BqRJm.mjs} +2 -2
  37. package/dist/{platform-auth-protection-Jb0yftay.mjs → platform-auth-protection-Dcat-6zu.mjs} +2 -2
  38. package/dist/{platform-auth-recovery-DmRyIfW0.mjs → platform-auth-recovery-C9gsM640.mjs} +2 -2
  39. package/dist/{platform-cmd-C9Vt7m-d.mjs → platform-cmd-Cl9Uhzru.mjs} +1 -1
  40. package/dist/{platform-cmd-DRxCOTwy.mjs → platform-cmd-CudokNIg.mjs} +4 -4
  41. package/dist/{platform-domain-IjiXgrXJ.mjs → platform-domain-Ckpd2kXw.mjs} +2 -2
  42. package/dist/{platform-lifecycle-BquAaU-5.mjs → platform-lifecycle-DVzM2T4j.mjs} +8 -8
  43. package/dist/{platform-lifecycle-CuJIZNvA.mjs → platform-lifecycle-DlpiGcjr.mjs} +1 -1
  44. package/dist/{platform-management-Cgyed0WY.mjs → platform-management-44Bxd3YC.mjs} +1 -1
  45. package/dist/{platform-management-CCQKGsq4.mjs → platform-management-ibuS1as0.mjs} +2 -2
  46. package/dist/{platform-recovery-DS8ih1SW.mjs → platform-recovery-D_KmvdSk.mjs} +2 -2
  47. package/dist/{prepare-CaUxODOU.mjs → prepare-_T-Haxrr.mjs} +1 -1
  48. package/dist/{project-cmd-2lN--YAX.mjs → project-cmd-BuF9doku.mjs} +14 -14
  49. package/dist/{project-team-Dapn9HZn.mjs → project-team-B1Tia8vd.mjs} +3 -3
  50. package/dist/{project-token-C90v9SJK.mjs → project-token-Bwxjf4y6.mjs} +1 -1
  51. package/dist/{requests-CzX46I0i.mjs → requests-CphRF98D.mjs} +2 -2
  52. package/dist/{rollback-BEeyc73H.mjs → rollback-BYHJV2yD.mjs} +2 -2
  53. package/dist/{secret-wnTel5Yw.mjs → secret-Rt9c4Ttw.mjs} +2 -2
  54. package/dist/{subcommand-prompt-Gj3VzLIh.mjs → subcommand-prompt-BuGYkAkC.mjs} +1 -1
  55. package/package.json +7 -7
  56. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
  57. package/skills/void/SKILL.md +4 -2
  58. package/skills/void/docs/guide/deployment.md +6 -13
  59. package/skills/void/docs/guide/email.md +53 -59
  60. package/skills/void/docs/guide/index.md +15 -41
  61. package/skills/void/docs/guide/platform/administration/access.md +1 -1
  62. package/skills/void/docs/guide/project-collaboration.md +1 -1
  63. package/skills/void/docs/guide/quickstart.md +11 -78
  64. package/skills/void/docs/index.md +17 -17
  65. package/skills/void/docs/integrations/cloudflare.md +16 -23
  66. package/skills/void/docs/reference/cli.md +38 -17
  67. package/skills/void/docs/reference/config.md +7 -7
  68. package/dist/gen-BBiIZw6g.mjs +0 -2
  69. package/dist/help-CS_nAsWu.mjs +0 -2
  70. package/dist/login-Ch9cgWRF.mjs +0 -2
  71. package/dist/migrate-CLty4mZR.mjs +0 -2
package/README.md CHANGED
@@ -11,7 +11,7 @@ for every command.
11
11
 
12
12
  Use `void platform config auth` to manage login methods and company signup.
13
13
  Cloudflare Access protection has separate create/connect controls. Users can
14
- link another enabled login to their account with `void auth link`.
14
+ link another enabled login to their account with `void account link`.
15
15
 
16
16
  ## What It Covers
17
17
 
@@ -57,7 +57,8 @@ export default defineConfig({
57
57
 
58
58
  - `voidPlugin()` — Vite integration, routing, pages mode, codegen, migrations, packaging
59
59
  - `void prepare` — generate `.void` artifacts for CI, editors, and fresh clones
60
- - `void auth login` — platform auth
60
+ - `void auth login` — sign in to the project's saved Cloudflare or Void destination
61
+ - `void account login` — platform auth
61
62
  - `void connect [url]` — choose Cloudflare or a Void platform, sign in, and save the deployment destination
62
63
  - `void platform *` — list, select, inspect, install, recover, repair, upgrade, disable, and safely uninstall a company platform
63
64
  - `void deploy` — build and deploy to the saved Cloudflare or Void target
@@ -1,13 +1,13 @@
1
1
  import { c as getToken, p as removeToken } from "./auth-B9_D6ygs.mjs";
2
2
  import { j as log } from "./dist-Dn6nn2IU.mjs";
3
3
  import { n as PlatformClient } from "./client-PdAJ-F0t.mjs";
4
- import { n as runLoginCommand } from "./login-CKk5NX4d.mjs";
4
+ import { n as runLoginCommand } from "./login-BgQJzxAl.mjs";
5
5
  import { execSync } from "node:child_process";
6
- //#region src/cli/auth-cmd.ts
7
- async function runAuthCommand(root, args) {
6
+ //#region src/cli/account-cmd.ts
7
+ async function runAccountCommand(root, args) {
8
8
  switch (args.subcommand) {
9
9
  case "login": return runLoginCommand(root);
10
- case "link": return import("./auth-link-Devmv96E.mjs").then(({ runAuthLink }) => runAuthLink(root, args.connectionId));
10
+ case "link": return import("./auth-link-BYFeMJAp.mjs").then(({ runAuthLink }) => runAuthLink(root, args.connectionId));
11
11
  case "logout":
12
12
  if (removeToken(root)) log.success("Logged out.");
13
13
  else log.info("Not logged in.");
@@ -15,7 +15,7 @@ async function runAuthCommand(root, args) {
15
15
  case "whoami": {
16
16
  const token = getToken(root);
17
17
  if (!token) {
18
- log.error("Not logged in. Run `void auth login` first.");
18
+ log.error("Not logged in. Run `void account login` first.");
19
19
  process.exit(1);
20
20
  }
21
21
  const user = await new PlatformClient(token, { root }).whoami();
@@ -26,7 +26,7 @@ async function runAuthCommand(root, args) {
26
26
  if (!getToken(root)) await runLoginCommand(root);
27
27
  const token = getToken(root);
28
28
  if (!token) {
29
- log.error("Login failed. Run `void auth login` to try again.");
29
+ log.error("Login failed. Run `void account login` to try again.");
30
30
  process.exit(1);
31
31
  }
32
32
  const platform = process.platform;
@@ -35,11 +35,11 @@ async function runAuthCommand(root, args) {
35
35
  execSync(cmd, { input: token });
36
36
  log.success("Token copied to clipboard.");
37
37
  } catch {
38
- log.warn("Could not copy to clipboard. Re-run `void login` to generate a new token.");
38
+ log.warn("Could not copy to clipboard. Run `void account token` again.");
39
39
  }
40
40
  return;
41
41
  }
42
42
  }
43
43
  }
44
44
  //#endregion
45
- export { runAuthCommand };
45
+ export { runAccountCommand };
@@ -1,13 +1,13 @@
1
1
  import { a as getApiUrl, c as getToken, d as openBrowser, g as savePlatformToken, h as runPlatformLogin } from "./auth-B9_D6ygs.mjs";
2
2
  import { j as log } from "./dist-Dn6nn2IU.mjs";
3
3
  import { n as PlatformClient } from "./client-PdAJ-F0t.mjs";
4
- import { r as selectPlatformLoginMethod } from "./login-CKk5NX4d.mjs";
5
- import { t as discoverPlatform } from "./platform-cmd-DRxCOTwy.mjs";
4
+ import { r as selectPlatformLoginMethod } from "./login-BgQJzxAl.mjs";
5
+ import { t as discoverPlatform } from "./platform-cmd-CudokNIg.mjs";
6
6
  import { execFile } from "node:child_process";
7
7
  //#region src/cli/auth-link.ts
8
8
  async function runAuthLink(root, connectionId) {
9
9
  const token = getToken(root);
10
- if (!token) throw new Error("auth: Sign in to your existing account with `void auth login` first.");
10
+ if (!token) throw new Error("auth: Sign in to your existing account with `void account login` first.");
11
11
  const apiUrl = getApiUrl(root);
12
12
  const platform = await discoverPlatform(apiUrl);
13
13
  if (!platform.authentication) throw new Error("auth: This platform must be upgraded before linking login methods.");
@@ -0,0 +1,74 @@
1
+ import { o as listPlatformConnections } from "./platform-registry-BJbgZLS1.mjs";
2
+ import { i as readDeploymentPlatform } from "./project-CWNIPoXc.mjs";
3
+ import { I as select, W as isCancel } from "./dist-Dn6nn2IU.mjs";
4
+ //#region src/cli/auth-router.ts
5
+ async function chooseDestination(root, args, interactive) {
6
+ const saved = readDeploymentPlatform(root);
7
+ const platform = args.platform ?? (saved === "none" ? null : saved);
8
+ if (platform) return { platform };
9
+ if (!interactive) throw new Error("auth: No deployment destination is saved. Use `void auth login --platform cloudflare|void`, `void account login`, or `void cloudflare login`.");
10
+ const connections = listPlatformConnections();
11
+ const options = [
12
+ {
13
+ value: "cloudflare",
14
+ label: "Cloudflare",
15
+ hint: "Your own Cloudflare account"
16
+ },
17
+ ...connections.map((connection) => ({
18
+ value: connection.apiUrl,
19
+ label: connection.displayName,
20
+ hint: connection.apiUrl
21
+ })),
22
+ ...connections.length === 0 ? [{
23
+ value: "void",
24
+ label: "Void platform",
25
+ hint: "Use the current Void account origin"
26
+ }] : []
27
+ ];
28
+ const selected = await select({
29
+ message: "Where do you want to authenticate?",
30
+ options
31
+ });
32
+ if (isCancel(selected) || typeof selected !== "string") throw new Error("auth: Cancelled.");
33
+ return selected === "cloudflare" ? { platform: "cloudflare" } : {
34
+ platform: "void",
35
+ ...selected === "void" ? {} : { apiUrl: selected }
36
+ };
37
+ }
38
+ async function runAuthRouter(root, args, interactive = Boolean(process.stdin.isTTY)) {
39
+ if (args.subcommand === "link") {
40
+ const { runAccountCommand } = await import("./account-cmd-D8OC-U7y.mjs");
41
+ await runAccountCommand(root, {
42
+ subcommand: "link",
43
+ ...args.connectionId ? { connectionId: args.connectionId } : {}
44
+ });
45
+ return;
46
+ }
47
+ if (args.subcommand === "token") {
48
+ const { runAccountCommand } = await import("./account-cmd-D8OC-U7y.mjs");
49
+ await runAccountCommand(root, { subcommand: "token" });
50
+ return;
51
+ }
52
+ const destination = await chooseDestination(root, args, interactive);
53
+ if (destination.platform === "cloudflare") {
54
+ const { runCloudflareCommand } = await import("./cloudflare-cmd-D6PrKn7o.mjs");
55
+ await runCloudflareCommand(root, { subcommand: args.subcommand === "whoami" || args.subcommand === "status" ? "status" : args.subcommand });
56
+ return;
57
+ }
58
+ const { runAccountCommand } = await import("./account-cmd-D8OC-U7y.mjs");
59
+ const subcommand = args.subcommand === "status" ? "whoami" : args.subcommand;
60
+ if (!destination.apiUrl) {
61
+ await runAccountCommand(root, { subcommand });
62
+ return;
63
+ }
64
+ const previous = process.env.VOID_API_URL;
65
+ process.env.VOID_API_URL = destination.apiUrl;
66
+ try {
67
+ await runAccountCommand(root, { subcommand });
68
+ } finally {
69
+ if (previous === void 0) delete process.env.VOID_API_URL;
70
+ else process.env.VOID_API_URL = previous;
71
+ }
72
+ }
73
+ //#endregion
74
+ export { runAuthRouter };
@@ -1,4 +1,4 @@
1
- import { a as dim, c as import_picocolors, r as cliTitle } from "./output-urU86XeT.mjs";
1
+ import { a as dim, c as import_picocolors, r as cliTitle } from "./output-CCH48AMM.mjs";
2
2
  import { c as getToken } from "./auth-B9_D6ygs.mjs";
3
3
  import { o as readProjectConfig } from "./project-CWNIPoXc.mjs";
4
4
  import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
@@ -65,7 +65,7 @@ async function runBuildLogsCommand(root, args) {
65
65
  intro(cliTitle("build logs"));
66
66
  const token = getToken(root);
67
67
  if (!token) {
68
- log.error("Not logged in. Run `void auth login` first.");
68
+ log.error("Not logged in. Run `void account login` first.");
69
69
  process.exit(1);
70
70
  }
71
71
  const client = new PlatformClient(token, { root });
@@ -1,4 +1,4 @@
1
- import { a as dim, i as createSpinner, r as cliTitle } from "./output-urU86XeT.mjs";
1
+ import { a as dim, i as createSpinner, r as cliTitle } from "./output-CCH48AMM.mjs";
2
2
  import { c as getToken } from "./auth-B9_D6ygs.mjs";
3
3
  import { o as readProjectConfig } from "./project-CWNIPoXc.mjs";
4
4
  import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
@@ -10,7 +10,7 @@ async function runPurgeCacheCommand(root, projectSlug) {
10
10
  intro(cliTitle("project purge-cache"));
11
11
  const token = getToken(root);
12
12
  if (!token) {
13
- log.error("Not logged in. Run `void auth login` first.");
13
+ log.error("Not logged in. Run `void account login` first.");
14
14
  process.exit(1);
15
15
  }
16
16
  const requestedSlug = getRequestedProjectSlug({ projectSlug });
@@ -1,4 +1,4 @@
1
- import { r as cliTitle } from "./output-urU86XeT.mjs";
1
+ import { r as cliTitle } from "./output-CCH48AMM.mjs";
2
2
  import { c as getToken } from "./auth-B9_D6ygs.mjs";
3
3
  import { o as readProjectConfig } from "./project-CWNIPoXc.mjs";
4
4
  import { E as confirm, O as intro, P as outro, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
@@ -15,7 +15,7 @@ async function runCancelDeployCommand(root, deployId) {
15
15
  intro(cliTitle("project cancel"));
16
16
  const token = getToken(root);
17
17
  if (!token) {
18
- log.error("Not logged in. Run `void auth login` first.");
18
+ log.error("Not logged in. Run `void account login` first.");
19
19
  process.exit(1);
20
20
  }
21
21
  const linked = readProjectConfig(root);
@@ -19,7 +19,9 @@ const args = process.argv.slice(2);
19
19
  function cfEnvironment() {
20
20
  const env = {
21
21
  ...process.env,
22
- CF_DELEGATION: "1"
22
+ CF_DELEGATION: "1",
23
+ CF_SEND_TELEMETRY: "false",
24
+ CF_NO_OSC_PROGRESS: "1"
23
25
  };
24
26
  if (env.HTTP_PROXY || env.HTTPS_PROXY || env.http_proxy || env.https_proxy) env.NODE_USE_ENV_PROXY = "1";
25
27
  for (const [canonical, alias] of [
@@ -39,6 +41,7 @@ function result(status, stdout = "", stderr = "") {
39
41
  }
40
42
  function runCf(command, cwd = process.cwd(), useLoginProfile = false) {
41
43
  const env = cfEnvironment();
44
+ env.CF_QUIET = "1";
42
45
  if (useLoginProfile) delete env.CLOUDFLARE_AUTH_USE_KEYRING;
43
46
  const child = spawnSync(process.execPath, [cf, ...command], {
44
47
  cwd,
@@ -57,9 +60,16 @@ function runCf(command, cwd = process.cwd(), useLoginProfile = false) {
57
60
  return result(child.status ?? 1, child.stdout ?? "", stderr);
58
61
  }
59
62
  function runInteractiveCf(command) {
60
- const child = spawnSync(process.execPath, [cf, ...command], {
63
+ const child = spawnSync(process.execPath, [
64
+ cf,
65
+ ...command,
66
+ "--quiet"
67
+ ], {
61
68
  cwd: process.cwd(),
62
- env: cfEnvironment(),
69
+ env: {
70
+ ...cfEnvironment(),
71
+ CF_QUIET: "1"
72
+ },
63
73
  shell: false,
64
74
  stdio: "inherit",
65
75
  windowsHide: true
package/dist/cli/cli.mjs CHANGED
@@ -3,11 +3,53 @@ import { a as join } from "../dist-4WkAWhWx.mjs";
3
3
  import { j as log } from "../dist-Dn6nn2IU.mjs";
4
4
  import { n as getPackageDir } from "../agents-gni4eqBu.mjs";
5
5
  import { t as formatCloudflareUserMessage } from "../cloudflare-user-output-Q-k0QoNQ.mjs";
6
- import { a as operatorGroups, i as printVoidHeader, n as printGlobalHelp, o as parseOperatorArgs, r as printHelpPage, t as getHelpPath } from "../help-C46mnlUS.mjs";
6
+ import { a as operatorGroups, i as printVoidHeader, n as printGlobalHelp, o as parseOperatorArgs, r as printHelpPage, t as getHelpPath } from "../help-iQOt7WHk.mjs";
7
7
  import { r as OperatorClientError } from "../operator-client-A0iex2yi.mjs";
8
8
  import { readFileSync } from "node:fs";
9
9
  import { PLATFORM_LOGIN_KINDS, parsePlatformLoginId } from "@void/platform";
10
10
  import { parseArgs } from "node:util";
11
+ //#region src/cli/account-args.ts
12
+ const accountSubcommands = [
13
+ {
14
+ name: "login",
15
+ description: "Log in with an enabled platform login method"
16
+ },
17
+ {
18
+ name: "link",
19
+ description: "Link another login method to your account"
20
+ },
21
+ {
22
+ name: "logout",
23
+ description: "Log out and remove credentials"
24
+ },
25
+ {
26
+ name: "whoami",
27
+ description: "Show the logged-in username"
28
+ },
29
+ {
30
+ name: "token",
31
+ description: "Copy auth token to clipboard"
32
+ }
33
+ ];
34
+ function parseAccountArgs(args) {
35
+ const [subcommand, extra, trailing] = args;
36
+ if (subcommand === "link") {
37
+ if (trailing || extra !== void 0 && !/^[a-z][a-z0-9_-]{0,63}$/.test(extra)) throw new Error("account: Usage: void account link [connection-id].");
38
+ return {
39
+ subcommand,
40
+ ...extra ? { connectionId: extra } : {}
41
+ };
42
+ }
43
+ if (!subcommand || ![
44
+ "login",
45
+ "logout",
46
+ "whoami",
47
+ "token"
48
+ ].includes(subcommand)) throw new Error("account: Usage: void account <login|link|logout|whoami|token>.");
49
+ if (extra) throw new Error(`account: Unexpected argument '${extra}'.`);
50
+ return { subcommand };
51
+ }
52
+ //#endregion
11
53
  //#region src/cli/args.ts
12
54
  function parseDeployArgs(args) {
13
55
  let parsed;
@@ -86,42 +128,45 @@ function parseDeployArgs(args) {
86
128
  const authSubcommands = [
87
129
  {
88
130
  name: "login",
89
- description: "Log in with an enabled platform login method"
131
+ description: "Sign in to the selected deployment destination"
90
132
  },
91
133
  {
92
- name: "link",
93
- description: "Link another login method to your account"
134
+ name: "status",
135
+ description: "Show the selected destination’s signed-in identity"
94
136
  },
95
137
  {
96
138
  name: "logout",
97
- description: "Log out and remove credentials"
98
- },
99
- {
100
- name: "whoami",
101
- description: "Show the logged-in username"
102
- },
103
- {
104
- name: "token",
105
- description: "Copy auth token to clipboard"
139
+ description: "Sign out of the selected deployment destination"
106
140
  }
107
141
  ];
108
142
  function parseAuthArgs(args) {
109
- const [subcommand, extra, trailing] = args;
110
- if (subcommand === "link") {
111
- if (trailing || extra !== void 0 && !/^[a-z][a-z0-9_-]{0,63}$/.test(extra)) throw new Error("auth: Usage: void auth link [connection-id].");
112
- return {
113
- subcommand,
114
- ...extra ? { connectionId: extra } : {}
115
- };
116
- }
143
+ const [subcommand, ...rest] = args;
117
144
  if (!subcommand || ![
118
145
  "login",
119
146
  "logout",
147
+ "status",
120
148
  "whoami",
149
+ "link",
121
150
  "token"
122
- ].includes(subcommand)) throw new Error("auth: Usage: void auth <login|link|logout|whoami|token>.");
123
- if (extra) throw new Error(`auth: Unexpected argument '${extra}'.`);
124
- return { subcommand };
151
+ ].includes(subcommand)) throw new Error("auth: Usage: void auth <login|status|logout> [--platform cloudflare|void].");
152
+ let platform;
153
+ let connectionId;
154
+ for (let index = 0; index < rest.length; index++) {
155
+ const value = rest[index];
156
+ if (value === "--platform") {
157
+ const target = rest[++index];
158
+ if (target !== "cloudflare" && target !== "void") throw new Error("auth: --platform must be cloudflare or void.");
159
+ if (platform) throw new Error("auth: --platform may be supplied only once.");
160
+ platform = target;
161
+ } else if (subcommand === "link" && !connectionId && /^[a-z][a-z0-9_-]{0,63}$/.test(value)) connectionId = value;
162
+ else throw new Error(`auth: Unexpected argument '${value}'.`);
163
+ }
164
+ if ((subcommand === "link" || subcommand === "token") && platform === "cloudflare") throw new Error(`auth: ${subcommand} belongs to a Void account. Use \`void account ${subcommand}\`.`);
165
+ return {
166
+ subcommand,
167
+ ...platform ? { platform } : {},
168
+ ...connectionId ? { connectionId } : {}
169
+ };
125
170
  }
126
171
  //#endregion
127
172
  //#region src/cli/build-args.ts
@@ -1932,7 +1977,7 @@ async function runSubcommandGroup(command, subcommands, parse, run) {
1932
1977
  const hasNamedSubcommand = args.slice(1).some((arg) => subcommands.some(({ name }) => name === arg));
1933
1978
  try {
1934
1979
  if ((!sub || sub.startsWith("-") && !hasNamedSubcommand) && process.stdin.isTTY) {
1935
- const { promptSubcommand } = await import("../subcommand-prompt-Gj3VzLIh.mjs");
1980
+ const { promptSubcommand } = await import("../subcommand-prompt-BuGYkAkC.mjs");
1936
1981
  if (command === "platform" && !sub) log.info("A Void platform lets a team deploy Void apps to a shared Cloudflare account.\nThis command sets up and manages platforms. Join with `void connect <url>`.\nDocs: https://void.cloud/guide/self-hosted-platform");
1937
1982
  const result = await promptSubcommand(command, subcommands);
1938
1983
  if (!result) process.exit(0);
@@ -1972,7 +2017,7 @@ if (helpPath) {
1972
2017
  log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
1973
2018
  process.exit(1);
1974
2019
  }
1975
- import("../deploy-CYPymbtG.mjs").then(({ runDeploy }) => {
2020
+ import("../deploy-CsjbRNyv.mjs").then(({ runDeploy }) => {
1976
2021
  runDeploy(root, {
1977
2022
  projectSlug: deployArgs.projectSlug,
1978
2023
  dir: deployArgs.dir,
@@ -1990,24 +2035,25 @@ if (helpPath) {
1990
2035
  });
1991
2036
  } else if (command === "connect") (async () => {
1992
2037
  const parsed = parseConnectArgs(args.slice(1));
1993
- const { runConnectCommand } = await import("../connect-BvC9kolB.mjs");
2038
+ const { runConnectCommand } = await import("../connect-DLx1pRYk.mjs");
1994
2039
  await runConnectCommand(process.cwd(), parsed);
1995
2040
  })().catch((err) => {
1996
2041
  log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
1997
2042
  process.exit(1);
1998
2043
  });
1999
- else if (command === "auth") runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (root, parsed) => import("../auth-cmd-MkBG2u1f.mjs").then(({ runAuthCommand }) => runAuthCommand(root, parsed)));
2000
- else if (command === "platform") runSubcommandGroup("platform", platformSubcommands, parsePlatformArgs, (root, parsed) => import("../platform-cmd-C9Vt7m-d.mjs").then(({ runPlatformCommand }) => runPlatformCommand(root, parsed)));
2044
+ else if (command === "auth") runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (root, parsed) => import("../auth-router-OHZNmrb_.mjs").then(({ runAuthRouter }) => runAuthRouter(root, parsed)));
2045
+ else if (command === "account") runSubcommandGroup("account", accountSubcommands, parseAccountArgs, (root, parsed) => import("../account-cmd-D8OC-U7y.mjs").then(({ runAccountCommand }) => runAccountCommand(root, parsed)));
2046
+ else if (command === "platform") runSubcommandGroup("platform", platformSubcommands, parsePlatformArgs, (root, parsed) => import("../platform-cmd-Cl9Uhzru.mjs").then(({ runPlatformCommand }) => runPlatformCommand(root, parsed)));
2001
2047
  else if (command === "cloudflare") runSubcommandGroup("cloudflare", cloudflareSubcommands, parseCloudflareArgs, (root, parsed) => import("../cloudflare-cmd-D6PrKn7o.mjs").then(({ runCloudflareCommand }) => runCloudflareCommand(root, parsed)));
2002
- else if (command === "project") runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-2lN--YAX.mjs").then(({ runProjectCommand }) => runProjectCommand(root, parsed)));
2003
- else if (command === "secret") runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-wnTel5Yw.mjs").then(({ runSecretCommand }) => runSecretCommand(root, parsed)));
2004
- else if (command === "domain") runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (root, parsed) => import("../domain-CITt8lC-.mjs").then(({ runDomainCommand }) => runDomainCommand(root, parsed)));
2005
- else if (command === "email") runSubcommandGroup("email", emailSubcommands, parseEmailArgs, (root, parsed) => import("../email-_8VmyX7V.mjs").then(({ runEmailCommand }) => runEmailCommand(root, parsed)));
2006
- else if (command === "db") runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-R7IQgOv5.mjs").then(({ runDbCommand }) => runDbCommand(root, parsed)));
2007
- else if (command === "env") runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-DV4r3nHz.mjs").then(({ runEnvCommand }) => runEnvCommand(root, parsed)));
2008
- else if (command === "gen") runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-BBiIZw6g.mjs").then(({ runGenCommand }) => runGenCommand(root, parsed)));
2009
- else if (command === "github") runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-jYjha2LO.mjs").then(({ runGithubCommand }) => runGithubCommand(root, parsed)));
2010
- else if (command === "build") runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-DsBGwtfs.mjs").then(({ runBuildCommand }) => runBuildCommand(root, parsed)));
2048
+ else if (command === "project") runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-BuF9doku.mjs").then(({ runProjectCommand }) => runProjectCommand(root, parsed)));
2049
+ else if (command === "secret") runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-Rt9c4Ttw.mjs").then(({ runSecretCommand }) => runSecretCommand(root, parsed)));
2050
+ else if (command === "domain") runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (root, parsed) => import("../domain-Av2AkLQP.mjs").then(({ runDomainCommand }) => runDomainCommand(root, parsed)));
2051
+ else if (command === "email") runSubcommandGroup("email", emailSubcommands, parseEmailArgs, (root, parsed) => import("../email-CUqa6TtH.mjs").then(({ runEmailCommand }) => runEmailCommand(root, parsed)));
2052
+ else if (command === "db") runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-B98_UV4H.mjs").then(({ runDbCommand }) => runDbCommand(root, parsed)));
2053
+ else if (command === "env") runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-D4RIGEzz.mjs").then(({ runEnvCommand }) => runEnvCommand(root, parsed)));
2054
+ else if (command === "gen") runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-B87rlalt.mjs").then(({ runGenCommand }) => runGenCommand(root, parsed)));
2055
+ else if (command === "github") runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-BEK4VprE.mjs").then(({ runGithubCommand }) => runGithubCommand(root, parsed)));
2056
+ else if (command === "build") runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-Bft7EY51.mjs").then(({ runBuildCommand }) => runBuildCommand(root, parsed)));
2011
2057
  else if (command === "prepare") {
2012
2058
  const root = process.cwd();
2013
2059
  let prepareArgs;
@@ -2017,7 +2063,7 @@ else if (command === "prepare") {
2017
2063
  log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
2018
2064
  process.exit(1);
2019
2065
  }
2020
- import("../prepare-CaUxODOU.mjs").then(({ runPrepareCommand }) => {
2066
+ import("../prepare-_T-Haxrr.mjs").then(({ runPrepareCommand }) => {
2021
2067
  runPrepareCommand(root, prepareArgs).catch((err) => {
2022
2068
  log.error(formatCloudflareUserMessage(err.message ?? String(err)));
2023
2069
  process.exit(1);
@@ -2025,7 +2071,7 @@ else if (command === "prepare") {
2025
2071
  });
2026
2072
  } else if (command === "init") {
2027
2073
  const root = process.cwd();
2028
- import("../init-CSXmvxKu.mjs").then(({ runInitCommand, parseInitArgs }) => {
2074
+ import("../init-D5niUPAz.mjs").then(({ runInitCommand, parseInitArgs }) => {
2029
2075
  let initArgs;
2030
2076
  try {
2031
2077
  initArgs = parseInitArgs(args.slice(1));
@@ -2043,7 +2089,7 @@ else if (command === "prepare") {
2043
2089
  log.error("migrate: This command takes no arguments.");
2044
2090
  process.exit(1);
2045
2091
  }
2046
- import("../migrate-CLty4mZR.mjs").then(({ runMigrateCommand }) => {
2092
+ import("../migrate-BXY3B3m7.mjs").then(({ runMigrateCommand }) => {
2047
2093
  runMigrateCommand(process.cwd()).catch((err) => {
2048
2094
  log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
2049
2095
  process.exit(1);
@@ -2076,8 +2122,13 @@ else if (command === "prepare") {
2076
2122
  },
2077
2123
  {
2078
2124
  name: "auth",
2079
- hint: "login | logout | whoami | token",
2080
- description: "Login, account linking, logout, and token management"
2125
+ hint: "login | status | logout",
2126
+ description: "Sign in to this project’s Cloudflare or Void destination"
2127
+ },
2128
+ {
2129
+ name: "account",
2130
+ hint: "login | link | logout | whoami | token",
2131
+ description: "Manage your Void platform account"
2081
2132
  },
2082
2133
  {
2083
2134
  name: "platform",
@@ -2145,46 +2196,47 @@ else if (command === "prepare") {
2145
2196
  ];
2146
2197
  (async () => {
2147
2198
  printVoidHeader();
2148
- const { promptSubcommand } = await import("../subcommand-prompt-Gj3VzLIh.mjs");
2199
+ const { promptSubcommand } = await import("../subcommand-prompt-BuGYkAkC.mjs");
2149
2200
  const result = await promptSubcommand("", topLevelCommands);
2150
2201
  if (!result) process.exit(0);
2151
2202
  const cmd = result.subcommand;
2152
2203
  const root = process.cwd();
2153
2204
  switch (cmd) {
2154
2205
  case "connect": {
2155
- const { runConnectCommand } = await import("../connect-BvC9kolB.mjs");
2206
+ const { runConnectCommand } = await import("../connect-DLx1pRYk.mjs");
2156
2207
  await runConnectCommand(root, parseConnectArgs([]));
2157
2208
  return;
2158
2209
  }
2159
2210
  case "init": {
2160
- const { runInitCommand, parseInitArgs } = await import("../init-CSXmvxKu.mjs");
2211
+ const { runInitCommand, parseInitArgs } = await import("../init-D5niUPAz.mjs");
2161
2212
  await runInitCommand(root, parseInitArgs([]));
2162
2213
  return;
2163
2214
  }
2164
2215
  case "migrate": {
2165
- const { runMigrateCommand } = await import("../migrate-CLty4mZR.mjs");
2216
+ const { runMigrateCommand } = await import("../migrate-BXY3B3m7.mjs");
2166
2217
  await runMigrateCommand(root);
2167
2218
  return;
2168
2219
  }
2169
2220
  case "deploy": {
2170
- const { runDeploy } = await import("../deploy-CYPymbtG.mjs");
2221
+ const { runDeploy } = await import("../deploy-CsjbRNyv.mjs");
2171
2222
  await runDeploy(root);
2172
2223
  return;
2173
2224
  }
2174
- case "auth": return runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (r, p) => import("../auth-cmd-MkBG2u1f.mjs").then(({ runAuthCommand }) => runAuthCommand(r, p)));
2175
- case "platform": return runSubcommandGroup("platform", platformSubcommands, parsePlatformArgs, (r, p) => import("../platform-cmd-C9Vt7m-d.mjs").then(({ runPlatformCommand }) => runPlatformCommand(r, p)));
2225
+ case "auth": return runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (r, p) => import("../auth-router-OHZNmrb_.mjs").then(({ runAuthRouter }) => runAuthRouter(r, p)));
2226
+ case "account": return runSubcommandGroup("account", accountSubcommands, parseAccountArgs, (r, p) => import("../account-cmd-D8OC-U7y.mjs").then(({ runAccountCommand }) => runAccountCommand(r, p)));
2227
+ case "platform": return runSubcommandGroup("platform", platformSubcommands, parsePlatformArgs, (r, p) => import("../platform-cmd-Cl9Uhzru.mjs").then(({ runPlatformCommand }) => runPlatformCommand(r, p)));
2176
2228
  case "cloudflare": return runSubcommandGroup("cloudflare", cloudflareSubcommands, parseCloudflareArgs, (r, p) => import("../cloudflare-cmd-D6PrKn7o.mjs").then(({ runCloudflareCommand }) => runCloudflareCommand(r, p)));
2177
- case "project": return runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (r, p) => import("../project-cmd-2lN--YAX.mjs").then(({ runProjectCommand }) => runProjectCommand(r, p)));
2178
- case "secret": return runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (r, p) => import("../secret-wnTel5Yw.mjs").then(({ runSecretCommand }) => runSecretCommand(r, p)));
2179
- case "domain": return runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (r, p) => import("../domain-CITt8lC-.mjs").then(({ runDomainCommand }) => runDomainCommand(r, p)));
2180
- case "github": return runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (r, p) => import("../github-cmd-jYjha2LO.mjs").then(({ runGithubCommand }) => runGithubCommand(r, p)));
2181
- case "build": return runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (r, p) => import("../build-cmd-DsBGwtfs.mjs").then(({ runBuildCommand }) => runBuildCommand(r, p)));
2182
- case "email": return runSubcommandGroup("email", emailSubcommands, parseEmailArgs, (r, p) => import("../email-_8VmyX7V.mjs").then(({ runEmailCommand }) => runEmailCommand(r, p)));
2183
- case "db": return runSubcommandGroup("db", dbSubcommands, parseDbArgs, (r, p) => import("../db-R7IQgOv5.mjs").then(({ runDbCommand }) => runDbCommand(r, p)));
2184
- case "env": return runSubcommandGroup("env", envSubcommands, parseEnvArgs, (r, p) => import("../env-DV4r3nHz.mjs").then(({ runEnvCommand }) => runEnvCommand(r, p)));
2185
- case "gen": return runSubcommandGroup("gen", genSubcommands, parseGenArgs, (r, p) => import("../gen-BBiIZw6g.mjs").then(({ runGenCommand }) => runGenCommand(r, p)));
2229
+ case "project": return runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (r, p) => import("../project-cmd-BuF9doku.mjs").then(({ runProjectCommand }) => runProjectCommand(r, p)));
2230
+ case "secret": return runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (r, p) => import("../secret-Rt9c4Ttw.mjs").then(({ runSecretCommand }) => runSecretCommand(r, p)));
2231
+ case "domain": return runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (r, p) => import("../domain-Av2AkLQP.mjs").then(({ runDomainCommand }) => runDomainCommand(r, p)));
2232
+ case "github": return runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (r, p) => import("../github-cmd-BEK4VprE.mjs").then(({ runGithubCommand }) => runGithubCommand(r, p)));
2233
+ case "build": return runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (r, p) => import("../build-cmd-Bft7EY51.mjs").then(({ runBuildCommand }) => runBuildCommand(r, p)));
2234
+ case "email": return runSubcommandGroup("email", emailSubcommands, parseEmailArgs, (r, p) => import("../email-CUqa6TtH.mjs").then(({ runEmailCommand }) => runEmailCommand(r, p)));
2235
+ case "db": return runSubcommandGroup("db", dbSubcommands, parseDbArgs, (r, p) => import("../db-B98_UV4H.mjs").then(({ runDbCommand }) => runDbCommand(r, p)));
2236
+ case "env": return runSubcommandGroup("env", envSubcommands, parseEnvArgs, (r, p) => import("../env-D4RIGEzz.mjs").then(({ runEnvCommand }) => runEnvCommand(r, p)));
2237
+ case "gen": return runSubcommandGroup("gen", genSubcommands, parseGenArgs, (r, p) => import("../gen-B87rlalt.mjs").then(({ runGenCommand }) => runGenCommand(r, p)));
2186
2238
  case "prepare": {
2187
- const { runPrepareCommand } = await import("../prepare-CaUxODOU.mjs");
2239
+ const { runPrepareCommand } = await import("../prepare-_T-Haxrr.mjs");
2188
2240
  await runPrepareCommand(root, parsePrepareArgs([]));
2189
2241
  return;
2190
2242
  }
@@ -3,8 +3,8 @@ import { o as listPlatformConnections, s as normalizePlatformApiUrl } from "./pl
3
3
  import { i as readDeploymentPlatform, l as writeDeploymentPlatform, u as writePlatformSelection } from "./project-CWNIPoXc.mjs";
4
4
  import { I as select, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
5
5
  import { i as isExpiredTokenError, n as PlatformClient } from "./client-PdAJ-F0t.mjs";
6
- import { t as promptForLoginToken } from "./login-CKk5NX4d.mjs";
7
- import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-DRxCOTwy.mjs";
6
+ import { t as promptForLoginToken } from "./login-BgQJzxAl.mjs";
7
+ import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-CudokNIg.mjs";
8
8
  import { t as connectCloudflare } from "./cloudflare-connect-DloREDlc.mjs";
9
9
  //#region src/cli/connect.ts
10
10
  async function selectVoidPlatform(interactive) {
@@ -74,7 +74,7 @@ async function runConnectCommand(root, args, interactive = Boolean(process.stdin
74
74
  const selected = Boolean(envUrl && normalizePlatformApiUrl(envUrl) !== discovery.apiUrl || process.env.VOID_TOKEN && !envUrl) ? false : writePlatformSelection(root, discovery);
75
75
  log.success(`Connected to ${discovery.displayName} at ${discovery.apiUrl}.`);
76
76
  if (!selected) log.info("Saved the connection. The current project link or environment still selects its existing destination.");
77
- if (args.noLogin) log.info("Connection saved without login. Run `void auth login` in a project using this platform when ready.");
77
+ if (args.noLogin) log.info("Connection saved without login. Run `void account login` in a project using this platform when ready.");
78
78
  else if (selected) log.info("Run `void project link` to select a project, then `void deploy`.");
79
79
  }
80
80
  //#endregion
@@ -1,4 +1,4 @@
1
- import { c as import_picocolors } from "./output-urU86XeT.mjs";
1
+ import { c as import_picocolors } from "./output-CCH48AMM.mjs";
2
2
  import { s as getSiteDomain } from "./auth-B9_D6ygs.mjs";
3
3
  import { d as writeProjectConfig, t as attachSelectedPlatform } from "./project-CWNIPoXc.mjs";
4
4
  import { B as text, E as confirm, I as select, T as cancel, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
@@ -1,2 +1,2 @@
1
- import { t as createProjectWithSlugRetry } from "./create-project-C9lQhRzj.mjs";
1
+ import { t as createProjectWithSlugRetry } from "./create-project-BZBl_gQ0.mjs";
2
2
  export { createProjectWithSlugRetry };