void 0.21.1 → 0.21.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/{auth-cmd-g_ymMkUe.mjs → account-cmd-D8OC-U7y.mjs} +8 -8
- package/dist/{auth-link-DFvxIyZi.mjs → auth-link-BYFeMJAp.mjs} +3 -3
- package/dist/auth-router-OHZNmrb_.mjs +74 -0
- package/dist/{build-cmd-wJAv808h.mjs → build-cmd-Bft7EY51.mjs} +1 -1
- package/dist/{cache-Be0Fu5Ka.mjs → cache-CKV1Gz2w.mjs} +1 -1
- package/dist/{cancel-deploy-BgmyOwhe.mjs → cancel-deploy-BAKmkX4f.mjs} +1 -1
- package/dist/cli/cli.mjs +104 -52
- package/dist/{connect-LnvW4HKx.mjs → connect-DLx1pRYk.mjs} +3 -3
- package/dist/{db-Mzv88E1C.mjs → db-B98_UV4H.mjs} +6 -6
- package/dist/{delete-Ri6JemSU.mjs → delete-BEEyqlwd.mjs} +1 -1
- package/dist/{deploy-DEsMVrCY.mjs → deploy-Bsymb0_c.mjs} +3 -3
- package/dist/{deploy-DAH2-m_-.mjs → deploy-CsjbRNyv.mjs} +1 -1
- package/dist/{domain-BA37Ye7T.mjs → domain-Av2AkLQP.mjs} +1 -1
- package/dist/{email-C5NsxrQG.mjs → email-CUqa6TtH.mjs} +2 -2
- package/dist/{env-U_ohASB0.mjs → env-D4RIGEzz.mjs} +1 -1
- package/dist/{github-cmd-DsrkweIl.mjs → github-cmd-BEK4VprE.mjs} +3 -3
- package/dist/{help-sBhFH6pi.mjs → help-iQOt7WHk.mjs} +39 -8
- package/dist/help-r_vrpH_d.mjs +2 -0
- package/dist/index.mjs +3 -3
- package/dist/{init-C--Yyj1b.mjs → init-D5niUPAz.mjs} +2 -2
- package/dist/{link-BC-mNG9-.mjs → link-3lGrfXzd.mjs} +1 -1
- package/dist/{list-DHU1Wj6c.mjs → list-CVjGr_C6.mjs} +1 -1
- package/dist/{login-jKe_0QZL.mjs → login-BgQJzxAl.mjs} +2 -2
- package/dist/login-Bz0zEPoy.mjs +2 -0
- package/dist/{logs-BG11f5PR.mjs → logs-DbzD-QDf.mjs} +1 -1
- package/dist/{operator-cmd-BwAS2XZt.mjs → operator-cmd-CR6Lxzt0.mjs} +3 -3
- package/dist/{platform-auth-config-C-hv-_Ok.mjs → platform-auth-config-De7BqRJm.mjs} +2 -2
- package/dist/{platform-auth-protection-DjTE5Hj-.mjs → platform-auth-protection-Dcat-6zu.mjs} +2 -2
- package/dist/{platform-auth-recovery-Cr0r8TEb.mjs → platform-auth-recovery-C9gsM640.mjs} +2 -2
- package/dist/{platform-cmd-DE6dw45v.mjs → platform-cmd-Cl9Uhzru.mjs} +1 -1
- package/dist/{platform-cmd-0tEh2ZtA.mjs → platform-cmd-CudokNIg.mjs} +3 -3
- package/dist/{platform-domain-B_7x6Iqx.mjs → platform-domain-Ckpd2kXw.mjs} +2 -2
- package/dist/{platform-lifecycle-Di0LbhPM.mjs → platform-lifecycle-DVzM2T4j.mjs} +7 -7
- package/dist/{platform-lifecycle-Dhx9Pnub.mjs → platform-lifecycle-DlpiGcjr.mjs} +1 -1
- package/dist/{platform-management-B9LUtMt9.mjs → platform-management-44Bxd3YC.mjs} +1 -1
- package/dist/{platform-management-eaiaU3uM.mjs → platform-management-ibuS1as0.mjs} +1 -1
- package/dist/{platform-recovery-BxfA8E5C.mjs → platform-recovery-D_KmvdSk.mjs} +2 -2
- package/dist/{project-cmd-DrnRJdep.mjs → project-cmd-BuF9doku.mjs} +12 -12
- package/dist/{project-team-CzRbO_kA.mjs → project-team-B1Tia8vd.mjs} +2 -2
- package/dist/{requests-DwrqUQZ8.mjs → requests-CphRF98D.mjs} +1 -1
- package/dist/{rollback-B4tFWmkN.mjs → rollback-BYHJV2yD.mjs} +1 -1
- package/dist/{secret-UtrRjhEO.mjs → secret-Rt9c4Ttw.mjs} +1 -1
- package/package.json +7 -7
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
- package/skills/void/SKILL.md +4 -2
- package/skills/void/docs/guide/platform/administration/access.md +1 -1
- package/skills/void/docs/guide/project-collaboration.md +1 -1
- package/skills/void/docs/reference/cli.md +25 -10
- package/skills/void/docs/reference/config.md +1 -1
- package/dist/help-B403BLBB.mjs +0 -2
- package/dist/login-BwiopVdg.mjs +0 -2
|
@@ -772,8 +772,35 @@ const HELP_TREE = {
|
|
|
772
772
|
]
|
|
773
773
|
},
|
|
774
774
|
auth: {
|
|
775
|
-
summary: "
|
|
776
|
-
usage: ["void auth <
|
|
775
|
+
summary: "Authenticate with this project’s saved Cloudflare or Void destination. Without one, choose interactively or pass --platform.",
|
|
776
|
+
usage: ["void auth <login|status|logout> [--platform cloudflare|void]"],
|
|
777
|
+
commands: [
|
|
778
|
+
{
|
|
779
|
+
command: "login",
|
|
780
|
+
description: "Sign in to the selected destination"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
command: "status",
|
|
784
|
+
description: "Show the selected destination’s identity"
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
command: "logout",
|
|
788
|
+
description: "Sign out of the selected destination"
|
|
789
|
+
}
|
|
790
|
+
],
|
|
791
|
+
options: [{
|
|
792
|
+
command: "--platform <cloudflare|void>",
|
|
793
|
+
description: "Choose the destination explicitly"
|
|
794
|
+
}],
|
|
795
|
+
children: {
|
|
796
|
+
login: basicSubcommand("Sign in to the selected destination.", "void auth login [--platform cloudflare|void]"),
|
|
797
|
+
status: basicSubcommand("Show the selected destination’s identity.", "void auth status [--platform cloudflare|void]"),
|
|
798
|
+
logout: basicSubcommand("Sign out of the selected destination.", "void auth logout [--platform cloudflare|void]")
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
account: {
|
|
802
|
+
summary: "Manage your Void platform account.",
|
|
803
|
+
usage: ["void account <command>"],
|
|
777
804
|
commands: [
|
|
778
805
|
{
|
|
779
806
|
command: "login",
|
|
@@ -797,11 +824,11 @@ const HELP_TREE = {
|
|
|
797
824
|
}
|
|
798
825
|
],
|
|
799
826
|
children: {
|
|
800
|
-
login: basicSubcommand("Log in with an enabled platform login method.", "void
|
|
801
|
-
link: basicSubcommand("Sign in again, then verify and link another login method to your existing account.", "void
|
|
802
|
-
logout: basicSubcommand("Log out and remove credentials.", "void
|
|
803
|
-
whoami: basicSubcommand("Show the logged-in username.", "void
|
|
804
|
-
token: basicSubcommand("Copy auth token to clipboard.", "void
|
|
827
|
+
login: basicSubcommand("Log in with an enabled platform login method.", "void account login"),
|
|
828
|
+
link: basicSubcommand("Sign in again, then verify and link another login method to your existing account.", "void account link [connection-id]"),
|
|
829
|
+
logout: basicSubcommand("Log out and remove credentials.", "void account logout"),
|
|
830
|
+
whoami: basicSubcommand("Show the logged-in username.", "void account whoami"),
|
|
831
|
+
token: basicSubcommand("Copy auth token to clipboard.", "void account token")
|
|
805
832
|
}
|
|
806
833
|
},
|
|
807
834
|
cloudflare: {
|
|
@@ -2086,6 +2113,10 @@ function printGlobalHelp() {
|
|
|
2086
2113
|
"",
|
|
2087
2114
|
...globalCommandGroup("auth"),
|
|
2088
2115
|
"",
|
|
2116
|
+
...globalCommandGroup("account"),
|
|
2117
|
+
"",
|
|
2118
|
+
...globalCommandGroup("cloudflare"),
|
|
2119
|
+
"",
|
|
2089
2120
|
...globalCommandGroup("platform"),
|
|
2090
2121
|
"",
|
|
2091
2122
|
...globalCommandGroup("project"),
|
|
@@ -2124,7 +2155,7 @@ function printGlobalHelp() {
|
|
|
2124
2155
|
helpLine("void help <command>", "Show command-specific help"),
|
|
2125
2156
|
helpLine("void <command> --help", "Show command-specific help")
|
|
2126
2157
|
].join("\n"), sectionTitle("Commands"));
|
|
2127
|
-
note([helpLine("VOID_TOKEN", "Auth token (or use `void
|
|
2158
|
+
note([helpLine("VOID_TOKEN", "Auth token (or use `void account login`)"), helpLine("VOID_PROJECT", "Deploy target project name override")].join("\n"), sectionTitle("Environment"));
|
|
2128
2159
|
outro("https://void.cloud");
|
|
2129
2160
|
}
|
|
2130
2161
|
function printVoidHeader() {
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __toESM } from "./rolldown-runtime-DXIUcv95.mjs";
|
|
2
2
|
import { a as join, l as relative, n as dirname, u as resolve } from "./dist-4WkAWhWx.mjs";
|
|
3
3
|
import { d as require_picocolors } from "./output-CCH48AMM.mjs";
|
|
4
|
-
import { B as resolveDistDir, Ct as resolveAssetRoutingPolicy, W as resolveWorkerDirName, at as generateQueueResolverSource, bt as hasApiRoutes, dt as hasRevalidate, ft as scanDurableObjectModules, lt as collectPages, ot as prerenderPages, pt as SEND_EMAIL_BINDING, st as prerenderPagesNode, ut as collectRevalidate, xt as hasDocumentRoutes } from "./deploy-
|
|
4
|
+
import { B as resolveDistDir, Ct as resolveAssetRoutingPolicy, W as resolveWorkerDirName, at as generateQueueResolverSource, bt as hasApiRoutes, dt as hasRevalidate, ft as scanDurableObjectModules, lt as collectPages, ot as prerenderPages, pt as SEND_EMAIL_BINDING, st as prerenderPagesNode, ut as collectRevalidate, xt as hasDocumentRoutes } from "./deploy-Bsymb0_c.mjs";
|
|
5
5
|
import { i as resolveProjectPaths, n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-CKQ-Q5JS.mjs";
|
|
6
6
|
import { n as loadVoidAuthConfig, t as findVoidAuthConfig } from "./config-uP7ZDtVZ.mjs";
|
|
7
7
|
import { r as scopedAccessCredentials } from "./cf-access-DRsQRe6k.mjs";
|
|
@@ -6196,7 +6196,7 @@ function voidPlugin(options) {
|
|
|
6196
6196
|
});
|
|
6197
6197
|
} else if (credentials.status === "no-token") afterReady(() => {
|
|
6198
6198
|
console.log();
|
|
6199
|
-
voidWarn("Remote mode requires authentication. Run `void
|
|
6199
|
+
voidWarn("Remote mode requires authentication. Run `void account login`, then restart.");
|
|
6200
6200
|
voidWarn("Falling back to local bindings.");
|
|
6201
6201
|
});
|
|
6202
6202
|
else afterReady(() => {
|
|
@@ -6209,7 +6209,7 @@ function voidPlugin(options) {
|
|
|
6209
6209
|
const credentials = readVoidDevCredentials(root);
|
|
6210
6210
|
if (credentials.status === "no-token") afterReady(() => {
|
|
6211
6211
|
console.log();
|
|
6212
|
-
voidWarn("AI requires authentication. Run `void
|
|
6212
|
+
voidWarn("AI requires authentication. Run `void account login`, then restart the dev server.");
|
|
6213
6213
|
});
|
|
6214
6214
|
else if (credentials.status === "no-project") {
|
|
6215
6215
|
if (process.stdin.isTTY) afterReady(() => {
|
|
@@ -17,8 +17,8 @@ import { r as formatProjectCommand } from "./preset-Dowh9tTt.mjs";
|
|
|
17
17
|
import { n as writeVoidProjectConfig, t as canRewriteVoidProjectConfig } from "./config-write-y3CBI_ux.mjs";
|
|
18
18
|
import { i as migrateFrameworkAdapterPaths, t as migrateLegacyVoidConfig } from "./migrate-BV8qHiCb.mjs";
|
|
19
19
|
import { i as promptProjectSelection, r as promptAndCreateProject } from "./create-project-BZBl_gQ0.mjs";
|
|
20
|
-
import { t as promptForLoginToken } from "./login-
|
|
21
|
-
import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-
|
|
20
|
+
import { t as promptForLoginToken } from "./login-BgQJzxAl.mjs";
|
|
21
|
+
import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-CudokNIg.mjs";
|
|
22
22
|
import { t as connectCloudflare } from "./cloudflare-connect-DloREDlc.mjs";
|
|
23
23
|
import { n as findInstalledYarnPnpRuntime, r as hasLocalLockfile, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-CVEc3gE7.mjs";
|
|
24
24
|
import { createRequire } from "node:module";
|
|
@@ -22,7 +22,7 @@ async function runLink(root, slug) {
|
|
|
22
22
|
}
|
|
23
23
|
const token = getToken(root);
|
|
24
24
|
if (!token) {
|
|
25
|
-
cancel("No auth token found. Run `void
|
|
25
|
+
cancel("No auth token found. Run `void account login` first.");
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
28
|
const client = new PlatformClient(token, { root });
|
|
@@ -13,7 +13,7 @@ async function runListCommand(root, slug) {
|
|
|
13
13
|
if (platform === "none") throw new Error("project: Deployment is disabled. Run `void init` to choose a platform.");
|
|
14
14
|
const token = getToken(root);
|
|
15
15
|
if (!token) {
|
|
16
|
-
log.error("Not logged in. Run `void
|
|
16
|
+
log.error("Not logged in. Run `void account login` first.");
|
|
17
17
|
process.exit(1);
|
|
18
18
|
}
|
|
19
19
|
let projectId;
|
|
@@ -29,7 +29,7 @@ async function selectPlatformLoginMethod(platform, requestedId) {
|
|
|
29
29
|
return methods.find((method) => method.id === provider);
|
|
30
30
|
}
|
|
31
31
|
async function promptForLoginToken(root = process.cwd(), platform) {
|
|
32
|
-
const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await import("./platform-cmd-
|
|
32
|
+
const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await import("./platform-cmd-Cl9Uhzru.mjs").then(({ discoverPlatform }) => discoverPlatform(getApiUrl(root))));
|
|
33
33
|
const s = createSpinner();
|
|
34
34
|
s.start(`Opening browser for ${providerName} login...`);
|
|
35
35
|
try {
|
|
@@ -62,7 +62,7 @@ async function runLoginCommand(root = process.cwd()) {
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
log.warn("Already logged in.");
|
|
65
|
-
outro("To re-login, run `void
|
|
65
|
+
outro("To re-login, run `void account logout` first.");
|
|
66
66
|
return;
|
|
67
67
|
} catch (error) {
|
|
68
68
|
if (!isExpiredTokenError(error)) throw error;
|
|
@@ -22,7 +22,7 @@ async function runLogsCommand(root, filter, range, deployment, level) {
|
|
|
22
22
|
if (platform === "none") throw new Error("logs: Deployment is disabled. Run `void init` to choose a platform.");
|
|
23
23
|
const token = getToken(root);
|
|
24
24
|
if (!token) {
|
|
25
|
-
log.error("Not logged in. Run `void
|
|
25
|
+
log.error("Not logged in. Run `void account login` first.");
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
28
|
if (!/^\d+(m|h|d)$/.test(range)) {
|
|
@@ -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-
|
|
141
|
-
const { selectPlatformLoginMethod } = await import("./login-
|
|
140
|
+
const { discoverPlatform } = await import("./platform-cmd-Cl9Uhzru.mjs");
|
|
141
|
+
const { selectPlatformLoginMethod } = await import("./login-Bz0zEPoy.mjs");
|
|
142
142
|
const { runPlatformLogin } = await import("./auth-CAw7zHqj.mjs");
|
|
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
|
})();
|
|
@@ -279,7 +279,7 @@ async function followOperatorLogs(client, args, signal, pollIntervalMs = 2e3) {
|
|
|
279
279
|
}
|
|
280
280
|
async function runOperatorCommand(args) {
|
|
281
281
|
if (!args.action) {
|
|
282
|
-
const { printHelpPage } = await import("./help-
|
|
282
|
+
const { printHelpPage } = await import("./help-r_vrpH_d.mjs");
|
|
283
283
|
printHelpPage(["platform", args.group]);
|
|
284
284
|
return;
|
|
285
285
|
}
|
|
@@ -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-
|
|
143
|
+
const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-C9gsM640.mjs");
|
|
144
144
|
return runPlatformAuthRecovery(args);
|
|
145
145
|
}
|
|
146
146
|
if (args.action === "protection") {
|
|
147
|
-
const { runPlatformProtectionConfig } = await import("./platform-auth-protection-
|
|
147
|
+
const { runPlatformProtectionConfig } = await import("./platform-auth-protection-Dcat-6zu.mjs");
|
|
148
148
|
return runPlatformProtectionConfig(args);
|
|
149
149
|
}
|
|
150
150
|
const origin = resolveOperatorOrigin(args.connection);
|
package/dist/{platform-auth-protection-DjTE5Hj-.mjs → platform-auth-protection-Dcat-6zu.mjs}
RENAMED
|
@@ -4,8 +4,8 @@ import { n as ensurePlatformAccessToken } from "./cf-access-rAZxzMkL.mjs";
|
|
|
4
4
|
import { E as confirm, W as isCancel } from "./dist-Dn6nn2IU.mjs";
|
|
5
5
|
import { n as OperatorClient } from "./operator-client-A0iex2yi.mjs";
|
|
6
6
|
import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-BkVgJqv-.mjs";
|
|
7
|
-
import { D as preparePlatformAccessSetup, E as parsePlatformAccessSetupSpec, O as PlatformCloudflareClient, T as checkpointPlatformAccessResources, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, w as resolvePlatformCloudflareCredential } from "./platform-lifecycle-
|
|
8
|
-
import { c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-
|
|
7
|
+
import { D as preparePlatformAccessSetup, E as parsePlatformAccessSetupSpec, O as PlatformCloudflareClient, T as checkpointPlatformAccessResources, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, w as resolvePlatformCloudflareCredential } from "./platform-lifecycle-DVzM2T4j.mjs";
|
|
8
|
+
import { c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-ibuS1as0.mjs";
|
|
9
9
|
import { createHmac } from "node:crypto";
|
|
10
10
|
import { parsePlatformAccessProtection, platformProtectionProofMessage } from "@void/platform";
|
|
11
11
|
import { readFile } from "node:fs/promises";
|
|
@@ -2,8 +2,8 @@ import { d as openBrowser } from "./auth-B9_D6ygs.mjs";
|
|
|
2
2
|
import { d as readInstallationRecoverySecrets, h as resolveInstallationManifest, t as acquirePlatformLifecycleLock } from "./platform-registry-BJbgZLS1.mjs";
|
|
3
3
|
import { E as confirm, W as isCancel } from "./dist-Dn6nn2IU.mjs";
|
|
4
4
|
import { a as resolveOperatorOrigin } from "./operator-auth-BkVgJqv-.mjs";
|
|
5
|
-
import { O as PlatformCloudflareClient, f as platformDatabaseClientUrl, n as resolvePlatformInstallDatabaseUrl, s as acquirePlatformDatabaseLifecycleLockConnection, w as resolvePlatformCloudflareCredential } from "./platform-lifecycle-
|
|
6
|
-
import { c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-
|
|
5
|
+
import { O as PlatformCloudflareClient, f as platformDatabaseClientUrl, n as resolvePlatformInstallDatabaseUrl, s as acquirePlatformDatabaseLifecycleLockConnection, w as resolvePlatformCloudflareCredential } from "./platform-lifecycle-DVzM2T4j.mjs";
|
|
6
|
+
import { c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-ibuS1as0.mjs";
|
|
7
7
|
import { createCipheriv, createDecipheriv, createHash, createHmac, hkdfSync, randomBytes, randomUUID } from "node:crypto";
|
|
8
8
|
import { execFile } from "node:child_process";
|
|
9
9
|
import { parsePlatformAccessProtection, parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration, platformAuthenticationRecoveryMessage, validatePlatformAdmissionPolicy } from "@void/platform";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as runPlatformCommand, t as discoverPlatform } from "./platform-cmd-
|
|
1
|
+
import { r as runPlatformCommand, t as discoverPlatform } from "./platform-cmd-CudokNIg.mjs";
|
|
2
2
|
export { discoverPlatform, runPlatformCommand };
|
|
@@ -92,12 +92,12 @@ function saveDiscoveredPlatform(discovery) {
|
|
|
92
92
|
}
|
|
93
93
|
async function runPlatformCommand(_root, args) {
|
|
94
94
|
if (args.subcommand === "config") {
|
|
95
|
-
const { runPlatformAuthConfig } = await import("./platform-auth-config-
|
|
95
|
+
const { runPlatformAuthConfig } = await import("./platform-auth-config-De7BqRJm.mjs");
|
|
96
96
|
await runPlatformAuthConfig(args);
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
99
|
if (args.subcommand === "operator") {
|
|
100
|
-
const { runOperatorCommand } = await import("./operator-cmd-
|
|
100
|
+
const { runOperatorCommand } = await import("./operator-cmd-CR6Lxzt0.mjs");
|
|
101
101
|
await runOperatorCommand(args);
|
|
102
102
|
return;
|
|
103
103
|
}
|
|
@@ -129,7 +129,7 @@ async function runPlatformCommand(_root, args) {
|
|
|
129
129
|
console.log(`Capabilities: ${Object.entries(discovery.capabilities).filter(([, enabled]) => enabled).map(([name]) => name).join(", ")}`);
|
|
130
130
|
return;
|
|
131
131
|
}
|
|
132
|
-
const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-
|
|
132
|
+
const { runPlatformLifecycleCommand } = await import("./platform-lifecycle-DlpiGcjr.mjs");
|
|
133
133
|
await runPlatformLifecycleCommand(args);
|
|
134
134
|
}
|
|
135
135
|
//#endregion
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as cfAccessHeaders } from "./cf-access-DRsQRe6k.mjs";
|
|
2
2
|
import { d as readInstallationRecoverySecrets, g as savePlatformConnection, t as acquirePlatformLifecycleLock, v as writeInstallationManifest } from "./platform-registry-BJbgZLS1.mjs";
|
|
3
3
|
import { B as text, E as confirm, N as note, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
|
|
4
|
-
import { C as assertPlatformOperatorCredentialCanApplyPlan, O as PlatformCloudflareClient, _ as createPlatformInstallPlan, c as createPlatformHealthProbeToken, h as recordPlatformWorkerTraffic, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, p as recordResource, t as assertNoninteractivePlatformMutationAcknowledged, w as resolvePlatformCloudflareCredential } from "./platform-lifecycle-
|
|
5
|
-
import { a as resolveInstalledPlatformManifest, c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-
|
|
4
|
+
import { C as assertPlatformOperatorCredentialCanApplyPlan, O as PlatformCloudflareClient, _ as createPlatformInstallPlan, c as createPlatformHealthProbeToken, h as recordPlatformWorkerTraffic, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, p as recordResource, t as assertNoninteractivePlatformMutationAcknowledged, w as resolvePlatformCloudflareCredential } from "./platform-lifecycle-DVzM2T4j.mjs";
|
|
5
|
+
import { a as resolveInstalledPlatformManifest, c as selectAuthoritativePlatformManifest, u as verifyPlatformInstallationOwnership } from "./platform-management-ibuS1as0.mjs";
|
|
6
6
|
import { randomUUID } from "node:crypto";
|
|
7
7
|
import { PLATFORM_APPLICATION_KEY, PLATFORM_REMOTE_INSTALLATION_MANIFEST_KEY, createApplicationRoutes, createPlatformDeploymentManifest, normalizeApplicationDomain } from "@void/platform";
|
|
8
8
|
//#region src/cli/platform-domain.ts
|
|
@@ -1499,7 +1499,7 @@ async function verifyInstalledPlatformAccessProtection(input) {
|
|
|
1499
1499
|
}
|
|
1500
1500
|
const existingWorkers = input.plan.actions.filter((action) => action.kind === "worker" && action.action === "update").map((action) => action.name);
|
|
1501
1501
|
if (existingWorkers.length) {
|
|
1502
|
-
const { verifyProtectionWorkerOrigins } = await import("./platform-auth-protection-
|
|
1502
|
+
const { verifyProtectionWorkerOrigins } = await import("./platform-auth-protection-Dcat-6zu.mjs");
|
|
1503
1503
|
await verifyProtectionWorkerOrigins({
|
|
1504
1504
|
request: input.client.request.bind(input.client),
|
|
1505
1505
|
listWorkerDomains: input.client.listWorkerDomains.bind(input.client),
|
|
@@ -5532,14 +5532,14 @@ function resolvePlatformInstallDatabaseUrl(checkpoint, manifest = null) {
|
|
|
5532
5532
|
}
|
|
5533
5533
|
async function runPlatformLifecycleCommand(args) {
|
|
5534
5534
|
if (args.subcommand === "domain") {
|
|
5535
|
-
const { runPlatformDomainCommand } = await import("./platform-domain-
|
|
5535
|
+
const { runPlatformDomainCommand } = await import("./platform-domain-Ckpd2kXw.mjs");
|
|
5536
5536
|
await runPlatformDomainCommand(args);
|
|
5537
5537
|
return;
|
|
5538
5538
|
}
|
|
5539
5539
|
if (args.subcommand === "discover") {
|
|
5540
5540
|
const client = new PlatformCloudflareClient((await resolvePlatformCloudflareCredential()).token);
|
|
5541
5541
|
const accountId = await selectAccount(await readAccounts(client), args.account);
|
|
5542
|
-
const { recoverPlatformInstallations } = await import("./platform-recovery-
|
|
5542
|
+
const { recoverPlatformInstallations } = await import("./platform-recovery-D_KmvdSk.mjs");
|
|
5543
5543
|
const recovered = await recoverPlatformInstallations(client, accountId, void 0, args.selector);
|
|
5544
5544
|
if (recovered.length === 0) {
|
|
5545
5545
|
log.info(`No recoverable Void platform installations were found in ${accountId}.`);
|
|
@@ -5549,7 +5549,7 @@ async function runPlatformLifecycleCommand(args) {
|
|
|
5549
5549
|
return;
|
|
5550
5550
|
}
|
|
5551
5551
|
if (args.subcommand !== "install") {
|
|
5552
|
-
const { runInstalledPlatformCommand } = await import("./platform-management-
|
|
5552
|
+
const { runInstalledPlatformCommand } = await import("./platform-management-44Bxd3YC.mjs");
|
|
5553
5553
|
await runInstalledPlatformCommand(args);
|
|
5554
5554
|
return;
|
|
5555
5555
|
}
|
|
@@ -5761,7 +5761,7 @@ async function runPlatformLifecycleCommand(args) {
|
|
|
5761
5761
|
progress?.stop("Read the saved installation.");
|
|
5762
5762
|
progress = void 0;
|
|
5763
5763
|
if (authoritative) {
|
|
5764
|
-
const { selectAuthoritativePlatformManifest } = await import("./platform-management-
|
|
5764
|
+
const { selectAuthoritativePlatformManifest } = await import("./platform-management-44Bxd3YC.mjs");
|
|
5765
5765
|
const selected = selectAuthoritativePlatformManifest(existing, authoritative);
|
|
5766
5766
|
authoritativeProvisionIntents = true;
|
|
5767
5767
|
if (!args.plan && JSON.stringify(selected) !== JSON.stringify(existing)) writeInstallationManifest(selected);
|
|
@@ -5990,7 +5990,7 @@ async function runPlatformLifecycleCommand(args) {
|
|
|
5990
5990
|
})).actions.filter((action) => action.kind === "worker"),
|
|
5991
5991
|
revalidateBeforeWorkerDeploy: (manifest, action) => revalidatePlatformInstallAction(client, plan, manifest, action),
|
|
5992
5992
|
verifyExistingOwnership: async (manifest, databaseCheckpointExists) => {
|
|
5993
|
-
const { verifyPlatformInstallationOwnership } = await import("./platform-management-
|
|
5993
|
+
const { verifyPlatformInstallationOwnership } = await import("./platform-management-44Bxd3YC.mjs");
|
|
5994
5994
|
const retainedReplacementKeys = new Set(plan.actions.filter((action) => {
|
|
5995
5995
|
const previous = manifest.resources.find((resource) => resource.key === action.key);
|
|
5996
5996
|
return action.action === "create" && previous && previous.name !== action.name;
|
|
@@ -6024,7 +6024,7 @@ async function runPlatformLifecycleCommand(args) {
|
|
|
6024
6024
|
log.info("Confirm your identity in the browser, then test and enable any additional login methods in Settings.");
|
|
6025
6025
|
}
|
|
6026
6026
|
if (!plan.deployment.application.zoneName) log.info("Apps will use workers.dev addresses. When your domain is ready: void platform domain set <domain>");
|
|
6027
|
-
outro("Run `void
|
|
6027
|
+
outro("Run `void account login`, then deploy an app with `void deploy --platform void`.");
|
|
6028
6028
|
} catch (error) {
|
|
6029
6029
|
progress?.error("Platform installation failed.");
|
|
6030
6030
|
progress = void 0;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as runPlatformLifecycleCommand } from "./platform-lifecycle-
|
|
1
|
+
import { r as runPlatformLifecycleCommand } from "./platform-lifecycle-DVzM2T4j.mjs";
|
|
2
2
|
export { runPlatformLifecycleCommand };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { c as selectAuthoritativePlatformManifest, s as runInstalledPlatformCommand, u as verifyPlatformInstallationOwnership } from "./platform-management-
|
|
1
|
+
import { c as selectAuthoritativePlatformManifest, s as runInstalledPlatformCommand, u as verifyPlatformInstallationOwnership } from "./platform-management-ibuS1as0.mjs";
|
|
2
2
|
export { runInstalledPlatformCommand, selectAuthoritativePlatformManifest, verifyPlatformInstallationOwnership };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as createSpinner } from "./output-CCH48AMM.mjs";
|
|
2
2
|
import { a as listInstallationManifests, d as readInstallationRecoverySecrets, h as resolveInstallationManifest, m as removePlatformConnectionForInstallation, p as removeInstallationRecoverySecrets, t as acquirePlatformLifecycleLock, v as writeInstallationManifest } from "./platform-registry-BJbgZLS1.mjs";
|
|
3
3
|
import { E as confirm, I as select, N as note, P as outro, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
|
|
4
|
-
import { A as hyperdriveOriginFromConnectionString, C as assertPlatformOperatorCredentialCanApplyPlan, M as verifyPlatformRuntimeTokenPermissions, O as PlatformCloudflareClient, S as platformDatabaseNameFromOwnerUrl, _ as createPlatformInstallPlan, a as REMOTE_INSTALLATION_MANIFEST_KEY, b as platformProvisionIntentHash, d as loadPlatformRuntime, g as trackedPlatformWorkerTraffic, j as hyperdriveOriginMatches, k as hyperdriveOriginConfigHash, l as createPlatformInstallationSecrets, m as resolveBootstrapGitHubId, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, t as assertNoninteractivePlatformMutationAcknowledged, u as installPlatform, v as formatPlatformInstallPlan, w as resolvePlatformCloudflareCredential, x as revalidatePlatformInstallAction, y as platformAdoptionIntentHash } from "./platform-lifecycle-
|
|
4
|
+
import { A as hyperdriveOriginFromConnectionString, C as assertPlatformOperatorCredentialCanApplyPlan, M as verifyPlatformRuntimeTokenPermissions, O as PlatformCloudflareClient, S as platformDatabaseNameFromOwnerUrl, _ as createPlatformInstallPlan, a as REMOTE_INSTALLATION_MANIFEST_KEY, b as platformProvisionIntentHash, d as loadPlatformRuntime, g as trackedPlatformWorkerTraffic, j as hyperdriveOriginMatches, k as hyperdriveOriginConfigHash, l as createPlatformInstallationSecrets, m as resolveBootstrapGitHubId, n as resolvePlatformInstallDatabaseUrl, o as acquirePlatformDatabaseLifecycleLock, t as assertNoninteractivePlatformMutationAcknowledged, u as installPlatform, v as formatPlatformInstallPlan, w as resolvePlatformCloudflareCredential, x as revalidatePlatformInstallAction, y as platformAdoptionIntentHash } from "./platform-lifecycle-DVzM2T4j.mjs";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { PLATFORM_DISABLED_KEY, PLATFORM_DISABLED_VALUE, PLATFORM_R2_OWNERSHIP_MARKER_KEY, createPlatformResourceOwnershipMarker, parsePlatformInstallationManifest, parsePlatformResourceOwnershipMarker, recordInstallationResource, recordInstallationStep, setInstallationDesiredState, transitionInstallation } from "@void/platform";
|
|
7
7
|
//#region src/cli/platform-management.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as cfAccessHeaders } from "./cf-access-DRsQRe6k.mjs";
|
|
2
2
|
import { a as listInstallationManifests, g as savePlatformConnection, t as acquirePlatformLifecycleLock, v as writeInstallationManifest } from "./platform-registry-BJbgZLS1.mjs";
|
|
3
|
-
import { _ as createPlatformInstallPlan, a as REMOTE_INSTALLATION_MANIFEST_KEY } from "./platform-lifecycle-
|
|
4
|
-
import { i as recoverDurablyMarkedProvisionIntents, r as isPlatformManifestMonotonicExtension, u as verifyPlatformInstallationOwnership } from "./platform-management-
|
|
3
|
+
import { _ as createPlatformInstallPlan, a as REMOTE_INSTALLATION_MANIFEST_KEY } from "./platform-lifecycle-DVzM2T4j.mjs";
|
|
4
|
+
import { i as recoverDurablyMarkedProvisionIntents, r as isPlatformManifestMonotonicExtension, u as verifyPlatformInstallationOwnership } from "./platform-management-ibuS1as0.mjs";
|
|
5
5
|
import { parsePlatformInstallationManifest, setInstallationEndpoints } from "@void/platform";
|
|
6
6
|
//#region src/cli/platform-recovery.ts
|
|
7
7
|
async function recoverPlatformInstallations(client, accountId, verifyEndpoint = verifyInstallationEndpoint, selector = "") {
|
|
@@ -9,7 +9,7 @@ async function runProjectsCommand(root) {
|
|
|
9
9
|
intro(cliTitle("project list"));
|
|
10
10
|
const token = getToken(root);
|
|
11
11
|
if (!token) {
|
|
12
|
-
log.error("Not logged in. Run `void
|
|
12
|
+
log.error("Not logged in. Run `void account login` first.");
|
|
13
13
|
process.exit(1);
|
|
14
14
|
}
|
|
15
15
|
const projects = await new PlatformClient(token, { root }).listProjects();
|
|
@@ -39,17 +39,17 @@ async function runProjectsCommand(root) {
|
|
|
39
39
|
async function runProjectCommand(root, args) {
|
|
40
40
|
const cloudflare = readDeploymentPlatform(root) === "cloudflare";
|
|
41
41
|
if (args.subcommand === "status") {
|
|
42
|
-
const { runListCommand } = await import("./list-
|
|
42
|
+
const { runListCommand } = await import("./list-CVjGr_C6.mjs");
|
|
43
43
|
return runListCommand(root, args.name || void 0);
|
|
44
44
|
}
|
|
45
45
|
if (args.subcommand === "link") {
|
|
46
46
|
if (cloudflare) throw new Error("project: Direct Cloudflare apps are identified by cloudflare.name in void.config.ts and do not need linking.");
|
|
47
|
-
const { runLink } = await import("./link-
|
|
47
|
+
const { runLink } = await import("./link-3lGrfXzd.mjs");
|
|
48
48
|
return runLink(root, args.name || void 0);
|
|
49
49
|
}
|
|
50
50
|
if (args.subcommand === "list") {
|
|
51
51
|
if (cloudflare) {
|
|
52
|
-
const { runListCommand } = await import("./list-
|
|
52
|
+
const { runListCommand } = await import("./list-CVjGr_C6.mjs");
|
|
53
53
|
return runListCommand(root);
|
|
54
54
|
}
|
|
55
55
|
return runProjectsCommand(root);
|
|
@@ -61,41 +61,41 @@ async function runProjectCommand(root, args) {
|
|
|
61
61
|
}
|
|
62
62
|
if (args.subcommand === "team") {
|
|
63
63
|
if (args.action === "") {
|
|
64
|
-
const { printHelpPage } = await import("./help-
|
|
64
|
+
const { printHelpPage } = await import("./help-r_vrpH_d.mjs");
|
|
65
65
|
printHelpPage(["project", "team"]);
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
const accountInvitationAction = args.action === "pending" || args.action === "accept" || args.action === "decline";
|
|
69
69
|
if (cloudflare && !accountInvitationAction) throw new Error("project: Teams are available only for projects hosted on a Void platform, not direct Cloudflare deployments.");
|
|
70
|
-
const { runProjectTeamCommand } = await import("./project-team-
|
|
70
|
+
const { runProjectTeamCommand } = await import("./project-team-B1Tia8vd.mjs");
|
|
71
71
|
return runProjectTeamCommand(root, args);
|
|
72
72
|
}
|
|
73
73
|
if (args.subcommand === "logs") {
|
|
74
|
-
const { runLogsCommand } = await import("./logs-
|
|
74
|
+
const { runLogsCommand } = await import("./logs-DbzD-QDf.mjs");
|
|
75
75
|
return runLogsCommand(root, args.filter, args.range, args.deployment || void 0, args.level || void 0);
|
|
76
76
|
}
|
|
77
77
|
if (args.subcommand === "requests") {
|
|
78
78
|
if (cloudflare) throw new Error("project: Historical request analytics require the Void platform. Use `void project logs` for a live Cloudflare tail.");
|
|
79
|
-
const { runRequestsCommand } = await import("./requests-
|
|
79
|
+
const { runRequestsCommand } = await import("./requests-CphRF98D.mjs");
|
|
80
80
|
return runRequestsCommand(root, args.range, args.status || void 0);
|
|
81
81
|
}
|
|
82
82
|
if (args.subcommand === "rollback") {
|
|
83
|
-
const { runRollbackCommand } = await import("./rollback-
|
|
83
|
+
const { runRollbackCommand } = await import("./rollback-BYHJV2yD.mjs");
|
|
84
84
|
return runRollbackCommand(root, args.deployId || void 0);
|
|
85
85
|
}
|
|
86
86
|
if (args.subcommand === "cancel") {
|
|
87
87
|
if (cloudflare) throw new Error("project: Direct Cloudflare deploys activate only after readiness succeeds, so there is no remote build to cancel.");
|
|
88
|
-
const { runCancelDeployCommand } = await import("./cancel-deploy-
|
|
88
|
+
const { runCancelDeployCommand } = await import("./cancel-deploy-BAKmkX4f.mjs");
|
|
89
89
|
return runCancelDeployCommand(root, args.deployId || void 0);
|
|
90
90
|
}
|
|
91
91
|
if (args.subcommand === "delete") {
|
|
92
92
|
if (cloudflare) throw new Error("project: Refusing to delete Cloudflare resources through this command. Direct deployments are additive and existing resources may be shared.");
|
|
93
|
-
const { runDeleteCommand } = await import("./delete-
|
|
93
|
+
const { runDeleteCommand } = await import("./delete-BEEyqlwd.mjs");
|
|
94
94
|
return runDeleteCommand(root, args.name || void 0, { force: args.force });
|
|
95
95
|
}
|
|
96
96
|
if (args.subcommand === "purge-cache") {
|
|
97
97
|
if (cloudflare) throw new Error("project: Direct Cloudflare ISR cache purge is not available yet; redeploy or purge the configured KV namespace explicitly.");
|
|
98
|
-
const { runPurgeCacheCommand } = await import("./cache-
|
|
98
|
+
const { runPurgeCacheCommand } = await import("./cache-CKV1Gz2w.mjs");
|
|
99
99
|
return runPurgeCacheCommand(root, args.projectSlug || void 0);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -47,7 +47,7 @@ function invitationResponseError(error, apiUrl) {
|
|
|
47
47
|
if (platformErrorMessage(parsePlatformErrorBody(error.body))) return error;
|
|
48
48
|
let message;
|
|
49
49
|
if (error.code === "project invitation not found") message = `Invitation not found on ${apiUrl}. Check VOID_API_URL if set, connect to the platform in your invitation with \`void connect <url>\`, then run \`void project team pending\` to check the invitation ID. If it is missing, ask a project administrator for a new invitation.`;
|
|
50
|
-
else if (error.code === "forbidden") message = `Your account cannot respond to this invitation on ${apiUrl}. Sign in with the account whose registered email received the invitation. To switch accounts, set VOID_API_URL to ${apiUrl}, unset VOID_TOKEN if present, then run \`void
|
|
50
|
+
else if (error.code === "forbidden") message = `Your account cannot respond to this invitation on ${apiUrl}. Sign in with the account whose registered email received the invitation. To switch accounts, set VOID_API_URL to ${apiUrl}, unset VOID_TOKEN if present, then run \`void account logout\` and \`void account login\`. Run \`void project team pending\` to see that account's invitations.`;
|
|
51
51
|
else if (error.code === "project invitation has expired") message = "This invitation has expired. Ask a project administrator to invite you again, then run `void project team pending`.";
|
|
52
52
|
else if (error.code === "project invitation is no longer pending") message = "This invitation has already been answered or revoked. Run `void project team pending` to see invitations awaiting your response, or ask a project administrator to check your access.";
|
|
53
53
|
else return error;
|
|
@@ -63,7 +63,7 @@ async function runProjectTeamCommand(root, args) {
|
|
|
63
63
|
};
|
|
64
64
|
if (apiUrl) log.info(`Platform: ${apiUrl}`);
|
|
65
65
|
if (!token) {
|
|
66
|
-
log.error(apiUrl ? `Not logged in to ${apiUrl}. Run \`void connect ${apiUrl}\` to sign in.` : "Not logged in. Run `void
|
|
66
|
+
log.error(apiUrl ? `Not logged in to ${apiUrl}. Run \`void connect ${apiUrl}\` to sign in.` : "Not logged in. Run `void account login` first.");
|
|
67
67
|
process.exit(1);
|
|
68
68
|
}
|
|
69
69
|
const client = new PlatformClient(token, apiUrl ? { apiUrl } : { root });
|
|
@@ -9,7 +9,7 @@ async function runRequestsCommand(root, range, status) {
|
|
|
9
9
|
intro(cliTitle("project requests"));
|
|
10
10
|
const token = getToken(root);
|
|
11
11
|
if (!token) {
|
|
12
|
-
log.error("Not logged in. Run `void
|
|
12
|
+
log.error("Not logged in. Run `void account login` first.");
|
|
13
13
|
process.exit(1);
|
|
14
14
|
}
|
|
15
15
|
if (!/^\d+(m|h|d)$/.test(range)) {
|
|
@@ -12,7 +12,7 @@ async function runRollbackCommand(root, deployId) {
|
|
|
12
12
|
if (platform === "none") throw new Error("rollback: Deployment is disabled. Run `void init` to choose a platform.");
|
|
13
13
|
const token = getToken(root);
|
|
14
14
|
if (!token) {
|
|
15
|
-
log.error("Not logged in. Run `void
|
|
15
|
+
log.error("Not logged in. Run `void account login` first.");
|
|
16
16
|
process.exit(1);
|
|
17
17
|
}
|
|
18
18
|
const linked = readProjectConfig(root);
|
|
@@ -15,7 +15,7 @@ async function runSecretCommand(root, args) {
|
|
|
15
15
|
if (platform === "none") throw new Error("secret: Deployment is disabled. Run `void init` to choose a platform.");
|
|
16
16
|
const token = getToken(root);
|
|
17
17
|
if (!token) {
|
|
18
|
-
log.error("Not logged in. Run `void
|
|
18
|
+
log.error("Not logged in. Run `void account login` first.");
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
21
|
const client = new PlatformClient(token, { root });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "void",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/voidzero-dev/void.git",
|
|
@@ -325,11 +325,11 @@
|
|
|
325
325
|
"@cloudflare/vite-plugin": "1.54.7",
|
|
326
326
|
"@cloudflare/workers-types": "^4.20260702.1",
|
|
327
327
|
"@napi-rs/keyring": "2.0.0",
|
|
328
|
-
"@void/deploy-cloudflare": "0.21.
|
|
329
|
-
"@void/deploy-core": "0.21.
|
|
330
|
-
"@void/edge": "0.21.
|
|
331
|
-
"@void/isr": "0.21.
|
|
332
|
-
"@void/platform": "0.21.
|
|
328
|
+
"@void/deploy-cloudflare": "0.21.2",
|
|
329
|
+
"@void/deploy-core": "0.21.2",
|
|
330
|
+
"@void/edge": "0.21.2",
|
|
331
|
+
"@void/isr": "0.21.2",
|
|
332
|
+
"@void/platform": "0.21.2",
|
|
333
333
|
"acorn": "^8.15.0",
|
|
334
334
|
"better-auth": "^1.7.3",
|
|
335
335
|
"better-sqlite3": "^13.0.3",
|
|
@@ -379,7 +379,7 @@
|
|
|
379
379
|
"zod": "^4.6.1"
|
|
380
380
|
},
|
|
381
381
|
"peerDependencies": {
|
|
382
|
-
"@void/md": "0.21.
|
|
382
|
+
"@void/md": "0.21.2",
|
|
383
383
|
"arktype": ">=2.0.0",
|
|
384
384
|
"valibot": ">=1.0.0-beta.7",
|
|
385
385
|
"vite": "^8.0.0",
|
package/skills/void/SKILL.md
CHANGED
|
@@ -59,7 +59,7 @@ dedicated Access applications or connect existing ones, including a separate
|
|
|
59
59
|
identity account. Protection setup verifies API/proxy coverage and uses scoped
|
|
60
60
|
service credentials for installation and CI. Use `platform config auth protection`
|
|
61
61
|
to show, enable, or disable protection; retain the company gate when probes fail.
|
|
62
|
-
Users link another enabled method with `void
|
|
62
|
+
Users link another enabled method with `void account link [connection-id]` after
|
|
63
63
|
recent sign-in and explicit browser identity confirmation. For expired first-admin
|
|
64
64
|
codes, resume installation or repair completed provisioning. Lost-provider recovery
|
|
65
65
|
uses `platform config auth recover` with installation ownership, original recovery
|
|
@@ -79,6 +79,8 @@ For Void platform project access, use `void project team`: invite only an email
|
|
|
79
79
|
|
|
80
80
|
Use Void commands for every user-facing workflow. Never ask the user to install, authenticate, or run Wrangler directly. Say Cloudflare or Void instead, except when naming literal `wrangler.jsonc` / `wrangler.json` files or `WRANGLER_*` environment variables the user must inspect.
|
|
81
81
|
|
|
82
|
+
`void auth login|status|logout` follows the saved deploy destination or asks the user to choose; `void account` explicitly manages a Void platform account.
|
|
83
|
+
|
|
82
84
|
Use `void` in examples and commands in this skill. For first-time setup, prefer `void init` followed by `void deploy`; in an empty directory, install `void` first and let `void init` add the matching Pages adapter and starter dependencies with Vite+ as the default scaffold toolchain. In an existing app, `void init` configures Void in place by adding missing Vite scripts and creating or patching `vite.config.*` with `voidPlugin()`. For Cloudflare deployment, Void uses bundled tooling and secure browser OAuth; init or the first deploy saves the selected `account_id`, and `void cloudflare login|status|logout` manages the session; Void-managed deployment requires an explicitly connected platform. Use `void connect <url>` for an existing platform or `void platform install --plan` to preview a company control plane in the user's Cloudflare account. The core self-hosted platform excludes the dashboard, GitHub App, and build Containers; lifecycle commands are resumable and verify remote, Worker, and R2 ownership before mutations. `void platform disable` gates traffic through installation-owned routing storage and remains disabled through repair or upgrade; `void platform enable` explicitly restores traffic. Safe uninstall retains name-addressed Workers, R2, AI Gateway, external PostgreSQL, and zones for explicit manual cleanup. Direct Cloudflare deploys support native Void apps, static/SPA/SSG output, and Cloudflare builds from TanStack Start, React Router, vinext, SvelteKit, Nuxt, Analog, and Astro. They provision inferred resources, validate and apply migrations, require schema-declared server values in encrypted remote secret storage, upload and probe an immutable Worker Version, then activate and synchronize triggers. Native Void features are Workers Free-compatible by default; `void/sandbox` is an explicit exception because it uses Cloudflare Containers and therefore requires Workers Paid. A Sandbox deploy checks Containers access before provisioning/building, while apps without Sandbox perform no entitlement probe. Versions without preview URLs are staged at 0% and probed through workers.dev using a version override; the same safe fallback applies when Access blocks a generated preview alias but admits the stable Worker hostname. Set `CLOUDFLARE_WORKERS_SUBDOMAIN` in a fresh CI checkout, while local deploys cache it automatically. When Cloudflare Access protects `workers.dev`, use an admitted `CF_ACCESS_CLIENT_ID` / `CF_ACCESS_CLIENT_SECRET` service-token pair for CI, or a short-lived `CF_ACCESS_TOKEN` from `cloudflared` for an interactive local readiness probe. With Cloudflare saved in `.void/project.json`, secret, domain, project status/log/rollback, and remote database commands operate directly on the pinned Worker/account. Logs are a live tail. Rollback restores the selected version's saved schedules, queues, workflows, routes, and domains but never reverses database migrations; versions without complete trigger snapshots use code-only rollback and keep the current routes and schedules. On either deployment platform, auth-enabled `void deploy` preserves an existing `BETTER_AUTH_SECRET` or creates a persistent encrypted secret when missing; always use Void's deployment flow so it can manage that secret safely.
|
|
83
85
|
|
|
84
86
|
Use `void` and `@void/*` in code examples and package manifests.
|
|
@@ -110,7 +112,7 @@ If invoked without a concrete task, do a brief app status check and report:
|
|
|
110
112
|
3. Runtime signals (`void/db`, `void/kv`, `void/storage`, queue usage).
|
|
111
113
|
4. Auth signals (`void/auth`, `auth` client imports, OAuth env vars).
|
|
112
114
|
5. Deployment platform and optional Void project linkage (`.void/project.json`), plus config readiness (`void.config.ts`, Cloudflare `account_id`, tsconfig extends).
|
|
113
|
-
6. Optional health checks (`void
|
|
115
|
+
6. Optional health checks (`void account whoami`, `void db status` when relevant).
|
|
114
116
|
|
|
115
117
|
Then ask what to do next.
|
|
116
118
|
|
|
@@ -107,7 +107,7 @@ Cloudflare applications for deliberate cleanup. Disabling an Access login method
|
|
|
107
107
|
does not remove the gate.
|
|
108
108
|
|
|
109
109
|
Users can add another enabled login to their existing account with
|
|
110
|
-
`void
|
|
110
|
+
`void account link <connection-id>` or **Account** in the optional
|
|
111
111
|
dashboard. Sign in again first if prompted, then authenticate with the additional
|
|
112
112
|
provider and confirm the identity shown. Matching email addresses alone do not
|
|
113
113
|
link accounts.
|
|
@@ -77,7 +77,7 @@ and run `void project link`.
|
|
|
77
77
|
|
|
78
78
|
If the invitation is missing, check the platform and signed-in account. To
|
|
79
79
|
switch accounts, set `VOID_API_URL` to the invitation's platform URL, unset
|
|
80
|
-
`VOID_TOKEN` if present, then run `void
|
|
80
|
+
`VOID_TOKEN` if present, then run `void account logout` and `void account login` using
|
|
81
81
|
the invited email address. For an expired or revoked invitation, ask a project
|
|
82
82
|
administrator to invite you again.
|
|
83
83
|
|