@vercel/cli-support 65.6.0-snapshot-1ef3a0de66d0 → 65.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/chunks/{add-6UOKR26K.js → add-7G5PAIUN.js} +1 -1
  2. package/dist/chunks/{add-RPAOJH5O.js → add-LA2T477X.js} +1 -1
  3. package/dist/chunks/{add-GULZ6EGJ.js → add-TPDABQQA.js} +1 -1
  4. package/dist/chunks/{build-MLAKPRSC.js → build-A463NBA2.js} +1 -1
  5. package/dist/chunks/{chunk-CU2FTX57.js → chunk-2H4UEVTG.js} +1 -1
  6. package/dist/chunks/{chunk-L4XLDN6T.js → chunk-2KINJIWA.js} +1 -1
  7. package/dist/chunks/{chunk-5K426HWC.js → chunk-3DFEM7ZL.js} +1 -1
  8. package/dist/chunks/{chunk-JXAEI2GJ.js → chunk-3UD4MZMH.js} +1 -1
  9. package/dist/chunks/{chunk-7G4PQR6J.js → chunk-43WS2YU4.js} +1 -1
  10. package/dist/chunks/{chunk-2QIJEHNE.js → chunk-4KO6U4CW.js} +2 -2
  11. package/dist/chunks/{chunk-YIRSRF6D.js → chunk-4P6IRBBK.js} +1 -1
  12. package/dist/chunks/{chunk-ZUYPTLVO.js → chunk-5ULKEPKM.js} +1 -1
  13. package/dist/chunks/{chunk-ZUNQHI5Y.js → chunk-6GSI4VMJ.js} +1 -1
  14. package/dist/chunks/{chunk-DAUAVRFC.js → chunk-7CNJTFWP.js} +1 -1
  15. package/dist/chunks/{chunk-SW3JRXUW.js → chunk-A4UOBMZR.js} +1 -1
  16. package/dist/chunks/{chunk-4G7ZQONX.js → chunk-A7E3WORN.js} +1 -1
  17. package/dist/chunks/{chunk-QUSEBFDO.js → chunk-CNE5UGJC.js} +1 -1
  18. package/dist/chunks/{chunk-HVDGNAPM.js → chunk-DCX2PBSX.js} +1 -1
  19. package/dist/chunks/{chunk-MZQEDXOH.js → chunk-DFXYDOFX.js} +2 -2
  20. package/dist/chunks/{chunk-5WYPJ2T5.js → chunk-E32IBIXV.js} +2 -2
  21. package/dist/chunks/{chunk-3NG2EYQ5.js → chunk-EOK43KMC.js} +1 -1
  22. package/dist/chunks/{chunk-CWO4HMKU.js → chunk-F6MHQRDG.js} +1 -1
  23. package/dist/chunks/{chunk-YALEYPMP.js → chunk-FN3W5CJQ.js} +1 -1
  24. package/dist/chunks/{chunk-R3BEQTZZ.js → chunk-FSBAVQQP.js} +1 -1
  25. package/dist/chunks/{chunk-JSAY52FE.js → chunk-FVIVFDCB.js} +1 -1
  26. package/dist/chunks/{chunk-ORJBK5FT.js → chunk-G62JX3C5.js} +1 -1
  27. package/dist/chunks/{chunk-ODAV7Z2H.js → chunk-GAGROISK.js} +1 -1
  28. package/dist/chunks/{chunk-WICRM2JL.js → chunk-GKCTMBCM.js} +1 -1
  29. package/dist/chunks/{chunk-JMLKK7RL.js → chunk-GTHPBDPB.js} +2 -2
  30. package/dist/chunks/{chunk-NZPGWZLV.js → chunk-H3E4YX2M.js} +1 -1
  31. package/dist/chunks/{chunk-PRFIFS3Q.js → chunk-HKZKGIBQ.js} +1 -1
  32. package/dist/chunks/chunk-HNNCK5KD.js +13 -0
  33. package/dist/chunks/{chunk-FAEC4BER.js → chunk-HOOQ7ZMB.js} +1 -1
  34. package/dist/chunks/{chunk-AOC6XXOO.js → chunk-HTOZY5SI.js} +1 -1
  35. package/dist/chunks/{chunk-LT5UZRMK.js → chunk-I64T5ZML.js} +1 -1
  36. package/dist/chunks/chunk-I7U2XP4X.js +10 -0
  37. package/dist/chunks/{chunk-RWPQOJTT.js → chunk-I7YEXDVF.js} +1 -1
  38. package/dist/chunks/{chunk-PHHZ6J7Q.js → chunk-IEZKTS2C.js} +1 -1
  39. package/dist/chunks/{chunk-ARQMFBV4.js → chunk-IUMJJFEP.js} +1 -1
  40. package/dist/chunks/{chunk-JGMJP4T3.js → chunk-JPEIHA57.js} +1 -1
  41. package/dist/chunks/{chunk-CLVEFWEX.js → chunk-JW57JYRO.js} +1 -1
  42. package/dist/chunks/{chunk-VUQWLLNI.js → chunk-KBFHUWSQ.js} +1 -1
  43. package/dist/chunks/{chunk-JWUXHL35.js → chunk-LAINBICC.js} +1 -1
  44. package/dist/chunks/{chunk-VQ755MPP.js → chunk-LCMNJNSQ.js} +1 -1
  45. package/dist/chunks/{chunk-IC3THLYP.js → chunk-LIXU6EGC.js} +1 -1
  46. package/dist/chunks/{chunk-SDOPVIKJ.js → chunk-MJ7JIQL3.js} +1 -1
  47. package/dist/chunks/{chunk-WDUHDLUA.js → chunk-MMKG5W42.js} +1 -1
  48. package/dist/chunks/{chunk-XAU3KTPX.js → chunk-MYTOHLYZ.js} +1 -1
  49. package/dist/chunks/{chunk-GP55VEOQ.js → chunk-N36OHJVQ.js} +1 -1
  50. package/dist/chunks/{chunk-6WMO5G45.js → chunk-OEPDTNS3.js} +1 -1
  51. package/dist/chunks/{chunk-EFEQQXRU.js → chunk-OGSTNJJ5.js} +1 -1
  52. package/dist/chunks/{chunk-ED3VA7D4.js → chunk-OORHGYZ3.js} +1 -1
  53. package/dist/chunks/{chunk-ZQUVDDPB.js → chunk-OS5I5TXU.js} +1 -1
  54. package/dist/chunks/{chunk-JHNLBVO2.js → chunk-QBP6E2YB.js} +1 -1
  55. package/dist/chunks/{chunk-NVNE3W7S.js → chunk-QDQ4NHQN.js} +1 -1
  56. package/dist/chunks/{chunk-OQX4YVGU.js → chunk-QFUCWOCL.js} +1 -1
  57. package/dist/chunks/{chunk-GFD6UAAO.js → chunk-QRYQADGN.js} +1 -1
  58. package/dist/chunks/{chunk-WSVYZKI6.js → chunk-RD2VHI66.js} +1 -1
  59. package/dist/chunks/{chunk-36NK2Z3C.js → chunk-RNTS4MJP.js} +1 -1
  60. package/dist/chunks/{chunk-JCGEXU7T.js → chunk-RQYXFSED.js} +2 -2
  61. package/dist/chunks/{chunk-ETEVOJQJ.js → chunk-S22GZWJS.js} +1 -1
  62. package/dist/chunks/{chunk-MLGQ233X.js → chunk-S52O6DKC.js} +1 -1
  63. package/dist/chunks/{chunk-NM44RWS6.js → chunk-SAUBWYQJ.js} +1 -1
  64. package/dist/chunks/{chunk-5EMSOR2P.js → chunk-SKDLXVRO.js} +1 -1
  65. package/dist/chunks/{chunk-AIRQFG5A.js → chunk-SXRZZDON.js} +1 -1
  66. package/dist/chunks/{chunk-VLYVVC3P.js → chunk-TKKGZI7O.js} +5 -5
  67. package/dist/chunks/{chunk-4HJGSSSZ.js → chunk-TYL6IYR4.js} +1 -1
  68. package/dist/chunks/{chunk-I2WEQWCA.js → chunk-UWGWRZP5.js} +1 -1
  69. package/dist/chunks/chunk-V6NMCQUQ.js +7 -0
  70. package/dist/chunks/chunk-VH5Z5VHD.js +10 -0
  71. package/dist/chunks/{chunk-QDPYU6KS.js → chunk-VKJVYR4T.js} +1 -1
  72. package/dist/chunks/chunk-WRHQTUHU.js +8 -0
  73. package/dist/chunks/{chunk-TGOGYSBO.js → chunk-WZAJYSJZ.js} +1 -1
  74. package/dist/chunks/{chunk-KWKEBKUR.js → chunk-X4K3UJN7.js} +1 -1
  75. package/dist/chunks/{clear-UZWOOGOH.js → clear-ISIDZTUZ.js} +1 -1
  76. package/dist/chunks/{compile-vercel-config-2RQDL3RD.js → compile-vercel-config-CZVX4OWQ.js} +1 -1
  77. package/dist/chunks/{config-RMJWRS7O.js → config-GMCTHBY6.js} +1 -1
  78. package/dist/chunks/{config-C76IGJ6B.js → config-MAFBMJV3.js} +1 -1
  79. package/dist/chunks/config-validator.mjs +1 -1
  80. package/dist/chunks/{delete-OKOBDL7Z.js → delete-LLQFSC7R.js} +1 -1
  81. package/dist/chunks/{delete-2WBR5JQW.js → delete-PIFKRZEO.js} +1 -1
  82. package/dist/chunks/{detect-projects-XPB3R7VS.js → detect-projects-EYF4ZSYF.js} +1 -1
  83. package/dist/chunks/{detect-services-DRHV22O5.js → detect-services-LNYPPBJP.js} +1 -1
  84. package/dist/chunks/{disable-DFEABU2Z.js → disable-7JLE53D2.js} +1 -1
  85. package/dist/chunks/{discard-KGBEMNFT.js → discard-EXDT6QIK.js} +1 -1
  86. package/dist/chunks/{edit-5XIRLUKG.js → edit-3NOKVF5V.js} +1 -1
  87. package/dist/chunks/{edit-PJIDMKUS.js → edit-BQCPB3ZR.js} +1 -1
  88. package/dist/chunks/{enable-UDWDPFOI.js → enable-KYVZIXZM.js} +1 -1
  89. package/dist/chunks/{export-W75EA6EQ.js → export-4RZRCFX7.js} +1 -1
  90. package/dist/chunks/{fetch-proxy-45DGILKR.js → fetch-proxy-MOKBS56A.js} +1 -1
  91. package/dist/chunks/{future-PHSAEQIE.js → future-YZGJX6FF.js} +1 -1
  92. package/dist/chunks/{generate-cert-for-deploy-C67VL5Z6.js → generate-cert-for-deploy-I236CHA2.js} +1 -1
  93. package/dist/chunks/{image-U5CV2PRP.js → image-EIMVSQLG.js} +1 -1
  94. package/dist/chunks/{import-builders-PHIIX7HW.js → import-builders-JEJRMLNC.js} +1 -1
  95. package/dist/chunks/{inspect-DQQI3PM7.js → inspect-2SCDEURI.js} +1 -1
  96. package/dist/chunks/{inspect-AU3MX7E2.js → inspect-BMBFYISW.js} +1 -1
  97. package/dist/chunks/{inspect-RNWLPR7I.js → inspect-IOKO45PV.js} +1 -1
  98. package/dist/chunks/{inspect-LJK7I6RZ.js → inspect-P246VXF5.js} +1 -1
  99. package/dist/chunks/{inspect-WHPWW4BI.js → inspect-UJAAVGJT.js} +1 -1
  100. package/dist/chunks/{list-QNRFVMMQ.js → list-34Z62YFO.js} +1 -1
  101. package/dist/chunks/{list-JV26NNYL.js → list-PC4ZVIHQ.js} +1 -1
  102. package/dist/chunks/{list-YF4FXWUZ.js → list-WL3WA7CS.js} +1 -1
  103. package/dist/chunks/{login-A4KNOUNA.js → login-BOBO3TKA.js} +1 -1
  104. package/dist/chunks/{login-COGE7JQU.js → login-RAN3UBFA.js} +1 -1
  105. package/dist/chunks/{logs-KMQATUYR.js → logs-L3VFH7SK.js} +1 -1
  106. package/dist/chunks/{ls-HMYU2ZGA.js → ls-FKECGTP3.js} +1 -1
  107. package/dist/chunks/{ls-DTFLHFOW.js → ls-FL3FCE2T.js} +1 -1
  108. package/dist/chunks/{ls-IHF33MQP.js → ls-HQHXDVPG.js} +1 -1
  109. package/dist/chunks/{ls-RNRMYD3V.js → ls-MDTI26PW.js} +1 -1
  110. package/dist/chunks/{ls-ZQLCDIQJ.js → ls-NQVH63KO.js} +1 -1
  111. package/dist/chunks/{ls-QD54I4S7.js → ls-PQBYVYPW.js} +1 -1
  112. package/dist/chunks/{ls-FOKMPVIB.js → ls-ZK5ESMRT.js} +1 -1
  113. package/dist/chunks/{mutate-RMIFQOF6.js → mutate-6OEPBAJF.js} +1 -1
  114. package/dist/chunks/{notifications-BFBNV2HY.js → notifications-A46PC7QX.js} +1 -1
  115. package/dist/chunks/{open-L6HEXHAI.js → open-QWJQWDZD.js} +1 -1
  116. package/dist/chunks/{openapi-6JKCOR7K.js → openapi-5QWHDLKR.js} +1 -1
  117. package/dist/chunks/{permissions-UYGTYRKA.js → permissions-MCOS247Q.js} +1 -1
  118. package/dist/chunks/{plugin-offer-NBHRXMNR.js → plugin-offer-ZMTZG6FR.js} +1 -1
  119. package/dist/chunks/{prompt-missing-credentials-2IYIF2JI.js → prompt-missing-credentials-AUJFBZRC.js} +1 -1
  120. package/dist/chunks/{publish-T2VSTPG4.js → publish-CQ5FHKNN.js} +1 -1
  121. package/dist/chunks/{pull-4GL47Z2S.js → pull-RVNTGJ4C.js} +1 -1
  122. package/dist/chunks/{purchase-domain-if-available-BHFBD3LW.js → purchase-domain-if-available-6FAGFFWC.js} +1 -1
  123. package/dist/chunks/{push-CQPIDVTL.js → push-IBOUSKO7.js} +1 -1
  124. package/dist/chunks/{query-HN45ORIB.js → query-OG4FG2AO.js} +1 -1
  125. package/dist/chunks/{reauthenticate-FTHGAWK3.js → reauthenticate-TVQDXIFS.js} +1 -1
  126. package/dist/chunks/{reorder-7BD5JZKQ.js → reorder-LWKTDFSH.js} +1 -1
  127. package/dist/chunks/{reply-2INQJ5KM.js → reply-5CE2KUD7.js} +1 -1
  128. package/dist/chunks/{resolve-DHAJC3I7.js → resolve-S35UEM35.js} +1 -1
  129. package/dist/chunks/{resolve-agent-team-KGYPHN5F.js → resolve-agent-team-DXHF7XLU.js} +1 -1
  130. package/dist/chunks/{restore-OQKNWEFQ.js → restore-K66POLY7.js} +1 -1
  131. package/dist/chunks/{rm-CTP4UZH7.js → rm-6PBYTCDC.js} +1 -1
  132. package/dist/chunks/{rm-OG3OXA6H.js → rm-C4FXH2RT.js} +1 -1
  133. package/dist/chunks/{rm-GFHEXQQW.js → rm-C73EKJS4.js} +1 -1
  134. package/dist/chunks/{rm-PFZYHXEN.js → rm-MNT5XIGK.js} +1 -1
  135. package/dist/chunks/{rm-XAW3WJ3I.js → rm-VJOHV243.js} +1 -1
  136. package/dist/chunks/{routes-XKEWEA3P.js → routes-LQGTKBXU.js} +1 -1
  137. package/dist/chunks/{rule-inspect-MKQE5IVJ.js → rule-inspect-4EBB5IDK.js} +1 -1
  138. package/dist/chunks/{schema-TFN5PSYE.js → schema-H5RRV4J3.js} +1 -1
  139. package/dist/chunks/{schema-XFER2RCF.js → schema-S32JRZH5.js} +1 -1
  140. package/dist/chunks/{select-org-PFTR6HQZ.js → select-org-VTLOMQYC.js} +1 -1
  141. package/dist/chunks/{set-KWOZNGRL.js → set-52J54LJU.js} +1 -1
  142. package/dist/chunks/{setup-and-link-BRYK42L7.js → setup-and-link-XGBTMVW7.js} +1 -1
  143. package/dist/chunks/{skills-2MOFBKIE.js → skills-CY57F35A.js} +1 -1
  144. package/dist/chunks/{tags-BHZUQTOQ.js → tags-WAVSTC2G.js} +1 -1
  145. package/dist/chunks/{types-IWO5QLAV.js → types-EK3C4EHF.js} +1 -1
  146. package/dist/chunks/{update-LP7ZZUFZ.js → update-4LNUD2AB.js} +1 -1
  147. package/dist/commands/build/index.js +1 -1
  148. package/dist/commands/deploy/index.js +9 -6
  149. package/dist/commands/dev/index.js +3 -3
  150. package/dist/commands/env/index.js +1 -1
  151. package/dist/commands/link/index.js +1 -1
  152. package/dist/commands/list/index.js +1 -1
  153. package/dist/commands/project/index.js +1 -1
  154. package/dist/commands-account.js +7 -3
  155. package/dist/commands-ai.js +3 -3
  156. package/dist/commands-blob.js +1 -1
  157. package/dist/commands-core.js +26 -14
  158. package/dist/commands-deployments.js +1 -1
  159. package/dist/commands-flags.js +1 -1
  160. package/dist/commands-integrations.js +1 -1
  161. package/dist/commands-observability.js +2 -2
  162. package/dist/commands-routing.js +2 -2
  163. package/dist/index.js +5 -5
  164. package/dist/internal-build.js +2 -2
  165. package/dist/native-download.js +2 -1
  166. package/dist/package.json +58 -58
  167. package/dist/vc.js +26 -7
  168. package/dist/version.mjs +1 -1
  169. package/package.json +51 -51
  170. package/dist/chunks/chunk-6IATT2ID.js +0 -8
  171. package/dist/chunks/chunk-EE2FTI3R.js +0 -7
  172. package/dist/chunks/chunk-EWP5WICJ.js +0 -10
  173. package/dist/chunks/chunk-XE24Y6NM.js +0 -10
  174. package/dist/chunks/chunk-YQDOADMG.js +0 -10
package/dist/vc.js CHANGED
@@ -186,11 +186,13 @@ async function fetchNativeBinary(target) {
186
186
  }
187
187
  // Without a writable cache the binary has nowhere to go and a failure can't
188
188
  // be recorded, so every run would try and warn again. Use the JS CLI quietly.
189
+ // Reported apart from target_missing: a sandbox that blocks writes to the
190
+ // cache directory looks like this.
189
191
  try {
190
192
  mkdirSync(cache.dir, { recursive: true });
191
193
  accessSync(cache.dir, fsConstants.W_OK);
192
194
  } catch {
193
- return { reason: 'target_missing' };
195
+ return { reason: 'cache_unwritable' };
194
196
  }
195
197
  const failedStamp = join(cache.dir, 'download-failed');
196
198
  try {
@@ -200,6 +202,8 @@ async function fetchNativeBinary(target) {
200
202
  } catch {}
201
203
 
202
204
  const quiet = wantsJsonOutput(process.argv.slice(2));
205
+ // A failed attempt shows in the JS CLI's trace as its own startup span.
206
+ markStartup('native_download');
203
207
  try {
204
208
  const { downloadNativeBinary } = await import('./native-download.js');
205
209
  return {
@@ -212,19 +216,31 @@ async function fetchNativeBinary(target) {
212
216
  source: 'download',
213
217
  };
214
218
  } catch (error) {
219
+ markStartup('launcher');
215
220
  try {
216
221
  writeFileSync(failedStamp, '');
217
222
  } catch {}
223
+ const known = error?.name === 'NativeDownloadError';
218
224
  if (!quiet) {
219
- const detail =
220
- error?.name === 'NativeDownloadError'
221
- ? error.detail
222
- : 'unexpected error';
223
225
  console.error(
224
- `! Couldn't download the Vercel CLI binary (${detail}), so Node.js is running this command. The CLI tries again in 24 hours.`
226
+ `! Couldn't download the Vercel CLI binary (${known ? error.detail : 'unexpected error'}), so Node.js is running this command. The CLI tries again in 24 hours.`
225
227
  );
226
228
  }
227
- return { reason: 'download_failed' };
229
+ // Only a run that tried reports why, so telemetry can tell attempts from
230
+ // the runs that skip downloading for 24 hours.
231
+ return {
232
+ reason: 'download_failed',
233
+ downloadFailure: {
234
+ downloadError: known ? error.kind : 'other',
235
+ ...(known &&
236
+ error.environment && {
237
+ downloadProxy: error.environment.proxy ? 'true' : 'false',
238
+ npmRegistry: error.environment.npmRegistry,
239
+ npmProxy: error.environment.npmProxy ? 'true' : 'false',
240
+ npmTls: error.environment.npmTls ? 'true' : 'false',
241
+ }),
242
+ },
243
+ };
228
244
  }
229
245
  }
230
246
 
@@ -278,6 +294,7 @@ if (process.env.VERCEL_VC_NATIVE === '1') {
278
294
  const resolved = resolveTarget();
279
295
  let optedOut = false;
280
296
  let missingReason = 'target_missing';
297
+ let downloadFailure;
281
298
  if (resolved.bin) {
282
299
  optedOut = await isNativeBinaryOptedOut();
283
300
  } else if (resolved.target !== 'cli-support' && !isCliSupport()) {
@@ -289,6 +306,7 @@ if (process.env.VERCEL_VC_NATIVE === '1') {
289
306
  resolved.bin = fetched.bin;
290
307
  resolved.source = fetched.source;
291
308
  missingReason = fetched.reason ?? missingReason;
309
+ downloadFailure = fetched.downloadFailure;
292
310
  }
293
311
  }
294
312
  if (optedOut) {
@@ -341,6 +359,7 @@ if (process.env.VERCEL_VC_NATIVE === '1') {
341
359
  runtime: 'dist',
342
360
  target: resolved.target,
343
361
  reason: missingReason,
362
+ ...downloadFailure,
344
363
  };
345
364
  }
346
365
  globalThis[LAUNCH] = launch;
package/dist/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const version = "65.6.0-snapshot-1ef3a0de66d0";
1
+ export const version = "65.6.0";
2
2
  export const buildLabel = "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/cli-support",
3
- "version": "65.6.0-snapshot-1ef3a0de66d0",
3
+ "version": "65.6.0",
4
4
  "type": "module",
5
5
  "preferGlobal": true,
6
6
  "license": "Apache-2.0",
@@ -31,51 +31,51 @@
31
31
  "undici": "5.29.0",
32
32
  "uuid": "14.0.1",
33
33
  "zod": "4.1.11",
34
- "@vercel/backends": "23.0.0",
35
- "@vercel/cli-config": "0.3.4",
36
- "@vercel/container": "23.0.2-snapshot-1ef3a0de66d0",
34
+ "@vercel/backends": "23.0.1",
35
+ "@vercel/build-utils": "15.1.1",
37
36
  "@vercel/cli-auth": "0.3.13",
37
+ "@vercel/cli-config": "0.3.4",
38
38
  "@vercel/detect-agent": "1.2.7",
39
- "@vercel/elysia": "23.0.0",
40
- "@vercel/express": "23.0.0",
41
- "@vercel/fastify": "23.0.0",
42
- "@vercel/h3": "23.0.0",
43
- "@vercel/go": "26.0.1-snapshot-1ef3a0de66d0",
44
- "@vercel/hono": "23.0.0",
45
- "@vercel/koa": "23.0.0",
46
- "@vercel/hydrogen": "24.0.0",
47
- "@vercel/build-utils": "15.1.0",
48
- "@vercel/nestjs": "23.0.0",
49
- "@vercel/node": "28.0.0",
50
- "@vercel/next": "27.0.0",
51
- "@vercel/redwood": "25.0.0",
39
+ "@vercel/elysia": "23.0.1",
40
+ "@vercel/express": "23.0.1",
41
+ "@vercel/container": "23.0.2",
42
+ "@vercel/go": "26.0.1",
43
+ "@vercel/h3": "23.0.1",
44
+ "@vercel/hydrogen": "24.0.1",
45
+ "@vercel/koa": "23.0.1",
46
+ "@vercel/fastify": "23.0.1",
47
+ "@vercel/hono": "23.0.1",
48
+ "@vercel/next": "27.0.1",
49
+ "@vercel/node": "28.0.1",
50
+ "@vercel/nestjs": "23.0.1",
51
+ "@vercel/python": "29.0.1",
52
52
  "@vercel/python-analysis": "0.15.2",
53
- "@vercel/remix-builder": "28.0.0",
54
- "@vercel/ruby": "25.0.0",
55
- "@vercel/python": "29.0.0",
56
- "@vercel/rust": "24.0.1-snapshot-1ef3a0de66d0",
57
- "@vercel/static-build": "25.0.0"
53
+ "@vercel/redwood": "25.0.1",
54
+ "@vercel/remix-builder": "28.0.1",
55
+ "@vercel/ruby": "25.0.1",
56
+ "@vercel/rust": "24.0.1",
57
+ "@vercel/static-build": "25.0.1"
58
58
  },
59
59
  "builders": {
60
- "@vercel/backends": "23.0.0",
61
- "@vercel/container": "23.0.2-snapshot-1ef3a0de66d0",
62
- "@vercel/elysia": "23.0.0",
63
- "@vercel/express": "23.0.0",
64
- "@vercel/fastify": "23.0.0",
65
- "@vercel/go": "26.0.1-snapshot-1ef3a0de66d0",
66
- "@vercel/h3": "23.0.0",
67
- "@vercel/hono": "23.0.0",
68
- "@vercel/hydrogen": "24.0.0",
69
- "@vercel/koa": "23.0.0",
70
- "@vercel/nestjs": "23.0.0",
71
- "@vercel/next": "27.0.0",
72
- "@vercel/node": "28.0.0",
73
- "@vercel/python": "29.0.0",
74
- "@vercel/redwood": "25.0.0",
75
- "@vercel/remix-builder": "28.0.0",
76
- "@vercel/ruby": "25.0.0",
77
- "@vercel/rust": "24.0.1-snapshot-1ef3a0de66d0",
78
- "@vercel/static-build": "25.0.0"
60
+ "@vercel/backends": "23.0.1",
61
+ "@vercel/container": "23.0.2",
62
+ "@vercel/elysia": "23.0.1",
63
+ "@vercel/express": "23.0.1",
64
+ "@vercel/fastify": "23.0.1",
65
+ "@vercel/go": "26.0.1",
66
+ "@vercel/h3": "23.0.1",
67
+ "@vercel/hono": "23.0.1",
68
+ "@vercel/hydrogen": "24.0.1",
69
+ "@vercel/koa": "23.0.1",
70
+ "@vercel/nestjs": "23.0.1",
71
+ "@vercel/next": "27.0.1",
72
+ "@vercel/node": "28.0.1",
73
+ "@vercel/python": "29.0.1",
74
+ "@vercel/redwood": "25.0.1",
75
+ "@vercel/remix-builder": "28.0.1",
76
+ "@vercel/ruby": "25.0.1",
77
+ "@vercel/rust": "24.0.1",
78
+ "@vercel/static-build": "25.0.1"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@bufbuild/protobuf": "2.12.0",
@@ -211,20 +211,20 @@
211
211
  "ws": "8.18.0",
212
212
  "xdg-app-paths": "5.1.0",
213
213
  "yauzl-promise": "2.1.3",
214
- "@vercel-internals/builder-orchestration": "1.0.30",
215
- "@vercel-internals/cli-builder-integration": "1.0.33",
214
+ "@vercel-internals/builder-orchestration": "1.0.31",
215
+ "@vercel-internals/cli-builder-integration": "1.1.0",
216
+ "@vercel-internals/get-package-json": "1.0.0",
216
217
  "@vercel-internals/constants": "1.0.4",
218
+ "@vercel-internals/runtimes": "1.2.5",
219
+ "@vercel-internals/types": "3.0.33",
217
220
  "@vercel-internals/local-schedules": "0.1.0",
218
- "@vercel-internals/runtimes": "1.2.4",
219
- "@vercel-internals/get-package-json": "1.0.0",
220
- "@vercel-internals/types": "3.0.32",
221
- "@vercel/client": "18.10.0",
222
221
  "@vercel/error-utils": "2.2.1",
223
- "@vercel-internals/service-topology": "1.0.28",
224
- "@vercel/functions": "3.10.4",
222
+ "@vercel/fs-detectors": "7.11.2",
223
+ "@vercel-internals/service-topology": "1.0.29",
225
224
  "@vercel/frameworks": "3.35.0",
226
- "@vercel/fs-detectors": "7.11.1",
227
- "@vercel/routing-utils": "6.6.0"
225
+ "@vercel/client": "18.10.1",
226
+ "@vercel/functions": "3.10.4",
227
+ "@vercel/routing-utils": "6.6.1"
228
228
  },
229
229
  "os": [
230
230
  "!darwin",
@@ -1,8 +0,0 @@
1
- import { createRequire as __createRequire } from 'node:module';
2
- import { fileURLToPath as __fileURLToPath } from 'node:url';
3
- import { dirname as __dirname_ } from 'node:path';
4
- const require = __createRequire(import.meta.url);
5
- const __filename = __fileURLToPath(import.meta.url);
6
- const __dirname = __dirname_(__filename);
7
- import{sleep}from"./chunk-VLYVVC3P.js";import{output_manager_default}from"./chunk-DWOJP4ST.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);async function createDeploymentProtectionToken(client,projectId,orgId){if(!client.authConfig.token)throw output_manager_default.debug("No auth token available, skipping deployment protection token"),new Error("Authentication required to create protection bypass token");try{let response=await client.fetch(`/v1/projects/${projectId}/protection-bypass`,{method:"PATCH",body:"{}",headers:{"Content-Type":"application/json"},accountId:orgId}),{protectionBypass}=response;return output_manager_default.log("You require a deployment protection bypass token to access this deployment... Generating one now..."),output_manager_default.log(`Successfully generated deployment protection bypass token for project ${import_chalk.default.bold(projectId)}
8
- `),output_manager_default.debug(`Protection Bypass Response: ${protectionBypass}`),await sleep(1e3),getAutomationBypassToken(protectionBypass)}catch(error){throw output_manager_default.debug(`Failed to generate deployment protection bypass token: ${error}`),output_manager_default.note('To bypass deployment protection, create a "Protection Bypass for Automation" secret in your project settings:'),output_manager_default.log(` 1. Visit ${import_chalk.default.cyan("https://vercel.com/dashboard")}`),output_manager_default.log(" 2. Go to your project settings \u2192 Deployment Protection"),output_manager_default.log(' 3. Generate a "Protection Bypass for Automation" secret'),output_manager_default.log(` 4. Use it with ${import_chalk.default.cyan("--protection-bypass")} option or set ${import_chalk.default.cyan("VERCEL_AUTOMATION_BYPASS_SECRET")} env var`),output_manager_default.log(""),new Error("Failed to create deployment protection bypass token")}}function getAutomationBypassToken(protectionBypass){if(!protectionBypass)throw new Error("No protection bypass tokens found");let token=Object.keys(protectionBypass).find(key=>protectionBypass[key].scope==="automation-bypass");if(!token)throw new Error("No automation bypass token found in protection bypass settings");return token}async function getOrCreateDeploymentProtectionToken(client,{project,org},{createIfMissing=!0}={}){if(process.env.VERCEL_AUTOMATION_BYPASS_SECRET)return output_manager_default.debug("Using protection bypass secret from environment variable"),process.env.VERCEL_AUTOMATION_BYPASS_SECRET;if(project.protectionBypass&&Object.values(project.protectionBypass).length){let protectionBypass;try{protectionBypass=getAutomationBypassToken(project.protectionBypass)}catch(error){if(!createIfMissing)return output_manager_default.debug(`No existing automation bypass token found for project ${project.id}`),null;throw error}if(protectionBypass)return output_manager_default.debug(`Using existing protection bypass token from project settings: ${protectionBypass}`),protectionBypass}return createIfMissing?await createDeploymentProtectionToken(client,project.id,org.id):(output_manager_default.debug(`Not creating an automation bypass token for project ${project.id}`),null)}export{getOrCreateDeploymentProtectionToken};
@@ -1,7 +0,0 @@
1
- import { createRequire as __createRequire } from 'node:module';
2
- import { fileURLToPath as __fileURLToPath } from 'node:url';
3
- import { dirname as __dirname_ } from 'node:path';
4
- const require = __createRequire(import.meta.url);
5
- const __filename = __fileURLToPath(import.meta.url);
6
- const __dirname = __dirname_(__filename);
7
- import{getProductionUrl}from"./chunk-VT6RIZJH.js";import{output_manager_default}from"./chunk-DWOJP4ST.js";var PROTECTION_METHODS=[{setting:"ssoProtection",id:"vercel_authentication",name:"Vercel Authentication"},{setting:"passwordProtection",id:"password",name:"Password Protection"}];async function getEnabledProtection(client,project){try{let settings=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId});return PROTECTION_METHODS.filter(method=>settings[method.setting]).map(method=>({...method,deploymentType:readDeploymentType(settings[method.setting])}))}catch(err){return output_manager_default.debug(`Could not read Deployment Protection settings: ${err}`),null}}function readDeploymentType(setting){if(setting&&typeof setting=="object"&&"deploymentType"in setting){let{deploymentType}=setting;return typeof deploymentType=="string"?deploymentType:void 0}}var PRODUCTION_DOMAINS_PUBLIC=new Set(["all_except_custom_domains","prod_deployment_urls_and_all_previews","preview"]),PRODUCTION_DEPLOYMENTS_PUBLIC=new Set(["preview"]);function getProtectionForDeployment(methods,deployment){if(!methods)return[];if(deployment.target!=="production")return methods;let publicScopes=getProductionUrl(deployment)?PRODUCTION_DOMAINS_PUBLIC:PRODUCTION_DEPLOYMENTS_PUBLIC;return methods.filter(method=>!method.deploymentType||!publicScopes.has(method.deploymentType))}export{getEnabledProtection,getProtectionForDeployment};
@@ -1,10 +0,0 @@
1
- import { createRequire as __createRequire } from 'node:module';
2
- import { fileURLToPath as __fileURLToPath } from 'node:url';
3
- import { dirname as __dirname_ } from 'node:path';
4
- const require = __createRequire(import.meta.url);
5
- const __filename = __fileURLToPath(import.meta.url);
6
- const __dirname = __dirname_(__filename);
7
- import{getOrCreateDeploymentProtectionToken}from"./chunk-6IATT2ID.js";import{ensureLink}from"./chunk-JMLKK7RL.js";import{toHost}from"./chunk-VAWZZK3Y.js";import{getTeams}from"./chunk-P6ZTEDX2.js";import{curlCommand}from"./chunk-WDUHDLUA.js";import{printError}from"./chunk-VQ755MPP.js";import{help}from"./chunk-SLDWAIO3.js";import{TelemetryClient}from"./chunk-5WYPJ2T5.js";import{detectExplicitScope,getScope,introspectToken,isAppPrincipalEnabled,resolveAppFromToken}from"./chunk-WICRM2JL.js";import{getLinkedProject,getUser}from"./chunk-VLYVVC3P.js";import{getGlobalPathConfig}from"./chunk-55H6G46X.js";import{parseArguments}from"./chunk-F22QLVTX.js";import{InvalidToken,isAPIError}from"./chunk-YCJHUYBJ.js";import{getCommandName}from"./chunk-JESNVRVR.js";import{output_manager_default}from"./chunk-DWOJP4ST.js";import{require_dist}from"./chunk-RM3ZDRYE.js";import{getFlagsSpecification}from"./chunk-A2UZ2O7H.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";import{spawn as spawn2}from"child_process";var requoteArgs=arg=>arg.includes(" ")?arg.includes('"')?`'${arg}'`:`"${arg}"`:arg;var CurlTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path){if(path){let value=path.startsWith("/")?"slash":"no-slash";this.trackCliArgument({arg:"path",value})}}trackCliOptionDeployment(deploymentId){if(deploymentId){let value=deploymentId.startsWith("http://")||deploymentId.startsWith("https://")?"url":deploymentId.startsWith("dpl_")?"dpl_":"no-prefix";this.trackCliOption({option:"deployment",value})}}trackCliOptionProtectionBypass(secret){secret&&this.trackCliOption({option:"protection-bypass",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliFlagTrace(trace2){trace2&&this.trackCliFlag("trace")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYesOnProduction(value){value&&this.trackCliFlag("yes-on-production")}};var import_chalk=__toESM(require_source(),1),import_error_utils=__toESM(require_dist(),1);async function getDeploymentAccounts(client){if(detectExplicitScope(client))return client.config.currentTeam?[client.config.currentTeam]:[];if(isAppPrincipalEnabled())try{await getUser(client)}catch(err){if(!(err instanceof InvalidToken))throw err;let token=await introspectToken(client).catch(()=>null);if(!token||!resolveAppFromToken(token))throw err;return token.team?[token.team.id]:[]}let currentTeam=client.config.currentTeam;try{return(await getTeams(client)).filter(team=>!team.limited).map(team=>team.id).sort((a,b)=>+(b===currentTeam)-+(a===currentTeam))}catch(err){if(err instanceof InvalidToken&&currentTeam)return[currentTeam];throw err}}async function resolveDeployment(client,selector,accountId){let hostOrId=selector.includes(".")?toHost(selector):selector,endpoint=`/v13/deployments/${encodeURIComponent(hostOrId)}`,lookup=async accountId2=>{try{let deployment2=await client.fetch(endpoint,{useCurrentTeam:!1,...accountId2?{accountId:accountId2}:{},bailOn429:!0});return deployment2?{...deployment2,ownerId:deployment2.ownerId??deployment2.team?.id}:null}catch(err){if(!isAPIError(err)||err.status!==403&&err.status!==404)throw err;return output_manager_default.debug(`Deployment lookup failed for ${hostOrId}: ${err}`),null}};if(accountId||detectExplicitScope(client))return lookup(accountId??client.config.currentTeam);let deployment=await lookup();if(deployment?.projectId&&deployment.ownerId)return deployment;let accounts;try{accounts=await getDeploymentAccounts(client)}catch(err){if(deployment?.url)return deployment;throw err}for(let account of accounts){let scoped=await lookup(account);if(scoped?.projectId&&scoped.ownerId)return scoped;deployment??=scoped}return deployment}async function getDeploymentUrlById(client,deploymentIdOrUrl,accountId){try{if(deploymentIdOrUrl.startsWith("http://")||deploymentIdOrUrl.startsWith("https://"))try{return new URL(deploymentIdOrUrl).origin}catch{return output_manager_default.debug(`Invalid deployment URL provided: ${deploymentIdOrUrl}`),null}if(deploymentIdOrUrl.includes("vercel.app"))return`https://${deploymentIdOrUrl}`;let fullDeploymentId=deploymentIdOrUrl;fullDeploymentId.startsWith("dpl_")||(fullDeploymentId=`dpl_${deploymentIdOrUrl}`);let deployment=await resolveDeployment(client,fullDeploymentId,accountId);return!deployment||!deployment.url?null:`https://${deployment.url}`}catch(error){return output_manager_default.debug(`Failed to fetch deployment by ID: ${error}`),null}}function looksLikeHostname(path){let firstSegment=path.split("/")[0];return firstSegment.includes(".")&&!firstSegment.startsWith(".")}function orgFromOwner(id,slug=id){return{type:id.startsWith("team_")?"team":"user",id,slug}}var VC_STRING_FLAGS=new Set(["--deployment","--protection-bypass"]),VC_IGNORED_STRING_FLAGS=new Set(["--scope","--team"]),VC_IGNORED_BOOLEAN_FLAGS=new Set(["--debug"]),VC_BOOLEAN_FLAGS=new Set(["--yes","--help","--trace","--json"]);function flagName(arg){let eqIdx=arg.indexOf("=");return eqIdx===-1?arg:arg.slice(0,eqIdx)}function flagValue(args,index){let arg=args[index],eqIdx=arg.indexOf("=");if(eqIdx!==-1)return arg.slice(eqIdx+1);let next=args[index+1];return next&&!next.startsWith("-")?next:void 0}function getCurlLikeArgs(rawArgs,commandName){if(rawArgs[0]===commandName)return rawArgs.slice(1);let commandIndex=0;for(;commandIndex<rawArgs.length;){let arg=rawArgs[commandIndex];if(VC_IGNORED_BOOLEAN_FLAGS.has(flagName(arg))){commandIndex++;continue}if(!VC_IGNORED_STRING_FLAGS.has(flagName(arg)))break;commandIndex++,!arg.includes("=")&&commandIndex<rawArgs.length&&commandIndex++}return rawArgs[commandIndex]===commandName?rawArgs.slice(commandIndex+1):[...rawArgs]}function parseCurlLikeArgs(rawArgs,commandName){let result={target:void 0,deployment:void 0,protectionBypass:void 0,yes:!1,help:!1,trace:!1,json:!1,toolFlags:[]},args=getCurlLikeArgs(rawArgs,commandName),separatorIndex=args.indexOf("--"),beforeSeparator=separatorIndex===-1?args:args.slice(0,separatorIndex),afterSeparator=separatorIndex===-1?[]:args.slice(separatorIndex+1);for(let i=0;i<beforeSeparator.length;i++){let arg=beforeSeparator[i],name=flagName(arg);if(VC_STRING_FLAGS.has(name)){let value=flagValue(beforeSeparator,i);!arg.includes("=")&&value!==void 0&&i++,name==="--deployment"?result.deployment=value:result.protectionBypass=value;continue}if(!VC_IGNORED_BOOLEAN_FLAGS.has(name)){if(VC_IGNORED_STRING_FLAGS.has(name)){let value=flagValue(beforeSeparator,i);!arg.includes("=")&&value!==void 0&&i++;continue}if(VC_BOOLEAN_FLAGS.has(name)){name==="--yes"?result.yes=!0:name==="--trace"?result.trace=!0:name==="--json"?result.json=!0:result.help=!0;continue}if(!result.target&&name==="--url"){let value=flagValue(beforeSeparator,i);!arg.includes("=")&&value!==void 0&&i++,result.target=value;continue}!result.target&&!arg.startsWith("-")?result.target=arg:result.toolFlags.push(arg)}}return result.toolFlags.push(...afterSeparator),result}function setupCurlLikeCommand(client,command,telemetryClient,options={}){let{print}=output_manager_default;if(options.allowFullUrl){let parsed=parseCurlLikeArgs(options.args??client.argv.slice(2),command.name);if(parsed.help)return print(help(command,{stream:client.stderr,columns:client.stderr.columns})),0;let path2=parsed.target;if(telemetryClient.trackCliArgumentPath(path2),parsed.deployment&&telemetryClient.trackCliOptionDeployment(parsed.deployment),parsed.protectionBypass&&telemetryClient.trackCliOptionProtectionBypass(parsed.protectionBypass),!path2)return output_manager_default.error(`${getCommandName(`${command.name} <url|path>`)} requires a URL or API path (e.g., 'https://example.vercel.app/api/hello' or '/api/hello')`),print(help(command,{stream:client.stderr,columns:client.stderr.columns})),2;let isFullUrl2=path2.startsWith("http://")||path2.startsWith("https://");return!isFullUrl2&&looksLikeHostname(path2)&&(isFullUrl2=!0),output_manager_default.debug(`${command.name} options (${parsed.toolFlags.length} args): ${JSON.stringify(parsed.toolFlags)}`),{path:isFullUrl2&&!path2.startsWith("http")?`https://${path2}`:path2,isFullUrl:isFullUrl2,deploymentFlag:parsed.deployment,protectionBypassFlag:parsed.protectionBypass,toolFlags:parsed.toolFlags,yes:parsed.yes,trace:parsed.trace,json:parsed.json}}let parsedArgs=null,flagsSpecification=getFlagsSpecification(command.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let{flags}=parsedArgs;if(parsedArgs.flags["--help"])return print(help(command,{stream:client.stderr,columns:client.stderr.columns})),0;parsedArgs.args[0]===command.name&&parsedArgs.args.shift();let separatorIndex=process.argv.indexOf("--"),path=parsedArgs.args[0];telemetryClient.trackCliArgumentPath(path);let deploymentFlag=flags["--deployment"];deploymentFlag&&telemetryClient.trackCliOptionDeployment(deploymentFlag);let protectionBypassFlag=flags["--protection-bypass"];if(protectionBypassFlag&&telemetryClient.trackCliOptionProtectionBypass(protectionBypassFlag),!path||path==="--"||path.startsWith("-"))return options.allowFullUrl?output_manager_default.error(`${getCommandName(`${command.name} <url|path>`)} requires a URL or API path (e.g., 'https://example.vercel.app/api/hello' or '/api/hello')`):output_manager_default.error(`${getCommandName(`${command.name} <path>`)} requires an API path (e.g., '/' or '/api/hello' or 'api/hello')`),print(help(command,{stream:client.stderr,columns:client.stderr.columns})),1;let isFullUrl=path.startsWith("http://")||path.startsWith("https://");if(!isFullUrl&&looksLikeHostname(path)&&(isFullUrl=!0),isFullUrl&&!options.allowFullUrl)return output_manager_default.error("The <path> argument must be a relative API path (e.g., '/' or '/api/hello'), not a full URL."),output_manager_default.print("To target a specific deployment within the currently linked project, use the --deployment <id|url> option."),print(help(command,{stream:client.stderr,columns:client.stderr.columns})),1;let toolFlags=separatorIndex!==-1?process.argv.slice(separatorIndex+1):[];return output_manager_default.debug(`${command.name} options (${toolFlags.length} args): ${JSON.stringify(toolFlags)}`),{path:isFullUrl&&!path.startsWith("http")?`https://${path}`:path,isFullUrl,deploymentFlag,protectionBypassFlag,toolFlags,yes:!!flags["--yes"],trace:!!flags["--trace"],json:!!flags["--json"]}}async function resolveProjectFromUrl(client,url){let host=toHost(url);try{let deployment=await resolveDeployment(client,host);if(deployment){let link=await linkFromDeployment(client,deployment);if(link)return link}}catch(err){if(output_manager_default.debug(`Deployment lookup failed for ${host}: ${err}`),isAPIError(err)&&err.status===429)return null}try{let aliasUrl=`/now/aliases/${encodeURIComponent(host)}`;try{let alias=await client.fetch(aliasUrl,{useCurrentTeam:!1,...detectExplicitScope(client)?{accountId:client.config.currentTeam}:{}});if(alias.projectId&&alias.ownerId)return{status:"linked",project:await client.fetch(`/v9/projects/${encodeURIComponent(alias.projectId)}`,{accountId:alias.ownerId}),org:orgFromOwner(alias.ownerId)}}catch(err){output_manager_default.debug(`User alias lookup failed for ${host}: ${err}`)}for(let accountId of await getDeploymentAccounts(client))try{let alias=await client.fetch(aliasUrl,{accountId}),projectId=alias.projectId,ownerId=alias.ownerId||accountId;if(projectId)return{status:"linked",project:await client.fetch(`/v9/projects/${encodeURIComponent(projectId)}`,{accountId:ownerId}),org:orgFromOwner(ownerId)}}catch(err){output_manager_default.debug(`Alias lookup failed for ${host} in ${accountId}: ${err}`)}}catch(err){output_manager_default.debug(`Team lookup failed for ${host}: ${err}`)}return null}async function getFullUrlAndToken(client,fullUrl,protectionBypassFlag){if(protectionBypassFlag)return{fullUrl,deploymentProtectionToken:protectionBypassFlag,link:null};if(process.env.VERCEL_AUTOMATION_BYPASS_SECRET)return output_manager_default.debug("Using protection bypass secret from environment variable"),{fullUrl,deploymentProtectionToken:process.env.VERCEL_AUTOMATION_BYPASS_SECRET,link:null};let link=await resolveProjectFromUrl(client,fullUrl),deploymentProtectionToken=null;if(link)try{deploymentProtectionToken=await getOrCreateDeploymentProtectionToken(client,link)}catch(err){output_manager_default.debug(`Failed to get deployment protection bypass token: ${err}`)}return{fullUrl,deploymentProtectionToken,link}}async function linkFromDeployment(client,deployment){return!deployment.projectId||!deployment.ownerId?null:{status:"linked",project:await client.fetch(`/v9/projects/${encodeURIComponent(deployment.projectId)}`,{accountId:deployment.ownerId}),org:orgFromOwner(deployment.ownerId)}}async function resolveTargetProject(client,deployment,deploymentFlag){try{let link=await linkFromDeployment(client,deployment);return link||output_manager_default.warn(`Deployment "${deploymentFlag}" is missing project metadata; proceeding without an automatic protection bypass token.`),link}catch(err){return output_manager_default.debug(`Failed to resolve deployment project: ${err}`),output_manager_default.warn(`Failed to load project for deployment "${deploymentFlag}"; proceeding without an automatic protection bypass token.`),null}}async function tryGetDeployment(client,selector){try{return await resolveDeployment(client,selector)}catch(err){return output_manager_default.debug(`Failed to resolve deployment: ${err}`),null}}async function tryLinkFromSelector(client,selector){try{let deployment=await resolveDeployment(client,selector);return deployment?await linkFromDeployment(client,deployment):null}catch(err){return output_manager_default.debug(`Failed to resolve trace project context: ${err}`),null}}async function getLinkedProjectOrNull(client){try{let linked=await getLinkedProject(client,{cwd:client.cwd});return linked.status==="linked"?linked:null}catch(err){return output_manager_default.debug(`Failed to load linked project: ${err}`),null}}function hasAutomationBypassToken(project){return Object.values(project.protectionBypass??{}).some(token=>token.scope==="automation-bypass")}async function getDeploymentUrlAndToken(client,commandName,path,options){let{deploymentFlag,protectionBypassFlag,autoConfirm,resolveProjectForTrace}=options,suppliedProtectionBypass=deploymentFlag?protectionBypassFlag??(process.env.VERCEL_AUTOMATION_BYPASS_SECRET||void 0):protectionBypassFlag,link=null,createProtectionBypassIfMissing=!deploymentFlag,baseUrl;if(deploymentFlag){let requestedBaseUrl=deploymentFlag.startsWith("http://")||deploymentFlag.startsWith("https://")||deploymentFlag.includes("vercel.app")?await getDeploymentUrlById(client,deploymentFlag):null,deploymentSelector=deploymentFlag.includes(".")||deploymentFlag.startsWith("dpl_")?deploymentFlag:`dpl_${deploymentFlag}`;if(suppliedProtectionBypass!==void 0){if(baseUrl=requestedBaseUrl??await getDeploymentUrlById(client,deploymentFlag)??"",!baseUrl)return output_manager_default.error(`No deployment found for ID "${deploymentFlag}"`),1;resolveProjectForTrace&&(link=await tryLinkFromSelector(client,deploymentSelector)??await getLinkedProjectOrNull(client))}else{let deployment=await tryGetDeployment(client,deploymentSelector);if(baseUrl=requestedBaseUrl??(deployment?.url?`https://${deployment.url}`:""),!baseUrl)return output_manager_default.error(`No deployment found for ID "${deploymentFlag}"`),1;deployment?(link=await resolveTargetProject(client,deployment,deploymentFlag),link&&!hasAutomationBypassToken(link.project)&&(createProtectionBypassIfMissing=(await getLinkedProjectOrNull(client))?.project.id===link.project.id)):output_manager_default.warn(`Could not resolve project information for deployment "${deploymentFlag}"; proceeding without an automatic protection bypass token.`)}}else{try{await getScope(client)}catch(err){if((0,import_error_utils.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return output_manager_default.error(err.message),1;throw err}let ensuredLink;try{ensuredLink=await ensureLink(commandName,client,client.cwd,{autoConfirm})}catch(err){if((0,import_error_utils.isErrnoException)(err)&&err.code==="NOT_AUTHORIZED")return output_manager_default.error(err.message),1;throw err}if(typeof ensuredLink=="number")return ensuredLink;link=ensuredLink;let{project}=ensuredLink;if(!project.targets&&!project.latestDeployments){let linkedProject=await getLinkedProject(client,{cwd:client.cwd});if(linkedProject.status!=="linked")return output_manager_default.error("This command requires a linked project. Please run:"),output_manager_default.print(" vercel link"),1;if(!linkedProject.project||!linkedProject.org)return output_manager_default.error("Failed to get project information"),1;project=linkedProject.project}let preferredAlias=project.targets?.production?.alias?.[0],backupAlias=project.latestDeployments?.[0]?.url,target=preferredAlias||backupAlias;if(!target)throw new Error("No deployment URL found for the project");baseUrl=`https://${target}`}let fullUrl=`${baseUrl}${path.startsWith("/")?path:`/${path}`}`;output_manager_default.debug(`${import_chalk.default.cyan("Target URL:")} ${import_chalk.default.bold(fullUrl)}`);let deploymentProtectionToken=suppliedProtectionBypass??null;if(suppliedProtectionBypass===void 0&&link?.project.id)try{deploymentProtectionToken=await getOrCreateDeploymentProtectionToken(client,link,{createIfMissing:createProtectionBypassIfMissing})}catch(err){return output_manager_default.error(`Failed to get deployment protection bypass token: ${err instanceof Error?err.message:String(err)}`),1}return{fullUrl,deploymentProtectionToken,link}}function traceCurl(root){let span=root?.child("vc.cli.curl"),finished=!1;return code=>{finished||(finished=!0,code!==0&&span?.setAttributes({error:"true"}),span?.stop())}}var import_error_utils2=__toESM(require_dist(),1);import{spawn}from"child_process";import{tmpdir}from"os";import{join as join2}from"path";import{mkdtemp,readFile as readFile2,rm}from"fs/promises";async function confirmProduction(client,{deploymentTarget,yes,isTTY}){return deploymentTarget!=="production"||yes?"proceed":isTTY?await client.input.confirm("You are about to capture a trace against a production deployment. Continue?",!1)?"proceed":"declined":(output_manager_default.error("Use --yes to capture traces on production from non-interactive contexts."),"non-tty-no-yes")}import{createHash}from"crypto";import{chmod,mkdir,readFile,unlink,writeFile}from"fs/promises";import{dirname,join}from"path";var FALLBACK_TTL_MS=5*60*1e3,EXPIRY_BUFFER_MS=30*1e3,CACHE_SCHEMA_VERSION=1;function resolveCacheDir(override){return override||join(getGlobalPathConfig(),"cache","traces")}function cacheFilename(teamId,host){let key=`${teamId??""}:${host}`;return`${createHash("sha256").update(key).digest("hex")}.json`}function cachePath(cacheDir,teamId,host){return join(cacheDir,cacheFilename(teamId,host))}async function readCache(path){let raw;try{raw=await readFile(path,"utf8")}catch{return null}try{let parsed=JSON.parse(raw);return!parsed||typeof parsed.token!="string"||typeof parsed.expiresAt!="number"||parsed.schemaVersion!==CACHE_SCHEMA_VERSION?null:parsed}catch{return output_manager_default.debug(`Trace cookie cache file is corrupt at ${path}; re-issuing.`),null}}async function writeCache(path,entry){await mkdir(dirname(path),{recursive:!0}),await writeFile(path,JSON.stringify(entry),{mode:384}),await chmod(path,384)}async function issueToken(client,{teamId,projectId,hostname}){let body=JSON.stringify({projectId,hostname}),response=await client.fetch("/v1/projects/traces/session",{method:"POST",body,headers:{"Content-Type":"application/json"},accountId:teamId});if(!response?.token)throw new Error("Trace session response is missing a token");let expiresAt=typeof response.expiresAt=="number"?response.expiresAt:Date.now()+FALLBACK_TTL_MS;return{token:response.token,expiresAt}}async function getTraceSessionToken({client,teamId,projectId,host,evictedToken,cacheDir}){let dir=resolveCacheDir(cacheDir),hostname=toHost(host),path=cachePath(dir,teamId,hostname),cached=await readCache(path);if(cached&&evictedToken&&cached.token===evictedToken)await unlink(path).catch(()=>{});else if(cached&&Date.now()<cached.expiresAt-EXPIRY_BUFFER_MS)return{token:cached.token,expiresAt:cached.expiresAt,fromCache:!0};let issued=await issueToken(client,{teamId,projectId,hostname});try{await writeCache(path,{token:issued.token,expiresAt:issued.expiresAt,schemaVersion:CACHE_SCHEMA_VERSION})}catch(err){output_manager_default.debug(`Failed to write trace cookie cache: ${err}`)}return{token:issued.token,expiresAt:issued.expiresAt,fromCache:!1}}var TRACE_COOKIE_NAME="_vercel_tracing",SESSION_COOKIE_NAME="_vercel_session";async function lookupDeployment(client,fullUrl,accountId){let deployment=await resolveDeployment(client,fullUrl,accountId);if(!deployment)throw new Error("Deployment not found");return deployment}function resolveTeamId(link,deployment){if(link?.org.type==="team")return link.org.id;if(deployment.ownerId?.startsWith("team_"))return deployment.ownerId}function extractVercelId(headerDump){let lines=headerDump.split(/\r?\n/),lastValue;for(let line of lines){let idx=line.indexOf(":");if(idx===-1)continue;line.slice(0,idx).trim().toLowerCase()==="x-vercel-id"&&(lastValue=line.slice(idx+1).trim())}if(!lastValue)return;let sepIdx=lastValue.lastIndexOf("::");return sepIdx===-1?lastValue:lastValue.slice(sepIdx+2)}function extractFinalStatus(headerDump){let lines=headerDump.split(/\r?\n/),lastStatus;for(let line of lines){let match=line.match(/^HTTP\/[\d.]+\s+(\d{3})/);match&&(lastStatus=Number(match[1]))}return lastStatus}async function runCurlAndCaptureHeaders(client,curlFlags,json){let tmpDir=await mkdtemp(join2(tmpdir(),"vc-curl-trace-")),headerFile=join2(tmpDir,"headers"),flags=["--dump-header",headerFile,...curlFlags];try{let{exitCode,capturedBody}=await new Promise(resolve=>{let finishTrace=traceCurl(client.telemetryEventStore.enabled?client.rootSpan:void 0),child=spawn("curl",flags,{stdio:json?["inherit","pipe","inherit"]:"inherit",shell:!1}),buf="";json&&child.stdout&&(child.stdout.setEncoding("utf8"),child.stdout.on("data",chunk=>{buf+=chunk})),child.on("error",err=>{finishTrace(1),err.code==="ENOENT"?output_manager_default.error("curl command not found. Please install curl."):output_manager_default.error(`Failed to execute curl: ${err.message}`),resolve({exitCode:1,capturedBody:buf})}),child.on("close",code=>{finishTrace(code),resolve({exitCode:code??1,capturedBody:buf})})}),headerDump="";try{headerDump=await readFile2(headerFile,"utf8")}catch(err){output_manager_default.debug(`Failed to read curl header dump: ${err}`)}return{exitCode,headerDump,capturedBody}}finally{await rm(tmpDir,{recursive:!0,force:!0}).catch(()=>{})}}async function trace(client,{fullUrl,link,curlFlags,json,yes,telemetry}){telemetry.trackCliFlagTrace(!0),json&&telemetry.trackCliFlagJson(!0);let accountId=link?.org.id,deployment;try{deployment=await lookupDeployment(client,fullUrl,accountId)}catch(err){return output_manager_default.error(`Failed to look up deployment for tracing: ${err instanceof Error?err.message:String(err)}`),1}let projectId=link?.project.id??deployment.projectId;if(!projectId)return output_manager_default.error("Could not resolve project for trace session. Run `vercel link` and retry."),1;let teamId=resolveTeamId(link,deployment),userId;try{userId=client.authConfig.userId??(await getUser(client)).id}catch(err){return output_manager_default.error(`Failed to resolve user for trace session: ${(0,import_error_utils2.errorToString)(err)}`),1}let deploymentTarget=deployment.target==="production"?"production":"preview",confirmation=await confirmProduction(client,{deploymentTarget,yes,isTTY:!!client.stdin.isTTY});if(confirmation==="non-tty-no-yes")return 1;if(confirmation==="declined")return output_manager_default.log("Trace cancelled."),0;deploymentTarget==="production"&&yes&&telemetry.trackCliFlagYesOnProduction(!0);let session;try{session=await getTraceSessionToken({client,teamId,projectId,host:fullUrl})}catch(err){return output_manager_default.error(`Failed to acquire trace session: ${err instanceof Error?err.message:String(err)}`),1}let{exitCode,headerDump,capturedBody}=await runCurlWithCookie(client,session.token,userId,curlFlags,json);if(session.fromCache&&extractFinalStatus(headerDump)===401&&exitCode===0){output_manager_default.debug("Trace cookie returned 401; evicting cache and retrying.");let refreshed;try{refreshed=await getTraceSessionToken({client,teamId,projectId,host:fullUrl,evictedToken:session.token})}catch(err){return output_manager_default.error(`Failed to refresh trace session after 401: ${err instanceof Error?err.message:String(err)}`),1}({exitCode,headerDump,capturedBody}=await runCurlWithCookie(client,refreshed.token,userId,curlFlags,json))}let requestId=extractVercelId(headerDump);return json?(client.stdout.write(`${JSON.stringify({response:capturedBody,requestId:requestId??null},null,2)}
8
- `),requestId?exitCode:exitCode===0?1:exitCode):requestId?(client.stderr.write(`
9
- Run \`vercel traces inspect ${requestId}\` to fetch the trace.
10
- `),exitCode):(output_manager_default.error("Trace cookie was set but the response did not include an x-vercel-id header."),exitCode===0?1:exitCode)}async function runCurlWithCookie(client,token,userId,curlFlags,json){let flagsWithCookie=["--header",`Cookie: ${TRACE_COOKIE_NAME}=${token}; ${SESSION_COOKIE_NAME}=${userId}`,...curlFlags];return output_manager_default.debug(`Executing: curl ${flagsWithCookie.map(requoteArgs).join(" ")}`),runCurlAndCaptureHeaders(client,flagsWithCookie,json)}async function curl(client){return runCurl(client,{})}async function runCurl(client,{forceTrace=!1,args}){let telemetryClient=new CurlTelemetryClient({opts:{store:client.telemetryEventStore}}),setup=setupCurlLikeCommand(client,curlCommand,telemetryClient,{allowFullUrl:!0,args});if(typeof setup=="number")return setup;let{path,isFullUrl,deploymentFlag,protectionBypassFlag,toolFlags,json:jsonFlag}=setup,traceFlag=forceTrace||setup.trace,result=isFullUrl?await getFullUrlAndToken(client,path,protectionBypassFlag):await getDeploymentUrlAndToken(client,"curl",path,{deploymentFlag,protectionBypassFlag,autoConfirm:setup.yes,resolveProjectForTrace:traceFlag});if(typeof result=="number")return result;let{fullUrl,deploymentProtectionToken}=result,curlFlags=[...toolFlags];return deploymentProtectionToken&&curlFlags.unshift("--header",`x-vercel-protection-bypass: ${deploymentProtectionToken}`),curlFlags.unshift("--url",fullUrl),traceFlag?trace(client,{fullUrl,link:result.link??null,curlFlags,json:jsonFlag,yes:setup.yes,telemetry:telemetryClient}):(output_manager_default.debug(`Executing: curl ${curlFlags.map(requoteArgs).join(" ")}`),new Promise(resolve=>{let finishTrace=traceCurl(client.telemetryEventStore.enabled?client.rootSpan:void 0),curlProcess=spawn2("curl",curlFlags,{stdio:"inherit",shell:!1});curlProcess.on("error",err=>{finishTrace(1),"code"in err&&err.code==="ENOENT"?(output_manager_default.error("curl command not found. Please install curl."),resolve(1)):(output_manager_default.error(`Failed to execute curl: ${err.message}`),resolve(1))}),curlProcess.on("close",code=>{finishTrace(code),resolve(code??1)})}))}export{requoteArgs,setupCurlLikeCommand,getDeploymentUrlAndToken,curl,runCurl};
@@ -1,10 +0,0 @@
1
- import { createRequire as __createRequire } from 'node:module';
2
- import { fileURLToPath as __fileURLToPath } from 'node:url';
3
- import { dirname as __dirname_ } from 'node:path';
4
- const require = __createRequire(import.meta.url);
5
- const __filename = __fileURLToPath(import.meta.url);
6
- const __dirname = __dirname_(__filename);
7
- import{linkCommand}from"./chunk-EPO7P734.js";import{quoteArg,teamCache}from"./chunk-F53OKXYI.js";import{LinkRequiredError,ProjectNotFound,isAPIError}from"./chunk-YCJHUYBJ.js";import{getCommandName,packageName}from"./chunk-JESNVRVR.js";import{recordCliError}from"./chunk-DWOJP4ST.js";import{require_dist}from"./chunk-RM3ZDRYE.js";import{pkg_default}from"./chunk-OO572JUC.js";import{arg_common_default,getFlagsSpecification,getGlobalFlagsFromArgs,normalizeFlagName,stripSensitiveAuthArgs,suggestionFlagTakesSeparateValue}from"./chunk-A2UZ2O7H.js";import{__toESM}from"./chunk-BZENIQ7N.js";var AGENT_STATUS={ERROR:"error",ACTION_REQUIRED:"action_required",OK:"ok"},AGENT_REASON={MISSING_ARGUMENTS:"missing_arguments",INVALID_ARGUMENTS:"invalid_arguments",CONFIRMATION_REQUIRED:"confirmation_required",INTERACTIVE_CONFIRMATION_REQUIRED:"interactive_confirmation_required",LOGIN_REQUIRED:"login_required",PROJECT_SETTINGS_REQUIRED:"project_settings_required",NOT_LINKED:"not_linked",NOT_FOUND:"not_found",PROJECT_NOT_FOUND:"project_not_found",MISSING_SCOPE:"missing_scope",SCOPE_NOT_ACCESSIBLE:"scope_not_accessible",AGENT_CANNOT_SWITCH:"agent_cannot_switch",API_ERROR:"api_error",STDIN_ERROR:"stdin_error",RATE_LIMITED:"rate_limited",NETWORK_ERROR:"network_error",UNKNOWN_COMMAND:"unknown_command",SEGMENT_IN_USE:"segment_in_use",ENTITY_IN_USE:"entity_in_use",MISSING_REQUIREMENTS:"missing_requirements",MISSING_NAME:"missing_name",MISSING_VALUE:"missing_value",MISSING_ENVIRONMENT:"missing_environment",ENV_NOT_FOUND:"env_not_found",MULTIPLE_ENVS:"multiple_envs",ENV_FILE_EXISTS:"env_file_exists",GIT_BRANCH_REQUIRED:"git_branch_required",ENV_KEY_SENSITIVE:"env_key_sensitive",AMBIGUOUS_ROUTE:"ambiguous_route",ROUTE_CREATE_FAILED:"route_create_failed",ROUTE_GENERATION_FAILED:"route_generation_failed",DOMAIN_NOT_FOUND:"domain_not_found",PRICE_CHANGED:"price_changed",CONFLICT:"conflict",DOMAIN_NOT_AVAILABLE:"domain_not_available",TLD_NOT_SUPPORTED:"tld_not_supported",PAYMENT_FAILED:"payment_failed",UNKNOWN_OUTCOME:"unknown_outcome",DNS_RECORD_NOT_FOUND:"dns_record_not_found",INCOMPLETE_RECORD:"incomplete_record",PERMISSION_DENIED:"permission_denied",INVALID_PORT:"invalid_port",INVALID_DNS_TYPE:"invalid_dns_type",DNS_ADD_FAILED:"dns_add_failed",INVALID_DOMAIN:"invalid_domain",CONFIGURED_CORRECTLY:"configured_correctly",VERIFICATION_NEEDED:"verification_needed",INVALID_CONFIGURATION:"invalid_configuration",DNS_CHANGE_REQUIRED:"dns_change_required",DNS_CHANGE_RECOMMENDED:"dns_change_recommended",DNSSEC_NEEDS_TO_BE_DISABLED:"dnssec_needs_to_be_disabled",PROJECT_ATTACHMENT_RECOMMENDED:"project_attachment_recommended",PROJECT_DOMAIN_MISSING:"project_domain_missing",INTEGRATION_TERMS_ACCEPTANCE_REQUIRED:"integration_terms_acceptance_required",INTEGRATION_SETUP_REQUIRED:"integration_setup_required",HAS_RESOURCES:"has_resources",INTEGRATION_SANDBOX_CLAIM_REQUIRED:"integration_sandbox_claim_required",CLASSIC_TOKEN_REQUIRED:"classic_token_required",TOKEN_USER_SCOPE_REQUIRED:"token_user_scope_required",MISSING_URL:"missing_url",MISSING_EVENTS:"missing_events",INVALID_URL:"invalid_url",INVALID_EVENT:"invalid_event",INVALID_BUDGET:"invalid_budget",INVALID_REFRESH_PERIOD:"invalid_refresh_period",INVALID_EXPIRATION:"invalid_expiration",INVALID_ALERT_THRESHOLDS:"invalid_alert_thresholds",REQUIRES_CONSENT:"requires_consent",MISSING_ISSUER_ID:"missing_issuer_id",MISSING_KEY:"missing_key",MISSING_KEY_ID:"missing_key_id",MISSING_PROJECT:"missing_project",ISSUER_NOT_FOUND:"issuer_not_found",ISSUER_MANAGED:"issuer_managed",ISSUER_REQUIRES_IMPORTED_KEY:"issuer_requires_imported_key",ISSUER_REQUIRES_GENERATED_KEY:"issuer_requires_generated_key",KEY_NOT_REVOKING:"key_not_revoking",NO_CHANGES_REQUESTED:"no_changes_requested",GIT_REPOSITORY_REQUIRED:"git_repository_required",CI_RUN_NOT_FOUND:"ci_run_not_found",CI_RUN_IN_PROGRESS:"ci_run_in_progress",CI_RUN_NOT_RETRYABLE:"ci_run_not_retryable",SCHEDULES_NOT_ENABLED:"schedules_not_enabled",SCHEDULE_ALREADY_EXISTS:"schedule_already_exists",SCHEDULE_SINGLE_AT_PASSED:"schedule_single_at_passed",SCHEDULE_ALREADY_ACTIVE:"schedule_already_active",STATIC_SCHEDULE:"static_schedule",INVALID_CRON_EXPRESSION:"invalid_cron_expression",INVALID_JITTER:"invalid_jitter",JITTER_EXCEEDS_CADENCE:"jitter_exceeds_cadence",SINGLE_AT_TOO_SOON:"single_at_too_soon",SCHEDULE_PAYLOAD_TOO_LARGE:"payload_too_large",SCHEDULE_PAYLOAD_STORE_FAILED:"payload_store_failed",SCHEDULE_SERVICE_UNAVAILABLE:"service_unavailable",SCHEDULE_SERVICE_ERROR:"service_error",REDIRECT_NOT_FOUND:"redirect_not_found",VERSION_NOT_FOUND:"version_not_found",VERSION_ALREADY_LIVE:"version_already_live",VERSION_IS_STAGING:"version_is_staging",PLAN_UPGRADE_REQUIRED:"plan_upgrade_required",PLAN_LIMIT:"plan_limit",NOT_TEAM_MEMBER:"not_team_member",INVALID_ROLE_COMBINATION:"invalid_role_combination",TARGET_CONFLICT:"target_conflict",DEPRECATED:"deprecated",LIMIT_CLAMPED:"limit_clamped",METRICS_UNAVAILABLE:"metrics_unavailable",STREAM_GAP:"stream_gap",INCOMPLETE_RESULTS:"incomplete_results"},USAGE_ERROR_REASONS=new Set(["invalid_arguments","missing_arguments","unknown_command","missing_command","invalid_environment","invalid_type","missing_id","missing_value","missing_name","missing_flags","missing_clients","invalid_clients","conflicting_type_flags","missing_environment","invalid_slug","invalid_name","invalid_alert_thresholds","invalid_budget","invalid_dns_type","invalid_event","invalid_expiration","invalid_port","invalid_refresh_period","invalid_role_combination","invalid_url","missing_events","missing_issuer_id","missing_key_id","missing_key","missing_url"]);function getExitCodeForReason(reason){return reason!==void 0&&USAGE_ERROR_REASONS.has(reason)?2:1}var AGENT_ACTION={MISSING_ARGUMENTS:"missing_arguments",CONFIRMATION_REQUIRED:"confirmation_required",LOGIN_REQUIRED:"login_required"};var import_error_utils=__toESM(require_dist(),1);var OBSERVABILITY_PLUS_PURCHASE_COMMAND="buy addon observability-plus",PRIORITY_PROJECT_ENABLE_COMMAND="project priority enable",BUY_PRO_COMMAND="buy pro",PROJECT_ENABLE_COMMAND="project observability enable";function mentionsObservabilityPlus(message){return/observability\s+plus/i.test(message)}function mentionsPriorityProject(message){return/priority\s+project/i.test(message)||/priority\s+tier/i.test(message)}function observabilityPlusDenialReason(error){if(!error||typeof error!="object"||!("meta"in error))return;let meta=error.meta;if(meta&&typeof meta=="object"&&"reason"in meta&&typeof meta.reason=="string")return meta.reason}function observabilityPlusPurchaseHint(){return`Subscribe with ${getCommandName(OBSERVABILITY_PLUS_PURCHASE_COMMAND)}.`}function isHobbyLikePlan(plan){return plan==="hobby"||plan==="oss"}function isProOrEnterprisePlan(plan){return plan==="pro"||plan==="enterprise"}function currentTeamPlan(client){let id=client?.config?.currentTeam;if(id)return teamCache.get(id)?.billing?.plan}function planForTeam(idOrSlug){return teamCache.get(idOrSlug)?.billing?.plan}function buyProFix(hint){return{command:BUY_PRO_COMMAND,hint:hint??`Upgrade with ${getCommandName(BUY_PRO_COMMAND)}.`,when:"a person has approved upgrading the plan"}}function observabilityPlusPurchaseFix(){return{command:OBSERVABILITY_PLUS_PURCHASE_COMMAND,hint:observabilityPlusPurchaseHint(),when:"a person has approved buying the add-on"}}function inferDenialReason(message){if(/(?:disabled|switched off|re-enable)/i.test(message))return"subscription_disabled";if(/excluded from it|include the project/i.test(message))return"project_excluded";if(/upgrade your plan/i.test(message)&&/pro and enterprise/i.test(message))return"plan_upgrade_required";if(/(?:quota|usage limit|query limit)/i.test(message))return"quota"}function plusNeedsPlanUpgradeHint(){return`Observability Plus is available on Pro and Enterprise. Upgrade with ${getCommandName(BUY_PRO_COMMAND)}. The add-on cannot be purchased on Hobby.`}function observabilityPlusRecovery(message,denialReason,plan){if(mentionsObservabilityPlus(message))switch(denialReason??inferDenialReason(message)){case"subscription_disabled":return{hint:"Observability Plus is disabled. Ask a team owner to enable it for the intended team or project, then retry. A new subscription may not be needed."};case"project_excluded":return{command:PROJECT_ENABLE_COMMAND,excludeFlags:["--non-interactive","--project","--yes"],hint:`Observability Plus is on for the team, but this project is excluded. Enable it with ${getCommandName(PROJECT_ENABLE_COMMAND)}. A new subscription is not needed.`,preserveProject:!1,when:"a person has approved enabling Observability Plus for this project"};case"plan_upgrade_required":return buyProFix(plusNeedsPlanUpgradeHint());case"quota":return{hint:"The usage limit was reached. Ask a team owner to review the limit before retrying."};default:return isHobbyLikePlan(plan)?buyProFix(plusNeedsPlanUpgradeHint()):{...observabilityPlusPurchaseFix(),hint:`Check whether Observability Plus is disabled for this project or the team needs a subscription. Enable it if already subscribed. Otherwise, ${observabilityPlusPurchaseHint()}`,when:"the team has no subscription and a person has approved buying the add-on"}}}function priorityProjectRecovery(message,plan){if(mentionsPriorityProject(message))return isHobbyLikePlan(plan)?buyProFix(`Priority Projects are only available on Pro or Enterprise team plans. Upgrade with ${getCommandName(BUY_PRO_COMMAND)}, then run ${getCommandName(PRIORITY_PROJECT_ENABLE_COMMAND)}.`):{command:PRIORITY_PROJECT_ENABLE_COMMAND,excludeFlags:["--non-interactive","--project","--yes"],hint:getCommandName(PRIORITY_PROJECT_ENABLE_COMMAND),preserveProject:!1,when:"user runs this command in an interactive terminal"}}function observabilityPlanRecovery(message,denialReason,plan){return priorityProjectRecovery(message,plan)??observabilityPlusRecovery(message,denialReason,plan)}var PROJECT_POSITIONAL_COMMANDS=new Set([PRIORITY_PROJECT_ENABLE_COMMAND,PROJECT_ENABLE_COMMAND]);function currentTeamScope(client){let id=client?.config?.currentTeam;if(id)return teamCache.get(id)?.slug??id}function targetRecovery(fix,target){if(!fix)return;let targeted=command=>{let out=command;return target.projectName&&PROJECT_POSITIONAL_COMMANDS.has(command)&&(out+=` ${quoteArg(target.projectName)}`),target.scope&&(out+=` --scope ${quoteArg(target.scope)}`),out},hint=fix.hint;for(let command of[BUY_PRO_COMMAND,OBSERVABILITY_PLUS_PURCHASE_COMMAND,PRIORITY_PROJECT_ENABLE_COMMAND,PROJECT_ENABLE_COMMAND])hint=hint.split(getCommandName(command)).join(getCommandName(targeted(command)));if(!fix.command)return{...fix,hint};let excludeFlags=new Set(fix.excludeFlags??[]),preserveProject=fix.preserveProject;return target.projectName&&PROJECT_POSITIONAL_COMMANDS.has(fix.command)&&(excludeFlags.add("--project"),preserveProject=!1),fix.command===BUY_PRO_COMMAND&&excludeFlags.add("--project"),target.scope&&(excludeFlags.add("--scope"),excludeFlags.add("--team")),{...fix,command:targeted(fix.command),hint,...excludeFlags.size?{excludeFlags:Array.from(excludeFlags)}:{},...preserveProject!==void 0?{preserveProject}:{}}}function clientObservabilityPlanRecovery(client,error,message,projectName,scope){return targetRecovery(observabilityPlanRecovery(message,observabilityPlusDenialReason(error),scope?planForTeam(scope):currentTeamPlan(client)),{projectName,scope:scope??currentTeamScope(client)})}function errorContext(client){let teamId=client?.config?.currentTeam;return teamId?client?.teams?.find(team=>team.id===teamId||team.slug===teamId)?.slug??teamCache.get(teamId)?.slug:client?.user?.username||client?.user?.email}function getErrorRecovery(error,client){let reason=error.reason?.toLowerCase(),scope=errorContext(client);if(error.status===403||["forbidden","permission_denied","scope_not_accessible"].includes(reason??""))return{hint:`Check that the selected team is correct${scope?` (${scope})`:""}. If it is, ask a team owner to grant the required access. Retry only after the team or access changes.`,retryable:!1,userActionRequired:!0,...scope&&{scope},...error.action&&{action:error.action},...error.resource&&{resource:error.resource}};if(error.status===401||reason==="not_authorized")return{hint:"Provide valid credentials for the intended account and team, then retry.",retryable:!1,userActionRequired:!0};if(error.status===402||["payment_required","plan_upgrade_required"].includes(reason??"")){let message=error.serverMessage??error.message??"";return{hint:observabilityPlanRecovery(message,observabilityPlusDenialReason(error),currentTeamPlan(client))?.hint??(/(?:disabled|switched off|re-enable)/i.test(message)?"Enable the feature for the selected team or project, then retry.":/(?:overdue|payment method|unpaid|balance)/i.test(message)?"Ask a team owner to resolve the billing issue, then retry.":/(?:plan|subscription)/i.test(message)?"Ask a team owner to confirm the required plan or subscription before changing billing. Retry after access is enabled.":"Check the billing or feature requirement reported above with a team owner. Retry after that requirement is resolved."),retryable:!1,userActionRequired:!0,...scope&&{scope}}}if(error.status===429||reason==="rate_limited"){let wait=error.retryAfterMs;return{hint:typeof wait=="number"&&Number.isFinite(wait)&&wait>0?`Wait at least ${Math.ceil(wait/1e3)} seconds before trying again.`:wait==="never"?"This request cannot be retried with the current limit. Ask a team owner to review the limit.":"The request limit was reached. Wait before trying again; no retry time was provided.",retryable:wait!=="never",...typeof wait=="number"&&Number.isFinite(wait)&&wait>0&&{retryAfterMs:wait}}}return{}}import{randomUUID}from"node:crypto";function agentErrorMetadata(client){return client.isAgent?{cliVersion:pkg_default.version,invocationId:client.telemetryEventStore?.currentInvocationId}:{}}function agentErrorCategory(reason){return/^(forbidden|permission_denied|scope_not_accessible)$/i.test(reason)?"permission":/^(payment_required|plan_upgrade_required)$/i.test(reason)?"billing":/^(not_authorized|login_required)$/i.test(reason)?"authentication":/^(rate_limited|too_many_requests)$/i.test(reason)?"rate_limit":/^(invalid_arguments|unknown_command|ARG_UNKNOWN_OPTION)$/i.test(reason)?"usage":/^(link_required|project_not_found|not_found)$/i.test(reason)?"project_context":"other"}function trackAgentError(client,error){!client.isAgent||!client.telemetryEventStore||client.telemetryEventStore.add({id:randomUUID(),eventTime:Date.now(),key:"agent_error",value:JSON.stringify({invocationId:client.telemetryEventStore.currentInvocationId,category:agentErrorCategory(error.reason),hasRecovery:!!error.hint,retryable:error.retryable,userActionRequired:error.userActionRequired})})}function isHelpInvocation(argv){let args=argv.slice(2),separator=args.indexOf("--");return args.slice(0,separator<0?args.length:separator).some(arg=>arg==="--help"||arg==="-h")}function trackAgentCommandOutcome(client,exitCode){if(!client.isAgent||!client.telemetryEventStore)return;let help=isHelpInvocation(client.argv);client.telemetryEventStore.add({id:randomUUID(),eventTime:Date.now(),key:"agent_command_outcome",value:JSON.stringify({invocationId:client.telemetryEventStore.currentInvocationId,exitCode,outcome:help&&(exitCode===0||exitCode===2)?"help":exitCode===0?"success":"failure"})})}function buildCommandWithYes(argv,pkgName=packageName){let args=stripSensitiveAuthArgs(argv.slice(2)),out=args.some(a=>a==="--yes"||a==="-y")?args:[...args,"--yes"];return`${pkgName} ${out.join(" ")}`.trim()}function redactEnvValueArgs(argv){let redacted=[...argv];for(let i=0;i<redacted.length;i++)redacted[i]==="--value"&&i+1<redacted.length?(redacted[i+1]='"<value>"',i++):redacted[i].startsWith("--value=")&&(redacted[i]='--value="<value>"');return redacted}var GLOBAL_FLAG_NAMES=new Set(["--cwd","--config","--yes","-y","--non-interactive","--scope","--team","-S","-T"]),GLOBAL_FLAG_SHORTHANDS={"-y":"--yes","-S":"--scope","-T":"--team"};function canonicalGlobalFlagName(name){return GLOBAL_FLAG_SHORTHANDS[name]??name}function getGlobalFlagsFromArgv(argv){let args=getGlobalFlagsFromArgs(argv.slice(2),{preserveConfig:!0,preserveYes:!0}),out=[];for(let i=0;i<args.length;i++){let arg=args[i],name=arg.startsWith("--")?arg.split("=")[0]:arg;GLOBAL_FLAG_NAMES.has(name)&&(out.push(arg),suggestionFlagTakesSeparateValue(name)&&!arg.includes("=")&&i+1<args.length&&!args[i+1].startsWith("-")&&(out.push(args[i+1]),i++))}return out}function omitGlobalFlagsFromArgs(args){let safeArgs=stripSensitiveAuthArgs(args),out=[];for(let i=0;i<safeArgs.length;i++){let arg=safeArgs[i],name=arg.startsWith("--")?arg.split("=")[0]:arg;if(GLOBAL_FLAG_NAMES.has(name)){suggestionFlagTakesSeparateValue(name)&&!arg.includes("=")&&i+1<safeArgs.length&&!safeArgs[i+1].startsWith("-")&&i++;continue}out.push(arg)}return out}function buildIntegrationCommandTailFromArgv(argv){let args=argv.slice(2),idx=args.indexOf("integration");return idx===-1?"integration":omitGlobalFlagsFromArgs(args.slice(idx)).join(" ")}function buildCommandWithGlobalFlags(argv,commandTemplate,pkgName=packageName,options){let preserved=options?.globalFlags==="all"?getGlobalFlagsFromArgs(argv.slice(2),{preserveProject:options.preserveProject}):getGlobalFlagsFromArgv(argv);if(options?.globalFlags!=="all"&&options?.preserveProject){let globalArgs=getGlobalFlagsFromArgs(argv.slice(2)),contextArgs=getGlobalFlagsFromArgs(argv.slice(2),{preserveProject:!0});preserved.push(...contextArgs.slice(globalArgs.length))}let exclude=new Set(commandTemplate.split(/\s+/).filter(token=>token.startsWith("-")).map(token=>canonicalGlobalFlagName(token.split("=")[0])));for(let flag of options?.excludeFlags??[])exclude.add(canonicalGlobalFlagName(flag));if(exclude.size){let out=[];for(let i=0;i<preserved.length;i++){let arg=preserved[i],name=arg.startsWith("--")?arg.split("=")[0]:arg;if(exclude.has(canonicalGlobalFlagName(name))){!arg.includes("=")&&i+1<preserved.length&&!preserved[i+1].startsWith("-")&&i++;continue}out.push(arg)}preserved=out}let base=`${pkgName} ${commandTemplate}`;return preserved.length===0?base:options?.prependGlobalFlags?`${pkgName} ${preserved.join(" ")} ${commandTemplate}`:`${base} ${preserved.join(" ")}`}function withGlobalFlags(client,commandTemplate,options={}){return buildCommandWithGlobalFlags(client.argv,commandTemplate,packageName,{globalFlags:"all",preserveProject:options.preserveProject})}function getPreservedArgsAfterEnvSubcommand(argv,subcommands,positionalCount){let args=stripSensitiveAuthArgs(argv.slice(2)),envIdx=args.findIndex((arg,index)=>arg==="env"&&subcommands.includes(args[index+1])),subcommandIdx=envIdx+1;if(envIdx===-1)return args;let preserved=[],positionals=0,optionsEnded=!1;for(let i=subcommandIdx+1;i<args.length;i++){let arg=args[i];if(arg==="--"&&!optionsEnded){optionsEnded=!0;continue}if(!optionsEnded&&arg.startsWith("-")){let flag=arg==="-e"?"--environment":arg;preserved.push(flag),!flag.includes("=")&&suggestionFlagTakesSeparateValue(flag)&&i+1<args.length&&!args[i+1].startsWith("-")&&preserved.push(args[++i]);continue}if(positionals<positionalCount){positionals++;continue}optionsEnded&&!preserved.includes("--")&&preserved.push("--"),preserved.push(arg)}return preserved}function omitPreservedFlagsAlreadyInTemplate(args,commandTemplate){let templateFlags=new Set(commandTemplate.split(/\s+/).filter(token=>token.startsWith("-")).map(token=>canonicalGlobalFlagName(token.split("=")[0]))),out=[];for(let i=0;i<args.length;i++){let arg=args[i],name=arg.startsWith("-")?arg.split("=")[0]:arg;if(!templateFlags.has(canonicalGlobalFlagName(name))){out.push(arg);continue}!arg.includes("=")&&suggestionFlagTakesSeparateValue(name)&&i+1<args.length&&!args[i+1].startsWith("-")&&i++}return out}function getPreservedArgsForEnvAdd(argv){return getPreservedArgsAfterEnvSubcommand(argv,["add"],3)}function buildEnvAddCommandWithPreservedArgs(argv,commandTemplate,pkgName=packageName){let preserved=omitPreservedFlagsAlreadyInTemplate(getPreservedArgsForEnvAdd(argv),commandTemplate),base=`${pkgName} ${commandTemplate}`;return preserved.length===0?base:`${base} ${preserved.map(quoteArg).join(" ")}`}function getPreservedArgsForEnvPull(argv){return getPreservedArgsAfterEnvSubcommand(argv,["pull"],1)}function getPreservedArgsForEnvRm(argv){return getPreservedArgsAfterEnvSubcommand(argv,["rm","remove"],3)}function buildEnvRmCommandWithPreservedArgs(argv,commandTemplate,pkgName=packageName){let preserved=omitPreservedFlagsAlreadyInTemplate(getPreservedArgsForEnvRm(argv),commandTemplate),base=`${pkgName} ${commandTemplate}`;return preserved.length===0?base:`${base} ${preserved.map(quoteArg).join(" ")}`}var LINK_FLAGS={...arg_common_default(),...getFlagsSpecification(linkCommand.options)};function getLinkSuggestionArgs(args){let out=[];for(let i=0;i<args.length;i++){let arg=args[i];if(!arg.startsWith("-"))continue;let spec=LINK_FLAGS[normalizeFlagName(arg)],handler=typeof spec=="string"?LINK_FLAGS[spec]:spec,hasSeparateValue=!arg.includes("=")&&i+1<args.length&&!args[i+1].startsWith("-");if(handler===void 0){hasSeparateValue&&suggestionFlagTakesSeparateValue(arg)&&i++;continue}out.push(arg),hasSeparateValue&&handler!==Boolean&&out.push(args[++i])}return out}function getPreservedArgsForEnvUpdate(argv){return getPreservedArgsAfterEnvSubcommand(argv,["update"],3)}function buildEnvUpdateCommandWithPreservedArgs(argv,commandTemplate,pkgName=packageName){let preserved=omitPreservedFlagsAlreadyInTemplate(getPreservedArgsForEnvUpdate(argv),commandTemplate),base=`${pkgName} ${commandTemplate}`;return preserved.length===0?base:`${base} ${preserved.map(quoteArg).join(" ")}`}function buildCommandWithScope(argv,scopeSlug,pkgName=packageName){let args=stripSensitiveAuthArgs(argv.slice(2)),out=[];for(let i=0;i<args.length;i++){if(args[i]==="--scope"||args[i]==="--team"||args[i]==="-S"||args[i]==="-T"){i++;continue}args[i].startsWith("--scope=")||args[i].startsWith("--team=")||out.push(args[i])}return out.push("--scope",scopeSlug),`${pkgName} ${out.join(" ")}`}function enrichActionRequiredWithInvokingCommand(payload,argv){if(payload.reason!=="missing_scope"||!payload.choices?.length)return payload;let next=[],linkCommand2=buildCommandWithGlobalFlags(argv,"link",packageName,{preserveProject:!0,excludeFlags:["--scope","--team"]});for(let choice of payload.choices){let slug=choice.name;next.push({command:`${linkCommand2} --scope ${slug}`,when:"Link first (then run any command without --scope)"}),next.push({command:buildCommandWithScope(argv,slug),when:"Run this command with scope (no link)"})}return{...payload,next}}function outputActionRequired(client,payload,exitCode=getExitCodeForReason(payload.reason)){shouldEmitNonInteractiveCommandError(client)&&(writeActionRequired(client,payload),process.exit(exitCode))}function writeActionRequired(client,payload){let enriched=enrichActionRequiredWithInvokingCommand(payload,client.argv);!enriched.hint&&enriched.next?.length&&(enriched.hint="Run one of the commands in next[] to complete without prompting."),recordCliError({code:payload.reason}),client.stdout.write(`${JSON.stringify(enriched,null,2)}
8
- `)}function argvHasNonInteractive(argv){if(!argv?.length)return!1;for(let i=0;i<argv.length;i++){let a=argv[i];if(a==="--non-interactive")return argv[i+1]!=="false";if(a.startsWith("--non-interactive="))return a.slice(18)!=="false"}return!1}function shouldEmitNonInteractiveCommandError(client){return client.nonInteractive||argvHasNonInteractive(client.argv??[])}function outputAgentError(client,payload,exitCode=getExitCodeForReason(payload.reason)){shouldEmitNonInteractiveCommandError(client)&&(writeAgentError(client,payload),process.exit(exitCode))}function writeAgentError(client,payload){let enriched={...getErrorRecovery(payload,client),...payload,...agentErrorMetadata(client),...client.isAgent&&{feedback:{message:"Please send one brief feedback report about this error while helping the user resolve it. Don't delay the user's request for feedback.",command:"Run the 'vercel feedback --help' command to see how to report feedback. Make sure all feedback, including text copied from errors or logs, excludes personal data, account identifiers (e.g., usernames, team IDs, project names), and secrets (e.g., API keys, tokens, env values, credentials)."}}};recordCliError({code:payload.reason,reportOnSuccess:!0}),trackAgentError(client,enriched),client.stdout.write(`${JSON.stringify(enriched,null,2)}
9
- `)}function outputAgentSuccess(client,payload,exitCode=0){shouldEmitNonInteractiveCommandError(client)&&(!payload.hint&&payload.next?.length&&(payload.hint="Follow up with one of the commands in next[]."),client.stdout.write(`${JSON.stringify(payload,null,2)}
10
- `),process.exit(exitCode))}function buildNextStepsForGlobalConfig(client){return[{command:buildCommandWithGlobalFlags(client.argv,"global-config list"),when:"List Global Config stores in the current team scope"},{command:buildCommandWithGlobalFlags(client.argv,"teams switch"),when:"Switch to the team that owns the Global Config"},{command:buildCommandWithGlobalFlags(client.argv,"whoami"),when:"Verify the current team or user scope"}]}var GLOBAL_CONFIG_NON_INTERACTIVE_HINT="Global Config commands use your current team scope. Pass --scope or run `vercel teams switch` if the store is missing.",LIST_ERROR_HINT="Project names are team-scoped. Use --scope when the project belongs to another team, or `list --all` to list deployments across all projects.";function buildNextStepsForList(client,projectName){return[projectName?{command:buildCommandWithGlobalFlags(client.argv,`project ls --query ${projectName}`),when:"Search projects matching the attempted name to find the right one"}:{command:buildCommandWithGlobalFlags(client.argv,"project ls --query <name>"),when:"Search projects by name substring to find the right one (replace <name>)"},{command:buildCommandWithGlobalFlags(client.argv,"list --all"),when:"List deployments across all projects in the current scope"},{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"Re-link this directory to the correct Vercel project"}]}function buildNextStepsForProjectSubcommands(client,variant){let byName=variant==="access-groups"?{template:"project access-groups <name>",when:"List access groups by project name (replace <name>)"}:variant==="access-summary"?{template:"project access-summary <name>",when:"Show role counts by project name (replace <name>)"}:variant==="protection"?{template:"project protection <name>",when:"Show deployment protection by project name (replace <name>)"}:variant==="update"?{template:"project update <name> --framework <slug>",when:"Update a framework preset by project name (replace <name> and <slug>)"}:variant==="speed-insights"?{template:"project speed-insights <name>",when:"Enable Speed Insights by project name (replace <name>)"}:variant==="web-analytics"?{template:"project web-analytics <name>",when:"Enable Web Analytics by project name (replace <name>)"}:variant==="observability"?{template:"project observability enable <name>",when:"Enable Observability Plus by project name (replace <name>)"}:variant==="checks"?{template:"project checks add <name>",when:"Create a deployment check by project name (replace <name>)"}:variant==="inspect"?{template:"project inspect <name>",when:"Inspect a project by name (replace <name>)"}:variant==="resume"?{template:"project resume <name>",when:"Resume production traffic by project name (replace <name>)"}:{template:"project members <name>",when:"List members by project name (replace <name>)"};return[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"Re-link this directory to the correct Vercel project"},{command:buildCommandWithGlobalFlags(client.argv,byName.template),when:byName.when},{command:buildCommandWithGlobalFlags(client.argv,"project ls"),when:"List projects in the current team to pick a name"}]}var PROJECT_SUBCOMMAND_ERROR_HINT="If you use --cwd, ensure that folder is linked to the right project, or pass an explicit project name. Use --scope when the project belongs to another team.";function resolveNonInteractiveDefaults(client,variant){return variant==="global-config"?{next:buildNextStepsForGlobalConfig(client),hint:GLOBAL_CONFIG_NON_INTERACTIVE_HINT}:variant==="list"?{next:buildNextStepsForList(client),hint:LIST_ERROR_HINT}:{next:buildNextStepsForProjectSubcommands(client,variant),hint:PROJECT_SUBCOMMAND_ERROR_HINT}}function writeAgentErrorPayloadAndExit(client,payload,exitCode,variant){let defaults=["link_required","project_not_found","not_found"].includes(payload.reason)?resolveNonInteractiveDefaults(client,variant):{},out={...payload,next:payload.next??defaults.next,hint:payload.hint??defaults.hint};writeAgentError(client,out),process.exit(exitCode)}function isProjectNotFoundLike(err){return!!(err instanceof ProjectNotFound||(0,import_error_utils.isError)(err)&&"code"in err&&err.code==="PROJECT_NOT_FOUND")}function isLinkRequiredLike(err){return err instanceof LinkRequiredError}function normalizeApiErrorText(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function exitWithNonInteractiveError(client,err,exitCode=1,options={variant:"members"}){if(!shouldEmitNonInteractiveCommandError(client))return;let{variant}=options;if(isLinkRequiredLike(err)){if(variant==="global-config"){writeAgentErrorPayloadAndExit(client,{status:"error",reason:"link_required",message:err instanceof Error?err.message:String(err),next:buildNextStepsForGlobalConfig(client),hint:GLOBAL_CONFIG_NON_INTERACTIVE_HINT},exitCode,"global-config");return}writeAgentErrorPayloadAndExit(client,{status:"error",reason:"link_required",message:err instanceof Error?err.message:String(err)},exitCode,variant);return}if(isProjectNotFoundLike(err)){writeAgentErrorPayloadAndExit(client,{status:"error",reason:"project_not_found",message:err instanceof Error?err.message:String(err),...variant==="list"&&options.projectName?{next:buildNextStepsForList(client,options.projectName)}:{}},exitCode,variant);return}if(isAPIError(err)){let rawMessage=err.serverMessage||err.message,message=normalizeApiErrorText(rawMessage),reason=err.status===403?"forbidden":err.status===402?"payment_required":err.status===401?"not_authorized":err.status===404?variant==="global-config"?"not_found":"project_not_found":err.status===429?"rate_limited":"api_error";writeAgentErrorPayloadAndExit(client,{status:"error",reason,message,...getErrorRecovery(err,client),...err.action&&{action:err.action},...err.resource&&{resource:err.resource}},exitCode,variant)}writeAgentErrorPayloadAndExit(client,{status:"error",reason:"unexpected_error",message:err instanceof Error?err.message:String(err)},exitCode,variant)}function openUrlInBrowserCommand(url){return process.platform==="win32"?`start ${url}`:process.platform==="darwin"?`open '${url}'`:`xdg-open '${url}'`}export{AGENT_STATUS,AGENT_REASON,getExitCodeForReason,AGENT_ACTION,PRIORITY_PROJECT_ENABLE_COMMAND,BUY_PRO_COMMAND,isProOrEnterprisePlan,buyProFix,targetRecovery,clientObservabilityPlanRecovery,getErrorRecovery,agentErrorMetadata,trackAgentError,isHelpInvocation,trackAgentCommandOutcome,buildCommandWithYes,redactEnvValueArgs,getGlobalFlagsFromArgv,omitGlobalFlagsFromArgs,buildIntegrationCommandTailFromArgv,buildCommandWithGlobalFlags,withGlobalFlags,getPreservedArgsForEnvAdd,buildEnvAddCommandWithPreservedArgs,getPreservedArgsForEnvPull,getPreservedArgsForEnvRm,buildEnvRmCommandWithPreservedArgs,getLinkSuggestionArgs,getPreservedArgsForEnvUpdate,buildEnvUpdateCommandWithPreservedArgs,outputActionRequired,writeActionRequired,argvHasNonInteractive,shouldEmitNonInteractiveCommandError,outputAgentError,writeAgentError,outputAgentSuccess,exitWithNonInteractiveError,openUrlInBrowserCommand};
@@ -1,10 +0,0 @@
1
- import { createRequire as __createRequire } from 'node:module';
2
- import { fileURLToPath as __fileURLToPath } from 'node:url';
3
- import { dirname as __dirname_ } from 'node:path';
4
- const require = __createRequire(import.meta.url);
5
- const __filename = __fileURLToPath(import.meta.url);
6
- const __dirname = __dirname_(__filename);
7
- import{commands,commandsStructs}from"./chunk-WDUHDLUA.js";import{printError}from"./chunk-VQ755MPP.js";import{createHelpTheme,help,helpCommand,resolveHelpTarget}from"./chunk-SLDWAIO3.js";import{TelemetryClient}from"./chunk-5WYPJ2T5.js";import{require_ci_info}from"./chunk-2EYYB6YN.js";import{AGENT_STATUS,shouldEmitNonInteractiveCommandError,writeAgentError}from"./chunk-XE24Y6NM.js";import{parseArguments,takeCommand}from"./chunk-F22QLVTX.js";import{getCommandNamePlain}from"./chunk-JESNVRVR.js";import{output_manager_default}from"./chunk-DWOJP4ST.js";import{getFlagsSpecification,globalCliFlagTakesValue}from"./chunk-A2UZ2O7H.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_ci_info=__toESM(require_ci_info(),1);var launchTargets=["cli-support","darwin-arm64","darwin-x64","linux-arm64","linux-arm64-musl","linux-x64","linux-x64-musl"],launchFallbackReasons=["target_missing","ENOENT","EACCES","ENOEXEC","opt_out","inherited_native_env","download_failed"],launchSources=["download","cache"];function oneOf(value,allowed){return typeof value=="string"&&allowed.includes(value)?value:"other"}var RootTelemetryClient=class extends TelemetryClient{trackCliExtension(){this.trackExtension()}trackCliDefaultDeploy(defaultDeploy){defaultDeploy&&this.trackDefaultDeploy()}trackCliCommandAgent(actual){this.trackCliCommand({command:"agent",value:actual})}trackCliCommandAgentRuns(actual){this.trackCliCommand({command:"agent-runs",value:actual})}trackCliCommandAiGateway(actual){this.trackCliCommand({command:"ai-gateway",value:actual})}trackCliCommandTokenPass(actual){this.trackCliCommand({command:"token-pass",value:actual})}trackCliCommandAlias(actual){this.trackCliCommand({command:"alias",value:actual})}trackCliCommandActivity(actual){this.trackCliCommand({command:"activity",value:actual})}trackCliCommandAlerts(actual){this.trackCliCommand({command:"alerts",value:actual})}trackCliCommandApi(actual){this.trackCliCommand({command:"api",value:actual})}trackCliCommandBisect(actual){this.trackCliCommand({command:"bisect",value:actual})}trackCliCommandBlob(actual){this.trackCliCommand({command:"blob",value:actual})}trackCliCommandBudgets(actual){this.trackCliCommand({command:"budgets",value:actual})}trackCliCommandBuild(actual){this.trackCliCommand({command:"build",value:actual})}trackCliCommandBuy(actual){this.trackCliCommand({command:"buy",value:actual})}trackCliCommandCache(actual){this.trackCliCommand({command:"cache",value:actual})}trackCliCommandCerts(actual){this.trackCliCommand({command:"certs",value:actual})}trackCliCommandCi(actual){this.trackCliCommand({command:"ci",value:actual})}trackCliCommandChangelog(actual){this.trackCliCommand({command:"changelog",value:actual})}trackCliCommandComments(actual){this.trackCliCommand({command:"comments",value:actual})}trackCliCommandConnex(actual){this.trackCliCommand({command:"connect",value:actual})}trackCliCommandContract(actual){this.trackCliCommand({command:"contract",value:actual})}trackCliCommandCrons(actual){this.trackCliCommand({command:"crons",value:actual})}trackCliCommandCurl(actual){this.trackCliCommand({command:"curl",value:actual})}trackCliCommandDaemons(actual){this.trackCliCommand({command:"daemons",value:actual})}trackCliCommandDeploy(actual){this.trackCliCommand({command:"deploy",value:actual})}trackCliCommandDeployHooks(actual){this.trackCliCommand({command:"deploy-hooks",value:actual})}trackCliCommandDev(actual){this.trackCliCommand({command:"dev",value:actual})}trackCliCommandDomains(actual){this.trackCliCommand({command:"domains",value:actual})}trackCliCommandDrains(actual){this.trackCliCommand({command:"drains",value:actual})}trackCliCommandDns(actual){this.trackCliCommand({command:"dns",value:actual})}trackCliCommandEnv(actual){this.trackCliCommand({command:"env",value:actual})}trackCliCommandExperiments(actual){this.trackCliCommand({command:"experiments",value:actual})}trackCliCommandFirewall(actual){this.trackCliCommand({command:"firewall",value:actual})}trackCliCommandFlags(actual){this.trackCliCommand({command:"flags",value:actual})}trackCliCommandGit(actual){this.trackCliCommand({command:"git",value:actual})}trackCliCommandGlobalConfig(actual){this.trackCliCommand({command:"global-config",value:actual})}trackCliCommandGuidance(actual){this.trackCliCommand({command:"guidance",value:actual})}trackCliCommandHealth(actual){this.trackCliCommand({command:"health",value:actual})}trackCliCommandHelp(actual){this.trackCliCommand({command:"help",value:actual})}trackCliCommandHttpstat(actual){this.trackCliCommand({command:"httpstat",value:actual})}trackCliCommandInit(actual){this.trackCliCommand({command:"init",value:actual})}trackCliCommandInspect(actual){this.trackCliCommand({command:"inspect",value:actual})}trackCliCommandInstall(actual){this.trackCliCommand({command:"install",value:actual})}trackCliCommandIntegration(actual){this.trackCliCommand({command:"integration",value:actual})}trackCliCommandIntegrationResource(actual){this.trackCliCommand({command:"integration-resource",value:actual})}trackCliCommandKms(actual){this.trackCliCommand({command:"kms",value:actual})}trackCliCommandLink(actual){this.trackCliCommand({command:"link",value:actual})}trackCliCommandList(actual){this.trackCliCommand({command:"list",value:actual})}trackCliCommandLogin(actual){this.trackCliCommand({command:"login",value:actual})}trackCliCommandLogout(actual){this.trackCliCommand({command:"logout",value:actual})}trackCliCommandLogs(actual){this.trackCliCommand({command:"logs",value:actual})}trackCliCommandMetrics(actual){this.trackCliCommand({command:"metrics",value:actual})}trackCliCommandMicrofrontends(actual){this.trackCliCommand({command:"microfrontends",value:actual})}trackCliCommandMonitors(actual){this.trackCliCommand({command:"monitors",value:actual})}trackCliCommandOpen(actual){this.trackCliCommand({command:"open",value:actual})}trackCliCommandFeedback(actual){this.trackCliCommand({command:"feedback",value:actual})}trackCliCommandPricing(actual){this.trackCliCommand({command:"pricing",value:actual})}trackCliCommandProject(actual){this.trackCliCommand({command:"project",value:actual})}trackCliCommandPromote(actual){this.trackCliCommand({command:"promote",value:actual})}trackCliCommandPull(actual){this.trackCliCommand({command:"pull",value:actual})}trackCliCommandRollback(actual){this.trackCliCommand({command:"rollback",value:actual})}trackCliCommandRollingRelease(actual){this.trackCliCommand({command:"rolling-release",value:actual})}trackCliCommandRedeploy(actual){this.trackCliCommand({command:"redeploy",value:actual})}trackCliCommandRedirects(actual){this.trackCliCommand({command:"redirects",value:actual})}trackCliCommandRoutes(actual){this.trackCliCommand({command:"routes",value:actual})}trackCliCommandRemove(actual){this.trackCliCommand({command:"remove",value:actual})}trackCliCommandSignup(actual){this.trackCliCommand({command:"signup",value:actual})}trackCliCommandSkills(actual){this.trackCliCommand({command:"skills",value:actual})}trackCliCommandSetup(actual){this.trackCliCommand({command:"setup",value:actual})}trackCliCommandSandbox(actual){this.trackCliCommand({command:"sandbox",value:actual})}trackCliCommandSchedules(actual){this.trackCliCommand({command:"schedules",value:actual})}trackCliCommandSecurity(actual){this.trackCliCommand({command:"security",value:actual})}trackCliCommandStorage(actual){this.trackCliCommand({command:"storage",value:actual})}trackCliCommandEnvironments(actual){this.trackCliCommand({command:"environments",value:actual})}trackCliCommandTeams(actual){this.trackCliCommand({command:"teams",value:actual})}trackCliCommandOrganizations(actual){this.trackCliCommand({command:"organizations",value:actual})}trackCliCommandTokens(actual){this.trackCliCommand({command:"tokens",value:actual})}trackCliCommandTelemetry(actual){this.trackCliCommand({command:"telemetry",value:actual})}trackCliCommandTraces(actual){this.trackCliCommand({command:"traces",value:actual})}trackCliCommandWhoami(actual){this.trackCliCommand({command:"whoami",value:actual})}trackCliCommandUpgrade(actual){this.trackCliCommand({command:"upgrade",value:actual})}trackCliCommandVersion(actual){this.trackCliCommand({command:"version",value:actual})}trackCliCommandWebhooks(actual){this.trackCliCommand({command:"webhooks",value:actual})}trackCliCommandUsage(actual){this.trackCliCommand({command:"usage",value:actual})}trackCliCommandVcr(actual){this.trackCliCommand({command:"vcr",value:actual})}trackCPUs(){super.trackCPUs()}trackAgenticUse(agent){super.trackAgenticUse(agent)}trackArch(){super.trackArch()}trackPlatform(){super.trackPlatform()}trackLibc(libc){super.trackLibc(libc)}trackCliLaunch(){let launch=globalThis[Symbol.for("vercel.cli.launch")];launch?.runtime==="native"?this.trackLaunch(launch.source===void 0?{runtime:"native"}:{runtime:"native",source:oneOf(launch.source,launchSources)}):launch?.runtime==="cli-support"?this.trackLaunch({runtime:launch.runtime}):launch?.runtime==="dist"&&this.trackLaunch({runtime:"dist",target:oneOf(launch.target,launchTargets),reason:oneOf(launch.reason,launchFallbackReasons)})}trackCIVendorName(){this.trackCI(import_ci_info.default.id)}trackStdinIsTTY(isTTY){super.trackStdinIsTTY(isTTY)}trackVersion(version){super.trackVersion(version)}trackProjectId(projectId){super.trackProjectId(projectId)}trackInvocationId(invocationId){super.trackInvocationId(invocationId)}trackDeviceId(deviceId){super.trackDeviceId(deviceId)}trackVercelPluginActiveSession(){super.trackVercelPluginActiveSession()}trackVercelPluginVersion(version){super.trackVercelPluginVersion(version)}trackErrorStatus(status){super.trackErrorStatus(status)}trackErrorCode(code){super.trackErrorCode(code)}trackErrorSlug(slug){super.trackErrorSlug(slug)}trackErrorAction(action){super.trackErrorAction(action)}trackErrorServerMessage(serverMessage){super.trackErrorServerMessage(serverMessage)}trackCliOptionCwd(cwd){cwd&&this.trackCliOption({option:"cwd",value:this.redactedValue})}trackCliOptionLocalConfig(localConfig){localConfig&&this.trackCliOption({option:"local-config",value:this.redactedValue})}trackCliOptionGlobalConfig(globalConfig){globalConfig&&this.trackCliOption({option:"global-config",value:this.redactedValue})}trackCliOptionScope(scope){scope&&this.trackCliOption({option:"scope",value:this.redactedValue})}trackCliOptionToken(token){token&&this.trackCliOption({option:"token",value:this.redactedValue})}trackCliOptionTeam(team){team&&this.trackCliOption({option:"team",value:this.redactedValue})}trackCliOptionApi(api){api&&this.trackCliOption({option:"api",value:this.redactedValue})}trackCliFlagDebug(debug){debug&&this.trackCliFlag("debug")}trackCliFlagNoColor(noColor){noColor&&this.trackCliFlag("no-color")}trackCliDeprecatedShorthands(shorthands){for(let shorthand of shorthands)this.trackDeprecatedShorthand(shorthand)}};function printCommandHelp(client,commandName,tokens){let found=findBuiltInCommand(commandName,tokens);if(!found)return;let{root}=found,target=resolveHelpTarget(root,found.tokens);return target.unknownSegment!==void 0?(printUnknownCommand(client,target.unknownSegment,[root.name,...target.typedPath]),2):target.command.dynamicHelp?void 0:(new RootTelemetryClient({opts:{store:client.telemetryEventStore}}).trackCliFlagHelp([root.name,...target.typedPath].join(":")),client.stdout.write(help(target.command,{parent:target.parent,columns:client.stdout.columns??client.stderr.columns,stream:client.stdout})),0)}function printGroupHelp(client,commandName,tokens){let found=findBuiltInCommand(commandName,tokens);if(!found)return;let{root}=found,target=resolveHelpTarget(root,found.tokens),{command}=target;if(!(target.unknownSegment!==void 0||!command.subcommands?.length||command.arguments.length>0||command.runsWithoutSubcommand||command.subcommands.some(subcommand=>subcommand.default))){try{parseArguments([...found.tokens],getFlagsSpecification(getCommandsAlongPath(root,target.typedPath).flatMap(({options})=>options)))}catch(err){return printError(err,client),2}return client.stdout.write(help(command,{parent:target.parent,columns:client.stdout.columns??client.stderr.columns,stream:client.stdout})),0}}function getCommandPathOptions(commandName,tokens){let found=findBuiltInCommand(commandName,tokens);if(!found)return;let{typedPath}=resolveHelpTarget(found.root,found.tokens);return getCommandsAlongPath(found.root,typedPath).flatMap(({options})=>options)}function asksForVersion(commandName,argv){let flags;try{({flags}=parseArguments(argv.slice(2),{"--version":Boolean,"-v":Boolean},{permissive:!0}))}catch{return!1}let typedLong=flags["--version"]===!0,typedShort=flags["-v"]===!0;if(!typedLong&&!typedShort)return!1;let found=findBuiltInCommand(commandName,tokensAfterCommand(argv));if(!found)return!1;let{command,typedPath}=resolveHelpTarget(found.root,found.tokens),defaultSubcommand=command.subcommands?.find(subcommand=>subcommand.default);if(command.forwardsUnknownOptions||defaultSubcommand?.forwardsUnknownOptions)return!1;let options=getCommandsAlongPath(found.root,typedPath).flatMap(({options:options2})=>options2);defaultSubcommand&&options.push(...defaultSubcommand.options);let definesLong=options.some(option=>option.name==="version"),definesShort=definesLong||options.some(option=>option.shorthand==="v"||option.deprecatedShorthand==="v");return typedLong&&!definesLong||typedShort&&!definesShort}function deployAcceptsOptions(argv){let deploy=findBuiltInCommand("deploy",[]);if(!deploy)return!1;try{return parseArguments(argv.slice(2),getFlagsSpecification(deploy.root.options),{warnDeprecated:!1}),!0}catch{return!1}}function getCommandsAlongPath(root,typedPath){let path=[root];for(let token of typedPath){let subcommand=path[path.length-1].subcommands?.find(candidate=>candidate.name===token||candidate.aliases.includes(token));if(!subcommand)break;path.push(subcommand)}return path}function findBuiltInCommand(commandName,tokens){let name=commandName?commands.get(commandName):void 0;if(!commandName||!name||name==="sandbox")return;let findRoot=rootName=>commandsStructs.find(command=>command.name===rootName&&"options"in command),root=findRoot(name);if(!root)return;let monitors=root.name==="alerts"?findRoot("monitors"):void 0;if(monitors){let alias=takeAlertsRulesAlias(root,tokens);if(alias)return{root:monitors,tokens:alias}}let namesSubcommand=commandName!==root.name&&root.subcommands?.some(subcommand=>subcommand.name===commandName||subcommand.aliases.includes(commandName));return{root,tokens:namesSubcommand?[commandName,...tokens]:tokens}}function takeAlertsRulesAlias(alerts,tokens){try{let{command,args}=takeCommand([...tokens],getFlagsSpecification(alerts.options));return command==="rules"?args:void 0}catch{return}}function printUnknownCommand(client,segment,groupPath=[]){let group=groupPath.join(" "),message=`Unknown command ${segment} for ${getCommandNamePlain(group||void 0)}.`,helpCommand2=group?`${group} --help`:"--help";if(shouldEmitNonInteractiveCommandError(client)){writeAgentError(client,{status:AGENT_STATUS.ERROR,reason:"unknown_command",message,next:[{command:getCommandNamePlain(helpCommand2),when:"See all commands"}]});return}output_manager_default.fatal(message),output_manager_default.print(`
8
- See all commands:
9
- ${helpCommand(getCommandNamePlain(helpCommand2),[],createHelpTheme(client.stderr))}
10
- `)}function tokensAfterCommand(argv){let args=argv.slice(2);for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--")return[];if(arg.startsWith("-")){!arg.includes("=")&&globalCliFlagTakesValue(arg)&&i++;continue}return args.slice(i+1)}return[]}export{RootTelemetryClient,printCommandHelp,printGroupHelp,getCommandPathOptions,asksForVersion,deployAcceptsOptions,printUnknownCommand,tokensAfterCommand};