void 0.21.8 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/{account-cmd-CQ2wi4Th.mjs → account-cmd-CjyxcGkM.mjs} +4 -4
  2. package/dist/{auth-link-B_lceSHK.mjs → auth-link-BLO4ptzo.mjs} +4 -4
  3. package/dist/{auth-router-cZq0HuWe.mjs → auth-router-ZUg9MF_U.mjs} +5 -5
  4. package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-BxR5FROK.mjs} +3 -3
  5. package/dist/{cache-7_UeZdTk.mjs → cache-D0sWhgKI.mjs} +3 -3
  6. package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-D4NUqFbi.mjs} +3 -3
  7. package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BJ6yGEIS.mjs} +139 -62
  8. package/dist/cli/cf-compat.mjs +164 -42
  9. package/dist/cli/cli.mjs +73 -44
  10. package/dist/cli/env-schema-probe.d.mts +1 -1
  11. package/dist/{client-QTl6ko_D.mjs → client-BTZ3XkrB.mjs} +25 -0
  12. package/dist/client-Czz8o5jP.mjs +2 -0
  13. package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-DQkqoMYa.mjs} +1 -6
  14. package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BKlfGHAy.mjs} +6 -7
  15. package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-Ctmrw579.mjs} +3 -3
  16. package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-B9tzgjmf.mjs} +10 -39
  17. package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-BT6OWFBk.mjs} +1 -1
  18. package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
  19. package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
  20. package/dist/{config-CF69HgXc.d.mts → config-VavjpDnp.d.mts} +1 -2
  21. package/dist/config-entry.d.mts +1 -1
  22. package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
  23. package/dist/{connect-BY38i-9E.mjs → connect-Dg-WkW-C.mjs} +5 -5
  24. package/dist/{create-project-BniEV0OW.mjs → create-project-DdoqwFLF.mjs} +1 -1
  25. package/dist/{create-project-DBfFSZKY.mjs → create-project-l9J7pbtm.mjs} +8 -4
  26. package/dist/{db-BIo37Y7H.mjs → db-gp2sCXyN.mjs} +14 -14
  27. package/dist/{delete-D6dZ9B6B.mjs → delete-TTedbH6B.mjs} +3 -3
  28. package/dist/{deploy-BM_LoBXC.mjs → deploy-B19L2Bra.mjs} +1 -1
  29. package/dist/{deploy-C0JaQSWS.mjs → deploy-CH-o2CaZ.mjs} +47 -36
  30. package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
  31. package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
  32. package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
  33. package/dist/{domain-Dmhvb2oU.mjs → domain-JRF59P_r.mjs} +4 -4
  34. package/dist/{email-dMnE_Lat.mjs → email-Bo6G9LOZ.mjs} +6 -6
  35. package/dist/{env-Csi-tMbT.mjs → env-BYOrWQnv.mjs} +4 -4
  36. package/dist/{env-public-D_6u46fX.d.mts → env-public-BxU_0yTL.d.mts} +2 -1
  37. package/dist/gen-CNJ62MM7.mjs +2 -0
  38. package/dist/{gen-Dz3X1Qab.mjs → gen-sCtlCOdA.mjs} +3 -3
  39. package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-0-7PexDq.mjs} +5 -7
  40. package/dist/{handler-BXJTXd02.d.mts → handler-HEcZsaij.d.mts} +2 -1
  41. package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
  42. package/dist/help-CmZzxUba.mjs +2 -0
  43. package/dist/{help-DC7gdz7L.mjs → help-GKtwl07I.mjs} +124 -4
  44. package/dist/index.d.mts +1 -1
  45. package/dist/index.mjs +53 -24
  46. package/dist/{init-CJSnEcuj.mjs → init-FZx3Elvz.mjs} +13 -13
  47. package/dist/{link-CsHOinF7.mjs → link-BrQfb_CU.mjs} +4 -4
  48. package/dist/{list-CDb-4bZ1.mjs → list-D44jmIAM.mjs} +4 -4
  49. package/dist/{live-CKiJilLr.d.mts → live-CKJlvlNp.d.mts} +1 -1
  50. package/dist/{local-d1-CC8sKFGu.mjs → local-d1-Bg9OzEEO.mjs} +1 -1
  51. package/dist/{login-DZldyb8c.mjs → login-CAsAsQ-_.mjs} +4 -4
  52. package/dist/login-CGcRKEoi.mjs +2 -0
  53. package/dist/{logs-BdfiOezj.mjs → logs-BjKvFnVM.mjs} +4 -4
  54. package/dist/{migrate-B8KuoYsO.mjs → migrate-BPITvDJN.mjs} +4 -4
  55. package/dist/migrate-CYfbKkXh.mjs +2 -0
  56. package/dist/{node-BM43oz4G.mjs → node-Dt7z256D.mjs} +1 -1
  57. package/dist/{operator-cmd-B9dbG3Od.mjs → operator-cmd-BK5CCiT9.mjs} +4 -4
  58. package/dist/output-Dm_A4Tbv.mjs +81 -0
  59. package/dist/pages/client.d.mts +1 -1
  60. package/dist/pages/index.d.mts +1 -1
  61. package/dist/pages/index.mjs +2 -2
  62. package/dist/pages/islands-plugin.d.mts +16 -6
  63. package/dist/pages/islands-plugin.mjs +1 -1
  64. package/dist/pages/protocol.d.mts +2 -2
  65. package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
  66. package/dist/{platform-auth-config-Bex45lQt.mjs → platform-auth-config-BlN8xTdD.mjs} +3 -3
  67. package/dist/{platform-auth-protection-Dma02l6-.mjs → platform-auth-protection-7d5aV2Jg.mjs} +3 -3
  68. package/dist/{platform-auth-recovery-COOhMCvx.mjs → platform-auth-recovery-Dxij8ZbR.mjs} +3 -3
  69. package/dist/{platform-cmd-BtxZrT6w.mjs → platform-cmd-B3hwKrFK.mjs} +5 -5
  70. package/dist/{platform-cmd-CjNB09OF.mjs → platform-cmd-E0FuL212.mjs} +1 -1
  71. package/dist/{platform-domain-DppaTARe.mjs → platform-domain-D6Xcy9ZX.mjs} +36 -9
  72. package/dist/{platform-lifecycle-CYll-oKE.mjs → platform-lifecycle-DMh_qrry.mjs} +1 -1
  73. package/dist/{platform-lifecycle-BpDlxT3t.mjs → platform-lifecycle-k0E0xoxx.mjs} +769 -59
  74. package/dist/{platform-management-BKYenDlE.mjs → platform-management-Brz_BDiT.mjs} +72 -10
  75. package/dist/{platform-management-BS5r6Ao8.mjs → platform-management-DOtss0BN.mjs} +1 -1
  76. package/dist/{platform-recovery-dJ5Me-I0.mjs → platform-recovery-BvtcXON5.mjs} +2 -2
  77. package/dist/prepare-Bm3iq-u4.mjs +2 -0
  78. package/dist/{prepare-DyZ-Yok5.mjs → prepare-C-6YZyyg.mjs} +3 -3
  79. package/dist/{prepare-C3kt3Rst.mjs → prepare-CRhJbVrG.mjs} +1 -1
  80. package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-BZLCqOqw.mjs} +29 -15
  81. package/dist/{project-team-BkbYIsXN.mjs → project-team-BvgM0WoX.mjs} +3 -3
  82. package/dist/{project-token-C8xEEQnB.mjs → project-token-l5DqK6Az.mjs} +3 -3
  83. package/dist/project-zero-trust-v6Mvpp8y.mjs +63 -0
  84. package/dist/{protocol-ZH3jP4a7.d.mts → protocol-BBa6cstI.d.mts} +1 -1
  85. package/dist/{provision-BhreDAOS.mjs → provision-C4IGqkBf.mjs} +24 -19
  86. package/dist/{provision-DNtrtaVD.mjs → provision-Fr9pRqce.mjs} +1 -1
  87. package/dist/{requests-DFyhBMaf.mjs → requests-DN-BbNiM.mjs} +3 -3
  88. package/dist/{rollback-DHHxXZiS.mjs → rollback-D7rzSaZM.mjs} +4 -4
  89. package/dist/runtime/env-public.d.mts +1 -1
  90. package/dist/runtime/handler.d.mts +1 -1
  91. package/dist/runtime/live-client.d.mts +1 -1
  92. package/dist/runtime/live.d.mts +1 -1
  93. package/dist/runtime/sandbox-container.d.mts +3 -0
  94. package/dist/runtime/sandbox-container.mjs +2 -0
  95. package/dist/runtime/sandbox.d.mts +4 -32
  96. package/dist/runtime/sandbox.mjs +118 -72
  97. package/dist/runtime/validator.d.mts +1 -1
  98. package/dist/runtime/ws-server.d.mts +1 -1
  99. package/dist/runtime/ws.d.mts +1 -1
  100. package/dist/sandbox-container-4fdqLnyb.mjs +279 -0
  101. package/dist/sandbox-container-DdNEBfCc.d.mts +72 -0
  102. package/dist/sandbox-qpNBT8a3.d.mts +49 -0
  103. package/dist/{secret-DN9sSNiV.mjs → secret-BOtOl_cb.mjs} +4 -4
  104. package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
  105. package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
  106. package/dist/{wrangler-BymcxrRa.mjs → wrangler-DQF1vKyf.mjs} +37 -27
  107. package/dist/{ws-BwcqizuH.d.mts → ws-BoY7vQML.d.mts} +1 -1
  108. package/package.json +40 -32
  109. package/sandbox.Dockerfile +4 -0
  110. package/schema.json +10 -22
  111. package/skills/void/SKILL.md +2 -0
  112. package/skills/void/docs/guide/deployment.md +1 -1
  113. package/skills/void/docs/guide/edge/revalidation.md +1 -1
  114. package/skills/void/docs/guide/edge/static-assets.md +1 -0
  115. package/skills/void/docs/guide/platform/administration/zero-trust.md +318 -0
  116. package/skills/void/docs/guide/platform/development/local.md +2 -2
  117. package/skills/void/docs/guide/platform/installation/domains.md +1 -1
  118. package/skills/void/docs/guide/platform/installation/first-deployment.md +4 -0
  119. package/skills/void/docs/guide/platform/installation/prerequisites.md +1 -1
  120. package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
  121. package/skills/void/docs/guide/platform-administration.md +1 -0
  122. package/skills/void/docs/guide/sandboxes.md +70 -41
  123. package/skills/void/docs/integrations/cloudflare.md +1 -1
  124. package/skills/void/docs/reference/api.md +35 -35
  125. package/skills/void/docs/reference/cli.md +68 -6
  126. package/skills/void/docs/reference/config.md +16 -16
  127. package/dist/client-4cDVv7BO.mjs +0 -2
  128. package/dist/gen-Vnv2f65C.mjs +0 -2
  129. package/dist/help-DQMfeKMz.mjs +0 -2
  130. package/dist/login-t6rndSRW.mjs +0 -2
  131. package/dist/migrate-TsHGBnDA.mjs +0 -2
  132. package/dist/prepare-BZXkjdNe.mjs +0 -2
package/dist/index.mjs CHANGED
@@ -1,28 +1,28 @@
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-BVqXeR_h.mjs";
3
- import { d as require_picocolors } from "./output-CCH48AMM.mjs";
4
- import { G as resolveWorkerDirName, St as hasDocumentRoutes, V as resolveDistDir, ct as prerenderPagesNode, dt as collectRevalidate, ft as hasRevalidate, mt as SEND_EMAIL_BINDING, ot as generateQueueResolverSource, pt as scanDurableObjectModules, st as prerenderPages, ut as collectPages, wt as resolveAssetRoutingPolicy, xt as hasApiRoutes } from "./deploy-C0JaQSWS.mjs";
3
+ import { t as require_picocolors } from "./picocolors-BTps1_gs.mjs";
4
+ import { G as resolveWorkerDirName, St as hasDocumentRoutes, V as resolveDistDir, ct as prerenderPagesNode, dt as collectRevalidate, ft as hasRevalidate, mt as SEND_EMAIL_BINDING, ot as generateQueueResolverSource, pt as scanDurableObjectModules, st as prerenderPages, ut as collectPages, wt as resolveAssetRoutingPolicy, xt as hasApiRoutes } from "./deploy-CH-o2CaZ.mjs";
5
5
  import { i as resolveProjectPaths, n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-GgcMozYz.mjs";
6
6
  import { n as loadVoidAuthConfig, t as findVoidAuthConfig } from "./config-DPByhVck.mjs";
7
7
  import { r as scopedAccessCredentials } from "./cf-access-DRsQRe6k.mjs";
8
8
  import { a as getApiUrl, c as getToken, o as getProxyUrl, u as isStagingMode } from "./auth-DLNN0D3Z.mjs";
9
9
  import { r as ensurePlatformProxyAccess } from "./cf-access-P0iZnu0q.mjs";
10
10
  import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-C0Fqu05O.mjs";
11
- import { d as isNodeTarget, h as resolveBindingNames, m as readConfig, u as getDatabaseDialect } from "./config-CafTW6Cz.mjs";
12
- import { C as readWranglerWebSocketTombstones, D as syncWranglerWebSockets, E as syncWranglerDurableObjects, L as materializeCloudflareConfig, M as isSandboxEnabled, P as resolveSandboxConfig, T as syncWranglerBindings, V as stashCloudflareDeployPointer, a as LIVE_MIGRATION_TAG, d as ensureWranglerNodejsAlsFlag, g as readExistingLiveBindingConfig, h as normalizeWranglerCompatibilityFlags, j as SANDBOX_MIGRATION_TAG, l as ensureWranglerCompat, m as nextDurableObjectMigrationTag, p as hasDurableObjectSqliteMigration, u as ensureWranglerCompatibilityDate, w as resolveLiveBindingConfig, y as readWranglerCompat, z as restoreCloudflarePreviewPointer } from "./wrangler-BymcxrRa.mjs";
11
+ import { d as isNodeTarget, h as resolveBindingNames, m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs";
12
+ import { B as materializeCloudflareConfig, C as readWranglerWebSocketTombstones, D as syncWranglerWebSockets, E as syncWranglerDurableObjects, H as restoreCloudflarePreviewPointer, I as resolveSandboxConfig, L as sandboxContainerConfig, M as SANDBOX_MIGRATION_TAG, N as assertSandboxNamespaceConfig, P as isSandboxEnabled, T as syncWranglerBindings, W as stashCloudflareDeployPointer, a as LIVE_MIGRATION_TAG, d as ensureWranglerNodejsAlsFlag, g as readExistingLiveBindingConfig, h as normalizeWranglerCompatibilityFlags, j as DEFAULT_SANDBOX_CLASS_NAME, l as ensureWranglerCompat, m as nextDurableObjectMigrationTag, p as hasDurableObjectSqliteMigration, u as ensureWranglerCompatibilityDate, w as resolveLiveBindingConfig, y as readWranglerCompat } from "./wrangler-DQF1vKyf.mjs";
13
13
  import { i as voidWarn, n as voidError, r as voidLog, t as setShowTimestamp } from "./log-ChfPKsVd.mjs";
14
- import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-BOg_velo.mjs";
14
+ import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-DWi2IXWx.mjs";
15
15
  import { n as ensureProjectTsconfig, r as writeFileIfChanged } from "./project-tsconfig-B8GeM0RM.mjs";
16
16
  import { i as isMemberExpression, n as isIdentifier, r as isLiteral } from "./ast-CPGPjb0V.mjs";
17
17
  import { i as resolveLayoutIds } from "./scan-4tfN-PSn.mjs";
18
18
  import { a as scanJobsSync, i as scanQueuesSync, n as scanRoutePatternsSync, r as scanRoutes, t as scanMiddlewareSync } from "./scan-ClYmX3sa.mjs";
19
19
  import { c as inferBindingsFromSource, i as inferProjectBindings, l as walk, n as FRAMEWORK_SCAN_DIRS, r as detectFramework, s as scanWebSocketRoutesSync, t as DEFAULT_SCAN_DIRS } from "./plugin-inference-BMfKRSqE.mjs";
20
- import { n as writeLocalD1PersistState, t as resolveLocalD1Target } from "./local-d1-CC8sKFGu.mjs";
20
+ import { n as writeLocalD1PersistState, t as resolveLocalD1Target } from "./local-d1-Bg9OzEEO.mjs";
21
21
  import { n as parseDotenvFile } from "./dotenv-VQxupEUv.mjs";
22
22
  import { i as generateDbDts, n as generateQueueTypes, r as DRIZZLE_OPERATORS, t as generateRouteTypes } from "./route-types-Clm4WD0B.mjs";
23
23
  import { t as discoverSchema } from "./discover-BcPPiF1o.mjs";
24
24
  import { _ as parseCapturedMessage, a as DEV_INBOX_ENV_VAR, c as DEV_INBOX_TOKEN_ENV_VAR, f as clearDevBuffer, g as listDevMessages, l as DEV_INBOX_TOKEN_HEADER, m as findDevMessage, n as DEV_INBOX_ACK_VALUE, o as DEV_INBOX_MAX_CAPTURE_BYTES, s as DEV_INBOX_PREFIX, t as DEV_INBOX_ACK_HEADER, u as DEV_INBOX_TOKEN_QUERY, v as pushToDevBuffer, y as registerEmailSink } from "./dev-inbox-P0u4tM8Y.mjs";
25
- import { t as MagicString } from "./dist-BR1quN_w.mjs";
25
+ import { t as MagicString } from "./dist-AoCzRTJE.mjs";
26
26
  import { n as findEnvFileForPaths, r as generateEnvTypes, t as findEnvFile } from "./env-types-C2_bIk_b.mjs";
27
27
  import { y as loadUserEnvFile } from "./env-validation-BB4GkLxn.mjs";
28
28
  import { a as loadLocalEnv, o as resolveRemoteMode, r as findLegacyEnvFiles, s as stripInternalEnvKeys, t as CLIENT_ENV_PREFIX$2 } from "./env-_v349JBd.mjs";
@@ -2035,7 +2035,7 @@ function migrationPlugin(root, dialect, databaseId = "local", persistRoot = join
2035
2035
  if (applied.length > 0) voidLog(`Applied ${applied.length} migration(s): ${applied.join(", ")}`);
2036
2036
  }
2037
2037
  if (auth?.enabled) {
2038
- const { runLocalVoidAuthMigrations } = await import("./node-BM43oz4G.mjs");
2038
+ const { runLocalVoidAuthMigrations } = await import("./node-Dt7z256D.mjs");
2039
2039
  await runLocalVoidAuthMigrations(root, dialect, persistRoot, databaseId, auth.configPath);
2040
2040
  voidLog("Applied Better Auth migrations");
2041
2041
  }
@@ -4024,12 +4024,39 @@ function compileAssetFallbackHelper(assetsDir = "assets", serveSpaFallback = fal
4024
4024
  }
4025
4025
  return response;` : ` return response;`;
4026
4026
  return `
4027
+ const __voidAssetContentTypes = {
4028
+ ".avif": "image/avif",
4029
+ ".css": "text/css; charset=utf-8",
4030
+ ".gif": "image/gif",
4031
+ ".html": "text/html; charset=utf-8",
4032
+ ".ico": "image/x-icon",
4033
+ ".jpeg": "image/jpeg",
4034
+ ".jpg": "image/jpeg",
4035
+ ".js": "text/javascript; charset=utf-8",
4036
+ ".json": "application/json; charset=utf-8",
4037
+ ".mjs": "text/javascript; charset=utf-8",
4038
+ ".png": "image/png",
4039
+ ".svg": "image/svg+xml",
4040
+ ".txt": "text/plain; charset=utf-8",
4041
+ ".wasm": "application/wasm",
4042
+ ".webp": "image/webp",
4043
+ ".woff": "font/woff",
4044
+ ".woff2": "font/woff2",
4045
+ };
4046
+
4027
4047
  async function serveWithAssets(request, env, response) {
4028
4048
  if (response.status !== 404 || !env.ASSETS || (request.method !== "GET" && request.method !== "HEAD")) return response;
4029
4049
  const asset = await env.ASSETS.fetch(new Request(request.url, { method: request.method, headers: request.headers }));
4030
4050
  if (asset.status !== 404) {
4031
4051
  const res = new Response(asset.body, asset);
4032
- if (new URL(request.url).pathname.startsWith(${JSON.stringify("/" + assetsDir + "/")})) {
4052
+ const pathname = new URL(request.url).pathname;
4053
+ // Directly uploaded assets can reach the binding without a MIME type.
4054
+ if (!res.headers.get("Content-Type")) {
4055
+ const filename = pathname.slice(pathname.lastIndexOf("/") + 1);
4056
+ const contentType = __voidAssetContentTypes[filename.slice(filename.lastIndexOf(".")).toLowerCase()];
4057
+ if (contentType) res.headers.set("Content-Type", contentType);
4058
+ }
4059
+ if (pathname.startsWith(${JSON.stringify("/" + assetsDir + "/")})) {
4033
4060
  res.headers.set("Cache-Control", "public, max-age=31536000, immutable");
4034
4061
  } else {
4035
4062
  res.headers.set("Cache-Control", "no-store");
@@ -4064,11 +4091,12 @@ function compileWorkerEntry(options = {}) {
4064
4091
  const remoteBindingNames = JSON.stringify(remote?.bindingNames);
4065
4092
  const createRemoteEnvCall = `createRemoteEnv(env${remote?.bindingNames ? `, ${remoteBindingNames}` : ""})`;
4066
4093
  const hasSandbox = sandbox === true || typeof sandbox === "object";
4067
- const sandboxClassName = typeof sandbox === "object" ? sandbox.className ?? "Sandbox" : "Sandbox";
4094
+ const sandboxClassName = typeof sandbox === "object" ? sandbox.className ?? "SandboxV1" : DEFAULT_SANDBOX_CLASS_NAME;
4068
4095
  const sandboxBindingName = typeof sandbox === "object" ? sandbox.bindingName ?? "SANDBOX" : "SANDBOX";
4069
4096
  const sandboxRuntimePath = typeof sandbox === "object" ? sandbox.runtimePath ?? "void/sandbox" : "void/sandbox";
4070
4097
  const sandboxImport = hasSandbox ? `import { VoidPlatformSandbox as __VoidSandbox, __setSandboxBindingName } from ${JSON.stringify(sandboxRuntimePath)};\n` : "";
4071
- const sandboxExport = hasSandbox ? sandboxClassName === "Sandbox" ? `export { __VoidSandbox as Sandbox };\n__setSandboxBindingName(${JSON.stringify(sandboxBindingName)});\n` : `export class ${sandboxClassName} extends __VoidSandbox {}\n__setSandboxBindingName(${JSON.stringify(sandboxBindingName)});\n` : "";
4098
+ const sandboxInstanceType = typeof sandbox === "object" ? sandbox.instanceType : void 0;
4099
+ const sandboxExport = hasSandbox ? sandboxClassName === "SandboxV1" && !sandboxInstanceType ? `export { __VoidSandbox as SandboxV1 };\n__setSandboxBindingName(${JSON.stringify(sandboxBindingName)});\n` : `export class ${sandboxClassName} extends __VoidSandbox {${sandboxInstanceType ? ` protected override instanceType = ${JSON.stringify(sandboxInstanceType)} as const; ` : ""}}\n__setSandboxBindingName(${JSON.stringify(sandboxBindingName)});\n` : "";
4072
4100
  const hasLive = live === true || typeof live === "object";
4073
4101
  const liveBindingName = typeof live === "object" ? live.bindingName ?? "VOID_LIVE" : "VOID_LIVE";
4074
4102
  const liveClassName = typeof live === "object" ? live.className ?? "VoidLiveStreamDurableObject" : "VoidLiveStreamDurableObject";
@@ -4915,6 +4943,7 @@ function routingPlugin(root, options) {
4915
4943
  sandbox: options.hasSandbox ? {
4916
4944
  bindingName: options.sandboxBindingName,
4917
4945
  className: options.sandboxClassName,
4946
+ instanceType: options.sandboxInstanceType,
4918
4947
  runtimePath: sandboxRuntimePath
4919
4948
  } : false,
4920
4949
  live: options.live,
@@ -5007,6 +5036,7 @@ function routingPlugin(root, options) {
5007
5036
  sandbox: options.hasSandbox ? {
5008
5037
  bindingName: options.sandboxBindingName,
5009
5038
  className: options.sandboxClassName,
5039
+ instanceType: options.sandboxInstanceType,
5010
5040
  runtimePath: sandboxRuntimePath
5011
5041
  } : false,
5012
5042
  hasEmail: hasEmailHandlers(),
@@ -5073,6 +5103,7 @@ function routingPlugin(root, options) {
5073
5103
  sandbox: options.hasSandbox ? {
5074
5104
  bindingName: options.sandboxBindingName,
5075
5105
  className: options.sandboxClassName,
5106
+ instanceType: options.sandboxInstanceType,
5076
5107
  runtimePath: sandboxRuntimePath
5077
5108
  } : false,
5078
5109
  hasEmail: hasEmailHandlers(),
@@ -5540,8 +5571,8 @@ function readVoidDevCredentials(root) {
5540
5571
  * block the server. On completion, writes project.json and restarts the server.
5541
5572
  */
5542
5573
  async function runAiSetupPrompt(root, token, apiUrl, server) {
5543
- const { select, text, isCancel, log } = await import("./dist-C5fND3R0.mjs");
5544
- const { PlatformClient } = await import("./client-4cDVv7BO.mjs");
5574
+ const { select, text, isCancel, log } = await import("./dist-BuDuKZJv.mjs");
5575
+ const { PlatformClient } = await import("./client-Czz8o5jP.mjs");
5545
5576
  const { attachSelectedPlatform, writeProjectConfig } = await import("./project-BuUwfj6f.mjs");
5546
5577
  const { inferDefaultSlug } = await import("./resolve-project-DtbidV4y.mjs");
5547
5578
  const client = new PlatformClient(token, apiUrl);
@@ -5570,7 +5601,7 @@ async function runAiSetupPrompt(root, token, apiUrl, server) {
5570
5601
  let slug;
5571
5602
  if (result === "__create__") {
5572
5603
  const { validateProjectSlug } = await import("./project-slug-DofjTFd-.mjs");
5573
- const { createProjectWithSlugRetry } = await import("./create-project-BniEV0OW.mjs");
5604
+ const { createProjectWithSlugRetry } = await import("./create-project-DdoqwFLF.mjs");
5574
5605
  let created;
5575
5606
  try {
5576
5607
  created = await createProjectWithSlugRetry(client, inferDefaultSlug(root), async (defaultSlug) => {
@@ -6038,23 +6069,20 @@ function voidPlugin(options) {
6038
6069
  if (migrationAdditions.length > 0) result.migrations = [...existingMigrations, ...migrationAdditions];
6039
6070
  }
6040
6071
  if (bindings.needsSandbox && sandboxConfig) {
6072
+ assertSandboxNamespaceConfig({
6073
+ ...resolved,
6074
+ ...result
6075
+ }, sandboxConfig);
6041
6076
  const existingDurableObjectBindings = (result.durable_objects ?? resolved.durable_objects)?.bindings ?? [];
6042
6077
  if (!existingDurableObjectBindings.some((binding) => binding.name === sandboxConfig.binding)) result.durable_objects = { bindings: [...existingDurableObjectBindings, {
6043
6078
  name: sandboxConfig.binding,
6044
6079
  class_name: sandboxConfig.className
6045
6080
  }] };
6046
- const existingContainers = result.containers ?? resolved.containers ?? [];
6047
- if (!existingContainers.some((container) => container.class_name === sandboxConfig.className)) result.containers = [...existingContainers, {
6048
- name: sandboxConfig.containerName,
6049
- class_name: sandboxConfig.className,
6050
- image: sandboxConfig.image,
6051
- ...sandboxConfig.imageBuildContext && { image_build_context: sandboxConfig.imageBuildContext },
6052
- ...sandboxConfig.instanceType && { instance_type: sandboxConfig.instanceType },
6053
- ...sandboxConfig.maxInstances != null && { max_instances: sandboxConfig.maxInstances }
6054
- }];
6081
+ result.containers = [...(result.containers ?? resolved.containers ?? []).filter((container) => container.class_name !== sandboxConfig.className), sandboxContainerConfig(sandboxConfig)];
6082
+ resolved.containers = [];
6055
6083
  const currentMigrations = result.migrations ?? resolved.migrations;
6056
6084
  const existingMigrations = Array.isArray(currentMigrations) ? currentMigrations : [];
6057
- if (!existingMigrations.some((migration) => migration.tag === "void-sandbox-v1" || migration.new_sqlite_classes?.includes(sandboxConfig.className))) result.migrations = [...existingMigrations, {
6085
+ if (!existingMigrations.some((migration) => migration.tag === "void-sandbox-v2" || migration.new_sqlite_classes?.includes(sandboxConfig.className))) result.migrations = [...existingMigrations, {
6058
6086
  tag: SANDBOX_MIGRATION_TAG,
6059
6087
  new_sqlite_classes: [sandboxConfig.className]
6060
6088
  }];
@@ -6426,6 +6454,7 @@ function voidPlugin(options) {
6426
6454
  },
6427
6455
  sandboxBindingName: sandboxConfig?.binding,
6428
6456
  sandboxClassName: sandboxConfig?.className,
6457
+ sandboxInstanceType: sandboxConfig?.instanceType,
6429
6458
  get live() {
6430
6459
  return shouldEmitLive() ? liveConfig : void 0;
6431
6460
  },
@@ -1,25 +1,25 @@
1
1
  import { a as join, i as isAbsolute, l as relative, n as dirname, t as basename, u as resolve } from "./dist-BVqXeR_h.mjs";
2
- import { r as cliTitle } from "./output-CCH48AMM.mjs";
3
2
  import { n as readProjectPaths, o as TYPED_CONFIG_FILE } from "./project-paths-GgcMozYz.mjs";
4
3
  import { c as getToken, u as isStagingMode } from "./auth-DLNN0D3Z.mjs";
5
4
  import { d as writeProjectConfig, i as readDeploymentPlatform, l as writeDeploymentPlatform, o as readProjectConfig, t as attachSelectedPlatform } from "./project-C0Fqu05O.mjs";
6
- import { m as readConfig, u as getDatabaseDialect } from "./config-CafTW6Cz.mjs";
7
- import { L as materializeCloudflareConfig, i as LATEST_KNOWN_COMPAT_DATE, k as writeProvisionedWranglerConfig } from "./wrangler-BymcxrRa.mjs";
5
+ import { m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs";
6
+ import { B as materializeCloudflareConfig, i as LATEST_KNOWN_COMPAT_DATE, k as writeProvisionedWranglerConfig } from "./wrangler-DQF1vKyf.mjs";
8
7
  import { n as ensureProjectTsconfig, t as createProjectTsconfig } from "./project-tsconfig-B8GeM0RM.mjs";
9
8
  import { r as detectFramework } from "./plugin-inference-BMfKRSqE.mjs";
10
9
  import { n as parseDotenvFile, t as expandDotenv } from "./dotenv-VQxupEUv.mjs";
11
- import { t as MagicString } from "./dist-BR1quN_w.mjs";
12
- import { B as text, E as confirm, I as select, N as note, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
10
+ import { t as MagicString } from "./dist-AoCzRTJE.mjs";
11
+ import { B as text, E as confirm, I as select, N as note, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
13
12
  import { t as writeDrizzleConfig } from "./config-D8MOgiQV.mjs";
14
13
  import { n as getPackageDir, t as detectAgents } from "./agents-B_pX_HmQ.mjs";
15
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
14
+ import { n as PlatformClient } from "./client-BTZ3XkrB.mjs";
16
15
  import { r as formatProjectCommand } from "./preset-UHj9ARyP.mjs";
17
- import { n as writeVoidProjectConfig, t as canRewriteVoidProjectConfig } from "./config-write-BSduPMY8.mjs";
18
- import { i as migrateFrameworkAdapterPaths, t as migrateLegacyVoidConfig } from "./migrate-B8KuoYsO.mjs";
19
- import { i as promptProjectSelection, r as promptAndCreateProject } from "./create-project-DBfFSZKY.mjs";
20
- import { t as promptForLoginToken } from "./login-DZldyb8c.mjs";
21
- import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-BtxZrT6w.mjs";
22
- import { t as connectCloudflare } from "./cloudflare-connect-jAwacxxP.mjs";
16
+ import { n as writeVoidProjectConfig, t as canRewriteVoidProjectConfig } from "./config-write-B1f88wJA.mjs";
17
+ import { i as migrateFrameworkAdapterPaths, t as migrateLegacyVoidConfig } from "./migrate-BPITvDJN.mjs";
18
+ import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
19
+ import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-l9J7pbtm.mjs";
20
+ import { t as promptForLoginToken } from "./login-CAsAsQ-_.mjs";
21
+ import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-B3hwKrFK.mjs";
22
+ import { t as connectCloudflare } from "./cloudflare-connect-Ctmrw579.mjs";
23
23
  import { n as findInstalledYarnPnpRuntime, r as hasLocalLockfile, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-BV4AzNul.mjs";
24
24
  import { createRequire } from "node:module";
25
25
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmdirSync, unlinkSync, writeFileSync } from "node:fs";
@@ -2646,7 +2646,7 @@ async function runInitCommand(root, initArgs) {
2646
2646
  injectAgentBlock(root);
2647
2647
  const agents = detectAgents(root);
2648
2648
  if (agents.length > 0) {
2649
- const { linkSkillsForSpecificAgents } = await import("./skills-O6FUaizK.mjs");
2649
+ const { linkSkillsForSpecificAgents } = await import("./skills-D1II1Juz.mjs");
2650
2650
  linkSkillsForSpecificAgents(root, agents);
2651
2651
  } else log.info("No coding agent detected; read the bundled docs linked in AGENTS.md");
2652
2652
  }
@@ -1,9 +1,9 @@
1
- import { c as import_picocolors, r as cliTitle } from "./output-CCH48AMM.mjs";
2
1
  import { c as getToken, s as getSiteDomain } from "./auth-DLNN0D3Z.mjs";
3
2
  import { d as writeProjectConfig, o as readProjectConfig, t as attachSelectedPlatform } from "./project-C0Fqu05O.mjs";
4
- import { O as intro, P as outro, T as cancel, j as log } from "./dist-Dn6nn2IU.mjs";
5
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
6
- import { i as promptProjectSelection, r as promptAndCreateProject } from "./create-project-DBfFSZKY.mjs";
3
+ import { O as intro, P as outro, T as cancel, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient } from "./client-BTZ3XkrB.mjs";
5
+ import { c as import_picocolors, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
+ import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-l9J7pbtm.mjs";
7
7
  import { r as resolveProjectBySlug } from "./resolve-project-BG5ORGID.mjs";
8
8
  //#region src/cli/link.ts
9
9
  function projectLabel(slug, root, url) {
@@ -1,8 +1,8 @@
1
- import { a as dim, c as import_picocolors, o as ensureUtc, r as cliTitle, u as tablePrefix } from "./output-CCH48AMM.mjs";
2
1
  import { c as getToken } from "./auth-DLNN0D3Z.mjs";
3
2
  import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-C0Fqu05O.mjs";
4
- import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
5
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
3
+ import { O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient } from "./client-BTZ3XkrB.mjs";
5
+ import { a as dim, c as import_picocolors, d as tablePrefix, o as ensureUtc, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
6
  import { r as resolveProjectBySlug } from "./resolve-project-BG5ORGID.mjs";
7
7
  //#region src/cli/list.ts
8
8
  async function runListCommand(root, slug) {
@@ -43,7 +43,7 @@ async function runListCommand(root, slug) {
43
43
  }
44
44
  async function showCloudflareDeployments(root, slug) {
45
45
  if (slug) throw new Error("project: A project name selects a Void platform project and is not used for direct Cloudflare apps.");
46
- const { readCloudflareWorkerStatus, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BipGMJ5O.mjs");
46
+ const { readCloudflareWorkerStatus, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BT6OWFBk.mjs");
47
47
  const status = await readCloudflareWorkerStatus(resolveCloudflareOperationContext(root));
48
48
  if (status.versions.length === 0) {
49
49
  outro(`No deployments for ${status.workerName}.`);
@@ -1,5 +1,5 @@
1
1
  import { r as AuthUser } from "./auth-DkcFflXV.mjs";
2
- import { a as CloudEnv, r as CloudContext } from "./handler-BXJTXd02.mjs";
2
+ import { a as CloudEnv, r as CloudContext } from "./handler-HEcZsaij.mjs";
3
3
  //#region src/runtime/live.d.ts
4
4
  type MaybePromise<T> = T | Promise<T>;
5
5
  type LiveControlRequest = {
@@ -1,5 +1,5 @@
1
1
  import { a as join, i as isAbsolute, u as resolve } from "./dist-BVqXeR_h.mjs";
2
- import { v as readRootWranglerConfig } from "./wrangler-BymcxrRa.mjs";
2
+ import { v as readRootWranglerConfig } from "./wrangler-DQF1vKyf.mjs";
3
3
  import { r as getMiniflareDatabasePath } from "./runner-p-dMs2UN.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { createHash } from "node:crypto";
@@ -1,7 +1,7 @@
1
- import { c as import_picocolors, i as createSpinner, r as cliTitle } from "./output-CCH48AMM.mjs";
2
1
  import { _ as saveToken, a as getApiUrl, c as getToken, g as savePlatformToken, h as runPlatformLogin, l as getTokenSource, m as runLogin, p as removeToken, u as isStagingMode } from "./auth-DLNN0D3Z.mjs";
3
- import { I as select, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
4
- import { i as isExpiredTokenError, n as PlatformClient } from "./client-QTl6ko_D.mjs";
2
+ import { I as select, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
3
+ import { i as isExpiredTokenError, n as PlatformClient } from "./client-BTZ3XkrB.mjs";
4
+ import { c as import_picocolors, i as createSpinner, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
5
5
  //#region src/cli/login.ts
6
6
  async function selectPlatformLoginMethod(platform, requestedId) {
7
7
  const providers = platform?.authenticationProviders ?? ["github", "google"];
@@ -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-CjNB09OF.mjs").then(({ discoverPlatform }) => discoverPlatform(getApiUrl(root))));
32
+ const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await import("./platform-cmd-E0FuL212.mjs").then(({ discoverPlatform }) => discoverPlatform(getApiUrl(root))));
33
33
  const s = createSpinner();
34
34
  s.start(`Opening browser for ${providerName} login...`);
35
35
  try {
@@ -0,0 +1,2 @@
1
+ import { r as selectPlatformLoginMethod } from "./login-CAsAsQ-_.mjs";
2
+ export { selectPlatformLoginMethod };
@@ -1,15 +1,15 @@
1
- import { a as dim, c as import_picocolors, r as cliTitle } from "./output-CCH48AMM.mjs";
2
1
  import { c as getToken } from "./auth-DLNN0D3Z.mjs";
3
2
  import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-C0Fqu05O.mjs";
4
- import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
5
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
3
+ import { O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient } from "./client-BTZ3XkrB.mjs";
5
+ import { a as dim, c as import_picocolors, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
6
  //#region src/cli/logs.ts
7
7
  async function runLogsCommand(root, filter, range, deployment, level) {
8
8
  console.log();
9
9
  intro(cliTitle("project logs"));
10
10
  const platform = readDeploymentPlatform(root);
11
11
  if (platform === "cloudflare") {
12
- const { resolveCloudflareOperationContext, tailCloudflareWorker } = await import("./cloudflare-operations-BipGMJ5O.mjs");
12
+ const { resolveCloudflareOperationContext, tailCloudflareWorker } = await import("./cloudflare-operations-BT6OWFBk.mjs");
13
13
  if (range !== "1h") log.warn("Cloudflare tail streams live logs; --range does not select historical entries.");
14
14
  if (level && level !== "all" && level !== "error") log.warn("Cloudflare tail cannot filter individual console levels; showing all invocation logs.");
15
15
  await tailCloudflareWorker(resolveCloudflareOperationContext(root), {
@@ -1,9 +1,9 @@
1
1
  import { a as join, n as dirname } from "./dist-BVqXeR_h.mjs";
2
- import { r as cliTitle } from "./output-CCH48AMM.mjs";
3
2
  import { o as TYPED_CONFIG_FILE, s as loadTypedVoidConfigFile } from "./project-paths-GgcMozYz.mjs";
4
- import { g as validateConfig } from "./config-CafTW6Cz.mjs";
5
- import { B as seedCloudflareConfig, I as VOID_LOCK_FILE, V as stashCloudflareDeployPointer } from "./wrangler-BymcxrRa.mjs";
6
- import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
3
+ import { g as validateConfig } from "./config-Br_JZD6u.mjs";
4
+ import { U as seedCloudflareConfig, W as stashCloudflareDeployPointer, z as VOID_LOCK_FILE } from "./wrangler-DQF1vKyf.mjs";
5
+ import { O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
6
+ import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
7
7
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
8
8
  import { parseSync } from "vite";
9
9
  import { randomUUID } from "node:crypto";
@@ -0,0 +1,2 @@
1
+ import { n as runMigrateCommand } from "./migrate-BPITvDJN.mjs";
2
+ export { runMigrateCommand };
@@ -1,6 +1,6 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as loadVoidAuthConfig, t as findVoidAuthConfig } from "./config-DPByhVck.mjs";
3
- import { m as readConfig } from "./config-CafTW6Cz.mjs";
3
+ import { m as readConfig } from "./config-Br_JZD6u.mjs";
4
4
  import { r as getMiniflareDatabasePath } from "./runner-p-dMs2UN.mjs";
5
5
  import { a as loadLocalEnv } from "./env-_v349JBd.mjs";
6
6
  import { r as resolveVoidAuthMigrationSchema } from "./drizzle-Beb2Am5S.mjs";
@@ -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-CjNB09OF.mjs");
141
- const { selectPlatformLoginMethod } = await import("./login-t6rndSRW.mjs");
140
+ const { discoverPlatform } = await import("./platform-cmd-E0FuL212.mjs");
141
+ const { selectPlatformLoginMethod } = await import("./login-CGcRKEoi.mjs");
142
142
  const { runPlatformLogin } = await import("./auth-CZuiVsFh.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-DQMfeKMz.mjs");
282
+ const { printHelpPage } = await import("./help-CmZzxUba.mjs");
283
283
  printHelpPage(["platform", args.group]);
284
284
  return;
285
285
  }
@@ -288,7 +288,7 @@ async function runOperatorCommand(args) {
288
288
  const client = new OperatorClient(origin, readOperatorToken(origin));
289
289
  if (args.method === "POST") {
290
290
  if (!args.plan && !args.yes && (!process.stdin.isTTY || !process.stderr.isTTY)) throw new OperatorClientError("Mutations in non-interactive mode require --yes or --plan.", "confirmation_required");
291
- if (args.tokenStdin && args.group === "email" && (args.action === "domain-add" || args.action === "domain-remove")) args = {
291
+ if (args.tokenStdin && (args.group === "email" && (args.action === "domain-add" || args.action === "domain-remove") || args.group === "zero-trust" && args.action === "configure")) args = {
292
292
  ...args,
293
293
  body: {
294
294
  ...args.body,
@@ -0,0 +1,81 @@
1
+ import { n as __toESM } from "./rolldown-runtime-DXIUcv95.mjs";
2
+ import { t as require_picocolors } from "./picocolors-BTps1_gs.mjs";
3
+ import { L as spinner, j as log, k as isCI } from "./dist-CTBk70IR.mjs";
4
+ //#region src/cli/output.ts
5
+ var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors(), 1);
6
+ /** Keep recovery commands on the same CLI when using the local checkout launcher. */
7
+ function cliCommandName() {
8
+ const entryName = process.argv[1]?.split(/[\\/]/).at(-1);
9
+ return entryName === "void-dev" || entryName === "void-dev.cmd" ? "void-dev" : "void";
10
+ }
11
+ /**
12
+ * Terminal-safe spinner wrapper. In CI and redirected output,
13
+ * `@clack/prompts` spinner emits DEC Private Mode cursor hide/show codes
14
+ * (`\x1b[?25l` / `\x1b[?25h`) that render as text artifacts. This wrapper
15
+ * replaces the spinner with plain log output.
16
+ */
17
+ function createSpinner(options, isTerminal = process.stdout.isTTY === true) {
18
+ if (!isCI() && isTerminal) return spinner(options);
19
+ let currentMessage = "";
20
+ return {
21
+ start(msg = "") {
22
+ currentMessage = msg;
23
+ if (msg) log.step(msg);
24
+ },
25
+ stop(msg = "") {
26
+ if (msg) log.info(msg);
27
+ },
28
+ message(msg = "") {
29
+ if (msg && msg !== currentMessage) {
30
+ currentMessage = msg;
31
+ log.step(msg);
32
+ }
33
+ },
34
+ cancel(msg = "") {
35
+ if (msg) log.warn(msg);
36
+ },
37
+ error(msg = "") {
38
+ if (msg) log.error(msg);
39
+ },
40
+ clear() {},
41
+ get isCancelled() {
42
+ return false;
43
+ }
44
+ };
45
+ }
46
+ function cliTitle(command) {
47
+ return import_picocolors.default.blue(`void ${command}`);
48
+ }
49
+ function sectionTitle(title) {
50
+ return import_picocolors.default.reset(import_picocolors.default.blue(title));
51
+ }
52
+ function categoryTitle(title) {
53
+ return import_picocolors.default.reset(import_picocolors.default.bold(import_picocolors.default.cyan(title)));
54
+ }
55
+ function dim(text) {
56
+ return import_picocolors.default.dim(text);
57
+ }
58
+ function tablePrefix() {
59
+ return `${import_picocolors.default.gray("│")} `;
60
+ }
61
+ /** Strip terminal control characters from text received from a platform. */
62
+ function sanitizeTerminalText(value) {
63
+ return value.replace(/[\u0000-\u001f\u007f-\u009f]/g, " ");
64
+ }
65
+ function helpLine(command, description) {
66
+ return `${import_picocolors.default.reset(command.padEnd(34))} ${import_picocolors.default.dim(description)}`;
67
+ }
68
+ /**
69
+ * Ensure a timestamp string will be parsed as UTC by `new Date()`.
70
+ * DB timestamps lack timezone info — appends 'Z' only when no
71
+ * existing indicator (Z, z, or numeric offset) is present.
72
+ */
73
+ function ensureUtc(s) {
74
+ const last = s.at(-1);
75
+ if (last === "Z" || last === "z") return s;
76
+ if (s.includes("+", 10)) return s;
77
+ if (s.lastIndexOf("-") > 9) return s;
78
+ return s + "Z";
79
+ }
80
+ //#endregion
81
+ export { dim as a, import_picocolors as c, tablePrefix as d, createSpinner as i, sanitizeTerminalText as l, cliCommandName as n, ensureUtc as o, cliTitle as r, helpLine as s, categoryTitle as t, sectionTitle as u };
@@ -1,4 +1,4 @@
1
- import { t as PageObject } from "../protocol-ZH3jP4a7.mjs";
1
+ import { t as PageObject } from "../protocol-BBa6cstI.mjs";
2
2
  import { n as CacheForInput, r as CacheForResult } from "../prefetch-Ce6la4EI.mjs";
3
3
  //#region src/pages/action-result.d.ts
4
4
  type ActionErrorHandlingScope = "callSite" | "boundary";
@@ -1,5 +1,5 @@
1
1
  import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-Do8P4puT.mjs";
2
- import "../config-CF69HgXc.mjs";
2
+ import "../config-VavjpDnp.mjs";
3
3
  import { i as PageDefinition, n as LayoutDefinition, o as PageScanResult, r as NamedLayoutDefinition } from "../types-BAp5AEBU.mjs";
4
4
  import { t as serializePageData } from "../serialize-CfSwWfF2.mjs";
5
5
  //#region src/project-paths.d.ts
@@ -1,7 +1,7 @@
1
1
  import { a as join } from "../dist-BVqXeR_h.mjs";
2
2
  import { r as resolvePagesDir } from "../project-paths-GgcMozYz.mjs";
3
- import { m as readConfig } from "../config-CafTW6Cz.mjs";
4
- import { i as parseRedirectsFile } from "../headers-BOg_velo.mjs";
3
+ import { m as readConfig } from "../config-Br_JZD6u.mjs";
4
+ import { i as parseRedirectsFile } from "../headers-DWi2IXWx.mjs";
5
5
  import { a as resolveNamedLayout, i as resolveLayoutIds, n as resolveEffectiveLayoutChain, r as resolveLayoutChain, t as scanPages } from "../scan-4tfN-PSn.mjs";
6
6
  import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "../head-D_QRR5Yd.mjs";
7
7
  import { t as serializePageData } from "../serialize-BPvnNQuA.mjs";
@@ -1,6 +1,6 @@
1
1
  import { o as PageScanResult } from "../types-BAp5AEBU.mjs";
2
2
  import { ResolvedConfig, ViteDevServer } from "vite";
3
- //#region ../../node_modules/.pnpm/magic-string@1.3.1/node_modules/magic-string/dist/index.d.mts
3
+ //#region ../../node_modules/.pnpm/magic-string@1.4.2/node_modules/magic-string/dist/index.d.mts
4
4
  //#region src/SourceMap.d.ts
5
5
  interface SourceMapOptions {
6
6
  /**
@@ -56,7 +56,9 @@ declare class SourceMap {
56
56
  x_google_ignoreList: number[] | undefined;
57
57
  debugId: string | undefined;
58
58
  rangeMappings: string | undefined;
59
- constructor(properties: DecodedSourceMap);
59
+ constructor(properties: DecodedSourceMap | (Omit<DecodedSourceMap, "mappings"> & {
60
+ mappings: string;
61
+ }));
60
62
  /**
61
63
  * Returns the equivalent of `JSON.stringify(map)`
62
64
  */
@@ -90,8 +92,7 @@ interface UpdateOptions {
90
92
  }
91
93
  type ReplacementFunction = (substring: string, ...args: any[]) => string;
92
94
  declare class MagicString {
93
- original: string;
94
- indentExclusionRanges: MagicStringOptions["indentExclusionRanges"];
95
+ readonly original: string;
95
96
  offset: number;
96
97
  constructor(string: string, options?: MagicStringOptions);
97
98
  /**
@@ -143,8 +144,14 @@ declare class MagicString {
143
144
  indent(indentStr?: string, options?: IndentOptions): this;
144
145
  /**
145
146
  * Moves the characters from `start` and `end` to `index`.
147
+ *
148
+ * `affinity` controls where the range is anchored at `index`. With the
149
+ * default `'right'`, it is inserted before the content that starts at `index`;
150
+ * with `'left'`, it is inserted after the content that ends at `index`. The
151
+ * two differ only when other content has already been moved to that boundary,
152
+ * mirroring the `appendLeft`/`appendRight` distinction.
146
153
  */
147
- move(start: number, end: number, index: number): this;
154
+ move(start: number, end: number, index: number, affinity?: "left" | "right"): this;
148
155
  /**
149
156
  * Replaces the characters from `start` to `end` with `content`, along with the appended/prepended content in
150
157
  * that range. The same restrictions as `s.remove()` apply.
@@ -178,7 +185,10 @@ declare class MagicString {
178
185
  prependRight(index: number, content: string): this;
179
186
  /**
180
187
  * Removes the characters from `start` to `end` (of the original string, **not** the generated string).
181
- * Removing the same content twice, or making removals that partially overlap, will cause an error.
188
+ * Content appended or prepended at positions strictly inside the range is removed with it, while
189
+ * content attached at `start` or `end` is preserved — use `s.overwrite(start, end, '')` to remove
190
+ * the range including its edge inserts.
191
+ * Repeated removals and removals with partially overlapping ranges are allowed.
182
192
  */
183
193
  remove(start: number, end: number): this;
184
194
  /**
@@ -1,7 +1,7 @@
1
1
  import { n as dirname, u as resolve } from "../dist-BVqXeR_h.mjs";
2
2
  import { n as isIdentifier, r as isLiteral } from "../ast-CPGPjb0V.mjs";
3
3
  import { n as resolveEffectiveLayoutChain, t as scanPages } from "../scan-4tfN-PSn.mjs";
4
- import { t as MagicString } from "../dist-BR1quN_w.mjs";
4
+ import { t as MagicString } from "../dist-AoCzRTJE.mjs";
5
5
  import { existsSync, readFileSync, readdirSync } from "node:fs";
6
6
  import { normalizePath, parseSync } from "vite";
7
7
  //#region src/pages/island-imports.ts
@@ -1,3 +1,3 @@
1
- import { w as ValidationError } from "../handler-BXJTXd02.mjs";
2
- import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-ZH3jP4a7.mjs";
1
+ import { w as ValidationError } from "../handler-HEcZsaij.mjs";
2
+ import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-BBa6cstI.mjs";
3
3
  export { PageObject, PageRenderResult, ValidationError, flattenValidationErrors, handlePageGet, handlePageMutation, safeJsonStringify };