void 0.20.1 → 0.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +5 -1
  2. package/dist/{auth-W9WII-mN.mjs → auth-DPl6kck4.mjs} +46 -26
  3. package/dist/{auth-cmd-CAH62yDU.mjs → auth-cmd-CzwquNiP.mjs} +5 -4
  4. package/dist/auth-link-ElDTgF7j.mjs +28 -0
  5. package/dist/{build-cmd-CJvZvPQO.mjs → build-cmd-BpJe6boP.mjs} +3 -3
  6. package/dist/{cache-BlNeQjuP.mjs → cache-D98YTqeE.mjs} +3 -3
  7. package/dist/{cancel-deploy-CmlAZ9P6.mjs → cancel-deploy-CPbEQLMG.mjs} +3 -3
  8. package/dist/cf-access-DRsQRe6k.mjs +75 -0
  9. package/dist/cli/cli.mjs +309 -1958
  10. package/dist/cli/env-schema-probe.mjs +11 -2
  11. package/dist/client-BQBrZoCX.mjs +989 -0
  12. package/dist/{cloudflare-auth-B1QtTO1b.mjs → cloudflare-auth-6M5llVPC.mjs} +2 -2
  13. package/dist/{cloudflare-cmd-B6_OZx2V.mjs → cloudflare-cmd-4RPGN3KB.mjs} +2 -2
  14. package/dist/{cloudflare-connect-j5D4hhrG.mjs → cloudflare-connect-t1UU5svD.mjs} +2 -2
  15. package/dist/{cloudflare-operations-CPTpRW6d.mjs → cloudflare-operations-BzWnlC1_.mjs} +1 -1
  16. package/dist/{config-BQFq7QvD.mjs → config-uNGuFsI2.mjs} +1 -1
  17. package/dist/{connect-C04Wdy_h.mjs → connect-WCQZ_u3m.mjs} +6 -6
  18. package/dist/{create-project-ChGZ1DFd.mjs → create-project-D0oXA090.mjs} +7 -7
  19. package/dist/{db-D2d_mUsB.mjs → db-DJ-9qs3S.mjs} +47 -30
  20. package/dist/{delete-D8GigDk8.mjs → delete-BZ4-WaGm.mjs} +3 -3
  21. package/dist/{deploy-iXZ3F0N6.mjs → deploy-BAhhcg5q.mjs} +135 -117
  22. package/dist/{dev-inbox-DkgRWLkW.mjs → dev-inbox-P0u4tM8Y.mjs} +1 -1
  23. package/dist/{domain-B1VmoSr0.mjs → domain-BxAyhxXN.mjs} +4 -4
  24. package/dist/email-Bj7Cvdwp.mjs +795 -0
  25. package/dist/{env-D4Emu-M_.mjs → env-DBKmK4vc.mjs} +1 -0
  26. package/dist/{env-BcQzYgoG.mjs → env-DP_EErve.mjs} +5 -5
  27. package/dist/{env-validation-ENpMy6Ez.mjs → env-validation-CF6KvTRf.mjs} +3 -1
  28. package/dist/{gen-DI2YwdBM.mjs → gen-B_wPnVTK.mjs} +2 -2
  29. package/dist/{github-cmd-xItS5Zwf.mjs → github-cmd-C-z_xRrQ.mjs} +15 -21
  30. package/dist/{headers-D8QfRX9Y.mjs → headers-BAHwgHdW.mjs} +1 -1
  31. package/dist/help-CwOX-zmI.mjs +2216 -0
  32. package/dist/{inbound-afAcWeQ9.d.mts → inbound-CH5Mksyy.d.mts} +34 -48
  33. package/dist/{inbound-2d0zi2yS.mjs → inbound-aVHEUhKo.mjs} +130 -100
  34. package/dist/index.mjs +54 -17
  35. package/dist/{init-BD-9THgn.mjs → init-BGktCXgA.mjs} +11 -11
  36. package/dist/{link-RMdgjF1v.mjs → link-D2kbqhWb.mjs} +4 -4
  37. package/dist/{list-3F52R_yO.mjs → list-CvkK_G7k.mjs} +4 -4
  38. package/dist/{login-pV69H-ZO.mjs → login-WIjNc77c.mjs} +28 -10
  39. package/dist/{logs-DFHHD6wE.mjs → logs-dLUFCapG.mjs} +4 -4
  40. package/dist/{mime-BJD7d_qL.mjs → mime-D5Nmdzf7.mjs} +23 -9
  41. package/dist/{node-Dk3H2jmU.mjs → node-Ez5KW5rn.mjs} +2 -2
  42. package/dist/operator-auth-B3e08unv.mjs +52 -0
  43. package/dist/operator-client-LUZnlnYk.mjs +82 -0
  44. package/dist/{operator-cmd-DYWRbWUA.mjs → operator-cmd-CKJ7xIRs.mjs} +35 -55
  45. package/dist/{output-tFQLLj26.mjs → output-B0cfNSx5.mjs} +316 -2
  46. package/dist/pages/index.mjs +2 -2
  47. package/dist/platform-auth-config-CdVWRRJr.mjs +368 -0
  48. package/dist/platform-auth-protection-Drl0qhrn.mjs +219 -0
  49. package/dist/platform-auth-recovery-CmKEWpDo.mjs +310 -0
  50. package/dist/{platform-cmd-DxJ2FRwR.mjs → platform-cmd-5q_k56xS.mjs} +16 -6
  51. package/dist/{platform-domain-ChvbJkdy.mjs → platform-domain-4GiDlcqx.mjs} +4 -4
  52. package/dist/{platform-lifecycle-DN4MzJF_.mjs → platform-lifecycle-R9xAxvtG.mjs} +1716 -204
  53. package/dist/{platform-management-Db2PXw0B.mjs → platform-management-BfWsXHEW.mjs} +35 -7
  54. package/dist/{platform-recovery-C_YO-tIs.mjs → platform-recovery-CbK-I1FB.mjs} +6 -5
  55. package/dist/{prepare-CBetXvsN.mjs → prepare-CtDJjoOj.mjs} +2 -2
  56. package/dist/{prepare-BfJvFUtJ.mjs → prepare-blNRQvQl.mjs} +2 -2
  57. package/dist/prerender-render.d.mts +11 -0
  58. package/dist/prerender-render.mjs +111 -0
  59. package/dist/{project-cmd-Mo0V9yKS.mjs → project-cmd-CTdmnzvc.mjs} +32 -14
  60. package/dist/project-team-CGxsQe3_.mjs +132 -0
  61. package/dist/project-token-Cirx7uwZ.mjs +75 -0
  62. package/dist/{provision-Blnstcm2.mjs → provision-CSJOjjQk.mjs} +2 -0
  63. package/dist/{requests-BcKOVpRg.mjs → requests-4Nq59hOr.mjs} +3 -3
  64. package/dist/{rollback-Bx85-0xh.mjs → rollback-Dr7u0Ljx.mjs} +4 -4
  65. package/dist/runtime/ai.mjs +3 -2
  66. package/dist/runtime/email/testing.d.mts +1 -1
  67. package/dist/runtime/email/testing.mjs +3 -3
  68. package/dist/runtime/email-protocol.d.mts +15 -0
  69. package/dist/runtime/email-protocol.mjs +70 -0
  70. package/dist/runtime/email.d.mts +2 -2
  71. package/dist/runtime/email.mjs +189 -96
  72. package/dist/runtime/remote/index.mjs +54 -11
  73. package/dist/runtime/sandbox.d.mts +4 -56
  74. package/dist/runtime/sandbox.mjs +81 -220
  75. package/dist/{secret-ByhJ9AMl.mjs → secret-AcPi-FoA.mjs} +5 -5
  76. package/dist/{skills-Q46GZMO-.mjs → skills-C0RvGjeE.mjs} +1 -1
  77. package/dist/{subcommand-prompt-WfySCQ7S.mjs → subcommand-prompt-Bmyn5Rlc.mjs} +1 -1
  78. package/package.json +12 -7
  79. package/skills/void/SKILL.md +35 -4
  80. package/skills/void/docs/guide/deployment.md +16 -14
  81. package/skills/void/docs/guide/email.md +114 -120
  82. package/skills/void/docs/guide/platform/administration/access.md +163 -0
  83. package/skills/void/docs/guide/platform/administration/email.md +121 -0
  84. package/skills/void/docs/guide/platform/administration/operations.md +97 -0
  85. package/skills/void/docs/guide/platform/administration/projects.md +54 -0
  86. package/skills/void/docs/guide/platform/development/local.md +119 -0
  87. package/skills/void/docs/guide/platform/development/runtime.md +124 -0
  88. package/skills/void/docs/guide/platform/development/schema-ci.md +95 -0
  89. package/skills/void/docs/guide/platform/installation/ci.md +55 -0
  90. package/skills/void/docs/guide/platform/installation/credentials.md +80 -0
  91. package/skills/void/docs/guide/platform/installation/domains.md +68 -0
  92. package/skills/void/docs/guide/platform/installation/first-deployment.md +82 -0
  93. package/skills/void/docs/guide/platform/installation/maintenance.md +137 -0
  94. package/skills/void/docs/guide/platform/installation/prerequisites.md +86 -0
  95. package/skills/void/docs/guide/platform/installation/setup.md +169 -0
  96. package/skills/void/docs/guide/platform/installation/uninstall.md +54 -0
  97. package/skills/void/docs/guide/platform-administration.md +6 -202
  98. package/skills/void/docs/guide/platform-development.md +5 -254
  99. package/skills/void/docs/guide/project-collaboration.md +94 -0
  100. package/skills/void/docs/guide/sandboxes.md +9 -24
  101. package/skills/void/docs/guide/self-hosted-platform.md +13 -542
  102. package/skills/void/docs/reference/api.md +34 -34
  103. package/skills/void/docs/reference/cli.md +276 -31
  104. package/skills/void/docs/reference/config.md +1 -1
  105. package/skills/void/docs/reference/resource-inference.md +10 -10
  106. package/dist/cf-access-AJ1ehiFR.mjs +0 -42
  107. package/dist/cf-access-DsSsZUPr.mjs +0 -67
  108. package/dist/client-Clirrol3.mjs +0 -705
  109. package/dist/email-uKyQYUVY.mjs +0 -1016
@@ -55,6 +55,7 @@ function resolveRemoteMode(configRemote) {
55
55
  return configRemote === true;
56
56
  }
57
57
  const INTERNAL_ENV_KEY_SET = /* @__PURE__ */ new Set([
58
+ "__VOID_ACCESS_CREDENTIALS",
58
59
  "__VOID_TOKEN",
59
60
  "__VOID_PROJECT_ID",
60
61
  "__VOID_REMOTE",
@@ -1,9 +1,9 @@
1
1
  import { o as join } from "./dist-BrsS7cai.mjs";
2
- import { D as log, E as intro, O as note, k as outro, r as cliTitle } from "./output-tFQLLj26.mjs";
3
- import { b as readDeploymentPlatform, c as getToken, x as readProjectConfig } from "./auth-W9WII-mN.mjs";
2
+ import { A as outro, D as log, E as intro, k as note, r as cliTitle } from "./output-B0cfNSx5.mjs";
3
+ import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
4
4
  import { r as generateEnvTypes, t as findEnvFile } from "./env-types-BNPhro-M.mjs";
5
- import { c as fetchRemoteSecretNames, l as formatEnvReport, p as validateProdEnv } from "./env-validation-ENpMy6Ez.mjs";
6
- import { n as PlatformClient } from "./client-Clirrol3.mjs";
5
+ import { c as fetchRemoteSecretNames, l as formatEnvReport, p as validateProdEnv } from "./env-validation-CF6KvTRf.mjs";
6
+ import { n as PlatformClient } from "./client-BQBrZoCX.mjs";
7
7
  import { mkdirSync, writeFileSync } from "node:fs";
8
8
  //#region src/cli/env.ts
9
9
  async function runEnvCommand(root, args) {
@@ -24,7 +24,7 @@ async function runCheck(root, useRemoteSecrets) {
24
24
  const platform = readDeploymentPlatform(root);
25
25
  if (platform === "none") throw new Error("env: Deployment is disabled. Run `void init` to choose a platform.");
26
26
  if (platform === "cloudflare") {
27
- const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-CPTpRW6d.mjs").then((n) => n.t);
27
+ const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BzWnlC1_.mjs").then((n) => n.t);
28
28
  remoteSecrets = await listCloudflareSecrets(resolveCloudflareOperationContext(root));
29
29
  } else {
30
30
  const token = getToken(root);
@@ -2,7 +2,7 @@ import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
2
2
  import { l as resolve, n as dirname, o as join } from "./dist-BrsS7cai.mjs";
3
3
  import { i as voidWarn } from "./log-ChfPKsVd.mjs";
4
4
  import { t as findEnvFile } from "./env-types-BNPhro-M.mjs";
5
- import { a as loadLocalEnv, i as isClientEnvKey, r as findLegacyEnvFiles } from "./env-D4Emu-M_.mjs";
5
+ import { a as loadLocalEnv, i as isClientEnvKey, r as findLegacyEnvFiles } from "./env-DBKmK4vc.mjs";
6
6
  import { o as resolveWranglerArgv } from "./preset-lAy0B0BQ.mjs";
7
7
  import { existsSync, readFileSync } from "node:fs";
8
8
  import { pathToFileURL } from "node:url";
@@ -1003,6 +1003,8 @@ function secretListEnv(accountId, platform) {
1003
1003
  };
1004
1004
  scrub("CF_ACCESS_CLIENT_ID");
1005
1005
  scrub("CF_ACCESS_CLIENT_SECRET");
1006
+ scrub("VOID_ACCESS_CREDENTIALS");
1007
+ scrub("VOID_ACCESS_ORIGIN");
1006
1008
  scrub("WRANGLER_LOG_SANITIZE");
1007
1009
  env.WRANGLER_LOG_SANITIZE = "true";
1008
1010
  if (accountId) {
@@ -1,7 +1,7 @@
1
1
  import { c as relative, n as dirname, o as join } from "./dist-BrsS7cai.mjs";
2
- import { C as cancel, D as log, E as intro, F as isCancel, j as select, k as outro, r as cliTitle } from "./output-tFQLLj26.mjs";
2
+ import { A as outro, C as cancel, D as log, E as intro, I as isCancel, M as select, r as cliTitle } from "./output-B0cfNSx5.mjs";
3
3
  import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
4
- import { c as getDatabaseDialect, f as readConfig } from "./config-BQFq7QvD.mjs";
4
+ import { c as getDatabaseDialect, f as readConfig } from "./config-uNGuFsI2.mjs";
5
5
  import { n as ensureProjectTsconfig } from "./project-tsconfig-Ql2XsSQp.mjs";
6
6
  import { c as collectMigrations, n as listDrizzleArtifacts, t as assertJournalCoherence, u as readJournal } from "./validate-tBBN_dXH.mjs";
7
7
  import { n as writeDrizzleConfig } from "./config-NOG_U1aK.mjs";
@@ -1,6 +1,6 @@
1
- import { C as cancel, D as log, F as isCancel, N as text, c as import_picocolors, j as select, w as confirm } from "./output-tFQLLj26.mjs";
2
- import { c as getToken, d as openBrowser, i as createCodeVerifier, n as awaitBrowserCallback, r as createCodeChallenge, x as readProjectConfig } from "./auth-W9WII-mN.mjs";
3
- import { n as PlatformClient, o as parsePlatformErrorBody, t as PlatformApiError } from "./client-Clirrol3.mjs";
1
+ import { C as cancel, D as log, I as isCancel, M as select, P as text, c as import_picocolors, w as confirm } from "./output-B0cfNSx5.mjs";
2
+ import { S as readProjectConfig, f as openBrowser, i as createCodeVerifier, l as getToken, n as awaitBrowserCallback, r as createCodeChallenge } from "./auth-DPl6kck4.mjs";
3
+ import { n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-BQBrZoCX.mjs";
4
4
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project--Vxawf7z.mjs";
5
5
  import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
6
6
  import { randomBytes } from "node:crypto";
@@ -30,7 +30,6 @@ function describeConnectError(status, errorCode) {
30
30
  if (code.includes("not active")) return "Installation is not active. Re-install the GitHub App and try again.";
31
31
  }
32
32
  if (status === 400 && code.includes("not accessible")) return "Repository not accessible by this installation. Check the App has access to it.";
33
- if (status === 403) return "You don't have access to this project.";
34
33
  if (status === 404) return "Project or installation not found.";
35
34
  return null;
36
35
  }
@@ -46,6 +45,11 @@ function describeUpdateError(status, errorCode) {
46
45
  if (status === 404 && code.includes("connection not found")) return "This project is not connected to a GitHub repository. Run `void github connect` first.";
47
46
  return describeConnectError(status, code);
48
47
  }
48
+ function describeGithubClientError(error, describe) {
49
+ const body = parsePlatformErrorBody(error.body);
50
+ if (platformErrorMessage(body) || error.status === 403) return error.message;
51
+ return describe(error.status, error.code);
52
+ }
49
53
  /**
50
54
  * Extract `owner/repo` from a `https://github.com/owner/repo(.git)?` URL.
51
55
  * Returns null for non-GitHub URLs or null input.
@@ -518,16 +522,14 @@ async function runConnect(root, client, args) {
518
522
  codeVerifier: grant.codeVerifier
519
523
  });
520
524
  } catch (retryErr) {
521
- if (retryErr instanceof PlatformApiError && retryErr.status === 403) {
525
+ if (retryErr instanceof PlatformApiError && retryErr.status === 403 && retryErr.code === "invalid connect grant") {
522
526
  log.error("connect: GitHub authorization failed or expired. Run `void github connect` again.");
523
527
  process.exit(1);
524
528
  }
525
529
  throw retryErr;
526
530
  }
527
531
  } else {
528
- const body = parsePlatformErrorBody(err.body);
529
- const code = body?.error ?? body?.message ?? "";
530
- const message = describeConnectError(err.status, code);
532
+ const message = describeGithubClientError(err, describeConnectError);
531
533
  if (message !== null) {
532
534
  log.error(`connect: ${message}`);
533
535
  process.exit(1);
@@ -588,9 +590,7 @@ async function runGithubUpdate(root, client, args) {
588
590
  current = await client.getGithubConnection(projectId);
589
591
  } catch (err) {
590
592
  if (err instanceof PlatformApiError) {
591
- const body = parsePlatformErrorBody(err.body);
592
- const code = body?.error ?? body?.message ?? "";
593
- const message = describeUpdateError(err.status, code);
593
+ const message = describeGithubClientError(err, describeUpdateError);
594
594
  if (message !== null) {
595
595
  log.error(`update: ${message}`);
596
596
  process.exit(1);
@@ -668,9 +668,7 @@ async function runGithubUpdate(root, client, args) {
668
668
  updated = await client.updateGithubConnection(projectId, patch);
669
669
  } catch (err) {
670
670
  if (err instanceof PlatformApiError) {
671
- const body = parsePlatformErrorBody(err.body);
672
- const code = body?.error ?? body?.message ?? "";
673
- const message = describeUpdateError(err.status, code);
671
+ const message = describeGithubClientError(err, describeUpdateError);
674
672
  if (message !== null) {
675
673
  log.error(`update: ${message}`);
676
674
  process.exit(1);
@@ -734,9 +732,7 @@ async function runStatus(root, client, args) {
734
732
  connection = await client.getGithubConnection(projectId);
735
733
  } catch (err) {
736
734
  if (err instanceof PlatformApiError) {
737
- const body = parsePlatformErrorBody(err.body);
738
- const code = body?.error ?? body?.message ?? "";
739
- const message = describeUpdateError(err.status, code);
735
+ const message = describeGithubClientError(err, describeUpdateError);
740
736
  if (message !== null) {
741
737
  log.error(`status: ${message}`);
742
738
  process.exit(1);
@@ -803,7 +799,7 @@ async function runGithubDisconnect(root, client, args) {
803
799
  log.info("This project is not connected to a GitHub repository. Nothing to disconnect.");
804
800
  return;
805
801
  }
806
- const message = describeConnectError(err.status, code);
802
+ const message = describeGithubClientError(err, describeConnectError);
807
803
  if (message !== null) {
808
804
  log.error(`disconnect: ${message}`);
809
805
  process.exit(1);
@@ -833,9 +829,7 @@ async function runGithubDisconnect(root, client, args) {
833
829
  await client.deleteGithubConnection(projectId);
834
830
  } catch (err) {
835
831
  if (err instanceof PlatformApiError) {
836
- const body = parsePlatformErrorBody(err.body);
837
- const code = body?.error ?? body?.message ?? "";
838
- const message = describeConnectError(err.status, code);
832
+ const message = describeGithubClientError(err, describeConnectError);
839
833
  if (message !== null) {
840
834
  log.error(`disconnect: ${message}`);
841
835
  process.exit(1);
@@ -1,5 +1,5 @@
1
1
  import { o as join } from "./dist-BrsS7cai.mjs";
2
- import { a as convertRedirectsConfig, d as parseHostPrefixedSource, i as convertHeadersConfig, o as convertRewritesConfig, r as convertFallbacksConfig, s as countSplats, t as VALID_REDIRECT_STATUSES, u as isProtocolRelative } from "./config-BQFq7QvD.mjs";
2
+ import { a as convertRedirectsConfig, d as parseHostPrefixedSource, i as convertHeadersConfig, o as convertRewritesConfig, r as convertFallbacksConfig, s as countSplats, t as VALID_REDIRECT_STATUSES, u as isProtocolRelative } from "./config-uNGuFsI2.mjs";
3
3
  import { i as voidWarn } from "./log-ChfPKsVd.mjs";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  //#region src/cli/headers.ts