void 0.24.0 → 0.25.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.
Files changed (137) hide show
  1. package/README.md +19 -106
  2. package/dist/{account-cmd-vJhh5lrb.mjs → account-cmd-DcR1ywt8.mjs} +5 -5
  3. package/dist/{auth-CQkSDS50.mjs → auth-7wuZ5ob8.mjs} +3 -3
  4. package/dist/{auth-DX3JURcX.mjs → auth-CdgZ9uag.mjs} +1 -1
  5. package/dist/{auth-link-D75t9wO2.mjs → auth-link-Z6E5DYvM.mjs} +5 -6
  6. package/dist/{auth-router-ClfhL1J7.mjs → auth-router-BdM4avI8.mjs} +7 -7
  7. package/dist/{build-cmd-zMi1iFnS.mjs → build-cmd-CEE7D-hM.mjs} +6 -7
  8. package/dist/{cache-ZtQmyxVV.mjs → cache-TcZnBLtH.mjs} +6 -7
  9. package/dist/{cancel-deploy-Box0kkEV.mjs → cancel-deploy-CYoZmcmR.mjs} +4 -6
  10. package/dist/{cf-access-BGe5sWXF.mjs → cf-access-AHKBzmuu.mjs} +1 -1
  11. package/dist/cf-build-output-ChY6-XWP.mjs +2 -0
  12. package/dist/cli/cli.mjs +45 -45
  13. package/dist/cli/cloudflare-operation-process.mjs +2 -2
  14. package/dist/cli/env-schema-probe.mjs +2 -2
  15. package/dist/client-B4Me-9HE.mjs +2 -0
  16. package/dist/{client-DKAsFA4X.mjs → client-RsPo8wsP.mjs} +103 -25
  17. package/dist/{cloudflare-cmd-CmY8dGkd.mjs → cloudflare-cmd-bhwCxAN6.mjs} +2 -2
  18. package/dist/{cloudflare-connect-IiR3ZieC.mjs → cloudflare-connect-CuhRgk3k.mjs} +2 -2
  19. package/dist/{cloudflare-operations-BCdXSsmo.mjs → cloudflare-operations-BhbK6yTq.mjs} +1 -1
  20. package/dist/{cloudflare-operations-DzH-A966.mjs → cloudflare-operations-CjaV4lZi.mjs} +2 -2
  21. package/dist/{connect-B-usTnlF.mjs → connect-DCvUmPXY.mjs} +12 -9
  22. package/dist/{create-project-FWbf5Olo.mjs → create-project-C734I-Mu.mjs} +1 -1
  23. package/dist/{create-project-CYOOAYcn.mjs → create-project-eAPgYq35.mjs} +6 -6
  24. package/dist/{db-Ck2eZ2iB.mjs → db-C07GEdKF.mjs} +25 -28
  25. package/dist/{delete-sK56qtzZ.mjs → delete-pKMVsrpJ.mjs} +5 -6
  26. package/dist/deploy-BDu1vhSH.mjs +2 -0
  27. package/dist/{deploy-gCVaiJbS.mjs → deploy-DfsAe-T0.mjs} +9212 -8902
  28. package/dist/{dev-inbox-P0u4tM8Y.mjs → dev-inbox-D64ZKUod.mjs} +5 -6
  29. package/dist/{domain-DFfQE8jg.mjs → domain-D3uA9ize.mjs} +8 -8
  30. package/dist/{email-CdnhUHvJ.mjs → email-z3o2cwjH.mjs} +7 -7
  31. package/dist/{env-DmGdHi5i.mjs → env-3Q8-_2IH.mjs} +6 -8
  32. package/dist/{env-validation-zZOCcQVZ.mjs → env-validation-cZBvGWaP.mjs} +1 -1
  33. package/dist/gen-ById9r2j.mjs +2 -0
  34. package/dist/{gen-CshAkukR.mjs → gen-NjwoG9FK.mjs} +2 -4
  35. package/dist/{github-cmd-DftuEvIt.mjs → github-cmd-DquUq-b1.mjs} +7 -16
  36. package/dist/help-DPGBwomV.mjs +2 -0
  37. package/dist/{help-Dotbf6iz.mjs → help-DRZXC4fj.mjs} +3 -3
  38. package/dist/index.d.mts +18 -14
  39. package/dist/index.mjs +2166 -2096
  40. package/dist/{info-B97bTX9N.mjs → info-BmA3_IFZ.mjs} +1 -3
  41. package/dist/{init-BTQEZZGJ.mjs → init-DT7yuuyl.mjs} +16 -18
  42. package/dist/{link-B46sYH0K.mjs → link-CXOlqh2F.mjs} +6 -7
  43. package/dist/{list-BnPrIsU_.mjs → list-eEWVJEPn.mjs} +8 -9
  44. package/dist/{local-d1-2CMnpuW_.mjs → local-d1-Df4XpwhW.mjs} +1 -1
  45. package/dist/login-C98-sw79.mjs +2 -0
  46. package/dist/{login-BuiMyUrx.mjs → login-pWQHYVu2.mjs} +9 -7
  47. package/dist/{logs-CZG9d-ic.mjs → logs-DnxVX7TR.mjs} +7 -8
  48. package/dist/migrate-CEu2X5DB.mjs +2 -0
  49. package/dist/{migrate-q4_njtaW.mjs → migrate-CV1on-yJ.mjs} +2 -4
  50. package/dist/{operator-args-B3BTmSoi.mjs → operator-args-CAVcmwUt.mjs} +1 -1
  51. package/dist/{operator-auth-7erYc6Lt.mjs → operator-auth-CkmTE3rt.mjs} +2 -2
  52. package/dist/{operator-client-CpHjTd0t.mjs → operator-client-LmwjxT6q.mjs} +2 -2
  53. package/dist/{operator-cmd-DGqPJUD3.mjs → operator-cmd-d-IEKgNk.mjs} +6 -6
  54. package/dist/{output-CbM85T4k.mjs → output-BBsUwdyT.mjs} +5 -5
  55. package/dist/pages/client.d.mts +3 -0
  56. package/dist/pages/client.mjs +120 -29
  57. package/dist/{platform-args-3k8X9-H_.mjs → platform-args-Bzf8JPc2.mjs} +1 -1
  58. package/dist/platform-args-Cq6EjQro.mjs +2 -0
  59. package/dist/{platform-auth-config-DDrxUy4m.mjs → platform-auth-config-0V0lA3pF.mjs} +7 -7
  60. package/dist/{platform-auth-protection-BLadnnct.mjs → platform-auth-protection-DFeJ-JkK.mjs} +8 -8
  61. package/dist/{platform-auth-recovery-CmCzX2Fl.mjs → platform-auth-recovery-ICy4muq6.mjs} +7 -7
  62. package/dist/{platform-cmd-pMTRhvYs.mjs → platform-cmd-BPySFOew.mjs} +1 -1
  63. package/dist/{platform-cmd-DMDEc9uS.mjs → platform-cmd-D7vSWMvV.mjs} +37 -27
  64. package/dist/platform-discovery-DDDUvnqp.mjs +27 -0
  65. package/dist/{platform-domain-Di6EYrQl.mjs → platform-domain-CUdY064e.mjs} +4 -4
  66. package/dist/{platform-lifecycle-BFdSi9Qt.mjs → platform-lifecycle-BaUdTRPU.mjs} +1 -1
  67. package/dist/{platform-lifecycle-BBoNzojY.mjs → platform-lifecycle-Dm09JNkn.mjs} +3901 -3651
  68. package/dist/{platform-management-CWOQOWXm.mjs → platform-management-BSEc_ZeG.mjs} +47 -10
  69. package/dist/platform-management-Bp6aoH2C.mjs +2 -0
  70. package/dist/{platform-plans-config-Vl9BP3H4.mjs → platform-plans-config-B0pOVQyW.mjs} +3 -3
  71. package/dist/{platform-recovery-BJnQJEtQ.mjs → platform-recovery-WOZ95Uze.mjs} +3 -3
  72. package/dist/{prepare-CBLT3CHH.mjs → prepare-39EvOhI6.mjs} +1 -3
  73. package/dist/{project-DKG5Ra8p.mjs → project-BkbfDs0V.mjs} +1 -1
  74. package/dist/{project-DsblYifa.mjs → project-IOjBU8R6.mjs} +1 -1
  75. package/dist/{project-cmd-DxnXstAq.mjs → project-cmd-Bs5A392E.mjs} +21 -22
  76. package/dist/{project-team-BmHcaALJ.mjs → project-team-ohAWWaew.mjs} +8 -9
  77. package/dist/{project-token-GionZlBI.mjs → project-token-CP01Jna6.mjs} +6 -9
  78. package/dist/{project-zero-trust-JLCjVQA7.mjs → project-zero-trust-BzkVgx35.mjs} +5 -6
  79. package/dist/{prompts-BNUoTiaf.mjs → prompts-6OSVA7DJ.mjs} +58 -15
  80. package/dist/{prompts-2TGE6oXx.mjs → prompts-ZAuJlyCj.mjs} +1 -1
  81. package/dist/{provision-CVku1JFU.mjs → provision-BEv0k-qz.mjs} +1 -1
  82. package/dist/{provision-CaoxO_U7.mjs → provision-Btj1jppf.mjs} +5 -7
  83. package/dist/{requests-BOjIVAeF.mjs → requests-B3PBuGlX.mjs} +5 -6
  84. package/dist/{rollback-CwR3pLj3.mjs → rollback-DDub9GsO.mjs} +9 -10
  85. package/dist/runtime/email/testing.mjs +1 -1
  86. package/dist/runtime/email.mjs +35 -17
  87. package/dist/runtime/routing.mjs +1 -1
  88. package/dist/{secret-ByWJWBUG.mjs → secret-3c72lY1U.mjs} +15 -16
  89. package/dist/{skills-C1PlclPt.mjs → skills-BPQUGClu.mjs} +1 -1
  90. package/dist/{subcommand-prompt-klFCfcor.mjs → subcommand-prompt-Dhom39bd.mjs} +2 -2
  91. package/dist/sveltekit.d.mts +1 -1
  92. package/dist/sveltekit.mjs +4 -9
  93. package/dist/{wrangler-7K-bW_DL.mjs → wrangler-DhUerFkW.mjs} +10 -15
  94. package/package.json +21 -21
  95. package/sandbox.Dockerfile +1 -1
  96. package/skills/void/docs/guide/ai.md +24 -86
  97. package/skills/void/docs/guide/auth.md +0 -2
  98. package/skills/void/docs/guide/database/d1.md +7 -7
  99. package/skills/void/docs/guide/deployment.md +58 -124
  100. package/skills/void/docs/guide/env-vars.md +1 -5
  101. package/skills/void/docs/guide/index.md +19 -18
  102. package/skills/void/docs/guide/kv.md +0 -2
  103. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +49 -47
  104. package/skills/void/docs/guide/pages-routing/overview.md +2 -2
  105. package/skills/void/docs/guide/platform/administration/email.md +0 -2
  106. package/skills/void/docs/guide/platform/administration/operations.md +11 -22
  107. package/skills/void/docs/guide/platform/administration/plans.md +1 -5
  108. package/skills/void/docs/guide/platform/administration/zero-trust.md +1 -4
  109. package/skills/void/docs/guide/platform/development/schema-ci.md +7 -1
  110. package/skills/void/docs/guide/platform/installation/maintenance.md +30 -10
  111. package/skills/void/docs/guide/platform/installation/prerequisites.md +79 -7
  112. package/skills/void/docs/guide/quickstart.md +37 -80
  113. package/skills/void/docs/guide/sandboxes.md +36 -46
  114. package/skills/void/docs/guide/self-hosted-platform.md +20 -0
  115. package/skills/void/docs/guide/websockets.md +0 -2
  116. package/skills/void/docs/integrations/frameworks/overview.md +2 -2
  117. package/skills/void/docs/integrations/frameworks/sveltekit.md +40 -25
  118. package/skills/void/docs/integrations/nodejs-bun-deno.md +7 -2
  119. package/skills/void/docs/reference/api/resources.md +27 -0
  120. package/skills/void/docs/reference/api.md +1 -1
  121. package/skills/void/docs/reference/cli/deploy.md +1 -1
  122. package/skills/void/docs/reference/cli/platform-operations.md +4 -8
  123. package/skills/void/docs/reference/cli/platform.md +5 -0
  124. package/skills/void/docs/reference/resource-inference.md +11 -8
  125. package/dist/cf-build-output-_0HNWysu.mjs +0 -2
  126. package/dist/client-B9UBI03V.mjs +0 -2
  127. package/dist/deploy-irP5q0-x.mjs +0 -2
  128. package/dist/gen-DvQTWzDU.mjs +0 -2
  129. package/dist/help-mabuIV98.mjs +0 -2
  130. package/dist/login-DIy9Sb-U.mjs +0 -2
  131. package/dist/migrate-BCiJ8w0f.mjs +0 -2
  132. package/dist/platform-args-DdnM6WIf.mjs +0 -2
  133. package/dist/platform-management-DG47jys8.mjs +0 -2
  134. package/skills/void/docs/guide/env-migration.md +0 -109
  135. package/dist/{cf-build-output-BPqOT964.mjs → cf-build-output-U8o1Gl6X.mjs} +1 -1
  136. package/dist/{env-validation-C_8tPdhs.mjs → env-validation-vBSQ8gw5.mjs} +1 -1
  137. package/dist/{platform-registry-DkPPXfp_.mjs → platform-registry-KfNEF84O.mjs} +1 -1
@@ -1,13 +1,13 @@
1
+ import { b as writePendingInstallationSecrets, d as promoteInstallationSecrets, f as readInstallationRecoverySecrets, g as resolveInstallationManifest, s as normalizePlatformApiUrl, t as acquirePlatformLifecycleLock, y as writeInstallationManifest } from "./platform-registry-KfNEF84O.mjs";
1
2
  import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
2
- import { b as writePendingInstallationSecrets, d as promoteInstallationSecrets, f as readInstallationRecoverySecrets, g as resolveInstallationManifest, s as normalizePlatformApiUrl, t as acquirePlatformLifecycleLock, y as writeInstallationManifest } from "./platform-registry-DkPPXfp_.mjs";
3
- import { n as ensurePlatformAccessToken } from "./cf-access-BGe5sWXF.mjs";
4
- import { A as confirm, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
5
- import { n as OperatorClient } from "./operator-client-CpHjTd0t.mjs";
6
- import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-7erYc6Lt.mjs";
7
- import { A as PlatformCloudflareClient, D as checkpointPlatformAccessResources, E as resolvePlatformCloudflareCredential, O as parsePlatformAccessSetupSpec, k as preparePlatformAccessSetup, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock } from "./platform-lifecycle-BBoNzojY.mjs";
8
- import { c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-CWOQOWXm.mjs";
9
- import { createHmac } from "node:crypto";
3
+ import { n as ensurePlatformAccessToken } from "./cf-access-AHKBzmuu.mjs";
4
+ import { A as confirm, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
5
+ import { n as OperatorClient } from "./operator-client-LmwjxT6q.mjs";
6
+ import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-CkmTE3rt.mjs";
7
+ import { A as PlatformCloudflareClient, D as checkpointPlatformAccessResources, E as resolvePlatformCloudflareCredential, O as parsePlatformAccessSetupSpec, k as preparePlatformAccessSetup, n as resolvePlatformInstallDatabaseUrl, s as acquirePlatformDatabaseLifecycleLock } from "./platform-lifecycle-Dm09JNkn.mjs";
8
+ import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest } from "./platform-management-BSEc_ZeG.mjs";
10
9
  import { parsePlatformAccessProtection, platformProtectionProofMessage } from "@void/platform";
10
+ import { createHmac } from "node:crypto";
11
11
  import { readFile } from "node:fs/promises";
12
12
  //#region src/cli/platform-auth-protection.ts
13
13
  /** Read every externally routed control-plane Worker before changing its preview settings. */
@@ -1,12 +1,12 @@
1
- import { f as readInstallationRecoverySecrets, g as resolveInstallationManifest, t as acquirePlatformLifecycleLock } from "./platform-registry-DkPPXfp_.mjs";
2
- import { u as openBrowser } from "./auth-CQkSDS50.mjs";
3
- import { A as confirm, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
4
- import { a as resolveOperatorOrigin } from "./operator-auth-7erYc6Lt.mjs";
5
- import { A as PlatformCloudflareClient, E as resolvePlatformCloudflareCredential, f as platformDatabaseClientUrl, n as resolvePlatformInstallDatabaseUrl, s as acquirePlatformDatabaseLifecycleLockConnection } from "./platform-lifecycle-BBoNzojY.mjs";
6
- import { c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-CWOQOWXm.mjs";
1
+ import { f as readInstallationRecoverySecrets, g as resolveInstallationManifest, t as acquirePlatformLifecycleLock } from "./platform-registry-KfNEF84O.mjs";
2
+ import { u as openBrowser } from "./auth-7wuZ5ob8.mjs";
3
+ import { A as confirm, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
4
+ import { a as resolveOperatorOrigin } from "./operator-auth-CkmTE3rt.mjs";
5
+ import { A as PlatformCloudflareClient, E as resolvePlatformCloudflareCredential, c as acquirePlatformDatabaseLifecycleLockConnection, l as platformDatabaseClientUrl, n as resolvePlatformInstallDatabaseUrl } from "./platform-lifecycle-Dm09JNkn.mjs";
6
+ import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest } from "./platform-management-BSEc_ZeG.mjs";
7
+ import { parsePlatformAccessProtection, parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration, platformAuthenticationRecoveryMessage, validatePlatformAdmissionPolicy } from "@void/platform";
7
8
  import { createCipheriv, createDecipheriv, createHash, createHmac, hkdfSync, randomBytes, randomUUID } from "node:crypto";
8
9
  import { execFile } from "node:child_process";
9
- import { parsePlatformAccessProtection, parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration, platformAuthenticationRecoveryMessage, validatePlatformAdmissionPolicy } from "@void/platform";
10
10
  import { setTimeout } from "node:timers/promises";
11
11
  import { readFile } from "node:fs/promises";
12
12
  //#region src/cli/platform-auth-recovery-core.ts
@@ -1,2 +1,2 @@
1
- import { r as runPlatformCommand, t as discoverPlatform } from "./platform-cmd-DMDEc9uS.mjs";
1
+ import { r as runPlatformCommand, t as discoverPlatform } from "./platform-cmd-D7vSWMvV.mjs";
2
2
  export { discoverPlatform, runPlatformCommand };
@@ -1,9 +1,9 @@
1
+ import { _ as savePlatformConnection, a as listInstallationManifests, o as listPlatformConnections, r as getActivePlatformConnection, s as normalizePlatformApiUrl, v as selectPlatformConnection } from "./platform-registry-KfNEF84O.mjs";
1
2
  import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
2
- import { _ as savePlatformConnection, o as listPlatformConnections, r as getActivePlatformConnection, s as normalizePlatformApiUrl, v as selectPlatformConnection } from "./platform-registry-DkPPXfp_.mjs";
3
- import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, t as ensureCloudflaredToken } from "./cf-access-BGe5sWXF.mjs";
4
- import { K as select, L as log, X as text, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
5
- import { c as import_picocolors } from "./output-CbM85T4k.mjs";
6
- import { parsePlatformDiscoveryDocument } from "@void/platform";
3
+ import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, t as ensureCloudflaredToken } from "./cf-access-AHKBzmuu.mjs";
4
+ import { K as select, L as log, X as text, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
5
+ import { t as readPlatformDiscoveryResponse } from "./platform-discovery-DDDUvnqp.mjs";
6
+ import { c as import_picocolors } from "./output-BBsUwdyT.mjs";
7
7
  //#region src/cli/platform-cmd.ts
8
8
  async function discoverPlatform(input, fetcher = fetch) {
9
9
  const apiUrl = normalizePlatformApiUrl(input);
@@ -22,22 +22,7 @@ async function discoverPlatform(input, fetcher = fetch) {
22
22
  ensurePlatformAccessToken(apiUrl, true);
23
23
  response = await request();
24
24
  }
25
- if (!response.ok) throw new Error(`platform: Discovery failed at ${apiUrl} (HTTP ${response.status}).`);
26
- let value;
27
- try {
28
- value = await response.json();
29
- } catch {
30
- throw new Error(`platform: ${apiUrl} returned invalid discovery metadata.`);
31
- }
32
- let discovery;
33
- try {
34
- discovery = parsePlatformDiscoveryDocument(value);
35
- } catch (error) {
36
- throw new Error(`platform: ${apiUrl} returned invalid discovery metadata: ${error instanceof Error ? error.message : String(error)}`);
37
- }
38
- const finalOrigin = normalizePlatformApiUrl(response.url ? new URL(response.url).origin : apiUrl);
39
- if (discovery.apiUrl !== finalOrigin) throw new Error(`platform: Discovery origin mismatch. The response came from ${finalOrigin}, but identifies ${discovery.apiUrl}.`);
40
- return discovery;
25
+ return readPlatformDiscoveryResponse(apiUrl, response);
41
26
  }
42
27
  async function promptPlatformUrl() {
43
28
  if (!process.stdin.isTTY) throw new Error("platform: A platform URL is required in non-interactive mode.");
@@ -106,19 +91,19 @@ async function runPlatformCommand(_root, args) {
106
91
  }]
107
92
  });
108
93
  if (isCancel(group)) return;
109
- const { parsePlatformArgs } = await import("./platform-args-DdnM6WIf.mjs");
94
+ const { parsePlatformArgs } = await import("./platform-args-Cq6EjQro.mjs");
110
95
  return runPlatformCommand(_root, parsePlatformArgs(["config", group]));
111
96
  }
112
- const { runPlatformPlansConfig } = await import("./platform-plans-config-Vl9BP3H4.mjs");
97
+ const { runPlatformPlansConfig } = await import("./platform-plans-config-B0pOVQyW.mjs");
113
98
  await runPlatformPlansConfig(args);
114
99
  return;
115
100
  }
116
- const { runPlatformAuthConfig } = await import("./platform-auth-config-DDrxUy4m.mjs");
101
+ const { runPlatformAuthConfig } = await import("./platform-auth-config-0V0lA3pF.mjs");
117
102
  await runPlatformAuthConfig(args);
118
103
  return;
119
104
  }
120
105
  if (args.subcommand === "operator") {
121
- const { runOperatorCommand } = await import("./operator-cmd-DGqPJUD3.mjs");
106
+ const { runOperatorCommand } = await import("./operator-cmd-d-IEKgNk.mjs");
122
107
  await runOperatorCommand(args);
123
108
  return;
124
109
  }
@@ -138,7 +123,22 @@ async function runPlatformCommand(_root, args) {
138
123
  return;
139
124
  }
140
125
  if (args.subcommand === "status") {
141
- const discovery = await discoverPlatform((await resolveConnection(args.selector)).apiUrl);
126
+ const local = args.selector ? listInstallationManifests().find((manifest) => manifest.id === args.selector && manifest.status !== "uninstalled") : void 0;
127
+ const connection = local ? null : await resolveConnection(args.selector);
128
+ const saved = local ?? (connection?.installationId ? listInstallationManifests().find((manifest) => manifest.id === connection.installationId) : void 0);
129
+ if (saved) showSavedInstallationStatus(saved);
130
+ const apiUrl = local?.endpoints.apiUrl ?? connection?.apiUrl;
131
+ if (!apiUrl) {
132
+ log.info("No verified API endpoint is saved yet. Live traffic availability is unknown.");
133
+ return;
134
+ }
135
+ let discovery;
136
+ try {
137
+ discovery = await discoverPlatform(apiUrl);
138
+ } catch (error) {
139
+ if (saved) log.info("Live availability could not be confirmed. The saved checkpoint above may be out of date.");
140
+ throw error;
141
+ }
142
142
  log.success(`${discovery.displayName} is reachable.`);
143
143
  console.log(`API: ${discovery.apiUrl}`);
144
144
  console.log(`Proxy: ${discovery.proxyUrl}`);
@@ -150,8 +150,18 @@ async function runPlatformCommand(_root, args) {
150
150
  console.log(`Capabilities: ${Object.entries(discovery.capabilities).filter(([, enabled]) => enabled).map(([name]) => name).join(", ")}`);
151
151
  return;
152
152
  }
153
- const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-BFdSi9Qt.mjs");
153
+ const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-BaUdTRPU.mjs");
154
154
  await runPlatformLifecycleCommand(args);
155
155
  }
156
+ function showSavedInstallationStatus(manifest) {
157
+ console.log(`Saved installation: ${manifest.id} (${manifest.status})`);
158
+ console.log(`Checkpoint: ${manifest.updatedAt}`);
159
+ if (manifest.operation) {
160
+ const operation = manifest.operation;
161
+ console.log(`Saved operation: ${operation.action} — ${operation.phase}`);
162
+ console.log(`Runtime: ${operation.fromVersion ?? "new installation"} → ${operation.toVersion}`);
163
+ }
164
+ if (manifest.endpoints.apiUrl) console.log(`Administrator status: ${manifest.endpoints.apiUrl}/admin/status`);
165
+ }
156
166
  //#endregion
157
167
  export { saveDiscoveredPlatform as i, promptPlatformUrl as n, runPlatformCommand as r, discoverPlatform as t };
@@ -0,0 +1,27 @@
1
+ import { s as normalizePlatformApiUrl } from "./platform-registry-KfNEF84O.mjs";
2
+ import { parsePlatformDiscoveryDocument } from "@void/platform";
3
+ //#region src/cli/platform-discovery.ts
4
+ /** Validates a `GET /.well-known/void-platform` response from `apiUrl`. */
5
+ async function readPlatformDiscoveryResponse(apiUrl, response) {
6
+ if (!response.ok) {
7
+ await response.body?.cancel();
8
+ throw new Error(`platform: Discovery failed at ${apiUrl} (HTTP ${response.status}).`);
9
+ }
10
+ let value;
11
+ try {
12
+ value = await response.json();
13
+ } catch {
14
+ throw new Error(`platform: ${apiUrl} returned invalid discovery metadata.`);
15
+ }
16
+ let discovery;
17
+ try {
18
+ discovery = parsePlatformDiscoveryDocument(value);
19
+ } catch (error) {
20
+ throw new Error(`platform: ${apiUrl} returned invalid discovery metadata: ${error instanceof Error ? error.message : String(error)}`);
21
+ }
22
+ const finalOrigin = normalizePlatformApiUrl(response.url ? new URL(response.url).origin : apiUrl);
23
+ if (discovery.apiUrl !== finalOrigin) throw new Error(`platform: Discovery origin mismatch. The response came from ${finalOrigin}, but identifies ${discovery.apiUrl}.`);
24
+ return discovery;
25
+ }
26
+ //#endregion
27
+ export { readPlatformDiscoveryResponse as t };
@@ -1,8 +1,8 @@
1
+ import { _ as savePlatformConnection, f as readInstallationRecoverySecrets, t as acquirePlatformLifecycleLock, y as writeInstallationManifest } from "./platform-registry-KfNEF84O.mjs";
1
2
  import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
2
- import { _ as savePlatformConnection, f as readInstallationRecoverySecrets, t as acquirePlatformLifecycleLock, y as writeInstallationManifest } from "./platform-registry-DkPPXfp_.mjs";
3
- import { A as confirm, B as note, L as log, X as text, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
4
- import { A as PlatformCloudflareClient, E as resolvePlatformCloudflareCredential, T as assertPlatformOperatorCredentialCanApplyPlan, _ as recordPlatformWorkerTraffic, c as createPlatformHealthProbeToken, m as recordResource, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, t as assertNoninteractivePlatformMutationAcknowledged, y as createPlatformInstallPlan } from "./platform-lifecycle-BBoNzojY.mjs";
5
- import { a as resolveInstalledPlatformManifest, c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-CWOQOWXm.mjs";
3
+ import { A as confirm, B as note, L as log, X as text, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
4
+ import { A as PlatformCloudflareClient, E as resolvePlatformCloudflareCredential, T as assertPlatformOperatorCredentialCanApplyPlan, _ as recordPlatformWorkerTraffic, g as recordResource, n as resolvePlatformInstallDatabaseUrl, p as createPlatformHealthProbeToken, s as acquirePlatformDatabaseLifecycleLock, t as assertNoninteractivePlatformMutationAcknowledged, y as createPlatformInstallPlan } from "./platform-lifecycle-Dm09JNkn.mjs";
5
+ import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest, o as resolveInstalledPlatformManifest } from "./platform-management-BSEc_ZeG.mjs";
6
6
  import { PLATFORM_HEALTH_HOSTNAME_LABEL, PLATFORM_REMOTE_INSTALLATION_MANIFEST_KEY, createApplicationRoutes, createPlatformDeploymentManifest, normalizeApplicationDomain } from "@void/platform";
7
7
  //#region src/cli/platform-domain.ts
8
8
  function platformDomainTarget(manifest, domain, zone, dedicatedZone) {
@@ -1,2 +1,2 @@
1
- import { r as runPlatformLifecycleCommand } from "./platform-lifecycle-BBoNzojY.mjs";
1
+ import { r as runPlatformLifecycleCommand } from "./platform-lifecycle-Dm09JNkn.mjs";
2
2
  export { runPlatformLifecycleCommand };