void 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{account-cmd-ChVKPZ-w.mjs → account-cmd-DRhmCWcm.mjs} +3 -3
- package/dist/{application-analysis-2vGZrKzg.mjs → application-analysis-HRFsZOv3.mjs} +3 -3
- package/dist/{application-routing-DnUQoOJD.mjs → application-routing-P4TggvWp.mjs} +1 -1
- package/dist/{auth-link-D4uMdOsw.mjs → auth-link-CVXP1G6G.mjs} +3 -3
- package/dist/{auth-router-62dna450.mjs → auth-router-D1pGdbvB.mjs} +2 -2
- package/dist/{better-auth-shared-CiclgPde.mjs → better-auth-shared-C958aM7W.mjs} +28 -3
- package/dist/{build-cmd-D93K_4Sa.mjs → build-cmd-DmjbuT6d.mjs} +1 -1
- package/dist/{cache-CiIzEED4.mjs → cache-2khBO1MR.mjs} +1 -1
- package/dist/{cancel-deploy-BNoGfn2e.mjs → cancel-deploy-_itbbvY3.mjs} +1 -1
- package/dist/cli/cli.mjs +27 -27
- package/dist/client-CEtr5UOR.mjs +1 -0
- package/dist/{client-Qayy9xEh.mjs → client-CoxPEhJq.mjs} +6 -2
- package/dist/{cloudflare-cmd-DiFGaLow.mjs → cloudflare-cmd-fZ6AMSWk.mjs} +1 -1
- package/dist/{cloudflare-config-Chet188_.mjs → cloudflare-config-eQunqX6A.mjs} +1 -1
- package/dist/{cloudflare-connect-BdgAQBc7.mjs → cloudflare-connect-9OZe4XVQ.mjs} +1 -1
- package/dist/{cloudflare-operations-CWA24vCh.mjs → cloudflare-operations-CrskD4_O.mjs} +4 -4
- package/dist/{cloudflare-operations-D8MoezuN.mjs → cloudflare-operations-oLvAd9Nd.mjs} +1 -1
- package/dist/{config-Bt4rw93x.mjs → config-BBlVXZCU.mjs} +1 -1
- package/dist/{config-DkA9jYF2.mjs → config-BITKQ3O6.mjs} +2 -1
- package/dist/{config-BszFVhpk.mjs → config-BgysUhnm.mjs} +1 -1
- package/dist/{config-CzsNzGVH.d.mts → config-CPxJmt4M.d.mts} +2 -0
- package/dist/config-entry.d.mts +1 -1
- package/dist/{connect-b9mJbb6X.mjs → connect-CKvmkl2R.mjs} +4 -4
- package/dist/{create-project-rnjum4_V.mjs → create-project-BiMmR5wA.mjs} +1 -1
- package/dist/{create-project-eomwm0wa.mjs → create-project-Bq0M8MtO.mjs} +1 -1
- package/dist/{db-UPWmiSk1.mjs → db-cq5RW4Vy.mjs} +17 -17
- package/dist/{delete-BeeYi1WO.mjs → delete-CY4L8fi2.mjs} +1 -1
- package/dist/deploy-B029oHlE.mjs +2 -0
- package/dist/{deploy-CwmCcTlq.mjs → deploy-D_gEojD2.mjs} +79 -42
- package/dist/{deploy-managed-static-gPDxyp3v.mjs → deploy-managed-static-BHVbB_-A.mjs} +11 -11
- package/dist/{deploy-transport-L6zzPE9T.mjs → deploy-transport-DEyOUfac.mjs} +2 -2
- package/dist/deploy.mjs +5 -4
- package/dist/{dev-inbox-CwH5VuZj.mjs → dev-inbox-CUUS6iUg.mjs} +1 -1
- package/dist/{dispatch-CiJ1Xrba.mjs → dispatch-BNLB5_Gm.mjs} +1 -1
- package/dist/{domain-3xdH9p2L.mjs → domain-BlH90Ods.mjs} +2 -2
- package/dist/{email-Du3YRnM5.mjs → email-Bkq8ZL1p.mjs} +6 -6
- package/dist/{email-cloudflare-CtD8qE13.mjs → email-cloudflare-MvJIxrwx.mjs} +5 -107
- package/dist/{env-Cnvp0pGy.mjs → env-AvuCSeCH.mjs} +2 -2
- package/dist/{gen-BvVmpZ5f.mjs → gen-BD-dfjxY.mjs} +3 -3
- package/dist/gen-CIHXh9I8.mjs +1 -0
- package/dist/{github-cmd-X2GKiLi-.mjs → github-cmd-CA-lBdkn.mjs} +1 -1
- package/dist/{handler-Drm_lyrV.d.mts → handler-BR6Tvjkp.d.mts} +8 -3
- package/dist/{handler-xmzz0U38.mjs → handler-CKeTtYID.mjs} +2 -12
- package/dist/headers-CuTEdP9C.mjs +445 -0
- package/dist/{help-EWDNxST-.mjs → help-1OCFDsRr.mjs} +9 -1
- package/dist/help-Ba8Dq5-r.mjs +1 -0
- package/dist/{inbound-DSKSHDUj.d.mts → inbound-BHt4dIlL.d.mts} +16 -5
- package/dist/{inbound-DQfekMtz.mjs → inbound-CdO-qY0w.mjs} +2 -76
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +65 -37
- package/dist/{info-jW8_d3VI.mjs → info-CJxua_db.mjs} +4 -4
- package/dist/{init-jDQ5G9QC.mjs → init-B-4CluYx.mjs} +12 -11
- package/dist/{isr-config-DhBkzCdY.mjs → isr-config-Czzb4mIq.mjs} +1 -47
- package/dist/{link-DOyxX5Xs.mjs → link-DAXOT-G_.mjs} +2 -2
- package/dist/{list-C9pTYDtl.mjs → list-BYSOo9fm.mjs} +2 -2
- package/dist/{live-CDBHyYiR.d.mts → live-0xrcVpyq.d.mts} +1 -1
- package/dist/{local-d1-CKfek6Z4.mjs → local-d1-BLgsNUj9.mjs} +1 -1
- package/dist/login-BpbYeu-n.mjs +1 -0
- package/dist/{login-koQbjzPd.mjs → login-CJopTWX4.mjs} +2 -2
- package/dist/{logs-cTU5TsRW.mjs → logs-DE0weBsR.mjs} +13 -11
- package/dist/{migrate-C62pGTfr.mjs → migrate-ChHHZBTi.mjs} +3 -3
- package/dist/migrate-HdA6Kh2p.mjs +1 -0
- package/dist/{mime-DKkO7ZtA.mjs → mime-CtP6-qAF.mjs} +143 -15
- package/dist/nitro.mjs +3 -3
- package/dist/{node-BfAt2rz8.mjs → node-CZ6lGNLn.mjs} +1 -1
- package/dist/{operator-cmd-CnAvSqJ5.mjs → operator-cmd-BUqsdk2K.mjs} +28 -10
- package/dist/operator-cmd-wBYyp8iQ.mjs +1 -0
- package/dist/pages/client.d.mts +143 -11
- package/dist/pages/client.mjs +173 -12
- package/dist/pages/index.d.mts +22 -3
- package/dist/pages/index.mjs +18 -4
- package/dist/pages/islands-plugin.d.mts +46 -2
- package/dist/pages/islands-plugin.mjs +91 -5
- package/dist/pages/prefetch.d.mts +2 -2
- package/dist/pages/prefetch.mjs +1 -1
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -2
- package/dist/platform-args-C7XUw9mw.mjs +1 -0
- package/dist/{platform-args-Bv9hoLEL.mjs → platform-args-Cx1M-7bq.mjs} +18 -4
- package/dist/{platform-auth-config-CLj0EvnB.mjs → platform-auth-config-K4m_LE8b.mjs} +4 -4
- package/dist/{platform-auth-protection-DQDSxVhr.mjs → platform-auth-protection-KF5Vo-1I.mjs} +2 -2
- package/dist/{platform-auth-recovery-DD3oLerq.mjs → platform-auth-recovery-BOdFrl7R.mjs} +2 -2
- package/dist/{platform-cmd-WnOmdLzR.mjs → platform-cmd-DpCHawGF.mjs} +1 -1
- package/dist/{platform-cmd-PLNLg-2N.mjs → platform-cmd-Ds3EAV5t.mjs} +5 -4
- package/dist/{platform-domain-Bnq0vg0q.mjs → platform-domain-rWJshybd.mjs} +2 -2
- package/dist/{platform-lifecycle-BQiN9HN5.mjs → platform-lifecycle-BH34I0rh.mjs} +1 -1
- package/dist/{platform-lifecycle-BCsFg1Tl.mjs → platform-lifecycle-D9RdGub1.mjs} +66 -31
- package/dist/{platform-management-nzCDwtiN.mjs → platform-management-BRefdHGD.mjs} +21 -3
- package/dist/{platform-management-CMJR8Zi-.mjs → platform-management-BfLW0Zlo.mjs} +1 -1
- package/dist/{platform-recovery-DBNoME3I.mjs → platform-recovery-DZuZGJtt.mjs} +2 -2
- package/dist/platform-runtime-logs-CdJGnk3f.mjs +68 -0
- package/dist/{platform-setup-VEcHu0Vq.mjs → platform-setup-Vw1AaUN8.mjs} +15 -2
- package/dist/{plugin-inference-DmwjC3y2.mjs → plugin-inference-CdLbxZL_.mjs} +1 -1
- package/dist/{prefetch-L93_1Jk7.mjs → prefetch-Dx2jIbtg.mjs} +19 -1
- package/dist/{prefetch-CG0K6JPd.d.mts → prefetch-NdNeubbH.d.mts} +7 -1
- package/dist/{prepare-pfl2LIMy.mjs → prepare-BJW-f1f1.mjs} +4 -4
- package/dist/{prepare-BPsfLWaW.mjs → prepare-BMGeKL16.mjs} +1 -1
- package/dist/prepare-BdxJJCMv.mjs +1 -0
- package/dist/{project-cmd-5Izu4Pg3.mjs → project-cmd-B_bUyZ3J.mjs} +15 -15
- package/dist/{project-team-DSUyjZFh.mjs → project-team-MjT5K4rQ.mjs} +1 -1
- package/dist/{project-token-wj09YQSB.mjs → project-token-BKHGwY3k.mjs} +1 -1
- package/dist/{project-zero-trust-BMHf2YF0.mjs → project-zero-trust-Bzdd05-h.mjs} +1 -1
- package/dist/{protocol-0-lp9ZYx.mjs → protocol-COyySMki.mjs} +130 -107
- package/dist/{protocol-xdrl-In0.d.mts → protocol-CkwjASep.d.mts} +2 -2
- package/dist/{provision-CRiNnlfE.mjs → provision-BbCzpbXs.mjs} +1 -1
- package/dist/{provision-CxHIGBIZ.mjs → provision-DQF6Kw-6.mjs} +1 -1
- package/dist/{requests-DicgB5jU.mjs → requests-daJmVpjk.mjs} +1 -1
- package/dist/{rollback-DrDZOKNE.mjs → rollback-BgL0wY1J.mjs} +2 -2
- package/dist/{route-types-irZc1txT.mjs → route-types-CZc1YXjF.mjs} +40 -4
- package/dist/route-url-C_YIH_zO.d.mts +37 -0
- package/dist/routes-stub.d.mts +6 -2
- package/dist/runtime/better-auth-mysql.mjs +1 -1
- package/dist/runtime/better-auth-pg.mjs +1 -1
- package/dist/runtime/better-auth.mjs +1 -1
- package/dist/runtime/email/testing.d.mts +1 -1
- package/dist/runtime/email/testing.mjs +3 -3
- package/dist/runtime/email.d.mts +1 -1
- package/dist/runtime/email.mjs +3 -3
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +2 -2
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/route-url.d.mts +2 -2
- package/dist/runtime/routing.d.mts +3 -3
- package/dist/runtime/routing.mjs +37 -16
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +1 -1
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/{scan-DSQtH3oS.mjs → scan-X2rDDRNa.mjs} +18 -10
- package/dist/{secret-C_QtTzJG.mjs → secret-CPq-B_vp.mjs} +2 -2
- package/dist/{static-asset-marker-NR1XS2z5.mjs → static-asset-marker-DsQKz6lt.mjs} +8 -1
- package/dist/validation-error-uAAjlsiW.mjs +82 -0
- package/dist/{version-metadata-Blf5H9BQ.mjs → version-metadata-C8hLzQkv.mjs} +1 -1
- package/dist/{wrangler-p-kLCJqF.mjs → wrangler-DESSbN8L.mjs} +2 -2
- package/dist/wrangler-DUB3MGHV.mjs +1 -0
- package/dist/{wrapper-iejSJDwL.mjs → wrapper-C9SUxoj7.mjs} +2 -2
- package/dist/{ws-DzBD-NUj.d.mts → ws-Dmjg5NH2.d.mts} +1 -1
- package/docs/guide/edge/headers.md +2 -0
- package/docs/guide/edge/rewrites.md +1 -1
- package/docs/guide/email/receiving.md +1 -1
- package/docs/guide/email/sending.md +42 -12
- package/docs/guide/pages-routing/actions-and-forms.md +21 -1
- package/docs/guide/pages-routing/islands.md +3 -3
- package/docs/guide/pages-routing/layouts.md +16 -2
- package/docs/guide/pages-routing/loaders.md +2 -2
- package/docs/guide/pages-routing/markdown.md +1 -1
- package/docs/guide/pages-routing/overview.md +103 -0
- package/docs/guide/platform/administration/connected-apps.md +4 -2
- package/docs/guide/platform/installation/credentials.md +6 -4
- package/docs/guide/platform/installation/maintenance.md +13 -0
- package/docs/guide/platform/installation/setup.md +22 -1
- package/docs/guide/ssg.md +3 -3
- package/docs/guide/type-safety.md +42 -1
- package/docs/integrations/frameworks/astro.md +17 -12
- package/docs/integrations/frameworks/overview.md +2 -2
- package/docs/reference/api/pages.md +101 -50
- package/docs/reference/api/rewrites.md +4 -1
- package/docs/reference/api/types.md +14 -10
- package/docs/reference/api.md +1 -1
- package/docs/reference/cli/platform-installation.md +4 -1
- package/docs/reference/cli/setup.md +1 -1
- package/docs/reference/config.md +10 -0
- package/package.json +8 -7
- package/schema.json +4 -0
- package/skills/void/SKILL.md +5 -0
- package/dist/client-DVtAKeUm.mjs +0 -1
- package/dist/deploy-CfU7CR-b.mjs +0 -2
- package/dist/gen-i61rdQgg.mjs +0 -1
- package/dist/headers-DEUBAM6W.mjs +0 -225
- package/dist/help-BcZDUcTw.mjs +0 -1
- package/dist/login-C0MiQrYs.mjs +0 -1
- package/dist/migrate-BG09-KOv.mjs +0 -1
- package/dist/operator-cmd-BhHXIL2G.mjs +0 -1
- package/dist/platform-args-C1kqYUen.mjs +0 -1
- package/dist/prepare-BJMmfq3W.mjs +0 -1
- package/dist/route-url-BGOiyKNz.d.mts +0 -24
- package/dist/validation-error-rDVbUJet.mjs +0 -47
- package/dist/wrangler-CPRX2d9A.mjs +0 -1
|
@@ -228,6 +228,10 @@ const platformSubcommands = [
|
|
|
228
228
|
description: "Safely remove an installed Void platform"
|
|
229
229
|
}
|
|
230
230
|
];
|
|
231
|
+
function parseRuntimeLogs(value) {
|
|
232
|
+
if (value !== "full" && value !== "minimal") throw new Error("platform: --runtime-logs must be full or minimal.");
|
|
233
|
+
return value;
|
|
234
|
+
}
|
|
231
235
|
function readValue(rest, index, flag) {
|
|
232
236
|
const value = rest[index + 1];
|
|
233
237
|
if (!value || value.startsWith("-")) throw new Error(`platform: ${flag} requires a value.`);
|
|
@@ -251,6 +255,7 @@ function parseSelector(rest, subcommand, options = {}) {
|
|
|
251
255
|
}
|
|
252
256
|
function parseLifecycleSelector(rest, subcommand) {
|
|
253
257
|
const positional = [];
|
|
258
|
+
let runtimeLogs;
|
|
254
259
|
let runtime = "";
|
|
255
260
|
let fromRuntime = "";
|
|
256
261
|
let authConfig;
|
|
@@ -268,7 +273,11 @@ function parseLifecycleSelector(rest, subcommand) {
|
|
|
268
273
|
dashboardUrl = normalizePlatformDashboardUrl(value);
|
|
269
274
|
index = next;
|
|
270
275
|
} else if (arg === "--custom-domains" && (subcommand === "upgrade" || subcommand === "repair")) customDomains = true;
|
|
271
|
-
else if (arg === "--
|
|
276
|
+
else if (arg === "--runtime-logs" && subcommand === "upgrade") {
|
|
277
|
+
const [value, next] = readValue(rest, index, arg);
|
|
278
|
+
runtimeLogs = parseRuntimeLogs(value);
|
|
279
|
+
index = next;
|
|
280
|
+
} else if (arg === "--auth-config" && subcommand === "repair") {
|
|
272
281
|
const [value, next] = readValue(rest, index, arg);
|
|
273
282
|
authConfig = value;
|
|
274
283
|
index = next;
|
|
@@ -286,7 +295,8 @@ function parseLifecycleSelector(rest, subcommand) {
|
|
|
286
295
|
fromRuntime,
|
|
287
296
|
...authConfig !== void 0 ? { authConfig } : {},
|
|
288
297
|
...dashboardUrl !== void 0 ? { dashboardUrl } : {},
|
|
289
|
-
...customDomains ? { customDomains: true } : {}
|
|
298
|
+
...customDomains ? { customDomains: true } : {},
|
|
299
|
+
...runtimeLogs !== void 0 ? { runtimeLogs } : {}
|
|
290
300
|
};
|
|
291
301
|
}
|
|
292
302
|
function parsePlatformArgs(args) {
|
|
@@ -379,7 +389,7 @@ function parsePlatformArgs(args) {
|
|
|
379
389
|
};
|
|
380
390
|
}
|
|
381
391
|
if (subcommand === "upgrade" || subcommand === "rollback" || subcommand === "repair" || subcommand === "disable" || subcommand === "enable") {
|
|
382
|
-
const { selector, plan, runtime, fromRuntime, yes, authConfig, dashboardUrl, customDomains } = parseLifecycleSelector(rest, subcommand);
|
|
392
|
+
const { selector, plan, runtime, fromRuntime, yes, authConfig, dashboardUrl, customDomains, runtimeLogs } = parseLifecycleSelector(rest, subcommand);
|
|
383
393
|
return subcommand === "rollback" ? {
|
|
384
394
|
subcommand,
|
|
385
395
|
selector,
|
|
@@ -395,7 +405,8 @@ function parsePlatformArgs(args) {
|
|
|
395
405
|
yes,
|
|
396
406
|
...authConfig !== void 0 ? { authConfig } : {},
|
|
397
407
|
...dashboardUrl !== void 0 ? { dashboardUrl } : {},
|
|
398
|
-
...customDomains ? { customDomains } : {}
|
|
408
|
+
...customDomains ? { customDomains } : {},
|
|
409
|
+
...runtimeLogs !== void 0 ? { runtimeLogs } : {}
|
|
399
410
|
};
|
|
400
411
|
}
|
|
401
412
|
if (subcommand === "uninstall") {
|
|
@@ -434,6 +445,7 @@ function parsePlatformArgs(args) {
|
|
|
434
445
|
"--display-name",
|
|
435
446
|
"--name",
|
|
436
447
|
"--runtime",
|
|
448
|
+
"--runtime-logs",
|
|
437
449
|
"--zone"
|
|
438
450
|
]);
|
|
439
451
|
let workersDev = false;
|
|
@@ -467,6 +479,7 @@ function parsePlatformArgs(args) {
|
|
|
467
479
|
"platform",
|
|
468
480
|
"custom"
|
|
469
481
|
].includes(appAccess)) throw new Error("platform: --app-access accepts public, platform, or custom.");
|
|
482
|
+
const runtimeLogs = values.has("--runtime-logs") ? parseRuntimeLogs(values.get("--runtime-logs")) : void 0;
|
|
470
483
|
const loginMethods = values.get("--login-methods")?.split(",");
|
|
471
484
|
if (loginMethods && loginMethods.some((method) => !PLATFORM_LOGIN_KINDS.includes(method))) throw new Error("platform: --login-methods accepts github, google, oidc, and cloudflare-access.");
|
|
472
485
|
if (workersDev && (values.has("--application-domain") || values.has("--zone") || dedicatedZone)) throw new Error("platform: --workers-dev cannot be combined with a domain, zone, or --dedicated-zone.");
|
|
@@ -481,6 +494,7 @@ function parsePlatformArgs(args) {
|
|
|
481
494
|
...accessProtection !== void 0 ? { accessProtection } : {},
|
|
482
495
|
...appAccess !== void 0 ? { appAccess } : {},
|
|
483
496
|
...workersDev ? { workersDev: true } : {},
|
|
497
|
+
...runtimeLogs !== void 0 ? { runtimeLogs } : {},
|
|
484
498
|
...values.has("--auth-config") ? { authConfig: values.get("--auth-config") } : {},
|
|
485
499
|
account: values.get("--account") ?? "",
|
|
486
500
|
applicationDomain: values.get("--application-domain") ?? "",
|
|
@@ -3,8 +3,8 @@ import { A as confirm, K as select, U as password, X as text, z as multiselect }
|
|
|
3
3
|
import { l as formatUrl, m as printSuccess } from "./output-BCdLioKP.mjs";
|
|
4
4
|
import { n as OperatorClient } from "./operator-client-BIY4-N_6.mjs";
|
|
5
5
|
import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-CfDcmzpo.mjs";
|
|
6
|
-
import { i as humanLines } from "./operator-cmd-
|
|
7
|
-
import { o as platformPromptAnswer } from "./platform-setup-
|
|
6
|
+
import { i as humanLines } from "./operator-cmd-BUqsdk2K.mjs";
|
|
7
|
+
import { o as platformPromptAnswer } from "./platform-setup-Vw1AaUN8.mjs";
|
|
8
8
|
import { parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration } from "@void/platform";
|
|
9
9
|
import { stripVTControlCharacters } from "node:util";
|
|
10
10
|
import { setTimeout } from "node:timers/promises";
|
|
@@ -142,11 +142,11 @@ async function configurationInput(args, existing) {
|
|
|
142
142
|
}
|
|
143
143
|
async function runPlatformAuthConfig(args) {
|
|
144
144
|
if (args.action === "recover") {
|
|
145
|
-
const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-
|
|
145
|
+
const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-BOdFrl7R.mjs");
|
|
146
146
|
return runPlatformAuthRecovery(args);
|
|
147
147
|
}
|
|
148
148
|
if (args.action === "protection") {
|
|
149
|
-
const { runPlatformProtectionConfig } = await import("./platform-auth-protection-
|
|
149
|
+
const { runPlatformProtectionConfig } = await import("./platform-auth-protection-KF5Vo-1I.mjs");
|
|
150
150
|
return runPlatformProtectionConfig(args);
|
|
151
151
|
}
|
|
152
152
|
const origin = resolveOperatorOrigin(args.connection);
|
package/dist/{platform-auth-protection-DQDSxVhr.mjs → platform-auth-protection-KF5Vo-1I.mjs}
RENAMED
|
@@ -5,8 +5,8 @@ import { A as confirm, tt as isCancel } from "./dist-D23AAMxT.mjs";
|
|
|
5
5
|
import { m as printSuccess } from "./output-BCdLioKP.mjs";
|
|
6
6
|
import { n as OperatorClient } from "./operator-client-BIY4-N_6.mjs";
|
|
7
7
|
import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-CfDcmzpo.mjs";
|
|
8
|
-
import { G as checkpointPlatformAccessResources, H as resolvePlatformCloudflareCredential, K as parsePlatformAccessSetupSpec, Y as PlatformCloudflareClient, m as acquirePlatformDatabaseLifecycleLock, n as resolvePlatformInstallDatabaseUrl, q as preparePlatformAccessSetup } from "./platform-lifecycle-
|
|
9
|
-
import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest } from "./platform-management-
|
|
8
|
+
import { G as checkpointPlatformAccessResources, H as resolvePlatformCloudflareCredential, K as parsePlatformAccessSetupSpec, Y as PlatformCloudflareClient, m as acquirePlatformDatabaseLifecycleLock, n as resolvePlatformInstallDatabaseUrl, q as preparePlatformAccessSetup } from "./platform-lifecycle-D9RdGub1.mjs";
|
|
9
|
+
import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest } from "./platform-management-BRefdHGD.mjs";
|
|
10
10
|
import { parsePlatformAccessProtection, platformProtectionProofMessage } from "@void/platform";
|
|
11
11
|
import { createHmac } from "node:crypto";
|
|
12
12
|
import { readFile } from "node:fs/promises";
|
|
@@ -3,8 +3,8 @@ import { u as openBrowser } from "./auth-Dy8svcqQ.mjs";
|
|
|
3
3
|
import { A as confirm, tt as isCancel } from "./dist-D23AAMxT.mjs";
|
|
4
4
|
import { l as formatUrl, m as printSuccess } from "./output-BCdLioKP.mjs";
|
|
5
5
|
import { a as resolveOperatorOrigin } from "./operator-auth-CfDcmzpo.mjs";
|
|
6
|
-
import { H as resolvePlatformCloudflareCredential, Y as PlatformCloudflareClient, g as platformDatabaseClientUrl, h as acquirePlatformDatabaseLifecycleLockConnection, n as resolvePlatformInstallDatabaseUrl } from "./platform-lifecycle-
|
|
7
|
-
import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest } from "./platform-management-
|
|
6
|
+
import { H as resolvePlatformCloudflareCredential, Y as PlatformCloudflareClient, g as platformDatabaseClientUrl, h as acquirePlatformDatabaseLifecycleLockConnection, n as resolvePlatformInstallDatabaseUrl } from "./platform-lifecycle-D9RdGub1.mjs";
|
|
7
|
+
import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest } from "./platform-management-BRefdHGD.mjs";
|
|
8
8
|
import { parsePlatformAccessProtection, parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration, platformAuthenticationRecoveryMessage, validatePlatformAdmissionPolicy } from "@void/platform";
|
|
9
9
|
import { createCipheriv, createDecipheriv, createHash, createHmac, hkdfSync, randomBytes, randomUUID } from "node:crypto";
|
|
10
10
|
import { setTimeout } from "node:timers/promises";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as discoverPlatform, r as runPlatformCommand } from "./platform-cmd-
|
|
1
|
+
export { t as discoverPlatform, r as runPlatformCommand } from "./platform-cmd-Ds3EAV5t.mjs";
|
|
@@ -96,19 +96,19 @@ async function runPlatformCommand(_root, args) {
|
|
|
96
96
|
}]
|
|
97
97
|
});
|
|
98
98
|
if (isCancel(group)) return;
|
|
99
|
-
const { parsePlatformArgs } = await import("./platform-args-
|
|
99
|
+
const { parsePlatformArgs } = await import("./platform-args-C7XUw9mw.mjs");
|
|
100
100
|
return runPlatformCommand(_root, parsePlatformArgs(["config", group]));
|
|
101
101
|
}
|
|
102
102
|
const { runPlatformPlansConfig } = await import("./platform-plans-config-Dx1agneU.mjs");
|
|
103
103
|
await runPlatformPlansConfig(args);
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
106
|
-
const { runPlatformAuthConfig } = await import("./platform-auth-config-
|
|
106
|
+
const { runPlatformAuthConfig } = await import("./platform-auth-config-K4m_LE8b.mjs");
|
|
107
107
|
await runPlatformAuthConfig(args);
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
110
|
if (args.subcommand === "operator") {
|
|
111
|
-
const { runOperatorCommand } = await import("./operator-cmd-
|
|
111
|
+
const { runOperatorCommand } = await import("./operator-cmd-wBYyp8iQ.mjs");
|
|
112
112
|
await runOperatorCommand(args);
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
@@ -176,12 +176,13 @@ async function runPlatformCommand(_root, args) {
|
|
|
176
176
|
console.log(`Capabilities: ${Object.entries(discovery.capabilities).filter(([, enabled]) => enabled).map(([name]) => name).join(", ")}`);
|
|
177
177
|
return;
|
|
178
178
|
}
|
|
179
|
-
const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-
|
|
179
|
+
const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-BH34I0rh.mjs");
|
|
180
180
|
await runPlatformLifecycleCommand(args);
|
|
181
181
|
}
|
|
182
182
|
function showSavedInstallationStatus(manifest) {
|
|
183
183
|
console.log(`Saved installation: ${manifest.id} (${manifest.status})`);
|
|
184
184
|
console.log(`Checkpoint: ${manifest.updatedAt}`);
|
|
185
|
+
if (manifest.deployment.runtimeLogs) console.log(`Runtime logs: ${manifest.deployment.runtimeLogs}`);
|
|
185
186
|
if (manifest.operation) {
|
|
186
187
|
const operation = manifest.operation;
|
|
187
188
|
console.log(`Saved operation: ${operation.action} — ${operation.phase}`);
|
|
@@ -2,8 +2,8 @@ import { m as readInstallationRecoverySecrets, t as acquirePlatformLifecycleLock
|
|
|
2
2
|
import { t as cfAccessHeaders } from "./cf-access-pejlJmuy.mjs";
|
|
3
3
|
import { A as confirm, X as text, tt as isCancel } from "./dist-D23AAMxT.mjs";
|
|
4
4
|
import { m as printSuccess, p as note } from "./output-BCdLioKP.mjs";
|
|
5
|
-
import { C as createPlatformHealthProbeToken, E as recordResource, H as resolvePlatformCloudflareCredential, O as recordPlatformWorkerTraffic, V as assertPlatformOperatorCredentialCanApplyPlan, Y as PlatformCloudflareClient, k as createPlatformInstallPlan, m as acquirePlatformDatabaseLifecycleLock, n as resolvePlatformInstallDatabaseUrl, t as assertNoninteractivePlatformMutationAcknowledged } from "./platform-lifecycle-
|
|
6
|
-
import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest, o as resolveInstalledPlatformManifest } from "./platform-management-
|
|
5
|
+
import { C as createPlatformHealthProbeToken, E as recordResource, H as resolvePlatformCloudflareCredential, O as recordPlatformWorkerTraffic, V as assertPlatformOperatorCredentialCanApplyPlan, Y as PlatformCloudflareClient, k as createPlatformInstallPlan, m as acquirePlatformDatabaseLifecycleLock, n as resolvePlatformInstallDatabaseUrl, t as assertNoninteractivePlatformMutationAcknowledged } from "./platform-lifecycle-D9RdGub1.mjs";
|
|
6
|
+
import { d as verifyPlatformInstallationOwnership, l as selectAuthoritativePlatformManifest, o as resolveInstalledPlatformManifest } from "./platform-management-BRefdHGD.mjs";
|
|
7
7
|
import { PLATFORM_HEALTH_HOSTNAME_LABEL, PLATFORM_REMOTE_INSTALLATION_MANIFEST_KEY, createApplicationRoutes, createPlatformDeploymentManifest, normalizeApplicationDomain } from "@void/platform";
|
|
8
8
|
// src/cli/platform-domain.ts
|
|
9
9
|
function platformDomainTarget(manifest, domain, zone, dedicatedZone) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { r as runPlatformLifecycleCommand } from "./platform-lifecycle-
|
|
1
|
+
export { r as runPlatformLifecycleCommand } from "./platform-lifecycle-D9RdGub1.mjs";
|
|
@@ -6,10 +6,11 @@ import { t as ensurePlatformAccessToken } from "./cf-access-BmBT2h8_.mjs";
|
|
|
6
6
|
import { A as confirm, H as outro, K as select, L as log, U as password, X as text$1, tt as isCancel, z as multiselect } from "./dist-D23AAMxT.mjs";
|
|
7
7
|
import { f as import_picocolors, l as formatUrl, m as printSuccess, n as cliCommandName, p as note, r as createSpinner, u as getErrorMessage } from "./output-BCdLioKP.mjs";
|
|
8
8
|
import { l as resolveCloudflareOperationArgv } from "./cloudflare-process-DjJ638A-.mjs";
|
|
9
|
-
import { o as createDefaultRunWrangler, v as resolvePinnedApiBaseUrl } from "./provision-
|
|
10
|
-
import { t as parsePlatformArgs } from "./platform-args-
|
|
9
|
+
import { o as createDefaultRunWrangler, v as resolvePinnedApiBaseUrl } from "./provision-BbCzpbXs.mjs";
|
|
10
|
+
import { t as parsePlatformArgs } from "./platform-args-Cx1M-7bq.mjs";
|
|
11
11
|
import { o as runCloudflareAuthCommand } from "./cloudflare-auth-CEu-1Ps_.mjs";
|
|
12
|
-
import {
|
|
12
|
+
import { i as updateProjectWorkerRuntimeLogs, n as assertPlatformRuntimeLogsSupported, r as shouldUpdateProjectWorkerRuntimeLogs } from "./platform-runtime-logs-CdJGnk3f.mjs";
|
|
13
|
+
import { a as platformManagementSetupPage, c as platformSetupLink, d as planWritesDns, i as platformInstallCommandArguments, l as platformSetupPages, n as formatPlatformSetupPlan, o as platformPromptAnswer, r as openPlatformSetupPage, s as platformSetupFieldHelp, t as formatPlatformInstallCommand, u as planCreatesZone } from "./platform-setup-Vw1AaUN8.mjs";
|
|
13
14
|
import { copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
14
15
|
import { fileURLToPath } from "node:url";
|
|
15
16
|
import { isRecord } from "@void/deploy-core";
|
|
@@ -161,7 +162,7 @@ var PlatformCloudflareClient = class PlatformCloudflareClient {
|
|
|
161
162
|
headers: {
|
|
162
163
|
Accept: "application/json",
|
|
163
164
|
Authorization: `Bearer ${this.#token}`,
|
|
164
|
-
...init?.body ? { "Content-Type": "application/json" } : {},
|
|
165
|
+
...typeof init?.body === "string" ? { "Content-Type": "application/json" } : {},
|
|
165
166
|
...init?.headers
|
|
166
167
|
},
|
|
167
168
|
signal: init?.signal ?? AbortSignal.timeout(3e4),
|
|
@@ -733,6 +734,15 @@ var PlatformCloudflareClient = class PlatformCloudflareClient {
|
|
|
733
734
|
async listDispatchNamespaceScripts(accountId, namespace) {
|
|
734
735
|
return (await this.request(`/accounts/${encodeURIComponent(accountId)}/workers/dispatch/namespaces/${encodeURIComponent(namespace)}/scripts`)).map((entry) => requiredString(entry.id, "Dispatch namespace script name"));
|
|
735
736
|
}
|
|
737
|
+
/** Change settings of one namespace script. Omitted fields, such as bindings, are kept. */
|
|
738
|
+
async patchDispatchNamespaceScriptSettings(accountId, namespace, scriptName, settings) {
|
|
739
|
+
const body = new FormData();
|
|
740
|
+
body.set("settings", new Blob([JSON.stringify(settings)], { type: "application/json" }), "settings.json");
|
|
741
|
+
await this.request(`/accounts/${encodeURIComponent(accountId)}/workers/dispatch/namespaces/${encodeURIComponent(namespace)}/scripts/${encodeURIComponent(scriptName)}/settings`, {
|
|
742
|
+
method: "PATCH",
|
|
743
|
+
body
|
|
744
|
+
});
|
|
745
|
+
}
|
|
736
746
|
async deleteDispatchNamespaceScript(accountId, namespace, scriptName) {
|
|
737
747
|
await this.#deleteIfPresent(`/accounts/${encodeURIComponent(accountId)}/workers/dispatch/namespaces/${encodeURIComponent(namespace)}/scripts/${encodeURIComponent(scriptName)}`);
|
|
738
748
|
}
|
|
@@ -1794,12 +1804,6 @@ function assertPlatformOperatorCredentialCanApplyPlan(credential, plan, access)
|
|
|
1794
1804
|
function platformOperatorNeedsManagementToken(credential, plan, access) {
|
|
1795
1805
|
return credential.source === "oauth" && (!!access || planCreatesZone(plan) || planWritesDns(plan));
|
|
1796
1806
|
}
|
|
1797
|
-
function planCreatesZone(plan) {
|
|
1798
|
-
return plan.actions.some((action) => action.kind === "zone" && action.action === "create");
|
|
1799
|
-
}
|
|
1800
|
-
function planWritesDns(plan) {
|
|
1801
|
-
return plan.actions.some((action) => action.kind === "dns-record" && action.action !== "reuse");
|
|
1802
|
-
}
|
|
1803
1807
|
async function resolvePlatformCloudflareCredential(dependencies = {}) {
|
|
1804
1808
|
const { credential } = await resolvePlatformCloudflareCredentialWithInput(async () => void 0, dependencies);
|
|
1805
1809
|
return credential;
|
|
@@ -2425,6 +2429,7 @@ async function createPlatformInstallPlan(client, input, existing, options) {
|
|
|
2425
2429
|
if (capabilities.customDomains && (testing || !input.dedicatedZone)) throw new Error("platform: Custom domains need a dedicated application zone. Install with a domain and --dedicated-zone.");
|
|
2426
2430
|
if (capabilities.email && options?.includeEmailGateway !== false && !enableEmail) throw new Error("platform: Email-enabled installations require VOID_EMAIL_SENDER_DOMAIN and VOID_EMAIL_SHARED_ZONE_ID before deploying this runtime.");
|
|
2427
2431
|
if (input.appAccess && input.appAccess !== "public" && input.controlPlaneDomain.toLowerCase().replace(/\.$/, "").endsWith(`.${input.applicationDomain.toLowerCase()}`)) throw new Error("platform: The API hostname must be outside the app Access wildcard. Use the application domain apex or workers.dev for the API, then plan again.");
|
|
2432
|
+
const runtimeLogs = input.runtimeLogs === void 0 ? existing?.deployment.runtimeLogs : input.runtimeLogs === "minimal" ? "minimal" : void 0;
|
|
2428
2433
|
const deployment = createPlatformDeploymentManifest({
|
|
2429
2434
|
authentication: input.authentication ?? existing?.deployment.authentication,
|
|
2430
2435
|
appAccess: input.appAccess ?? existing?.deployment.appAccess,
|
|
@@ -2446,7 +2451,8 @@ async function createPlatformInstallPlan(client, input, existing, options) {
|
|
|
2446
2451
|
...emailSharedZoneId ? { emailSharedZoneId } : {},
|
|
2447
2452
|
...normalizedEmailSenderDomain ? { emailSenderDomain: normalizedEmailSenderDomain } : {},
|
|
2448
2453
|
installationSlug,
|
|
2449
|
-
resources: existing?.deployment.resources ?? createPlatformResourceNames(installationSlug)
|
|
2454
|
+
resources: existing?.deployment.resources ?? createPlatformResourceNames(installationSlug),
|
|
2455
|
+
...runtimeLogs ? { runtimeLogs } : {}
|
|
2450
2456
|
});
|
|
2451
2457
|
const { emailSharedZoneId: configuredEmailZone, emailSenderDomain: configuredSenderDomain, ...deploymentWithoutEmailZone } = deployment;
|
|
2452
2458
|
const { emailSharedZoneId: recordedEmailZone, emailSenderDomain: recordedSenderDomain, ...existingWithoutEmailZone } = existing?.deployment ?? deployment;
|
|
@@ -2472,14 +2478,19 @@ async function createPlatformInstallPlan(client, input, existing, options) {
|
|
|
2472
2478
|
customDomains: true
|
|
2473
2479
|
}
|
|
2474
2480
|
} : existingWithDashboard;
|
|
2475
|
-
const
|
|
2481
|
+
const existingWithEmail = existing && deployment.capabilities.email && !existing.deployment.capabilities.email ? {
|
|
2476
2482
|
...existingWithCustomDomains,
|
|
2477
2483
|
capabilities: {
|
|
2478
2484
|
...existingWithCustomDomains.capabilities,
|
|
2479
2485
|
email: true
|
|
2480
2486
|
}
|
|
2481
2487
|
} : existingWithCustomDomains;
|
|
2482
|
-
|
|
2488
|
+
const comparable = (value) => {
|
|
2489
|
+
if (!options?.allowRuntimeLogsChange) return JSON.stringify(value);
|
|
2490
|
+
const { runtimeLogs: _runtimeLogs, schemaVersion: _schemaVersion, ...rest } = value;
|
|
2491
|
+
return JSON.stringify(rest);
|
|
2492
|
+
};
|
|
2493
|
+
if (existing && (comparable(existingWithEmail) !== comparable(deploymentWithoutEmailZone) || recordedEmailZone !== void 0 && recordedEmailZone !== configuredEmailZone || recordedSenderDomain !== void 0 && recordedSenderDomain !== configuredSenderDomain)) throw new Error(`platform: --resume inputs do not match installation ${existing.id}. Use its recorded configuration.`);
|
|
2483
2494
|
const names = deployment.resources;
|
|
2484
2495
|
const wildcardHostname = `*.${deployment.application.baseDomain}`;
|
|
2485
2496
|
const zone = testing ? null : await client.findZone(account.id, deployment.application.zoneName);
|
|
@@ -3059,7 +3070,10 @@ async function readRemoteOwnership(client, accountId, routingNamespaces, existin
|
|
|
3059
3070
|
}
|
|
3060
3071
|
return null;
|
|
3061
3072
|
}
|
|
3062
|
-
|
|
3073
|
+
/** `previous` is the installed deployment, so a changed setting shows what it was. */
|
|
3074
|
+
function formatPlatformInstallPlan(plan, previous) {
|
|
3075
|
+
const runtimeLogs = plan.deployment.runtimeLogs ?? "full";
|
|
3076
|
+
const previousRuntimeLogs = previous ? previous.runtimeLogs ?? "full" : runtimeLogs;
|
|
3063
3077
|
const lines = [
|
|
3064
3078
|
`${import_picocolors.default.bold(`${plan.deployment.displayName} in ${plan.account.name}`)}`,
|
|
3065
3079
|
`${import_picocolors.default.bold("Account:")} ${plan.account.id}`,
|
|
@@ -3074,6 +3088,7 @@ function formatPlatformInstallPlan(plan) {
|
|
|
3074
3088
|
platform: "Same as platform Access policy",
|
|
3075
3089
|
custom: "Selected Access policy"
|
|
3076
3090
|
}[plan.deployment.appAccess]}`] : [],
|
|
3091
|
+
...runtimeLogs !== previousRuntimeLogs ? [`${import_picocolors.default.bold("Runtime logs:")} ${runtimeLogs} (was ${previousRuntimeLogs})`] : plan.deployment.runtimeLogs ? [`${import_picocolors.default.bold("Runtime logs:")} ${plan.deployment.runtimeLogs}`] : [],
|
|
3077
3092
|
`${import_picocolors.default.bold("Login callback:")} ${plan.apiUrl}/auth/callback`,
|
|
3078
3093
|
`${import_picocolors.default.bold("Database:")} ${plan.externalHyperdrive?.database || "PostgreSQL"} via Hyperdrive ${plan.deployment.resources.hyperdrive}`,
|
|
3079
3094
|
""
|
|
@@ -5494,7 +5509,7 @@ async function verifyInstalledPlatformAccessProtection(input) {
|
|
|
5494
5509
|
}
|
|
5495
5510
|
const existingWorkers = input.plan.actions.filter((action) => action.kind === "worker" && action.action === "update").map((action) => action.name);
|
|
5496
5511
|
if (existingWorkers.length) {
|
|
5497
|
-
const { verifyProtectionWorkerOrigins } = await import("./platform-auth-protection-
|
|
5512
|
+
const { verifyProtectionWorkerOrigins } = await import("./platform-auth-protection-KF5Vo-1I.mjs");
|
|
5498
5513
|
await verifyProtectionWorkerOrigins({
|
|
5499
5514
|
request: input.client.request.bind(input.client),
|
|
5500
5515
|
listWorkerDomains: input.client.listWorkerDomains.bind(input.client),
|
|
@@ -6646,6 +6661,7 @@ async function installPlatform(plan, secrets, existing, dependencies) {
|
|
|
6646
6661
|
const runtimeDirectory = resolvedRuntime.directory;
|
|
6647
6662
|
const runtime = resolvedRuntime.manifest;
|
|
6648
6663
|
if (plan.deployment.appAccess && runtime.appAccessSetup !== 1) throw new Error("platform: This runtime does not support the installation’s app access setup.");
|
|
6664
|
+
assertPlatformRuntimeLogsSupported(plan.deployment, runtime);
|
|
6649
6665
|
const hasEmailGatewayArtifact = runtime.artifacts.emailGateway !== void 0;
|
|
6650
6666
|
if (existing?.steps.some((step) => step.key === "private-previews-initialized:v1") && runtime.privatePreviews !== 1) throw new Error("platform: This installation has private previews. Use a runtime with private preview support.");
|
|
6651
6667
|
if (runtime.emailProtocolVersion !== 1 && plan.deployment.capabilities.email) throw new Error("platform: This runtime cannot serve enabled platform email without email protocol version 1.");
|
|
@@ -7804,14 +7820,14 @@ function resolvePlatformInstallDatabaseUrl(checkpoint, manifest = null) {
|
|
|
7804
7820
|
}
|
|
7805
7821
|
async function runPlatformLifecycleCommand(commandArgs) {
|
|
7806
7822
|
if (commandArgs.subcommand === "domain") {
|
|
7807
|
-
const { runPlatformDomainCommand } = await import("./platform-domain-
|
|
7823
|
+
const { runPlatformDomainCommand } = await import("./platform-domain-rWJshybd.mjs");
|
|
7808
7824
|
await runPlatformDomainCommand(commandArgs);
|
|
7809
7825
|
return;
|
|
7810
7826
|
}
|
|
7811
7827
|
if (commandArgs.subcommand === "discover") {
|
|
7812
7828
|
const client = new PlatformCloudflareClient((await resolvePlatformCloudflareCredential()).token);
|
|
7813
7829
|
const accountId = await selectAccount(await readAccounts(client), commandArgs.account);
|
|
7814
|
-
const { recoverPlatformInstallations } = await import("./platform-recovery-
|
|
7830
|
+
const { recoverPlatformInstallations } = await import("./platform-recovery-DZuZGJtt.mjs");
|
|
7815
7831
|
const recovered = await recoverPlatformInstallations(client, accountId, void 0, commandArgs.selector);
|
|
7816
7832
|
if (recovered.length === 0) {
|
|
7817
7833
|
log.info(`No recoverable Void platform installations were found in ${accountId}.`);
|
|
@@ -7822,7 +7838,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
7822
7838
|
return;
|
|
7823
7839
|
}
|
|
7824
7840
|
if (commandArgs.subcommand !== "install") {
|
|
7825
|
-
const { runInstalledPlatformCommand } = await import("./platform-management-
|
|
7841
|
+
const { runInstalledPlatformCommand } = await import("./platform-management-BfLW0Zlo.mjs");
|
|
7826
7842
|
await runInstalledPlatformCommand(commandArgs);
|
|
7827
7843
|
return;
|
|
7828
7844
|
}
|
|
@@ -7850,7 +7866,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
7850
7866
|
if (!args.resume && process.stdin.isTTY) {
|
|
7851
7867
|
const installs = resumableInstalls().filter((manifest) => !args.name || manifest.deployment.installationSlug === normalizeInstallationSlug(args.name));
|
|
7852
7868
|
const manifests = listInstallationManifests();
|
|
7853
|
-
const savedPlans = !args.applicationDomain && !args.workersDev && !args.zone && !args.displayName && !args.hyperdrive && !args.controlPlaneDomain && !args.noControlPlaneDomain && !args.authConfig && !args.loginMethods && !args.runtime && args.accessProtection === void 0 && args.appAccess === void 0 && !args.dedicatedZoneSpecified && args.dashboardUrl === void 0 && !args.customDomains ? listSavedPlatformInstallPlans().filter((saved) => (!args.name || saved.args.name === normalizeInstallationSlug(args.name)) && (!args.account || saved.args.account === args.account || saved.accountName.toLowerCase() === args.account.toLowerCase()) && !manifests.some((manifest) => manifest.status !== "uninstalled" && manifest.account.id === saved.args.account && manifest.deployment.installationSlug === saved.args.name)) : [];
|
|
7869
|
+
const savedPlans = !args.applicationDomain && !args.workersDev && !args.zone && !args.displayName && !args.hyperdrive && !args.controlPlaneDomain && !args.noControlPlaneDomain && !args.authConfig && !args.loginMethods && !args.runtime && args.accessProtection === void 0 && args.appAccess === void 0 && !args.dedicatedZoneSpecified && args.dashboardUrl === void 0 && !args.customDomains && args.runtimeLogs === void 0 ? listSavedPlatformInstallPlans().filter((saved) => (!args.name || saved.args.name === normalizeInstallationSlug(args.name)) && (!args.account || saved.args.account === args.account || saved.accountName.toLowerCase() === args.account.toLowerCase()) && !manifests.some((manifest) => manifest.status !== "uninstalled" && manifest.account.id === saved.args.account && manifest.deployment.installationSlug === saved.args.name)) : [];
|
|
7854
7870
|
if (installs.length > 0 || savedPlans.length > 0) {
|
|
7855
7871
|
const choice = await select({
|
|
7856
7872
|
message: "Continue a previous platform install?",
|
|
@@ -7998,7 +8014,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
7998
8014
|
progress?.stop("Read the saved installation.");
|
|
7999
8015
|
progress = void 0;
|
|
8000
8016
|
if (authoritative) {
|
|
8001
|
-
const { selectAuthoritativePlatformManifest } = await import("./platform-management-
|
|
8017
|
+
const { selectAuthoritativePlatformManifest } = await import("./platform-management-BfLW0Zlo.mjs");
|
|
8002
8018
|
const selected = selectAuthoritativePlatformManifest(existing, authoritative);
|
|
8003
8019
|
authoritativeProvisionIntents = true;
|
|
8004
8020
|
if (!args.plan && JSON.stringify(selected) !== JSON.stringify(existing)) writeInstallationManifest(selected);
|
|
@@ -8111,6 +8127,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8111
8127
|
...process.env.VOID_EMAIL_SHARED_ZONE_ID ? { emailSharedZoneId: process.env.VOID_EMAIL_SHARED_ZONE_ID } : {},
|
|
8112
8128
|
...process.env.VOID_EMAIL_SENDER_DOMAIN ? { emailSenderDomain: process.env.VOID_EMAIL_SENDER_DOMAIN } : {},
|
|
8113
8129
|
installationSlug,
|
|
8130
|
+
...args.runtimeLogs !== void 0 ? { runtimeLogs: args.runtimeLogs } : {},
|
|
8114
8131
|
zoneName,
|
|
8115
8132
|
...workersDev ? { workersDev: true } : {}
|
|
8116
8133
|
};
|
|
@@ -8122,6 +8139,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8122
8139
|
deploymentExecution: runtime.manifest.deploymentExecution === 1
|
|
8123
8140
|
};
|
|
8124
8141
|
let plan = await createPlatformInstallPlan(client, planInput, existing, planOptions);
|
|
8142
|
+
assertPlatformRuntimeLogsSupported(plan.deployment, runtime.manifest);
|
|
8125
8143
|
const commandOptions = {
|
|
8126
8144
|
commandName: cliCommandName(),
|
|
8127
8145
|
accountId,
|
|
@@ -8139,6 +8157,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8139
8157
|
authentication: authenticationSelection.authentication,
|
|
8140
8158
|
hyperdrive: !existing || isPlatformSetupDraft(existing) || externalHyperdrive && !recordedHyperdrive ? externalHyperdrive?.id ?? "create" : void 0,
|
|
8141
8159
|
runtime: args.runtime,
|
|
8160
|
+
...!existing && plan.deployment.runtimeLogs ? { runtimeLogs: "minimal" } : {},
|
|
8142
8161
|
...existing ? { resumeId: existing.id } : {},
|
|
8143
8162
|
yes: args.yes || process.stdin.isTTY !== true
|
|
8144
8163
|
};
|
|
@@ -8233,7 +8252,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8233
8252
|
Object.assign(values, updates);
|
|
8234
8253
|
if (credentialSetup) writePendingInstallationSecrets(setupManifest, values);
|
|
8235
8254
|
};
|
|
8236
|
-
const configured = (key, environment) => credentialSetup ? process.env[environment] || values[key] || "" : values[key] || process.env[environment] || "";
|
|
8255
|
+
const configured = (key, environment) => credentialSetup || key === "cloudflareApiToken" ? process.env[environment] || values[key] || "" : values[key] || process.env[environment] || "";
|
|
8237
8256
|
const collect = async (key, environment, message, masked = true, persist = true, validate) => {
|
|
8238
8257
|
let value = configured(key, environment);
|
|
8239
8258
|
if (!value) {
|
|
@@ -8248,7 +8267,8 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8248
8267
|
};
|
|
8249
8268
|
const pages = platformSetupPages(plan);
|
|
8250
8269
|
if (!configured("cloudflareApiToken", "VOID_PLATFORM_RUNTIME_CLOUDFLARE_API_TOKEN")) openPlatformSetupPage(pages.runtime);
|
|
8251
|
-
const
|
|
8270
|
+
const savedRuntimeToken = checkpoint?.cloudflareApiToken ?? "";
|
|
8271
|
+
const usingSavedRuntimeToken = !process.env.VOID_PLATFORM_RUNTIME_CLOUDFLARE_API_TOKEN && Boolean(values.cloudflareApiToken);
|
|
8252
8272
|
let runtimeCloudflareApiToken = await collect("cloudflareApiToken", "VOID_PLATFORM_RUNTIME_CLOUDFLARE_API_TOKEN", "Paste runtime API token:", true, false);
|
|
8253
8273
|
let rejectedSavedRuntimeToken = false;
|
|
8254
8274
|
const verifyRuntimeToken = async (token) => {
|
|
@@ -8267,9 +8287,9 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8267
8287
|
plan = await verifyPlatformAiGatewayPlan(client, planInput, existing, plan, authoritativeProvisionIntents);
|
|
8268
8288
|
}
|
|
8269
8289
|
} catch (error) {
|
|
8270
|
-
if (
|
|
8290
|
+
if (token === values.cloudflareApiToken && !(error instanceof PlatformRuntimeTokenEmailPermissionError) && isPlatformTokenAuthorizationError(error, checkingRuntimePermissions ? void 0 : "/ai-gateway/")) {
|
|
8271
8291
|
delete values.cloudflareApiToken;
|
|
8272
|
-
writePendingInstallationSecrets(setupManifest, values);
|
|
8292
|
+
if (credentialSetup) writePendingInstallationSecrets(setupManifest, values);
|
|
8273
8293
|
rejectedSavedRuntimeToken = true;
|
|
8274
8294
|
}
|
|
8275
8295
|
throw error;
|
|
@@ -8333,22 +8353,26 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8333
8353
|
const hasFullProjectSecretKeyring = Boolean(checkpoint?.projectSecretKeysJson || checkpoint?.projectSecretActiveKeyVersion || process.env.VOID_PLATFORM_PROJECT_SECRET_KEYS_JSON || process.env.VOID_PLATFORM_PROJECT_SECRET_ACTIVE_KEY_VERSION);
|
|
8334
8354
|
const generateIdentityKeys = credentialSetup && !!process.stdin.isTTY;
|
|
8335
8355
|
const generatedKeys = generateIdentityKeys ? [configured("jwtSecret", "VOID_PLATFORM_JWT_SECRET") ? "" : "JWT signing key", configured("projectSecretKey", "VOID_PLATFORM_PROJECT_SECRET_KEY") || hasFullProjectSecretKeyring ? "" : "project encryption key"].filter(Boolean) : [];
|
|
8356
|
+
const replacingRuntimeToken = !credentialSetup && !!savedRuntimeToken && runtimeCloudflareApiToken !== savedRuntimeToken;
|
|
8357
|
+
const updateExistingWorkers = replacingRuntimeToken || !credentialSetup && Boolean(checkpoint?.workerSecretUpdatesJson);
|
|
8358
|
+
const checkpointValue = (value) => updateExistingWorkers ? "" : value;
|
|
8336
8359
|
const secrets = createPlatformInstallationSecrets({
|
|
8337
8360
|
configurableAuthentication: !!authenticationSelection.authentication.configurable,
|
|
8338
8361
|
...authenticationSecrets,
|
|
8339
8362
|
bootstrapGitHubId,
|
|
8340
8363
|
bootstrapGitHubLogin,
|
|
8341
|
-
cloudflareApiToken: runtimeCloudflareApiToken,
|
|
8364
|
+
cloudflareApiToken: replacingRuntimeToken ? runtimeCloudflareApiToken : checkpointValue(runtimeCloudflareApiToken),
|
|
8342
8365
|
checkpoint: values,
|
|
8343
8366
|
databaseUrl: installationDatabaseUrl,
|
|
8344
8367
|
emailEnabled: plan.deployment.capabilities.email,
|
|
8345
|
-
emailSigningSecret: process.env.VOID_PLATFORM_EMAIL_SIGNING_SECRET || "",
|
|
8368
|
+
emailSigningSecret: updateExistingWorkers && values.emailSigningSecret ? "" : process.env.VOID_PLATFORM_EMAIL_SIGNING_SECRET || "",
|
|
8346
8369
|
existingEmailEnabled: existing.deployment.capabilities.email,
|
|
8347
|
-
githubClientId,
|
|
8348
|
-
githubClientSecret,
|
|
8349
|
-
r2AccessKeyId,
|
|
8350
|
-
r2SecretAccessKey,
|
|
8370
|
+
githubClientId: checkpointValue(githubClientId),
|
|
8371
|
+
githubClientSecret: checkpointValue(githubClientSecret),
|
|
8372
|
+
r2AccessKeyId: checkpointValue(r2AccessKeyId),
|
|
8373
|
+
r2SecretAccessKey: checkpointValue(r2SecretAccessKey),
|
|
8351
8374
|
existingInstallation: !credentialSetup,
|
|
8375
|
+
updateExistingWorkers,
|
|
8352
8376
|
generateIdentityKeys,
|
|
8353
8377
|
jwtSecret: generateIdentityKeys ? configured("jwtSecret", "VOID_PLATFORM_JWT_SECRET") : await collect("jwtSecret", "VOID_PLATFORM_JWT_SECRET", "JWT signing key:", true, true, credentialSetup ? (value) => Buffer.byteLength(value, "utf8") >= 32 ? void 0 : "The JWT signing secret must contain at least 32 random bytes." : void 0),
|
|
8354
8378
|
projectSecretKey: configured("projectSecretKey", "VOID_PLATFORM_PROJECT_SECRET_KEY") || (hasFullProjectSecretKeyring || generateIdentityKeys ? "" : await collect("projectSecretKey", "VOID_PLATFORM_PROJECT_SECRET_KEY", "Project encryption key:", true, true, credentialSetup ? (value) => {
|
|
@@ -8438,7 +8462,7 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8438
8462
|
})).actions.filter((action) => action.kind === "worker"),
|
|
8439
8463
|
revalidateBeforeWorkerDeploy: (manifest, action) => revalidatePlatformInstallAction(client, plan, manifest, action),
|
|
8440
8464
|
verifyExistingOwnership: async (manifest, databaseCheckpointExists) => {
|
|
8441
|
-
const { verifyPlatformInstallationOwnership } = await import("./platform-management-
|
|
8465
|
+
const { verifyPlatformInstallationOwnership } = await import("./platform-management-BfLW0Zlo.mjs");
|
|
8442
8466
|
const retainedReplacementKeys = new Set(plan.actions.filter((action) => {
|
|
8443
8467
|
const previous = manifest.resources.find((resource) => resource.key === action.key);
|
|
8444
8468
|
return action.action === "create" && previous && previous.name !== action.name;
|
|
@@ -8450,7 +8474,18 @@ async function runPlatformLifecycleCommand(commandArgs) {
|
|
|
8450
8474
|
});
|
|
8451
8475
|
}
|
|
8452
8476
|
});
|
|
8477
|
+
const runtimeLogsWarning = !result.waitingForDns && !result.waitingForSandboxDrain && shouldUpdateProjectWorkerRuntimeLogs({
|
|
8478
|
+
previous: setupManifest.deployment,
|
|
8479
|
+
next: result.manifest.deployment,
|
|
8480
|
+
explicit: args.runtimeLogs !== void 0
|
|
8481
|
+
}) ? await updateProjectWorkerRuntimeLogs(client, {
|
|
8482
|
+
accountId,
|
|
8483
|
+
namespace: result.manifest.deployment.resources.dispatchNamespace,
|
|
8484
|
+
minimal: !!result.manifest.deployment.runtimeLogs,
|
|
8485
|
+
installationId: result.manifest.id
|
|
8486
|
+
}) : void 0;
|
|
8453
8487
|
progress?.stop(result.waitingForDns || result.waitingForSandboxDrain ? "Installation paused. Progress is saved." : "Platform installed.");
|
|
8488
|
+
if (runtimeLogsWarning) log.warn(runtimeLogsWarning);
|
|
8454
8489
|
progress = void 0;
|
|
8455
8490
|
if (result.waitingForDns) {
|
|
8456
8491
|
note(result.zoneNameServers.length > 0 ? `Update the domain at your registrar to use:\n${result.zoneNameServers.join("\n")}\n\nThen rerun: void platform install --resume --name ${result.manifest.id}` : `Wait for ${zoneName} to become active, then rerun:\nvoid platform install --resume --name ${result.manifest.id}`, import_picocolors.default.bold("Waiting for nameservers"));
|
|
@@ -2,7 +2,8 @@ import { S as writePendingInstallationSecrets, _ as removePlatformConnectionForI
|
|
|
2
2
|
import { t as ensurePlatformAccessToken } from "./cf-access-BmBT2h8_.mjs";
|
|
3
3
|
import { A as confirm, H as outro, K as select, L as log, tt as isCancel } from "./dist-D23AAMxT.mjs";
|
|
4
4
|
import { f as import_picocolors, l as formatUrl, m as printSuccess, p as note, r as createSpinner } from "./output-BCdLioKP.mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { i as updateProjectWorkerRuntimeLogs, n as assertPlatformRuntimeLogsSupported, r as shouldUpdateProjectWorkerRuntimeLogs } from "./platform-runtime-logs-CdJGnk3f.mjs";
|
|
6
|
+
import { $ as hyperdriveOriginMatches, A as dnsRecordConfigHash, B as turnOffInstalledProjectZeroTrust, C as createPlatformHealthProbeToken, D as platformTrafficAttachmentWorker, F as platformAdoptionIntentHash, H as resolvePlatformCloudflareCredential, I as r2BucketConfigHash, J as PlatformCloudflareApiError, L as resourceMarkerProblem, M as hasProvisionIntentStep, N as legacyResourceConfigHash, P as matchesRecordedR2Fingerprint, Q as hyperdriveOriginFromConnectionString, R as revalidatePlatformInstallAction, S as loadPlatformRuntime, T as resolveBootstrapGitHubId, U as verifyPlatformCloudflareCredential, V as assertPlatformOperatorCredentialCanApplyPlan, W as activatePlatformAccessCredentials, X as PlatformRuntimeTokenEmailPermissionError, Y as PlatformCloudflareClient, Z as hyperdriveOriginConfigHash, _ as readPlatformProjectSlugs, a as findPlatformWorkerOutsideChanges, b as formatZeroTrustApplications, c as uploadPlatformWorkerOutsideChanges, d as replacePendingInstallationAuthentication, et as verifyPlatformRuntimeTokenEmailPermissions, f as REMOTE_INSTALLATION_MANIFEST_KEY, j as formatPlatformInstallPlan, k as createPlatformInstallPlan, l as authenticationSetupRequestHash, m as acquirePlatformDatabaseLifecycleLock, n as resolvePlatformInstallDatabaseUrl, o as formatPlatformWorkerOutsideChanges, p as installPlatform, s as reviewPlatformWorkerOutsideChanges, t as assertNoninteractivePlatformMutationAcknowledged, tt as verifyPlatformRuntimeTokenPermissions, u as readLoginReplacementFile, v as readPlatformProjectZeroTrustState, w as createPlatformInstallationSecrets, x as readPlatformDatabase, y as assertProjectZeroTrustAllowsUninstall, z as platformDatabaseNameFromOwnerUrl } from "./platform-lifecycle-D9RdGub1.mjs";
|
|
6
7
|
import { PLATFORM_DISABLED_KEY, PLATFORM_DISABLED_VALUE, PLATFORM_R2_OWNERSHIP_MARKER_KEY, parsePlatformInstallationManifest, recordInstallationResource, recordInstallationStep, setInstallationDesiredState, transitionInstallation } from "@void/platform";
|
|
7
8
|
import { setTimeout } from "node:timers/promises";
|
|
8
9
|
// src/cli/platform-teardown.ts
|
|
@@ -624,6 +625,7 @@ function platformLifecycleResumeCommand(args, installationId) {
|
|
|
624
625
|
if (args.subcommand === "rollback" && args.fromRuntime) command.push("--from-runtime", commandArgument(args.fromRuntime));
|
|
625
626
|
if ("dashboardUrl" in args && args.dashboardUrl) command.push("--dashboard-url", commandArgument(args.dashboardUrl));
|
|
626
627
|
if ("customDomains" in args && args.customDomains) command.push("--custom-domains");
|
|
628
|
+
if ("runtimeLogs" in args && args.runtimeLogs) command.push("--runtime-logs", args.runtimeLogs);
|
|
627
629
|
if (args.yes) command.push("--yes");
|
|
628
630
|
return command.join(" ");
|
|
629
631
|
}
|
|
@@ -715,6 +717,7 @@ async function runInstalledPlatformCommand(args) {
|
|
|
715
717
|
controlPlaneDomain: deployment.controlPlane.apiHostname ?? "",
|
|
716
718
|
...args.subcommand !== "rollback" && args.dashboardUrl !== void 0 ? { dashboardUrl: args.dashboardUrl } : {},
|
|
717
719
|
...args.subcommand !== "rollback" && args.customDomains ? { customDomains: true } : {},
|
|
720
|
+
...args.subcommand === "upgrade" && args.runtimeLogs !== void 0 ? { runtimeLogs: args.runtimeLogs } : {},
|
|
718
721
|
dedicatedZone: deployment.application.dedicatedZone,
|
|
719
722
|
displayName: deployment.displayName,
|
|
720
723
|
installationSlug: deployment.installationSlug,
|
|
@@ -726,10 +729,12 @@ async function runInstalledPlatformCommand(args) {
|
|
|
726
729
|
allowUnverifiedAiGateway: args.plan,
|
|
727
730
|
includeEmailGateway: runtime.manifest.artifacts.emailGateway !== void 0,
|
|
728
731
|
enableSandbox: runtime.manifest.safetyProtocols.sandboxDrain >= 3,
|
|
729
|
-
deploymentExecution: runtime.manifest.deploymentExecution === 1
|
|
732
|
+
deploymentExecution: runtime.manifest.deploymentExecution === 1,
|
|
733
|
+
allowRuntimeLogsChange: args.subcommand === "upgrade"
|
|
730
734
|
});
|
|
735
|
+
assertPlatformRuntimeLogsSupported(plan.deployment, runtime.manifest);
|
|
731
736
|
markPhase("plan");
|
|
732
|
-
note(formatPlatformInstallPlan(plan), args.subcommand === "upgrade" ? "Upgrade plan" : args.subcommand === "rollback" ? "Rollback plan" : args.subcommand === "enable" ? "Enable plan" : "Repair plan");
|
|
737
|
+
note(formatPlatformInstallPlan(plan, manifest.deployment), args.subcommand === "upgrade" ? "Upgrade plan" : args.subcommand === "rollback" ? "Rollback plan" : args.subcommand === "enable" ? "Enable plan" : "Repair plan");
|
|
733
738
|
note([
|
|
734
739
|
`Version: ${manifest.platformVersion} → ${runtime.manifest.platformVersion}`,
|
|
735
740
|
`Source: ${runtime.source}`,
|
|
@@ -872,6 +877,7 @@ async function runInstalledPlatformCommand(args) {
|
|
|
872
877
|
runtime,
|
|
873
878
|
operation: args.subcommand,
|
|
874
879
|
replanWorkers: async (recoveryManifest) => (await createPlatformInstallPlan(client, planInput, recoveryManifest, {
|
|
880
|
+
allowRuntimeLogsChange: args.subcommand === "upgrade",
|
|
875
881
|
authoritativeProvisionIntents: true,
|
|
876
882
|
repairMissing: true,
|
|
877
883
|
includeEmailGateway: runtime.manifest.artifacts.emailGateway !== void 0,
|
|
@@ -887,6 +893,16 @@ async function runInstalledPlatformCommand(args) {
|
|
|
887
893
|
});
|
|
888
894
|
progress.message("Finalizing platform changes");
|
|
889
895
|
markPhase("installer complete");
|
|
896
|
+
const runtimeLogsWarning = !result.waitingForDns && !result.waitingForSandboxDrain && shouldUpdateProjectWorkerRuntimeLogs({
|
|
897
|
+
previous: manifest.deployment,
|
|
898
|
+
next: result.manifest.deployment,
|
|
899
|
+
explicit: args.subcommand === "upgrade" && args.runtimeLogs !== void 0
|
|
900
|
+
}) ? await updateProjectWorkerRuntimeLogs(client, {
|
|
901
|
+
accountId: manifest.account.id,
|
|
902
|
+
namespace: result.manifest.deployment.resources.dispatchNamespace,
|
|
903
|
+
minimal: !!result.manifest.deployment.runtimeLogs,
|
|
904
|
+
installationId: manifest.id
|
|
905
|
+
}) : void 0;
|
|
890
906
|
reportResult = () => {
|
|
891
907
|
progress?.stop(result.waitingForDns || result.waitingForSandboxDrain ? "Platform operation paused; progress is saved." : `Platform ${args.subcommand} complete.`);
|
|
892
908
|
progress = void 0;
|
|
@@ -916,6 +932,7 @@ async function runInstalledPlatformCommand(args) {
|
|
|
916
932
|
log.info(`If sign-in fails, run \`void platform repair ${commandArgument(manifest.id)}\` to change the login settings.`);
|
|
917
933
|
}
|
|
918
934
|
}
|
|
935
|
+
if (runtimeLogsWarning) log.warn(runtimeLogsWarning);
|
|
919
936
|
printSuccess(`${deployment.displayName}: runtime ${runtime.manifest.platformVersion} ${args.subcommand === "rollback" ? "restored" : "ready"}.`);
|
|
920
937
|
};
|
|
921
938
|
};
|
|
@@ -964,6 +981,7 @@ async function runInstalledPlatformCommand(args) {
|
|
|
964
981
|
}
|
|
965
982
|
function assertPlatformRollbackCompatibility(installation, target, source) {
|
|
966
983
|
if (target.manifest.emailProtocolVersion !== 1 && (installation.deployment.capabilities.email || installation.resources.some((resource) => resource.key === "email-gateway-worker" && resource.state === "ready"))) throw new Error("platform: The rollback target predates the email gateway and cannot safely replace this installation. Use a runtime with email protocol version 1.");
|
|
984
|
+
if (installation.deployment.runtimeLogs && target.manifest.runtimeLogs !== 1) throw new Error("platform: The rollback target cannot keep runtime logs minimal. Run `void platform upgrade --runtime-logs full` first, then roll back.");
|
|
967
985
|
if (!installation.runtime) throw new Error("platform: The installed runtime has no artifact provenance, so post-success rollback cannot identify its compatibility manifest.");
|
|
968
986
|
if (source.manifest.platformVersion !== installation.platformVersion || source.manifestSha256 !== installation.runtime.manifestSha256) throw new Error("platform: --from-runtime does not exactly match the installed runtime artifact digest. Supply the runtime used by the current successful deployment.");
|
|
969
987
|
if (target.manifestSha256 === source.manifestSha256) throw new Error("platform: The rollback target is already the installed runtime artifact.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { c as runInstalledPlatformCommand, l as selectAuthoritativePlatformManifest, d as verifyPlatformInstallationOwnership } from "./platform-management-
|
|
1
|
+
export { c as runInstalledPlatformCommand, l as selectAuthoritativePlatformManifest, d as verifyPlatformInstallationOwnership } from "./platform-management-BRefdHGD.mjs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { o as listInstallationManifests, t as acquirePlatformLifecycleLock, x as writeInstallationManifest, y as savePlatformConnection } from "./platform-registry-DZ_2Xuqd.mjs";
|
|
2
2
|
import { t as cfAccessHeaders } from "./cf-access-pejlJmuy.mjs";
|
|
3
|
-
import { f as REMOTE_INSTALLATION_MANIFEST_KEY, k as createPlatformInstallPlan } from "./platform-lifecycle-
|
|
4
|
-
import { a as recoverDurablyMarkedProvisionIntents, d as verifyPlatformInstallationOwnership, r as isPlatformManifestMonotonicExtension } from "./platform-management-
|
|
3
|
+
import { f as REMOTE_INSTALLATION_MANIFEST_KEY, k as createPlatformInstallPlan } from "./platform-lifecycle-D9RdGub1.mjs";
|
|
4
|
+
import { a as recoverDurablyMarkedProvisionIntents, d as verifyPlatformInstallationOwnership, r as isPlatformManifestMonotonicExtension } from "./platform-management-BRefdHGD.mjs";
|
|
5
5
|
import { parsePlatformInstallationManifest, setInstallationEndpoints } from "@void/platform";
|
|
6
6
|
// src/cli/platform-recovery.ts
|
|
7
7
|
async function recoverPlatformInstallations(client, accountId, verifyEndpoint = verifyInstallationEndpoint, selector = "") {
|