void 0.20.2 → 0.20.3

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 (68) hide show
  1. package/dist/{auth-cmd-gniL2fNt.mjs → auth-cmd-CzwquNiP.mjs} +3 -3
  2. package/dist/{auth-link-NZdjCmSc.mjs → auth-link-ElDTgF7j.mjs} +3 -3
  3. package/dist/{build-cmd-sI18tX_O.mjs → build-cmd-BpJe6boP.mjs} +1 -1
  4. package/dist/{cache-IHn5MwBC.mjs → cache-D98YTqeE.mjs} +1 -1
  5. package/dist/{cancel-deploy-C5qTOdLi.mjs → cancel-deploy-CPbEQLMG.mjs} +1 -1
  6. package/dist/cli/cli.mjs +27 -26
  7. package/dist/{client-dHfSJvAN.mjs → client-BQBrZoCX.mjs} +143 -78
  8. package/dist/{connect-Bfk31O_8.mjs → connect-WCQZ_u3m.mjs} +3 -3
  9. package/dist/{create-project-Bk9Z0-Jg.mjs → create-project-D0oXA090.mjs} +2 -3
  10. package/dist/{db-BkRoptAt.mjs → db-DJ-9qs3S.mjs} +2 -2
  11. package/dist/{delete-DouASY9P.mjs → delete-BZ4-WaGm.mjs} +1 -1
  12. package/dist/{deploy-DTaWUS1S.mjs → deploy-BAhhcg5q.mjs} +17 -10
  13. package/dist/{domain-1RhhOVrC.mjs → domain-BxAyhxXN.mjs} +1 -1
  14. package/dist/{email-C-lGh51B.mjs → email-Bj7Cvdwp.mjs} +2 -2
  15. package/dist/{env-DJHsPE7Z.mjs → env-DP_EErve.mjs} +1 -1
  16. package/dist/{github-cmd-PW7ZnWTp.mjs → github-cmd-C-z_xRrQ.mjs} +13 -19
  17. package/dist/index.mjs +4 -4
  18. package/dist/{init-BWZ7q5Z4.mjs → init-BGktCXgA.mjs} +4 -4
  19. package/dist/{link-Rmvu2Wl_.mjs → link-D2kbqhWb.mjs} +2 -2
  20. package/dist/{list-DEE2S6mY.mjs → list-CvkK_G7k.mjs} +1 -1
  21. package/dist/{login-Uvferzmm.mjs → login-WIjNc77c.mjs} +2 -2
  22. package/dist/{logs-27FenuiC.mjs → logs-dLUFCapG.mjs} +1 -1
  23. package/dist/{operator-cmd-CjOTmAYE.mjs → operator-cmd-CKJ7xIRs.mjs} +2 -2
  24. package/dist/{platform-auth-config-DrbQXXiW.mjs → platform-auth-config-CdVWRRJr.mjs} +2 -2
  25. package/dist/{platform-auth-protection-Bhtvp0B_.mjs → platform-auth-protection-Drl0qhrn.mjs} +2 -2
  26. package/dist/{platform-auth-recovery-CeOKGVeJ.mjs → platform-auth-recovery-CmKEWpDo.mjs} +2 -2
  27. package/dist/{platform-cmd-BFhieCdV.mjs → platform-cmd-5q_k56xS.mjs} +3 -3
  28. package/dist/{platform-domain-C74PULqV.mjs → platform-domain-4GiDlcqx.mjs} +2 -2
  29. package/dist/{platform-lifecycle-BwAIgz-t.mjs → platform-lifecycle-R9xAxvtG.mjs} +61 -25
  30. package/dist/{platform-management-COogu_Se.mjs → platform-management-BfWsXHEW.mjs} +5 -3
  31. package/dist/{platform-recovery-ewqLefp1.mjs → platform-recovery-CbK-I1FB.mjs} +2 -2
  32. package/dist/{project-cmd-DmZK9Hxf.mjs → project-cmd-CTdmnzvc.mjs} +12 -12
  33. package/dist/{project-team-D8jOJMUJ.mjs → project-team-CGxsQe3_.mjs} +4 -2
  34. package/dist/{project-token-DA34bf-C.mjs → project-token-Cirx7uwZ.mjs} +1 -1
  35. package/dist/{requests-CUExwGQQ.mjs → requests-4Nq59hOr.mjs} +1 -1
  36. package/dist/{rollback-CDNGU1gr.mjs → rollback-Dr7u0Ljx.mjs} +1 -1
  37. package/dist/runtime/remote/index.mjs +49 -8
  38. package/dist/runtime/sandbox.d.mts +4 -56
  39. package/dist/runtime/sandbox.mjs +81 -220
  40. package/dist/{secret-Bzzi2e9E.mjs → secret-AcPi-FoA.mjs} +1 -1
  41. package/package.json +7 -7
  42. package/skills/void/SKILL.md +2 -2
  43. package/skills/void/docs/guide/deployment.md +14 -14
  44. package/skills/void/docs/guide/email.md +12 -10
  45. package/skills/void/docs/guide/platform/administration/access.md +163 -0
  46. package/skills/void/docs/guide/platform/administration/email.md +121 -0
  47. package/skills/void/docs/guide/platform/administration/operations.md +97 -0
  48. package/skills/void/docs/guide/platform/administration/projects.md +54 -0
  49. package/skills/void/docs/guide/platform/development/local.md +119 -0
  50. package/skills/void/docs/guide/platform/development/runtime.md +124 -0
  51. package/skills/void/docs/guide/platform/development/schema-ci.md +95 -0
  52. package/skills/void/docs/guide/platform/installation/ci.md +55 -0
  53. package/skills/void/docs/guide/platform/installation/credentials.md +80 -0
  54. package/skills/void/docs/guide/platform/installation/domains.md +68 -0
  55. package/skills/void/docs/guide/platform/installation/first-deployment.md +82 -0
  56. package/skills/void/docs/guide/platform/installation/maintenance.md +137 -0
  57. package/skills/void/docs/guide/platform/installation/prerequisites.md +86 -0
  58. package/skills/void/docs/guide/platform/installation/setup.md +169 -0
  59. package/skills/void/docs/guide/platform/installation/uninstall.md +54 -0
  60. package/skills/void/docs/guide/platform-administration.md +6 -414
  61. package/skills/void/docs/guide/platform-development.md +5 -316
  62. package/skills/void/docs/guide/project-collaboration.md +1 -1
  63. package/skills/void/docs/guide/sandboxes.md +9 -24
  64. package/skills/void/docs/guide/self-hosted-platform.md +11 -694
  65. package/skills/void/docs/reference/api.md +34 -34
  66. package/skills/void/docs/reference/cli.md +28 -11
  67. package/skills/void/docs/reference/config.md +1 -1
  68. package/skills/void/docs/reference/resource-inference.md +10 -10
@@ -1,6 +1,6 @@
1
1
  import { A as outro, C as cancel, D as log, E as intro, I as isCancel, P as text, i as createSpinner, k as note, r as cliTitle } from "./output-B0cfNSx5.mjs";
2
2
  import { C as removeProjectConfig, S as readProjectConfig, l as getToken } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
3
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
4
4
  import { r as resolveProjectBySlug } from "./resolve-project--Vxawf7z.mjs";
5
5
  //#region src/cli/delete.ts
6
6
  async function runDeleteCommand(root, slug, options) {
@@ -24,14 +24,14 @@ import { n as openMigrationValidationDatabase, t as SqliteMigrationError } from
24
24
  import { t as scanPages } from "./scan-CpK-57ug.mjs";
25
25
  import { renderPrerenderPaths } from "./prerender-render.mjs";
26
26
  import { a as scanEmailHandlersSync, r as hasEmailHandlers } from "./email-Ce6SQq-i.mjs";
27
- import { a as isExpiredTokenError, i as isCliOutdatedError, n as PlatformClient, o as parsePlatformErrorBody, t as PlatformApiError } from "./client-dHfSJvAN.mjs";
27
+ import { a as isExpiredTokenError, i as isCliOutdatedError, n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-BQBrZoCX.mjs";
28
28
  import { a as resolveProjectCommand, i as hasBackendFiles, n as detectPreset, o as resolveWranglerArgv, r as formatProjectCommand, t as FRAMEWORK_PRESETS } from "./preset-lAy0B0BQ.mjs";
29
29
  import { i as cloudflareKeyringNeedsTerminal, s as ensureCloudflareAuthentication, t as CloudflareAuthenticationError } from "./cloudflare-auth-6M5llVPC.mjs";
30
30
  import { n as createCloudflareEmptyDomainPublisher } from "./cloudflare-operations-BzWnlC1_.mjs";
31
- import { i as promptProjectSetupAction, n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-Bk9Z0-Jg.mjs";
31
+ import { i as promptProjectSetupAction, n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-D0oXA090.mjs";
32
32
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project--Vxawf7z.mjs";
33
33
  import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
34
- import { n as promptForLoginToken } from "./login-Uvferzmm.mjs";
34
+ import { n as promptForLoginToken } from "./login-WIjNc77c.mjs";
35
35
  import { createRequire } from "node:module";
36
36
  import { copyFileSync, cpSync, createWriteStream, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
37
37
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -2123,8 +2123,8 @@ function formatConnectionLostMessage(deploymentId, logPath) {
2123
2123
  * Three cases:
2124
2124
  * 1. `PlatformApiError` with 409 + a JSON body carrying `{error, deployment}`
2125
2125
  * — surface the server-supplied error and prefer the body's deployment id.
2126
- * 2. Any other `PlatformApiError` — surface as `Deploy failed (HTTP <status>): <detail>`
2127
- * where detail is the parsed `error`/`message` field or a trimmed body snippet.
2126
+ * 2. Any other `PlatformApiError` — retain the client's actionable message and
2127
+ * structured error fields; opaque provider failures use a trimmed body snippet.
2128
2128
  * 3. Anything else — preserve the original message under a `Connection lost
2129
2129
  * during deploy: <original>` prefix so the caller can still tell network,
2130
2130
  * parse, and transport errors apart.
@@ -2132,13 +2132,19 @@ function formatConnectionLostMessage(deploymentId, logPath) {
2132
2132
  function formatStreamDeployError(err, deploymentId, logPath) {
2133
2133
  if (err instanceof PlatformApiError) {
2134
2134
  const parsed = parsePlatformErrorBody(err.body);
2135
- const parsedError = parsed?.error ?? parsed?.message ?? null;
2135
+ const parsedError = platformErrorMessage(parsed) ?? parsed?.error ?? null;
2136
2136
  const effectiveDeploymentId = parsed?.deployment ?? null ?? deploymentId;
2137
- if (isCliOutdatedError(err) && parsed?.message) return new Error(appendTrailingLines(parsed.message, effectiveDeploymentId, logPath));
2138
- if (err.status === 409 && parsedError) return new Error(appendTrailingLines(`deploy: Deploy failed: ${parsedError}`, effectiveDeploymentId, logPath));
2137
+ if (isCliOutdatedError(err) && parsed?.message) {
2138
+ err.message = appendTrailingLines(err.message, effectiveDeploymentId, logPath);
2139
+ return err;
2140
+ }
2141
+ if (parsedError || err.status === 401 || err.status === 403 || parsed !== null) {
2142
+ err.message = appendTrailingLines(`deploy: ${err.message}`, effectiveDeploymentId, logPath);
2143
+ return err;
2144
+ }
2139
2145
  const detail = parsedError ?? trimSnippet(err.body);
2140
- const base = detail ? `deploy: Deploy failed (HTTP ${err.status}): ${detail}` : `deploy: Deploy failed (HTTP ${err.status}).`;
2141
- return new Error(appendTrailingLines(base, effectiveDeploymentId, logPath));
2146
+ err.message = appendTrailingLines(detail ? `deploy: Deploy failed (HTTP ${err.status}): ${detail}` : `deploy: Deploy failed (HTTP ${err.status}).`, effectiveDeploymentId, logPath);
2147
+ return err;
2142
2148
  }
2143
2149
  const original = err instanceof Error ? err.message : String(err);
2144
2150
  return new Error(appendTrailingLines(`deploy: Connection lost during deploy: '${original}'.`, deploymentId, logPath));
@@ -3058,6 +3064,7 @@ function toWebSocketManifest(routes) {
3058
3064
  }
3059
3065
  function toSandboxManifest(sandbox) {
3060
3066
  return {
3067
+ controllerProtocol: 1,
3061
3068
  bindingName: sandbox.binding,
3062
3069
  className: sandbox.className,
3063
3070
  containerName: sandbox.containerName,
@@ -1,6 +1,6 @@
1
1
  import { D as log, c as import_picocolors, k as note } from "./output-B0cfNSx5.mjs";
2
2
  import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
3
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
4
4
  //#region src/cli/domain.ts
5
5
  async function runDomainCommand(root, args) {
6
6
  const platform = readDeploymentPlatform(root);
@@ -1,12 +1,12 @@
1
1
  import { o as join } from "./dist-BrsS7cai.mjs";
2
2
  import { D as log, I as isCancel, c as import_picocolors, i as createSpinner, j as password, k as note, w as confirm } from "./output-B0cfNSx5.mjs";
3
- import { C as renderAddressMap, S as preflightEmail, a as isWranglerNonInteractiveOrCI, b as createNodeEmailDns, i as discoverRootWranglerConfig, o as loadProvisionModule, r as deriveWorkerName, s as resolveDeployTransport, t as createDeployWranglerRunner, u as runWranglerAuthToken, w as renderEmailChecklist, x as findEmailConfigConflicts, y as applyEmailSetup } from "./deploy-DTaWUS1S.mjs";
3
+ import { C as renderAddressMap, S as preflightEmail, a as isWranglerNonInteractiveOrCI, b as createNodeEmailDns, i as discoverRootWranglerConfig, o as loadProvisionModule, r as deriveWorkerName, s as resolveDeployTransport, t as createDeployWranglerRunner, u as runWranglerAuthToken, w as renderEmailChecklist, x as findEmailConfigConflicts, y as applyEmailSetup } from "./deploy-BAhhcg5q.mjs";
4
4
  import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
5
5
  import { S as readProjectConfig, f as openBrowser, l as getToken } from "./auth-DPl6kck4.mjs";
6
6
  import { k as writeProvisionedWranglerConfig } from "./wrangler--imS8n0d.mjs";
7
7
  import { f as readConfig } from "./config-uNGuFsI2.mjs";
8
8
  import { a as scanEmailHandlersSync } from "./email-Ce6SQq-i.mjs";
9
- import { n as PlatformClient, t as PlatformApiError } from "./client-dHfSJvAN.mjs";
9
+ import { n as PlatformClient, t as PlatformApiError } from "./client-BQBrZoCX.mjs";
10
10
  import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
11
11
  import { tmpdir } from "node:os";
12
12
  import { execSync } from "node:child_process";
@@ -3,7 +3,7 @@ import { A as outro, D as log, E as intro, k as note, r as cliTitle } from "./ou
3
3
  import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
4
4
  import { r as generateEnvTypes, t as findEnvFile } from "./env-types-BNPhro-M.mjs";
5
5
  import { c as fetchRemoteSecretNames, l as formatEnvReport, p as validateProdEnv } from "./env-validation-CF6KvTRf.mjs";
6
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
6
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
7
7
  import { mkdirSync, writeFileSync } from "node:fs";
8
8
  //#region src/cli/env.ts
9
9
  async function runEnvCommand(root, args) {
@@ -1,6 +1,6 @@
1
1
  import { C as cancel, D as log, I as isCancel, M as select, P as text, c as import_picocolors, w as confirm } from "./output-B0cfNSx5.mjs";
2
2
  import { S as readProjectConfig, f as openBrowser, i as createCodeVerifier, l as getToken, n as awaitBrowserCallback, r as createCodeChallenge } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient, o as parsePlatformErrorBody, t as PlatformApiError } from "./client-dHfSJvAN.mjs";
3
+ import { n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-BQBrZoCX.mjs";
4
4
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project--Vxawf7z.mjs";
5
5
  import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
6
6
  import { randomBytes } from "node:crypto";
@@ -30,7 +30,6 @@ function describeConnectError(status, errorCode) {
30
30
  if (code.includes("not active")) return "Installation is not active. Re-install the GitHub App and try again.";
31
31
  }
32
32
  if (status === 400 && code.includes("not accessible")) return "Repository not accessible by this installation. Check the App has access to it.";
33
- if (status === 403) return "You don't have access to this project.";
34
33
  if (status === 404) return "Project or installation not found.";
35
34
  return null;
36
35
  }
@@ -46,6 +45,11 @@ function describeUpdateError(status, errorCode) {
46
45
  if (status === 404 && code.includes("connection not found")) return "This project is not connected to a GitHub repository. Run `void github connect` first.";
47
46
  return describeConnectError(status, code);
48
47
  }
48
+ function describeGithubClientError(error, describe) {
49
+ const body = parsePlatformErrorBody(error.body);
50
+ if (platformErrorMessage(body) || error.status === 403) return error.message;
51
+ return describe(error.status, error.code);
52
+ }
49
53
  /**
50
54
  * Extract `owner/repo` from a `https://github.com/owner/repo(.git)?` URL.
51
55
  * Returns null for non-GitHub URLs or null input.
@@ -518,16 +522,14 @@ async function runConnect(root, client, args) {
518
522
  codeVerifier: grant.codeVerifier
519
523
  });
520
524
  } catch (retryErr) {
521
- if (retryErr instanceof PlatformApiError && retryErr.status === 403) {
525
+ if (retryErr instanceof PlatformApiError && retryErr.status === 403 && retryErr.code === "invalid connect grant") {
522
526
  log.error("connect: GitHub authorization failed or expired. Run `void github connect` again.");
523
527
  process.exit(1);
524
528
  }
525
529
  throw retryErr;
526
530
  }
527
531
  } else {
528
- const body = parsePlatformErrorBody(err.body);
529
- const code = body?.error ?? body?.message ?? "";
530
- const message = describeConnectError(err.status, code);
532
+ const message = describeGithubClientError(err, describeConnectError);
531
533
  if (message !== null) {
532
534
  log.error(`connect: ${message}`);
533
535
  process.exit(1);
@@ -588,9 +590,7 @@ async function runGithubUpdate(root, client, args) {
588
590
  current = await client.getGithubConnection(projectId);
589
591
  } catch (err) {
590
592
  if (err instanceof PlatformApiError) {
591
- const body = parsePlatformErrorBody(err.body);
592
- const code = body?.error ?? body?.message ?? "";
593
- const message = describeUpdateError(err.status, code);
593
+ const message = describeGithubClientError(err, describeUpdateError);
594
594
  if (message !== null) {
595
595
  log.error(`update: ${message}`);
596
596
  process.exit(1);
@@ -668,9 +668,7 @@ async function runGithubUpdate(root, client, args) {
668
668
  updated = await client.updateGithubConnection(projectId, patch);
669
669
  } catch (err) {
670
670
  if (err instanceof PlatformApiError) {
671
- const body = parsePlatformErrorBody(err.body);
672
- const code = body?.error ?? body?.message ?? "";
673
- const message = describeUpdateError(err.status, code);
671
+ const message = describeGithubClientError(err, describeUpdateError);
674
672
  if (message !== null) {
675
673
  log.error(`update: ${message}`);
676
674
  process.exit(1);
@@ -734,9 +732,7 @@ async function runStatus(root, client, args) {
734
732
  connection = await client.getGithubConnection(projectId);
735
733
  } catch (err) {
736
734
  if (err instanceof PlatformApiError) {
737
- const body = parsePlatformErrorBody(err.body);
738
- const code = body?.error ?? body?.message ?? "";
739
- const message = describeUpdateError(err.status, code);
735
+ const message = describeGithubClientError(err, describeUpdateError);
740
736
  if (message !== null) {
741
737
  log.error(`status: ${message}`);
742
738
  process.exit(1);
@@ -803,7 +799,7 @@ async function runGithubDisconnect(root, client, args) {
803
799
  log.info("This project is not connected to a GitHub repository. Nothing to disconnect.");
804
800
  return;
805
801
  }
806
- const message = describeConnectError(err.status, code);
802
+ const message = describeGithubClientError(err, describeConnectError);
807
803
  if (message !== null) {
808
804
  log.error(`disconnect: ${message}`);
809
805
  process.exit(1);
@@ -833,9 +829,7 @@ async function runGithubDisconnect(root, client, args) {
833
829
  await client.deleteGithubConnection(projectId);
834
830
  } catch (err) {
835
831
  if (err instanceof PlatformApiError) {
836
- const body = parsePlatformErrorBody(err.body);
837
- const code = body?.error ?? body?.message ?? "";
838
- const message = describeConnectError(err.status, code);
832
+ const message = describeGithubClientError(err, describeConnectError);
839
833
  if (message !== null) {
840
834
  log.error(`disconnect: ${message}`);
841
835
  process.exit(1);
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { r as __toESM } from "./rolldown-runtime-rQ84J-ij.mjs";
2
2
  import { c as relative, l as resolve, n as dirname, o as join } from "./dist-BrsS7cai.mjs";
3
3
  import { H as ensurePlatformProxyAccess, ft as require_picocolors } from "./output-B0cfNSx5.mjs";
4
- import { D as resolveAssetRoutingPolicy, E as hasDocumentRoutes, T as hasApiRoutes, _ as scanDurableObjectModules, c as resolveDistDir, d as generateQueueResolverSource, f as prerenderPages, g as hasRevalidate, h as collectRevalidate, l as resolveWorkerDirName, m as collectPages, p as prerenderPagesNode, v as SEND_EMAIL_BINDING } from "./deploy-DTaWUS1S.mjs";
4
+ import { D as resolveAssetRoutingPolicy, E as hasDocumentRoutes, T as hasApiRoutes, _ as scanDurableObjectModules, c as resolveDistDir, d as generateQueueResolverSource, f as prerenderPages, g as hasRevalidate, h as collectRevalidate, l as resolveWorkerDirName, m as collectPages, p as prerenderPagesNode, v as SEND_EMAIL_BINDING } from "./deploy-BAhhcg5q.mjs";
5
5
  import { i as resolveProjectPaths, n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-SK8nMHPp.mjs";
6
6
  import { a as scanQueuesSync, c as loadVoidAuthConfig, i as scanWebSocketRoutesSync, n as scanRoutePatternsSync, o as scanJobsSync, r as scanRoutes, s as findVoidAuthConfig, t as scanMiddlewareSync } from "./scan-BMH4rzlv.mjs";
7
7
  import { r as scopedAccessCredentials } from "./cf-access-DRsQRe6k.mjs";
@@ -5573,7 +5573,7 @@ function readVoidDevCredentials(root) {
5573
5573
  */
5574
5574
  async function runAiSetupPrompt(root, token, apiUrl, server) {
5575
5575
  const { select, text, isCancel, log } = await import("./output-B0cfNSx5.mjs").then((n) => n.T);
5576
- const { PlatformClient } = await import("./client-dHfSJvAN.mjs").then((n) => n.r);
5576
+ const { PlatformClient } = await import("./client-BQBrZoCX.mjs").then((n) => n.r);
5577
5577
  const { attachSelectedPlatform, writeProjectConfig } = await import("./auth-DPl6kck4.mjs").then((n) => n.b);
5578
5578
  const { inferDefaultSlug } = await import("./resolve-project--Vxawf7z.mjs").then((n) => n.i);
5579
5579
  const client = new PlatformClient(token, apiUrl);
@@ -5601,8 +5601,8 @@ async function runAiSetupPrompt(root, token, apiUrl, server) {
5601
5601
  let projectId;
5602
5602
  let slug;
5603
5603
  if (result === "__create__") {
5604
- const { validateProjectSlug } = await import("./create-project-Bk9Z0-Jg.mjs").then((n) => n.a);
5605
- const { createProjectWithSlugRetry } = await import("./create-project-Bk9Z0-Jg.mjs").then((n) => n.t);
5604
+ const { validateProjectSlug } = await import("./create-project-D0oXA090.mjs").then((n) => n.a);
5605
+ const { createProjectWithSlugRetry } = await import("./create-project-D0oXA090.mjs").then((n) => n.t);
5606
5606
  let created;
5607
5607
  try {
5608
5608
  created = await createProjectWithSlugRetry(client, inferDefaultSlug(root), async (defaultSlug) => {
@@ -9,11 +9,11 @@ import { r as detectFramework } from "./plugin-inference-BDRfZngg.mjs";
9
9
  import { n as parseDotenvFile, t as expandDotenv } from "./dotenv-VQxupEUv.mjs";
10
10
  import { t as MagicString } from "./dist-BR1quN_w.mjs";
11
11
  import { n as writeDrizzleConfig } from "./config-NOG_U1aK.mjs";
12
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
12
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
13
13
  import { r as formatProjectCommand } from "./preset-lAy0B0BQ.mjs";
14
- import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-Bk9Z0-Jg.mjs";
15
- import { n as promptForLoginToken } from "./login-Uvferzmm.mjs";
16
- import { discoverPlatform, saveDiscoveredPlatform } from "./platform-cmd-BFhieCdV.mjs";
14
+ import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-D0oXA090.mjs";
15
+ import { n as promptForLoginToken } from "./login-WIjNc77c.mjs";
16
+ import { discoverPlatform, saveDiscoveredPlatform } from "./platform-cmd-5q_k56xS.mjs";
17
17
  import { t as connectCloudflare } from "./cloudflare-connect-t1UU5svD.mjs";
18
18
  import { n as findInstalledYarnPnpRuntime, r as hasLocalLockfile, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-DxSInkzL.mjs";
19
19
  import { createRequire } from "node:module";
@@ -1,7 +1,7 @@
1
1
  import { A as outro, C as cancel, D as log, E as intro, c as import_picocolors, r as cliTitle } from "./output-B0cfNSx5.mjs";
2
2
  import { E as writeProjectConfig, S as readProjectConfig, c as getSiteDomain, l as getToken, y as attachSelectedPlatform } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
4
- import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-Bk9Z0-Jg.mjs";
3
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
4
+ import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-D0oXA090.mjs";
5
5
  import { r as resolveProjectBySlug } from "./resolve-project--Vxawf7z.mjs";
6
6
  //#region src/cli/link.ts
7
7
  function projectLabel(slug, root, url) {
@@ -1,6 +1,6 @@
1
1
  import { A as outro, D as log, E as intro, a as dim, c as import_picocolors, o as ensureUtc, r as cliTitle, u as tablePrefix } from "./output-B0cfNSx5.mjs";
2
2
  import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
3
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
4
4
  import { r as resolveProjectBySlug } from "./resolve-project--Vxawf7z.mjs";
5
5
  //#region src/cli/list.ts
6
6
  async function runListCommand(root, slug) {
@@ -1,7 +1,7 @@
1
1
  import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
2
2
  import { A as outro, C as cancel, D as log, E as intro, I as isCancel, M as select, c as import_picocolors, i as createSpinner, r as cliTitle } from "./output-B0cfNSx5.mjs";
3
3
  import { _ as savePlatformToken, d as isStagingMode, g as runPlatformLogin, h as runLogin, l as getToken, m as removeToken, o as getApiUrl, u as getTokenSource, v as saveToken } from "./auth-DPl6kck4.mjs";
4
- import { a as isExpiredTokenError, n as PlatformClient } from "./client-dHfSJvAN.mjs";
4
+ import { a as isExpiredTokenError, n as PlatformClient } from "./client-BQBrZoCX.mjs";
5
5
  //#region src/cli/login.ts
6
6
  var login_exports = /* @__PURE__ */ __exportAll({
7
7
  promptForLoginToken: () => promptForLoginToken,
@@ -34,7 +34,7 @@ async function selectPlatformLoginMethod(platform, requestedId) {
34
34
  return methods.find((method) => method.id === provider);
35
35
  }
36
36
  async function promptForLoginToken(root = process.cwd(), platform) {
37
- const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await import("./platform-cmd-BFhieCdV.mjs").then(({ discoverPlatform }) => discoverPlatform(getApiUrl(root))));
37
+ const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await import("./platform-cmd-5q_k56xS.mjs").then(({ discoverPlatform }) => discoverPlatform(getApiUrl(root))));
38
38
  const s = createSpinner();
39
39
  s.start(`Opening browser for ${providerName} login...`);
40
40
  try {
@@ -1,6 +1,6 @@
1
1
  import { A as outro, D as log, E as intro, a as dim, c as import_picocolors, r as cliTitle } from "./output-B0cfNSx5.mjs";
2
2
  import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
3
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
4
4
  //#region src/cli/logs.ts
5
5
  async function runLogsCommand(root, filter, range, deployment, level) {
6
6
  console.log();
@@ -137,8 +137,8 @@ async function runAuth(origin, args) {
137
137
  if (args.action === "login" || args.action === "token" && args.tokenStdin) {
138
138
  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");
139
139
  const apiToken = args.tokenStdin ? await readOperatorApiTokenStdin() : await (async () => {
140
- const { discoverPlatform } = await import("./platform-cmd-BFhieCdV.mjs");
141
- const { selectPlatformLoginMethod } = await import("./login-Uvferzmm.mjs").then((n) => n.t);
140
+ const { discoverPlatform } = await import("./platform-cmd-5q_k56xS.mjs");
141
+ const { selectPlatformLoginMethod } = await import("./login-WIjNc77c.mjs").then((n) => n.t);
142
142
  const { runPlatformLogin } = await import("./auth-DPl6kck4.mjs").then((n) => n.t);
143
143
  return runPlatformLogin(origin, (await selectPlatformLoginMethod(await discoverPlatform(origin), args.providerExplicit ? args.provider : void 0)).id, (url) => process.stderr.write(`Sign in at ${url}\n`));
144
144
  })();
@@ -140,11 +140,11 @@ async function configurationInput(args, existing) {
140
140
  }
141
141
  async function runPlatformAuthConfig(args) {
142
142
  if (args.action === "recover") {
143
- const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-CeOKGVeJ.mjs");
143
+ const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-CmKEWpDo.mjs");
144
144
  return runPlatformAuthRecovery(args);
145
145
  }
146
146
  if (args.action === "protection") {
147
- const { runPlatformProtectionConfig } = await import("./platform-auth-protection-Bhtvp0B_.mjs");
147
+ const { runPlatformProtectionConfig } = await import("./platform-auth-protection-Drl0qhrn.mjs");
148
148
  return runPlatformProtectionConfig(args);
149
149
  }
150
150
  const origin = resolveOperatorOrigin(args.connection);
@@ -2,8 +2,8 @@ import { $ as promoteInstallationSecrets, I as isCancel, V as ensurePlatformAcce
2
2
  import { t as cfAccessHeaders } from "./cf-access-DRsQRe6k.mjs";
3
3
  import { n as OperatorClient } from "./operator-client-LUZnlnYk.mjs";
4
4
  import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-B3e08unv.mjs";
5
- import { C as PlatformCloudflareClient, S as preparePlatformAccessSetup, b as checkpointPlatformAccessResources, n as acquirePlatformDatabaseLifecycleLock, resolvePlatformInstallDatabaseUrl, x as parsePlatformAccessSetupSpec, y as resolvePlatformCloudflareCredential } from "./platform-lifecycle-BwAIgz-t.mjs";
6
- import { selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership } from "./platform-management-COogu_Se.mjs";
5
+ import { C as PlatformCloudflareClient, S as preparePlatformAccessSetup, b as checkpointPlatformAccessResources, n as acquirePlatformDatabaseLifecycleLock, resolvePlatformInstallDatabaseUrl, x as parsePlatformAccessSetupSpec, y as resolvePlatformCloudflareCredential } from "./platform-lifecycle-R9xAxvtG.mjs";
6
+ import { selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership } from "./platform-management-BfWsXHEW.mjs";
7
7
  import { createHmac } from "node:crypto";
8
8
  import { parsePlatformAccessProtection, platformProtectionProofMessage } from "@void/platform";
9
9
  import { readFile } from "node:fs/promises";
@@ -1,8 +1,8 @@
1
1
  import { I as isCancel, W as acquirePlatformLifecycleLock, et as readInstallationRecoverySecrets, it as resolveInstallationManifest, w as confirm } from "./output-B0cfNSx5.mjs";
2
2
  import { f as openBrowser } from "./auth-DPl6kck4.mjs";
3
3
  import { a as resolveOperatorOrigin } from "./operator-auth-B3e08unv.mjs";
4
- import { C as PlatformCloudflareClient, c as platformDatabaseClientUrl, r as acquirePlatformDatabaseLifecycleLockConnection, resolvePlatformInstallDatabaseUrl, y as resolvePlatformCloudflareCredential } from "./platform-lifecycle-BwAIgz-t.mjs";
5
- import { selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership } from "./platform-management-COogu_Se.mjs";
4
+ import { C as PlatformCloudflareClient, c as platformDatabaseClientUrl, r as acquirePlatformDatabaseLifecycleLockConnection, resolvePlatformInstallDatabaseUrl, y as resolvePlatformCloudflareCredential } from "./platform-lifecycle-R9xAxvtG.mjs";
5
+ import { selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership } from "./platform-management-BfWsXHEW.mjs";
6
6
  import { createCipheriv, createDecipheriv, createHash, createHmac, hkdfSync, randomBytes, randomUUID } from "node:crypto";
7
7
  import { execFile } from "node:child_process";
8
8
  import { parsePlatformAccessProtection, parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration, platformAuthenticationRecoveryMessage, validatePlatformAdmissionPolicy } from "@void/platform";
@@ -89,12 +89,12 @@ function saveDiscoveredPlatform(discovery) {
89
89
  }
90
90
  async function runPlatformCommand(_root, args) {
91
91
  if (args.subcommand === "config") {
92
- const { runPlatformAuthConfig } = await import("./platform-auth-config-DrbQXXiW.mjs");
92
+ const { runPlatformAuthConfig } = await import("./platform-auth-config-CdVWRRJr.mjs");
93
93
  await runPlatformAuthConfig(args);
94
94
  return;
95
95
  }
96
96
  if (args.subcommand === "operator") {
97
- const { runOperatorCommand } = await import("./operator-cmd-CjOTmAYE.mjs");
97
+ const { runOperatorCommand } = await import("./operator-cmd-CKJ7xIRs.mjs");
98
98
  await runOperatorCommand(args);
99
99
  return;
100
100
  }
@@ -126,7 +126,7 @@ async function runPlatformCommand(_root, args) {
126
126
  console.log(`Capabilities: ${Object.entries(discovery.capabilities).filter(([, enabled]) => enabled).map(([name]) => name).join(", ")}`);
127
127
  return;
128
128
  }
129
- const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-BwAIgz-t.mjs");
129
+ const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-R9xAxvtG.mjs");
130
130
  await runPlatformLifecycleCommand(args);
131
131
  }
132
132
  //#endregion
@@ -1,7 +1,7 @@
1
1
  import { D as log, I as isCancel, P as text, W as acquirePlatformLifecycleLock, at as savePlatformConnection, et as readInstallationRecoverySecrets, k as note, st as writeInstallationManifest, w as confirm } from "./output-B0cfNSx5.mjs";
2
2
  import { t as cfAccessHeaders } from "./cf-access-DRsQRe6k.mjs";
3
- import { C as PlatformCloudflareClient, assertNoninteractivePlatformMutationAcknowledged, d as recordPlatformWorkerTraffic, i as createPlatformHealthProbeToken, l as recordResource, n as acquirePlatformDatabaseLifecycleLock, p as createPlatformInstallPlan, resolvePlatformInstallDatabaseUrl, v as assertPlatformOperatorCredentialCanApplyPlan, y as resolvePlatformCloudflareCredential } from "./platform-lifecycle-BwAIgz-t.mjs";
4
- import { resolveInstalledPlatformManifest, selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership } from "./platform-management-COogu_Se.mjs";
3
+ import { C as PlatformCloudflareClient, assertNoninteractivePlatformMutationAcknowledged, d as recordPlatformWorkerTraffic, i as createPlatformHealthProbeToken, l as recordResource, n as acquirePlatformDatabaseLifecycleLock, p as createPlatformInstallPlan, resolvePlatformInstallDatabaseUrl, v as assertPlatformOperatorCredentialCanApplyPlan, y as resolvePlatformCloudflareCredential } from "./platform-lifecycle-R9xAxvtG.mjs";
4
+ import { resolveInstalledPlatformManifest, selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership } from "./platform-management-BfWsXHEW.mjs";
5
5
  import { randomUUID } from "node:crypto";
6
6
  import { PLATFORM_APPLICATION_KEY, PLATFORM_REMOTE_INSTALLATION_MANIFEST_KEY, createApplicationRoutes, createPlatformDeploymentManifest, normalizeApplicationDomain } from "@void/platform";
7
7
  //#region src/cli/platform-domain.ts