vercel 62.5.0 → 62.7.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 (169) hide show
  1. package/README.md +2 -0
  2. package/dist/chunks/{add-SUDX7R63.js → add-OXHI3PVM.js} +1 -1
  3. package/dist/chunks/{add-UNQJB3SM.js → add-P3FNSVMN.js} +1 -1
  4. package/dist/chunks/{add-HN4OXQLM.js → add-WUT6QU2J.js} +1 -1
  5. package/dist/chunks/{build-BRMOQZHW.js → build-J6VW3KHT.js} +1 -1
  6. package/dist/chunks/{chunk-B3MYIRFE.js → chunk-2KSNNB4B.js} +1 -1
  7. package/dist/chunks/{chunk-QMTPSHRV.js → chunk-3XLK5ZPD.js} +5 -5
  8. package/dist/chunks/{chunk-TEYG3UZQ.js → chunk-3ZMD36SU.js} +1 -1
  9. package/dist/chunks/{chunk-TG6SMD7D.js → chunk-46UCIIJN.js} +1 -1
  10. package/dist/chunks/{chunk-XMV7OSFJ.js → chunk-4H5LPD3T.js} +1 -1
  11. package/dist/chunks/{chunk-PQV3QNDG.js → chunk-4KQBTIMZ.js} +1 -1
  12. package/dist/chunks/{chunk-QCOPZAUC.js → chunk-4QSVBLAS.js} +1 -1
  13. package/dist/chunks/{chunk-WNG72BRT.js → chunk-5AXNGQJC.js} +1 -1
  14. package/dist/chunks/{chunk-DOWDSQPG.js → chunk-5JN3FWV2.js} +1 -1
  15. package/dist/chunks/{chunk-PY6YO4MR.js → chunk-5M45EBVX.js} +2 -2
  16. package/dist/chunks/{chunk-X7F3567X.js → chunk-5ZQF5WIO.js} +1 -1
  17. package/dist/chunks/{chunk-6LOW7CGD.js → chunk-6DJ6PMEK.js} +1 -1
  18. package/dist/chunks/{chunk-NDZOUAFO.js → chunk-6EW4BCMR.js} +1 -1
  19. package/dist/chunks/{chunk-RHUAFRZX.js → chunk-A73N3QKT.js} +1 -1
  20. package/dist/chunks/{chunk-CAAD55US.js → chunk-AEEEEOYS.js} +1 -1
  21. package/dist/chunks/chunk-APSIFBD4.js +7 -0
  22. package/dist/chunks/{chunk-MCOJUSDV.js → chunk-B2L2QTXT.js} +1 -1
  23. package/dist/chunks/{chunk-ZXDS7NJI.js → chunk-BHBNTQRT.js} +1 -1
  24. package/dist/chunks/{chunk-OYWYHFXV.js → chunk-CF2PIWRO.js} +1 -1
  25. package/dist/chunks/{chunk-733ZK37Y.js → chunk-CR2ZQBDU.js} +1 -1
  26. package/dist/chunks/{chunk-5CSWEE7J.js → chunk-CRITS7IX.js} +1 -1
  27. package/dist/chunks/{chunk-4BRFG5HP.js → chunk-DGH5CD6D.js} +1 -1
  28. package/dist/chunks/{chunk-PD3ZD52Q.js → chunk-ECMWDZTJ.js} +4 -4
  29. package/dist/chunks/{chunk-AMSFO2VK.js → chunk-EQ24OC5G.js} +1 -1
  30. package/dist/chunks/{chunk-D6JBONML.js → chunk-FAJB3JV5.js} +1 -1
  31. package/dist/chunks/chunk-FB3U3RAM.js +9 -0
  32. package/dist/chunks/{chunk-72YTT324.js → chunk-FEEG5UU2.js} +1 -1
  33. package/dist/chunks/{chunk-5NSYN7IO.js → chunk-FQJCWZ4C.js} +1 -1
  34. package/dist/chunks/{chunk-LGFCHU75.js → chunk-GMTLVRN7.js} +1 -1
  35. package/dist/chunks/{chunk-UXAYYF6I.js → chunk-GUTZ45DE.js} +1 -1
  36. package/dist/chunks/{chunk-5QVOIOPN.js → chunk-I5JR7PIO.js} +1 -1
  37. package/dist/chunks/{chunk-ST2X5QRA.js → chunk-IEKUTNKT.js} +1 -1
  38. package/dist/chunks/{chunk-L57FNGBV.js → chunk-K2RQEX7N.js} +1 -1
  39. package/dist/chunks/{chunk-O552UV4H.js → chunk-KXMVFT2K.js} +1 -1
  40. package/dist/chunks/{chunk-ZX2JOGOA.js → chunk-LCH3SUJ7.js} +1 -1
  41. package/dist/chunks/{chunk-HVJERSGE.js → chunk-LWQVT6YW.js} +1 -1
  42. package/dist/chunks/chunk-LXNMVWYO.js +9 -0
  43. package/dist/chunks/{chunk-MQW6DKD2.js → chunk-LYKPLTZ7.js} +1 -1
  44. package/dist/chunks/chunk-M3HO5CTQ.js +7 -0
  45. package/dist/chunks/{chunk-WJZV7BI4.js → chunk-M4IVLSNQ.js} +1 -1
  46. package/dist/chunks/{chunk-ILR6YA2A.js → chunk-M5NWE7EO.js} +1 -1
  47. package/dist/chunks/{chunk-3J2P52OU.js → chunk-MCBO6LL7.js} +2 -2
  48. package/dist/chunks/{chunk-2FQCZE6S.js → chunk-MIG67KZ2.js} +1 -1
  49. package/dist/chunks/{chunk-4WS3D23J.js → chunk-NM67DIPQ.js} +1 -1
  50. package/dist/chunks/{chunk-W6M24BQ4.js → chunk-NYFB3EYC.js} +1 -1
  51. package/dist/chunks/chunk-O3UY73UQ.js +7 -0
  52. package/dist/chunks/chunk-ONPJXQQ6.js +10 -0
  53. package/dist/chunks/chunk-ORJGSUQT.js +9 -0
  54. package/dist/chunks/{chunk-HRQQ2N5B.js → chunk-PE7QZUY7.js} +1 -1
  55. package/dist/chunks/{chunk-MR423MWE.js → chunk-Q2YQSMIB.js} +6 -6
  56. package/dist/chunks/{chunk-C7SLCL3Z.js → chunk-Q7AYTXUR.js} +1 -1
  57. package/dist/chunks/{chunk-EPBZNTIJ.js → chunk-QZ2G3AMY.js} +1 -1
  58. package/dist/chunks/{chunk-P3ZZVBZQ.js → chunk-RMZJP32R.js} +1 -1
  59. package/dist/chunks/{chunk-P3YADO62.js → chunk-RSLPLRVK.js} +1 -1
  60. package/dist/chunks/{chunk-AJT64XO2.js → chunk-RYMRVMGD.js} +2 -2
  61. package/dist/chunks/{chunk-MHKDLJEI.js → chunk-SMC4MGY5.js} +1 -1
  62. package/dist/chunks/{chunk-ZFYW4CEL.js → chunk-SR5XEF7L.js} +1 -1
  63. package/dist/chunks/{chunk-PTKSYVXM.js → chunk-TAT5WGDZ.js} +1 -1
  64. package/dist/chunks/{chunk-GXNSAACA.js → chunk-THB7KY2N.js} +1 -1
  65. package/dist/chunks/{chunk-TNGDWVMX.js → chunk-UKMRJIIZ.js} +1 -1
  66. package/dist/chunks/{chunk-MUJP4VPF.js → chunk-UKVEXM5O.js} +1 -1
  67. package/dist/chunks/{chunk-MJWC4W6J.js → chunk-ULHETT7U.js} +1 -1
  68. package/dist/chunks/{chunk-2E6XILZC.js → chunk-UOZHC2ZG.js} +1 -1
  69. package/dist/chunks/{chunk-RERUTI3O.js → chunk-V426AGVC.js} +2 -2
  70. package/dist/chunks/{chunk-6ALOD3OE.js → chunk-V6Y6UK6B.js} +2 -4
  71. package/dist/chunks/{chunk-DWPCZHDT.js → chunk-VWBJWUYQ.js} +1 -1
  72. package/dist/chunks/{chunk-TN4IR2LY.js → chunk-WNTA7DCC.js} +1 -1
  73. package/dist/chunks/{chunk-VMHUBZRU.js → chunk-XQQ7DTQG.js} +1 -1
  74. package/dist/chunks/{chunk-UKC3NSS6.js → chunk-YEWZFZ2O.js} +1 -1
  75. package/dist/chunks/{chunk-P4BGC5RL.js → chunk-YGMOJBSP.js} +2 -2
  76. package/dist/chunks/{chunk-65Z5UPUC.js → chunk-YKOIVWZI.js} +1 -1
  77. package/dist/chunks/{chunk-X7U35FBE.js → chunk-YTIANIL7.js} +1 -1
  78. package/dist/chunks/chunk-YUDKK2QJ.js +7 -0
  79. package/dist/chunks/{chunk-DQXGNNPB.js → chunk-YZBYL3SH.js} +1 -1
  80. package/dist/chunks/{chunk-4AY4YYKS.js → chunk-ZN37NQM4.js} +1 -1
  81. package/dist/chunks/{chunk-W45NZSSK.js → chunk-ZNQI6M3S.js} +1 -1
  82. package/dist/chunks/{clear-M6LODAMD.js → clear-VMJVLPVR.js} +1 -1
  83. package/dist/chunks/{compile-vercel-config-NBX5UWHW.js → compile-vercel-config-YCLXPL5H.js} +1 -1
  84. package/dist/chunks/{config-Q3TRA4NK.js → config-JPX6NJMJ.js} +1 -1
  85. package/dist/chunks/{config-YQ7FIAFK.js → config-YMUUPO3R.js} +1 -1
  86. package/dist/chunks/config-validator.mjs +1 -1
  87. package/dist/chunks/{connect-git-provider-67DJOI6X.js → connect-git-provider-KLSBCSD2.js} +1 -1
  88. package/dist/chunks/{delete-KSZ7R5V6.js → delete-E7J4B5E5.js} +1 -1
  89. package/dist/chunks/{delete-NRWKSTCN.js → delete-EEY7M6XT.js} +1 -1
  90. package/dist/chunks/{detect-services-MWYUJZJZ.js → detect-services-E2TWAKQS.js} +1 -1
  91. package/dist/chunks/{disable-BUGWQUS7.js → disable-5TKY6JK2.js} +1 -1
  92. package/dist/chunks/{discard-J5O3C753.js → discard-ALSOF66H.js} +1 -1
  93. package/dist/chunks/{edit-DMOIBVEP.js → edit-2M3KEE3H.js} +1 -1
  94. package/dist/chunks/{edit-YRWAXGEI.js → edit-ISUCMYNW.js} +1 -1
  95. package/dist/chunks/{enable-IL27VHSU.js → enable-2QTTTYQD.js} +1 -1
  96. package/dist/chunks/{exec-GYSSNCNK.js → exec-XIQJ2A3J.js} +1 -1
  97. package/dist/chunks/{export-HBUUGMGE.js → export-PV2NDS7C.js} +1 -1
  98. package/dist/chunks/{future-BXETJ6CT.js → future-SQS5POAL.js} +1 -1
  99. package/dist/chunks/{generate-cert-for-deploy-K5QDHEEQ.js → generate-cert-for-deploy-4EJRA7MS.js} +1 -1
  100. package/dist/chunks/{image-M2XIQYXT.js → image-6GL2UOA2.js} +1 -1
  101. package/dist/chunks/{import-builders-UGIWTKRS.js → import-builders-KAZMYQCR.js} +1 -1
  102. package/dist/chunks/{inspect-SUEMHSB6.js → inspect-3HGROSZO.js} +1 -1
  103. package/dist/chunks/{inspect-XANEFWYN.js → inspect-FK6GC5JZ.js} +1 -1
  104. package/dist/chunks/{inspect-TDHISMRV.js → inspect-LZMU7RIU.js} +1 -1
  105. package/dist/chunks/{inspect-HASOG2PB.js → inspect-ORVORGUM.js} +1 -1
  106. package/dist/chunks/{inspect-OGUGKPVK.js → inspect-UNL54246.js} +1 -1
  107. package/dist/chunks/{list-32NXD7OW.js → list-EWJI2WSQ.js} +1 -1
  108. package/dist/chunks/{list-Q566PTT4.js → list-FVUIZPC7.js} +1 -1
  109. package/dist/chunks/{list-Z6DRFZ7F.js → list-WOUJM4WR.js} +1 -1
  110. package/dist/chunks/{login-GPCBSMHV.js → login-IJLY5XTT.js} +1 -1
  111. package/dist/chunks/{login-A6R3RQIW.js → login-JREQ7SLY.js} +1 -1
  112. package/dist/chunks/{logs-L33R4G67.js → logs-Z7IMGFO2.js} +1 -1
  113. package/dist/chunks/{ls-VSK2ZFSY.js → ls-4COX4SMJ.js} +1 -1
  114. package/dist/chunks/{ls-6CYMQBX3.js → ls-6CD2OQGA.js} +1 -1
  115. package/dist/chunks/{ls-CTIACPC5.js → ls-6DOYSBQM.js} +1 -1
  116. package/dist/chunks/{ls-DUCIK4E6.js → ls-AHT2FRGM.js} +1 -1
  117. package/dist/chunks/{ls-R442RADW.js → ls-LXBUE4LZ.js} +1 -1
  118. package/dist/chunks/{ls-JPL3AFIM.js → ls-RBWPVJ5G.js} +1 -1
  119. package/dist/chunks/{ls-GDR45ANC.js → ls-W5SJUIHD.js} +1 -1
  120. package/dist/chunks/{mutate-MUWQVZKM.js → mutate-TVUHBRBK.js} +1 -1
  121. package/dist/chunks/{notifications-YKGIFXKO.js → notifications-OXOSD6UK.js} +1 -1
  122. package/dist/chunks/{open-OJAIEDS5.js → open-SWPHB54M.js} +1 -1
  123. package/dist/chunks/{openapi-Y4NWAKUM.js → openapi-32XHDVJL.js} +1 -1
  124. package/dist/chunks/{permissions-LWKZBBU7.js → permissions-A4WMGETJ.js} +1 -1
  125. package/dist/chunks/{prompt-missing-credentials-O3GGMOZH.js → prompt-missing-credentials-6IXO6VND.js} +1 -1
  126. package/dist/chunks/{publish-JHNLZT6K.js → publish-2CS4RYJW.js} +1 -1
  127. package/dist/chunks/pull-WWUH4M5V.js +7 -0
  128. package/dist/chunks/{purchase-domain-if-available-CJK3G4DT.js → purchase-domain-if-available-TAXCYIV7.js} +1 -1
  129. package/dist/chunks/{push-MUMGVOSY.js → push-OPRW7M4I.js} +1 -1
  130. package/dist/chunks/{query-2TTSDOFF.js → query-22PGP7BC.js} +1 -1
  131. package/dist/chunks/{reauthenticate-S47X66LM.js → reauthenticate-LMR25CIE.js} +1 -1
  132. package/dist/chunks/{reorder-NGBZWNZH.js → reorder-Y3NMEA2S.js} +1 -1
  133. package/dist/chunks/{reply-5WF5YHOM.js → reply-YEZHST2Q.js} +1 -1
  134. package/dist/chunks/{resolve-MPZBUK5V.js → resolve-QC37E2EB.js} +1 -1
  135. package/dist/chunks/{restore-NVY4A3T3.js → restore-RMQVGYQB.js} +1 -1
  136. package/dist/chunks/{rm-ZO5JP3GF.js → rm-42U6SPVV.js} +1 -1
  137. package/dist/chunks/{rm-HFJCOK2D.js → rm-43MPIHP3.js} +1 -1
  138. package/dist/chunks/{rm-QXQ2AD4R.js → rm-4MSUYUEP.js} +1 -1
  139. package/dist/chunks/{rm-DB5K2RI7.js → rm-DPHE34CD.js} +1 -1
  140. package/dist/chunks/{rm-SMKVHN75.js → rm-JHWXYHJY.js} +1 -1
  141. package/dist/chunks/{routes-KO5NFCCJ.js → routes-2GTCE542.js} +1 -1
  142. package/dist/chunks/{rule-inspect-VZARLRS3.js → rule-inspect-7LIPL5YY.js} +1 -1
  143. package/dist/chunks/{rules-G2WFYCPB.js → rules-6KWBVUF2.js} +1 -1
  144. package/dist/chunks/{schema-SVYU72YU.js → schema-OUFU5V7Z.js} +1 -1
  145. package/dist/chunks/{schema-G6BOZBNB.js → schema-S2DE7S5N.js} +1 -1
  146. package/dist/chunks/{select-org-2W67WKBG.js → select-org-EL66MG67.js} +1 -1
  147. package/dist/chunks/{set-ILVKMTUD.js → set-VXSNREF4.js} +1 -1
  148. package/dist/chunks/setup-and-link-I7SGZNGO.js +7 -0
  149. package/dist/chunks/{tags-C34XXMYO.js → tags-AGLQDT3Z.js} +1 -1
  150. package/dist/chunks/{types-MATC4UQL.js → types-GQNKYZJH.js} +1 -1
  151. package/dist/chunks/{update-IVWOZO4P.js → update-TI3YRVQT.js} +1 -1
  152. package/dist/commands/build/index.js +7 -7
  153. package/dist/commands/deploy/index.js +44 -28
  154. package/dist/commands/dev/index.js +8 -8
  155. package/dist/commands/env/index.js +1 -1
  156. package/dist/commands/link/index.js +1 -1
  157. package/dist/commands/list/index.js +1 -1
  158. package/dist/commands-bulk.js +35 -39
  159. package/dist/index.js +6 -5
  160. package/dist/internal-build.js +1 -1
  161. package/dist/version.mjs +1 -1
  162. package/package.json +54 -53
  163. package/dist/chunks/chunk-2Z47VG5H.js +0 -9
  164. package/dist/chunks/chunk-EA3BJUUK.js +0 -7
  165. package/dist/chunks/chunk-EJNFKH6Y.js +0 -10
  166. package/dist/chunks/chunk-NTRM6VO6.js +0 -9
  167. package/dist/chunks/chunk-SX64OM5A.js +0 -7
  168. package/dist/chunks/pull-E4K6BVQW.js +0 -7
  169. package/dist/chunks/setup-and-link-VFCYLLB5.js +0 -7
@@ -4,7 +4,7 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{require_async_sema}from"./chunks/chunk-LG4JQAY7.js";import{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope}from"./chunks/chunk-5CSWEE7J.js";import{ALL_ACTION_CHOICES,MAX_CONDITIONS,MAX_DESCRIPTION_LENGTH,MAX_NAME_LENGTH,REDIRECT_STATUS_CODES,VALID_SYNTAXES,collectActionDetails,collectHeadersAndTransforms,collectInteractiveConditions,convertRouteToCurrentRoute,extractTransformFlags,generateRoute,generatedRouteToAddInput,parseConditions,populateRouteEnv,printGeneratedRoutePreview,runInteractiveEditLoop,stripQuotes,validateActionFlags}from"./chunks/chunk-TEYG3UZQ.js";import{getRouteVersions}from"./chunks/chunk-BVH2AEFE.js";import{TRANSFORM_TYPE_LABELS,findVersionById,formatCondition,formatTransform,getRouteTypeLabel,getRoutes,getSrcSyntaxLabel,isTargetTransform,offerAutoPromote,parsePosition,parseSubcommandArgs,parseSubcommandArguments,requireProjectContext,validateRequiredArguments,withGlobalFlags as withGlobalFlags2}from"./chunks/chunk-VMHUBZRU.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-OYWYHFXV.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-X7U35FBE.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-PQV3QNDG.js";import{canPrompt}from"./chunks/chunk-XD2LZRBS.js";import"./chunks/chunk-IVSSTHB6.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-W26LLGQV.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-C7SLCL3Z.js";import{collectBuildLogs,displayBuildLogs,displayRuntimeLogs,require_split2}from"./chunks/chunk-WJZV7BI4.js";import{require_format}from"./chunks/chunk-WRILLB46.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-ST2X5QRA.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-W45NZSSK.js";import{api,tryOpenApiFallback}from"./chunks/chunk-6LOW7CGD.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-ZX2JOGOA.js";import{dump,load,main}from"./chunks/chunk-6ALOD3OE.js";import{selectOrg}from"./chunks/chunk-B3MYIRFE.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{require_fast_deep_equal}from"./chunks/chunk-4MZK6JT6.js";import{CURL_INSTALL_COMMAND,NATIVE_UPDATE_SELECT_PRODUCTION_ENV,NATIVE_UPDATE_VERSION_ENV,box,cacheNativeUpdateDiscoveryAttempt,cacheNativeUpdateVersion,did_you_mean_default,executeUpgrade,handleCommandTypo,installAndActivatePrBinary,installAndActivateProductionVersion,isAutoUpdateEnabled,isCurlInstall,isNativeAutoUpdateEnabled,isNativeUpdateChild,listAvailableVersions,listNativeTrackSlots,markNativeUpdateStaged,parsePrTarget,pinPackageVersion,readActivePointer,readNativeInstallState,require_tar_fs,resolveLatestNativeVersion,restoreNativeUpdateAfterDiscoveryFailure,setAutoUpdate,setMinReleaseAgeBypass,spawnNativeUpdateChild,stageProductionUpdate,withDirectoryLock}from"./chunks/chunk-4AY4YYKS.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-DOWDSQPG.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-MHKDLJEI.js";import{require_semver}from"./chunks/chunk-KKS7XWEX.js";import{readJSONFile}from"./chunks/chunk-P3ZZVBZQ.js";import{Now,getBuildMachineResourceConfig,isDeploying,printDeploymentStatus}from"./chunks/chunk-P4BGC5RL.js";import"./chunks/chunk-NDZOUAFO.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-TNGDWVMX.js";import"./chunks/chunk-2H77IRPI.js";import"./chunks/chunk-X7F3567X.js";import{require_dist as require_dist3}from"./chunks/chunk-AJT64XO2.js";import{require_dist2}from"./chunks/chunk-G3NHWIPJ.js";import"./chunks/chunk-D6JBONML.js";import"./chunks/chunk-OHDEHZLX.js";import"./chunks/chunk-M2W3HKV3.js";import"./chunks/chunk-PHW54NU5.js";import"./chunks/chunk-U56NHYAH.js";import"./chunks/chunk-T52FMXWC.js";import"./chunks/chunk-NNP5NITU.js";import"./chunks/chunk-L3JDEHCQ.js";import"./chunks/chunk-PD3ZD52Q.js";import"./chunks/chunk-TRTEXGVN.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-P2O5DOYE.js";import{CHECKBOX_INSTRUCTIONS,getCustomEnvironments,pickCustomEnvironment,readStandardInput,require_dist as require_dist4}from"./chunks/chunk-COQGD2EI.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{ellipsis}from"./chunks/chunk-ZDX75YNZ.js";import{formatTable,strlen}from"./chunks/chunk-UED2PPFP.js";import{ellipsizeMiddle,truncateEnd}from"./chunks/chunk-MBL6TXEJ.js";import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODEX_BASE_URL,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,autoInstallVercelPlugin,backupFile,claudeCode,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,publishNoClobber,readFileOrNull,resolveGatewayBaseUrl,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-MUJP4VPF.js";import{require_execa}from"./chunks/chunk-RHUAFRZX.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-PY6YO4MR.js";import{resolveProjectContext}from"./chunks/chunk-DWPCZHDT.js";import{performDeviceCodeFlow,saveDeviceCodeTokens}from"./chunks/chunk-5NSYN7IO.js";import{require_open}from"./chunks/chunk-ULLWCOYC.js";import{getTeams}from"./chunks/chunk-2FQCZE6S.js";import"./chunks/chunk-N6CNMMSZ.js";import{isGuidanceEnabled}from"./chunks/chunk-72YTT324.js";import{stamp_default}from"./chunks/chunk-XPXOV5UO.js";import{getSubcommand as getSubcommand7}from"./chunks/chunk-ETV3C2CV.js";import{init_main,parse}from"./chunks/chunk-OI263FBO.js";import{ensureLink}from"./chunks/chunk-EA3BJUUK.js";import"./chunks/chunk-O552UV4H.js";import{require_frameworks}from"./chunks/chunk-23NBYS6R.js";import{CI_LOG_LEVELS,CREDIT_TYPE_LABELS,FLAG_ATTRIBUTE_TYPES,FLAG_CONDITION_LIST_COMPARATORS,FLAG_CONDITION_RHS_OPTIONAL_COMPARATORS,FLAG_EVALUATIONS_DIMENSIONS,FLAG_EVALUATIONS_DIMENSION_NAMES,FLAG_EVALUATIONS_GRANULARITIES,KMS_ALGORITHMS,PROJECT_GRANT_POLICY_KIND,PROJECT_MEMBER_ROLES,STORAGE_PROVIDERS,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,abortSubcommand,acceptTermsSubcommand,accessGroupsSubcommand,accessSummarySubcommand,activateKeySubcommand,addGrantSubcommand,addKeySubcommand,addSubcommand,addSubcommand10 as addSubcommand9,addSubcommand11,addSubcommand12,addSubcommand2,addSubcommand3,addSubcommand4,addSubcommand5,addSubcommand6,addSubcommand7,addSubcommand9 as addSubcommand8,addToGroupSubcommand,addonSubcommand,agentCommand,agentRunsCommand,aiGatewayCommand,alertsInspectSubcommand,alertsListSubcommand,alertsSubcommand,aliasCommand,analyzeSubcommand,apiKeysSubcommand,approveSubcommand,archiveSubcommand,attachSubcommand,attackModeDisableSubcommand,attackModeEnableSubcommand,attackModeSubcommand,autoRenewSubcommand,autoupdateSubcommand,backupsSubcommand,balanceSubcommand,bisectCommand,blobCommand,botManagementSubcommand,budgetCommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buildersCommand,buyCommand,buySubcommand,cacheCommand,categoriesSubcommand,certsCommand,changelogCommand,checkSubcommand,checkSubcommand2,checkSubcommand3,checksAddFlags,checksRemoveFlags,checksSubcommand,ciCommand,claimSubcommand,codingAgentsSubcommand,completeSubcommand,configureSubcommand,connectSubcommand,connectSubcommand2,connectSubcommand3,connexCommand,contactsAddSubcommand,contactsSubcommand,contractCommand,copySubcommand,createGroupSubcommand,createStoreSubcommand,createSubcommand,createSubcommand2,createSubcommand3,createSubcommand4,createSubcommand5,createSubcommand6,createSubcommand7,createSubcommand8 as createSubcommand9,createThresholdSubcommand,creditsSubcommand,cronsCommand,curlCommand,dangerouslyDeleteImmutableStaticAssetSubcommand,dangerouslyDeleteSubcommand,decideSubcommand,delSubcommand,deleteGroupSubcommand,deleteStoreSubcommand,deleteSubcommand as deleteSubcommand2,deleteSubcommand2 as deleteSubcommand4,deleteSubcommand3 as deleteSubcommand5,deployHooksCommand,detachSubcommand,diagnoseSubcommand,diffSubcommand,disableSubcommand,disableSubcommand2,disableSubcommand3 as disableSubcommand4,disableSubcommand4 as disableSubcommand5,discardSubcommand,disconnectSubcommand,disconnectSubcommand2,disconnectSubcommand3,discoverSubcommand,dnsCommand,domainSubcommand,domainsCommand,emptyStoreSubcommand,enableSubcommand,enableSubcommand2,enableSubcommand3 as enableSubcommand4,enableSubcommand4 as enableSubcommand5,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,executionsListSubcommand,executionsSubcommand,experimentsCommand,fetchSubcommand,findForeignCreateFlags,findOverlappingConnections,firewallCommand,flagsCommand,flushSubcommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getConnections,getFlagAttributeType,getStorageProvider,getStorageStore,getStorageStores,getStoreInfoSubcommand,getSubcommand,getSubcommand2,getSubcommand3,getSubcommand4 as getSubcommand5,getSubcommand5 as getSubcommand6,gitCommand,globalConfigCommand,grepSubcommand,guidanceCommand,guideSubcommand,httpstatCommand,importKeySubcommand,importSubcommand,importSubcommand2,initCommand,inspectCommand,inspectGroupSubcommand,inspectSubcommand,inspectSubcommand10 as inspectSubcommand12,inspectSubcommand11 as inspectSubcommand15,inspectSubcommand2,inspectSubcommand3 as inspectSubcommand4,inspectSubcommand4 as inspectSubcommand6,inspectSubcommand5 as inspectSubcommand7,inspectSubcommand6 as inspectSubcommand8,inspectSubcommand7 as inspectSubcommand9,inspectSubcommand8 as inspectSubcommand10,inspectSubcommand9 as inspectSubcommand11,installCommand,installationsSubcommand,installedSubcommand,integrationCommand,integrationResourceCommand,invalidateSubcommand,inviteSubcommand,invokeSubcommand,ipBlocksBlockSubcommand,ipBlocksListSubcommand,ipBlocksSubcommand,ipBlocksUnblockSubcommand,isBucketingAttribute,isCustomEnvironmentAddonAlias,isFlagAttributeType,isFlagEvaluationsDimension,isFlagEvaluationsGranularity,isProjectGrant,isTimestampAttributeType,issueSubcommand,issuerJwksUrl,issuerUrl,itemsSubcommand,kmsCommand,labelsListSubcommand,labelsSubcommand,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listStorageProviderTypes,listStoresSubcommand,listSubcommand,listSubcommand10 as listSubcommand12,listSubcommand11 as listSubcommand13,listSubcommand12 as listSubcommand14,listSubcommand13 as listSubcommand15,listSubcommand14 as listSubcommand16,listSubcommand15 as listSubcommand17,listSubcommand16 as listSubcommand18,listSubcommand17 as listSubcommand19,listSubcommand18 as listSubcommand21,listSubcommand19 as listSubcommand22,listSubcommand2,listSubcommand20 as listSubcommand23,listSubcommand21 as listSubcommand24,listSubcommand22 as listSubcommand25,listSubcommand23 as listSubcommand27,listSubcommand24 as listSubcommand28,listSubcommand25 as listSubcommand29,listSubcommand26 as listSubcommand30,listSubcommand3 as listSubcommand4,listSubcommand4 as listSubcommand5,listSubcommand5 as listSubcommand6,listSubcommand6 as listSubcommand8,listSubcommand7 as listSubcommand9,listSubcommand8 as listSubcommand10,listSubcommand9 as listSubcommand11,listVersionsSubcommand,loadStoreDetails,logoutCommand,logsSubcommand,mcpCommand,membersAddFlags,membersInviteSubcommand,membersRemoveFlags,membersRemoveSubcommand,membersSubcommand,membersSubcommand2,microfrontendsCommand,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,observabilitySubcommand,openCommand,openSubcommand as openSubcommand2,openSubcommand2 as openSubcommand3,openSubcommand3 as openSubcommand4,openSubcommand4 as openSubcommand5,overrideSubcommand,overviewSubcommand,pauseSubcommand,persistentActionsInspectSubcommand,persistentActionsListSubcommand,persistentActionsSubcommand,preinstallSubcommand,prepareSubcommand,presignSubcommand,priceSubcommand,pricingCommand,proSubcommand,projectCommand,projectsSubcommand,promoteCommand,promoteSubcommand,protectionSubcommand,publishSubcommand,pullSubcommand,purgeSubcommand,putImageSubcommand,putSubcommand,redeployCommand,redirectsCommand,removeCommand,removeFromGroupSubcommand,removeGrantSubcommand,removeSubcommand,removeSubcommand10,removeSubcommand11,removeSubcommand12,removeSubcommand13,removeSubcommand14,removeSubcommand15,removeSubcommand16 as removeSubcommand17,removeSubcommand17 as removeSubcommand18,removeSubcommand2,removeSubcommand3,removeSubcommand4,removeSubcommand5,removeSubcommand6,removeSubcommand7,removeSubcommand8,removeSubcommand9,renameSubcommand,renewSubcommand,requestSubcommand,rerunSubcommand,reseedEnrollmentSubcommand,resolveProjectConnection,resolveStore,resourceSubcommand,restartAnalysisSubcommand,restoreSubcommand,resumeSubcommand,returnToDraftSubcommand,revokeKeySubcommand,revokeTokensSubcommand,rollbackCommand,rollingReleaseCommand,rolloutSubcommand,rulesAddSubcommand,rulesAddSubcommand2 as rulesAddSubcommand3,rulesAddSubcommand3 as rulesAddSubcommand4,rulesDisableSubcommand,rulesEditSubcommand,rulesEditSubcommand2,rulesEnableSubcommand,rulesInspectSubcommand as rulesInspectSubcommand2,rulesListSubcommand,rulesListSubcommand2,rulesListSubcommand3,rulesMoveSubcommand,rulesRemoveSubcommand,rulesRemoveSubcommand2,rulesRemoveSubcommand3,rulesReorderSubcommand,rulesSubcommand,rulesSubcommand2,rulesSubcommand3,rulesUpdateSubcommand as rulesUpdateSubcommand2,runSubcommand,schedulesCommand,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,searchSubcommand,searchSubcommand2,securityCommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setRampSubcommand,setSubcommand,setSubcommand2,setSubcommand3,setupCommand,setupSubcommand,signedTokenSubcommand,signupCommand,skillsCommand,speedInsightsSubcommand,splitSubcommand,ssoSubcommand,staleSubcommand,startSubcommand,startSubcommand2,statusSubcommand,statusSubcommand2,statusSubcommand3,statusSubcommand4,statusSubcommand5,statusSubcommand6,storageCommand,storeMatchesType,storeProductLabel,storeSupportsOidc,storeTypeName,switchSubcommand,systemBypassAddSubcommand,systemBypassListSubcommand,systemBypassRemoveSubcommand,systemBypassSubcommand,systemMitigationsPauseSubcommand,systemMitigationsResumeSubcommand,systemMitigationsSubcommand,targetCommand,targetsAddSubcommand,targetsListSubcommand,targetsRemoveSubcommand,targetsSubcommand,teamsCommand,telemetryCommand,tokenSubcommand,tokenSubcommand2,tokensCommand,tokensSubcommand,traceSubcommand,trafficInspectSubcommand,trafficListSubcommand,trafficSubcommand,transferInSubcommand,unarchiveSubcommand,updateGrantSubcommand,updateSubcommand,updateSubcommand10,updateSubcommand11,updateSubcommand2,updateSubcommand3,updateSubcommand4,updateSubcommand5,updateSubcommand6,updateSubcommand7,updateSubcommand8,updateSubcommand9,upgradeCommand,uploadSubcommand,usageCommand,useSubcommand,useTargetingSubcommand,verifySubcommand,versionCommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand,webAnalyticsSubcommand,webhooksCommand,whoamiCommand}from"./chunks/chunk-RERUTI3O.js";import{createSubcommand as createSubcommand8,getSubcommand as getSubcommand4,searchSubcommand as searchSubcommand3,tracesCommand}from"./chunks/chunk-O5A7CNRV.js";import{tracesConfigCommand}from"./chunks/chunk-774D3BGN.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand14,listSubcommand as listSubcommand26,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-MOLEXKVC.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-EDDOQXEI.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-35QK5NDD.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-M4IWOZEG.js";import{addSubcommand as addSubcommand10,deleteSubcommand as deleteSubcommand3,disableSubcommand as disableSubcommand3,discardSubcommand as discardSubcommand2,editSubcommand as editSubcommand2,enableSubcommand as enableSubcommand3,exportSubcommand,inspectSubcommand as inspectSubcommand13,listSubcommand as listSubcommand20,listVersionsSubcommand as listVersionsSubcommand2,publishSubcommand as publishSubcommand2,reorderSubcommand,restoreSubcommand as restoreSubcommand2,routesCommand}from"./chunks/chunk-OQVE2WXX.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-7SNMU7U7.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand5,listSubcommand as listSubcommand7,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-6C4RPAG7.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-DZZFEAM6.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesNotificationsUpdateSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-S54ISKGR.js";import{logsCommand}from"./chunks/chunk-WOTPEBSH.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-YW5R6XQI.js";import"./chunks/chunk-ZTUQEA2X.js";import"./chunks/chunk-JKTQV2QJ.js";import"./chunks/chunk-P3YADO62.js";import"./chunks/chunk-H3QRCTIJ.js";import"./chunks/chunk-FAW6NBLQ.js";import"./chunks/chunk-2I64AYHG.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-HVJERSGE.js";import"./chunks/chunk-SOJCELXH.js";import{param}from"./chunks/chunk-SXUEGVWB.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ILFUNCJZ.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-PTKSYVXM.js";import{validateLsArgs}from"./chunks/chunk-WNG72BRT.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-ILR6YA2A.js";import{elapsed}from"./chunks/chunk-JZRMH5UA.js";import"./chunks/chunk-MCOJUSDV.js";import{getDeployment,toHost}from"./chunks/chunk-UKC3NSS6.js";import{mapCertError}from"./chunks/chunk-DQXGNNPB.js";import"./chunks/chunk-JNLWD6DK.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-W6M24BQ4.js";import{table}from"./chunks/chunk-6TAQ6OWD.js";import{printError}from"./chunks/chunk-2Z47VG5H.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,exitWithNonInteractiveError,getExitCodeForReason,getGlobalFlagsFromArgv,mentionsObservabilityPlus,observabilityPlusPurchaseFix,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags,writeAgentError}from"./chunks/chunk-EJNFKH6Y.js";import"./chunks/chunk-WPS6JZF6.js";import{require_strip_ansi}from"./chunks/chunk-OSCCYU74.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import{detectExplicitScope,getContextName,getScope,introspectToken,isAppPrincipalEnabled,persistAuthConfig,readLocalConfig,resolveAppFromToken,writeToConfigFile}from"./chunks/chunk-GXNSAACA.js";import{getGlobalPathConfig}from"./chunks/chunk-CAAD55US.js";import{require_ms}from"./chunks/chunk-QTKJC2O5.js";import{TelemetryClient}from"./chunks/chunk-3J2P52OU.js";import"./chunks/chunk-RCTYVKM5.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-7T6TL3GQ.js";import"./chunks/chunk-BRK4OB4B.js";import"./chunks/chunk-GHM7V3GG.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-5XJNPXQK.js";import{fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments}from"./chunks/chunk-MQW6DKD2.js";import{quoteArg}from"./chunks/chunk-BKV35LVB.js";import{GLOBAL_CLI_FLAG_NAMES,arg_common_default,formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-5IPBCD7K.js";import{VERCEL_CONFIG_EXTENSIONS,execFileAsync,getGitConfigPath,getGitExecutable,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-QMTPSHRV.js";import"./chunks/chunk-B4ATVYZW.js";import"./chunks/chunk-F2ZWW2IO.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-QCOPZAUC.js";import{getUser}from"./chunks/chunk-HRQQ2N5B.js";import{getTeamByIdOrSlug}from"./chunks/chunk-VOZEB6PD.js";import{APIError,AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainPurchasePending,DomainRemovalConflict,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,InvalidMoveDestination,InvalidToken,LinkRequiredError,NoAliasInConfig,NowError,ProjectNotFound,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnexpectedDomainTransferError,UnsupportedTLD,UserAborted,code,isAPIError,require_bytes}from"./chunks/chunk-4WS3D23J.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib as require_lib2}from"./chunks/chunk-FI772UVH.js";import{chars_default,emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-MR423MWE.js";import{require_dist}from"./chunks/chunk-QGIQK47P.js";import{pkg_default}from"./chunks/chunk-AVSPFBLM.js";import"./chunks/chunk-XCJDGQO7.js";import"./chunks/chunk-YPTLSODC.js";import"./chunks/chunk-7HL2RPUO.js";import{require_source}from"./chunks/chunk-U7KCDTCH.js";import"./chunks/chunk-N3ZZ7FHQ.js";import"./chunks/chunk-GU6VIFR5.js";import{__require,__toESM}from"./chunks/chunk-6L236MNA.js";var AgentTelemetryClient=class extends TelemetryClient{trackCliArgumentInit(value){value&&this.trackCliArgument({arg:"init",value})}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}};var import_chalk=__toESM(require_source(),1);import{readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{KNOWN_AGENTS}from"@vercel/detect-agent";var BEST_PRACTICES_START="<!-- VERCEL BEST PRACTICES START -->",BEST_PRACTICES_END="<!-- VERCEL BEST PRACTICES END -->",BEST_PRACTICES_BODY=`## Best practices for developing on Vercel
7
+ import{require_async_sema}from"./chunks/chunk-LG4JQAY7.js";import{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope}from"./chunks/chunk-CRITS7IX.js";import{ALL_ACTION_CHOICES,MAX_CONDITIONS,MAX_DESCRIPTION_LENGTH,MAX_NAME_LENGTH,REDIRECT_STATUS_CODES,VALID_SYNTAXES,collectActionDetails,collectHeadersAndTransforms,collectInteractiveConditions,convertRouteToCurrentRoute,extractTransformFlags,generateRoute,generatedRouteToAddInput,parseConditions,populateRouteEnv,printGeneratedRoutePreview,runInteractiveEditLoop,stripQuotes,validateActionFlags}from"./chunks/chunk-3ZMD36SU.js";import{getRouteVersions}from"./chunks/chunk-BVH2AEFE.js";import{TRANSFORM_TYPE_LABELS,findVersionById,formatCondition,formatTransform,getRouteTypeLabel,getRoutes,getSrcSyntaxLabel,isTargetTransform,offerAutoPromote,parsePosition,parseSubcommandArgs,parseSubcommandArguments,requireProjectContext,validateRequiredArguments,withGlobalFlags as withGlobalFlags2}from"./chunks/chunk-XQQ7DTQG.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-CF2PIWRO.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-YTIANIL7.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-4KQBTIMZ.js";import{canPrompt}from"./chunks/chunk-XD2LZRBS.js";import"./chunks/chunk-IVSSTHB6.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-W26LLGQV.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-Q7AYTXUR.js";import{collectBuildLogs,displayBuildLogs,displayRuntimeLogs,require_split2}from"./chunks/chunk-M4IVLSNQ.js";import{require_format}from"./chunks/chunk-WRILLB46.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-IEKUTNKT.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-ZNQI6M3S.js";import{api,tryOpenApiFallback}from"./chunks/chunk-6DJ6PMEK.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-LCH3SUJ7.js";import{main}from"./chunks/chunk-FB3U3RAM.js";import{LOCAL_SCHEDULES_SESSION_HEADER,isLocalSchedulesOrigin,readLocalSchedulesSessions}from"./chunks/chunk-O3UY73UQ.js";import{selectOrg}from"./chunks/chunk-2KSNNB4B.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{require_fast_deep_equal}from"./chunks/chunk-4MZK6JT6.js";import{CURL_INSTALL_COMMAND,NATIVE_UPDATE_SELECT_PRODUCTION_ENV,NATIVE_UPDATE_VERSION_ENV,box,cacheNativeUpdateDiscoveryAttempt,cacheNativeUpdateVersion,did_you_mean_default,executeUpgrade,handleCommandTypo,installAndActivatePrBinary,installAndActivateProductionVersion,isAutoUpdateEnabled,isCurlInstall,isNativeAutoUpdateEnabled,isNativeUpdateChild,listAvailableVersions,listNativeTrackSlots,markNativeUpdateStaged,parsePrTarget,pinPackageVersion,readActivePointer,readNativeInstallState,require_tar_fs,resolveLatestNativeVersion,restoreNativeUpdateAfterDiscoveryFailure,setAutoUpdate,setMinReleaseAgeBypass,spawnNativeUpdateChild,stageProductionUpdate,withDirectoryLock}from"./chunks/chunk-ZN37NQM4.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-5JN3FWV2.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-SMC4MGY5.js";import{readJSONFile}from"./chunks/chunk-RMZJP32R.js";import{Now,getBuildMachineResourceConfig,isDeploying,printDeploymentStatus}from"./chunks/chunk-YGMOJBSP.js";import"./chunks/chunk-6EW4BCMR.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-UKMRJIIZ.js";import"./chunks/chunk-2H77IRPI.js";import"./chunks/chunk-5ZQF5WIO.js";import{require_dist as require_dist3}from"./chunks/chunk-RYMRVMGD.js";import{require_dist2}from"./chunks/chunk-G3NHWIPJ.js";import"./chunks/chunk-FAJB3JV5.js";import"./chunks/chunk-OHDEHZLX.js";import"./chunks/chunk-M2W3HKV3.js";import"./chunks/chunk-PHW54NU5.js";import"./chunks/chunk-U56NHYAH.js";import"./chunks/chunk-T52FMXWC.js";import{require_semver}from"./chunks/chunk-KKS7XWEX.js";import"./chunks/chunk-NNP5NITU.js";import"./chunks/chunk-L3JDEHCQ.js";import{responseError}from"./chunks/chunk-ECMWDZTJ.js";import"./chunks/chunk-TRTEXGVN.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-P2O5DOYE.js";import{CHECKBOX_INSTRUCTIONS,getCustomEnvironments,pickCustomEnvironment,readStandardInput,require_dist as require_dist4}from"./chunks/chunk-COQGD2EI.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{ellipsis}from"./chunks/chunk-ZDX75YNZ.js";import{formatTable,strlen}from"./chunks/chunk-UED2PPFP.js";import{ellipsizeMiddle,truncateEnd}from"./chunks/chunk-MBL6TXEJ.js";import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODEX_BASE_URL,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,autoInstallVercelPlugin,backupFile,claudeCode,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,publishNoClobber,readFileOrNull,resolveGatewayBaseUrl,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-UKVEXM5O.js";import{require_execa}from"./chunks/chunk-A73N3QKT.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-5M45EBVX.js";import{resolveProjectContext}from"./chunks/chunk-VWBJWUYQ.js";import"./chunks/chunk-N6CNMMSZ.js";import{isGuidanceEnabled}from"./chunks/chunk-FEEG5UU2.js";import{stamp_default}from"./chunks/chunk-XPXOV5UO.js";import{getSubcommand as getSubcommand7}from"./chunks/chunk-ETV3C2CV.js";import{init_main,parse}from"./chunks/chunk-OI263FBO.js";import{ensureLink}from"./chunks/chunk-M3HO5CTQ.js";import"./chunks/chunk-KXMVFT2K.js";import{performDeviceCodeFlow,saveDeviceCodeTokens}from"./chunks/chunk-FQJCWZ4C.js";import{require_open}from"./chunks/chunk-ULLWCOYC.js";import{require_frameworks}from"./chunks/chunk-23NBYS6R.js";import{CI_LOG_LEVELS,CREDIT_TYPE_LABELS,FLAG_ATTRIBUTE_TYPES,FLAG_CONDITION_LIST_COMPARATORS,FLAG_CONDITION_RHS_OPTIONAL_COMPARATORS,FLAG_EVALUATIONS_DIMENSIONS,FLAG_EVALUATIONS_DIMENSION_NAMES,FLAG_EVALUATIONS_GRANULARITIES,KMS_ALGORITHMS,PROJECT_GRANT_POLICY_KIND,PROJECT_MEMBER_ROLES,STORAGE_PROVIDERS,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,abortSubcommand,acceptTermsSubcommand,accessGroupsSubcommand,accessSummarySubcommand,activateKeySubcommand,addGrantSubcommand,addKeySubcommand,addSubcommand,addSubcommand10 as addSubcommand9,addSubcommand11,addSubcommand12,addSubcommand2,addSubcommand3,addSubcommand4,addSubcommand5,addSubcommand6,addSubcommand7,addSubcommand9 as addSubcommand8,addToGroupSubcommand,addonSubcommand,agentCommand,agentRunsCommand,aiGatewayCommand,alertsInspectSubcommand,alertsListSubcommand,alertsSubcommand,aliasCommand,analyzeSubcommand,apiKeysSubcommand,approveSubcommand,archiveSubcommand,attachSubcommand,attackModeDisableSubcommand,attackModeEnableSubcommand,attackModeSubcommand,autoRenewSubcommand,autoupdateSubcommand,backupsSubcommand,balanceSubcommand,bisectCommand,blobCommand,botManagementSubcommand,budgetCommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buildersCommand,buyCommand,buySubcommand,cacheCommand,categoriesSubcommand,certsCommand,changelogCommand,checkSubcommand,checkSubcommand2,checkSubcommand3,checksAddFlags,checksRemoveFlags,checksSubcommand,ciCommand,claimSubcommand,codingAgentsSubcommand,completeSubcommand,configureSubcommand,connectSubcommand,connectSubcommand2,connectSubcommand3,connexCommand,contactsAddSubcommand,contactsSubcommand,contractCommand,copySubcommand,createGroupSubcommand,createStoreSubcommand,createSubcommand,createSubcommand2,createSubcommand3,createSubcommand4,createSubcommand5,createSubcommand6,createSubcommand7,createSubcommand8 as createSubcommand9,createThresholdSubcommand,creditsSubcommand,cronsCommand,curlCommand,dangerouslyDeleteImmutableStaticAssetSubcommand,dangerouslyDeleteSubcommand,decideSubcommand,delSubcommand,deleteGroupSubcommand,deleteStoreSubcommand,deleteSubcommand as deleteSubcommand2,deleteSubcommand2 as deleteSubcommand4,deleteSubcommand3 as deleteSubcommand5,deployHooksCommand,detachSubcommand,diagnoseSubcommand,diffSubcommand,disableSubcommand,disableSubcommand2,disableSubcommand3 as disableSubcommand4,disableSubcommand4 as disableSubcommand5,discardSubcommand,disconnectSubcommand,disconnectSubcommand2,disconnectSubcommand3,discoverSubcommand,dnsCommand,domainSubcommand,domainsCommand,emptyStoreSubcommand,enableSubcommand,enableSubcommand2,enableSubcommand3 as enableSubcommand4,enableSubcommand4 as enableSubcommand5,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,executionsListSubcommand,executionsSubcommand,experimentsCommand,fetchSubcommand,findForeignCreateFlags,findOverlappingConnections,firewallCommand,flagsCommand,flushSubcommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getConnections,getFlagAttributeType,getStorageProvider,getStorageStore,getStorageStores,getStoreInfoSubcommand,getSubcommand,getSubcommand2,getSubcommand3,getSubcommand4 as getSubcommand5,getSubcommand5 as getSubcommand6,gitCommand,globalConfigCommand,grepSubcommand,guidanceCommand,guideSubcommand,httpstatCommand,importKeySubcommand,importSubcommand,importSubcommand2,initCommand,inspectCommand,inspectGroupSubcommand,inspectSubcommand,inspectSubcommand10 as inspectSubcommand12,inspectSubcommand11 as inspectSubcommand15,inspectSubcommand2,inspectSubcommand3 as inspectSubcommand4,inspectSubcommand4 as inspectSubcommand6,inspectSubcommand5 as inspectSubcommand7,inspectSubcommand6 as inspectSubcommand8,inspectSubcommand7 as inspectSubcommand9,inspectSubcommand8 as inspectSubcommand10,inspectSubcommand9 as inspectSubcommand11,installCommand,installationsSubcommand,installedSubcommand,integrationCommand,integrationResourceCommand,invalidateSubcommand,inviteSubcommand,invokeSubcommand,ipBlocksBlockSubcommand,ipBlocksListSubcommand,ipBlocksSubcommand,ipBlocksUnblockSubcommand,isBucketingAttribute,isCustomEnvironmentAddonAlias,isFlagAttributeType,isFlagEvaluationsDimension,isFlagEvaluationsGranularity,isProjectGrant,isTimestampAttributeType,issueSubcommand,issuerJwksUrl,issuerUrl,itemsSubcommand,kmsCommand,labelsListSubcommand,labelsSubcommand,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listStorageProviderTypes,listStoresSubcommand,listSubcommand,listSubcommand10 as listSubcommand12,listSubcommand11 as listSubcommand13,listSubcommand12 as listSubcommand14,listSubcommand13 as listSubcommand15,listSubcommand14 as listSubcommand16,listSubcommand15 as listSubcommand17,listSubcommand16 as listSubcommand18,listSubcommand17 as listSubcommand19,listSubcommand18 as listSubcommand21,listSubcommand19 as listSubcommand22,listSubcommand2,listSubcommand20 as listSubcommand23,listSubcommand21 as listSubcommand24,listSubcommand22 as listSubcommand25,listSubcommand23 as listSubcommand27,listSubcommand24 as listSubcommand28,listSubcommand25 as listSubcommand29,listSubcommand26 as listSubcommand30,listSubcommand3 as listSubcommand4,listSubcommand4 as listSubcommand5,listSubcommand5 as listSubcommand6,listSubcommand6 as listSubcommand8,listSubcommand7 as listSubcommand9,listSubcommand8 as listSubcommand10,listSubcommand9 as listSubcommand11,listVersionsSubcommand,loadStoreDetails,logoutCommand,logsSubcommand,mcpCommand,membersAddFlags,membersInviteSubcommand,membersRemoveFlags,membersRemoveSubcommand,membersSubcommand,membersSubcommand2,microfrontendsCommand,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,observabilitySubcommand,openCommand,openSubcommand as openSubcommand2,openSubcommand2 as openSubcommand3,openSubcommand3 as openSubcommand4,openSubcommand4 as openSubcommand5,overrideSubcommand,overviewSubcommand,pauseSubcommand,persistentActionsInspectSubcommand,persistentActionsListSubcommand,persistentActionsSubcommand,preinstallSubcommand,prepareSubcommand,presignSubcommand,priceSubcommand,pricingCommand,proSubcommand,projectCommand,projectsSubcommand,promoteCommand,promoteSubcommand,protectionSubcommand,publishSubcommand,pullSubcommand,purgeSubcommand,putImageSubcommand,putSubcommand,redeployCommand,redirectsCommand,removeCommand,removeFromGroupSubcommand,removeGrantSubcommand,removeSubcommand,removeSubcommand10,removeSubcommand11,removeSubcommand12,removeSubcommand13,removeSubcommand14,removeSubcommand15,removeSubcommand16 as removeSubcommand17,removeSubcommand17 as removeSubcommand18,removeSubcommand2,removeSubcommand3,removeSubcommand4,removeSubcommand5,removeSubcommand6,removeSubcommand7,removeSubcommand8,removeSubcommand9,renameSubcommand,renewSubcommand,requestSubcommand,rerunSubcommand,reseedEnrollmentSubcommand,resolveProjectConnection,resolveStore,resourceSubcommand,restartAnalysisSubcommand,restoreSubcommand,resumeSubcommand,returnToDraftSubcommand,revokeKeySubcommand,revokeTokensSubcommand,rollbackCommand,rollingReleaseCommand,rolloutSubcommand,rulesAddSubcommand,rulesAddSubcommand2 as rulesAddSubcommand3,rulesAddSubcommand3 as rulesAddSubcommand4,rulesDisableSubcommand,rulesEditSubcommand,rulesEditSubcommand2,rulesEnableSubcommand,rulesInspectSubcommand as rulesInspectSubcommand2,rulesListSubcommand,rulesListSubcommand2,rulesListSubcommand3,rulesMoveSubcommand,rulesRemoveSubcommand,rulesRemoveSubcommand2,rulesRemoveSubcommand3,rulesReorderSubcommand,rulesSubcommand,rulesSubcommand2,rulesSubcommand3,rulesUpdateSubcommand as rulesUpdateSubcommand2,runSubcommand,schedulesCommand,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,searchSubcommand,searchSubcommand2,securityCommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setRampSubcommand,setSubcommand,setSubcommand2,setSubcommand3,setupCommand,setupSubcommand,signedTokenSubcommand,signupCommand,skillsCommand,speedInsightsSubcommand,splitSubcommand,ssoSubcommand,staleSubcommand,startSubcommand,startSubcommand2,statusSubcommand,statusSubcommand2,statusSubcommand3,statusSubcommand4,statusSubcommand5,statusSubcommand6,storageCommand,storeMatchesType,storeProductLabel,storeSupportsOidc,storeTypeName,switchSubcommand,systemBypassAddSubcommand,systemBypassListSubcommand,systemBypassRemoveSubcommand,systemBypassSubcommand,systemMitigationsPauseSubcommand,systemMitigationsResumeSubcommand,systemMitigationsSubcommand,targetCommand,targetsAddSubcommand,targetsListSubcommand,targetsRemoveSubcommand,targetsSubcommand,teamsCommand,telemetryCommand,tokenSubcommand,tokenSubcommand2,tokensCommand,tokensSubcommand,traceSubcommand,trafficInspectSubcommand,trafficListSubcommand,trafficSubcommand,transferInSubcommand,unarchiveSubcommand,updateGrantSubcommand,updateSubcommand,updateSubcommand10,updateSubcommand11,updateSubcommand2,updateSubcommand3,updateSubcommand4,updateSubcommand5,updateSubcommand6,updateSubcommand7,updateSubcommand8,updateSubcommand9,upgradeCommand,uploadSubcommand,usageCommand,useSubcommand,useTargetingSubcommand,verifySubcommand,versionCommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand,webAnalyticsSubcommand,webhooksCommand,whoamiCommand}from"./chunks/chunk-V426AGVC.js";import{createSubcommand as createSubcommand8,getSubcommand as getSubcommand4,searchSubcommand as searchSubcommand3,tracesCommand}from"./chunks/chunk-O5A7CNRV.js";import{tracesConfigCommand}from"./chunks/chunk-774D3BGN.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand14,listSubcommand as listSubcommand26,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-MOLEXKVC.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-EDDOQXEI.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-35QK5NDD.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-M4IWOZEG.js";import{addSubcommand as addSubcommand10,deleteSubcommand as deleteSubcommand3,disableSubcommand as disableSubcommand3,discardSubcommand as discardSubcommand2,editSubcommand as editSubcommand2,enableSubcommand as enableSubcommand3,exportSubcommand,inspectSubcommand as inspectSubcommand13,listSubcommand as listSubcommand20,listVersionsSubcommand as listVersionsSubcommand2,publishSubcommand as publishSubcommand2,reorderSubcommand,restoreSubcommand as restoreSubcommand2,routesCommand}from"./chunks/chunk-OQVE2WXX.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-7SNMU7U7.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand5,listSubcommand as listSubcommand7,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-6C4RPAG7.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-DZZFEAM6.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesNotificationsUpdateSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-S54ISKGR.js";import{logsCommand}from"./chunks/chunk-WOTPEBSH.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-YW5R6XQI.js";import"./chunks/chunk-ZTUQEA2X.js";import"./chunks/chunk-JKTQV2QJ.js";import"./chunks/chunk-RSLPLRVK.js";import{DEV_RESOURCE_TOKEN}from"./chunks/chunk-H3QRCTIJ.js";import"./chunks/chunk-FAW6NBLQ.js";import"./chunks/chunk-2I64AYHG.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-LWQVT6YW.js";import{getTeams}from"./chunks/chunk-MIG67KZ2.js";import"./chunks/chunk-SOJCELXH.js";import{param}from"./chunks/chunk-SXUEGVWB.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ILFUNCJZ.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-TAT5WGDZ.js";import{validateLsArgs}from"./chunks/chunk-5AXNGQJC.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-M5NWE7EO.js";import{elapsed}from"./chunks/chunk-JZRMH5UA.js";import"./chunks/chunk-B2L2QTXT.js";import{getDeployment,toHost}from"./chunks/chunk-YEWZFZ2O.js";import{mapCertError}from"./chunks/chunk-YZBYL3SH.js";import"./chunks/chunk-JNLWD6DK.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-NYFB3EYC.js";import{table}from"./chunks/chunk-6TAQ6OWD.js";import{printError}from"./chunks/chunk-LXNMVWYO.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,exitWithNonInteractiveError,getExitCodeForReason,getGlobalFlagsFromArgv,mentionsObservabilityPlus,observabilityPlusPurchaseFix,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags,writeAgentError}from"./chunks/chunk-ONPJXQQ6.js";import"./chunks/chunk-WPS6JZF6.js";import{require_strip_ansi}from"./chunks/chunk-OSCCYU74.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import{detectExplicitScope,getContextName,getScope,introspectToken,isAppPrincipalEnabled,persistAuthConfig,readLocalConfig,resolveAppFromToken,writeToConfigFile}from"./chunks/chunk-THB7KY2N.js";import{getGlobalPathConfig}from"./chunks/chunk-AEEEEOYS.js";import{require_ms}from"./chunks/chunk-QTKJC2O5.js";import{TelemetryClient}from"./chunks/chunk-MCBO6LL7.js";import"./chunks/chunk-RCTYVKM5.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-7T6TL3GQ.js";import"./chunks/chunk-BRK4OB4B.js";import"./chunks/chunk-GHM7V3GG.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-5XJNPXQK.js";import{directFetch,fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments,require_arg}from"./chunks/chunk-LYKPLTZ7.js";import{quoteArg}from"./chunks/chunk-BKV35LVB.js";import{GLOBAL_CLI_FLAG_NAMES,arg_common_default,formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-5IPBCD7K.js";import{VERCEL_CONFIG_EXTENSIONS,execFileAsync,getGitConfigPath,getGitExecutable,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-3XLK5ZPD.js";import"./chunks/chunk-B4ATVYZW.js";import"./chunks/chunk-F2ZWW2IO.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-4QSVBLAS.js";import{getUser}from"./chunks/chunk-PE7QZUY7.js";import{getTeamByIdOrSlug}from"./chunks/chunk-VOZEB6PD.js";import{APIError,AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainPurchasePending,DomainRemovalConflict,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,InvalidMoveDestination,InvalidToken,LinkRequiredError,NoAliasInConfig,NowError,ProjectNotFound,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnexpectedDomainTransferError,UnsupportedTLD,UserAborted,code,isAPIError,require_bytes}from"./chunks/chunk-NM67DIPQ.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib as require_lib2}from"./chunks/chunk-FI772UVH.js";import{chars_default,emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-Q2YQSMIB.js";import{require_dist}from"./chunks/chunk-QGIQK47P.js";import{pkg_default}from"./chunks/chunk-AVSPFBLM.js";import"./chunks/chunk-XCJDGQO7.js";import"./chunks/chunk-YPTLSODC.js";import"./chunks/chunk-7HL2RPUO.js";import{require_source}from"./chunks/chunk-U7KCDTCH.js";import"./chunks/chunk-N3ZZ7FHQ.js";import"./chunks/chunk-GU6VIFR5.js";import{__require,__toESM}from"./chunks/chunk-6L236MNA.js";var AgentTelemetryClient=class extends TelemetryClient{trackCliArgumentInit(value){value&&this.trackCliArgument({arg:"init",value})}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}};var import_chalk=__toESM(require_source(),1);import{readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{KNOWN_AGENTS}from"@vercel/detect-agent";var BEST_PRACTICES_START="<!-- VERCEL BEST PRACTICES START -->",BEST_PRACTICES_END="<!-- VERCEL BEST PRACTICES END -->",BEST_PRACTICES_BODY=`## Best practices for developing on Vercel
8
8
 
9
9
  These defaults are optimized for AI coding agents (and humans) working on apps that deploy to Vercel.
10
10
 
@@ -55,7 +55,7 @@ ${table(subagentRows,{hsep:3})}`)}return`${sections.join(`
55
55
  `),0;let projectList=asArray(data.projects??data.items);if(projectList.length===0)return output_manager_default.log("No projects with Agent Runs activity found."),0;output_manager_default.log(`Projects with Agent Runs under ${import_chalk5.default.bold(scope.contextName)} ${fetchStamp()}`);let rows=[["Project","Runs","Avg Duration"].map(header=>import_chalk5.default.bold(import_chalk5.default.cyan(header))),...projectList.map(project=>[import_chalk5.default.bold(readString(project,"projectName","name","project","projectId","id")??"-"),formatCount(readNumber(project,"runs","runCount","totalRuns")),import_chalk5.default.gray(formatDurationMs(readNumber(project,"avgDurationMs","averageDurationMs","avgDuration")))])];return client.stdout.write(`
56
56
  ${table(rows,{hsep:3}).replace(/^/gm," ")}
57
57
 
58
- `),output_manager_default.log(`Run ${cmd("vercel agent-runs list --project <name>")} to list its Agent Runs.`),0}var COMMAND_CONFIG={list:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),trace:getCommandAliases(traceSubcommand),projects:getCommandAliases(projectsSubcommand)};async function agentRuns(client){let telemetry2=new AgentRunsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(agentRunsCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{parent:agentRunsCommand,columns:client.stderr.columns}))}if(!subcommand){let unknown=subArgs.find(arg=>!arg.startsWith("-"));return unknown?(output_manager_default.error(`Unknown subcommand: ${unknown}`),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2):(needHelp&&telemetry2.trackCliFlagHelp("agent-runs"),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),0)}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(listSubcommand),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),await list2(client));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),await inspect(client));case"trace":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(traceSubcommand),0):(telemetry2.trackCliSubcommandTrace(subcommandOriginal),await trace(client));case"projects":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(projectsSubcommand),0):(telemetry2.trackCliSubcommandProjects(subcommandOriginal),await projects(client));default:return output_manager_default.error(`Unknown subcommand: ${subcommandOriginal}`),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2}}var ActivityTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(v){v&&this.trackCliSubcommand({subcommand:"ls",value:v})}trackCliSubcommandTypes(v){v&&this.trackCliSubcommand({subcommand:"types",value:v})}trackCliOptionType(v){v&&v.length>0&&this.trackCliOption({option:"type",value:v.join(",")})}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(v){typeof v=="number"&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var COMMAND_CONFIG2={types:getCommandAliases(typesSubcommand)};async function activity(client){let telemetry2=new ActivityTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(activityCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG2),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("activity",subcommand),output_manager_default.print(help(activityCommand,{columns:client.stderr.columns})),0;function printSubcommandHelp(command2){output_manager_default.print(help(command2,{parent:activityCommand,columns:client.stderr.columns}))}switch(subcommand){case"types":{if(needHelp)return telemetry2.trackCliFlagHelp("activity",subcommandOriginal),printSubcommandHelp(typesSubcommand),0;telemetry2.trackCliSubcommandTypes(subcommandOriginal);let typesFn=(await import("./chunks/types-MATC4UQL.js")).default;return typesFn(client,telemetry2)}default:{if(needHelp)return telemetry2.trackCliFlagHelp("activity",subcommandOriginal),output_manager_default.print(help(activityCommand,{columns:client.stderr.columns})),0;telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-Q566PTT4.js")).default;return listFn(client,telemetry2)}}}var import_chalk6=__toESM(require_source(),1);var DEFAULT_LIST_LIMIT=20,MAX_LIST_LIMIT=100;function parseListLimit(value,{defaultLimit=DEFAULT_LIST_LIMIT,maxLimit=MAX_LIST_LIMIT}={}){if(value===void 0)return defaultLimit;if(!Number.isInteger(value)||value<1||value>maxLimit)throw new Error(`The --limit option must be an integer from 1 to ${maxLimit}.`);return value}var PaginationError=class extends Error{constructor(message){super(message),this.name="PaginationError"}};async function fetchAllPages(fetchPage,{maxPages=1e3}={}){let items=[],seen=new Set,next;for(let pages=0;pages<maxPages;pages++){let page=await fetchPage(next);if(items.push(...page.items),!page.next)return items;if(seen.has(page.next))throw new PaginationError("Pagination returned a cursor it already returned. The list is incomplete.");seen.add(page.next),next=page.next}throw new PaginationError(`Stopped after ${maxPages} pages. The list is incomplete. Use --limit and --next to page through it manually.`)}var CURSOR_FLAGS=new Set(["--next","-N"]);function quoteShellArg(value){return/^[A-Za-z0-9_./@:,=+-]+$/.test(value)?value:`'${value.replace(/'/g,"'\\''")}'`}function getNextPageCommand(argv,next){let args=stripSensitiveAuthArgs(argv.slice(2)),kept=[];for(let i=0;i<args.length;i++){let arg=args[i],name=normalizeFlagName(arg);if(CURSOR_FLAGS.has(name)){!arg.includes("=")&&i+1<args.length&&i++;continue}kept.push(arg)}return kept.push(`--next=${next}`),`${packageName} ${kept.map(quoteShellArg).join(" ")}`}function printNextPageHint(client,next){next&&output_manager_default.log(`To display the next page, run ${cmd(getNextPageCommand(client.argv,next))}`)}var MAX_PAGE_SIZE=100,MAX_SEARCH_LENGTH=256;async function listApiKeysPage(client,opts={}){let query=new URLSearchParams({purpose:"ai-gateway"});opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("until",opts.next),opts.search&&query.set("search",opts.search);let{apiKeys:apiKeys2,pagination}=await client.fetch(`/v1/api-keys?${query.toString()}`,{method:"GET"});return{items:apiKeys2??[],next:pagination?.next??null}}async function listAllApiKeys(client,opts={}){return fetchAllPages(next=>listApiKeysPage(client,{...opts,limit:MAX_PAGE_SIZE,next}))}async function getApiKey(client,apiKeyId){let{apiKey}=await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"GET"});return apiKey}async function updateApiKeyQuota(client,apiKeyId,input){return client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}/quota`,{method:"PATCH",body:input})}function describeApiKeyLookupError(identifier,resolved){switch(resolved.error){case"ambiguous":return`Multiple API keys named "${identifier}" (${resolved.count}). Use the key id instead.`;case"incomplete":return`Could not search every API key for "${identifier}": ${resolved.message} Use the key id instead.`;default:return`API key not found: ${identifier}`}}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let search3=identifier.length<=MAX_SEARCH_LENGTH?identifier:void 0,keys;try{keys=await listAllApiKeys(client,{search:search3})}catch(err){if(err instanceof PaginationError)return{error:"incomplete",message:err.message};throw err}let matches=keys.filter(key=>key.name===identifier);return matches.length===1?{apiKey:matches[0]}:matches.length>1?{error:"ambiguous",count:matches.length}:{error:"not_found"}}async function deleteApiKey(client,apiKeyId){await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"DELETE"})}async function createApiKey(client,payload){return await client.fetch("/v1/api-keys",{method:"POST",body:{purpose:"ai-gateway",...payload}})}var AiGatewayApiKeysCreateTelemetryClient=class extends TelemetryClient{trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionBudget(budget2){budget2!==void 0&&this.trackCliOption({option:"budget",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagIncludeByok(includeByok){includeByok&&this.trackCliFlag("include-byok")}trackCliOptionAlertThresholds(alertThresholds){alertThresholds&&this.trackCliOption({option:"alert-thresholds",value:alertThresholds})}trackCliOptionExpiration(expiration){expiration&&this.trackCliOption({option:"expiration",value:expiration})}trackCliFlagZdrExempt(zdrExempt){zdrExempt&&this.trackCliFlag("zdr-exempt")}trackCliFlagBypassAllSettings(bypassAllSettings){bypassAllSettings&&this.trackCliFlag("bypass-all-settings")}};var VALID_REFRESH_PERIODS=["daily","weekly","monthly","none"];function isValidRefreshPeriod(period){return VALID_REFRESH_PERIODS.includes(period)}var VALID_ALERT_THRESHOLDS=[50,75,100];function parseAlertThresholds(input){let values=[],tokens=input.split(",").map(token2=>token2.trim()).filter(token2=>token2.length>0);for(let token2 of tokens){let num=Number(token2);if(!Number.isInteger(num)||!VALID_ALERT_THRESHOLDS.includes(num))return{valid:!1,invalid:token2};values.includes(num)||values.push(num)}return{valid:!0,values}}function buildQuota(opts){let effectiveRefresh=opts.refreshPeriod&&opts.refreshPeriod!=="none"?opts.refreshPeriod:void 0,hasAlertThresholds=opts.alertThresholds!==void 0&&opts.alertThresholds.length>0;if(!(opts.budget===void 0&&!effectiveRefresh&&!opts.includeByok&&!hasAlertThresholds))return{...opts.budget!==void 0&&{limitAmount:opts.budget},...effectiveRefresh&&{refreshPeriod:effectiveRefresh},...opts.includeByok&&{includeByokInQuota:!0},...hasAlertThresholds&&{alertThresholds:opts.alertThresholds}}}var EXPIRY_PRESETS=[{label:"7 days",value:"7d"},{label:"30 days",value:"30d"},{label:"60 days",value:"60d"},{label:"90 days",value:"90d"},{label:"1 year",value:"1y"}],DEFAULT_EXPIRY_PRESET="30d",VALID_EXPIRY_VALUES=[...EXPIRY_PRESETS.map(p=>p.value),"none"];function isValidExpiry(value){return VALID_EXPIRY_VALUES.includes(value)}var DAY_MS=864e5;function presetToExpiresAt(value,now=Date.now()){switch(value){case"7d":return now+7*DAY_MS;case"30d":return now+30*DAY_MS;case"60d":return now+60*DAY_MS;case"90d":return now+90*DAY_MS;case"1y":{let date=new Date(now);return date.setFullYear(date.getFullYear()+1),date.getTime()}default:return}}async function create(client,argv){let telemetry2=new AiGatewayApiKeysCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,name=opts["--name"],budgetFlag=opts["--budget"],limitFlag=opts["--limit"],refreshPeriod=opts["--refresh-period"],includeByok=opts["--include-byok"],alertThresholdsInput=opts["--alert-thresholds"],expiration=opts["--expiration"],zdrExempt=opts["--zdr-exempt"],bypassAll=opts["--bypass-all-settings"];if(telemetry2.trackCliOptionName(name),telemetry2.trackCliOptionBudget(budgetFlag),telemetry2.trackCliOptionLimit(limitFlag),telemetry2.trackCliOptionRefreshPeriod(refreshPeriod),telemetry2.trackCliFlagIncludeByok(includeByok),telemetry2.trackCliOptionAlertThresholds(alertThresholdsInput),telemetry2.trackCliOptionExpiration(expiration),telemetry2.trackCliFlagZdrExempt(zdrExempt),telemetry2.trackCliFlagBypassAllSettings(bypassAll),budgetFlag!==void 0&&limitFlag!==void 0){let message="Pass only one of --limit or --budget. (--budget is deprecated; use --limit.)";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --limit 500")}]},2),output_manager_default.error(message),2}budgetFlag!==void 0&&output_manager_default.warn("`--budget` is deprecated, please use `--limit` instead");let budget2=limitFlag??budgetFlag;if(budget2!==void 0&&budget2<1){let message="Budget must be a positive number in dollars (minimum 1).";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --limit 500")}]},2),output_manager_default.error(message),2}if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod)){let message=`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_REFRESH_PERIOD,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --refresh-period monthly")}]},2),output_manager_default.error(message),2}let alertThresholds;if(alertThresholdsInput!==void 0){let result=parseAlertThresholds(alertThresholdsInput);if(!result.valid){let message=`Invalid alert threshold "${result.invalid}". Must be a comma-separated subset of: ${VALID_ALERT_THRESHOLDS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ALERT_THRESHOLDS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --alert-thresholds 50,75,100")}]},2),output_manager_default.error(message),2}alertThresholds=result.values}if(expiration!==void 0&&!isValidExpiry(expiration)){let message=`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_EXPIRATION,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --expiration 90d")}]},2),output_manager_default.error(message),2}let expiresAt=expiration!==void 0?presetToExpiresAt(expiration):void 0,aiGatewayQuota=buildQuota({budget:budget2,refreshPeriod,includeByok,alertThresholds});if(!client.config.currentTeam){if(!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway api-keys create` or run `vercel switch` first."),1;let org=await selectOrg(client,"Which team should own this API key?");org.type==="team"&&(client.config.currentTeam=org.id)}let createStamp=stamp_default();output_manager_default.spinner("Creating API key");let metadata={...zdrExempt&&{zdr:{enableNonZdrModels:!0}},...bypassAll&&{bypassAll:!0}};try{let result=await createApiKey(client,{name,aiGatewayQuota,...expiresAt!==void 0&&{expiresAt},...Object.keys(metadata).length>0&&{metadata}});return output_manager_default.stopSpinner(),client.stdout.write(`${result.apiKeyString}
58
+ `),output_manager_default.log(`Run ${cmd("vercel agent-runs list --project <name>")} to list its Agent Runs.`),0}var COMMAND_CONFIG={list:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),trace:getCommandAliases(traceSubcommand),projects:getCommandAliases(projectsSubcommand)};async function agentRuns(client){let telemetry2=new AgentRunsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(agentRunsCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{parent:agentRunsCommand,columns:client.stderr.columns}))}if(!subcommand){let unknown=subArgs.find(arg2=>!arg2.startsWith("-"));return unknown?(output_manager_default.error(`Unknown subcommand: ${unknown}`),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2):(needHelp&&telemetry2.trackCliFlagHelp("agent-runs"),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),0)}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(listSubcommand),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),await list2(client));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),await inspect(client));case"trace":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(traceSubcommand),0):(telemetry2.trackCliSubcommandTrace(subcommandOriginal),await trace(client));case"projects":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(projectsSubcommand),0):(telemetry2.trackCliSubcommandProjects(subcommandOriginal),await projects(client));default:return output_manager_default.error(`Unknown subcommand: ${subcommandOriginal}`),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2}}var ActivityTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(v){v&&this.trackCliSubcommand({subcommand:"ls",value:v})}trackCliSubcommandTypes(v){v&&this.trackCliSubcommand({subcommand:"types",value:v})}trackCliOptionType(v){v&&v.length>0&&this.trackCliOption({option:"type",value:v.join(",")})}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(v){typeof v=="number"&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var COMMAND_CONFIG2={types:getCommandAliases(typesSubcommand)};async function activity(client){let telemetry2=new ActivityTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(activityCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG2),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("activity",subcommand),output_manager_default.print(help(activityCommand,{columns:client.stderr.columns})),0;function printSubcommandHelp(command2){output_manager_default.print(help(command2,{parent:activityCommand,columns:client.stderr.columns}))}switch(subcommand){case"types":{if(needHelp)return telemetry2.trackCliFlagHelp("activity",subcommandOriginal),printSubcommandHelp(typesSubcommand),0;telemetry2.trackCliSubcommandTypes(subcommandOriginal);let typesFn=(await import("./chunks/types-GQNKYZJH.js")).default;return typesFn(client,telemetry2)}default:{if(needHelp)return telemetry2.trackCliFlagHelp("activity",subcommandOriginal),output_manager_default.print(help(activityCommand,{columns:client.stderr.columns})),0;telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-FVUIZPC7.js")).default;return listFn(client,telemetry2)}}}var import_chalk6=__toESM(require_source(),1);var DEFAULT_LIST_LIMIT=20,MAX_LIST_LIMIT=100;function parseListLimit(value,{defaultLimit=DEFAULT_LIST_LIMIT,maxLimit=MAX_LIST_LIMIT}={}){if(value===void 0)return defaultLimit;if(!Number.isInteger(value)||value<1||value>maxLimit)throw new Error(`The --limit option must be an integer from 1 to ${maxLimit}.`);return value}var PaginationError=class extends Error{constructor(message){super(message),this.name="PaginationError"}};async function fetchAllPages(fetchPage,{maxPages=1e3}={}){let items=[],seen=new Set,next;for(let pages=0;pages<maxPages;pages++){let page=await fetchPage(next);if(items.push(...page.items),!page.next)return items;if(seen.has(page.next))throw new PaginationError("Pagination returned a cursor it already returned. The list is incomplete.");seen.add(page.next),next=page.next}throw new PaginationError(`Stopped after ${maxPages} pages. The list is incomplete. Use --limit and --next to page through it manually.`)}var CURSOR_FLAGS=new Set(["--next","-N"]);function quoteShellArg(value){return/^[A-Za-z0-9_./@:,=+-]+$/.test(value)?value:`'${value.replace(/'/g,"'\\''")}'`}function getNextPageCommand(argv,next){let args=stripSensitiveAuthArgs(argv.slice(2)),kept=[];for(let i=0;i<args.length;i++){let arg2=args[i],name=normalizeFlagName(arg2);if(CURSOR_FLAGS.has(name)){!arg2.includes("=")&&i+1<args.length&&i++;continue}kept.push(arg2)}return kept.push(`--next=${next}`),`${packageName} ${kept.map(quoteShellArg).join(" ")}`}function printNextPageHint(client,next){next&&output_manager_default.log(`To display the next page, run ${cmd(getNextPageCommand(client.argv,next))}`)}var MAX_PAGE_SIZE=100,MAX_SEARCH_LENGTH=256;async function listApiKeysPage(client,opts={}){let query=new URLSearchParams({purpose:"ai-gateway"});opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("until",opts.next),opts.search&&query.set("search",opts.search);let{apiKeys:apiKeys2,pagination}=await client.fetch(`/v1/api-keys?${query.toString()}`,{method:"GET"});return{items:apiKeys2??[],next:pagination?.next??null}}async function listAllApiKeys(client,opts={}){return fetchAllPages(next=>listApiKeysPage(client,{...opts,limit:MAX_PAGE_SIZE,next}))}async function getApiKey(client,apiKeyId){let{apiKey}=await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"GET"});return apiKey}async function updateApiKeyQuota(client,apiKeyId,input){return client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}/quota`,{method:"PATCH",body:input})}function describeApiKeyLookupError(identifier,resolved){switch(resolved.error){case"ambiguous":return`Multiple API keys named "${identifier}" (${resolved.count}). Use the key id instead.`;case"incomplete":return`Could not search every API key for "${identifier}": ${resolved.message} Use the key id instead.`;default:return`API key not found: ${identifier}`}}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let search3=identifier.length<=MAX_SEARCH_LENGTH?identifier:void 0,keys;try{keys=await listAllApiKeys(client,{search:search3})}catch(err){if(err instanceof PaginationError)return{error:"incomplete",message:err.message};throw err}let matches=keys.filter(key=>key.name===identifier);return matches.length===1?{apiKey:matches[0]}:matches.length>1?{error:"ambiguous",count:matches.length}:{error:"not_found"}}async function deleteApiKey(client,apiKeyId){await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"DELETE"})}async function createApiKey(client,payload){return await client.fetch("/v1/api-keys",{method:"POST",body:{purpose:"ai-gateway",...payload}})}var AiGatewayApiKeysCreateTelemetryClient=class extends TelemetryClient{trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionBudget(budget2){budget2!==void 0&&this.trackCliOption({option:"budget",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagIncludeByok(includeByok){includeByok&&this.trackCliFlag("include-byok")}trackCliOptionAlertThresholds(alertThresholds){alertThresholds&&this.trackCliOption({option:"alert-thresholds",value:alertThresholds})}trackCliOptionExpiration(expiration){expiration&&this.trackCliOption({option:"expiration",value:expiration})}trackCliFlagZdrExempt(zdrExempt){zdrExempt&&this.trackCliFlag("zdr-exempt")}trackCliFlagBypassAllSettings(bypassAllSettings){bypassAllSettings&&this.trackCliFlag("bypass-all-settings")}};var VALID_REFRESH_PERIODS=["daily","weekly","monthly","none"];function isValidRefreshPeriod(period){return VALID_REFRESH_PERIODS.includes(period)}var VALID_ALERT_THRESHOLDS=[50,75,100];function parseAlertThresholds(input){let values=[],tokens=input.split(",").map(token2=>token2.trim()).filter(token2=>token2.length>0);for(let token2 of tokens){let num=Number(token2);if(!Number.isInteger(num)||!VALID_ALERT_THRESHOLDS.includes(num))return{valid:!1,invalid:token2};values.includes(num)||values.push(num)}return{valid:!0,values}}function buildQuota(opts){let effectiveRefresh=opts.refreshPeriod&&opts.refreshPeriod!=="none"?opts.refreshPeriod:void 0,hasAlertThresholds=opts.alertThresholds!==void 0&&opts.alertThresholds.length>0;if(!(opts.budget===void 0&&!effectiveRefresh&&!opts.includeByok&&!hasAlertThresholds))return{...opts.budget!==void 0&&{limitAmount:opts.budget},...effectiveRefresh&&{refreshPeriod:effectiveRefresh},...opts.includeByok&&{includeByokInQuota:!0},...hasAlertThresholds&&{alertThresholds:opts.alertThresholds}}}var EXPIRY_PRESETS=[{label:"7 days",value:"7d"},{label:"30 days",value:"30d"},{label:"60 days",value:"60d"},{label:"90 days",value:"90d"},{label:"1 year",value:"1y"}],DEFAULT_EXPIRY_PRESET="30d",VALID_EXPIRY_VALUES=[...EXPIRY_PRESETS.map(p=>p.value),"none"];function isValidExpiry(value){return VALID_EXPIRY_VALUES.includes(value)}var DAY_MS=864e5;function presetToExpiresAt(value,now=Date.now()){switch(value){case"7d":return now+7*DAY_MS;case"30d":return now+30*DAY_MS;case"60d":return now+60*DAY_MS;case"90d":return now+90*DAY_MS;case"1y":{let date=new Date(now);return date.setFullYear(date.getFullYear()+1),date.getTime()}default:return}}async function create(client,argv){let telemetry2=new AiGatewayApiKeysCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,name=opts["--name"],budgetFlag=opts["--budget"],limitFlag=opts["--limit"],refreshPeriod=opts["--refresh-period"],includeByok=opts["--include-byok"],alertThresholdsInput=opts["--alert-thresholds"],expiration=opts["--expiration"],zdrExempt=opts["--zdr-exempt"],bypassAll=opts["--bypass-all-settings"];if(telemetry2.trackCliOptionName(name),telemetry2.trackCliOptionBudget(budgetFlag),telemetry2.trackCliOptionLimit(limitFlag),telemetry2.trackCliOptionRefreshPeriod(refreshPeriod),telemetry2.trackCliFlagIncludeByok(includeByok),telemetry2.trackCliOptionAlertThresholds(alertThresholdsInput),telemetry2.trackCliOptionExpiration(expiration),telemetry2.trackCliFlagZdrExempt(zdrExempt),telemetry2.trackCliFlagBypassAllSettings(bypassAll),budgetFlag!==void 0&&limitFlag!==void 0){let message="Pass only one of --limit or --budget. (--budget is deprecated; use --limit.)";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --limit 500")}]},2),output_manager_default.error(message),2}budgetFlag!==void 0&&output_manager_default.warn("`--budget` is deprecated, please use `--limit` instead");let budget2=limitFlag??budgetFlag;if(budget2!==void 0&&budget2<1){let message="Budget must be a positive number in dollars (minimum 1).";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --limit 500")}]},2),output_manager_default.error(message),2}if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod)){let message=`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_REFRESH_PERIOD,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --refresh-period monthly")}]},2),output_manager_default.error(message),2}let alertThresholds;if(alertThresholdsInput!==void 0){let result=parseAlertThresholds(alertThresholdsInput);if(!result.valid){let message=`Invalid alert threshold "${result.invalid}". Must be a comma-separated subset of: ${VALID_ALERT_THRESHOLDS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ALERT_THRESHOLDS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --alert-thresholds 50,75,100")}]},2),output_manager_default.error(message),2}alertThresholds=result.values}if(expiration!==void 0&&!isValidExpiry(expiration)){let message=`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_EXPIRATION,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --expiration 90d")}]},2),output_manager_default.error(message),2}let expiresAt=expiration!==void 0?presetToExpiresAt(expiration):void 0,aiGatewayQuota=buildQuota({budget:budget2,refreshPeriod,includeByok,alertThresholds});if(!client.config.currentTeam){if(!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway api-keys create` or run `vercel switch` first."),1;let org=await selectOrg(client,"Which team should own this API key?");org.type==="team"&&(client.config.currentTeam=org.id)}let createStamp=stamp_default();output_manager_default.spinner("Creating API key");let metadata={...zdrExempt&&{zdr:{enableNonZdrModels:!0}},...bypassAll&&{bypassAll:!0}};try{let result=await createApiKey(client,{name,aiGatewayQuota,...expiresAt!==void 0&&{expiresAt},...Object.keys(metadata).length>0&&{metadata}});return output_manager_default.stopSpinner(),client.stdout.write(`${result.apiKeyString}
59
59
  `),output_manager_default.success(`API key ${import_chalk6.default.bold(result.apiKey.name)} (${result.apiKey.id}) created ${createStamp()}`),output_manager_default.log(budget2!==void 0?`Spend on this key also counts toward any user and team budgets. List them with ${getCommandName("ai-gateway budgets list")}.`:`No key budget set. Spend still counts toward any API key default, user, and team budgets. List them with ${getCommandName("ai-gateway budgets list")}.`),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var import_chalk7=__toESM(require_source(),1);async function ensureTeam(client){if(client.config.currentTeam)return!0;if(client.nonInteractive||client.isAgent||!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway \u2026` or run `vercel switch` first."),!1;let org=await selectOrg(client,"Which team?");return org.type==="team"?(client.config.currentTeam=org.id,!0):(output_manager_default.error("AI Gateway resources are managed per team. Switch to a team scope and try again."),!1)}var AiGatewayApiKeysListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}};async function renderResource(client,{asJson,spinnerText,fetch:fetch3,toJSON,isEmpty,emptyMessage,header,renderTable:renderTable2,notFoundMessage,next}){let lsStamp=stamp_default(),json=asJson||client.nonInteractive;client.nonInteractive||output_manager_default.spinner(spinnerText);let data;try{data=await fetch3()}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.status===404&&notFoundMessage?notFoundMessage:err.message),1;throw err}return output_manager_default.stopSpinner(),json?(client.stdout.write(`${JSON.stringify(toJSON(data),null,2)}
60
60
  `),0):isEmpty(data)?(output_manager_default.log(emptyMessage),0):(output_manager_default.log(`${header(data)} ${lsStamp()}`),client.stdout.write(renderTable2(data)),next&&printNextPageHint(client,next(data)),0)}var BUDGET_SCOPE_TYPES=["team","project","user","api-key"];function parseBudgetScope(args,opts={}){let[scopeArg,...rest]=args;if(!scopeArg)return{error:`Expected a scope. Specify ${BUDGET_SCOPE_TYPES.join(" or ")}.`};if(!BUDGET_SCOPE_TYPES.includes(scopeArg))return{error:`Unknown scope "${scopeArg}". Expected one of: ${BUDGET_SCOPE_TYPES.join(", ")}.`};if(scopeArg==="team")return opts.isDefault?{error:"The team scope does not support --default. Set the team budget directly."}:rest.length>0?{error:`The team scope does not take a name (got "${rest[0]}").`}:{scope:{scopeType:"team"}};let[name,...extra]=rest;if(opts.isDefault)return name?{error:`The ${scopeArg} scope takes either a name or --default, not both.`}:{scope:{scopeType:scopeArg,isDefault:!0}};if(!name){let required={project:"a project name or id",user:"a user email, username, or id","api-key":"an API key name or id"}[scopeArg];return{error:`The ${scopeArg} scope requires ${required}. Pass --default for the per-${scopeArg} default budget.`}}return extra.length>0?{error:`Unexpected argument "${extra[0]}".`}:{scope:{scopeType:scopeArg,name}}}var PERIOD_PHRASE={daily:"a day",weekly:"a week",monthly:"a month",none:"total"};function formatBudgetCap(limitAmount,refreshPeriod){return`$${limitAmount} ${PERIOD_PHRASE[refreshPeriod]}`}async function listBudgets(client,scopeType){let query=scopeType?`?scopeType=${scopeType}`:"",{budgets:budgets2}=await client.fetch(`/ai-gateway/budgets/list${query}`,{method:"GET"});return budgets2??[]}async function setBudget(client,input){return client.fetch("/ai-gateway/budgets",{method:"PUT",body:input})}async function removeBudget(client,scopeType,opts={}){let params=new URLSearchParams({scopeType});opts.projectId&&params.set("projectId",opts.projectId),opts.userId&&params.set("userId",opts.userId),await client.fetch(`/ai-gateway/budgets?${params.toString()}`,{method:"DELETE"})}var BUDGET_DEFAULT_SCOPE_TYPES=["project","api-key","user"],BUDGET_DEFAULT_COVERED={project:"Projects","api-key":"API keys",user:"Team members"},BUDGET_DEFAULT_APPLIES_TO={project:"every project without its own budget","api-key":"every API key without its own budget",user:"every team member without their own budget"};function parseBudgetDefaultScope(args){let[scopeArg,...rest]=args;return scopeArg?BUDGET_DEFAULT_SCOPE_TYPES.includes(scopeArg)?rest.length>0?{error:`Unexpected argument "${rest[0]}".`}:{scopeType:scopeArg}:{error:`Unknown scope "${scopeArg}". Expected one of: ${BUDGET_DEFAULT_SCOPE_TYPES.join(", ")}.`}:{error:`Expected a scope. Specify ${BUDGET_DEFAULT_SCOPE_TYPES.join(" or ")}.`}}async function listScopeBudgetDefaults(client){let{defaults}=await client.fetch("/ai-gateway/budgets/defaults/list",{method:"GET"});return defaults??[]}async function upsertScopeBudgetDefault(client,input){return client.fetch("/ai-gateway/budgets/defaults",{method:"PUT",body:input})}async function deleteScopeBudgetDefault(client,scopeType){let params=new URLSearchParams({scopeType});await client.fetch(`/ai-gateway/budgets/defaults?${params.toString()}`,{method:"DELETE"})}async function list3(client,argv){let telemetry2=new AiGatewayApiKeysListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,limitFlag=opts["--limit"],next=opts["--next"];telemetry2.trackCliOptionLimit(limitFlag),telemetry2.trackCliOptionNext(next),telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let limit;try{limit=parseListLimit(limitFlag)}catch(err){return output_manager_default.error(err.message),1}if(!await ensureTeam(client))return 1;let keyDefault;if(!formatResult.jsonOutput)try{keyDefault=(await listScopeBudgetDefaults(client)).find(d=>d.scopeType==="api-key"&&d.active!==!1)}catch{}return renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching API keys",fetch:()=>listApiKeysPage(client,{limit,next}),toJSON:page=>({apiKeys:page.items,pagination:{next:page.next}}),isEmpty:page=>page.items.length===0,emptyMessage:next?"No more API keys.":`No API keys found. Create one with ${getCommandName("ai-gateway api-keys create")}.`,header:()=>"API keys",renderTable:page=>printApiKeysTable(page.items,keyDefault),next:page=>page.next})}function printApiKeysTable(apiKeys2,keyDefault){return`${table([["id","name","key","budget","spend","refresh","created"].map(header=>import_chalk7.default.gray(header)),...apiKeys2.map(apiKey=>[apiKey.id,apiKey.name||import_chalk7.default.gray("\u2013"),apiKey.partialKey?`\u2026${apiKey.partialKey}`:import_chalk7.default.gray("\u2013"),apiKey.quota?`$${apiKey.quota.limitAmount}`:keyDefault?`$${keyDefault.limitAmount} ${import_chalk7.default.gray("(default)")}`:import_chalk7.default.gray("\u2013"),apiKey.quota?`$${apiKey.quota.currentSpend}`:import_chalk7.default.gray("\u2013"),apiKey.quota?.refreshPeriod??keyDefault?.refreshPeriod??import_chalk7.default.gray("\u2013"),apiKey.createdAt?new Date(apiKey.createdAt).toLocaleDateString():import_chalk7.default.gray("\u2013")])],{align:["l","l","l","l","l","l","l"],hsep:4}).replace(/^/gm," ")}
61
61
 
@@ -162,7 +162,7 @@ ${sections.join(`
162
162
  `),migrated.errors.length>0?{exitCode:1,outcome:"failed"}:{exitCode:0,outcome:"configured"}}function printSessionMigrationReceipt(migration,gutter=!1){gutter&&output_manager_default.print(`
163
163
  `);for(let result of migration.results)printAlignedLabel("Sessions",`Copied ${result.copied} ${result.copied===1?"session":"sessions"} for ${result.agent}; originals unchanged`,gutter?{gutter:"\u2713"}:void 0),gutter=!1;for(let error of migration.errors)printWarning(`Could not migrate ${error.agent} sessions: ${error.message}. Original sessions were left unchanged.`)}function emitAgentPrompt(client,prompt,writeToStdout,subject){let copied=copyToClipboard(prompt);writeToStdout?(printStatus(`Generated the ${subject} prompt${copied?" (also copied to clipboard)":""}.`),client.stdout.write(`${prompt}
164
164
  `)):copied?printStatus(`Prompt copied. Paste it into your coding agent for the ${subject}.`):(printStatus("Could not access the clipboard. Prompt printed below:"),client.stdout.write(`${prompt}
165
- `))}function buildConsentCommand(argv,consentFlags){let args=stripSensitiveAuthArgs(argv.slice(2)),redacted=[];for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--key"){redacted.push(arg,"<key>"),i+1<args.length&&!args[i+1].startsWith("-")&&i++;continue}if(arg.startsWith("--key=")){redacted.push("--key=<key>");continue}redacted.push(arg)}return`${packageName} ${redacted.join(" ")} ${consentFlags}`.trim()}function failConsent(client,machine,warnings,skipped){let consentFlags=skipped.map(s=>`--agent ${s.target}`).join(" "),message=`All selected agents need explicit consent to configure. Pass ${consentFlags} (or --all) to consent, or run interactively without --yes.`;return machine?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.REQUIRES_CONSENT,message,warnings,skipped,next:[{command:buildConsentCommand(client.argv,consentFlags)}]},null,2)}
165
+ `))}function buildConsentCommand(argv,consentFlags){let args=stripSensitiveAuthArgs(argv.slice(2)),redacted=[];for(let i=0;i<args.length;i++){let arg2=args[i];if(arg2==="--key"){redacted.push(arg2,"<key>"),i+1<args.length&&!args[i+1].startsWith("-")&&i++;continue}if(arg2.startsWith("--key=")){redacted.push("--key=<key>");continue}redacted.push(arg2)}return`${packageName} ${redacted.join(" ")} ${consentFlags}`.trim()}function failConsent(client,machine,warnings,skipped){let consentFlags=skipped.map(s=>`--agent ${s.target}`).join(" "),message=`All selected agents need explicit consent to configure. Pass ${consentFlags} (or --all) to consent, or run interactively without --yes.`;return machine?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.REQUIRES_CONSENT,message,warnings,skipped,next:[{command:buildConsentCommand(client.argv,consentFlags)}]},null,2)}
166
166
  `):output_manager_default.error(message),{exitCode:1,outcome:"failed"}}function isValidBaseUrl(value){try{let{protocol}=new URL(value);return protocol==="http:"||protocol==="https:"}catch{return!1}}function failValidation(client,machine,reason,message){return machine&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message}),output_manager_default.error(message),{exitCode:1,outcome:"failed"}}var AiGatewayCodingAgentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandSetup(actual){this.trackCliSubcommand({subcommand:"setup",value:actual})}};var COMMAND_CONFIG8={setup:getCommandAliases(setupSubcommand)};async function codingAgents(client){let telemetry2=new AiGatewayCodingAgentsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(codingAgentsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("ai-gateway coding-agents",subcommand),output_manager_default.print(help(codingAgentsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:codingAgentsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"setup":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway coding-agents",subcommandOriginal),printHelp(setupSubcommand),0):(telemetry2.trackCliSubcommandSetup(subcommandOriginal),codingAgentsSetup(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG8)),output_manager_default.print(help(codingAgentsSubcommand,{columns:client.stderr.columns})),2}}var import_chalk29=__toESM(require_source(),1);var AiGatewayModelsListTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagVirtual(virtual){virtual&&this.trackCliFlag("virtual")}trackCliFlagNoVirtual(noVirtual){noVirtual&&this.trackCliFlag("no-virtual")}};async function list8(client,argv){let telemetry2=new AiGatewayModelsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(modelsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs;telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagVirtual(opts["--virtual"]),telemetry2.trackCliFlagNoVirtual(opts["--no-virtual"]);let onlyVirtual=!!opts["--virtual"],hideVirtual=!!opts["--no-virtual"];if(onlyVirtual&&hideVirtual)return output_manager_default.error("Pass only one of --virtual and --no-virtual."),2;let formatResult=validateJsonOutput(opts);return formatResult.valid?renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching models",fetch:()=>fetchModels(client,{onlyVirtual,hideVirtual}),toJSON:models3=>({models:models3}),isEmpty:models3=>models3.length===0,emptyMessage:onlyVirtual?"No virtual models found.":"No models found.",header:()=>"Models",renderTable:printModelsTable}):(output_manager_default.error(formatResult.error),2)}async function fetchModels(client,filter){let fetchVirtual=client.config.currentTeam&&!filter.hideVirtual?filter.onlyVirtual?listVirtualModels(client):listVirtualModels(client).catch(()=>[]):Promise.resolve([]),[catalog,virtualModels2]=await Promise.all([filter.onlyVirtual?Promise.resolve([]):listModels(client),fetchVirtual]);return[...filter.hideVirtual?catalog.filter(model=>!model.id.startsWith("vmc/")):catalog.filter(model=>!virtualModels2.some(vmc=>`vmc/${vmc.virtualModelSlug}`===model.id)),...virtualModels2.map(vmc=>({id:`vmc/${vmc.virtualModelSlug}`,object:"model",owned_by:"you",name:vmc.displayName??vmc.virtualModelSlug,type:"virtual"}))]}function printModelsTable(models3){return`${table([["id","name","owner","type"].map(header=>import_chalk29.default.gray(header)),...models3.map(model=>[model.id,model.name??import_chalk29.default.gray("\u2013"),model.owned_by??import_chalk29.default.gray("\u2013"),model.type??import_chalk29.default.gray("\u2013")])],{align:["l","l","l","l"],hsep:4}).replace(/^/gm," ")}
167
167
 
168
168
  `}var import_chalk30=__toESM(require_source(),1);var AiGatewayModelsEndpointsTelemetryClient=class extends TelemetryClient{trackCliArgumentModel(model){model&&this.trackCliArgument({arg:"model",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function endpoints(client,argv){let telemetry2=new AiGatewayModelsEndpointsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(modelsEndpointsSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs,model=args[0];if(telemetry2.trackCliArgumentModel(model),telemetry2.trackCliOptionFormat(opts["--format"]),!model)return output_manager_default.error(`Specify a model. Run ${getCommandName("ai-gateway models ls")} to see available models.`),2;let formatResult=validateJsonOutput(opts);return formatResult.valid?renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:`Fetching endpoints for ${model}`,fetch:()=>listModelEndpoints(client,model),toJSON:data=>data,isEmpty:data=>(data?.endpoints??[]).length===0,emptyMessage:`No endpoints found for ${model}.`,header:data=>`Endpoints for ${data.id}`,renderTable:data=>printEndpointsTable(data.endpoints??[])}):(output_manager_default.error(formatResult.error),2)}var dash=()=>import_chalk30.default.gray("\u2013"),positive=value=>value!=null&&Number(value)>0,count=value=>value!=null&&value>0?String(value):dash();function inputPrice(p){if(positive(p?.prompt))return p?.prompt;if(positive(p?.image))return`${p?.image}/img`;let perSec=p?.video_duration_pricing?.map(v=>v.cost_per_second).filter(positive).sort((a,b)=>Number(a)-Number(b))[0];return perSec?`${perSec}/s`:positive(p?.speech_input_character_cost)?`${p?.speech_input_character_cost}/char`:positive(p?.request)?`${p?.request}/req`:dash()}function outputPrice(p){return positive(p?.completion)?p?.completion:positive(p?.image_output)?`${p?.image_output}/img`:dash()}function printEndpointsTable(list30){return`${table([["provider","context","input","output","p50 ttft","uptime"].map(header=>import_chalk30.default.gray(header)),...list30.map(e2=>[e2.provider_name,count(e2.context_length),inputPrice(e2.pricing),outputPrice(e2.pricing),e2.latency_last_1h?.p50!=null?`${Math.round(e2.latency_last_1h.p50)}ms`:dash(),e2.uptime_last_1h!=null?`${e2.uptime_last_1h.toFixed(1)}%`:dash()])],{align:["l","r","r","r","r","r"],hsep:3}).replace(/^/gm," ")}
@@ -171,7 +171,7 @@ ${sections.join(`
171
171
  `;return flags["--out"]!==void 0?writeToFile(client,flags["--out"],content,config.label):(client.stdout.write(content),0)}return renderTimeseriesTable(client,data,{metric:resolvedMetric,modality:resolvedModality,date:flags["--date"],entityLabel:config.entityLabel,label:config.label})}function renderTimeseriesTable(client,data,options){let rows=data.rows??[];if(options.date!==void 0&&!rows.some(r=>r.date===options.date)){let dates=availableDates(rows);return output_manager_default.error(`No data for ${options.date}.${dates.length?` Available dates: ${dates.slice(0,5).join(", ")}${dates.length>5?", \u2026":""}`:""}`),1}let filtered=filterTimeseries(rows,{metric:options.metric,date:options.date});if(filtered.length===0)return output_manager_default.log(`No ${options.label} data for ${options.metric}.`),0;let day=options.date??latestDate(rows);return output_manager_default.log(`${options.label} \xB7 ${import_chalk31.default.bold(options.metric)} \xB7 ${options.modality} \xB7 ${day}`),client.stdout.write(`${table([["#",options.entityLabel,"share"].map(header=>import_chalk31.default.gray(header)),...filtered.map((row,index)=>[String(index+1),row.name,`${row.share_percent.toFixed(2)}%`])],{align:["r","l","r"],hsep:3}).replace(/^/gm," ")}
172
172
  `),printLicense(),0}async function runRankedLeaderboard(client,flags,telemetry2,config){telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliOptionOut(flags["--out"]);let formatResult=resolveFormat(client,flags);if("error"in formatResult)return output_manager_default.error(formatResult.error),1;let{format:format3}=formatResult;if(format3==="csv"){let result2=await fetchWithSpinner(()=>fetchLeaderboardCsv(client,{dataset:config.dataset}),`Fetching ${config.label}`);return"exitCode"in result2?result2.exitCode:flags["--out"]!==void 0?writeToFile(client,flags["--out"],result2.data,config.label):(client.stdout.write(result2.data),0)}let result=await fetchWithSpinner(()=>fetchLeaderboard(client,{dataset:config.dataset}),`Fetching ${config.label}`);if("exitCode"in result)return result.exitCode;let data=result.data;if(format3==="json"){let content=`${JSON.stringify(data,null,2)}
173
173
  `;return flags["--out"]!==void 0?writeToFile(client,flags["--out"],content,config.label):(client.stdout.write(content),0)}return renderRankedTable(client,data,config.label)}function renderRankedTable(client,data,label){let rows=data.rows??[];if(rows.length===0)return output_manager_default.log(`No ${label} data.`),0;let lsStamp=stamp_default(),rankedBy=rows[0]?.ranked_by;return output_manager_default.log(`${label}${rankedBy?` \xB7 ${import_chalk31.default.bold(rankedBy)}`:""} ${lsStamp()}`),client.stdout.write(`${table([["#","name","description"].map(header=>import_chalk31.default.gray(header)),...rows.map(row=>[String(row.rank),row.name,row.description?row.description:dash2()])],{align:["r","l","l"],hsep:3}).replace(/^/gm," ")}
174
- `),printLicense(),0}function printLicense(){output_manager_default.log(import_chalk31.default.gray("Source: AI Gateway Leaderboard data, licensed under CC BY 4.0."))}async function runLeaderboardSubcommand(client,argv,subcommand,variant){let parsedArgs,flagsSpecification=getFlagsSpecification(subcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let flags=parsedArgs.flags;return variant.kind==="timeseries"?runTimeseriesLeaderboard(client,flags,variant.telemetry,{dataset:variant.dataset,entityLabel:variant.entityLabel,label:variant.label}):runRankedLeaderboard(client,flags,variant.telemetry,{dataset:variant.dataset,label:variant.label})}var AiGatewayLeaderboardModelsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function models2(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardModelsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardModelsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"models",entityLabel:"model",label:"Top models"})}var AiGatewayLeaderboardLabsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function labs(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardLabsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardLabsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"labs",entityLabel:"lab",label:"Top labs"})}var AiGatewayLeaderboardAppsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function apps(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardAppsSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardAppsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"apps",label:"Top apps"})}var AiGatewayLeaderboardProvidersTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function providers(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardProvidersSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardProvidersTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"providers",label:"Top providers"})}var AiGatewayLeaderboardTelemetryClient=class extends TelemetryClient{trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLabs(actual){this.trackCliSubcommand({subcommand:"labs",value:actual})}trackCliSubcommandApps(actual){this.trackCliSubcommand({subcommand:"apps",value:actual})}trackCliSubcommandProviders(actual){this.trackCliSubcommand({subcommand:"providers",value:actual})}};var COMMAND_CONFIG10={models:getCommandAliases(leaderboardModelsSubcommand),labs:getCommandAliases(leaderboardLabsSubcommand),apps:getCommandAliases(leaderboardAppsSubcommand),providers:getCommandAliases(leaderboardProvidersSubcommand)};async function leaderboard(client){let telemetry2=new AiGatewayLeaderboardTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(leaderboardSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG10),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:leaderboardSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"models":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardModelsSubcommand),0):(telemetry2.trackCliSubcommandModels(subcommandOriginal),models2(client,args));case"labs":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardLabsSubcommand),0):(telemetry2.trackCliSubcommandLabs(subcommandOriginal),labs(client,args));case"apps":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardAppsSubcommand),0):(telemetry2.trackCliSubcommandApps(subcommandOriginal),apps(client,args));case"providers":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardProvidersSubcommand),0):(telemetry2.trackCliSubcommandProviders(subcommandOriginal),providers(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG10)),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),2}}var AiGatewayTelemetryClient=class extends TelemetryClient{trackCliSubcommandApiKeys(actual){this.trackCliSubcommand({subcommand:"api-keys",value:actual})}trackCliSubcommandBudgets(actual){this.trackCliSubcommand({subcommand:"budgets",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandVirtualModels(actual){this.trackCliSubcommand({subcommand:"virtual-models",value:actual})}trackCliSubcommandCodingAgents(actual){this.trackCliSubcommand({subcommand:"coding-agents",value:actual})}trackCliSubcommandSetup(actual){this.trackCliSubcommand({subcommand:"setup",value:actual})}trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLeaderboard(actual){this.trackCliSubcommand({subcommand:"leaderboard",value:actual})}};var COMMAND_CONFIG11={"api-keys":getCommandAliases(apiKeysSubcommand),budgets:getCommandAliases(budgetsSubcommand),rules:getCommandAliases(rulesSubcommand),"virtual-models":getCommandAliases(virtualModelsSubcommand),"coding-agents":getCommandAliases(codingAgentsSubcommand),setup:getCommandAliases(setupSubcommand),models:getCommandAliases(modelsSubcommand),leaderboard:getCommandAliases(leaderboardSubcommand)};async function main2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(aiGatewayCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new AiGatewayTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG11),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("ai-gateway"),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"api-keys":return telemetry2.trackCliSubcommandApiKeys(subcommandOriginal),apiKeys(client);case"budgets":return telemetry2.trackCliSubcommandBudgets(subcommandOriginal),budgets(client);case"rules":return telemetry2.trackCliSubcommandRules(subcommandOriginal),rules(client);case"virtual-models":return telemetry2.trackCliSubcommandVirtualModels(subcommandOriginal),virtualModels(client);case"coding-agents":return telemetry2.trackCliSubcommandCodingAgents(subcommandOriginal),codingAgents(client);case"setup":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(setupSubcommand,{parent:aiGatewayCommand,columns:client.stderr.columns})),0):(telemetry2.trackCliSubcommandSetup(subcommandOriginal),codingAgentsSetup(client,args));case"models":return telemetry2.trackCliSubcommandModels(subcommandOriginal),models(client);case"leaderboard":return telemetry2.trackCliSubcommandLeaderboard(subcommandOriginal),leaderboard(client);default:return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0):(output_manager_default.error("Please specify a subcommand. Run `vercel ai-gateway --help` for usage information."),2)}}var AlertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(v){v&&this.trackCliSubcommand({subcommand:"ls",value:v})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliOptionType(v){v&&v.length>0&&this.trackCliOption({option:"type",value:v.join(",")})}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagAi(v){v&&this.trackCliFlag("ai")}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var COMMAND_CONFIG12={inspect:getCommandAliases(inspectSubcommand3),ls:getCommandAliases(listSubcommand3),rules:["rules"]};function getFlagSpecValue(flagsSpecification,flag){let value=flagsSpecification[flag];return typeof value=="string"?flagsSpecification[value]:value}function flagConsumesValue(rawArg,flagsSpecification){if(!rawArg.startsWith("-")||rawArg==="-"||rawArg.includes("="))return!1;let value=getFlagSpecValue(flagsSpecification,rawArg);return value===String||value===Number||Array.isArray(value)}function findCommandIndex(rawArgs,commandName,flagsSpecification){if(!commandName)return-1;for(let index=0;index<rawArgs.length;index++){let rawArg=rawArgs[index];if(rawArg==="--")return rawArgs.indexOf(commandName,index+1);if(rawArg.startsWith("-")){flagConsumesValue(rawArg,flagsSpecification)&&index++;continue}if(rawArg===commandName)return index}return-1}function normalizeHelpAlias(rawArgs){return rawArgs.map(arg=>arg==="-help"?"--help":arg)}function getRulesTelemetryAction(args){if(args[0]!=="notifications")return args[0]??"ls";let action=args[1];return!action||action.startsWith("-")?"notifications:ls":action.startsWith("ar_")?"notifications:inspect":action==="ls"||action==="list"?args[2]?.startsWith("ar_")?"notifications:inspect":"notifications:ls":`notifications:${action}`}function getAlertsSubcommand(rawArgs,parsedArgs,flagsSpecification){let commandIndex=findCommandIndex(rawArgs,parsedArgs[0],flagsSpecification),rawArgsAfterCommand=commandIndex===-1?[]:rawArgs.slice(commandIndex+1),rawSubcommand=rawArgsAfterCommand[0];return!rawSubcommand||rawSubcommand.startsWith("-")?{...getSubcommand7([],COMMAND_CONFIG12),rawSubcommandArgs:rawArgsAfterCommand}:{...getSubcommand7(parsedArgs.slice(1),COMMAND_CONFIG12),rawSubcommandArgs:rawArgsAfterCommand.slice(1)}}async function alerts(client){let telemetry2=new AlertsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(alertsCommand.options),rawArgs=normalizeHelpAlias(client.argv.slice(2));try{parsedArgs=parseArguments(rawArgs,flagsSpecification,{permissive:!0})}catch(err){let msg=err instanceof Error?err.message:String(err),projectFlagMissingArg=msg.includes("--project")&&msg.includes("requires argument");return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:projectFlagMissingArg?"`--project` requires a project name or id (for example `--project my-app`).":msg,next:projectFlagMissingArg?[{command:buildCommandWithGlobalFlags(client.argv,"alerts --project <name-or-id>"),when:"Re-run with a project name or id (replace placeholder)"},{command:buildCommandWithGlobalFlags(client.argv,"alerts --help"),when:"See all `alerts` flags and examples"}]:[{command:buildCommandWithGlobalFlags(client.argv,"alerts --help"),when:"See valid flags and examples"}]},2),printError(err),2}let{subcommand,args,subcommandOriginal,rawSubcommandArgs}=getAlertsSubcommand(rawArgs,parsedArgs.args,{...arg_common_default(),...flagsSpecification}),needHelp=parsedArgs.flags["--help"];function printHelp(command2,parent=alertsCommand){output_manager_default.print(help(command2,{parent,columns:client.stderr.columns}))}if(needHelp){if(subcommand==="inspect")return telemetry2.trackCliFlagHelp("alerts","inspect"),printHelp(inspectSubcommand3),0;if(subcommand==="rules"){telemetry2.trackCliFlagHelp("alerts","rules");let nested=args[0];if(nested==="ls"||nested==="list")return printHelp(rulesLsSubcommand,rulesAggregateCommand),0;if(nested==="schema")return printHelp(rulesSchemaSubcommand,rulesAggregateCommand),0;if(nested==="add"||nested==="create")return printHelp(rulesAddSubcommand2,rulesAggregateCommand),0;if(nested==="inspect"||nested==="get")return printHelp(rulesInspectSubcommand,rulesAggregateCommand),0;if(nested==="rm"||nested==="remove"||nested==="delete")return printHelp(rulesRmSubcommand,rulesAggregateCommand),0;if(nested==="update"||nested==="patch")return printHelp(rulesUpdateSubcommand,rulesAggregateCommand),0;if(nested==="notifications"){let notificationAction=args[1];return notificationAction==="ls"||notificationAction==="list"||notificationAction?.startsWith("ar_")?(printHelp(rulesNotificationsLsSubcommand,rulesNotificationsAggregateCommand),0):notificationAction==="link"?(printHelp(rulesNotificationsLinkSubcommand,rulesNotificationsAggregateCommand),0):notificationAction==="update"||notificationAction==="patch"?(printHelp(rulesNotificationsUpdateSubcommand,rulesNotificationsAggregateCommand),0):notificationAction==="unlink"?(printHelp(rulesNotificationsUnlinkSubcommand,rulesNotificationsAggregateCommand),0):(printHelp(rulesNotificationsAggregateCommand,rulesAggregateCommand),0)}return output_manager_default.print(help(rulesAggregateCommand,{parent:alertsCommand,columns:client.stderr.columns})),0}return telemetry2.trackCliFlagHelp("alerts",subcommandOriginal),output_manager_default.print(help(alertsCommand,{columns:client.stderr.columns})),0}switch(subcommand){case"inspect":{telemetry2.trackCliSubcommandInspect(subcommandOriginal);let inspectFn=(await import("./chunks/inspect-HASOG2PB.js")).default;return inspectFn(client,rawSubcommandArgs)}case"rules":{telemetry2.trackCliSubcommandRules(getRulesTelemetryAction(args));let rulesFn=(await import("./chunks/rules-G2WFYCPB.js")).default;return rulesFn(client,rawSubcommandArgs)}default:{telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-Z6DRFZ7F.js")).default;return listFn(client,telemetry2)}}}var import_chalk32=__toESM(require_source(),1),import_ms2=__toESM(require_ms(),1);async function getAliases(client,deploymentId,next,limit=20){let aliasUrl=`/v3/now/aliases?limit=${limit}`;next&&(aliasUrl+=`&until=${next}`);let to=deploymentId?`/now/deployments/${deploymentId}/aliases`:aliasUrl;try{return await client.fetch(to)}catch(err){if(isAPIError(err)){let contextName=await getScope(client).then(scope=>scope.contextName);if(err.status===404)throw new DeploymentNotFound({id:deploymentId,context:contextName});if(err.status===403&&deploymentId)throw new DeploymentPermissionDenied(deploymentId,contextName);if(err.status===400&&err.message.includes("`id`")&&deploymentId)throw new InvalidDeploymentId(deploymentId)}throw err}}var AliasListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(listSubcommand4.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,validationResult=validateLsArgs({commandName:"alias ls",args});if(validationResult!==0)return validationResult;let contextName=await getContextName(client),telemetryClient=new AliasListTelemetryClient({opts:{store:client.telemetryEventStore}}),paginationOptions,formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;try{paginationOptions=getPaginationOpts(opts);let[next,limit]=paginationOptions;telemetryClient.trackCliOptionNext(next),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionFormat(opts["--format"])}catch(err){return output_manager_default.prettyError(err),1}let lsStamp=stamp_default();output_manager_default.spinner(`Fetching aliases under ${import_chalk32.default.bold(contextName)}`);let{aliases:aliases2,pagination}=await getAliases(client,void 0,...paginationOptions);if(asJson){output_manager_default.stopSpinner();let jsonOutput={aliases:aliases2.map(a=>({alias:a.alias,deploymentId:a.deploymentId,url:a.deployment?.url??null,createdAt:a.createdAt})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
174
+ `),printLicense(),0}function printLicense(){output_manager_default.log(import_chalk31.default.gray("Source: AI Gateway Leaderboard data, licensed under CC BY 4.0."))}async function runLeaderboardSubcommand(client,argv,subcommand,variant){let parsedArgs,flagsSpecification=getFlagsSpecification(subcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let flags=parsedArgs.flags;return variant.kind==="timeseries"?runTimeseriesLeaderboard(client,flags,variant.telemetry,{dataset:variant.dataset,entityLabel:variant.entityLabel,label:variant.label}):runRankedLeaderboard(client,flags,variant.telemetry,{dataset:variant.dataset,label:variant.label})}var AiGatewayLeaderboardModelsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function models2(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardModelsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardModelsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"models",entityLabel:"model",label:"Top models"})}var AiGatewayLeaderboardLabsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function labs(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardLabsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardLabsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"labs",entityLabel:"lab",label:"Top labs"})}var AiGatewayLeaderboardAppsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function apps(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardAppsSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardAppsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"apps",label:"Top apps"})}var AiGatewayLeaderboardProvidersTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function providers(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardProvidersSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardProvidersTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"providers",label:"Top providers"})}var AiGatewayLeaderboardTelemetryClient=class extends TelemetryClient{trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLabs(actual){this.trackCliSubcommand({subcommand:"labs",value:actual})}trackCliSubcommandApps(actual){this.trackCliSubcommand({subcommand:"apps",value:actual})}trackCliSubcommandProviders(actual){this.trackCliSubcommand({subcommand:"providers",value:actual})}};var COMMAND_CONFIG10={models:getCommandAliases(leaderboardModelsSubcommand),labs:getCommandAliases(leaderboardLabsSubcommand),apps:getCommandAliases(leaderboardAppsSubcommand),providers:getCommandAliases(leaderboardProvidersSubcommand)};async function leaderboard(client){let telemetry2=new AiGatewayLeaderboardTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(leaderboardSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG10),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:leaderboardSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"models":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardModelsSubcommand),0):(telemetry2.trackCliSubcommandModels(subcommandOriginal),models2(client,args));case"labs":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardLabsSubcommand),0):(telemetry2.trackCliSubcommandLabs(subcommandOriginal),labs(client,args));case"apps":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardAppsSubcommand),0):(telemetry2.trackCliSubcommandApps(subcommandOriginal),apps(client,args));case"providers":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardProvidersSubcommand),0):(telemetry2.trackCliSubcommandProviders(subcommandOriginal),providers(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG10)),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),2}}var AiGatewayTelemetryClient=class extends TelemetryClient{trackCliSubcommandApiKeys(actual){this.trackCliSubcommand({subcommand:"api-keys",value:actual})}trackCliSubcommandBudgets(actual){this.trackCliSubcommand({subcommand:"budgets",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandVirtualModels(actual){this.trackCliSubcommand({subcommand:"virtual-models",value:actual})}trackCliSubcommandCodingAgents(actual){this.trackCliSubcommand({subcommand:"coding-agents",value:actual})}trackCliSubcommandSetup(actual){this.trackCliSubcommand({subcommand:"setup",value:actual})}trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLeaderboard(actual){this.trackCliSubcommand({subcommand:"leaderboard",value:actual})}};var COMMAND_CONFIG11={"api-keys":getCommandAliases(apiKeysSubcommand),budgets:getCommandAliases(budgetsSubcommand),rules:getCommandAliases(rulesSubcommand),"virtual-models":getCommandAliases(virtualModelsSubcommand),"coding-agents":getCommandAliases(codingAgentsSubcommand),setup:getCommandAliases(setupSubcommand),models:getCommandAliases(modelsSubcommand),leaderboard:getCommandAliases(leaderboardSubcommand)};async function main2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(aiGatewayCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new AiGatewayTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG11),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("ai-gateway"),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"api-keys":return telemetry2.trackCliSubcommandApiKeys(subcommandOriginal),apiKeys(client);case"budgets":return telemetry2.trackCliSubcommandBudgets(subcommandOriginal),budgets(client);case"rules":return telemetry2.trackCliSubcommandRules(subcommandOriginal),rules(client);case"virtual-models":return telemetry2.trackCliSubcommandVirtualModels(subcommandOriginal),virtualModels(client);case"coding-agents":return telemetry2.trackCliSubcommandCodingAgents(subcommandOriginal),codingAgents(client);case"setup":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(setupSubcommand,{parent:aiGatewayCommand,columns:client.stderr.columns})),0):(telemetry2.trackCliSubcommandSetup(subcommandOriginal),codingAgentsSetup(client,args));case"models":return telemetry2.trackCliSubcommandModels(subcommandOriginal),models(client);case"leaderboard":return telemetry2.trackCliSubcommandLeaderboard(subcommandOriginal),leaderboard(client);default:return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0):(output_manager_default.error("Please specify a subcommand. Run `vercel ai-gateway --help` for usage information."),2)}}var AlertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(v){v&&this.trackCliSubcommand({subcommand:"ls",value:v})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliOptionType(v){v&&v.length>0&&this.trackCliOption({option:"type",value:v.join(",")})}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagAi(v){v&&this.trackCliFlag("ai")}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var COMMAND_CONFIG12={inspect:getCommandAliases(inspectSubcommand3),ls:getCommandAliases(listSubcommand3),rules:["rules"]};function getFlagSpecValue(flagsSpecification,flag){let value=flagsSpecification[flag];return typeof value=="string"?flagsSpecification[value]:value}function flagConsumesValue(rawArg,flagsSpecification){if(!rawArg.startsWith("-")||rawArg==="-"||rawArg.includes("="))return!1;let value=getFlagSpecValue(flagsSpecification,rawArg);return value===String||value===Number||Array.isArray(value)}function findCommandIndex(rawArgs,commandName,flagsSpecification){if(!commandName)return-1;for(let index=0;index<rawArgs.length;index++){let rawArg=rawArgs[index];if(rawArg==="--")return rawArgs.indexOf(commandName,index+1);if(rawArg.startsWith("-")){flagConsumesValue(rawArg,flagsSpecification)&&index++;continue}if(rawArg===commandName)return index}return-1}function normalizeHelpAlias(rawArgs){return rawArgs.map(arg2=>arg2==="-help"?"--help":arg2)}function getRulesTelemetryAction(args){if(args[0]!=="notifications")return args[0]??"ls";let action=args[1];return!action||action.startsWith("-")?"notifications:ls":action.startsWith("ar_")?"notifications:inspect":action==="ls"||action==="list"?args[2]?.startsWith("ar_")?"notifications:inspect":"notifications:ls":`notifications:${action}`}function getAlertsSubcommand(rawArgs,parsedArgs,flagsSpecification){let commandIndex=findCommandIndex(rawArgs,parsedArgs[0],flagsSpecification),rawArgsAfterCommand=commandIndex===-1?[]:rawArgs.slice(commandIndex+1),rawSubcommand=rawArgsAfterCommand[0];return!rawSubcommand||rawSubcommand.startsWith("-")?{...getSubcommand7([],COMMAND_CONFIG12),rawSubcommandArgs:rawArgsAfterCommand}:{...getSubcommand7(parsedArgs.slice(1),COMMAND_CONFIG12),rawSubcommandArgs:rawArgsAfterCommand.slice(1)}}async function alerts(client){let telemetry2=new AlertsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(alertsCommand.options),rawArgs=normalizeHelpAlias(client.argv.slice(2));try{parsedArgs=parseArguments(rawArgs,flagsSpecification,{permissive:!0})}catch(err){let msg=err instanceof Error?err.message:String(err),projectFlagMissingArg=msg.includes("--project")&&msg.includes("requires argument");return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:projectFlagMissingArg?"`--project` requires a project name or id (for example `--project my-app`).":msg,next:projectFlagMissingArg?[{command:buildCommandWithGlobalFlags(client.argv,"alerts --project <name-or-id>"),when:"Re-run with a project name or id (replace placeholder)"},{command:buildCommandWithGlobalFlags(client.argv,"alerts --help"),when:"See all `alerts` flags and examples"}]:[{command:buildCommandWithGlobalFlags(client.argv,"alerts --help"),when:"See valid flags and examples"}]},2),printError(err),2}let{subcommand,args,subcommandOriginal,rawSubcommandArgs}=getAlertsSubcommand(rawArgs,parsedArgs.args,{...arg_common_default(),...flagsSpecification}),needHelp=parsedArgs.flags["--help"];function printHelp(command2,parent=alertsCommand){output_manager_default.print(help(command2,{parent,columns:client.stderr.columns}))}if(needHelp){if(subcommand==="inspect")return telemetry2.trackCliFlagHelp("alerts","inspect"),printHelp(inspectSubcommand3),0;if(subcommand==="rules"){telemetry2.trackCliFlagHelp("alerts","rules");let nested=args[0];if(nested==="ls"||nested==="list")return printHelp(rulesLsSubcommand,rulesAggregateCommand),0;if(nested==="schema")return printHelp(rulesSchemaSubcommand,rulesAggregateCommand),0;if(nested==="add"||nested==="create")return printHelp(rulesAddSubcommand2,rulesAggregateCommand),0;if(nested==="inspect"||nested==="get")return printHelp(rulesInspectSubcommand,rulesAggregateCommand),0;if(nested==="rm"||nested==="remove"||nested==="delete")return printHelp(rulesRmSubcommand,rulesAggregateCommand),0;if(nested==="update"||nested==="patch")return printHelp(rulesUpdateSubcommand,rulesAggregateCommand),0;if(nested==="notifications"){let notificationAction=args[1];return notificationAction==="ls"||notificationAction==="list"||notificationAction?.startsWith("ar_")?(printHelp(rulesNotificationsLsSubcommand,rulesNotificationsAggregateCommand),0):notificationAction==="link"?(printHelp(rulesNotificationsLinkSubcommand,rulesNotificationsAggregateCommand),0):notificationAction==="update"||notificationAction==="patch"?(printHelp(rulesNotificationsUpdateSubcommand,rulesNotificationsAggregateCommand),0):notificationAction==="unlink"?(printHelp(rulesNotificationsUnlinkSubcommand,rulesNotificationsAggregateCommand),0):(printHelp(rulesNotificationsAggregateCommand,rulesAggregateCommand),0)}return output_manager_default.print(help(rulesAggregateCommand,{parent:alertsCommand,columns:client.stderr.columns})),0}return telemetry2.trackCliFlagHelp("alerts",subcommandOriginal),output_manager_default.print(help(alertsCommand,{columns:client.stderr.columns})),0}switch(subcommand){case"inspect":{telemetry2.trackCliSubcommandInspect(subcommandOriginal);let inspectFn=(await import("./chunks/inspect-ORVORGUM.js")).default;return inspectFn(client,rawSubcommandArgs)}case"rules":{telemetry2.trackCliSubcommandRules(getRulesTelemetryAction(args));let rulesFn=(await import("./chunks/rules-6KWBVUF2.js")).default;return rulesFn(client,rawSubcommandArgs)}default:{telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-WOUJM4WR.js")).default;return listFn(client,telemetry2)}}}var import_chalk32=__toESM(require_source(),1),import_ms2=__toESM(require_ms(),1);async function getAliases(client,deploymentId,next,limit=20){let aliasUrl=`/v3/now/aliases?limit=${limit}`;next&&(aliasUrl+=`&until=${next}`);let to=deploymentId?`/now/deployments/${deploymentId}/aliases`:aliasUrl;try{return await client.fetch(to)}catch(err){if(isAPIError(err)){let contextName=await getScope(client).then(scope=>scope.contextName);if(err.status===404)throw new DeploymentNotFound({id:deploymentId,context:contextName});if(err.status===403&&deploymentId)throw new DeploymentPermissionDenied(deploymentId,contextName);if(err.status===400&&err.message.includes("`id`")&&deploymentId)throw new InvalidDeploymentId(deploymentId)}throw err}}var AliasListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(listSubcommand4.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,validationResult=validateLsArgs({commandName:"alias ls",args});if(validationResult!==0)return validationResult;let contextName=await getContextName(client),telemetryClient=new AliasListTelemetryClient({opts:{store:client.telemetryEventStore}}),paginationOptions,formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;try{paginationOptions=getPaginationOpts(opts);let[next,limit]=paginationOptions;telemetryClient.trackCliOptionNext(next),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionFormat(opts["--format"])}catch(err){return output_manager_default.prettyError(err),1}let lsStamp=stamp_default();output_manager_default.spinner(`Fetching aliases under ${import_chalk32.default.bold(contextName)}`);let{aliases:aliases2,pagination}=await getAliases(client,void 0,...paginationOptions);if(asJson){output_manager_default.stopSpinner();let jsonOutput={aliases:aliases2.map(a=>({alias:a.alias,deploymentId:a.deploymentId,url:a.deployment?.url??null,createdAt:a.createdAt})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
175
175
  `)}else if(output_manager_default.log(`aliases found under ${import_chalk32.default.bold(contextName)} ${lsStamp()}`),client.stdout.write(printAliasTable(aliases2)),pagination.next){let flags=getCommandFlags(opts,["_","--next","--format"]);output_manager_default.log(`To display the next page run ${getCommandName(`alias ls${flags} --next ${pagination.next}`)}`)}return 0}function printAliasTable(aliases2){return`${table([["source","url","age"].map(header=>import_chalk32.default.gray(header)),...aliases2.map(a=>[a.deployment?.url?a.deployment.url:import_chalk32.default.gray("\u2013"),a.alias,(0,import_ms2.default)(Date.now()-a.createdAt)])],{align:["l","l","r"],hsep:4}).replace(/^/gm," ")}
176
176
 
177
177
  `}var import_chalk33=__toESM(require_source(),1),import_ms3=__toESM(require_ms(),1);async function removeAliasById(client,id2){return client.fetch(`/now/aliases/${id2}`,{method:"DELETE"})}async function findAliasByAliasOrId(client,aliasOrId){return client.fetch(`/now/aliases/${encodeURIComponent(getSafeAlias(aliasOrId))}`)}function getSafeAlias(alias2){return alias2.replace(/^https:\/\//i,"").replace(/^\.+/,"").replace(/\.+$/,"").toLowerCase()}var AliasRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentAlias(alias2){alias2&&this.trackCliArgument({arg:"alias",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(removeSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,contextName=await getContextName(client),telemetryClient=new AliasRemoveTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliFlagYes(opts["--yes"]);let[aliasOrId]=args;if(telemetryClient.trackCliArgumentAlias(aliasOrId),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk33.default.cyan(`${getCommandName("alias rm <alias>")}`)}`),2;if(!aliasOrId)return output_manager_default.error(`${getCommandName("alias rm <alias>")} expects one argument`),2;if(!isValidName(aliasOrId))return output_manager_default.error(`The provided argument "${aliasOrId}" is not a valid alias`),2;let alias2=await findAliasByAliasOrId(client,aliasOrId);if(!alias2)return output_manager_default.error(`Alias not found by "${aliasOrId}" under ${import_chalk33.default.bold(contextName)}`),output_manager_default.log(`Run ${getCommandName("alias ls")} to see your aliases.`),1;let removeStamp=stamp_default();return!opts["--yes"]&&!await confirmAliasRemove(client,alias2)?(output_manager_default.log("Canceled"),0):(await removeAliasById(client,alias2.uid),output_manager_default.success(`Alias ${import_chalk33.default.bold(alias2.alias)} removed ${removeStamp()}`),0)}async function confirmAliasRemove(client,alias2){let srcUrl=alias2.deployment?import_chalk33.default.underline(alias2.deployment.url):null,tbl=table([[...srcUrl?[srcUrl]:[],import_chalk33.default.underline(alias2.alias),import_chalk33.default.gray(`${(0,import_ms3.default)(Date.now()-alias2.createdAt)} ago`)]],{hsep:4});return output_manager_default.log("The following alias will be removed permanently"),output_manager_default.print(` ${tbl}
@@ -194,7 +194,7 @@ ${sections.join(`
194
194
  `);let result=[import_chalk38.default.bold(`The first bad deployment is: ${link_default(`https://${lastBad.url}`)}`),"",` ${import_chalk38.default.bold("Date:")} ${formatDate(lastBad.createdAt)}`],commit=getCommit(lastBad);if(commit){let shortSha=commit.sha.substring(0,7),firstLine=commit.message?.split(`
195
195
  `)[0];result.push(` ${import_chalk38.default.bold("Commit:")} [${shortSha}] ${firstLine}`)}return result.push(`${import_chalk38.default.bold("Inspect:")} ${link_default(lastBad.inspectorUrl)}`),output_manager_default.print(box(result.join(`
196
196
  `))),output_manager_default.print(`
197
- `),0}function getCommit(deployment){let sha=deployment.meta?.githubCommitSha||deployment.meta?.gitlabCommitSha||deployment.meta?.bitbucketCommitSha;if(!sha)return null;let message=deployment.meta?.githubCommitMessage||deployment.meta?.gitlabCommitMessage||deployment.meta?.bitbucketCommitMessage;return{sha,message}}import*as blob from"@vercel/blob";var import_chalk40=__toESM(require_source(),1),import_ms5=__toESM(require_ms(),1);var BlobListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:next})}trackCliOptionCursor(cursor2){cursor2&&this.trackCliOption({option:"cursor",value:cursor2})}trackCliOptionPrefix(prefix){prefix&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliOptionMode(mode){mode&&this.trackCliOption({option:"mode",value:mode})}};import{resolve as resolve4}from"node:path";var import_chalk39=__toESM(require_source(),1),listItem=(msg,n)=>(n||(n="-"),Number(n)&&(n+="."),`${(0,import_chalk39.default)(n.toString())} ${msg}`),list_item_default=listItem;function findFlagValue(argv,flag){let eqPrefix=`${flag}=`,result;for(let i=0;i<argv.length;i++){let arg=argv[i];arg===flag?result=argv[i+1]:arg.startsWith(eqPrefix)&&(result=arg.slice(eqPrefix.length))}return result}var ErrorMessage=`No Vercel Blob credentials found. To fix this issue, choose one of the following options:
197
+ `),0}function getCommit(deployment){let sha=deployment.meta?.githubCommitSha||deployment.meta?.gitlabCommitSha||deployment.meta?.bitbucketCommitSha;if(!sha)return null;let message=deployment.meta?.githubCommitMessage||deployment.meta?.gitlabCommitMessage||deployment.meta?.bitbucketCommitMessage;return{sha,message}}import*as blob from"@vercel/blob";var import_chalk40=__toESM(require_source(),1),import_ms5=__toESM(require_ms(),1);var BlobListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:next})}trackCliOptionCursor(cursor2){cursor2&&this.trackCliOption({option:"cursor",value:cursor2})}trackCliOptionPrefix(prefix){prefix&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliOptionMode(mode){mode&&this.trackCliOption({option:"mode",value:mode})}};import{resolve as resolve4}from"node:path";var import_chalk39=__toESM(require_source(),1),listItem=(msg,n)=>(n||(n="-"),Number(n)&&(n+="."),`${(0,import_chalk39.default)(n.toString())} ${msg}`),list_item_default=listItem;function findFlagValue(argv,flag){let eqPrefix=`${flag}=`,result;for(let i=0;i<argv.length;i++){let arg2=argv[i];arg2===flag?result=argv[i+1]:arg2.startsWith(eqPrefix)&&(result=arg2.slice(eqPrefix.length))}return result}var ErrorMessage=`No Vercel Blob credentials found. To fix this issue, choose one of the following options:
198
198
  ${list_item_default(`Pass the read-write token as an option: ${getCommandName("blob list --rw-token BLOB_READ_WRITE_TOKEN")}`,1)}
199
199
  ${list_item_default(`Pass OIDC credentials as options: ${getCommandName("blob list --oidc-token VERCEL_OIDC_TOKEN --store-id BLOB_STORE_ID")}`,2)}
200
200
  ${list_item_default(`Set OIDC credentials as environment variables: ${cmd(`VERCEL_OIDC_TOKEN=... BLOB_STORE_ID=... ${packageName} blob list`)}`,3)}
@@ -239,7 +239,7 @@ validUntil=${result.validUntil} (${new Date(result.validUntil).toISOString()})
239
239
  `)});output_manager_default.print(`${entries.join(`
240
240
 
241
241
  `)}
242
- `)}async function fetchEntries(query,limit){let url=new URL(query?`${CHANGELOG_API_URL}/search`:CHANGELOG_API_URL);url.searchParams.set("limit",String(limit)),query?url.searchParams.set("q",query):url.searchParams.set("include","content");try{let response=await fetch2(url,{headers:{accept:"application/json","user-agent":ua_default}});if(!response.ok){response.status===429?output_manager_default.error("Too many changelog requests. Try again shortly."):output_manager_default.error("Failed to fetch changelog entries.");return}let data=await response.json();if(!data||typeof data!="object")throw new Error("Invalid changelog response");let items=data.items;if(!Array.isArray(items)||!items.every(isChangelogItem))throw new Error("Invalid changelog response");return items}catch{output_manager_default.error("Failed to fetch changelog entries. Check your connection and try again.");return}}function printCommandHelp(client,command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:command2===changelogCommand?void 0:changelogCommand}))}async function changelog(client){let telemetry2=new ChangelogTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(changelogCommand.options),rawArgs=client.argv.slice(2).filter(arg=>arg!=="--changelog"),parsedArgs;try{parsedArgs=parseArguments(rawArgs,flagsSpecification)}catch(err){return printError(err),2}let commandOffset=parsedArgs.args[0]===changelogCommand.name?1:0,{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(commandOffset),COMMAND_CONFIG19);if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp(changelogCommand.name,subcommand==="search"?subcommandOriginal:void 0),printCommandHelp(client,subcommand==="search"?searchSubcommand:changelogCommand),0;if(!subcommand&&args.length>0)return output_manager_default.error(`Unknown changelog command: ${args[0]}`),printCommandHelp(client,changelogCommand),1;let limit=parsedArgs.flags["--limit"]??DEFAULT_LIMIT;if(!Number.isInteger(limit)||limit<1||limit>MAX_LIMIT)return output_manager_default.error(`--limit must be between 1 and ${MAX_LIMIT}.`),2;telemetry2.trackCliOptionLimit(parsedArgs.flags["--limit"]),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]);let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let jsonOutput=formatResult.jsonOutput,query;if(subcommand==="search"&&(telemetry2.trackCliSubcommandSearch(subcommandOriginal),query=args.join(" ").trim(),!query))return output_manager_default.error("Search query is required."),printCommandHelp(client,searchSubcommand),2;jsonOutput||output_manager_default.spinner(query?"Searching the changelog\u2026":"Fetching the changelog\u2026");let items=await fetchEntries(query,limit);return jsonOutput||output_manager_default.stopSpinner(),items?jsonOutput?(client.stdout.write(`${JSON.stringify({items},null,2)}
242
+ `)}async function fetchEntries(query,limit){let url=new URL(query?`${CHANGELOG_API_URL}/search`:CHANGELOG_API_URL);url.searchParams.set("limit",String(limit)),query?url.searchParams.set("q",query):url.searchParams.set("include","content");try{let response=await fetch2(url,{headers:{accept:"application/json","user-agent":ua_default}});if(!response.ok){response.status===429?output_manager_default.error("Too many changelog requests. Try again shortly."):output_manager_default.error("Failed to fetch changelog entries.");return}let data=await response.json();if(!data||typeof data!="object")throw new Error("Invalid changelog response");let items=data.items;if(!Array.isArray(items)||!items.every(isChangelogItem))throw new Error("Invalid changelog response");return items}catch{output_manager_default.error("Failed to fetch changelog entries. Check your connection and try again.");return}}function printCommandHelp(client,command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:command2===changelogCommand?void 0:changelogCommand}))}async function changelog(client){let telemetry2=new ChangelogTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(changelogCommand.options),rawArgs=client.argv.slice(2).filter(arg2=>arg2!=="--changelog"),parsedArgs;try{parsedArgs=parseArguments(rawArgs,flagsSpecification)}catch(err){return printError(err),2}let commandOffset=parsedArgs.args[0]===changelogCommand.name?1:0,{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(commandOffset),COMMAND_CONFIG19);if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp(changelogCommand.name,subcommand==="search"?subcommandOriginal:void 0),printCommandHelp(client,subcommand==="search"?searchSubcommand:changelogCommand),0;if(!subcommand&&args.length>0)return output_manager_default.error(`Unknown changelog command: ${args[0]}`),printCommandHelp(client,changelogCommand),1;let limit=parsedArgs.flags["--limit"]??DEFAULT_LIMIT;if(!Number.isInteger(limit)||limit<1||limit>MAX_LIMIT)return output_manager_default.error(`--limit must be between 1 and ${MAX_LIMIT}.`),2;telemetry2.trackCliOptionLimit(parsedArgs.flags["--limit"]),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]);let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let jsonOutput=formatResult.jsonOutput,query;if(subcommand==="search"&&(telemetry2.trackCliSubcommandSearch(subcommandOriginal),query=args.join(" ").trim(),!query))return output_manager_default.error("Search query is required."),printCommandHelp(client,searchSubcommand),2;jsonOutput||output_manager_default.spinner(query?"Searching the changelog\u2026":"Fetching the changelog\u2026");let items=await fetchEntries(query,limit);return jsonOutput||output_manager_default.stopSpinner(),items?jsonOutput?(client.stdout.write(`${JSON.stringify({items},null,2)}
243
243
  `),0):items.length===0?(output_manager_default.log(query?"No changelog entries match the query.":"No changelog entries found."),0):(printEntries(items),0):1}var CiTelemetryClient=class extends TelemetryClient{trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandLogs(actual){this.trackCliSubcommand({subcommand:"logs",value:actual})}trackCliSubcommandGrep(actual){this.trackCliSubcommand({subcommand:"grep",value:actual})}trackCliSubcommandRerun(actual){this.trackCliSubcommand({subcommand:"rerun",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var import_chalk54=__toESM(require_source(),1),import_ms9=__toESM(require_ms(),1),import_pluralize4=__toESM(require_pluralize(),1);var import_split2=__toESM(require_split2(),1);import{Transform}from"node:stream";import{pipeline as pipeline3}from"node:stream/promises";async function*readNdjson(client,url,options={}){let response=await client.fetch(url,{json:!1,accountId:options.accountId,signal:options.signal}),source=toNodeReadable(response.body),maxFrameBytes=8*1024*1024,frameBytes=0,bounded=new Transform({transform(chunk,_encoding,callback){let start=0;for(;start<chunk.length;){let newline=chunk.indexOf(10,start),end=newline===-1?chunk.length:newline;if(frameBytes+=end-start,frameBytes>maxFrameBytes){callback(new Error("Vercel CI response frame exceeds 8 MiB."));return}if(newline===-1)break;frameBytes=0,start=newline+1}callback(null,chunk)}}),lines=(0,import_split2.default)(),completion=pipeline3(source,bounded,lines,{signal:options.signal}).then(()=>{},error=>error);try{let snapshot=response.headers.get("content-type")?.split(";")[0]==="application/json",json="",bytes5=0;for await(let line2 of lines)if(snapshot){if(bytes5+=Buffer.byteLength(line2)+1,bytes5>8*1024*1024)throw new Error("Vercel CI JSON snapshot exceeds 8 MiB.");json+=`${line2}
244
244
  `}else line2.trim()&&(yield JSON.parse(line2));let error=await completion;if(error)throw error;snapshot&&(yield JSON.parse(json))}finally{source.destroy(),bounded.destroy(),lines.destroy(),await completion}}async function resolveCiTeam(_client){return{ok:!0}}function listCiInvocations(client,params,accountId){let query=new URLSearchParams({provider:params.provider,repository:params.repository});params.branch&&query.set("branchName",params.branch),params.commitSha&&query.set("snapshot",params.commitSha);for(let status6 of params.statuses??[])query.append("status",status6);for(let conclusion2 of params.conclusions??[])query.append("conclusion",conclusion2);return params.limit&&query.set("limit",String(params.limit)),params.cursor&&query.set("cursor",params.cursor),client.fetch(`/v2/vercel-ci/invocations?${query}`,{accountId})}function getCiInvocationTree(client,invocationId,options={}){let query=new URLSearchParams;options.attempt&&query.set("attempt",String(options.attempt));let suffix=query.size?`?${query}`:"";return client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/tree${suffix}`,{accountId:options.accountId})}function streamCiInvocationTree(client,invocationId,options){let query=new URLSearchParams({attempt:String(options.attempt),follow:"1"});return readNdjson(client,`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/tree?${query}`,{accountId:options.accountId,signal:options.signal})}async function getLatestCiAttempt(client,invocationId,accountId){let{attempts}=await client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/attempts`,{accountId});return Math.max(1,...attempts.map(attempt=>attempt.attempt))}function searchCiLogs(client,runs,filters,accountId){let query=new URLSearchParams;for(let run3 of runs)query.append("invocation",`${run3.invocationId}:${run3.attempt}`);query.set("search",filters.search);for(let level of filters.levels??[])query.append("level",level);return client.fetch(`/v1/vercel-ci/log-search?${query}`,{accountId})}function getCiTaskLogs(client,invocationId,attempt,filters,accountId){let query=new URLSearchParams;for(let task of filters.tasks??[])query.append("task",task);for(let conclusion2 of filters.conclusions??[])query.append("conclusion",conclusion2);for(let level of filters.levels??[])query.append("level",level);filters.search&&query.set("search",filters.search),filters.limit&&query.set("limit",String(filters.limit));let suffix=query.size?`?${query}`:"";return client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/attempts/${attempt}/task-logs${suffix}`,{accountId})}function streamCiTaskRunLogs(client,locator,options){let query=new URLSearchParams({follow:"1"});options.since!==void 0&&query.set("since",String(options.since));for(let level of options.levels??[])query.append("level",level);return readNdjson(client,`${ciTaskRunLogsPath(locator)}?${query}`,{accountId:options.accountId,signal:options.signal})}async function getCiTaskRunLogs(client,locator,options={}){let query=new URLSearchParams;for(let level of options.levels??[])query.append("level",level);let suffix=query.size?`?${query}`:"",snapshot;for await(let value of readNdjson(client,`${ciTaskRunLogsPath(locator)}${suffix}`,{accountId:options.accountId})){if(snapshot||typeof value!="object"||value===null||!("lines"in value)||!Array.isArray(value.lines))throw new Error("Invalid Vercel CI log snapshot.");snapshot=value}if(!snapshot)throw new Error("Missing Vercel CI log snapshot.");return snapshot}function ciTaskRunLogsPath(locator){return`/v1/vercel-ci/${["invocations",locator.invocationId,"attempts",locator.attempt,"job-definitions",locator.jobDefinitionId,"runs",locator.jobRunAttempt,"task-definitions",locator.taskDefinitionId,"runs",locator.taskRunAttempt,"logs"].map(segment=>encodeURIComponent(String(segment))).join("/")}`}async function getCiSetupLogs(client,invocationId,attempt,options={}){let base=`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/attempts/${attempt}`,{invocation}=await client.fetch(base,{accountId:options.accountId});if(invocation.setupConclusion?.result!=="failed")return{failed:!1,lines:[]};let query=new URLSearchParams;for(let level of options.levels??[])query.append("level",level);let suffix=query.size?`?${query}`:"",{lines}=await client.fetch(`${base}/logs${suffix}`,{accountId:options.accountId});return{failed:!0,lines}}var FAILED_SETUP_STATUSES=new Set(["bootstrapping_failed","jobs_on_hive_failed"]);function getRunStatus(invocation){return invocation.runConclusion?invocation.runConclusion.result:invocation.completed?.conclusion?invocation.completed.conclusion:invocation.status==="skipped"?"skipped":FAILED_SETUP_STATUSES.has(invocation.status)?"failed":invocation.status==="completed"?"completed":invocation.status==="new"?"queued":"running"}var CI_RUN_STATUSES=["queued","running","succeeded","failed","skipped"],RUNNING_API_STATUSES=["bootstrapping","snapshotted","sandbox_named","jobs_on_hive_clone_dispatched","jobs_on_hive_dispatched","jobs_on_hive_completed","awaiting_jobs"];function toRunStatusFilter(status6){switch(status6){case"queued":return{statuses:["new"]};case"running":return{statuses:RUNNING_API_STATUSES};case"completed":return{statuses:["completed"]};default:return{conclusions:[status6]}}}function isTerminalRunStatus(status6){return status6!=="queued"&&status6!=="running"}function toBranchName(ref){return ref.startsWith("refs/heads/")?ref.slice(11):ref}function toShortSha(sha){return sha.slice(0,7)}var RUN_ID_PREFIX="invo1_",RUN_ID_PATTERN=/^[A-Za-z0-9]+$/;function toDisplayRunId(id2){return id2.startsWith(RUN_ID_PREFIX)?id2.slice(RUN_ID_PREFIX.length):id2}function toApiRunId(input){let id2=toDisplayRunId(input.trim());return RUN_ID_PATTERN.test(id2)?`${RUN_ID_PREFIX}${id2}`:null}function toRunSummary(invocation,repositories){let repository=repositories[invocation.repositoryKey];return{id:toDisplayRunId(invocation.invocationId),attempt:invocation.attempt,status:getRunStatus(invocation),...getRunReason(invocation),repository:repository?`${repository.owner}/${repository.name}`:"",branch:toBranchName(invocation.ref),commitSha:invocation.commitSha,createdAt:toIso(invocation.createdAt)}}function getRunReason(invocation){return invocation.skipped?{reason:invocation.skipped.reason}:invocation.setupConclusion?.result==="failed"?{reason:"setup_failed"}:{}}function toRunView(tree){return{run:toRunSummary(tree.invocation,tree.repositories),jobs:tree.jobs.map(job=>({name:job.definition.name,kind:job.definition.kind,...toStepTiming(job.run),tasks:job.tasks.map(task=>({name:task.definition.name,...toStepTiming(task.run)}))}))}}function toStepTiming(run3){let startedAt=run3?.started?.startedAt,completedAt=run3?.completed?.completedAt,conclusion2=run3?.completed?.conclusion,status6="queued";return conclusion2?status6=conclusion2.result:startedAt!==void 0&&(status6="running"),{status:status6,...conclusion2&&"reason"in conclusion2?{reason:conclusion2.reason}:{},...startedAt!==void 0?{startedAt:toIso(startedAt)}:{},...completedAt!==void 0?{completedAt:toIso(completedAt)}:{},...startedAt!==void 0&&completedAt!==void 0?{durationMs:Math.max(completedAt-startedAt,0)}:{}}}function toIso(timestamp2){return new Date(timestamp2).toISOString()}function countTasks(view){let total=0,finished=0;for(let job of view.jobs)for(let task of job.tasks)total++,task.status!=="queued"&&task.status!=="running"&&finished++;return{total,finished}}var import_strip_ansi2=__toESM(require_strip_ansi(),1);function ciDisplayText(value){return Array.from((0,import_strip_ansi2.default)(value),char=>{let code2=char.codePointAt(0);return code2>=127&&code2<=159?`\\u${code2.toString(16).padStart(4,"0")}`:code2<32?JSON.stringify(char).slice(1,-1):char}).join("")}function quoteCiCommandArg(value){return/^[a-zA-Z0-9_./:@%+,=-]+$/.test(value)?value:`'${value.replace(/'/g,"'\\''")}'`}function buildCiCommand(argv,args){return getCommandNamePlain([...args,...getGlobalFlagsFromArgv(argv)].map(quoteCiCommandArg).join(" "))}var CiGrepTelemetryClient=class extends TelemetryClient{trackCliArgumentText(text3){text3&&this.trackCliArgument({arg:"text",value:this.redactedValue})}trackCliOptionBranch(branch){branch&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliFlagAllBranches(allBranches){allBranches&&this.trackCliFlag("all-branches")}trackCliOptionStatus(status6){status6&&this.trackCliOption({option:"status",value:status6})}trackCliOptionRuns(runs){runs!==void 0&&this.trackCliOption({option:"runs",value:String(runs)})}trackCliOptionLevel(levels){levels?.length&&this.trackCliOption({option:"level",value:levels.join(",")})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var SUPPORTED_PROVIDERS=["github"];async function getCiGitContext(cwd){let git=await getGitExecutable(cwd),[remote,branch,commitSha]=await Promise.all([readGit(git,cwd,["remote","get-url","origin"]),readGit(git,cwd,["rev-parse","--abbrev-ref","HEAD"]),readGit(git,cwd,["rev-parse","HEAD"])]);if(!remote)return null;let repo=parseRepoUrl(remote),provider=SUPPORTED_PROVIDERS.find(p=>p===repo?.provider);return!repo||!provider?(output_manager_default.debug(`Unsupported Git remote for Vercel CI: ${remote}`),null):{provider,repository:`${repo.org}/${repo.repo}`,...branch&&branch!=="HEAD"?{branch}:{},...commitSha?{commitSha}:{}}}var COMMIT_SHA_PATTERN=/^[0-9a-f]{4,40}$/i;async function resolveCommitSha(cwd,value){let sha=value.trim().toLowerCase();if(!COMMIT_SHA_PATTERN.test(sha))return null;if(sha.length===40)return sha;let git=await getGitExecutable(cwd);return await readGit(git,cwd,["rev-parse","--verify","--quiet",`${sha}^{commit}`])??null}async function readGit(git,cwd,args){try{let{stdout}=await execFileAsync(git,args,{cwd});return stdout.trim()||void 0}catch(error){output_manager_default.debug(`git ${args.join(" ")} failed: ${error}`);return}}function failCi(client,failure){return shouldEmitNonInteractiveCommandError(client)?writeAgentError(client,{status:AGENT_STATUS.ERROR,...failure}):output_manager_default.fatal(failure.message),getExitCodeForReason(failure.reason)}function invalidCiArguments(client,message){return failCi(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message})}function handleCiApiError(client,action,err){if(isAPIError(err)){let detail=err.serverMessage?` ${err.serverMessage}`:"";switch(err.status){case 403:return failCi(client,{reason:AGENT_REASON.PERMISSION_DENIED,message:`Can't ${action}. You don't have access to Vercel CI runs for this team.`});case 404:return failCi(client,{reason:AGENT_REASON.CI_RUN_NOT_FOUND,message:"Couldn't find that Vercel CI run for this team."});case 429:return failCi(client,{reason:AGENT_REASON.RATE_LIMITED,message:`Failed to ${action}. Too many requests. Wait a moment, then try again.`});default:return failCi(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${action}.${detail}`})}}throw err}async function resolveCiContext(client){let git=await getCiGitContext(client.cwd);if(!git)return failCi(client,{reason:AGENT_REASON.GIT_REPOSITORY_REQUIRED,message:"Couldn't find a supported Git repository here. Vercel CI currently supports GitHub repositories with an origin remote."});let team=await resolveCiTeam(client);return team.ok?{git,accountId:team.accountId}:team.exitCode}var import_chalk53=__toESM(require_source(),1),import_ms8=__toESM(require_ms(),1);function formatStatus2(status6){switch(status6){case"succeeded":return import_chalk53.default.green(status6);case"failed":return import_chalk53.default.red(status6);case"skipped":case"cached":return import_chalk53.default.gray(status6);default:return ciDisplayText(status6)}}function formatCiTable(headers,rows){return formatTable(headers,headers.map(()=>"l"),[{rows}]).split(`
245
245
  `).map(line2=>line2.trimEnd()).filter(line2=>line2.length>0).join(`
@@ -291,7 +291,7 @@ validUntil=${result.validUntil} (${new Date(result.validUntil).toISOString()})
291
291
  `),0}let scope=describeScope2(git.repository,branch,commitSha);if(runs.length===0){let filtered=!!(status6||commitSha||flags["--next"]);return output_manager_default.log(filtered?"No Vercel CI runs match the current filters.":`No Vercel CI runs found for ${scope}.`),0}return output_manager_default.log(`${(0,import_pluralize6.default)("Vercel CI run",runs.length,!0)} for ${scope} ${import_chalk57.default.gray(lsStamp())}`),output_manager_default.print(`
292
292
  ${formatRunsTable(invocations)}
293
293
 
294
- `),nextArgs&&output_manager_default.log(`To display the next page, run ${getCommandName(nextArgs)}`),0}function describeScope2(repository,branch,commitSha){let repo=import_chalk57.default.bold(ciDisplayText(repository));return commitSha?`${repo} at ${import_chalk57.default.bold(toShortSha(commitSha))}`:branch?`${repo} on ${import_chalk57.default.bold(ciDisplayText(branch))}`:`${repo} on all branches`}function formatRunsTable(invocations){let now=Date.now(),rows=invocations.map(invocation=>[ciDisplayText(toDisplayRunId(invocation.invocationId)),formatStatus2(getRunStatus(invocation)),ciDisplayText(toBranchName(invocation.ref)),toShortSha(invocation.commitSha),import_chalk57.default.gray((0,import_ms10.default)(Math.max(now-invocation.createdAt,0)))]);return formatCiTable(["Run","Status","Branch","Commit","Age"],rows)}var COMMAND_CONFIG20={ls:getCommandAliases(listSubcommand6),inspect:getCommandAliases(inspectSubcommand4),logs:getCommandAliases(logsSubcommand),grep:getCommandAliases(grepSubcommand),rerun:getCommandAliases(rerunSubcommand)};async function main6(client){let parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(ciCommand.options),{permissive:!0})}catch(error){return printError(error,client),2}let telemetry2=new CiTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG20),needHelp=parsedArgs.flags["--help"];function printHelp(command2){return output_manager_default.print(help(command2,{parent:ciCommand,columns:client.stderr.columns})),0}switch(subcommand){case"ls":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(listSubcommand6)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls2(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(inspectSubcommand4)):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect6(client,args));case"logs":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(logsSubcommand)):(telemetry2.trackCliSubcommandLogs(subcommandOriginal),logs(client,args));case"grep":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(grepSubcommand)):(telemetry2.trackCliSubcommandGrep(subcommandOriginal),grep(client,args));case"rerun":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(rerunSubcommand)):(telemetry2.trackCliSubcommandRerun(subcommandOriginal),rerun(client,args));default:return needHelp&&telemetry2.trackCliFlagHelp("ci"),output_manager_default.print(help(ciCommand,{columns:client.stderr.columns})),needHelp?0:2}}var CommentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandReply(actual){this.trackCliSubcommand({subcommand:"reply",value:actual})}trackCliSubcommandResolve(actual){this.trackCliSubcommand({subcommand:"resolve",value:actual})}trackCliSubcommandReopen(actual){this.trackCliSubcommand({subcommand:"reopen",value:actual})}trackCliSubcommandEdit(actual){this.trackCliSubcommand({subcommand:"edit",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliOptionStatus(v){v&&this.trackCliOption({option:"status",value:v})}trackCliFlagAllBranches(v){v&&this.trackCliFlag("all-branches")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagContext(v){v&&this.trackCliFlag("context")}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliOptionBranch(v){v&&v.length>0&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliOptionPage(v){v&&v.length>0&&this.trackCliOption({option:"page",value:this.redactedValue})}trackCliOptionPagePath(v){v&&v.length>0&&this.trackCliOption({option:"page-path",value:this.redactedValue})}trackCliOptionAuthor(v){v&&v.length>0&&this.trackCliOption({option:"author",value:this.redactedValue})}trackCliOptionContentId(v){v&&v.length>0&&this.trackCliOption({option:"content-id",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(v){v&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionMessage(v){v&&this.trackCliOption({option:"message",value:this.redactedValue})}trackCliOptionFile(v){v&&this.trackCliOption({option:"file",value:this.redactedValue})}trackCliOptionAttach(v){v&&v.length>0&&this.trackCliOption({option:"attach",value:this.redactedValue})}trackCliArgumentThread(v){v&&this.trackCliArgument({arg:"thread",value:this.redactedValue})}trackCliArgumentMessageId(v){v&&this.trackCliArgument({arg:"message-id",value:this.redactedValue})}trackCliArgumentSearch(v){v&&this.trackCliArgument({arg:"search",value:this.redactedValue})}};var COMMAND_CONFIG21={list:getCommandAliases(listSubcommand7),inspect:getCommandAliases(inspectSubcommand5),open:getCommandAliases(openSubcommand),reply:getCommandAliases(replySubcommand),resolve:getCommandAliases(resolveSubcommand),reopen:getCommandAliases(reopenSubcommand),edit:getCommandAliases(editSubcommand),delete:getCommandAliases(deleteSubcommand)};async function comments(client){let telemetry2=new CommentsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(commentsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG21),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("comments",subcommand),output_manager_default.print(help(commentsCommand,{columns:client.stderr.columns})),0;function printSubcommandHelp(command2){output_manager_default.print(help(command2,{parent:commentsCommand,columns:client.stderr.columns}))}function handleHelp(command2){return needHelp?(telemetry2.trackCliFlagHelp("comments",subcommandOriginal),printSubcommandHelp(command2),!0):!1}switch(subcommand){case"inspect":return handleHelp(inspectSubcommand5)?0:(telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-OGUGKPVK.js")).default(client,telemetry2));case"open":return handleHelp(openSubcommand)?0:(telemetry2.trackCliSubcommandOpen(subcommandOriginal),(await import("./chunks/open-OJAIEDS5.js")).default(client,telemetry2));case"reply":return handleHelp(replySubcommand)?0:(telemetry2.trackCliSubcommandReply(subcommandOriginal),(await import("./chunks/reply-5WF5YHOM.js")).default(client,telemetry2));case"resolve":return handleHelp(resolveSubcommand)?0:(telemetry2.trackCliSubcommandResolve(subcommandOriginal),(await import("./chunks/resolve-MPZBUK5V.js")).default(client,telemetry2,!0));case"reopen":return handleHelp(reopenSubcommand)?0:(telemetry2.trackCliSubcommandReopen(subcommandOriginal),(await import("./chunks/resolve-MPZBUK5V.js")).default(client,telemetry2,!1));case"edit":return handleHelp(editSubcommand)?0:(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-YRWAXGEI.js")).default(client,telemetry2));case"delete":return handleHelp(deleteSubcommand)?0:(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-NRWKSTCN.js")).default(client,telemetry2));default:{if(needHelp)return telemetry2.trackCliFlagHelp("comments",subcommandOriginal),subcommandOriginal!=="default"?printSubcommandHelp(listSubcommand7):output_manager_default.print(help(commentsCommand,{columns:client.stderr.columns})),0;telemetry2.trackCliSubcommandList(subcommandOriginal);let defaultInvocation=subcommandOriginal==="default";return(await import("./chunks/list-32NXD7OW.js")).default(client,telemetry2,defaultInvocation)}}}function serviceTelemetryValue(value){let trimmed=value.trim();if(!trimmed)return null;let authority=trimmed.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"").split(/[/?#]/,1)[0],atIndex=authority.lastIndexOf("@"),hostPort=atIndex===-1?authority:authority.slice(atIndex+1),host;if(hostPort.startsWith("[")){let end=hostPort.indexOf("]");host=end===-1?hostPort:hostPort.slice(0,end+1)}else host=hostPort.split(":",1)[0];return host?host.toLowerCase():null}var HEX_COLOR_REGEX=/^#[0-9a-fA-F]{6}$/;function isValidHexColor(value){return HEX_COLOR_REGEX.test(value)}function validateHexColor(value,label){if(value!==void 0&&!isValidHexColor(value))throw new Error(`Invalid ${label} "${value}". Expected 6-digit hex like #1A2B3C.`)}var ConnexTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandContacts(actual){this.trackCliSubcommand({subcommand:"contacts",value:actual})}trackCliSubcommandAttach(actual){this.trackCliSubcommand({subcommand:"attach",value:actual})}trackCliSubcommandDetach(actual){this.trackCliSubcommand({subcommand:"detach",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRevokeTokens(actual){this.trackCliSubcommand({subcommand:"revoke-tokens",value:actual})}trackCliArgumentClient(v){v&&this.trackCliArgument({arg:"client",value:this.redactedValue})}trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliArgumentService(v){if(v){let value=serviceTelemetryValue(v);this.trackCliArgument({arg:"service",value:value??this.redactedValue})}}trackCliOptionName(v){v&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionSubject(v){v&&this.trackCliOption({option:"subject",value:v==="user"||v==="app"?v:this.redactedValue})}trackCliOptionInstallationId(v){v&&this.trackCliOption({option:"installation-id",value:this.redactedValue})}trackCliOptionScopes(v){v&&this.trackCliOption({option:"scopes",value:this.redactedValue})}trackCliFlagNoDefaultScopes(v){v&&this.trackCliFlag("no-default-scopes")}trackCliOptionIcon(v){v&&this.trackCliOption({option:"icon",value:this.redactedValue})}trackCliOptionBackgroundColor(v){v&&this.trackCliOption({option:"background-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionAccentColor(v){v&&this.trackCliOption({option:"accent-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionData(v){v!==void 0&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionConnectorType(v){v&&this.trackCliOption({option:"connector-type",value:v})}trackCliOptionConnectionMethod(v){v&&this.trackCliOption({option:"connection-method",value:v})}trackCliOptionTarget(v){v&&this.trackCliOption({option:"target",value:v})}trackCliOptionParam(v){!v||v.length===0||this.trackCliOption({option:"param",value:String(v.length)})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagDisconnectAll(v){v&&this.trackCliFlag("disconnect-all")}trackCliFlagTriggers(v){v&&this.trackCliFlag("triggers")}trackCliOptionTriggerEvent(v){v&&v.length>0&&this.trackCliOption({option:"trigger-event",value:String(v.length)})}trackCliOptionTriggerBranch(v){v&&this.trackCliOption({option:"trigger-branch",value:this.redactedValue})}trackCliOptionTriggerEnvironment(v){v&&this.trackCliOption({option:"trigger-environment",value:this.redactedValue})}trackCliOptionTriggerPath(v){v&&this.trackCliOption({option:"trigger-path",value:this.redactedValue})}trackCliOptionTriggerProject(v){v&&this.trackCliOption({option:"trigger-project",value:this.redactedValue})}trackCliFlagMyTokens(v){v&&this.trackCliFlag("my-tokens")}trackCliFlagAllTokens(v){v&&this.trackCliFlag("all-tokens")}trackCliFlagAllProjects(v){v&&this.trackCliFlag("all-projects")}trackCliOptionLimit(v){v!==void 0&&this.trackCliOption({option:"limit",value:String(v)})}trackCliOptionNext(v){v&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionService(v){if(!(!v||v.length===0))for(let raw of v)for(let svc of raw.split(","))svc.trim()&&this.trackCliOption({option:"service",value:this.redactedValue})}trackCliOptionType(v){if(!(!v||v.length===0))for(let raw of v)for(let t of raw.split(",")){let trimmed=t.trim();trimmed&&this.trackCliOption({option:"type",value:trimmed})}}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliOptionEnvironment(v){if(!(!v||v.length===0))for(let raw of v)for(let env of raw.split(",")){let trimmed=env.trim();trimmed&&this.trackCliOption({option:"environment",value:this.redactedTargetName(trimmed)})}}};var import_open3=__toESM(require_open(),1);import{readFile as readFile3}from"node:fs/promises";import{resolve as resolve6}from"node:path";import{text}from"node:stream/consumers";async function selectConnexTeam(client,message){let scope=await getScope(client,{resolveLocalScope:!0});if(scope.org.type==="team"){client.config.currentTeam=scope.org.id;return}let org=await selectOrg(client,message,!1);if(org.type!=="team")throw new Error("Connect requires a team. Re-run and select a team to continue.");client.config.currentTeam=org.id,client.writeToConfigFile()}import{randomBytes,createHash as createHash2}from"node:crypto";var POLL_INTERVAL_MS=2e3,MAX_POLL_DURATION_MS=115*60*1e3,MAX_EARLY_404_COUNT=3;function generateRequestCode(){let verifier=randomBytes(37).toString("base64url"),requestCode=createHash2("sha256").update(verifier).digest("base64url");return{verifier,requestCode}}async function awaitConnexResult(client,verifier){let deadline=Date.now()+MAX_POLL_DURATION_MS,early404Count=0,lastProgress;for(;Date.now()<deadline;){await sleep(POLL_INTERVAL_MS);try{let result=await client.fetch(`/v1/connect/result/${encodeURIComponent(verifier)}`);if(result.status==="success"&&result.data)return result.data;if(result.status==="partial"&&result.data){if(result.progress&&result.progress!==lastProgress){lastProgress=result.progress,output_manager_default.stopSpinner();let clientId=result.data.clientId;clientId&&output_manager_default.log(`Connector created: ${clientId}`),output_manager_default.spinner(`${result.progress}...`)}continue}if(result.status==="error"&&result.error)return output_manager_default.error(`Setup failed: ${result.error.message} (${result.error.code})`),null;if(result.status==="canceled")return output_manager_default.error("Setup was canceled in the browser."),null}catch(err){if(err.status===404){if(early404Count++,early404Count>MAX_EARLY_404_COUNT)return output_manager_default.error("Setup request expired. Please try again."),null;output_manager_default.debug(`Polling 404 (${early404Count}/${MAX_EARLY_404_COUNT}), will retry`);continue}output_manager_default.debug(`Polling error (will retry): ${err}`)}}return output_manager_default.error("Timed out waiting for setup to complete. Please try again."),null}import{readFile as readFile2,stat as stat2}from"node:fs/promises";import{resolve as resolve5}from"node:path";import{createHash as createHash3}from"node:crypto";var MAX_ICON_BYTES=5*1024*1024,MIN_IMAGE_BYTES=12,IMAGE_SIGNATURES=[/^ffd8ffdb/,/^ffd8ffe000104a4649460001/,/^ffd8ffee/,/^ffd8ffe1.{4}457869660000/,/^ffd8ffe0/,/^89504e470d0a1a0a/];function isImageBuffer(buf){if(buf.length<MIN_IMAGE_BYTES)return!1;let hex=buf.subarray(0,MIN_IMAGE_BYTES).toString("hex");return IMAGE_SIGNATURES.some(re=>re.test(hex))}async function prepareConnexIcon(filePath,cwd){let absPath=resolve5(cwd,filePath),size;try{size=(await stat2(absPath)).size}catch(err){throw new Error(`Could not read icon file at "${filePath}": ${err.message}`)}if(size>MAX_ICON_BYTES)throw new Error(`Icon file at "${filePath}" is ${size} bytes; maximum is ${MAX_ICON_BYTES} bytes (5 MB).`);let buf;try{buf=await readFile2(absPath)}catch(err){throw new Error(`Could not read icon file at "${filePath}": ${err.message}`)}if(!isImageBuffer(buf))throw new Error(`Icon file at "${filePath}" is not a PNG or JPEG.`);let sha=createHash3("sha1").update(new Uint8Array(buf)).digest("hex");return{buf,sha}}async function uploadConnexIcon(client,prepared){try{await client.fetch("/v2/files",{method:"POST",json:!1,body:prepared.buf,headers:{"Content-Type":"application/octet-stream","Content-Length":String(prepared.buf.byteLength),"x-now-digest":prepared.sha,"x-now-size":String(prepared.buf.byteLength)}})}catch(err){let e2=err;throw new Error(`Failed to upload icon: ${e2.serverMessage??e2.message}`)}return prepared.sha}var import_chalk58=__toESM(require_source(),1);var CONNEX_REDIRECT_URI="https://connect.vercel.com/callback",ConnexMethodError=class extends Error{},ENDPOINT_IDENTITY_KEYS=new Set(["serverConfig","serverUrl","discoveryServerUrl"]),SECRET_KEY_PATTERN=/secret|password|passwd|token|api[-_]?key|private[-_]?key|credential/i,CHOICE_INDENT=" ";async function fetchConnexServiceInfo(client,service,opts={}){try{return await client.fetch(`/v1/connect/services/${encodeURIComponent(service)}?schemas=true`,opts)}catch(err){if(err.status===404)return;throw err}}function parseConnexParams(values){let params={},warnings=[];for(let raw of values??[]){let separator=raw.indexOf("=");if(separator<=0)throw new ConnexMethodError(`Invalid --param "${raw}". Use --param KEY=VALUE.`);let key=raw.slice(0,separator).trim(),value=raw.slice(separator+1);if(!key)throw new ConnexMethodError(`Invalid --param "${raw}". Use --param KEY=VALUE.`);key in params&&warnings.push(`--param ${key} was passed more than once. Using the last value.`),params[key]=value}return{params,warnings}}function formatMethodOptions(methods){return methods.map(method=>`${method.connectionMethod} (${method.label})`).join(", ")}function formatTargetOptions(targets2){return targets2.map(target=>`${target.target} (${target.label})`).join(", ")}function createPathBadge(method){if(method.create.managed===!0)return"automatic registration";if(method.create.manual)return"bring your own credentials"}function soleTargetOf(method){return method.targets?.length===1?method.targets[0]:void 0}function renderConnexMarkdown(markdown){return markdown.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(_match,text3,url)=>linksToSameTarget(text3,url)?output_manager_default.link(text3,url,{fallback:()=>import_chalk58.default.cyan(url)}):output_manager_default.link(text3,url)).replace(/\*\*([^*]+)\*\*/g,(_match,text3)=>import_chalk58.default.bold(text3))}function connexMarkdownToPlainText(markdown){return markdown.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(_match,text3,url)=>linksToSameTarget(text3,url)?url:`${text3} (${url})`).replace(/\*\*([^*]+)\*\*/g,"$1")}function linksToSameTarget(text3,url){let normalize=value=>value.trim().replace(/^https?:\/\//,"").replace(/\/+$/,"").toLowerCase();return normalize(text3)===normalize(url)}function buildMethodGuidance(method,serviceName){let lines=[];if(method.type.type!=="api-key"){let registerUrl=method.settingsUrl??method.docUrl;lines.push(registerUrl?`Register an OAuth app for ${serviceName} at ${import_chalk58.default.cyan(registerUrl)} and copy its Client ID and Client Secret.`:`Register an OAuth app for ${serviceName} and copy its Client ID and Client Secret.`),lines.push(`Add ${import_chalk58.default.cyan(CONNEX_REDIRECT_URI)} as a redirect URI in that app.`),method.docUrl&&method.docUrl!==registerUrl&&lines.push(`Docs: ${import_chalk58.default.cyan(method.docUrl)}`)}return method.instructions&&lines.push(renderConnexMarkdown(method.instructions)),lines}function isSecretInputKey(method,key){let encrypted=method.type.encryptedFields;return encrypted&&encrypted.length>0?encrypted.includes(key):SECRET_KEY_PATTERN.test(key)}function needsCredentialPrompt(method,key,suppliedData){if(ENDPOINT_IDENTITY_KEYS.has(key)||suppliedData&&key in suppliedData)return!1;let defaults=method.type.createInputDefaults;return!(defaults&&key in defaults)}function describeCredentialFields(method){if(method.type.type==="oauth")return"clientId (required), clientSecret";if(method.type.type==="api-key")return'values: [{ "value": "<api key>" }]'}async function collectMethodCredentials(client,method,suppliedData,interactive,onFirstPrompt){let data={...suppliedData},announced=!1,announce=()=>{announced||(announced=!0,onFirstPrompt?.())};if(method.type.type==="oauth"){if(needsCredentialPrompt(method,"clientId",suppliedData)){if(!interactive)throw missingCredentialsError(method);announce(),data.clientId=await promptCredential(client,method,{key:"clientId",message:"Client ID",required:!0})}if(interactive&&needsCredentialPrompt(method,"clientSecret",suppliedData)){announce();let secret=await promptCredential(client,method,{key:"clientSecret",message:`Client Secret ${import_chalk58.default.dim("leave blank for a public client")}`,required:!1});secret&&(data.clientSecret=secret)}return data}if(method.type.type==="api-key"){if(data.values===void 0){if(!interactive)throw missingCredentialsError(method);announce();let value=await promptCredential(client,method,{key:"value",message:method.label,required:!0});data.values=[{value}]}return data}if(suppliedData===void 0){let schema=method.type.createInputSchema,hint=schema?`
294
+ `),nextArgs&&output_manager_default.log(`To display the next page, run ${getCommandName(nextArgs)}`),0}function describeScope2(repository,branch,commitSha){let repo=import_chalk57.default.bold(ciDisplayText(repository));return commitSha?`${repo} at ${import_chalk57.default.bold(toShortSha(commitSha))}`:branch?`${repo} on ${import_chalk57.default.bold(ciDisplayText(branch))}`:`${repo} on all branches`}function formatRunsTable(invocations){let now=Date.now(),rows=invocations.map(invocation=>[ciDisplayText(toDisplayRunId(invocation.invocationId)),formatStatus2(getRunStatus(invocation)),ciDisplayText(toBranchName(invocation.ref)),toShortSha(invocation.commitSha),import_chalk57.default.gray((0,import_ms10.default)(Math.max(now-invocation.createdAt,0)))]);return formatCiTable(["Run","Status","Branch","Commit","Age"],rows)}var COMMAND_CONFIG20={ls:getCommandAliases(listSubcommand6),inspect:getCommandAliases(inspectSubcommand4),logs:getCommandAliases(logsSubcommand),grep:getCommandAliases(grepSubcommand),rerun:getCommandAliases(rerunSubcommand)};async function main6(client){let parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(ciCommand.options),{permissive:!0})}catch(error){return printError(error,client),2}let telemetry2=new CiTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG20),needHelp=parsedArgs.flags["--help"];function printHelp(command2){return output_manager_default.print(help(command2,{parent:ciCommand,columns:client.stderr.columns})),0}switch(subcommand){case"ls":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(listSubcommand6)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls2(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(inspectSubcommand4)):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect6(client,args));case"logs":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(logsSubcommand)):(telemetry2.trackCliSubcommandLogs(subcommandOriginal),logs(client,args));case"grep":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(grepSubcommand)):(telemetry2.trackCliSubcommandGrep(subcommandOriginal),grep(client,args));case"rerun":return needHelp?(telemetry2.trackCliFlagHelp("ci",subcommandOriginal),printHelp(rerunSubcommand)):(telemetry2.trackCliSubcommandRerun(subcommandOriginal),rerun(client,args));default:return needHelp&&telemetry2.trackCliFlagHelp("ci"),output_manager_default.print(help(ciCommand,{columns:client.stderr.columns})),needHelp?0:2}}var CommentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandReply(actual){this.trackCliSubcommand({subcommand:"reply",value:actual})}trackCliSubcommandResolve(actual){this.trackCliSubcommand({subcommand:"resolve",value:actual})}trackCliSubcommandReopen(actual){this.trackCliSubcommand({subcommand:"reopen",value:actual})}trackCliSubcommandEdit(actual){this.trackCliSubcommand({subcommand:"edit",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliOptionStatus(v){v&&this.trackCliOption({option:"status",value:v})}trackCliFlagAllBranches(v){v&&this.trackCliFlag("all-branches")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagContext(v){v&&this.trackCliFlag("context")}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliOptionBranch(v){v&&v.length>0&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliOptionPage(v){v&&v.length>0&&this.trackCliOption({option:"page",value:this.redactedValue})}trackCliOptionPagePath(v){v&&v.length>0&&this.trackCliOption({option:"page-path",value:this.redactedValue})}trackCliOptionAuthor(v){v&&v.length>0&&this.trackCliOption({option:"author",value:this.redactedValue})}trackCliOptionContentId(v){v&&v.length>0&&this.trackCliOption({option:"content-id",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(v){v&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionMessage(v){v&&this.trackCliOption({option:"message",value:this.redactedValue})}trackCliOptionFile(v){v&&this.trackCliOption({option:"file",value:this.redactedValue})}trackCliOptionAttach(v){v&&v.length>0&&this.trackCliOption({option:"attach",value:this.redactedValue})}trackCliArgumentThread(v){v&&this.trackCliArgument({arg:"thread",value:this.redactedValue})}trackCliArgumentMessageId(v){v&&this.trackCliArgument({arg:"message-id",value:this.redactedValue})}trackCliArgumentSearch(v){v&&this.trackCliArgument({arg:"search",value:this.redactedValue})}};var COMMAND_CONFIG21={list:getCommandAliases(listSubcommand7),inspect:getCommandAliases(inspectSubcommand5),open:getCommandAliases(openSubcommand),reply:getCommandAliases(replySubcommand),resolve:getCommandAliases(resolveSubcommand),reopen:getCommandAliases(reopenSubcommand),edit:getCommandAliases(editSubcommand),delete:getCommandAliases(deleteSubcommand)};async function comments(client){let telemetry2=new CommentsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(commentsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG21),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("comments",subcommand),output_manager_default.print(help(commentsCommand,{columns:client.stderr.columns})),0;function printSubcommandHelp(command2){output_manager_default.print(help(command2,{parent:commentsCommand,columns:client.stderr.columns}))}function handleHelp(command2){return needHelp?(telemetry2.trackCliFlagHelp("comments",subcommandOriginal),printSubcommandHelp(command2),!0):!1}switch(subcommand){case"inspect":return handleHelp(inspectSubcommand5)?0:(telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-UNL54246.js")).default(client,telemetry2));case"open":return handleHelp(openSubcommand)?0:(telemetry2.trackCliSubcommandOpen(subcommandOriginal),(await import("./chunks/open-SWPHB54M.js")).default(client,telemetry2));case"reply":return handleHelp(replySubcommand)?0:(telemetry2.trackCliSubcommandReply(subcommandOriginal),(await import("./chunks/reply-YEZHST2Q.js")).default(client,telemetry2));case"resolve":return handleHelp(resolveSubcommand)?0:(telemetry2.trackCliSubcommandResolve(subcommandOriginal),(await import("./chunks/resolve-QC37E2EB.js")).default(client,telemetry2,!0));case"reopen":return handleHelp(reopenSubcommand)?0:(telemetry2.trackCliSubcommandReopen(subcommandOriginal),(await import("./chunks/resolve-QC37E2EB.js")).default(client,telemetry2,!1));case"edit":return handleHelp(editSubcommand)?0:(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-ISUCMYNW.js")).default(client,telemetry2));case"delete":return handleHelp(deleteSubcommand)?0:(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-EEY7M6XT.js")).default(client,telemetry2));default:{if(needHelp)return telemetry2.trackCliFlagHelp("comments",subcommandOriginal),subcommandOriginal!=="default"?printSubcommandHelp(listSubcommand7):output_manager_default.print(help(commentsCommand,{columns:client.stderr.columns})),0;telemetry2.trackCliSubcommandList(subcommandOriginal);let defaultInvocation=subcommandOriginal==="default";return(await import("./chunks/list-EWJI2WSQ.js")).default(client,telemetry2,defaultInvocation)}}}function serviceTelemetryValue(value){let trimmed=value.trim();if(!trimmed)return null;let authority=trimmed.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"").split(/[/?#]/,1)[0],atIndex=authority.lastIndexOf("@"),hostPort=atIndex===-1?authority:authority.slice(atIndex+1),host;if(hostPort.startsWith("[")){let end=hostPort.indexOf("]");host=end===-1?hostPort:hostPort.slice(0,end+1)}else host=hostPort.split(":",1)[0];return host?host.toLowerCase():null}var HEX_COLOR_REGEX=/^#[0-9a-fA-F]{6}$/;function isValidHexColor(value){return HEX_COLOR_REGEX.test(value)}function validateHexColor(value,label){if(value!==void 0&&!isValidHexColor(value))throw new Error(`Invalid ${label} "${value}". Expected 6-digit hex like #1A2B3C.`)}var ConnexTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandContacts(actual){this.trackCliSubcommand({subcommand:"contacts",value:actual})}trackCliSubcommandAttach(actual){this.trackCliSubcommand({subcommand:"attach",value:actual})}trackCliSubcommandDetach(actual){this.trackCliSubcommand({subcommand:"detach",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRevokeTokens(actual){this.trackCliSubcommand({subcommand:"revoke-tokens",value:actual})}trackCliArgumentClient(v){v&&this.trackCliArgument({arg:"client",value:this.redactedValue})}trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliArgumentService(v){if(v){let value=serviceTelemetryValue(v);this.trackCliArgument({arg:"service",value:value??this.redactedValue})}}trackCliOptionName(v){v&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionSubject(v){v&&this.trackCliOption({option:"subject",value:v==="user"||v==="app"?v:this.redactedValue})}trackCliOptionInstallationId(v){v&&this.trackCliOption({option:"installation-id",value:this.redactedValue})}trackCliOptionScopes(v){v&&this.trackCliOption({option:"scopes",value:this.redactedValue})}trackCliFlagNoDefaultScopes(v){v&&this.trackCliFlag("no-default-scopes")}trackCliOptionIcon(v){v&&this.trackCliOption({option:"icon",value:this.redactedValue})}trackCliOptionBackgroundColor(v){v&&this.trackCliOption({option:"background-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionAccentColor(v){v&&this.trackCliOption({option:"accent-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionData(v){v!==void 0&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionConnectorType(v){v&&this.trackCliOption({option:"connector-type",value:v})}trackCliOptionConnectionMethod(v){v&&this.trackCliOption({option:"connection-method",value:v})}trackCliOptionTarget(v){v&&this.trackCliOption({option:"target",value:v})}trackCliOptionParam(v){!v||v.length===0||this.trackCliOption({option:"param",value:String(v.length)})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagDisconnectAll(v){v&&this.trackCliFlag("disconnect-all")}trackCliFlagTriggers(v){v&&this.trackCliFlag("triggers")}trackCliOptionTriggerEvent(v){v&&v.length>0&&this.trackCliOption({option:"trigger-event",value:String(v.length)})}trackCliOptionTriggerBranch(v){v&&this.trackCliOption({option:"trigger-branch",value:this.redactedValue})}trackCliOptionTriggerEnvironment(v){v&&this.trackCliOption({option:"trigger-environment",value:this.redactedValue})}trackCliOptionTriggerPath(v){v&&this.trackCliOption({option:"trigger-path",value:this.redactedValue})}trackCliOptionTriggerProject(v){v&&this.trackCliOption({option:"trigger-project",value:this.redactedValue})}trackCliFlagMyTokens(v){v&&this.trackCliFlag("my-tokens")}trackCliFlagAllTokens(v){v&&this.trackCliFlag("all-tokens")}trackCliFlagAllProjects(v){v&&this.trackCliFlag("all-projects")}trackCliOptionLimit(v){v!==void 0&&this.trackCliOption({option:"limit",value:String(v)})}trackCliOptionNext(v){v&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionService(v){if(!(!v||v.length===0))for(let raw of v)for(let svc of raw.split(","))svc.trim()&&this.trackCliOption({option:"service",value:this.redactedValue})}trackCliOptionType(v){if(!(!v||v.length===0))for(let raw of v)for(let t of raw.split(",")){let trimmed=t.trim();trimmed&&this.trackCliOption({option:"type",value:trimmed})}}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliOptionEnvironment(v){if(!(!v||v.length===0))for(let raw of v)for(let env of raw.split(",")){let trimmed=env.trim();trimmed&&this.trackCliOption({option:"environment",value:this.redactedTargetName(trimmed)})}}};var import_open3=__toESM(require_open(),1);import{readFile as readFile3}from"node:fs/promises";import{resolve as resolve6}from"node:path";import{text}from"node:stream/consumers";async function selectConnexTeam(client,message){let scope=await getScope(client,{resolveLocalScope:!0});if(scope.org.type==="team"){client.config.currentTeam=scope.org.id;return}let org=await selectOrg(client,message,!1);if(org.type!=="team")throw new Error("Connect requires a team. Re-run and select a team to continue.");client.config.currentTeam=org.id,client.writeToConfigFile()}import{randomBytes,createHash as createHash2}from"node:crypto";var POLL_INTERVAL_MS=2e3,MAX_POLL_DURATION_MS=115*60*1e3,MAX_EARLY_404_COUNT=3;function generateRequestCode(){let verifier=randomBytes(37).toString("base64url"),requestCode=createHash2("sha256").update(verifier).digest("base64url");return{verifier,requestCode}}async function awaitConnexResult(client,verifier){let deadline=Date.now()+MAX_POLL_DURATION_MS,early404Count=0,lastProgress;for(;Date.now()<deadline;){await sleep(POLL_INTERVAL_MS);try{let result=await client.fetch(`/v1/connect/result/${encodeURIComponent(verifier)}`);if(result.status==="success"&&result.data)return result.data;if(result.status==="partial"&&result.data){if(result.progress&&result.progress!==lastProgress){lastProgress=result.progress,output_manager_default.stopSpinner();let clientId=result.data.clientId;clientId&&output_manager_default.log(`Connector created: ${clientId}`),output_manager_default.spinner(`${result.progress}...`)}continue}if(result.status==="error"&&result.error)return output_manager_default.error(`Setup failed: ${result.error.message} (${result.error.code})`),null;if(result.status==="canceled")return output_manager_default.error("Setup was canceled in the browser."),null}catch(err){if(err.status===404){if(early404Count++,early404Count>MAX_EARLY_404_COUNT)return output_manager_default.error("Setup request expired. Please try again."),null;output_manager_default.debug(`Polling 404 (${early404Count}/${MAX_EARLY_404_COUNT}), will retry`);continue}output_manager_default.debug(`Polling error (will retry): ${err}`)}}return output_manager_default.error("Timed out waiting for setup to complete. Please try again."),null}import{readFile as readFile2,stat as stat2}from"node:fs/promises";import{resolve as resolve5}from"node:path";import{createHash as createHash3}from"node:crypto";var MAX_ICON_BYTES=5*1024*1024,MIN_IMAGE_BYTES=12,IMAGE_SIGNATURES=[/^ffd8ffdb/,/^ffd8ffe000104a4649460001/,/^ffd8ffee/,/^ffd8ffe1.{4}457869660000/,/^ffd8ffe0/,/^89504e470d0a1a0a/];function isImageBuffer(buf){if(buf.length<MIN_IMAGE_BYTES)return!1;let hex=buf.subarray(0,MIN_IMAGE_BYTES).toString("hex");return IMAGE_SIGNATURES.some(re=>re.test(hex))}async function prepareConnexIcon(filePath,cwd){let absPath=resolve5(cwd,filePath),size;try{size=(await stat2(absPath)).size}catch(err){throw new Error(`Could not read icon file at "${filePath}": ${err.message}`)}if(size>MAX_ICON_BYTES)throw new Error(`Icon file at "${filePath}" is ${size} bytes; maximum is ${MAX_ICON_BYTES} bytes (5 MB).`);let buf;try{buf=await readFile2(absPath)}catch(err){throw new Error(`Could not read icon file at "${filePath}": ${err.message}`)}if(!isImageBuffer(buf))throw new Error(`Icon file at "${filePath}" is not a PNG or JPEG.`);let sha=createHash3("sha1").update(new Uint8Array(buf)).digest("hex");return{buf,sha}}async function uploadConnexIcon(client,prepared){try{await client.fetch("/v2/files",{method:"POST",json:!1,body:prepared.buf,headers:{"Content-Type":"application/octet-stream","Content-Length":String(prepared.buf.byteLength),"x-now-digest":prepared.sha,"x-now-size":String(prepared.buf.byteLength)}})}catch(err){let e2=err;throw new Error(`Failed to upload icon: ${e2.serverMessage??e2.message}`)}return prepared.sha}var import_chalk58=__toESM(require_source(),1);var CONNEX_REDIRECT_URI="https://connect.vercel.com/callback",ConnexMethodError=class extends Error{},ENDPOINT_IDENTITY_KEYS=new Set(["serverConfig","serverUrl","discoveryServerUrl"]),SECRET_KEY_PATTERN=/secret|password|passwd|token|api[-_]?key|private[-_]?key|credential/i,CHOICE_INDENT=" ";async function fetchConnexServiceInfo(client,service,opts={}){try{return await client.fetch(`/v1/connect/services/${encodeURIComponent(service)}?schemas=true`,opts)}catch(err){if(err.status===404)return;throw err}}function parseConnexParams(values){let params={},warnings=[];for(let raw of values??[]){let separator=raw.indexOf("=");if(separator<=0)throw new ConnexMethodError(`Invalid --param "${raw}". Use --param KEY=VALUE.`);let key=raw.slice(0,separator).trim(),value=raw.slice(separator+1);if(!key)throw new ConnexMethodError(`Invalid --param "${raw}". Use --param KEY=VALUE.`);key in params&&warnings.push(`--param ${key} was passed more than once. Using the last value.`),params[key]=value}return{params,warnings}}function formatMethodOptions(methods){return methods.map(method=>`${method.connectionMethod} (${method.label})`).join(", ")}function formatTargetOptions(targets2){return targets2.map(target=>`${target.target} (${target.label})`).join(", ")}function createPathBadge(method){if(method.create.managed===!0)return"automatic registration";if(method.create.manual)return"bring your own credentials"}function soleTargetOf(method){return method.targets?.length===1?method.targets[0]:void 0}function renderConnexMarkdown(markdown){return markdown.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(_match,text3,url)=>linksToSameTarget(text3,url)?output_manager_default.link(text3,url,{fallback:()=>import_chalk58.default.cyan(url)}):output_manager_default.link(text3,url)).replace(/\*\*([^*]+)\*\*/g,(_match,text3)=>import_chalk58.default.bold(text3))}function connexMarkdownToPlainText(markdown){return markdown.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(_match,text3,url)=>linksToSameTarget(text3,url)?url:`${text3} (${url})`).replace(/\*\*([^*]+)\*\*/g,"$1")}function linksToSameTarget(text3,url){let normalize=value=>value.trim().replace(/^https?:\/\//,"").replace(/\/+$/,"").toLowerCase();return normalize(text3)===normalize(url)}function buildMethodGuidance(method,serviceName){let lines=[];if(method.type.type!=="api-key"){let registerUrl=method.settingsUrl??method.docUrl;lines.push(registerUrl?`Register an OAuth app for ${serviceName} at ${import_chalk58.default.cyan(registerUrl)} and copy its Client ID and Client Secret.`:`Register an OAuth app for ${serviceName} and copy its Client ID and Client Secret.`),lines.push(`Add ${import_chalk58.default.cyan(CONNEX_REDIRECT_URI)} as a redirect URI in that app.`),method.docUrl&&method.docUrl!==registerUrl&&lines.push(`Docs: ${import_chalk58.default.cyan(method.docUrl)}`)}return method.instructions&&lines.push(renderConnexMarkdown(method.instructions)),lines}function isSecretInputKey(method,key){let encrypted=method.type.encryptedFields;return encrypted&&encrypted.length>0?encrypted.includes(key):SECRET_KEY_PATTERN.test(key)}function needsCredentialPrompt(method,key,suppliedData){if(ENDPOINT_IDENTITY_KEYS.has(key)||suppliedData&&key in suppliedData)return!1;let defaults=method.type.createInputDefaults;return!(defaults&&key in defaults)}function describeCredentialFields(method){if(method.type.type==="oauth")return"clientId (required), clientSecret";if(method.type.type==="api-key")return'values: [{ "value": "<api key>" }]'}async function collectMethodCredentials(client,method,suppliedData,interactive,onFirstPrompt){let data={...suppliedData},announced=!1,announce=()=>{announced||(announced=!0,onFirstPrompt?.())};if(method.type.type==="oauth"){if(needsCredentialPrompt(method,"clientId",suppliedData)){if(!interactive)throw missingCredentialsError(method);announce(),data.clientId=await promptCredential(client,method,{key:"clientId",message:"Client ID",required:!0})}if(interactive&&needsCredentialPrompt(method,"clientSecret",suppliedData)){announce();let secret=await promptCredential(client,method,{key:"clientSecret",message:`Client Secret ${import_chalk58.default.dim("leave blank for a public client")}`,required:!1});secret&&(data.clientSecret=secret)}return data}if(method.type.type==="api-key"){if(data.values===void 0){if(!interactive)throw missingCredentialsError(method);announce();let value=await promptCredential(client,method,{key:"value",message:method.label,required:!0});data.values=[{value}]}return data}if(suppliedData===void 0){let schema=method.type.createInputSchema,hint=schema?`
295
295
 
296
296
  Expected --data schema for connection method "${method.connectionMethod}":
297
297
  ${JSON.stringify(schema,null,2)}`:"";throw new ConnexMethodError(`Connection method "${method.connectionMethod}" needs credentials passed with --data. Pass --data @<path> to read from a file.${hint}`)}return data}async function promptCredential(client,method,opts){let validate=opts.required?value=>value.trim().length>0||`${opts.key} is required.`:void 0;return(isSecretInputKey(method,opts.key)?await client.input.password({message:opts.message,mask:!0,validate}):await client.input.text({message:opts.message,validate})).trim()}function missingCredentialsError(method){let fields=describeCredentialFields(method),withFields=fields?` with: ${fields}`:"";return new ConnexMethodError(`Missing credentials. Provide --data${withFields}. Pass --data @<path> to read from a file.`)}async function resolveConnexConnectionMethod(client,opts){let{methods,targets:targets2,connectionMethodFlag,targetFlag}=opts;if(methods.length===0)throw new ConnexMethodError(`"${opts.service}" doesn't publish connection methods.`);let explicitTarget=targetFlag?validateTarget(targetFlag,targets2,opts.service):void 0;if(connectionMethodFlag){let method2=methods.find(candidate=>candidate.connectionMethod===connectionMethodFlag);if(!method2)throw new ConnexMethodError(`Unknown connection method "${connectionMethodFlag}" for "${opts.service}". Available: ${formatMethodOptions(methods)}.`);if(explicitTarget&&!servesTarget(method2,explicitTarget))throw new ConnexMethodError(`Connection method "${method2.connectionMethod}" doesn't connect to target "${explicitTarget}".`);return{method:method2,target:explicitTarget??soleTargetOf(method2)}}if(opts.resolvedConnectionMethod){let method2=methods.find(candidate=>candidate.connectionMethod===opts.resolvedConnectionMethod);if(method2&&(!explicitTarget||servesTarget(method2,explicitTarget)))return opts.interactive&&!opts.skipConfirm&&await confirmMethodSelection(client,opts.serviceName,method2),{method:method2,target:explicitTarget??soleTargetOf(method2)}}let width=choiceWidth(client),chosenTarget=explicitTarget;!chosenTarget&&targets2&&targets2.length>1&&opts.interactive&&(printOptionCatalog(`${opts.serviceName} products:`,targets2.map(target2=>({label:target2.label,description:target2.description,docsUrl:target2.docsUrl})),width),chosenTarget=await client.input.select({message:"What do you want to connect to?",choices:targets2.map(target2=>({name:choiceLabel(target2.label,width),value:target2.target}))}));let candidates=chosenTarget?methods.filter(method2=>servesTarget(method2,chosenTarget)):methods;if(candidates.length===0)throw new ConnexMethodError(`No connection method for "${opts.service}" connects to target "${chosenTarget}".`);if(candidates.length>1){if(!opts.interactive)throw new ConnexMethodError(`Missing --connection-method. "${opts.service}" supports: ${formatMethodOptions(candidates)}. Re-run with --connection-method <value>.`);printOptionCatalog(`Connection methods for ${opts.serviceName}:`,candidates.map(method3=>({label:method3.label,badge:createPathBadge(method3),description:method3.description,docsUrl:method3.docUrl})),width);let slug=await client.input.select({message:`How do you want to connect to ${opts.serviceName}?`,choices:candidates.map(method3=>({name:choiceLabel(method3.label,width),value:method3.connectionMethod}))}),method2=candidates.find(candidate=>candidate.connectionMethod===slug);if(!method2)throw new ConnexMethodError(`Unknown connection method "${slug}".`);return{method:method2,target:chosenTarget??soleTargetOf(method2)}}let method=candidates[0],target=chosenTarget??soleTargetOf(method);return opts.interactive&&!opts.skipConfirm&&await confirmMethodSelection(client,opts.serviceName,method),{method,target}}async function confirmMethodSelection(client,serviceName,method){let badge=createPathBadge(method),suffix=badge?` (${badge})`:"";if(!await client.input.confirm(`Connect to ${serviceName} with ${method.label}${suffix}?`,!0))throw new ConnexMethodError("Canceled.")}async function collectTemplateParams(client,method,suppliedParams,interactive){let fields=method.templateFields??[];if(fields.length===0){if(Object.keys(suppliedParams).length>0)throw new ConnexMethodError(`Connection method "${method.connectionMethod}" takes no --param values.`);return{}}let known=new Set(fields.map(field=>field.key));for(let key of Object.keys(suppliedParams))if(!known.has(key))throw new ConnexMethodError(`Unknown --param "${key}" for connection method "${method.connectionMethod}". Valid keys: ${fields.map(field=>field.key).join(", ")}.`);let params={};for(let field of fields){let supplied=(suppliedParams[field.key]??"").trim();if(supplied){let problem=templateValueProblem(field,supplied);if(problem)throw new ConnexMethodError(`Invalid --param ${field.key}="${supplied}". ${problem}`);params[field.key]=supplied;continue}if(interactive){let answer=await client.input.text({message:promptMessage(field),default:field.default,validate:value=>{let trimmed=value.trim();return trimmed?templateValueProblem(field,trimmed)??!0:`${field.label} is required.`}});params[field.key]=answer.trim();continue}if(field.default!==void 0){params[field.key]=field.default;continue}throw new ConnexMethodError(`Missing --param ${field.key}=<value> (${describeField(field)}) for connection method "${method.connectionMethod}".`)}return params}function promptMessage(field){let hints=[];return field.placeholder&&hints.push(`e.g. ${field.placeholder}`),field.help&&hints.push(field.help),hints.length>0?`${field.label} ${import_chalk58.default.dim(hints.join(" \xB7 "))}`:field.label}function describeField(field){return field.placeholder?`"${field.label}", e.g. ${field.placeholder}`:`"${field.label}"`}var HOSTNAME_RE=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$/i;function templateValueProblem(field,value){let sample=field.default??field.placeholder;if(!(!sample||!HOSTNAME_RE.test(sample)||HOSTNAME_RE.test(value)))return`Enter a hostname like ${sample}, without the https:// prefix.`}function printOptionCatalog(heading,entries,width){if(entries.some(entry2=>entry2.description||entry2.docsUrl)){output_manager_default.print(`
@@ -330,7 +330,7 @@ ${actionUrl}`),(0,import_open4.default)(actionUrl).catch(err=>output_manager_def
330
330
  `),0):client.stdout.isTTY?(output_manager_default.print(`Opening connector ${import_chalk67.default.bold(clientIdOrUid)} in the dashboard\u2026
331
331
  `),(0,import_open5.default)(url),0):(client.stdout.write(`${url}
332
332
  `),0)}var ContactsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}},ContactsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentConnector(v){v&&this.trackCliArgument({arg:"connector",value:this.redactedValue})}trackCliOptionPhoneNumber(v){v&&this.trackCliOption({option:"phone-number",value:this.redactedValue})}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliFlagJson(v){v&&this.trackCliFlag("json")}};var import_chalk68=__toESM(require_source(),1);async function add2(client,argv){let telemetry2=new ContactsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(contactsAddSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs;telemetry2.trackCliArgumentConnector(args[0]),telemetry2.trackCliOptionPhoneNumber(flags["--phone-number"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let connector=args[0];if(!connector)return output_manager_default.error("Missing connector ID or UID. Usage: vercel connect contacts add <connector> --phone-number <phone-number>"),2;let phoneNumber=flags["--phone-number"];if(!phoneNumber)return output_manager_default.error("Missing phone number. Provide one with `--phone-number`."),2;if(!/^\+[1-9]\d{1,14}$/.test(phoneNumber))return output_manager_default.error("Invalid phone number. Provide an E.164 number (e.g. +12025551234)."),2;await selectConnexTeam(client,"Select the team for this connector"),output_manager_default.spinner("Adding contact\u2026");let verification;try{verification=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(connector)}/contacts`,{method:"POST",body:{phoneNumber}})}catch(err){return output_manager_default.stopSpinner(),printError(err),1}if(output_manager_default.stopSpinner(),formatResult.jsonOutput)return client.stdout.write(`${JSON.stringify(verification,null,2)}
333
- `),0;let safePhoneNumber=sanitizeForTerminal(phoneNumber);return output_manager_default.success(`Contact ${import_chalk68.default.bold(safePhoneNumber)} added.`),verification.instructions&&output_manager_default.log(sanitizeForTerminal(verification.instructions)),0}var COMMAND_CONFIG22={add:getCommandAliases(contactsAddSubcommand)};async function contacts(client){let telemetry2=new ContactsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(contactsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args:subArgs}=getSubcommand7(parsedArgs.args,COMMAND_CONFIG22),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("connect contacts"),output_manager_default.print(help(contactsSubcommand,{parent:connexCommand,columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:contactsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("connect contacts",subcommandOriginal),printHelp(contactsAddSubcommand),0):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add2(client,subArgs));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG22)),output_manager_default.print(help(contactsSubcommand,{parent:connexCommand,columns:client.stderr.columns})),2}}var COMMAND_CONFIG23={create:getCommandAliases(createSubcommand2),update:getCommandAliases(updateSubcommand),list:getCommandAliases(listSubcommand8),token:getCommandAliases(tokenSubcommand),attach:getCommandAliases(attachSubcommand),detach:getCommandAliases(detachSubcommand),remove:getCommandAliases(removeSubcommand4),"revoke-tokens":getCommandAliases(revokeTokensSubcommand),open:getCommandAliases(openSubcommand2),contacts:getCommandAliases(contactsSubcommand)};async function connex(client){let telemetry2=new ConnexTelemetryClient({opts:{store:client.telemetryEventStore}}),{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(connexCommand.options),{permissive:!0}),{subcommand,subcommandOriginal,args:subArgs}=getSubcommand7(args.slice(1),COMMAND_CONFIG23),needHelp=flags["--help"];function printHelp(command2,options){output_manager_default.print(help(command2,{...options,columns:client.stderr.columns,parent:connexCommand}))}function printHelpToStdout(command2,options){client.stdout.write(help(command2,{...options,columns:client.stderr.columns,parent:connexCommand}))}if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("connect"),output_manager_default.print(help(connexCommand,{columns:client.stderr.columns})),0;try{switch(subcommand){case"create":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),await printCreateDynamicHelp(client,findHelpServiceArg(subArgs),createSubcommand2,printHelpToStdout)||printHelpToStdout(createSubcommand2),0;telemetry2.trackCliSubcommandCreate(subcommandOriginal);let createFlagsSpec=getFlagsSpecification(createSubcommand2.options),createParsedArgs=parseArguments(normalizeCreateDataArgs(subArgs),createFlagsSpec);return telemetry2.trackCliArgumentService(createParsedArgs.args[0]),telemetry2.trackCliOptionName(createParsedArgs.flags["--name"]),telemetry2.trackCliOptionIcon(createParsedArgs.flags["--icon"]),telemetry2.trackCliOptionBackgroundColor(createParsedArgs.flags["--background-color"]),telemetry2.trackCliOptionAccentColor(createParsedArgs.flags["--accent-color"]),telemetry2.trackCliOptionData(createParsedArgs.flags["--data"]),telemetry2.trackCliOptionConnectorType(createParsedArgs.flags["--connector-type"]),telemetry2.trackCliOptionTriggerEvent(createParsedArgs.flags["--trigger-event"]),telemetry2.trackCliOptionConnectionMethod(createParsedArgs.flags["--connection-method"]),telemetry2.trackCliOptionTarget(createParsedArgs.flags["--target"]),telemetry2.trackCliOptionParam(createParsedArgs.flags["--param"]),telemetry2.trackCliFlagYes(createParsedArgs.flags["--yes"]),telemetry2.trackCliFlagTriggers(createParsedArgs.flags["--triggers"]),telemetry2.trackCliOptionTriggerPath(createParsedArgs.flags["--trigger-path"]),telemetry2.trackCliOptionTriggerProject(createParsedArgs.flags["--trigger-project"]),telemetry2.trackCliOptionTriggerBranch(createParsedArgs.flags["--trigger-branch"]),telemetry2.trackCliOptionTriggerEnvironment(createParsedArgs.flags["--trigger-environment"]),telemetry2.trackCliOptionFormat(createParsedArgs.flags["--format"]),await create3(client,createParsedArgs.args,createParsedArgs.flags)}case"update":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(updateSubcommand),0;telemetry2.trackCliSubcommandUpdate(subcommandOriginal);let updateFlagsSpec=getFlagsSpecification(updateSubcommand.options),updateParsedArgs=parseArguments(subArgs,updateFlagsSpec);return telemetry2.trackCliArgumentId(updateParsedArgs.args[0]),telemetry2.trackCliOptionIcon(updateParsedArgs.flags["--icon"]),telemetry2.trackCliOptionBackgroundColor(updateParsedArgs.flags["--background-color"]),telemetry2.trackCliOptionAccentColor(updateParsedArgs.flags["--accent-color"]),telemetry2.trackCliOptionFormat(updateParsedArgs.flags["--format"]),await update(client,updateParsedArgs.args,updateParsedArgs.flags)}case"list":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(listSubcommand8),0;telemetry2.trackCliSubcommandList(subcommandOriginal);let listFlagsSpec=getFlagsSpecification(listSubcommand8.options),listParsedArgs=parseArguments(subArgs,listFlagsSpec);return telemetry2.trackCliFlagAllProjects(listParsedArgs.flags["--all-projects"]),telemetry2.trackCliOptionLimit(listParsedArgs.flags["--limit"]),telemetry2.trackCliOptionNext(listParsedArgs.flags["--next"]),telemetry2.trackCliOptionSearch(listParsedArgs.flags["--search"]),telemetry2.trackCliOptionService(listParsedArgs.flags["--service"]),telemetry2.trackCliOptionType(listParsedArgs.flags["--type"]),telemetry2.trackCliOptionFormat(listParsedArgs.flags["--format"]),await list13(client,listParsedArgs.flags)}case"token":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(tokenSubcommand),0;telemetry2.trackCliSubcommandToken(subcommandOriginal);let tokenFlagsSpec=getFlagsSpecification(tokenSubcommand.options),tokenParsedArgs=parseArguments(subArgs,tokenFlagsSpec);return telemetry2.trackCliArgumentId(tokenParsedArgs.args[0]),telemetry2.trackCliOptionSubject(tokenParsedArgs.flags["--subject"]),telemetry2.trackCliOptionInstallationId(tokenParsedArgs.flags["--installation-id"]),telemetry2.trackCliOptionScopes(tokenParsedArgs.flags["--scopes"]),telemetry2.trackCliFlagNoDefaultScopes(tokenParsedArgs.flags["--no-default-scopes"]),telemetry2.trackCliFlagYes(tokenParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(tokenParsedArgs.flags["--format"]),await token(client,tokenParsedArgs.args,tokenParsedArgs.flags)}case"attach":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(attachSubcommand),0;telemetry2.trackCliSubcommandAttach(subcommandOriginal);let attachFlagsSpec=getFlagsSpecification(attachSubcommand.options),attachParsedArgs=parseArguments(subArgs,attachFlagsSpec);return telemetry2.trackCliArgumentClient(attachParsedArgs.args[0]),telemetry2.trackCliOptionEnvironment(attachParsedArgs.flags["--environment"]),telemetry2.trackCliOptionProject(attachParsedArgs.flags["--project"]),telemetry2.trackCliFlagTriggers(attachParsedArgs.flags["--triggers"]),telemetry2.trackCliOptionTriggerBranch(attachParsedArgs.flags["--trigger-branch"]),telemetry2.trackCliOptionTriggerEnvironment(attachParsedArgs.flags["--trigger-environment"]),telemetry2.trackCliOptionTriggerPath(attachParsedArgs.flags["--trigger-path"]),telemetry2.trackCliFlagYes(attachParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(attachParsedArgs.flags["--format"]),await attach(client,attachParsedArgs.args,attachParsedArgs.flags)}case"detach":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(detachSubcommand),0;telemetry2.trackCliSubcommandDetach(subcommandOriginal);let detachFlagsSpec=getFlagsSpecification(detachSubcommand.options),detachParsedArgs=parseArguments(subArgs,detachFlagsSpec);return telemetry2.trackCliArgumentClient(detachParsedArgs.args[0]),telemetry2.trackCliOptionProject(detachParsedArgs.flags["--project"]),telemetry2.trackCliFlagYes(detachParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(detachParsedArgs.flags["--format"]),await detach(client,detachParsedArgs.args,detachParsedArgs.flags)}case"remove":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(removeSubcommand4),0;telemetry2.trackCliSubcommandRemove(subcommandOriginal);let removeFlagsSpec=getFlagsSpecification(removeSubcommand4.options),removeParsedArgs=parseArguments(subArgs,removeFlagsSpec);return telemetry2.trackCliArgumentClient(removeParsedArgs.args[0]),telemetry2.trackCliFlagYes(removeParsedArgs.flags["--yes"]),telemetry2.trackCliFlagDisconnectAll(removeParsedArgs.flags["--disconnect-all"]),telemetry2.trackCliOptionFormat(removeParsedArgs.flags["--format"]),await remove7(client,removeParsedArgs.args,removeParsedArgs.flags)}case"revoke-tokens":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(revokeTokensSubcommand),0;telemetry2.trackCliSubcommandRevokeTokens(subcommandOriginal);let revokeTokensFlagsSpec=getFlagsSpecification(revokeTokensSubcommand.options),revokeTokensParsedArgs=parseArguments(subArgs,revokeTokensFlagsSpec);return telemetry2.trackCliArgumentId(revokeTokensParsedArgs.args[0]),telemetry2.trackCliFlagMyTokens(revokeTokensParsedArgs.flags["--my-tokens"]),telemetry2.trackCliFlagAllTokens(revokeTokensParsedArgs.flags["--all-tokens"]),telemetry2.trackCliFlagYes(revokeTokensParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(revokeTokensParsedArgs.flags["--format"]),await revokeTokens(client,revokeTokensParsedArgs.args,revokeTokensParsedArgs.flags)}case"contacts":return telemetry2.trackCliSubcommandContacts(subcommandOriginal),await contacts(client);case"open":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(openSubcommand2),0;telemetry2.trackCliSubcommandOpen(subcommandOriginal);let openFlagsSpec=getFlagsSpecification(openSubcommand2.options),openParsedArgs=parseArguments(subArgs,openFlagsSpec);return telemetry2.trackCliOptionFormat(openParsedArgs.flags["--format"]),await openClient(client,openParsedArgs.args,openParsedArgs.flags)}default:{let validSubcommands=Object.keys(COMMAND_CONFIG23).join(" | "),missingSubcommand=subArgs.length===0,message=missingSubcommand?`Please specify a valid subcommand: ${validSubcommands}`:`Unknown subcommand "${subArgs[0]}". Valid subcommands: ${validSubcommands}`;return outputAgentError(client,{status:"error",reason:missingSubcommand?AGENT_REASON.MISSING_ARGUMENTS:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"connect --help",packageName,{prependGlobalFlags:!0}),when:"Show all connect subcommands and options"}]},2),output_manager_default.error(message),2}}}catch(err){return printError(err,client),isArgumentError(err)?2:1}}function findHelpServiceArg(subArgs){try{let{args}=parseArguments(normalizeCreateDataArgs(subArgs),getFlagsSpecification(createSubcommand2.options),{permissive:!0});return args.find(arg=>!arg.startsWith("-"))}catch{return}}function normalizeCreateDataArgs(args){let normalized=[];for(let i=0;i<args.length;i++){let arg=args[i];if(normalized.push(arg),arg==="--data"){let next=args[i+1];(next===void 0||next.startsWith("-"))&&normalized.push("")}}return normalized}var import_chalk69=__toESM(require_source(),1);var ContractTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var import_error_utils7=__toESM(require_dist(),1);function formatCurrency(amount){return`$${amount.toFixed(4)}`}function formatQuantity(quantity,unit){return unit==="USD"?`$${quantity.toFixed(4)}`:quantity.toFixed(4)}function extractDatePortion(isoString){return isoString.slice(0,10)}async function contract(client){let{print,log,error,spinner}=output_manager_default,flagsSpecification=getFlagsSpecification(contractCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry2=new ContractTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("contract"),print(help(contractCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]);let contextName,teamId;try{let scope=await getScope(client);contextName=scope.contextName,teamId=scope.team?.id}catch(err){if((0,import_error_utils7.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let start=Date.now();asJson||spinner(`Fetching contract commitments for ${import_chalk69.default.bold(contextName)}`);let query=new URLSearchParams;teamId&&query.set("teamId",teamId);try{let response=await client.fetch(`/v1/billing/contract-commitments?${query}`,{json:!1,useCurrentTeam:!1});if(!response.ok){let errorText=await response.text();return error(`Failed to fetch contract commitments: ${response.status} ${errorText}`),1}let text3=await response.text(),data=text3?JSON.parse(text3):null,commitments=Array.isArray(data)?data:[];if(asJson){let jsonOutput={context:contextName,commitments:commitments.map(c=>({contractId:c.ContractId,contractPeriodStart:c.ContractPeriodStart,contractPeriodEnd:c.ContractPeriodEnd,commitmentId:c.ContractCommitmentId,commitmentType:c.ContractCommitmentType,commitmentCategory:c.ContractCommitmentCategory,commitmentPeriodStart:c.ContractCommitmentPeriodStart,commitmentPeriodEnd:c.ContractCommitmentPeriodEnd,commitmentCost:c.ContractCommitmentCost,commitmentQuantity:c.ContractCommitmentQuantity,commitmentUnit:c.ContractCommitmentUnit,billingCurrency:c.BillingCurrency,description:c.ContractCommitmentDescription})),totalCommitments:commitments.length};return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
333
+ `),0;let safePhoneNumber=sanitizeForTerminal(phoneNumber);return output_manager_default.success(`Contact ${import_chalk68.default.bold(safePhoneNumber)} added.`),verification.instructions&&output_manager_default.log(sanitizeForTerminal(verification.instructions)),0}var COMMAND_CONFIG22={add:getCommandAliases(contactsAddSubcommand)};async function contacts(client){let telemetry2=new ContactsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(contactsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args:subArgs}=getSubcommand7(parsedArgs.args,COMMAND_CONFIG22),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("connect contacts"),output_manager_default.print(help(contactsSubcommand,{parent:connexCommand,columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:contactsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("connect contacts",subcommandOriginal),printHelp(contactsAddSubcommand),0):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add2(client,subArgs));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG22)),output_manager_default.print(help(contactsSubcommand,{parent:connexCommand,columns:client.stderr.columns})),2}}var COMMAND_CONFIG23={create:getCommandAliases(createSubcommand2),update:getCommandAliases(updateSubcommand),list:getCommandAliases(listSubcommand8),token:getCommandAliases(tokenSubcommand),attach:getCommandAliases(attachSubcommand),detach:getCommandAliases(detachSubcommand),remove:getCommandAliases(removeSubcommand4),"revoke-tokens":getCommandAliases(revokeTokensSubcommand),open:getCommandAliases(openSubcommand2),contacts:getCommandAliases(contactsSubcommand)};async function connex(client){let telemetry2=new ConnexTelemetryClient({opts:{store:client.telemetryEventStore}}),{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(connexCommand.options),{permissive:!0}),{subcommand,subcommandOriginal,args:subArgs}=getSubcommand7(args.slice(1),COMMAND_CONFIG23),needHelp=flags["--help"];function printHelp(command2,options){output_manager_default.print(help(command2,{...options,columns:client.stderr.columns,parent:connexCommand}))}function printHelpToStdout(command2,options){client.stdout.write(help(command2,{...options,columns:client.stderr.columns,parent:connexCommand}))}if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("connect"),output_manager_default.print(help(connexCommand,{columns:client.stderr.columns})),0;try{switch(subcommand){case"create":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),await printCreateDynamicHelp(client,findHelpServiceArg(subArgs),createSubcommand2,printHelpToStdout)||printHelpToStdout(createSubcommand2),0;telemetry2.trackCliSubcommandCreate(subcommandOriginal);let createFlagsSpec=getFlagsSpecification(createSubcommand2.options),createParsedArgs=parseArguments(normalizeCreateDataArgs(subArgs),createFlagsSpec);return telemetry2.trackCliArgumentService(createParsedArgs.args[0]),telemetry2.trackCliOptionName(createParsedArgs.flags["--name"]),telemetry2.trackCliOptionIcon(createParsedArgs.flags["--icon"]),telemetry2.trackCliOptionBackgroundColor(createParsedArgs.flags["--background-color"]),telemetry2.trackCliOptionAccentColor(createParsedArgs.flags["--accent-color"]),telemetry2.trackCliOptionData(createParsedArgs.flags["--data"]),telemetry2.trackCliOptionConnectorType(createParsedArgs.flags["--connector-type"]),telemetry2.trackCliOptionTriggerEvent(createParsedArgs.flags["--trigger-event"]),telemetry2.trackCliOptionConnectionMethod(createParsedArgs.flags["--connection-method"]),telemetry2.trackCliOptionTarget(createParsedArgs.flags["--target"]),telemetry2.trackCliOptionParam(createParsedArgs.flags["--param"]),telemetry2.trackCliFlagYes(createParsedArgs.flags["--yes"]),telemetry2.trackCliFlagTriggers(createParsedArgs.flags["--triggers"]),telemetry2.trackCliOptionTriggerPath(createParsedArgs.flags["--trigger-path"]),telemetry2.trackCliOptionTriggerProject(createParsedArgs.flags["--trigger-project"]),telemetry2.trackCliOptionTriggerBranch(createParsedArgs.flags["--trigger-branch"]),telemetry2.trackCliOptionTriggerEnvironment(createParsedArgs.flags["--trigger-environment"]),telemetry2.trackCliOptionFormat(createParsedArgs.flags["--format"]),await create3(client,createParsedArgs.args,createParsedArgs.flags)}case"update":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(updateSubcommand),0;telemetry2.trackCliSubcommandUpdate(subcommandOriginal);let updateFlagsSpec=getFlagsSpecification(updateSubcommand.options),updateParsedArgs=parseArguments(subArgs,updateFlagsSpec);return telemetry2.trackCliArgumentId(updateParsedArgs.args[0]),telemetry2.trackCliOptionIcon(updateParsedArgs.flags["--icon"]),telemetry2.trackCliOptionBackgroundColor(updateParsedArgs.flags["--background-color"]),telemetry2.trackCliOptionAccentColor(updateParsedArgs.flags["--accent-color"]),telemetry2.trackCliOptionFormat(updateParsedArgs.flags["--format"]),await update(client,updateParsedArgs.args,updateParsedArgs.flags)}case"list":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(listSubcommand8),0;telemetry2.trackCliSubcommandList(subcommandOriginal);let listFlagsSpec=getFlagsSpecification(listSubcommand8.options),listParsedArgs=parseArguments(subArgs,listFlagsSpec);return telemetry2.trackCliFlagAllProjects(listParsedArgs.flags["--all-projects"]),telemetry2.trackCliOptionLimit(listParsedArgs.flags["--limit"]),telemetry2.trackCliOptionNext(listParsedArgs.flags["--next"]),telemetry2.trackCliOptionSearch(listParsedArgs.flags["--search"]),telemetry2.trackCliOptionService(listParsedArgs.flags["--service"]),telemetry2.trackCliOptionType(listParsedArgs.flags["--type"]),telemetry2.trackCliOptionFormat(listParsedArgs.flags["--format"]),await list13(client,listParsedArgs.flags)}case"token":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(tokenSubcommand),0;telemetry2.trackCliSubcommandToken(subcommandOriginal);let tokenFlagsSpec=getFlagsSpecification(tokenSubcommand.options),tokenParsedArgs=parseArguments(subArgs,tokenFlagsSpec);return telemetry2.trackCliArgumentId(tokenParsedArgs.args[0]),telemetry2.trackCliOptionSubject(tokenParsedArgs.flags["--subject"]),telemetry2.trackCliOptionInstallationId(tokenParsedArgs.flags["--installation-id"]),telemetry2.trackCliOptionScopes(tokenParsedArgs.flags["--scopes"]),telemetry2.trackCliFlagNoDefaultScopes(tokenParsedArgs.flags["--no-default-scopes"]),telemetry2.trackCliFlagYes(tokenParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(tokenParsedArgs.flags["--format"]),await token(client,tokenParsedArgs.args,tokenParsedArgs.flags)}case"attach":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(attachSubcommand),0;telemetry2.trackCliSubcommandAttach(subcommandOriginal);let attachFlagsSpec=getFlagsSpecification(attachSubcommand.options),attachParsedArgs=parseArguments(subArgs,attachFlagsSpec);return telemetry2.trackCliArgumentClient(attachParsedArgs.args[0]),telemetry2.trackCliOptionEnvironment(attachParsedArgs.flags["--environment"]),telemetry2.trackCliOptionProject(attachParsedArgs.flags["--project"]),telemetry2.trackCliFlagTriggers(attachParsedArgs.flags["--triggers"]),telemetry2.trackCliOptionTriggerBranch(attachParsedArgs.flags["--trigger-branch"]),telemetry2.trackCliOptionTriggerEnvironment(attachParsedArgs.flags["--trigger-environment"]),telemetry2.trackCliOptionTriggerPath(attachParsedArgs.flags["--trigger-path"]),telemetry2.trackCliFlagYes(attachParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(attachParsedArgs.flags["--format"]),await attach(client,attachParsedArgs.args,attachParsedArgs.flags)}case"detach":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(detachSubcommand),0;telemetry2.trackCliSubcommandDetach(subcommandOriginal);let detachFlagsSpec=getFlagsSpecification(detachSubcommand.options),detachParsedArgs=parseArguments(subArgs,detachFlagsSpec);return telemetry2.trackCliArgumentClient(detachParsedArgs.args[0]),telemetry2.trackCliOptionProject(detachParsedArgs.flags["--project"]),telemetry2.trackCliFlagYes(detachParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(detachParsedArgs.flags["--format"]),await detach(client,detachParsedArgs.args,detachParsedArgs.flags)}case"remove":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(removeSubcommand4),0;telemetry2.trackCliSubcommandRemove(subcommandOriginal);let removeFlagsSpec=getFlagsSpecification(removeSubcommand4.options),removeParsedArgs=parseArguments(subArgs,removeFlagsSpec);return telemetry2.trackCliArgumentClient(removeParsedArgs.args[0]),telemetry2.trackCliFlagYes(removeParsedArgs.flags["--yes"]),telemetry2.trackCliFlagDisconnectAll(removeParsedArgs.flags["--disconnect-all"]),telemetry2.trackCliOptionFormat(removeParsedArgs.flags["--format"]),await remove7(client,removeParsedArgs.args,removeParsedArgs.flags)}case"revoke-tokens":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(revokeTokensSubcommand),0;telemetry2.trackCliSubcommandRevokeTokens(subcommandOriginal);let revokeTokensFlagsSpec=getFlagsSpecification(revokeTokensSubcommand.options),revokeTokensParsedArgs=parseArguments(subArgs,revokeTokensFlagsSpec);return telemetry2.trackCliArgumentId(revokeTokensParsedArgs.args[0]),telemetry2.trackCliFlagMyTokens(revokeTokensParsedArgs.flags["--my-tokens"]),telemetry2.trackCliFlagAllTokens(revokeTokensParsedArgs.flags["--all-tokens"]),telemetry2.trackCliFlagYes(revokeTokensParsedArgs.flags["--yes"]),telemetry2.trackCliOptionFormat(revokeTokensParsedArgs.flags["--format"]),await revokeTokens(client,revokeTokensParsedArgs.args,revokeTokensParsedArgs.flags)}case"contacts":return telemetry2.trackCliSubcommandContacts(subcommandOriginal),await contacts(client);case"open":{if(needHelp)return telemetry2.trackCliFlagHelp("connect",subcommandOriginal),printHelp(openSubcommand2),0;telemetry2.trackCliSubcommandOpen(subcommandOriginal);let openFlagsSpec=getFlagsSpecification(openSubcommand2.options),openParsedArgs=parseArguments(subArgs,openFlagsSpec);return telemetry2.trackCliOptionFormat(openParsedArgs.flags["--format"]),await openClient(client,openParsedArgs.args,openParsedArgs.flags)}default:{let validSubcommands=Object.keys(COMMAND_CONFIG23).join(" | "),missingSubcommand=subArgs.length===0,message=missingSubcommand?`Please specify a valid subcommand: ${validSubcommands}`:`Unknown subcommand "${subArgs[0]}". Valid subcommands: ${validSubcommands}`;return outputAgentError(client,{status:"error",reason:missingSubcommand?AGENT_REASON.MISSING_ARGUMENTS:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"connect --help",packageName,{prependGlobalFlags:!0}),when:"Show all connect subcommands and options"}]},2),output_manager_default.error(message),2}}}catch(err){return printError(err,client),isArgumentError(err)?2:1}}function findHelpServiceArg(subArgs){try{let{args}=parseArguments(normalizeCreateDataArgs(subArgs),getFlagsSpecification(createSubcommand2.options),{permissive:!0});return args.find(arg2=>!arg2.startsWith("-"))}catch{return}}function normalizeCreateDataArgs(args){let normalized=[];for(let i=0;i<args.length;i++){let arg2=args[i];if(normalized.push(arg2),arg2==="--data"){let next=args[i+1];(next===void 0||next.startsWith("-"))&&normalized.push("")}}return normalized}var import_chalk69=__toESM(require_source(),1);var ContractTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var import_error_utils7=__toESM(require_dist(),1);function formatCurrency(amount){return`$${amount.toFixed(4)}`}function formatQuantity(quantity,unit){return unit==="USD"?`$${quantity.toFixed(4)}`:quantity.toFixed(4)}function extractDatePortion(isoString){return isoString.slice(0,10)}async function contract(client){let{print,log,error,spinner}=output_manager_default,flagsSpecification=getFlagsSpecification(contractCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry2=new ContractTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("contract"),print(help(contractCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]);let contextName,teamId;try{let scope=await getScope(client);contextName=scope.contextName,teamId=scope.team?.id}catch(err){if((0,import_error_utils7.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let start=Date.now();asJson||spinner(`Fetching contract commitments for ${import_chalk69.default.bold(contextName)}`);let query=new URLSearchParams;teamId&&query.set("teamId",teamId);try{let response=await client.fetch(`/v1/billing/contract-commitments?${query}`,{json:!1,useCurrentTeam:!1});if(!response.ok){let errorText=await response.text();return error(`Failed to fetch contract commitments: ${response.status} ${errorText}`),1}let text3=await response.text(),data=text3?JSON.parse(text3):null,commitments=Array.isArray(data)?data:[];if(asJson){let jsonOutput={context:contextName,commitments:commitments.map(c=>({contractId:c.ContractId,contractPeriodStart:c.ContractPeriodStart,contractPeriodEnd:c.ContractPeriodEnd,commitmentId:c.ContractCommitmentId,commitmentType:c.ContractCommitmentType,commitmentCategory:c.ContractCommitmentCategory,commitmentPeriodStart:c.ContractCommitmentPeriodStart,commitmentPeriodEnd:c.ContractCommitmentPeriodEnd,commitmentCost:c.ContractCommitmentCost,commitmentQuantity:c.ContractCommitmentQuantity,commitmentUnit:c.ContractCommitmentUnit,billingCurrency:c.BillingCurrency,description:c.ContractCommitmentDescription})),totalCommitments:commitments.length};return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
334
334
  `),0}if(log(`Contract commitments for ${import_chalk69.default.bold(contextName)} ${elapsed(Date.now()-start)}`),log(""),commitments.length===0)return log("No contract commitments found."),0;let contractGroups=new Map;for(let commitment of commitments){let existing=contractGroups.get(commitment.ContractId)||[];existing.push(commitment),contractGroups.set(commitment.ContractId,existing)}for(let[contractId,contractCommitments]of contractGroups){let firstCommitment=contractCommitments[0];log(import_chalk69.default.bold(`Contract: ${contractId}`)),log(`${import_chalk69.default.gray("Period:")} ${extractDatePortion(firstCommitment.ContractPeriodStart)} to ${extractDatePortion(firstCommitment.ContractPeriodEnd)}`),log("");let headers=["Type","Category","Period","Commitment","Description"],rows=contractCommitments.map(c=>{let periodStr=`${extractDatePortion(c.ContractCommitmentPeriodStart)} - ${extractDatePortion(c.ContractCommitmentPeriodEnd)}`,commitmentValue;return c.ContractCommitmentCategory==="Spend"&&c.ContractCommitmentCost!==void 0?commitmentValue=formatCurrency(c.ContractCommitmentCost):c.ContractCommitmentCategory==="Usage"&&c.ContractCommitmentQuantity!==void 0?commitmentValue=formatQuantity(c.ContractCommitmentQuantity,c.ContractCommitmentUnit):commitmentValue="-",[c.ContractCommitmentType,c.ContractCommitmentCategory,periodStr,commitmentValue,c.ContractCommitmentDescription||"-"]}),tablePrint=table([headers.map(h=>import_chalk69.default.bold(import_chalk69.default.cyan(h))),...rows],{hsep:3,align:["l","l","l","r","l"]}).replace(/^/gm," ");print(`${tablePrint}
335
335
 
336
336
  `)}return log(`${import_chalk69.default.gray("Total commitments:")} ${commitments.length}`),0}catch(err){return output_manager_default.prettyError(err),1}}var import_chalk70=__toESM(require_source(),1);var import_error_utils8=__toESM(require_dist(),1);import{readFileSync}from"fs";import{resolve as resolve7}from"path";async function createCertFromFile(client,keyPath2,certPath,caPath){output_manager_default.spinner("Adding your custom certificate");try{let cert=readFileSync(resolve7(certPath),"utf8"),key=readFileSync(resolve7(keyPath2),"utf8"),ca=readFileSync(resolve7(caPath),"utf8");return await client.fetch("/v3/certs",{method:"PUT",body:{ca,cert,key}})}catch(err){if((0,import_error_utils8.isErrnoException)(err)&&err.code==="ENOENT")return new Error(`The specified file "${err.path}" doesn't exist.`);if(isAPIError(err)&&err.status<500)return err;throw err}}var CertsAddTelemetryClient=class extends TelemetryClient{trackCliFlagOverwrite(v){v&&this.trackCliFlag("overwrite")}trackCliOptionCrt(v){v&&this.trackCliOption({option:"crt",value:this.redactedValue})}trackCliOptionKey(v){v&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionCa(v){v&&this.trackCliOption({option:"ca",value:this.redactedValue})}};async function add3(client,argv){let{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,cert,{"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath2,"--ca":caPath}=opts,telemetry2=new CertsAddTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry2.trackCliFlagOverwrite(overwrite),telemetry2.trackCliOptionCrt(crtPath),telemetry2.trackCliOptionKey(keyPath2),telemetry2.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath2||caPath){if(args.length!==0||!crtPath||!keyPath2||!caPath)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk70.default.cyan(`${getCommandName("certs add --crt <domain.crt> --key <domain.key> --ca <ca.crt>")}`)}
@@ -356,8 +356,8 @@ ${actionUrl}`),(0,import_open4.default)(actionUrl).catch(err=>output_manager_def
356
356
 
357
357
  `)),undeployedCrons.length>0||modifiedCrons.length>0){let pendingCount=undeployedCrons.length+modifiedCrons.length;output_manager_default.log(`${pendingCount} local ${pendingCount===1?"change":"changes"} pending deploy`),output_manager_default.print(formatPendingCronsTable(undeployedCrons,modifiedCrons).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
358
358
 
359
- `),output_manager_default.warn(`Run ${getCommandName("deploy --prod")} to apply local changes.`)}}return 0}function formatCronsTable(definitions){let rows=definitions.map(cron=>[import_chalk77.default.bold(cron.path),cron.schedule]);return formatTable(["Path","Schedule"],["l","l"],[{rows}])}function formatPendingCronsTable(undeployed,modified){let rows=[...modified.map(({local,deployed})=>[import_chalk77.default.bold(local.path),`${import_chalk77.default.dim(deployed.schedule)} \u2192 ${local.schedule}`,import_chalk77.default.yellow("modified")]),...undeployed.map(cron=>[import_chalk77.default.dim(cron.path),import_chalk77.default.dim(cron.schedule),import_chalk77.default.yellow("not deployed")])];return formatTable(["Path","Schedule","Status"],["l","l","l"],[{rows}])}var import_chalk78=__toESM(require_source(),1);var CronsRunTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path3){path3&&this.trackCliArgument({arg:"path",value:this.redactedValue})}};async function run(client,argv){let telemetry2=new CronsRunTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(runSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[cronPath]=args,projectName=opts["--project"];telemetry2.trackCliOptionProject(projectName),telemetry2.trackCliArgumentPath(cronPath);let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or ${client.nonInteractive?`run ${getCommandName("link --yes --team <team-id> --project <project-id>")} to link non-interactively.`:`run ${getCommandName("link")} to begin.`}`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,runStamp=stamp_default();output_manager_default.spinner(`Fetching cron jobs for ${import_chalk78.default.bold(`${org.slug}/${project.name}`)}`);let projectData=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`),definitions=projectData.crons?.definitions??[];if(definitions.length===0)return output_manager_default.error(`No cron jobs found for ${import_chalk78.default.bold(`${org.slug}/${project.name}`)}. Define cron jobs in your vercel.json file.`),1;if(projectData.crons?.disabledAt!=null)return output_manager_default.error(`Cron jobs are disabled for ${import_chalk78.default.bold(`${org.slug}/${project.name}`)}. Enable them in the project settings.`),1;if(!cronPath){if(client.nonInteractive)return output_manager_default.error(`A cron path argument is required in non-interactive mode. Usage: ${getCommandName("crons run <path>")}`),2;output_manager_default.stopSpinner(),definitions.length===1?(cronPath=definitions[0].path,output_manager_default.log(`Auto-selected ${import_chalk78.default.bold(cronPath)} (only cron job)`)):cronPath=await client.input.select({message:"Which cron job would you like to run?",choices:definitions.map(cron=>({name:`${cron.path} (${cron.schedule})`,value:cron.path}))})}let cronDef=definitions.find(d=>d.path===cronPath);if(!cronDef)return output_manager_default.error(`Cron job with path ${import_chalk78.default.bold(cronPath)} not found. Run ${getCommandName("crons ls")} to see available cron jobs.`),1;output_manager_default.spinner(`Triggering cron job ${import_chalk78.default.bold(cronPath)}`);let teamId=link.org.type==="team"?link.org.id:void 0,qs=teamId?`?teamId=${encodeURIComponent(teamId)}`:"",result;try{result=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/crons/run${qs}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:cronDef.path,schedule:cronDef.schedule})})}catch(err){if(isAPIError(err))return output_manager_default.error(`Failed to trigger cron job ${import_chalk78.default.bold(cronPath)}: ${err.message}`),1;throw err}return output_manager_default.log(`Cron job ${import_chalk78.default.bold(cronPath)} triggered ${import_chalk78.default.gray(runStamp())}`),output_manager_default.log(` Invocation time: ${import_chalk78.default.cyan(new Date(result.invocationAt).toISOString())}`),0}var CronsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRun(actual){this.trackCliSubcommand({subcommand:"run",value:actual})}};var COMMAND_CONFIG25={add:["add"],ls:["ls","list"],run:["run"]};async function main8(client){let parsedArgs,flagsSpecification=getFlagsSpecification(cronsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new CronsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG25),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("crons"),output_manager_default.print(help(cronsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:cronsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("crons",subcommandOriginal),printHelp(addSubcommand2)):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add4(client,args));case"run":return needHelp?(telemetry2.trackCliFlagHelp("crons",subcommandOriginal),printHelp(runSubcommand)):(telemetry2.trackCliSubcommandRun(subcommandOriginal),run(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("crons",subcommandOriginal),printHelp(listSubcommand9)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls4(client,args))}}import{spawn as spawn2}from"child_process";var requoteArgs=arg=>arg.includes(" ")?arg.includes('"')?`'${arg}'`:`"${arg}"`:arg;var CurlTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path3){if(path3){let value=path3.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(trace3){trace3&&this.trackCliFlag("trace")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYesOnProduction(value){value&&this.trackCliFlag("yes-on-production")}};var import_chalk80=__toESM(require_source(),1),import_error_utils9=__toESM(require_dist(),1);var import_chalk79=__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_chalk79.default.bold(projectId)}
360
- `),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_chalk79.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_chalk79.default.cyan("--protection-bypass")} flag or set ${import_chalk79.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 token2=Object.keys(protectionBypass).find(key=>protectionBypass[key].scope==="automation-bypass");if(!token2)throw new Error("No automation bypass token found in protection bypass settings");return token2}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)}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 token2=await introspectToken(client).catch(()=>null);if(!token2||!resolveAppFromToken(token2))throw err;return token2.team?[token2.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(path3){let firstSegment=path3.split("/")[0];return firstSegment.includes(".")&&!firstSegment.startsWith(".")}function orgFromOwner(id2,slug=id2){return{type:id2.startsWith("team_")?"team":"user",id:id2,slug}}var VC_STRING_FLAGS=new Set(["--deployment","--protection-bypass"]),VC_IGNORED_STRING_FLAGS=new Set(["--scope","--team"]),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_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_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,command2,telemetryClient,options={}){let{print}=output_manager_default;if(options.allowFullUrl){let parsed=parseCurlLikeArgs(options.args??client.argv.slice(2),command2.name);if(parsed.help)return print(help(command2,{columns:client.stderr.columns})),0;let path4=parsed.target;if(telemetryClient.trackCliArgumentPath(path4),parsed.deployment&&telemetryClient.trackCliOptionDeployment(parsed.deployment),parsed.protectionBypass&&telemetryClient.trackCliOptionProtectionBypass(parsed.protectionBypass),!path4)return output_manager_default.error(`${getCommandName(`${command2.name} <url|path>`)} requires a URL or API path (e.g., 'https://example.vercel.app/api/hello' or '/api/hello')`),print(help(command2,{columns:client.stderr.columns})),2;let isFullUrl2=path4.startsWith("http://")||path4.startsWith("https://");return!isFullUrl2&&looksLikeHostname(path4)&&(isFullUrl2=!0),output_manager_default.debug(`${command2.name} flags (${parsed.toolFlags.length} args): ${JSON.stringify(parsed.toolFlags)}`),{path:isFullUrl2&&!path4.startsWith("http")?`https://${path4}`:path4,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(command2.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(command2,{columns:client.stderr.columns})),0;parsedArgs.args[0]===command2.name&&parsedArgs.args.shift();let separatorIndex=process.argv.indexOf("--"),path3=parsedArgs.args[0];telemetryClient.trackCliArgumentPath(path3);let deploymentFlag=flags["--deployment"];deploymentFlag&&telemetryClient.trackCliOptionDeployment(deploymentFlag);let protectionBypassFlag=flags["--protection-bypass"];if(protectionBypassFlag&&telemetryClient.trackCliOptionProtectionBypass(protectionBypassFlag),!path3||path3==="--"||path3.startsWith("-"))return options.allowFullUrl?output_manager_default.error(`${getCommandName(`${command2.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(`${command2.name} <path>`)} requires an API path (e.g., '/' or '/api/hello' or 'api/hello')`),print(help(command2,{columns:client.stderr.columns})),1;let isFullUrl=path3.startsWith("http://")||path3.startsWith("https://");if(!isFullUrl&&looksLikeHostname(path3)&&(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> flag."),print(help(command2,{columns:client.stderr.columns})),1;let toolFlags=separatorIndex!==-1?process.argv.slice(separatorIndex+1):[];return output_manager_default.debug(`${command2.name} flags (${toolFlags.length} args): ${JSON.stringify(toolFlags)}`),{path:isFullUrl&&!path3.startsWith("http")?`https://${path3}`:path3,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 alias2=await client.fetch(aliasUrl,{useCurrentTeam:!1,...detectExplicitScope(client)?{accountId:client.config.currentTeam}:{}});if(alias2.projectId&&alias2.ownerId)return{status:"linked",project:await client.fetch(`/v9/projects/${encodeURIComponent(alias2.projectId)}`,{accountId:alias2.ownerId}),org:orgFromOwner(alias2.ownerId)}}catch(err){output_manager_default.debug(`User alias lookup failed for ${host}: ${err}`)}for(let accountId of await getDeploymentAccounts(client))try{let alias2=await client.fetch(aliasUrl,{accountId}),projectId=alias2.projectId,ownerId=alias2.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(token2=>token2.scope==="automation-bypass")}async function getDeploymentUrlAndToken(client,commandName,path3,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_utils9.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_utils9.isErrnoException)(err)&&err.code==="NOT_AUTHORIZED")return output_manager_default.error(err.message),1;throw err}if(typeof ensuredLink=="number")return ensuredLink;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;link=ensuredLink;let preferredAlias=linkedProject.project.targets?.production?.alias?.[0],backupAlias=linkedProject.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}${path3.startsWith("/")?path3:`/${path3}`}`;output_manager_default.debug(`${import_chalk80.default.cyan("Target URL:")} ${import_chalk80.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}}var import_error_utils10=__toESM(require_dist(),1);import{spawn}from"child_process";import{tmpdir}from"os";import{join as join33}from"path";import{mkdtemp,readFile as readFile6,rm as rm3}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 as createHash4}from"crypto";import{chmod as chmod2,mkdir,readFile as readFile5,unlink as unlink2,writeFile as writeFile5}from"fs/promises";import{dirname as dirname7,join as join32}from"path";var FALLBACK_TTL_MS=5*60*1e3,EXPIRY_BUFFER_MS=30*1e3,CACHE_SCHEMA_VERSION=1;function resolveCacheDir(override2){return override2||join32(getGlobalPathConfig(),"cache","traces")}function cacheFilename(teamId,host){let key=`${teamId??""}:${host}`;return`${createHash4("sha256").update(key).digest("hex")}.json`}function cachePath(cacheDir,teamId,host){return join32(cacheDir,cacheFilename(teamId,host))}async function readCache(path3){let raw;try{raw=await readFile5(path3,"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 ${path3}; re-issuing.`),null}}async function writeCache(path3,entry2){await mkdir(dirname7(path3),{recursive:!0}),await writeFile5(path3,JSON.stringify(entry2),{mode:384}),await chmod2(path3,384)}async function issueToken(client,{teamId,projectId,hostname:hostname2}){let body=JSON.stringify({projectId,hostname:hostname2}),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),hostname2=toHost(host),path3=cachePath(dir,teamId,hostname2),cached=await readCache(path3);if(cached&&evictedToken&&cached.token===evictedToken)await unlink2(path3).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:hostname2});try{await writeCache(path3,{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 line2 of lines){let idx=line2.indexOf(":");if(idx===-1)continue;line2.slice(0,idx).trim().toLowerCase()==="x-vercel-id"&&(lastValue=line2.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 line2 of lines){let match=line2.match(/^HTTP\/[\d.]+\s+(\d{3})/);match&&(lastStatus=Number(match[1]))}return lastStatus}async function runCurlAndCaptureHeaders(curlFlags,json){let tmpDir=await mkdtemp(join33(tmpdir(),"vc-curl-trace-")),headerFile=join33(tmpDir,"headers"),flags=["--dump-header",headerFile,...curlFlags];try{let{exitCode:exitCode2,capturedBody}=await new Promise(resolve14=>{let 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=>{err.code==="ENOENT"?output_manager_default.error("curl command not found. Please install curl."):output_manager_default.error(`Failed to execute curl: ${err.message}`),resolve14({exitCode:1,capturedBody:buf})}),child.on("close",code2=>{resolve14({exitCode:code2??1,capturedBody:buf})})}),headerDump="";try{headerDump=await readFile6(headerFile,"utf8")}catch(err){output_manager_default.debug(`Failed to read curl header dump: ${err}`)}return{exitCode:exitCode2,headerDump,capturedBody}}finally{await rm3(tmpDir,{recursive:!0,force:!0}).catch(()=>{})}}async function trace2(client,{fullUrl,link,curlFlags,json,yes,telemetry:telemetry2}){telemetry2.trackCliFlagTrace(!0),json&&telemetry2.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_utils10.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&&telemetry2.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:exitCode2,headerDump,capturedBody}=await runCurlWithCookie(session.token,userId,curlFlags,json);if(session.fromCache&&extractFinalStatus(headerDump)===401&&exitCode2===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:exitCode2,headerDump,capturedBody}=await runCurlWithCookie(refreshed.token,userId,curlFlags,json))}let requestId=extractVercelId(headerDump);return json?(client.stdout.write(`${JSON.stringify({response:capturedBody,requestId:requestId??null},null,2)}
359
+ `),output_manager_default.warn(`Run ${getCommandName("deploy --prod")} to apply local changes.`)}}return 0}function formatCronsTable(definitions){let rows=definitions.map(cron=>[import_chalk77.default.bold(cron.path),cron.schedule]);return formatTable(["Path","Schedule"],["l","l"],[{rows}])}function formatPendingCronsTable(undeployed,modified){let rows=[...modified.map(({local,deployed})=>[import_chalk77.default.bold(local.path),`${import_chalk77.default.dim(deployed.schedule)} \u2192 ${local.schedule}`,import_chalk77.default.yellow("modified")]),...undeployed.map(cron=>[import_chalk77.default.dim(cron.path),import_chalk77.default.dim(cron.schedule),import_chalk77.default.yellow("not deployed")])];return formatTable(["Path","Schedule","Status"],["l","l","l"],[{rows}])}var import_chalk78=__toESM(require_source(),1);var CronsRunTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path3){path3&&this.trackCliArgument({arg:"path",value:this.redactedValue})}};async function run(client,argv){let telemetry2=new CronsRunTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(runSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[cronPath]=args,projectName=opts["--project"];telemetry2.trackCliOptionProject(projectName),telemetry2.trackCliArgumentPath(cronPath);let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or ${client.nonInteractive?`run ${getCommandName("link --yes --team <team-id> --project <project-id>")} to link non-interactively.`:`run ${getCommandName("link")} to begin.`}`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,runStamp=stamp_default();output_manager_default.spinner(`Fetching cron jobs for ${import_chalk78.default.bold(`${org.slug}/${project.name}`)}`);let projectData=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`),definitions=projectData.crons?.definitions??[];if(definitions.length===0)return output_manager_default.error(`No cron jobs found for ${import_chalk78.default.bold(`${org.slug}/${project.name}`)}. Define cron jobs in your vercel.json file.`),1;if(projectData.crons?.disabledAt!=null)return output_manager_default.error(`Cron jobs are disabled for ${import_chalk78.default.bold(`${org.slug}/${project.name}`)}. Enable them in the project settings.`),1;if(!cronPath){if(client.nonInteractive)return output_manager_default.error(`A cron path argument is required in non-interactive mode. Usage: ${getCommandName("crons run <path>")}`),2;output_manager_default.stopSpinner(),definitions.length===1?(cronPath=definitions[0].path,output_manager_default.log(`Auto-selected ${import_chalk78.default.bold(cronPath)} (only cron job)`)):cronPath=await client.input.select({message:"Which cron job would you like to run?",choices:definitions.map(cron=>({name:`${cron.path} (${cron.schedule})`,value:cron.path}))})}let cronDef=definitions.find(d=>d.path===cronPath);if(!cronDef)return output_manager_default.error(`Cron job with path ${import_chalk78.default.bold(cronPath)} not found. Run ${getCommandName("crons ls")} to see available cron jobs.`),1;output_manager_default.spinner(`Triggering cron job ${import_chalk78.default.bold(cronPath)}`);let teamId=link.org.type==="team"?link.org.id:void 0,qs=teamId?`?teamId=${encodeURIComponent(teamId)}`:"",result;try{result=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/crons/run${qs}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:cronDef.path,schedule:cronDef.schedule})})}catch(err){if(isAPIError(err))return output_manager_default.error(`Failed to trigger cron job ${import_chalk78.default.bold(cronPath)}: ${err.message}`),1;throw err}return output_manager_default.log(`Cron job ${import_chalk78.default.bold(cronPath)} triggered ${import_chalk78.default.gray(runStamp())}`),output_manager_default.log(` Invocation time: ${import_chalk78.default.cyan(new Date(result.invocationAt).toISOString())}`),0}var CronsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRun(actual){this.trackCliSubcommand({subcommand:"run",value:actual})}};var COMMAND_CONFIG25={add:["add"],ls:["ls","list"],run:["run"]};async function main8(client){let parsedArgs,flagsSpecification=getFlagsSpecification(cronsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new CronsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG25),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("crons"),output_manager_default.print(help(cronsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:cronsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("crons",subcommandOriginal),printHelp(addSubcommand2)):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add4(client,args));case"run":return needHelp?(telemetry2.trackCliFlagHelp("crons",subcommandOriginal),printHelp(runSubcommand)):(telemetry2.trackCliSubcommandRun(subcommandOriginal),run(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("crons",subcommandOriginal),printHelp(listSubcommand9)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls4(client,args))}}import{spawn as spawn2}from"child_process";var requoteArgs=arg2=>arg2.includes(" ")?arg2.includes('"')?`'${arg2}'`:`"${arg2}"`:arg2;var CurlTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path3){if(path3){let value=path3.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(trace3){trace3&&this.trackCliFlag("trace")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYesOnProduction(value){value&&this.trackCliFlag("yes-on-production")}};var import_chalk80=__toESM(require_source(),1),import_error_utils9=__toESM(require_dist(),1);var import_chalk79=__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_chalk79.default.bold(projectId)}
360
+ `),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_chalk79.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_chalk79.default.cyan("--protection-bypass")} flag or set ${import_chalk79.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 token2=Object.keys(protectionBypass).find(key=>protectionBypass[key].scope==="automation-bypass");if(!token2)throw new Error("No automation bypass token found in protection bypass settings");return token2}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)}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 token2=await introspectToken(client).catch(()=>null);if(!token2||!resolveAppFromToken(token2))throw err;return token2.team?[token2.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(path3){let firstSegment=path3.split("/")[0];return firstSegment.includes(".")&&!firstSegment.startsWith(".")}function orgFromOwner(id2,slug=id2){return{type:id2.startsWith("team_")?"team":"user",id:id2,slug}}var VC_STRING_FLAGS=new Set(["--deployment","--protection-bypass"]),VC_IGNORED_STRING_FLAGS=new Set(["--scope","--team"]),VC_BOOLEAN_FLAGS=new Set(["--yes","--help","--trace","--json"]);function flagName(arg2){let eqIdx=arg2.indexOf("=");return eqIdx===-1?arg2:arg2.slice(0,eqIdx)}function flagValue(args,index){let arg2=args[index],eqIdx=arg2.indexOf("=");if(eqIdx!==-1)return arg2.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 arg2=rawArgs[commandIndex];if(!VC_IGNORED_STRING_FLAGS.has(flagName(arg2)))break;commandIndex++,!arg2.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 arg2=beforeSeparator[i],name=flagName(arg2);if(VC_STRING_FLAGS.has(name)){let value=flagValue(beforeSeparator,i);!arg2.includes("=")&&value!==void 0&&i++,name==="--deployment"?result.deployment=value:result.protectionBypass=value;continue}if(VC_IGNORED_STRING_FLAGS.has(name)){let value=flagValue(beforeSeparator,i);!arg2.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);!arg2.includes("=")&&value!==void 0&&i++,result.target=value;continue}!result.target&&!arg2.startsWith("-")?result.target=arg2:result.toolFlags.push(arg2)}return result.toolFlags.push(...afterSeparator),result}function setupCurlLikeCommand(client,command2,telemetryClient,options={}){let{print}=output_manager_default;if(options.allowFullUrl){let parsed=parseCurlLikeArgs(options.args??client.argv.slice(2),command2.name);if(parsed.help)return print(help(command2,{columns:client.stderr.columns})),0;let path4=parsed.target;if(telemetryClient.trackCliArgumentPath(path4),parsed.deployment&&telemetryClient.trackCliOptionDeployment(parsed.deployment),parsed.protectionBypass&&telemetryClient.trackCliOptionProtectionBypass(parsed.protectionBypass),!path4)return output_manager_default.error(`${getCommandName(`${command2.name} <url|path>`)} requires a URL or API path (e.g., 'https://example.vercel.app/api/hello' or '/api/hello')`),print(help(command2,{columns:client.stderr.columns})),2;let isFullUrl2=path4.startsWith("http://")||path4.startsWith("https://");return!isFullUrl2&&looksLikeHostname(path4)&&(isFullUrl2=!0),output_manager_default.debug(`${command2.name} flags (${parsed.toolFlags.length} args): ${JSON.stringify(parsed.toolFlags)}`),{path:isFullUrl2&&!path4.startsWith("http")?`https://${path4}`:path4,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(command2.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(command2,{columns:client.stderr.columns})),0;parsedArgs.args[0]===command2.name&&parsedArgs.args.shift();let separatorIndex=process.argv.indexOf("--"),path3=parsedArgs.args[0];telemetryClient.trackCliArgumentPath(path3);let deploymentFlag=flags["--deployment"];deploymentFlag&&telemetryClient.trackCliOptionDeployment(deploymentFlag);let protectionBypassFlag=flags["--protection-bypass"];if(protectionBypassFlag&&telemetryClient.trackCliOptionProtectionBypass(protectionBypassFlag),!path3||path3==="--"||path3.startsWith("-"))return options.allowFullUrl?output_manager_default.error(`${getCommandName(`${command2.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(`${command2.name} <path>`)} requires an API path (e.g., '/' or '/api/hello' or 'api/hello')`),print(help(command2,{columns:client.stderr.columns})),1;let isFullUrl=path3.startsWith("http://")||path3.startsWith("https://");if(!isFullUrl&&looksLikeHostname(path3)&&(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> flag."),print(help(command2,{columns:client.stderr.columns})),1;let toolFlags=separatorIndex!==-1?process.argv.slice(separatorIndex+1):[];return output_manager_default.debug(`${command2.name} flags (${toolFlags.length} args): ${JSON.stringify(toolFlags)}`),{path:isFullUrl&&!path3.startsWith("http")?`https://${path3}`:path3,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 alias2=await client.fetch(aliasUrl,{useCurrentTeam:!1,...detectExplicitScope(client)?{accountId:client.config.currentTeam}:{}});if(alias2.projectId&&alias2.ownerId)return{status:"linked",project:await client.fetch(`/v9/projects/${encodeURIComponent(alias2.projectId)}`,{accountId:alias2.ownerId}),org:orgFromOwner(alias2.ownerId)}}catch(err){output_manager_default.debug(`User alias lookup failed for ${host}: ${err}`)}for(let accountId of await getDeploymentAccounts(client))try{let alias2=await client.fetch(aliasUrl,{accountId}),projectId=alias2.projectId,ownerId=alias2.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(token2=>token2.scope==="automation-bypass")}async function getDeploymentUrlAndToken(client,commandName,path3,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_utils9.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_utils9.isErrnoException)(err)&&err.code==="NOT_AUTHORIZED")return output_manager_default.error(err.message),1;throw err}if(typeof ensuredLink=="number")return ensuredLink;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;link=ensuredLink;let preferredAlias=linkedProject.project.targets?.production?.alias?.[0],backupAlias=linkedProject.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}${path3.startsWith("/")?path3:`/${path3}`}`;output_manager_default.debug(`${import_chalk80.default.cyan("Target URL:")} ${import_chalk80.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}}var import_error_utils10=__toESM(require_dist(),1);import{spawn}from"child_process";import{tmpdir}from"os";import{join as join33}from"path";import{mkdtemp,readFile as readFile6,rm as rm3}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 as createHash4}from"crypto";import{chmod as chmod2,mkdir,readFile as readFile5,unlink as unlink2,writeFile as writeFile5}from"fs/promises";import{dirname as dirname7,join as join32}from"path";var FALLBACK_TTL_MS=5*60*1e3,EXPIRY_BUFFER_MS=30*1e3,CACHE_SCHEMA_VERSION=1;function resolveCacheDir(override2){return override2||join32(getGlobalPathConfig(),"cache","traces")}function cacheFilename(teamId,host){let key=`${teamId??""}:${host}`;return`${createHash4("sha256").update(key).digest("hex")}.json`}function cachePath(cacheDir,teamId,host){return join32(cacheDir,cacheFilename(teamId,host))}async function readCache(path3){let raw;try{raw=await readFile5(path3,"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 ${path3}; re-issuing.`),null}}async function writeCache(path3,entry2){await mkdir(dirname7(path3),{recursive:!0}),await writeFile5(path3,JSON.stringify(entry2),{mode:384}),await chmod2(path3,384)}async function issueToken(client,{teamId,projectId,hostname:hostname2}){let body=JSON.stringify({projectId,hostname:hostname2}),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),hostname2=toHost(host),path3=cachePath(dir,teamId,hostname2),cached=await readCache(path3);if(cached&&evictedToken&&cached.token===evictedToken)await unlink2(path3).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:hostname2});try{await writeCache(path3,{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 line2 of lines){let idx=line2.indexOf(":");if(idx===-1)continue;line2.slice(0,idx).trim().toLowerCase()==="x-vercel-id"&&(lastValue=line2.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 line2 of lines){let match=line2.match(/^HTTP\/[\d.]+\s+(\d{3})/);match&&(lastStatus=Number(match[1]))}return lastStatus}async function runCurlAndCaptureHeaders(curlFlags,json){let tmpDir=await mkdtemp(join33(tmpdir(),"vc-curl-trace-")),headerFile=join33(tmpDir,"headers"),flags=["--dump-header",headerFile,...curlFlags];try{let{exitCode:exitCode2,capturedBody}=await new Promise(resolve14=>{let 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=>{err.code==="ENOENT"?output_manager_default.error("curl command not found. Please install curl."):output_manager_default.error(`Failed to execute curl: ${err.message}`),resolve14({exitCode:1,capturedBody:buf})}),child.on("close",code2=>{resolve14({exitCode:code2??1,capturedBody:buf})})}),headerDump="";try{headerDump=await readFile6(headerFile,"utf8")}catch(err){output_manager_default.debug(`Failed to read curl header dump: ${err}`)}return{exitCode:exitCode2,headerDump,capturedBody}}finally{await rm3(tmpDir,{recursive:!0,force:!0}).catch(()=>{})}}async function trace2(client,{fullUrl,link,curlFlags,json,yes,telemetry:telemetry2}){telemetry2.trackCliFlagTrace(!0),json&&telemetry2.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_utils10.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&&telemetry2.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:exitCode2,headerDump,capturedBody}=await runCurlWithCookie(session.token,userId,curlFlags,json);if(session.fromCache&&extractFinalStatus(headerDump)===401&&exitCode2===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:exitCode2,headerDump,capturedBody}=await runCurlWithCookie(refreshed.token,userId,curlFlags,json))}let requestId=extractVercelId(headerDump);return json?(client.stdout.write(`${JSON.stringify({response:capturedBody,requestId:requestId??null},null,2)}
361
361
  `),requestId?exitCode2:exitCode2===0?1:exitCode2):requestId?(client.stderr.write(`
362
362
  Run \`vercel traces inspect ${requestId}\` to fetch the trace.
363
363
  `),exitCode2):(output_manager_default.error("Trace cookie was set but the response did not include an x-vercel-id header."),exitCode2===0?1:exitCode2)}async function runCurlWithCookie(token2,userId,curlFlags,json){let flagsWithCookie=["--header",`Cookie: ${TRACE_COOKIE_NAME}=${token2}; ${SESSION_COOKIE_NAME}=${userId}`,...curlFlags];return output_manager_default.debug(`Executing: curl ${flagsWithCookie.map(requoteArgs).join(" ")}`),runCurlAndCaptureHeaders(flagsWithCookie,json)}async function curl(client){return runCurl(client,{})}async function runCurl(client,{forceTrace=!1,args}){let telemetryClient=new CurlTelemetryClient({opts:{store:client.telemetryEventStore}}),setup2=setupCurlLikeCommand(client,curlCommand,telemetryClient,{allowFullUrl:!0,args});if(typeof setup2=="number")return setup2;let{path:path3,isFullUrl,deploymentFlag,protectionBypassFlag,toolFlags,json:jsonFlag}=setup2,traceFlag=forceTrace||setup2.trace,result=isFullUrl?await getFullUrlAndToken(client,path3,protectionBypassFlag):await getDeploymentUrlAndToken(client,"curl",path3,{deploymentFlag,protectionBypassFlag,autoConfirm:setup2.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?trace2(client,{fullUrl,link:result.link??null,curlFlags,json:jsonFlag,yes:setup2.yes,telemetry:telemetryClient}):(output_manager_default.debug(`Executing: curl ${curlFlags.map(requoteArgs).join(" ")}`),new Promise(resolve14=>{let curlProcess=spawn2("curl",curlFlags,{stdio:"inherit",shell:!1});curlProcess.on("error",err=>{"code"in err&&err.code==="ENOENT"?(output_manager_default.error("curl command not found. Please install curl."),resolve14(1)):(output_manager_default.error(`Failed to execute curl: ${err.message}`),resolve14(1))}),curlProcess.on("close",code2=>{resolve14(code2??1)})}))}var import_chalk81=__toESM(require_source(),1);async function getProjectByCwdOrLink({autoConfirm,nonInteractive,client,commandName,cwd,projectNameOrId,forReadOnlyCommand}){if(projectNameOrId){let project=await getProjectByNameOrId(client,projectNameOrId);if(project instanceof ProjectNotFound)throw project;return project}let effectiveNonInteractive=nonInteractive??client.nonInteractive??argvHasNonInteractive(client.argv);if(forReadOnlyCommand&&effectiveNonInteractive){let resolvedCwd=await resolveProjectCwd(cwd??client.cwd),link=await getLinkedProject(client,{cwd:resolvedCwd});if(link.status==="linked"&&link.project)return link.project;if(link.status==="error"){let err=new Error("Link project error");throw err.code="ERR_LINK_PROJECT",err}throw new LinkRequiredError}let linkedProject=await ensureLink(commandName,client,cwd??client.cwd,{autoConfirm,nonInteractive});if(typeof linkedProject=="number"){let err=new Error("Link project error");throw err.code="ERR_LINK_PROJECT",err}return linkedProject.project}var DeployHooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls5(client,argv){let telemetry2=new DeployHooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand10.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"deploy-hooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliOptionProject(opts["--project"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching deploy hooks under ${import_chalk81.default.bold(contextName)}`);try{let project=await getProjectByCwdOrLink({client,commandName:"deploy-hooks ls",projectNameOrId:opts["--project"],forReadOnlyCommand:!0}),hooks=project.link?.deployHooks??[];if(asJson){output_manager_default.stopSpinner();let rows2=hooks.map(h=>({id:h.id,name:h.name,ref:h.ref,url:h.url,createdAt:h.createdAt}));return client.nonInteractive?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,projectId:project.id,projectName:project.name,hooks:rows2,message:hooks.length===0?"No deploy hooks for this project.":`Listed ${hooks.length} deploy hook${hooks.length===1?"":"s"}.`,next:[{command:getCommandNamePlain("deploy-hooks create <name> --ref <branch>"),when:"Create a deploy hook"}]},null,2)}
@@ -376,7 +376,7 @@ ${import_chalk82.default.dim("Anyone with the URL can trigger a deployment. Stor
376
376
  `),0):(output_manager_default.log(`DNS record ${import_chalk88.default.bold(record.id)} of domain ${import_chalk88.default.bold(record.domain)} under ${import_chalk88.default.bold(contextName)}`),client.stdout.write(formatRecordDetails(record)),0):(output_manager_default.error("DNS record not found"),1)}function formatRecordDetails(record){let rows=[["ID",record.id],["Name",record.name||"@"],["Domain",record.domain],["Type",record.type],["Value",record.value]],priority=record.priority??record.mxPriority;return priority!==void 0&&rows.push(["Priority",`${priority}`]),record.ttl!==void 0&&rows.push(["TTL",`${record.ttl}`]),record.comment&&rows.push(["Comment",record.comment]),rows.push(["Creator",record.creator]),rows.push(["Created",formatDate(record.createdAt)]),record.updatedAt&&rows.push(["Updated",formatDate(record.updatedAt)]),`${table(rows,{align:["l","l"],hsep:2}).replace(/^(.*)/gm," $1")}
377
377
  `}var import_chalk90=__toESM(require_source(),1),import_ms13=__toESM(require_ms(),1);async function getDomainDNSRecords(client,domain2,apiVersion=3,nextTimestamp,limit=20){output_manager_default.debug(`Fetching for DNS records of domain ${domain2}`);try{let url=`/v${apiVersion}/domains/${encodeURIComponent(domain2)}/records?limit=${limit}`;return nextTimestamp&&(url+=`&until=${nextTimestamp}`),await client.fetch(url)}catch(err){if(isAPIError(err)&&err.code==="not_found")return new DomainNotFound(domain2);throw err}}async function getDomains(client,next,limit=20){let domainUrl=`/v5/domains?limit=${limit}`;return next&&(domainUrl+=`&until=${next}`),await client.fetch(domainUrl)}var import_chalk89=__toESM(require_source(),1);async function getDNSRecords(client,contextName,next){let{domainNames,pagination}=await getDomainNames(client,contextName,next);return{records:(await Promise.all(domainNames.map(createGetDomainRecords(client)))).map(item=>item instanceof DomainNotFound?[]:item).reduce(getAddDomainName(domainNames),[]),pagination}}function createGetDomainRecords(client){return async domainName=>{let data=await getDomainDNSRecords(client,domainName);return data instanceof DomainNotFound?[]:data.records}}function getAddDomainName(domainNames){return(prev,item,idx)=>[...prev,{domainName:domainNames[idx],records:item}]}async function getDomainNames(client,contextName,next){output_manager_default.spinner(`Fetching domains under ${import_chalk89.default.bold(contextName)}`);let{domains:domains2,pagination}=await getDomains(client,next);return{domainNames:domains2.map(domain2=>domain2.name),pagination}}var DnsLsTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls6(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand11.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs;if(client.nonInteractive&&args.length>1){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls <domain> ${flags.join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to list DNS records (optional single domain)"}]},2),2}let validationResult=validateLsArgs({commandName:"dns ls <domain>",args,maxArgs:1,exitCode:1});if(validationResult!==0)return validationResult;let{telemetryEventStore}=client,telemetry2=new DnsLsTelemetryClient({opts:{store:telemetryEventStore}}),[domainName]=args;telemetry2.trackCliArgumentDomain(domainName),telemetry2.trackCliOptionLimit(opts["--limit"]),telemetry2.trackCliOptionNext(opts["--next"]),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),lsStamp=stamp_default(),paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),1}if(domainName){let data=await getDomainDNSRecords(client,domainName,5,...paginationOptions);if(data instanceof DomainNotFound){if(client.nonInteractive){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls ${flags.join(" ")}`.trim());outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domainName} can't be found under ${contextName}.`,next:[{command:cmd2,when:"to list available DNS records"}]},1)}return output_manager_default.error(`The domain ${domainName} can't be found under ${import_chalk90.default.bold(contextName)} ${import_chalk90.default.gray(lsStamp())}`),1}let{records,pagination:pagination2}=data,dnsRecords2=[{domainName,records}];if(asJson)return outputDnsRecordsJson(client,dnsRecords2,pagination2),0;if(output_manager_default.log(`${records.length>0?"Records":"No records"} found under ${import_chalk90.default.bold(contextName)} ${import_chalk90.default.gray(lsStamp())}`),client.stdout.write(getDNSRecordsTable(dnsRecords2)),pagination2?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.log(`To display the next page run ${getCommandName(`dns ls ${domainName}${flags} --next ${pagination2.next}`)}`)}return 0}let{records:dnsRecords,pagination}=await getDNSRecords(client,contextName,...paginationOptions);if(asJson)return outputDnsRecordsJson(client,dnsRecords,pagination),0;let nRecords=dnsRecords.reduce((p,r)=>r.records.length+p,0);if(output_manager_default.log(`${nRecords>0?"Records":"No records"} found under ${import_chalk90.default.bold(contextName)} ${import_chalk90.default.gray(lsStamp())}`),output_manager_default.log(getDNSRecordsTable(dnsRecords)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.log(`To display the next page run ${getCommandName(`dns ls${flags} --next ${pagination.next}`)}`)}return 0}function getDNSRecordsTable(dnsRecords){return formatTable(["","id","name","type","value","created"],["l","r","l","l","l","l"],dnsRecords.map(({domainName,records})=>({name:import_chalk90.default.bold(domainName),rows:records.map(getDNSRecordRow)})))}function getDNSRecordRow(record){let isSystemRecord=record.creator==="system",createdAt=`${(0,import_ms13.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`,priority=record.mxPriority||record.priority||null;return["",isSystemRecord?"":record.id,record.name,record.type,priority?`${priority} ${record.value}`:record.value,import_chalk90.default.gray(isSystemRecord?"default":createdAt)]}function outputDnsRecordsJson(client,records,pagination){output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({records,pagination},null,2)}
378
378
  `)}var import_chalk91=__toESM(require_source(),1),import_ms14=__toESM(require_ms(),1);async function deleteDNSRecordById(client,domain2,recordId){return client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records/${recordId}`,{method:"DELETE"})}var DnsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"recordId",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs,{telemetryEventStore}=client,telemetry2=new DnsRmTelemetryClient({opts:{store:telemetryEventStore}});await getScope(client);let[recordId]=args;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns rm <id> --yes");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to remove a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk91.default.cyan(`${getCommandName("dns rm <id>")}`)}`),2}telemetry2.trackCliArgumentId(recordId),telemetry2.trackCliFlagYes(flags["--yes"]);let record=await getDNSRecordById(client,recordId);if(!record)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_RECORD_NOT_FOUND,message:"DNS record not found.",next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records and ids"}]},1),output_manager_default.error("DNS record not found"),1;let{domain:domainName}=record,skipConfirmation=flags["--yes"];if(client.nonInteractive&&!skipConfirmation)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"In non-interactive mode --yes is required to remove a DNS record.",next:[{command:buildCommandWithYes(client.argv),when:"to confirm removal"}]},1),1;if(!(skipConfirmation||await readConfirmation2(client,"The following record will be removed permanently",domainName,record)))return output_manager_default.error("User canceled."),0;let rmStamp=stamp_default();return await deleteDNSRecordById(client,domainName,record.id),output_manager_default.success(`Record ${import_chalk91.default.gray(`${record.id}`)} removed ${import_chalk91.default.gray(rmStamp())}`),0}function readConfirmation2(client,msg,domainName,record){return new Promise(resolve14=>{output_manager_default.log(msg),output_manager_default.print(`${table([getDeleteTableRow(domainName,record)],{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
379
- `),output_manager_default.print(`${import_chalk91.default.bold.red("> Are you sure?")} ${import_chalk91.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve14(d.toString().trim().toLowerCase()==="y")}).resume()})}function getDeleteTableRow(domainName,record){let recordName=`${record.name.length>0?`${record.name}.`:""}${domainName}`;return[record.id,import_chalk91.default.bold(`${recordName} ${record.type} ${record.value} ${record.mxPriority||""}`),import_chalk91.default.gray(`${(0,import_ms14.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`)]}var import_chalk92=__toESM(require_source(),1);async function updateDNSRecord(client,recordId,data){return client.fetch(`/v1/domains/records/${encodeURIComponent(recordId)}`,{method:"PATCH",body:data})}var ALLOWED_RECORD_TYPES2=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"],DnsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionName(name){name!==void 0&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES2.includes(type)?type:this.redactedValue;this.trackCliOption({option:"type",value:allowedType})}}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionTtl(ttl){ttl!==void 0&&this.trackCliOption({option:"ttl",value:this.redactedValue})}trackCliOptionMxPriority(mxPriority){mxPriority!==void 0&&this.trackCliOption({option:"mx-priority",value:this.redactedValue})}trackCliOptionSrvPriority(srvPriority){srvPriority!==void 0&&this.trackCliOption({option:"srv-priority",value:this.redactedValue})}trackCliOptionSrvWeight(srvWeight){srvWeight!==void 0&&this.trackCliOption({option:"srv-weight",value:this.redactedValue})}trackCliOptionSrvPort(srvPort){srvPort!==void 0&&this.trackCliOption({option:"srv-port",value:this.redactedValue})}trackCliOptionSrvTarget(srvTarget){srvTarget&&this.trackCliOption({option:"srv-target",value:this.redactedValue})}trackCliOptionComment(comment){comment!==void 0&&this.trackCliOption({option:"comment",value:this.redactedValue})}};var SRV_FLAGS=["--srv-priority","--srv-weight","--srv-port","--srv-target"];async function update2(client,argv){let telemetry2=new DnsUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk92.default.cyan(`${getCommandName("dns update <id> [options]")}`)}`),2}let[recordId]=args;telemetry2.trackCliArgumentId(recordId),telemetry2.trackCliOptionName(flags["--name"]),telemetry2.trackCliOptionType(flags["--type"]),telemetry2.trackCliOptionValue(flags["--value"]),telemetry2.trackCliOptionTtl(flags["--ttl"]),telemetry2.trackCliOptionMxPriority(flags["--mx-priority"]),telemetry2.trackCliOptionSrvPriority(flags["--srv-priority"]),telemetry2.trackCliOptionSrvWeight(flags["--srv-weight"]),telemetry2.trackCliOptionSrvPort(flags["--srv-port"]),telemetry2.trackCliOptionSrvTarget(flags["--srv-target"]),telemetry2.trackCliOptionComment(flags["--comment"]);let numericFlags=["--ttl","--mx-priority","--srv-priority","--srv-weight","--srv-port"];for(let flagName2 of numericFlags){let value=flags[flagName2];if(value!==void 0&&Number.isNaN(value))return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The ${flagName2} option must be a number.`},2),output_manager_default.error(`The ${flagName2} option must be a number.`),2}let data={},name=flags["--name"];name!==void 0&&(data.name=name==="@"?"":name),flags["--type"]!==void 0&&(data.type=flags["--type"]),flags["--value"]!==void 0&&(data.value=flags["--value"]),flags["--ttl"]!==void 0&&(data.ttl=flags["--ttl"]),flags["--mx-priority"]!==void 0&&(data.mxPriority=flags["--mx-priority"]),flags["--comment"]!==void 0&&(data.comment=flags["--comment"]);let srvFlagsProvided=SRV_FLAGS.filter(flagName2=>flags[flagName2]!==void 0);if(srvFlagsProvided.length>0){if(srvFlagsProvided.length!==SRV_FLAGS.length)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`},2),output_manager_default.error(`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`),2;data.srv={priority:flags["--srv-priority"],weight:flags["--srv-weight"],port:flags["--srv-port"],target:flags["--srv-target"]}}if(Object.keys(data).length===0){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.NO_CHANGES_REQUESTED,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Provide at least one field to update. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record (e.g. --value, --ttl, --comment)"},{command:withGlobalFlags(client,"dns update --help"),when:"for available options"}]},1)}return output_manager_default.error(`Provide at least one field to update. See ${import_chalk92.default.cyan(`${getCommandName("dns update --help")}`)} for available options.`),2}let changeSummary=Object.entries(data).map(([field,value])=>`${field}=${value===""?"@":value}`).join(", ");if(!canPrompt(client)){let rerun2=getCommandNamePlain(stripSensitiveAuthArgs(client.argv.slice(2)).filter(arg=>arg!=="--non-interactive"&&!arg.startsWith("--non-interactive=")).join(" "));return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Updating DNS record ${recordId} (${changeSummary}) overwrites a live record. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:rerun2,when:"user runs this command in an interactive terminal to confirm"}]},1),output_manager_default.error("This command must be run interactively to confirm overwriting the DNS record."),1}if(output_manager_default.print(prependEmoji(`Updating DNS record ${import_chalk92.default.gray(recordId)} will overwrite: ${import_chalk92.default.bold(changeSummary)}
379
+ `),output_manager_default.print(`${import_chalk91.default.bold.red("> Are you sure?")} ${import_chalk91.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve14(d.toString().trim().toLowerCase()==="y")}).resume()})}function getDeleteTableRow(domainName,record){let recordName=`${record.name.length>0?`${record.name}.`:""}${domainName}`;return[record.id,import_chalk91.default.bold(`${recordName} ${record.type} ${record.value} ${record.mxPriority||""}`),import_chalk91.default.gray(`${(0,import_ms14.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`)]}var import_chalk92=__toESM(require_source(),1);async function updateDNSRecord(client,recordId,data){return client.fetch(`/v1/domains/records/${encodeURIComponent(recordId)}`,{method:"PATCH",body:data})}var ALLOWED_RECORD_TYPES2=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"],DnsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionName(name){name!==void 0&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES2.includes(type)?type:this.redactedValue;this.trackCliOption({option:"type",value:allowedType})}}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionTtl(ttl){ttl!==void 0&&this.trackCliOption({option:"ttl",value:this.redactedValue})}trackCliOptionMxPriority(mxPriority){mxPriority!==void 0&&this.trackCliOption({option:"mx-priority",value:this.redactedValue})}trackCliOptionSrvPriority(srvPriority){srvPriority!==void 0&&this.trackCliOption({option:"srv-priority",value:this.redactedValue})}trackCliOptionSrvWeight(srvWeight){srvWeight!==void 0&&this.trackCliOption({option:"srv-weight",value:this.redactedValue})}trackCliOptionSrvPort(srvPort){srvPort!==void 0&&this.trackCliOption({option:"srv-port",value:this.redactedValue})}trackCliOptionSrvTarget(srvTarget){srvTarget&&this.trackCliOption({option:"srv-target",value:this.redactedValue})}trackCliOptionComment(comment){comment!==void 0&&this.trackCliOption({option:"comment",value:this.redactedValue})}};var SRV_FLAGS=["--srv-priority","--srv-weight","--srv-port","--srv-target"];async function update2(client,argv){let telemetry2=new DnsUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk92.default.cyan(`${getCommandName("dns update <id> [options]")}`)}`),2}let[recordId]=args;telemetry2.trackCliArgumentId(recordId),telemetry2.trackCliOptionName(flags["--name"]),telemetry2.trackCliOptionType(flags["--type"]),telemetry2.trackCliOptionValue(flags["--value"]),telemetry2.trackCliOptionTtl(flags["--ttl"]),telemetry2.trackCliOptionMxPriority(flags["--mx-priority"]),telemetry2.trackCliOptionSrvPriority(flags["--srv-priority"]),telemetry2.trackCliOptionSrvWeight(flags["--srv-weight"]),telemetry2.trackCliOptionSrvPort(flags["--srv-port"]),telemetry2.trackCliOptionSrvTarget(flags["--srv-target"]),telemetry2.trackCliOptionComment(flags["--comment"]);let numericFlags=["--ttl","--mx-priority","--srv-priority","--srv-weight","--srv-port"];for(let flagName2 of numericFlags){let value=flags[flagName2];if(value!==void 0&&Number.isNaN(value))return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The ${flagName2} option must be a number.`},2),output_manager_default.error(`The ${flagName2} option must be a number.`),2}let data={},name=flags["--name"];name!==void 0&&(data.name=name==="@"?"":name),flags["--type"]!==void 0&&(data.type=flags["--type"]),flags["--value"]!==void 0&&(data.value=flags["--value"]),flags["--ttl"]!==void 0&&(data.ttl=flags["--ttl"]),flags["--mx-priority"]!==void 0&&(data.mxPriority=flags["--mx-priority"]),flags["--comment"]!==void 0&&(data.comment=flags["--comment"]);let srvFlagsProvided=SRV_FLAGS.filter(flagName2=>flags[flagName2]!==void 0);if(srvFlagsProvided.length>0){if(srvFlagsProvided.length!==SRV_FLAGS.length)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`},2),output_manager_default.error(`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`),2;data.srv={priority:flags["--srv-priority"],weight:flags["--srv-weight"],port:flags["--srv-port"],target:flags["--srv-target"]}}if(Object.keys(data).length===0){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.NO_CHANGES_REQUESTED,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Provide at least one field to update. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record (e.g. --value, --ttl, --comment)"},{command:withGlobalFlags(client,"dns update --help"),when:"for available options"}]},1)}return output_manager_default.error(`Provide at least one field to update. See ${import_chalk92.default.cyan(`${getCommandName("dns update --help")}`)} for available options.`),2}let changeSummary=Object.entries(data).map(([field,value])=>`${field}=${value===""?"@":value}`).join(", ");if(!canPrompt(client)){let rerun2=getCommandNamePlain(stripSensitiveAuthArgs(client.argv.slice(2)).filter(arg2=>arg2!=="--non-interactive"&&!arg2.startsWith("--non-interactive=")).join(" "));return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Updating DNS record ${recordId} (${changeSummary}) overwrites a live record. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:rerun2,when:"user runs this command in an interactive terminal to confirm"}]},1),output_manager_default.error("This command must be run interactively to confirm overwriting the DNS record."),1}if(output_manager_default.print(prependEmoji(`Updating DNS record ${import_chalk92.default.gray(recordId)} will overwrite: ${import_chalk92.default.bold(changeSummary)}
380
380
  `,emoji("warning"))),!await client.input.confirm(`Update DNS record ${recordId}?`,!1))return output_manager_default.log("Canceled"),0;let updateStamp=stamp_default(),record;try{record=await updateDNSRecord(client,recordId,data)}catch(err){if(isAPIError(err)){if(err.status===404)return output_manager_default.error("DNS record not found"),1;if(err.status===403)return output_manager_default.error("You don't have permission to access this DNS record."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}let contextName=await getContextName(client);return output_manager_default.success(`DNS record ${import_chalk92.default.gray(`${record.id}`)} of domain ${import_chalk92.default.bold(record.domain)} updated under ${import_chalk92.default.bold(contextName)} ${import_chalk92.default.gray(updateStamp())}`),0}var DnsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG27={add:getCommandAliases(addSubcommand3),import:getCommandAliases(importSubcommand),inspect:getCommandAliases(inspectSubcommand6),ls:getCommandAliases(listSubcommand11),rm:getCommandAliases(removeSubcommand6),update:getCommandAliases(updateSubcommand2)};async function dns(client){let{telemetryEventStore}=client,parsedArgs,flagsSpecification=getFlagsSpecification(dnsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let telemetry2=new DnsTelemetryClient({opts:{store:telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG27),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("dns",subcommand),output_manager_default.print(help(dnsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:dnsCommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("dns",subcommandOriginal),printHelp(addSubcommand3),0):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add5(client,args));case"import":return needHelp?(telemetry2.trackCliFlagHelp("dns",subcommandOriginal),printHelp(importSubcommand),0):(telemetry2.trackCliSubcommandImport(subcommandOriginal),importZone(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("dns",subcommandOriginal),printHelp(inspectSubcommand6),0):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect7(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("dns",subcommandOriginal),printHelp(removeSubcommand6),0):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm5(client,args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("dns",subcommandOriginal),printHelp(updateSubcommand2),0):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update2(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("dns",subcommandOriginal),printHelp(listSubcommand11),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls6(client,args))}}var import_chalk95=__toESM(require_source(),1);function isPublicSuffix(domainName){return domainName.endsWith(".vercel.app")||domainName.endsWith(".now.sh")}var import_tldts5=__toESM(require_cjs(),1);function isRootDomain(domainName){let parsedDomain=(0,import_tldts5.parse)(domainName),{domain:rootDomain,subdomain}=parsedDomain;return!!(!subdomain&&rootDomain)}async function getDomainConfig(client,domainName){try{return await client.fetch(`/v6/domains/${domainName}/config`)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var import_chalk93=__toESM(require_source(),1);async function addDomainToProject(client,projectNameOrId,domain2){output_manager_default.spinner(`Adding domain ${domain2} to project ${import_chalk93.default.bold(projectNameOrId)}`);try{let aliasTarget=(await client.fetch(`/projects/${encodeURIComponent(projectNameOrId)}/alias`,{method:"POST",body:JSON.stringify({target:"PRODUCTION",domain:domain2})})).find(aliasTarget2=>aliasTarget2.domain===domain2);return aliasTarget||new Error(`Adding domain '${domain2}' to project '${projectNameOrId}' did not return a matching alias in the API response. The domain may already be on another project\u2014try 'vercel domains add ${domain2} ${projectNameOrId} --force' after removing it there, or run 'vercel domains inspect ${domain2}'.`)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}function getProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}`,options)}function getProjectDomainByName(client,domainName,options={}){return fetchProjectDomain(client,`/project-domains/${encodeURIComponent(domainName)}`,options)}function verifyProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}/verify`,{...options,method:"POST"})}async function fetchProjectDomain(client,url,init2){try{return await client.fetch(url,init2)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var import_chalk94=__toESM(require_source(),1);async function removeDomainFromProject(client,projectNameOrId,domain2){output_manager_default.spinner(`Removing domain ${domain2} from project ${import_chalk94.default.bold(projectNameOrId)}`);try{return await client.fetch(`/projects/${encodeURIComponent(projectNameOrId)}/alias?domain=${encodeURIComponent(domain2)}`,{method:"DELETE"})}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var DomainsAddTelemetryClient=class extends TelemetryClient{trackCliFlagForce(force){force&&this.trackCliFlag("force")}trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentProject(projectName){projectName&&this.trackCliArgument({arg:"project",value:this.redactedValue})}};var import_error_utils11=__toESM(require_dist(),1);var VERCEL_DOMAINS_DASHBOARD="https://vercel.com/dashboard/domains";function nextCommandsForDomainsAddFailure(client,domainName,projectName,err){let next=[{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}],apiErr=err,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=err.message.toLowerCase(),status6=isAPIError(err)?err.status:void 0,looksLikeOwnershipOrPurchaseIssue=code2==="not_domain_owner"||code2==="invalid_domain"||code2==="domain_not_found"||status6===403&&(msg.includes("not authorized")||msg.includes("forbidden"))||msg.includes("not verified")||msg.includes("do not own")||msg.includes("not the owner"),aliasConflict=code2==="ALIAS_DOMAIN_EXIST"||status6===409||msg.includes("already assigned")||msg.includes("already in use");return(looksLikeOwnershipOrPurchaseIssue||aliasConflict)&&(next.push({command:withGlobalFlags(client,`domains buy ${domainName}`),when:"user must run interactively in a terminal\u2014agents must not purchase; purchase also available in dashboard"}),next.push({command:withGlobalFlags(client,"domains transfer-in"),when:"to transfer a domain you already own from another registrar into Vercel"}),next.push({command:openUrlInBrowserCommand(VERCEL_DOMAINS_DASHBOARD),when:"to open the Domains dashboard in your browser"})),aliasConflict&&!looksLikeOwnershipOrPurchaseIssue&&projectName&&next.push({command:withGlobalFlags(client,`domains add ${domainName} ${projectName} --force`),when:"to force move from another project (only if API returns project id\u2014otherwise remove domain from the other project first)"}),next}function nextCommandsForDomainsAddSuccess(client,domainName,projectName){return projectName?[{command:withGlobalFlags(client,`domains verify ${domainName}`),when:"to check DNS configuration and see the records you need to set"},{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}]:[{command:withGlobalFlags(client,`domains add ${domainName} <project>`),when:"to attach this domain to a project"},{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}]}async function printDomainConfiguration(client,domainName){if(isPublicSuffix(domainName))return output_manager_default.log("The domain will automatically get assigned to your latest production deployment."),0;let domainConfig=await getDomainConfig(client,domainName);return!(domainConfig instanceof Error)&&domainConfig.misconfigured?output_manager_default.warn(`This domain is not configured properly. Run ${getCommandName(`domains verify ${domainName}`)} to see how to configure it.`):output_manager_default.log("The domain will automatically get assigned to your latest production deployment."),0}async function add6(client,argv){let telemetry2=new DomainsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags:opts}=parsedArgs,force=opts["--force"];telemetry2.trackCliFlagForce(force);let contextName=await getContextName(client,{resolveLocalScope:!0});if(args.length<1||args.length>2){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"domains add <domain> [project]");outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`Run: ${cmd2}`,next:[{command:cmd2,when:"to add a domain to your team, or pass a project name to assign it to a project"}]},2)}return output_manager_default.error(`${getCommandName("domains add <domain> [project]")} expects one or two arguments.`),2}let domainName=String(args[0]),projectName=args.length===2?String(args[1]):void 0;if(telemetry2.trackCliArgumentDomain(domainName),telemetry2.trackCliArgumentProject(args[1]),!projectName){if(!isPublicSuffix(domainName)&&!isRootDomain(domainName)){let cmd2=withGlobalFlags(client,`domains add ${domainName} <project>`),message=`Only apex domains can be added without a project. To add the subdomain ${domainName}, pass a project: ${cmd2}`;return client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"project_required_for_subdomain",action:"add_with_project",message,next:[{command:cmd2,when:"to add this subdomain to a specific project"}]},1),output_manager_default.error(message),1}let addStamp2=stamp_default(),addResult;try{addResult=await addDomain(client,domainName,contextName)}catch(err){let error=err instanceof Error?err:new Error(String(err));if(client.nonInteractive){let status6=isAPIError(error)?error.status:void 0,apiErr=error,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=error.message.toLowerCase(),reason=status6===403?"forbidden":status6===404?"not_found":status6===409||msg.includes("already")?"alias_conflict":"domain_add_failed";(code2==="not_domain_owner"||status6===403&&msg.includes("not authorized"))&&(reason="domain_not_owned");let message=(0,import_error_utils11.errorToString)(error);(reason==="domain_not_owned"||code2==="invalid_domain"||msg.includes("not authorized to use"))&&(message+=" domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, the user must run 'domains buy' interactively (agents must not purchase) or buy in the dashboard; use 'domains transfer-in' to move an existing registration to Vercel."),outputAgentError(client,{status:"error",reason,message,next:nextCommandsForDomainsAddFailure(client,domainName,"",error)},1)}return output_manager_default.prettyError(error),1}return addResult instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_domain",message:(0,import_error_utils11.errorToString)(addResult)},1),output_manager_default.prettyError(addResult),1):addResult instanceof DomainAlreadyExists?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"domain_already_exists",message:(0,import_error_utils11.errorToString)(addResult)},1),output_manager_default.prettyError(addResult),1):(client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_added",message:`Domain ${domainName} added to ${contextName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName)},0),output_manager_default.success(`Domain ${import_chalk95.default.bold(domainName)} added to ${import_chalk95.default.bold(contextName)}. ${addStamp2()}`),0)}let addStamp=stamp_default(),removedPreviousAssignment=!1,aliasTarget=await addDomainToProject(client,projectName,domainName);if(aliasTarget instanceof Error){if(aliasTarget instanceof APIError&&aliasTarget.code==="ALIAS_DOMAIN_EXIST"){let conflictProject=aliasTarget.project,alreadyOnRequestedProject=!!(conflictProject&&(conflictProject.id===projectName||conflictProject.name===projectName));if(alreadyOnRequestedProject||(alreadyOnRequestedProject=!(await getProjectDomain(client,projectName,domainName)instanceof Error)),alreadyOnRequestedProject)return client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_already_assigned",message:`Domain ${domainName} is already assigned to project ${projectName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName,projectName)},0),output_manager_default.log(`Domain ${import_chalk95.default.bold(domainName)} is already assigned to project ${import_chalk95.default.bold(projectName)}. ${addStamp()}`),printDomainConfiguration(client,domainName);if(force){let currentProjectId=conflictProject?.id;if(!currentProjectId){let currentProjectDomain=await getProjectDomainByName(client,domainName);currentProjectDomain instanceof Error||(currentProjectId=currentProjectDomain.projectId)}if(currentProjectId){let removeResponse=await removeDomainFromProject(client,currentProjectId,domainName);if(removeResponse instanceof Error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"domain_remove_failed",message:(0,import_error_utils11.errorToString)(removeResponse)},1),output_manager_default.prettyError(removeResponse),1;removedPreviousAssignment=!0;try{aliasTarget=await addDomainToProject(client,projectName,domainName)}catch(error){aliasTarget=error instanceof Error?error:new Error((0,import_error_utils11.errorToString)(error))}}}}if(aliasTarget instanceof Error){let partialReassignmentHint=removedPreviousAssignment?"Removed the previous project assignment, but could not confirm the destination assignment. Inspect the current assignment before retrying.":void 0;if(client.nonInteractive){let status6=isAPIError(aliasTarget)?aliasTarget.status:void 0,apiErr=aliasTarget,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=aliasTarget.message.toLowerCase(),reason=status6===403?"forbidden":status6===404?"not_found":status6===409||msg.includes("already")?"alias_conflict":"domain_add_failed";(code2==="not_domain_owner"||status6===403&&msg.includes("not authorized"))&&(reason="domain_not_owned");let message=(0,import_error_utils11.errorToString)(aliasTarget);(reason==="domain_not_owned"||code2==="invalid_domain"||msg.includes("not authorized to use"))&&(message+=" domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, the user must run 'domains buy' interactively (agents must not purchase) or buy in the dashboard; use 'domains transfer-in' to move an existing registration to Vercel."),outputAgentError(client,{status:"error",reason,message,...partialReassignmentHint?{hint:partialReassignmentHint}:{},next:removedPreviousAssignment?[{command:withGlobalFlags(client,`domains inspect ${quoteArg(domainName)}`),when:"inspect the current assignment before retrying"}]:nextCommandsForDomainsAddFailure(client,domainName,projectName,aliasTarget)},1)}return output_manager_default.prettyError(aliasTarget),partialReassignmentHint&&output_manager_default.log(partialReassignmentHint),1}}return client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_added",message:`Domain ${domainName} added to project ${projectName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName,projectName)},0),output_manager_default.success(`Domain ${import_chalk95.default.bold(domainName)} added to project ${import_chalk95.default.bold(projectName)}. ${addStamp()}`),printDomainConfiguration(client,domainName)}var import_chalk96=__toESM(require_source(),1);async function check(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(checkSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,domains2=args,hasMultipleInputDomains=domains2.length>1,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(domains2.length===0)return output_manager_default.error("Missing domain name. Usage: `vercel domains check <domain>`"),2;if(domains2.length>50)return output_manager_default.error("Too many domains. You can check up to 50 domains per request."),1;let invalidDomains=domains2.filter(domain2=>!isRootDomain(domain2));if(invalidDomains.length>0)return output_manager_default.error(`Invalid domain name(s): ${invalidDomains.map(domain2=>param(domain2)).join(", ")}. Run ${getCommandName("domains --help")}`),1;try{let results=domains2.length===1?[{domain:domains2[0],available:(await getDomainStatus(client,domains2[0])).available}]:(await client.fetch("/v1/registrar/domains/availability",{method:"POST",body:{domains:domains2}})).results;if(formatResult.jsonOutput)return!hasMultipleInputDomains&&results.length===1?client.stdout.write(`${JSON.stringify({domain:results[0].domain,available:!!results[0].available},null,2)}
381
381
  `):client.stdout.write(`${JSON.stringify({results:results.map(result=>({domain:result.domain,available:!!result.available}))},null,2)}
382
382
  `),0;for(let result of results)output_manager_default.log(`The domain ${param(result.domain)} is ${import_chalk96.default.underline(result.available?"available":"unavailable")}.`);return 0}catch(error){if(isAPIError(error)){let message=error.serverMessage||`API error (${error.status})`;return formatResult.jsonOutput?client.stdout.write(`${JSON.stringify({error:error.code||"api_error",message},null,2)}
@@ -407,11 +407,7 @@ ${import_chalk82.default.dim("Anyone with the URL can trigger a deployment. Stor
407
407
  `));let table3=formatTable(["Project","Domains"],["l","l"],[{rows:projects2.map(({project,domains:domains2})=>{let cols=domains2.length?domains2.join(", "):"-";return[project.name,cols]})}]);output_manager_default.print(table3.split(`
408
408
  `).map(line2=>` ${line2}`).join(`
409
409
  `)),output_manager_default.print(`
410
- `)}if(domainConfig.misconfigured){output_manager_default.warn("This Domain is not configured properly. To configure it you should either:",null,null,null),output_manager_default.print(` ${import_chalk99.default.grey("a)")} Set the following record on your DNS provider to continue: ${code(`A ${domainName} 76.76.21.21`)} ${import_chalk99.default.grey("[recommended]")}
411
- `),output_manager_default.print(` ${import_chalk99.default.grey("b)")} Change your Domains's nameservers to the intended set detailed above.
412
-
413
- `),output_manager_default.print(` We will run a verification for you and you will receive an email upon completion.
414
- `);let contextNameConst=contextName,projectNames=Array.from(new Set(projects2.map(({project})=>project.name)));projectNames.length?projectNames.forEach((name,index)=>{let prefix=index===0?" Read more:":" ".repeat(12);output_manager_default.print(`${prefix} https://vercel.com/${contextNameConst}/${name}/settings/domains
410
+ `)}if(domainConfig.misconfigured){let contextNameConst=contextName,projectNames=Array.from(new Set(projects2.map(({project})=>project.name))),recordsSource=projectNames.length?"Check the project's Domains settings for the required DNS records":"Assign it to a project to see the required DNS records";output_manager_default.warn(`This domain is not configured properly. ${recordsSource}, or run ${getCommandName("domains verify --help")} for CLI verification options.`,null,null,null),projectNames.length?projectNames.forEach((name,index)=>{let prefix=index===0?" Read more:":" ".repeat(12);output_manager_default.print(`${prefix} https://vercel.com/${contextNameConst}/${name}/settings/domains
415
411
  `)}):output_manager_default.print(` Read more: https://vercel.link/domain-configuration
416
412
  `),output_manager_default.print(`
417
413
  `)}return null}async function fetchInformation({client,contextName,domainName}){let[domain2,renewalPrice]=await Promise.all([getDomainByName(client,contextName,domainName,{ignoreWait:!0}),getDomainPrice(client,domainName).then(res=>res instanceof Error?null:res.renewalPrice).catch(()=>null)]);if(domain2 instanceof DomainNotFound)return output_manager_default.prettyError(domain2),1;if(domain2 instanceof DomainPermissionDenied)return output_manager_default.prettyError(domain2),output_manager_default.log(`Run ${getCommandName("domains ls")} to see your domains.`),1;let projects2=await findProjectsForDomain(client,domainName);if(projects2 instanceof Error)return output_manager_default.prettyError(projects2),1;let domainConfig=await getDomainConfig(client,domainName);return{domain:domain2,projects:projects2,renewalPrice,domainConfig}}var import_ms15=__toESM(require_ms(),1),import_chalk100=__toESM(require_source(),1),import_pluralize8=__toESM(require_pluralize(),1);var DomainsLsTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls7(client,argv){let telemetry2=new DomainsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand12.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"domains ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionLimit(opts["--limit"]),telemetry2.trackCliOptionNext(opts["--next"]),telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),1}let contextName=await getContextName(client,{resolveLocalScope:!0}),lsStamp=stamp_default();output_manager_default.spinner(`Fetching Domains under ${import_chalk100.default.bold(contextName)}`);let{domains:domains2,pagination}=await getDomains(client,...paginationOptions);if(asJson){output_manager_default.stopSpinner();let jsonOutput={domains:domains2.map(domain2=>({name:domain2.name,registrar:getDomainRegistrar(domain2),nameservers:isDomainExternal(domain2)?"external":"vercel",expiresAt:domain2.expiresAt,createdAt:domain2.createdAt,creator:domain2.creator.username})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
@@ -589,7 +585,7 @@ ${formatRuleExpanded(previewRule)}
589
585
  `),opts.skipPrompts)return createFromGenerated(client,project,teamId,currentRule,opts);for(;;){let choice=await client.input.select({message:"What would you like to do?",choices:[{value:"create",name:"Create this rule"},{value:"edit-ai",name:"Edit with AI (describe changes)"},{value:"edit-manual",name:"Edit manually (step by step)"},{value:"discard",name:"Discard"}]});if(choice==="create")return createFromGenerated(client,project,teamId,currentRule,opts);if(choice==="edit-ai"){let editPrompt=await client.input.text({message:"Describe the changes you want:",validate:val=>val.trim()?!0:"Please describe the changes."});output_manager_default.spinner("Regenerating rule...");try{let response=await generateFirewallRule(client,project.id,{prompt:editPrompt,currentRule},{teamId});if(output_manager_default.stopSpinner(),response.error||!response.rule){output_manager_default.error(`AI could not update the rule: ${response.error||"No rule returned"}`);continue}currentRule=response.rule;let updatedPreview={...currentRule,id:"(AI-generated)"};output_manager_default.print(`
590
586
  ${formatRuleExpanded(updatedPreview)}
591
587
 
592
- `);continue}catch(e2){output_manager_default.stopSpinner();let error=e2;output_manager_default.error(`Failed to regenerate: ${error.message||"Unknown error"}`);continue}}if(choice==="edit-manual"){let prePopulated={...currentRule,id:"(new)"},modified=await runInteractiveEditLoop2(client,prePopulated);if(!modified)continue;return createFromGenerated(client,project,teamId,modified,opts)}if(choice==="discard")return output_manager_default.log("Discarded"),0}}async function createFromGenerated(client,project,teamId,rule,opts){let createStamp=stamp_default();output_manager_default.spinner("Staging rule");let scope=projectScope(project,teamId);try{let hadExistingDraft=await detectExistingDraft(client,scope);return await patchFirewallDraft(client,scope,{action:"rules.insert",id:null,value:{name:rule.name,description:rule.description,active:rule.active!==!1,conditionGroup:rule.conditionGroup,action:rule.action}}),output_manager_default.log(`${import_chalk133.default.cyan("Success!")} Rule "${import_chalk133.default.bold(rule.name)}" staged ${import_chalk133.default.gray(createStamp())}`),printActionImpactWarning(rule.action),await offerAutoPublish(client,scope,hadExistingDraft,{skipPrompts:opts.skipPrompts}),0}catch(e2){let msg=e2.message||"Failed to stage rule";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"staging_failed",message:msg,next:[{command:withGlobalFlags3(client,"firewall rules add --yes"),when:"try again"}]},1),output_manager_default.error(msg),1}}async function add8(client,argv){let parsed=await parseSubcommandArgs2(argv,rulesAddSubcommand3,client,"rules add");if(typeof parsed=="number")return parsed;let aiPrompt=parsed.flags["--ai"],jsonInput=parsed.flags["--json"],conditionFlags=parsed.flags["--condition"];if([aiPrompt,jsonInput,conditionFlags].filter(Boolean).length>1)return output_manager_default.error("Cannot use --ai, --json, and --condition together. Use only one mode."),1;if(aiPrompt){if(parsed.flags["--team-level"])return output_manager_default.error("AI mode is not available with --team-level. Use --json or --condition flags instead."),1;if(client.nonInteractive||!client.stdin.isTTY)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"ai_not_available",message:"AI mode is not available in non-interactive mode. AI-generated rules require human review before staging. Use --json or --condition flags instead.",next:[{command:withGlobalFlags3(client,`firewall rules add "Name" --condition '{"type":"path","op":"pre","value":"/api"}' --action deny --yes`),when:"create with flags"},{command:withGlobalFlags3(client,`firewall rules add --json '{"name":"...","conditionGroup":[...],"action":{...}}' --yes`),when:"create with JSON"}]}),output_manager_default.error("AI mode is not available in non-interactive mode. Use --json or --condition flags instead."),1;let scope=await resolveFirewallScope(client,parsed.flags);return typeof scope=="number"?scope:scope.type==="team"?(output_manager_default.error("AI mode is not available with --team-level. Use --json or --condition flags instead."),1):handleAIAdd(client,{id:scope.projectId,name:scope.displayName},scope.teamId,{prompt:aiPrompt,name:parsed.args[0],skipPrompts:!!parsed.flags["--yes"]})}if(jsonInput)return handleJsonAdd(client,parsed,jsonInput);if(conditionFlags)return handleFlagAdd(client,parsed,conditionFlags);if(client.stdin.isTTY&&!client.nonInteractive){let scope=await resolveFirewallScope(client,parsed.flags);if(typeof scope=="number")return scope;let mode=await client.input.select({message:"How would you like to create the rule?",choices:[...scope.type==="project"?[{value:"ai",name:"Describe what you want (AI-powered)"}]:[],{value:"manual",name:"Build manually (step by step)"},{value:"json",name:"Paste JSON"}]});if(mode==="ai"&&scope.type==="project")return handleAIAdd(client,{id:scope.projectId,name:scope.displayName},scope.teamId,{skipPrompts:!1});if(mode==="json"){let jsonStr=await client.input.text({message:"Paste the JSON rule definition:"});return handleJsonAdd(client,parsed,jsonStr)}return addInteractive(client,scope,{skipPrompts:!!parsed.flags["--yes"]})}return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_flags",message:"No rule definition provided. Use --json or --condition flags.",next:[{command:withGlobalFlags3(client,`firewall rules add "Name" --condition '{"type":"path","op":"pre","value":"/api"}' --action deny --yes`),when:"create with flags"},{command:withGlobalFlags3(client,`firewall rules add --json '{"name":"Name","conditionGroup":[...],"action":{"mitigate":{"action":"deny"}}}' --yes`),when:"create with JSON"}]}),output_manager_default.error("Interactive mode is not available. Use --ai, --json, or --condition flags to create a rule."),2}async function handleJsonAdd(client,parsed,jsonStr){let ruleData;try{ruleData=JSON.parse(jsonStr)}catch{return output_manager_default.error("Invalid JSON. Please provide a valid JSON object."),2}if(!ruleData.name||typeof ruleData.name!="string")return output_manager_default.error('JSON must include a "name" field (string).'),1;if(!ruleData.conditionGroup||!Array.isArray(ruleData.conditionGroup))return output_manager_default.error('JSON must include a "conditionGroup" field (array).'),1;for(let i=0;i<ruleData.conditionGroup.length;i++){let group=ruleData.conditionGroup[i];if(!group.conditions||!Array.isArray(group.conditions))return output_manager_default.error(`conditionGroup[${i}] must have a "conditions" array.`),1;for(let j=0;j<group.conditions.length;j++){let cond=group.conditions[j];if(!cond.type||typeof cond.type!="string")return output_manager_default.error(`conditionGroup[${i}].conditions[${j}] must have a "type" field.`),1;if(!cond.op||typeof cond.op!="string")return output_manager_default.error(`conditionGroup[${i}].conditions[${j}] must have an "op" field.`),1}}if(!ruleData.action||typeof ruleData.action!="object")return output_manager_default.error('JSON must include an "action" field (object).'),1;let actionObj=ruleData.action;if(!actionObj.mitigate||typeof actionObj.mitigate!="object")return output_manager_default.error('action must have a "mitigate" field. Example: { "mitigate": { "action": "deny" } }'),1;let mitigateObj=actionObj.mitigate;if(!mitigateObj.action||typeof mitigateObj.action!="string")return output_manager_default.error('action.mitigate must have an "action" field (string). Valid: deny, challenge, rate_limit, log, redirect.'),1;if(ruleData.name.length>160)return output_manager_default.error("Rule name must be 160 characters or less."),1;if(ruleData.description&&ruleData.description.length>256)return output_manager_default.error("Rule description must be 256 characters or less."),1;if(ruleData.conditionGroup.length>25)return output_manager_default.error("Maximum 25 condition groups allowed."),1;let rule={name:ruleData.name,description:ruleData.description,active:ruleData.active!==!1,conditionGroup:ruleData.conditionGroup,action:ruleData.action};return createRule2(client,parsed,rule)}async function handleFlagAdd(client,parsed,conditionFlags){let name=parsed.args[0];if(!name)return output_manager_default.error(`Missing rule name. Provide as the first argument: ${import_chalk134.default.cyan(withGlobalFlags3(client,'firewall rules add "Rule name" --condition ...'))}`),1;if(name.length>160)return output_manager_default.error("Rule name must be 160 characters or less."),1;let rawArgs=parsed.flags["--condition"];if(!rawArgs||rawArgs.length===0)return output_manager_default.error("At least one --condition is required."),2;let hasOr=parsed.flags["--or"],conditionGroups;if(hasOr){let interleaved=[],condValues=[...rawArgs],condIdx=0;for(let arg of client.argv)arg==="--or"?interleaved.push("--or"):(arg==="--condition"||arg.startsWith("--condition="))&&condIdx<condValues.length&&(interleaved.push(condValues[condIdx]),condIdx++);let result=parseConditionFlags(interleaved);if(typeof result=="string")return output_manager_default.error(result),1;conditionGroups=result.groups}else{let result=parseConditionFlags(rawArgs);if(typeof result=="string")return output_manager_default.error(result),1;conditionGroups=result.groups}let actionType=parsed.flags["--action"];if(!actionType)return output_manager_default.error(`Missing --action. Valid actions: ${VALID_ACTIONS.join(", ")}`),1;if(!VALID_ACTIONS.includes(actionType))return output_manager_default.error(`Invalid action "${actionType}". Valid actions: ${VALID_ACTIONS.join(", ")}`),1;let action=buildActionFromFlags(parsed.flags,actionType);if(typeof action=="string")return output_manager_default.error(action),1;let description=parsed.flags["--description"];if(description&&description.length>256)return output_manager_default.error("Rule description must be 256 characters or less."),1;let active=!parsed.flags["--disabled"];return createRule2(client,parsed,{name,description,active,conditionGroup:conditionGroups,action})}async function createRule2(client,parsed,rule){let scope=await resolveFirewallScope(client,parsed.flags);if(typeof scope=="number")return scope;let reserved=refuseManagedBotMutation(client,scope,rule.name,"add a custom rule named");if(reserved!==null)return reserved;let previewRule={...rule,id:"(new)"};if(output_manager_default.print(`
588
+ `);continue}catch(e2){output_manager_default.stopSpinner();let error=e2;output_manager_default.error(`Failed to regenerate: ${error.message||"Unknown error"}`);continue}}if(choice==="edit-manual"){let prePopulated={...currentRule,id:"(new)"},modified=await runInteractiveEditLoop2(client,prePopulated);if(!modified)continue;return createFromGenerated(client,project,teamId,modified,opts)}if(choice==="discard")return output_manager_default.log("Discarded"),0}}async function createFromGenerated(client,project,teamId,rule,opts){let createStamp=stamp_default();output_manager_default.spinner("Staging rule");let scope=projectScope(project,teamId);try{let hadExistingDraft=await detectExistingDraft(client,scope);return await patchFirewallDraft(client,scope,{action:"rules.insert",id:null,value:{name:rule.name,description:rule.description,active:rule.active!==!1,conditionGroup:rule.conditionGroup,action:rule.action}}),output_manager_default.log(`${import_chalk133.default.cyan("Success!")} Rule "${import_chalk133.default.bold(rule.name)}" staged ${import_chalk133.default.gray(createStamp())}`),printActionImpactWarning(rule.action),await offerAutoPublish(client,scope,hadExistingDraft,{skipPrompts:opts.skipPrompts}),0}catch(e2){let msg=e2.message||"Failed to stage rule";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"staging_failed",message:msg,next:[{command:withGlobalFlags3(client,"firewall rules add --yes"),when:"try again"}]},1),output_manager_default.error(msg),1}}async function add8(client,argv){let parsed=await parseSubcommandArgs2(argv,rulesAddSubcommand3,client,"rules add");if(typeof parsed=="number")return parsed;let aiPrompt=parsed.flags["--ai"],jsonInput=parsed.flags["--json"],conditionFlags=parsed.flags["--condition"];if([aiPrompt,jsonInput,conditionFlags].filter(Boolean).length>1)return output_manager_default.error("Cannot use --ai, --json, and --condition together. Use only one mode."),1;if(aiPrompt){if(parsed.flags["--team-level"])return output_manager_default.error("AI mode is not available with --team-level. Use --json or --condition flags instead."),1;if(client.nonInteractive||!client.stdin.isTTY)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"ai_not_available",message:"AI mode is not available in non-interactive mode. AI-generated rules require human review before staging. Use --json or --condition flags instead.",next:[{command:withGlobalFlags3(client,`firewall rules add "Name" --condition '{"type":"path","op":"pre","value":"/api"}' --action deny --yes`),when:"create with flags"},{command:withGlobalFlags3(client,`firewall rules add --json '{"name":"...","conditionGroup":[...],"action":{...}}' --yes`),when:"create with JSON"}]}),output_manager_default.error("AI mode is not available in non-interactive mode. Use --json or --condition flags instead."),1;let scope=await resolveFirewallScope(client,parsed.flags);return typeof scope=="number"?scope:scope.type==="team"?(output_manager_default.error("AI mode is not available with --team-level. Use --json or --condition flags instead."),1):handleAIAdd(client,{id:scope.projectId,name:scope.displayName},scope.teamId,{prompt:aiPrompt,name:parsed.args[0],skipPrompts:!!parsed.flags["--yes"]})}if(jsonInput)return handleJsonAdd(client,parsed,jsonInput);if(conditionFlags)return handleFlagAdd(client,parsed,conditionFlags);if(client.stdin.isTTY&&!client.nonInteractive){let scope=await resolveFirewallScope(client,parsed.flags);if(typeof scope=="number")return scope;let mode=await client.input.select({message:"How would you like to create the rule?",choices:[...scope.type==="project"?[{value:"ai",name:"Describe what you want (AI-powered)"}]:[],{value:"manual",name:"Build manually (step by step)"},{value:"json",name:"Paste JSON"}]});if(mode==="ai"&&scope.type==="project")return handleAIAdd(client,{id:scope.projectId,name:scope.displayName},scope.teamId,{skipPrompts:!1});if(mode==="json"){let jsonStr=await client.input.text({message:"Paste the JSON rule definition:"});return handleJsonAdd(client,parsed,jsonStr)}return addInteractive(client,scope,{skipPrompts:!!parsed.flags["--yes"]})}return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_flags",message:"No rule definition provided. Use --json or --condition flags.",next:[{command:withGlobalFlags3(client,`firewall rules add "Name" --condition '{"type":"path","op":"pre","value":"/api"}' --action deny --yes`),when:"create with flags"},{command:withGlobalFlags3(client,`firewall rules add --json '{"name":"Name","conditionGroup":[...],"action":{"mitigate":{"action":"deny"}}}' --yes`),when:"create with JSON"}]}),output_manager_default.error("Interactive mode is not available. Use --ai, --json, or --condition flags to create a rule."),2}async function handleJsonAdd(client,parsed,jsonStr){let ruleData;try{ruleData=JSON.parse(jsonStr)}catch{return output_manager_default.error("Invalid JSON. Please provide a valid JSON object."),2}if(!ruleData.name||typeof ruleData.name!="string")return output_manager_default.error('JSON must include a "name" field (string).'),1;if(!ruleData.conditionGroup||!Array.isArray(ruleData.conditionGroup))return output_manager_default.error('JSON must include a "conditionGroup" field (array).'),1;for(let i=0;i<ruleData.conditionGroup.length;i++){let group=ruleData.conditionGroup[i];if(!group.conditions||!Array.isArray(group.conditions))return output_manager_default.error(`conditionGroup[${i}] must have a "conditions" array.`),1;for(let j=0;j<group.conditions.length;j++){let cond=group.conditions[j];if(!cond.type||typeof cond.type!="string")return output_manager_default.error(`conditionGroup[${i}].conditions[${j}] must have a "type" field.`),1;if(!cond.op||typeof cond.op!="string")return output_manager_default.error(`conditionGroup[${i}].conditions[${j}] must have an "op" field.`),1}}if(!ruleData.action||typeof ruleData.action!="object")return output_manager_default.error('JSON must include an "action" field (object).'),1;let actionObj=ruleData.action;if(!actionObj.mitigate||typeof actionObj.mitigate!="object")return output_manager_default.error('action must have a "mitigate" field. Example: { "mitigate": { "action": "deny" } }'),1;let mitigateObj=actionObj.mitigate;if(!mitigateObj.action||typeof mitigateObj.action!="string")return output_manager_default.error('action.mitigate must have an "action" field (string). Valid: deny, challenge, rate_limit, log, redirect.'),1;if(ruleData.name.length>160)return output_manager_default.error("Rule name must be 160 characters or less."),1;if(ruleData.description&&ruleData.description.length>256)return output_manager_default.error("Rule description must be 256 characters or less."),1;if(ruleData.conditionGroup.length>25)return output_manager_default.error("Maximum 25 condition groups allowed."),1;let rule={name:ruleData.name,description:ruleData.description,active:ruleData.active!==!1,conditionGroup:ruleData.conditionGroup,action:ruleData.action};return createRule2(client,parsed,rule)}async function handleFlagAdd(client,parsed,conditionFlags){let name=parsed.args[0];if(!name)return output_manager_default.error(`Missing rule name. Provide as the first argument: ${import_chalk134.default.cyan(withGlobalFlags3(client,'firewall rules add "Rule name" --condition ...'))}`),1;if(name.length>160)return output_manager_default.error("Rule name must be 160 characters or less."),1;let rawArgs=parsed.flags["--condition"];if(!rawArgs||rawArgs.length===0)return output_manager_default.error("At least one --condition is required."),2;let hasOr=parsed.flags["--or"],conditionGroups;if(hasOr){let interleaved=[],condValues=[...rawArgs],condIdx=0;for(let arg2 of client.argv)arg2==="--or"?interleaved.push("--or"):(arg2==="--condition"||arg2.startsWith("--condition="))&&condIdx<condValues.length&&(interleaved.push(condValues[condIdx]),condIdx++);let result=parseConditionFlags(interleaved);if(typeof result=="string")return output_manager_default.error(result),1;conditionGroups=result.groups}else{let result=parseConditionFlags(rawArgs);if(typeof result=="string")return output_manager_default.error(result),1;conditionGroups=result.groups}let actionType=parsed.flags["--action"];if(!actionType)return output_manager_default.error(`Missing --action. Valid actions: ${VALID_ACTIONS.join(", ")}`),1;if(!VALID_ACTIONS.includes(actionType))return output_manager_default.error(`Invalid action "${actionType}". Valid actions: ${VALID_ACTIONS.join(", ")}`),1;let action=buildActionFromFlags(parsed.flags,actionType);if(typeof action=="string")return output_manager_default.error(action),1;let description=parsed.flags["--description"];if(description&&description.length>256)return output_manager_default.error("Rule description must be 256 characters or less."),1;let active=!parsed.flags["--disabled"];return createRule2(client,parsed,{name,description,active,conditionGroup:conditionGroups,action})}async function createRule2(client,parsed,rule){let scope=await resolveFirewallScope(client,parsed.flags);if(typeof scope=="number")return scope;let reserved=refuseManagedBotMutation(client,scope,rule.name,"add a custom rule named");if(reserved!==null)return reserved;let previewRule={...rule,id:"(new)"};if(output_manager_default.print(`
593
589
  ${formatRuleExpanded(previewRule)}
594
590
 
595
591
  `),!await confirmAction(client,parsed.flags["--yes"],"Create this rule?"))return output_manager_default.log("Canceled"),0;let createStamp=stamp_default();output_manager_default.spinner("Staging rule");try{let hadExistingDraft=await detectExistingDraft(client,scope);return await patchFirewallDraft(client,scope,{action:"rules.insert",id:null,value:rule}),output_manager_default.log(`${import_chalk134.default.cyan("Success!")} Rule "${import_chalk134.default.bold(rule.name)}" staged ${import_chalk134.default.gray(createStamp())}`),printActionImpactWarning(rule.action),await offerAutoPublish(client,scope,hadExistingDraft,{skipPrompts:parsed.flags["--yes"]}),0}catch(e2){let msg=mapFirewallApiError(e2,scope,"Failed to stage rule");return client.nonInteractive?(outputAgentError(client,{status:"error",reason:"api_error",message:msg,next:[{command:withGlobalFlags3(client,"firewall rules add --yes",scope)}]}),1):(output_manager_default.error(msg),1)}}var import_chalk136=__toESM(require_source(),1);var import_chalk135=__toESM(require_source(),1);var UNSUPPORTED_FLAGS=["--ai","--json","--condition","--name","--description","--duration","--enabled","--disabled","--rate-limit-algo","--rate-limit-window","--rate-limit-requests","--rate-limit-keys","--rate-limit-action","--redirect-url","--redirect-permanent","--or"];async function editManagedBotRule(client,opts){let used=UNSUPPORTED_FLAGS.filter(flag=>{let value=opts.flags[flag];return Array.isArray(value)?value.length>0:!!value});if(used.length>0){let command2=`firewall rules edit ${opts.id} --action <action>`;return failFirewall(client,{message:`Can't use ${used.join(", ")} on managed bot rules. Use --action.`,reason:AGENT_REASON.INVALID_ARGUMENTS,fix:{command:command2,hint:`Use ${import_chalk135.default.cyan(withGlobalFlags3(client,command2,opts.scope))} to change it.`,when:"edit with --action"}})}let current=getManagedBotRule(opts.config,opts.id),rawAction=opts.flags["--action"],hasActionFlag=!!rawAction;if(!rawAction){if(client.nonInteractive||!client.stdin.isTTY){let command2=`firewall rules edit ${opts.id} --action <action>`;return failFirewall(client,{message:`Specify --action for ${current.name}. Run ${import_chalk135.default.cyan(withGlobalFlags3(client,`firewall rules inspect ${opts.id}`,opts.scope))} to see the current value.`,reason:AGENT_REASON.MISSING_ARGUMENTS,fix:{command:command2,hint:`Use ${import_chalk135.default.cyan(withGlobalFlags3(client,command2,opts.scope))}.`,when:"set --action"}})}output_manager_default.print(`
@@ -815,10 +811,10 @@ Create your first flag to set it up: ${cmd(buildCommandWithGlobalFlags(client.ar
815
811
  ${table3}
816
812
  `)}var import_chalk192=__toESM(require_source(),1);var IDENTIFIER_PATTERN=/^[a-zA-Z0-9_-]+$/,MAX_ENTITIES=32,MAX_ATTRIBUTES=32,MAX_IDENTIFIER_LENGTH=128;function validateEntityKind(kind){if(!IDENTIFIER_PATTERN.test(kind)||kind.length>MAX_IDENTIFIER_LENGTH)throw new Error(`Invalid entity kind "${kind}". Use up to ${MAX_IDENTIFIER_LENGTH} letters, numbers, dashes, and underscores, for example user.`)}function validateEntityLabel(label){if(label.trim().length===0)throw new Error("Entity label can not be empty.");if(label.length>MAX_IDENTIFIER_LENGTH)throw new Error(`Entity label can not be longer than ${MAX_IDENTIFIER_LENGTH} characters.`)}function validateAttributeKey(key){if(!IDENTIFIER_PATTERN.test(key)||key.length>MAX_IDENTIFIER_LENGTH)throw new Error(`Invalid attribute key "${key}". Use up to ${MAX_IDENTIFIER_LENGTH} letters, numbers, dashes, and underscores, for example plan.`)}function parseAttributeType(type,key){if(!isFlagAttributeType(type))throw new Error(`Invalid type "${type}" for attribute "${key}". Valid types: ${formatFlagAttributeTypeList()}.`);return type}function parseAttributeInput(input){let parts=input.trim().split(":").map(part=>part.trim());if(parts.length!==2||!parts[0]||!parts[1])throw new Error(`Invalid attribute "${input}". Use KEY:TYPE, for example plan:string. Valid types: ${formatFlagAttributeTypeList()}.`);let[key,type]=parts;return validateAttributeKey(key),{key,type:parseAttributeType(type,key)}}function parseAttributeInputs(inputs){let attributes=inputs.map(parseAttributeInput),seen=new Set;for(let attribute of attributes){if(seen.has(attribute.key))throw new Error(`Attribute "${attribute.key}" is specified twice.`);seen.add(attribute.key)}return attributes}function defaultEntityLabel(kind){return kind.split(/[-_\s]+/).filter(Boolean).map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(" ")}function findEntity(entities2,kind){return entities2.find(entity=>entity.kind===kind)}function findAttribute(entity,key){return entity.attributes.find(attribute=>attribute.key===key)}function validateEntities(entities2){if(entities2.length>MAX_ENTITIES)throw new Error(`A project can have at most ${MAX_ENTITIES} entities. Remove one before adding another.`);let kinds=new Set,labels2=new Set;for(let entity of entities2){if(kinds.has(entity.kind))throw new Error(`Entity kind "${entity.kind}" already exists.`);if(labels2.has(entity.label.trim()))throw new Error(`Entity label "${entity.label}" is already used by another entity.`);if(kinds.add(entity.kind),labels2.add(entity.label.trim()),entity.attributes.length>MAX_ATTRIBUTES)throw new Error(`Entity "${entity.kind}" can have at most ${MAX_ATTRIBUTES} attributes.`);let keys=new Set;for(let attribute of entity.attributes){if(keys.has(attribute.key))throw new Error(`Attribute "${attribute.key}" already exists on entity "${entity.kind}".`);keys.add(attribute.key)}}}async function entitiesCreate(client,argv){let parsedArgs=parseEntityArguments(client,argv,entitiesCreateSubcommand.options),{args,flags}=parsedArgs,[kind]=args,label=flags["--label"]?.trim(),attributeInputs=flags["--attribute"]??[],json=flags["--json"],projectName=getProjectNameFromFlags(flags);if(!kind)return client.nonInteractive?(entityAgentError(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide an entity kind to create.",next:[{command:"flags entities create <kind> --label <label> --attribute <key>:<type>",when:"create an entity with explicit attributes"}]}),2):(output_manager_default.fatal("Provide a kind for the entity"),output_manager_default.log(`Example: ${getCommandName("flags entities create user --label User --attribute id:string")}`),2);let attributes;try{validateEntityKind(kind),label!==void 0&&validateEntityLabel(label),attributes=parseAttributeInputs(attributeInputs)}catch(err){return output_manager_default.fatal(err.message),2}let context=await resolveEntitiesProject(client,projectName);if(isExitCodeResult(context))return context.exitCode;let{project,projectSlugLink}=context;output_manager_default.spinner("Fetching feature flag settings\u2026");let settings=await getFlagSettings(client,project.id);if(output_manager_default.stopSpinner(),findEntity(settings.entities,kind))return output_manager_default.fatal(`Entity ${import_chalk192.default.bold(kind)} already exists. Run ${getCommandName(`flags entities update ${kind}`)} to change it.`),1;let willPrompt=client.stdin.isTTY&&!client.nonInteractive&&(label===void 0||attributes.length===0);willPrompt&&printAlignedLabel("Project",projectSlugLink),label=await resolveEntityLabel(client,label,kind),attributes.length===0&&client.stdin.isTTY&&!client.nonInteractive&&(attributes=await collectAttributesInteractively(client)),willPrompt&&(settings=await getFlagSettings(client,project.id));let entity={kind,label,attributes},entities2=[...settings.entities,entity];try{validateEntityLabel(label),validateEntities(entities2)}catch(err){return output_manager_default.fatal(err.message),1}output_manager_default.spinner("Creating entity\u2026");let updated=await updateFlagSettings(client,project.id,{entities:entities2});output_manager_default.stopSpinner();let created=findEntity(updated.entities,kind)??entity;return json?(client.stdout.write(`${JSON.stringify({entity:created},null,2)}
817
813
  `),0):(output_manager_default.success(`Feature flag entity ${import_chalk192.default.bold(created.kind)} created`),printEntityDetails(created,projectSlugLink),0)}async function resolveEntityLabel(client,label,kind){if(label)return label;let defaultLabel=defaultEntityLabel(kind);return client.stdin.isTTY&&!client.nonInteractive&&(await client.input.text({message:`Enter a label for this entity (press Enter for "${defaultLabel}"):`})).trim()||defaultLabel}async function collectAttributesInteractively(client){let attributes=[],addAnother=await client.input.confirm("Add attributes now?",!0);for(;addAnother;){let key=await client.input.text({message:"Attribute key (for example plan):",validate:value=>{try{validateAttributeKey(value.trim())}catch(err){return err.message}return attributes.some(attribute=>attribute.key===value.trim())?`Attribute "${value.trim()}" is already added.`:!0}}),type=await client.input.select({message:"Attribute type:",choices:FLAG_ATTRIBUTE_TYPES.map(value=>({name:value,value}))});attributes.push({key:key.trim(),type}),addAnother=await client.input.confirm("Add another attribute?",!1)}return attributes}var import_chalk193=__toESM(require_source(),1);async function entitiesUpdate(client,argv){let parsedArgs=parseEntityArguments(client,argv,entitiesUpdateSubcommand.options),{args,flags}=parsedArgs,kind=args[0],label=flags["--label"]?.trim(),addInputs=flags["--add-attribute"]??[],removeInputs=flags["--remove-attribute"]??[],setTypeInputs=flags["--set-attribute-type"]??[],json=flags["--json"],projectName=getProjectNameFromFlags(flags),changes;try{changes=parseChanges({label,addInputs,removeInputs,setTypeInputs})}catch(err){return output_manager_default.fatal(err.message),2}if(!(changes.label!==void 0||changes.addAttributes.length>0||changes.removeAttributes.length>0||changes.setAttributeTypes.length>0))return client.nonInteractive?(entityAgentError(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide at least one entity update option, such as --label, --add-attribute, --remove-attribute, or --set-attribute-type.",next:[{command:"flags entities update <kind> --add-attribute <key>:<type>",when:"add an attribute to an entity"},{command:"flags entities update <kind> --remove-attribute <key>",when:"remove an attribute from an entity"},{command:"flags entities ls --json",when:"inspect the current entities first"}]}),2):(output_manager_default.fatal("Provide at least one change: --label, --add-attribute, --remove-attribute, or --set-attribute-type"),output_manager_default.log(`Example: ${getCommandName("flags entities update user --add-attribute email:string")}`),2);let context=await resolveEntitiesProject(client,projectName);if(isExitCodeResult(context))return context.exitCode;let{project,projectSlugLink}=context;output_manager_default.spinner("Fetching feature flag settings\u2026");let settings=await getFlagSettings(client,project.id);if(output_manager_default.stopSpinner(),!kind){if(client.stdin.isTTY&&!client.nonInteractive&&printAlignedLabel("Project",projectSlugLink),kind=await selectEntityKind(client,settings.entities,"update",buildRetryCommand(void 0,changes)),!kind)return client.nonInteractive||!client.stdin.isTTY?2:1;settings=await getFlagSettings(client,project.id)}let entity=findEntity(settings.entities,kind);if(!entity)return reportEntityNotFound(client,kind,buildRetryCommand(void 0,changes)),1;let retryCommand=buildRetryCommand(kind,changes);for(let attribute of changes.addAttributes)if(findAttribute(entity,attribute.key))return output_manager_default.fatal(`Attribute "${attribute.key}" already exists on entity "${entity.kind}". Use --set-attribute-type to change its type.`),1;for(let key of changes.removeAttributes)if(!findAttribute(entity,key))return output_manager_default.fatal(`Attribute ${import_chalk193.default.bold(`${kind}.${key}`)} does not exist.`),1;for(let attribute of changes.setAttributeTypes)if(!findAttribute(entity,attribute.key))return output_manager_default.fatal(`Attribute ${import_chalk193.default.bold(`${kind}.${attribute.key}`)} does not exist. Use --add-attribute to add it.`),1;let updatedEntity=applyChanges(entity,changes),entities2=settings.entities.map(candidate=>candidate.kind===kind?updatedEntity:candidate);try{validateEntities(entities2)}catch(err){return output_manager_default.fatal(err.message),1}let typeChanges=changes.setAttributeTypes.filter(attribute=>findAttribute(entity,attribute.key)?.type!==attribute.type),guardedKeys=[...changes.removeAttributes,...typeChanges.map(attribute=>attribute.key)];if(guardedKeys.length>0){output_manager_default.spinner("Checking flags and segments for references\u2026");let sources=await loadEntityUsageSources(client,project.id);output_manager_default.stopSpinner();for(let key of guardedKeys){let usage2=collectEntityUsage(sources,kind,key);if(reportEntityInUse(client,{kind,attribute:key,usage:usage2,retryCommand}))return 1}}output_manager_default.spinner("Updating entity\u2026");let updated=await updateFlagSettings(client,project.id,{entities:entities2});output_manager_default.stopSpinner();let result=findEntity(updated.entities,kind)??updatedEntity;return json?(client.stdout.write(`${JSON.stringify({entity:result},null,2)}
818
- `),0):(output_manager_default.success(`Feature flag entity ${import_chalk193.default.bold(result.kind)} updated`),printEntityDetails(result,projectSlugLink),0)}function parseChanges(input){input.label!==void 0&&validateEntityLabel(input.label);let addAttributes=parseAttributeInputs(input.addInputs),setAttributeTypes=parseAttributeInputs(input.setTypeInputs),removeAttributes=input.removeInputs.map(value=>value.trim());for(let key of removeAttributes)validateAttributeKey(key);let removed=new Set(removeAttributes);for(let attribute of[...addAttributes,...setAttributeTypes])if(removed.has(attribute.key))throw new Error(`Attribute "${attribute.key}" can not be removed and changed in the same command.`);let added=new Set(addAttributes.map(attribute=>attribute.key));for(let attribute of setAttributeTypes)if(added.has(attribute.key))throw new Error(`Attribute "${attribute.key}" can not be added and have its type changed in the same command.`);return{label:input.label,addAttributes,removeAttributes,setAttributeTypes}}function applyChanges(entity,changes){let removed=new Set(changes.removeAttributes),typeByKey=new Map(changes.setAttributeTypes.map(attribute=>[attribute.key,attribute.type]));return{...entity,label:changes.label??entity.label,attributes:[...entity.attributes.filter(attribute=>!removed.has(attribute.key)).map(attribute=>{let type=typeByKey.get(attribute.key);return type!==void 0&&type!==attribute.type?{key:attribute.key,type}:attribute}),...changes.addAttributes]}}function buildRetryCommand(kind,changes){let parts=[`flags entities update ${kind===void 0?"<kind>":quoteArg(kind)}`];changes.label!==void 0&&parts.push(`--label ${quoteArg(changes.label)}`);for(let attribute of changes.addAttributes)parts.push(`--add-attribute ${quoteArg(`${attribute.key}:${attribute.type}`)}`);for(let key of changes.removeAttributes)parts.push(`--remove-attribute ${quoteArg(key)}`);for(let attribute of changes.setAttributeTypes)parts.push(`--set-attribute-type ${quoteArg(`${attribute.key}:${attribute.type}`)}`);return parts.join(" ")}var import_chalk194=__toESM(require_source(),1),import_pluralize16=__toESM(require_pluralize(),1);async function entitiesRm(client,argv){let parsedArgs=parseEntityArguments(client,argv,entitiesRemoveSubcommand.options),{args,flags}=parsedArgs;if(args.length>1){let message="Provide only one entity kind to delete.";return entityAgentError(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:"flags entities rm <kind> --yes",when:"replace <kind> with the single entity kind to delete"}]}),client.nonInteractive||output_manager_default.fatal(message),2}let kind=args[0],skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);if(client.nonInteractive||!client.stdin.isTTY){if(!kind)return await selectEntityKind(client,[],"delete","flags entities rm <kind> --yes"),2;if(!skipConfirmation)return reportMissingConfirmation(client,kind),1}let context=await resolveEntitiesProject(client,projectName);if(isExitCodeResult(context))return context.exitCode;let{project,projectSlugLink}=context;output_manager_default.spinner("Fetching feature flag settings\u2026");let settings=await getFlagSettings(client,project.id),prompted=!1;if(output_manager_default.stopSpinner(),!kind&&(printAlignedLabel("Project",projectSlugLink),kind=await selectEntityKind(client,settings.entities,"delete","flags entities rm <kind> --yes"),prompted=!0,!kind))return 1;let entity=findEntity(settings.entities,kind);if(!entity)return reportEntityNotFound(client,kind,"flags entities rm <kind> --yes"),1;if(!skipConfirmation){prompted||printAlignedLabel("Project",projectSlugLink);let confirmed=await client.input.confirm(`Delete entity ${import_chalk194.default.bold(entity.kind)} and its ${(0,import_pluralize16.default)("attribute",entity.attributes.length,!0)}?`,!1);if(prompted=!0,!confirmed)return output_manager_default.log("Aborted"),0}if(prompted&&(settings=await getFlagSettings(client,project.id),!findEntity(settings.entities,kind)))return reportEntityNotFound(client,kind,"flags entities rm <kind> --yes"),1;output_manager_default.spinner("Checking flags and segments for references\u2026");let sources=await loadEntityUsageSources(client,project.id);return output_manager_default.stopSpinner(),reportEntityInUse(client,{kind,usage:collectEntityUsage(sources,kind),retryCommand:`flags entities rm ${quoteArg(kind)} --yes`})?1:(output_manager_default.spinner("Deleting entity\u2026"),await updateFlagSettings(client,project.id,{entities:settings.entities.filter(candidate=>candidate.kind!==kind)}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag entity ${import_chalk194.default.bold(entity.kind)} deleted`),0)}function reportMissingConfirmation(client,kind){entityAgentError(client,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Add --yes to delete entity ${kind}.`,next:[{command:`flags entities rm ${quoteArg(kind)} --yes`,when:"delete the entity"}]}),client.nonInteractive||output_manager_default.fatal("Missing required flag --yes. Add --yes to delete the entity without prompting.")}var commands={ls:{command:entitiesListSubcommand,run:entitiesLs},create:{command:entitiesCreateSubcommand,run:entitiesCreate},update:{command:entitiesUpdateSubcommand,run:entitiesUpdate},rm:{command:entitiesRemoveSubcommand,run:entitiesRm}},aliases=Object.fromEntries(Object.entries(commands).map(([name,{command:command2}])=>[name,getCommandAliases(command2)]));async function entities(client){let telemetry2=new FlagsEntitiesTelemetryClient({opts:{store:client.telemetryEventStore}});try{let parsed=parseArguments(client.argv.slice(4),getFlagsSpecification(entitiesSubcommand.options),{permissive:!0}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsed.args,aliases),entry2=typeof subcommand=="string"?commands[subcommand]:void 0;return parsed.flags["--help"]||!entry2?(parsed.flags["--help"]?telemetry2.trackCliFlagHelp("flags entities",entry2?subcommandOriginal:void 0):output_manager_default.fatal(getInvalidSubcommand(aliases)),output_manager_default.print(help(entry2?.command??entitiesSubcommand,{parent:entry2?{...entitiesSubcommand,name:"flags entities"}:flagsCommand,columns:client.stderr.columns})),parsed.flags["--help"]?0:2):(telemetry2.trackSubcommand(subcommand,subcommandOriginal),await entry2.run(client,args))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}}var import_pluralize17=__toESM(require_pluralize(),1);function parseEntityLabelOperations(input){let operations;if(input.data!==void 0){if(input.set.length||input.remove.length)throw new Error("Can't combine --data with --set or --remove.");let data;try{data=JSON.parse(input.data)}catch{throw new Error("--data must be a JSON array of label operations.")}if(!Array.isArray(data)||data.length===0)throw new Error("--data must be a non-empty JSON array of label operations.");operations=data}else operations=[...input.remove.map(value=>({operation:"delete",value})),...input.set.map(valueLabel=>{let separator=valueLabel.indexOf("=");if(separator===-1)throw new Error('Use --set VALUE=LABEL, for example --set "pro=Pro Plan".');return{operation:"upsert",value:valueLabel.slice(0,separator),label:valueLabel.slice(separator+1)}})];return validateEntityLabelOperations(operations)}var MAX_LABEL_OPERATIONS=100;function validateEntityLabelOperations(operations){if(operations.length>MAX_LABEL_OPERATIONS)throw new Error(`Cannot update more than ${MAX_LABEL_OPERATIONS} labels at once. Split the operations into smaller batches.`);let values=new Set;return operations.map(item=>{if(!item||typeof item!="object")throw new Error("Each label operation must be an object.");let record=item,{operation,value,label}=record;if(operation!=="upsert"&&operation!=="delete")throw new Error('Label operations must use "upsert" or "delete".');let keys=operation==="upsert"?["operation","value","label"]:["operation","value"];if(Object.keys(record).some(key=>!keys.includes(key)))throw new Error(`Label ${operation} operations accept only ${keys.join(", ")}.`);if(validateLabelString(value,"value"),values.has(value))throw new Error("Each value can have only one label operation per command.");return values.add(value),operation==="delete"?{operation,value}:(validateLabelString(label,"label"),{operation,value,label})})}function validateLabelString(value,field){if(typeof value!="string"||Array.from(value).length>128)throw new Error(`Label ${field} must be a string of at most 128 characters.`)}function updateEntityLabelsBulk(client,projectId,items){return client.fetch(`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/labels/bulk`,{method:"PATCH",body:{items},retry:{retries:0},bailOn429:!0})}function parseLabelPagination(limit=20,next,attribute){if(!Number.isSafeInteger(limit)||limit<1)throw new Error("The --limit option must be a positive integer.");if(next===void 0)return{limit};try{if(!/^[A-Za-z0-9_-]+$/.test(next)||next.length>4096)throw new Error;let cursor2=JSON.parse(Buffer.from(next,"base64url").toString("utf8"));if(!cursor2||cursor2.version!==1||typeof cursor2.projectId!="string"||!cursor2.projectId||cursor2.attribute!==attribute||typeof cursor2.after!="string")throw new Error;return{limit,cursor:cursor2}}catch{throw new Error("Invalid or expired --next cursor for this list view. Omit --next to restart the list.")}}function paginateLabelItems(items,{limit,cursor:cursor2},projectId,attribute,key){let remaining=items.filter(item=>cursor2===void 0||key(item)>cursor2.after).sort((a,b)=>key(a)<key(b)?-1:key(a)>key(b)?1:0),page=remaining.slice(0,limit),next=remaining.length>page.length?Buffer.from(JSON.stringify({version:1,projectId,attribute,after:key(page[page.length-1])})).toString("base64url"):null;return{items:page,pagination:{next}}}var FlagsLabelsTelemetryClient=class extends TelemetryClient{trackSubcommand(subcommand,actual){this.trackCliSubcommand({subcommand,value:actual})}trackArguments(args,flags){for(let[index,arg]of["attribute","value","label"].entries())index<args.length&&this.trackCliArgument({arg,value:this.redactedValue});this.trackCliOptionProject(flags["--project"]);for(let option of["set","remove","data","next"])flags[`--${option}`]!==void 0&&this.trackCliOption({option,value:this.redactedValue});flags["--limit"]!==void 0&&this.trackCliOption({option:"limit",value:String(flags["--limit"])}),flags["--json"]&&this.trackCliFlag("json")}};async function labels(client){let argv=client.argv.slice(4),telemetry2=new FlagsLabelsTelemetryClient({opts:{store:client.telemetryEventStore}}),json=client.nonInteractive||argv.includes("--json"),inspectCommand2="flags entities ls --json",reason=AGENT_REASON.INVALID_ARGUMENTS,recovery="Inspect entities and labels before retrying";function next(){return[{command:buildCommandWithGlobalFlags(client.argv,inspectCommand2,void 0,{preserveProject:inspectCommand2.startsWith("flags ")}),when:recovery}]}function printRecovery(){output_manager_default.print(` ${recovery}:
814
+ `),0):(output_manager_default.success(`Feature flag entity ${import_chalk193.default.bold(result.kind)} updated`),printEntityDetails(result,projectSlugLink),0)}function parseChanges(input){input.label!==void 0&&validateEntityLabel(input.label);let addAttributes=parseAttributeInputs(input.addInputs),setAttributeTypes=parseAttributeInputs(input.setTypeInputs),removeAttributes=input.removeInputs.map(value=>value.trim());for(let key of removeAttributes)validateAttributeKey(key);let removed=new Set(removeAttributes);for(let attribute of[...addAttributes,...setAttributeTypes])if(removed.has(attribute.key))throw new Error(`Attribute "${attribute.key}" can not be removed and changed in the same command.`);let added=new Set(addAttributes.map(attribute=>attribute.key));for(let attribute of setAttributeTypes)if(added.has(attribute.key))throw new Error(`Attribute "${attribute.key}" can not be added and have its type changed in the same command.`);return{label:input.label,addAttributes,removeAttributes,setAttributeTypes}}function applyChanges(entity,changes){let removed=new Set(changes.removeAttributes),typeByKey=new Map(changes.setAttributeTypes.map(attribute=>[attribute.key,attribute.type]));return{...entity,label:changes.label??entity.label,attributes:[...entity.attributes.filter(attribute=>!removed.has(attribute.key)).map(attribute=>{let type=typeByKey.get(attribute.key);return type!==void 0&&type!==attribute.type?{key:attribute.key,type}:attribute}),...changes.addAttributes]}}function buildRetryCommand(kind,changes){let parts=[`flags entities update ${kind===void 0?"<kind>":quoteArg(kind)}`];changes.label!==void 0&&parts.push(`--label ${quoteArg(changes.label)}`);for(let attribute of changes.addAttributes)parts.push(`--add-attribute ${quoteArg(`${attribute.key}:${attribute.type}`)}`);for(let key of changes.removeAttributes)parts.push(`--remove-attribute ${quoteArg(key)}`);for(let attribute of changes.setAttributeTypes)parts.push(`--set-attribute-type ${quoteArg(`${attribute.key}:${attribute.type}`)}`);return parts.join(" ")}var import_chalk194=__toESM(require_source(),1),import_pluralize16=__toESM(require_pluralize(),1);async function entitiesRm(client,argv){let parsedArgs=parseEntityArguments(client,argv,entitiesRemoveSubcommand.options),{args,flags}=parsedArgs;if(args.length>1){let message="Provide only one entity kind to delete.";return entityAgentError(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:"flags entities rm <kind> --yes",when:"replace <kind> with the single entity kind to delete"}]}),client.nonInteractive||output_manager_default.fatal(message),2}let kind=args[0],skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);if(client.nonInteractive||!client.stdin.isTTY){if(!kind)return await selectEntityKind(client,[],"delete","flags entities rm <kind> --yes"),2;if(!skipConfirmation)return reportMissingConfirmation(client,kind),1}let context=await resolveEntitiesProject(client,projectName);if(isExitCodeResult(context))return context.exitCode;let{project,projectSlugLink}=context;output_manager_default.spinner("Fetching feature flag settings\u2026");let settings=await getFlagSettings(client,project.id),prompted=!1;if(output_manager_default.stopSpinner(),!kind&&(printAlignedLabel("Project",projectSlugLink),kind=await selectEntityKind(client,settings.entities,"delete","flags entities rm <kind> --yes"),prompted=!0,!kind))return 1;let entity=findEntity(settings.entities,kind);if(!entity)return reportEntityNotFound(client,kind,"flags entities rm <kind> --yes"),1;if(!skipConfirmation){prompted||printAlignedLabel("Project",projectSlugLink);let confirmed=await client.input.confirm(`Delete entity ${import_chalk194.default.bold(entity.kind)} and its ${(0,import_pluralize16.default)("attribute",entity.attributes.length,!0)}?`,!1);if(prompted=!0,!confirmed)return output_manager_default.log("Aborted"),0}if(prompted&&(settings=await getFlagSettings(client,project.id),!findEntity(settings.entities,kind)))return reportEntityNotFound(client,kind,"flags entities rm <kind> --yes"),1;output_manager_default.spinner("Checking flags and segments for references\u2026");let sources=await loadEntityUsageSources(client,project.id);return output_manager_default.stopSpinner(),reportEntityInUse(client,{kind,usage:collectEntityUsage(sources,kind),retryCommand:`flags entities rm ${quoteArg(kind)} --yes`})?1:(output_manager_default.spinner("Deleting entity\u2026"),await updateFlagSettings(client,project.id,{entities:settings.entities.filter(candidate=>candidate.kind!==kind)}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag entity ${import_chalk194.default.bold(entity.kind)} deleted`),0)}function reportMissingConfirmation(client,kind){entityAgentError(client,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Add --yes to delete entity ${kind}.`,next:[{command:`flags entities rm ${quoteArg(kind)} --yes`,when:"delete the entity"}]}),client.nonInteractive||output_manager_default.fatal("Missing required flag --yes. Add --yes to delete the entity without prompting.")}var commands={ls:{command:entitiesListSubcommand,run:entitiesLs},create:{command:entitiesCreateSubcommand,run:entitiesCreate},update:{command:entitiesUpdateSubcommand,run:entitiesUpdate},rm:{command:entitiesRemoveSubcommand,run:entitiesRm}},aliases=Object.fromEntries(Object.entries(commands).map(([name,{command:command2}])=>[name,getCommandAliases(command2)]));async function entities(client){let telemetry2=new FlagsEntitiesTelemetryClient({opts:{store:client.telemetryEventStore}});try{let parsed=parseArguments(client.argv.slice(4),getFlagsSpecification(entitiesSubcommand.options),{permissive:!0}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsed.args,aliases),entry2=typeof subcommand=="string"?commands[subcommand]:void 0;return parsed.flags["--help"]||!entry2?(parsed.flags["--help"]?telemetry2.trackCliFlagHelp("flags entities",entry2?subcommandOriginal:void 0):output_manager_default.fatal(getInvalidSubcommand(aliases)),output_manager_default.print(help(entry2?.command??entitiesSubcommand,{parent:entry2?{...entitiesSubcommand,name:"flags entities"}:flagsCommand,columns:client.stderr.columns})),parsed.flags["--help"]?0:2):(telemetry2.trackSubcommand(subcommand,subcommandOriginal),await entry2.run(client,args))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}}var import_pluralize17=__toESM(require_pluralize(),1);function parseEntityLabelOperations(input){let operations;if(input.data!==void 0){if(input.set.length||input.remove.length)throw new Error("Can't combine --data with --set or --remove.");let data;try{data=JSON.parse(input.data)}catch{throw new Error("--data must be a JSON array of label operations.")}if(!Array.isArray(data)||data.length===0)throw new Error("--data must be a non-empty JSON array of label operations.");operations=data}else operations=[...input.remove.map(value=>({operation:"delete",value})),...input.set.map(valueLabel=>{let separator=valueLabel.indexOf("=");if(separator===-1)throw new Error('Use --set VALUE=LABEL, for example --set "pro=Pro Plan".');return{operation:"upsert",value:valueLabel.slice(0,separator),label:valueLabel.slice(separator+1)}})];return validateEntityLabelOperations(operations)}var MAX_LABEL_OPERATIONS=100;function validateEntityLabelOperations(operations){if(operations.length>MAX_LABEL_OPERATIONS)throw new Error(`Cannot update more than ${MAX_LABEL_OPERATIONS} labels at once. Split the operations into smaller batches.`);let values=new Set;return operations.map(item=>{if(!item||typeof item!="object")throw new Error("Each label operation must be an object.");let record=item,{operation,value,label}=record;if(operation!=="upsert"&&operation!=="delete")throw new Error('Label operations must use "upsert" or "delete".');let keys=operation==="upsert"?["operation","value","label"]:["operation","value"];if(Object.keys(record).some(key=>!keys.includes(key)))throw new Error(`Label ${operation} operations accept only ${keys.join(", ")}.`);if(validateLabelString(value,"value"),values.has(value))throw new Error("Each value can have only one label operation per command.");return values.add(value),operation==="delete"?{operation,value}:(validateLabelString(label,"label"),{operation,value,label})})}function validateLabelString(value,field){if(typeof value!="string"||Array.from(value).length>128)throw new Error(`Label ${field} must be a string of at most 128 characters.`)}function updateEntityLabelsBulk(client,projectId,items){return client.fetch(`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/labels/bulk`,{method:"PATCH",body:{items},retry:{retries:0},bailOn429:!0})}function parseLabelPagination(limit=20,next,attribute){if(!Number.isSafeInteger(limit)||limit<1)throw new Error("The --limit option must be a positive integer.");if(next===void 0)return{limit};try{if(!/^[A-Za-z0-9_-]+$/.test(next)||next.length>4096)throw new Error;let cursor2=JSON.parse(Buffer.from(next,"base64url").toString("utf8"));if(!cursor2||cursor2.version!==1||typeof cursor2.projectId!="string"||!cursor2.projectId||cursor2.attribute!==attribute||typeof cursor2.after!="string")throw new Error;return{limit,cursor:cursor2}}catch{throw new Error("Invalid or expired --next cursor for this list view. Omit --next to restart the list.")}}function paginateLabelItems(items,{limit,cursor:cursor2},projectId,attribute,key){let remaining=items.filter(item=>cursor2===void 0||key(item)>cursor2.after).sort((a,b)=>key(a)<key(b)?-1:key(a)>key(b)?1:0),page=remaining.slice(0,limit),next=remaining.length>page.length?Buffer.from(JSON.stringify({version:1,projectId,attribute,after:key(page[page.length-1])})).toString("base64url"):null;return{items:page,pagination:{next}}}var FlagsLabelsTelemetryClient=class extends TelemetryClient{trackSubcommand(subcommand,actual){this.trackCliSubcommand({subcommand,value:actual})}trackArguments(args,flags){for(let[index,arg2]of["attribute","value","label"].entries())index<args.length&&this.trackCliArgument({arg:arg2,value:this.redactedValue});this.trackCliOptionProject(flags["--project"]);for(let option of["set","remove","data","next"])flags[`--${option}`]!==void 0&&this.trackCliOption({option,value:this.redactedValue});flags["--limit"]!==void 0&&this.trackCliOption({option:"limit",value:String(flags["--limit"])}),flags["--json"]&&this.trackCliFlag("json")}};async function labels(client){let argv=client.argv.slice(4),telemetry2=new FlagsLabelsTelemetryClient({opts:{store:client.telemetryEventStore}}),json=client.nonInteractive||argv.includes("--json"),inspectCommand2="flags entities ls --json",reason=AGENT_REASON.INVALID_ARGUMENTS,recovery="Inspect entities and labels before retrying";function next(){return[{command:buildCommandWithGlobalFlags(client.argv,inspectCommand2,void 0,{preserveProject:inspectCommand2.startsWith("flags ")}),when:recovery}]}function printRecovery(){output_manager_default.print(` ${recovery}:
819
815
  ${next()[0].command}
820
816
  `)}function fail2(message){if(json){let status6=reason===AGENT_REASON.MISSING_ARGUMENTS||reason===AGENT_REASON.NOT_LINKED?AGENT_STATUS.ACTION_REQUIRED:AGENT_STATUS.ERROR;client.stdout.write(`${JSON.stringify({status:status6,reason,message,next:next()},null,2)}
821
- `)}else output_manager_default.fatal(message),printRecovery();return getExitCodeForReason(reason)}try{let printNextPage2=function(cursor2){if(!json&&cursor2&&pageOptions){let globalArgs=getGlobalFlagsFromArgs(client.argv.slice(2));globalArgs.some(arg=>arg==="--scope"||arg==="-S"||arg.startsWith("--scope="))||globalArgs.push("--scope",org.slug);let command3=getCommandNamePlain(["flags","labels","ls",...target===void 0?[]:[target],"--project",project.name,"--limit",String(pageOptions.limit),"--next",cursor2,...globalArgs].map(quoteArg).join(" "));output_manager_default.print(` Next page:
817
+ `)}else output_manager_default.fatal(message),printRecovery();return getExitCodeForReason(reason)}try{let printNextPage2=function(cursor2){if(!json&&cursor2&&pageOptions){let globalArgs=getGlobalFlagsFromArgs(client.argv.slice(2));globalArgs.some(arg2=>arg2==="--scope"||arg2==="-S"||arg2.startsWith("--scope="))||globalArgs.push("--scope",org.slug);let command3=getCommandNamePlain(["flags","labels","ls",...target===void 0?[]:[target],"--project",project.name,"--limit",String(pageOptions.limit),"--next",cursor2,...globalArgs].map(quoteArg).join(" "));output_manager_default.print(` Next page:
822
818
  ${command3}
823
819
  `)}};var printNextPage=printNextPage2;let parsed=parseArguments(argv,getFlagsSpecification(labelsListSubcommand.options),{permissive:!0}),aliases2=Object.fromEntries(labelsSubcommand.subcommands.map(command3=>[command3.name,getCommandAliases(command3)])),{subcommand,subcommandOriginal}=getSubcommand7(parsed.args,aliases2),command2=labelsSubcommand.subcommands.find(command3=>command3.name===subcommand);if(parsed.flags["--help"])return telemetry2.trackCliFlagHelp("flags labels",command2?subcommandOriginal:void 0),output_manager_default.print(help(command2??labelsSubcommand,{parent:command2?{...labelsSubcommand,name:"flags labels"}:flagsCommand,columns:client.stderr.columns})),0;if(!command2)return reason=parsed.args.length?AGENT_REASON.INVALID_ARGUMENTS:AGENT_REASON.MISSING_ARGUMENTS,fail2(getInvalidSubcommand(aliases2));telemetry2.trackSubcommand(command2.name,subcommandOriginal);let{args:positional,flags}=parseArguments(argv,getFlagsSpecification(command2.options)),[target,...args]=positional.slice(1);if(telemetry2.trackArguments(positional.slice(1),flags),json=!!flags["--json"]||client.nonInteractive,target===void 0&&command2.name!=="ls")return reason=AGENT_REASON.MISSING_ARGUMENTS,fail2('Provide an attribute as ENTITY.ATTRIBUTE. Example: vercel flags labels set user.plan pro "Pro Plan".');let[kind,attributeKey]=target?.split(".")??[];if(target!==void 0){if(target.split(".").length!==2)return fail2("Use an attribute as ENTITY.ATTRIBUTE, for example user.plan.");validateEntityKind(kind),validateAttributeKey(attributeKey)}let pageOptions=command2.name==="ls"?parseLabelPagination(flags["--limit"],flags["--next"],target??null):void 0;if(args.length!==command2.arguments.length-1)return args.length<command2.arguments.length-1&&(reason=AGENT_REASON.MISSING_ARGUMENTS),fail2(command2.name==="set"?'Provide a value and a label. Example: vercel flags labels set user.plan pro "Pro Plan".':command2.name==="rm"?"Provide one value. Example: vercel flags labels rm user.plan pro.":`The ${command2.name} command accepts only one attribute as ENTITY.ATTRIBUTE.`);let operations=command2.name==="set"?validateEntityLabelOperations([{operation:"upsert",value:args[0],label:args[1]}]):command2.name==="rm"?validateEntityLabelOperations([{operation:"delete",value:args[0]}]):parseEntityLabelOperations({set:flags["--set"]??[],remove:flags["--remove"]??[],data:flags["--data"]});if(command2.name==="apply"&&operations.length===0)return reason=AGENT_REASON.MISSING_ARGUMENTS,fail2("Provide --set VALUE=LABEL, --remove VALUE, or --data JSON.");reason=AGENT_REASON.API_ERROR;let projectName=getProjectNameFromFlags(flags),context=await getLinkedFlagsProject(client,projectName,{projectNotFoundHandling:"return"});if(context.status==="error")return inspectCommand2="project ls",recovery="Check the project and team context before retrying",fail2("Failed to resolve the project. Check the project and team settings.");if(context.status==="not_linked")return reason=projectName?AGENT_REASON.PROJECT_NOT_FOUND:AGENT_REASON.NOT_LINKED,inspectCommand2=projectName?"project ls":"link",recovery=projectName?"Select an accessible project before retrying":"Link a project before retrying",fail2(projectName?`Project ${JSON.stringify(projectName)} was not found or is not accessible. Check --project and your team scope.`:"Your codebase isn't linked to a project. Pass --project <name>, or run vercel link to link it.");let{project,org}=context;if(client.config.currentTeam=org.type==="team"?org.id:void 0,pageOptions?.cursor&&pageOptions.cursor.projectId!==project.id)return reason=AGENT_REASON.INVALID_ARGUMENTS,fail2("The --next cursor belongs to a different project. Omit --next to restart the list.");let projectSlugLink=formatProject(org.slug,project.name);output_manager_default.spinner("Fetching attribute labels\u2026");let settings=await getFlagSettings(client,project.id);if(output_manager_default.stopSpinner(),pageOptions&&target===void 0){let available=settings.entities.flatMap(entity2=>entity2.attributes.filter(attribute2=>attribute2.labels?.length).map(attribute2=>({id:null,attributes:[{entityKind:entity2.kind,attributeKey:attribute2.key}],labelCount:attribute2.labels.length}))),{items:lists,pagination}=paginateLabelItems(available,pageOptions,project.id,null,list30=>`${list30.attributes[0].entityKind}.${list30.attributes[0].attributeKey}`);if(json)client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,lists,pagination},null,2)}
824
820
  `);else if(printAlignedLabel("Project",projectSlugLink),lists.length===0)output_manager_default.log(pageOptions.cursor?"No more label lists found.":"No label lists found.");else{let rows=lists.map(list30=>[`${list30.attributes[0].entityKind}.${list30.attributes[0].attributeKey}`,String(list30.labelCount)]);output_manager_default.print(`
@@ -845,7 +841,7 @@ ${table3}
845
841
  `)}return 1}}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function resolveTargetVariant(flag,variantSelector){if(variantSelector)return resolveVariantOrThrow(variantSelector,flag.variants,"--variant");if(flag.kind==="boolean")return getBooleanVariant(flag,!0);output_manager_default.error(`Missing required option --variant. Flag ${import_chalk203.default.bold(flag.slug)} is a ${flag.kind} flag, so choose which variant the targets receive.`),output_manager_default.log(`Example: ${getCommandName(`flags targets add ${flag.slug} --environment production --variant <VARIANT> user.id=user_123`)}`)}function buildLabelItems(selectors,settings){let items=selectors.filter(selector=>selector.label!==void 0&&selector.label!==resolveTargetingLabel(settings,selector.entity,selector.attribute,selector.value)).map(selector=>({operation:"upsert",entityKind:selector.entity,attributeKey:selector.attribute,value:selector.value,label:selector.label}));if(items.length>MAX_LABEL_OPERATIONS)throw new Error(`Cannot set more than ${MAX_LABEL_OPERATIONS} labels at once. Split the targets into smaller batches.`);return items}async function saveLabels(client,projectId,items){if(items.length!==0){output_manager_default.spinner("Saving labels...");try{return await updateEntityLabelsBulk(client,projectId,items)}catch(err){let message=err instanceof Error?err.message:String(err);return{labels:[],errors:items.map(item=>({entityKind:item.entityKind,attributeKey:item.attributeKey,value:item.value,code:isAPIError(err)?err.code??"api_error":"error",message}))}}finally{output_manager_default.stopSpinner()}}}function writeJson3(client,flag,environment,targets2,labels2){client.stdout.write(`${JSON.stringify({flag,environment,targets:targets2,...labels2?{labels:labels2}:{}},null,2)}
846
842
  `)}var import_chalk204=__toESM(require_source(),1),import_pluralize21=__toESM(require_pluralize(),1);var EXAMPLE2="flags targets remove my-feature --environment production user.id=user_123";async function targetsRemove(client,argv){let telemetryClient=new FlagsTargetsCommandTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(targetsRemoveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,[flagArg,...targetInputs]=args,environment=flags["--environment"],message=normalizeOptionalInput(flags["--message"]),json=flags["--json"];if(telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliArgumentTarget(targetInputs),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionMessage(message),telemetryClient.trackCliFlagJson(json),telemetryClient.trackCliOptionProject(flags["--project"]),!flagArg||targetInputs.length===0)return output_manager_default.error("Please provide a flag slug or ID and at least one target as ENTITY.ATTRIBUTE=VALUE"),output_manager_default.log(`Example: ${getCommandName(EXAMPLE2)}`),2;if(json&&!environment)return output_manager_default.error("Missing required option --environment when using --json"),output_manager_default.log(`Example: ${getCommandName(`${EXAMPLE2} --json`)}`),2;try{let selectors=targetInputs.map(input=>parseFlagTargetInput(input)),context=await resolveRulesCommandContext(client,{projectName:flags["--project"],flagArg,environment,promptMessage:"Select an environment to remove targets from:",requireActiveFlag:!0,fetchSettings:!json});if(isExitCodeResult2(context))return context.exitCode;let{targets:targets2,results}=removeFlagTargets(context.envConfig.targets,selectors),defaultMessage=`Remove ${(0,import_pluralize21.default)("target",results.length,!0)} from ${context.environment}`,updateMessage=json?message??defaultMessage:await resolveFlagUpdateMessage(client,message,defaultMessage);output_manager_default.spinner(`Removing targets from ${context.environment}...`);let updatedFlag=await updateFlag(client,context.projectId,flagArg,{environments:{[context.environment]:buildTargetsEnvironmentConfig(context.flag,context.environment,targets2)},message:updateMessage});if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify({flag:updatedFlag.slug,environment:context.environment,targets:updatedFlag.environments[context.environment]?.targets??targets2},null,2)}
847
843
  `),0;output_manager_default.success(`${(0,import_pluralize21.default)("target",results.length,!0)} removed from ${import_chalk204.default.bold(context.flag.slug)} in ${import_chalk204.default.bold(context.environment)}`);for(let result of results)output_manager_default.log(` ${formatTargetValue2(result,context.settings)} ${import_chalk204.default.dim("(was")} ${formatTargetVariant(context.flag,result.variantId)}${import_chalk204.default.dim(")")}`);warnIfRuleChangesAreBypassed(updatedFlag,context.environment,"target")}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var COMMAND_CONFIG44={ls:getCommandAliases(targetsListSubcommand),add:getCommandAliases(targetsAddSubcommand),rm:getCommandAliases(targetsRemoveSubcommand)};async function targets(client){let telemetry2=new FlagsTargetsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(targetsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args,COMMAND_CONFIG44),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("flags targets",subcommand),output_manager_default.print(help(targetsSubcommand,{parent:flagsCommand,columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:targetsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry2.trackCliFlagHelp("flags targets",subcommandOriginal),printHelp(targetsListSubcommand),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),targetsLs(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("flags targets",subcommandOriginal),printHelp(targetsAddSubcommand),0):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),targetsAdd(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("flags targets",subcommandOriginal),printHelp(targetsRemoveSubcommand),0):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),targetsRemove(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG44)),output_manager_default.print(help(targetsSubcommand,{parent:flagsCommand,columns:client.stderr.columns})),2}}var import_env=__toESM(require_dist4(),1);import{prepareFlagsDefinitions}from"@vercel/prepare-flags-definitions";async function emitDatafiles(client){try{parseArguments(client.argv.slice(4),getFlagsSpecification(prepareSubcommand.options))}catch(err){return printError(err),2}try{let localEnv={};try{localEnv=(0,import_env.loadEnvConfig)(client.cwd,!0).combinedEnv}catch(err){output_manager_default.debug(`Failed to load local env files: ${err}`)}return await prepareFlagsDefinitions({cwd:client.cwd,env:{...localEnv,...process.env},userAgentSuffix:ua_default,output:output_manager_default}),0}catch(err){return printError(err),1}}var import_env2=__toESM(require_dist4(),1);import{base64url,EncryptJWT,jwtDecrypt}from"jose";async function override(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(overrideSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,decryptToken=flags["--decrypt"];return decryptToken?handleDecrypt(client,decryptToken):handleEncrypt(client,args,flags)}async function handleEncrypt(client,args,flags){let expiration=flags["--expiration"]??"1y";if(args.length===0)return output_manager_default.error(`Please provide at least one flag override as flag=value.
848
- Example: vercel flags override my-flag=true`),2;let overrides={};for(let arg of args){let eqIndex=arg.indexOf("=");if(eqIndex===-1)return output_manager_default.error(`Invalid override format: "${arg}". Expected flag=value.`),1;let key=arg.slice(0,eqIndex),rawValue=arg.slice(eqIndex+1);overrides[key]=parseValue(rawValue)}let secret=resolveSecret(client);if(!secret)return output_manager_default.error("FLAGS_SECRET not found. Set it in the environment, .env.local, or .env file."),1;try{let encrypted=await encryptOverrides(overrides,secret,expiration);return client.stdout.write(encrypted+`
844
+ Example: vercel flags override my-flag=true`),2;let overrides={};for(let arg2 of args){let eqIndex=arg2.indexOf("=");if(eqIndex===-1)return output_manager_default.error(`Invalid override format: "${arg2}". Expected flag=value.`),1;let key=arg2.slice(0,eqIndex),rawValue=arg2.slice(eqIndex+1);overrides[key]=parseValue(rawValue)}let secret=resolveSecret(client);if(!secret)return output_manager_default.error("FLAGS_SECRET not found. Set it in the environment, .env.local, or .env file."),1;try{let encrypted=await encryptOverrides(overrides,secret,expiration);return client.stdout.write(encrypted+`
849
845
  `),0}catch(err){return printError(err),1}}async function handleDecrypt(client,token2){let secret=resolveSecret(client);if(!secret)return output_manager_default.error("FLAGS_SECRET not found. Set it in the environment, .env.local, or .env file."),1;try{let overrides=await decryptOverrides(token2,secret);return overrides===void 0?(output_manager_default.error("Invalid token: not a valid flag overrides token."),2):(client.stdout.write(JSON.stringify(overrides,null,2)+`
850
846
  `),0)}catch(err){return printError(err),1}}function parseValue(raw){if(raw==="true")return!0;if(raw==="false")return!1;let num=Number(raw);return!Number.isNaN(num)&&raw.trim()!==""?num:raw}function resolveSecret(client){let{combinedEnv}=(0,import_env2.loadEnvConfig)(client.cwd,!0);return combinedEnv.FLAGS_SECRET}async function encryptOverrides(overrides,secret,expirationTime){let encodedSecret=base64url.decode(secret);if(encodedSecret.length!==32)throw new Error("Invalid FLAGS_SECRET: must be a 256-bit base64url-encoded key (32 bytes).");return new EncryptJWT({o:overrides,pur:"overrides"}).setExpirationTime(expirationTime).setProtectedHeader({alg:"dir",enc:"A256GCM"}).encrypt(encodedSecret)}async function decryptOverrides(encryptedData,secret){let encodedSecret=base64url.decode(secret);if(encodedSecret.length!==32)throw new Error("Invalid FLAGS_SECRET: must be a 256-bit base64url-encoded key (32 bytes).");let{payload}=await jwtDecrypt(encryptedData,encodedSecret);if(!(payload.pur!=="overrides"||!payload.o))return payload.o}var COMMAND_CONFIG45={ls:getCommandAliases(listSubcommand14),stale:getCommandAliases(staleSubcommand),inspect:getCommandAliases(inspectSubcommand9),versions:getCommandAliases(versionsSubcommand),evaluations:getCommandAliases(evaluationsSubcommand),create:getCommandAliases(createSubcommand5),open:getCommandAliases(openSubcommand4),update:getCommandAliases(updateSubcommand4),set:getCommandAliases(setSubcommand2),"use-targeting":getCommandAliases(useTargetingSubcommand),split:getCommandAliases(splitSubcommand),rollout:getCommandAliases(rolloutSubcommand),rm:getCommandAliases(removeSubcommand8),archive:getCommandAliases(archiveSubcommand),unarchive:getCommandAliases(unarchiveSubcommand),disable:getCommandAliases(disableSubcommand),enable:getCommandAliases(enableSubcommand),rules:getCommandAliases(rulesSubcommand3),targets:getCommandAliases(targetsSubcommand),segments:getCommandAliases(segmentsSubcommand),entities:getCommandAliases(entitiesSubcommand),labels:getCommandAliases(labelsSubcommand),"sdk-keys":getCommandAliases(sdkKeysSubcommand),prepare:getCommandAliases(prepareSubcommand),override:getCommandAliases(overrideSubcommand)};async function main21(client){let telemetry2=new FlagsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(flagsCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG45),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("flags",subcommand),output_manager_default.print(help(flagsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:flagsCommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(listSubcommand14),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls8(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(inspectSubcommand9),0):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect13(client,args));case"versions":return telemetry2.trackCliSubcommandVersions(subcommandOriginal),versions(client,needHelp?[...args,"--help"]:args);case"evaluations":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(evaluationsSubcommand),0):(telemetry2.trackCliSubcommandEvaluations(subcommandOriginal),evaluations(client,args));case"stale":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(staleSubcommand),0):(telemetry2.trackCliSubcommandStale(subcommandOriginal),stale(client,args));case"open":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(openSubcommand4),0):(telemetry2.trackCliSubcommandOpen(subcommandOriginal),openFlag(client,args));case"create":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(createSubcommand5),0):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create5(client,args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(updateSubcommand4),0):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update3(client,args));case"set":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(setSubcommand2),0):(telemetry2.trackCliSubcommandSet(subcommandOriginal),set5(client,args));case"use-targeting":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(useTargetingSubcommand),0):(telemetry2.trackCliSubcommandUseTargeting(subcommandOriginal),useTargeting(client,args));case"split":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(splitSubcommand),0):(telemetry2.trackCliSubcommandSplit(subcommandOriginal),split2(client,args));case"rollout":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(rolloutSubcommand),0):(telemetry2.trackCliSubcommandRollout(subcommandOriginal),rollout(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(removeSubcommand8),0):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm7(client,args));case"archive":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(archiveSubcommand),0):(telemetry2.trackCliSubcommandArchive(subcommandOriginal),archive(client,args));case"unarchive":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(unarchiveSubcommand),0):(telemetry2.trackCliSubcommandUnarchive(subcommandOriginal),unarchive(client,args));case"disable":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(disableSubcommand),0):(telemetry2.trackCliSubcommandDisable(subcommandOriginal),disable3(client,args));case"enable":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(enableSubcommand),0):(telemetry2.trackCliSubcommandEnable(subcommandOriginal),enable3(client,args));case"rules":return telemetry2.trackCliSubcommandRules(subcommandOriginal),rules2(client);case"targets":return telemetry2.trackCliSubcommandTargets(subcommandOriginal),targets(client);case"sdk-keys":return telemetry2.trackCliSubcommandSdkKeys(subcommandOriginal),sdkKeys(client);case"segments":return telemetry2.trackCliSubcommandSegments(subcommandOriginal),segments(client);case"entities":return telemetry2.trackCliSubcommandEntities(subcommandOriginal),entities(client);case"labels":return telemetry2.trackCliSubcommandLabels(subcommandOriginal),labels(client);case"prepare":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(prepareSubcommand),0):(telemetry2.trackCliSubcommandPrepare(subcommandOriginal),emitDatafiles(client));case"override":return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(overrideSubcommand),0):(telemetry2.trackCliSubcommandOverride(subcommandOriginal),override(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("flags",subcommandOriginal),printHelp(listSubcommand14),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls8(client,args))}}var import_chalk205=__toESM(require_source(),1);import{join as join34}from"path";var GitConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentGitUrl(name){name&&this.trackCliArgument({arg:"gitUrl",value:this.redactedValue})}trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function connect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(connectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,{cwd}=client,telemetry2=new GitConnectTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry2.trackCliFlagConfirm(opts["--confirm"]),telemetry2.trackCliFlagYes(opts["--yes"]),telemetry2.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]);let confirm=!!opts["--yes"];if(args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk205.default.cyan(`${getCommandName("project connect")}`)}`),2;let repoArg=args[0];telemetry2.trackCliArgumentGitUrl(repoArg);let projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm:confirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{project,org}=linkedProject,gitProviderLink=project.link;client.config.currentTeam=org.type==="team"?org.id:void 0;let gitConfigPath=getGitConfigPath({cwd})??join34(cwd,".git/config"),gitConfig=await parseGitConfig(gitConfigPath);if(repoArg){let parsedUrlArg=parseRepoUrl(repoArg);return parsedUrlArg?gitConfig?await connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo:parsedUrlArg}):await connectArg({client,confirm,org,project,repoInfo:parsedUrlArg}):(output_manager_default.error(`Failed to parse URL "${repoArg}". Please ensure the URL is valid.`),1)}if(!gitConfig)return output_manager_default.error(`No local Git repository found. Run ${import_chalk205.default.cyan("`git clone <url>`")} to clone a remote Git repository first.`),1;let remoteUrls=pluckRemoteUrls(gitConfig);if(!remoteUrls)return output_manager_default.error(`No remote URLs found in your Git config. Make sure you've configured a remote repo in your local Git config. Run ${import_chalk205.default.cyan("`git remote --help`")} for more details.`),1;let repoInfo=await selectAndParseRemoteUrl(client,remoteUrls);if(!repoInfo)return Object.keys(remoteUrls).length>1?0:1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});return typeof result=="number"?result:0}async function connectArg({client,confirm,org,project,repoInfo}){let{url:repoUrl}=repoInfo,parsedRepoArg=parseRepoUrl(repoUrl);if(!parsedRepoArg)return output_manager_default.error(`Failed to parse URL "${repoUrl}". Please ensure the URL is valid.`),1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:parsedRepoArg.org,project,provider:parsedRepoArg.provider,repo:parsedRepoArg.repo,repoPath:`${parsedRepoArg.org}/${parsedRepoArg.repo}`});return typeof result=="number"?result:0}async function connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo}){let remoteUrls=pluckRemoteUrls(gitConfig);if(remoteUrls){let shouldConnect=await promptConnectArg({client,yes:confirm,repoInfo,remoteUrls});if(!shouldConnect)return 1;if(shouldConnect){let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});if(typeof result=="number")return result}return 0}return await connectArg({client,confirm,org,project,repoInfo})}async function promptConnectArg({client,yes,repoInfo:repoInfoFromArg,remoteUrls}){if(Object.keys(remoteUrls).length>1)output_manager_default.log("Found multiple Git repositories in your local Git config:"),printRemoteUrls(remoteUrls);else{let url=Object.values(remoteUrls)[0],repoInfoFromGitConfig=parseRepoUrl(url);if(!repoInfoFromGitConfig)return output_manager_default.error(`Failed to parse URL "${url}". Please ensure the URL is valid.`),!1;if(JSON.stringify(repoInfoFromGitConfig)===JSON.stringify(repoInfoFromArg))return!0;output_manager_default.log(`Found a repository in your local Git Config: ${import_chalk205.default.cyan(Object.values(remoteUrls)[0])}`)}let shouldConnect=yes;if(!shouldConnect){let{url:repoUrlFromArg}=repoInfoFromArg;shouldConnect=await client.input.confirm(`Do you still want to connect ${link_default(repoUrlFromArg)}?`,!1),shouldConnect||output_manager_default.log("Canceled. Repo not connected.")}return shouldConnect}var import_chalk206=__toESM(require_source(),1);var GitDisconnectTelemetryClient=class extends TelemetryClient{trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function disconnect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(disconnectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry2=new GitDisconnectTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetry2.trackCliFlagConfirm(opts["--confirm"]),telemetry2.trackCliFlagYes(opts["--yes"]),telemetry2.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]),args.length!==0)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk206.default.cyan(`${getCommandName("project disconnect")}`)}`),2;let autoConfirm=!!parsedArgs.flags["--yes"],projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{org,project}=linkedProject;if(client.config.currentTeam=org.type==="team"?org.id:void 0,project.link){let{org:linkOrg,repo}=project.link;output_manager_default.print(`Your Vercel project will no longer create deployments when you push to this repository.
851
847
  `),autoConfirm||await client.input.confirm(`Are you sure you want to disconnect ${import_chalk206.default.cyan(`${linkOrg}/${repo}`)} from your project?`,!1)?(await disconnectGitProvider(client,org,project.id),output_manager_default.log(`Disconnected ${import_chalk206.default.cyan(`${linkOrg}/${repo}`)}.`)):output_manager_default.log("Canceled")}else return output_manager_default.error(`No Git repository connected. Run ${getCommandName("project connect")} to connect one.`),1;return 0}var GitTelemetryClient=class extends TelemetryClient{trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}};var COMMAND_CONFIG46={connect:["connect"],disconnect:["disconnect"]};async function main22(client){let parsedArgs,flagsSpecification=getFlagsSpecification(gitCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new GitTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG46);if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("git",subcommand),output_manager_default.print(help(gitCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"connect":return telemetry2.trackCliSubcommandConnect(subcommandOriginal),connect(client,args);case"disconnect":return telemetry2.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,args);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG46)),output_manager_default.print(help(gitCommand,{columns:client.stderr.columns})),2}}var import_chalk207=__toESM(require_source(),1);async function status2(client){let status6=isGuidanceEnabled(client,void 0,!0)?import_chalk207.default.green("Enabled"):import_chalk207.default.red("Disabled");return output_manager_default.print(`
@@ -860,8 +856,8 @@ ${deployHint}`),0}).catch(e2=>{throw output_manager_default.stopSpinner(),e2})}f
860
856
  `),{lines:final.length+1,toPrint:`${final.join("")}`}};var import_chalk210=__toESM(require_source(),1),longestProperty=(routes2,name)=>{let val=routes2.sort((a,b)=>{let aName=a[name],bName=b[name],firstItem=typeof aName=="string"?aName.length:0;return(typeof bName=="string"?bName.length:0)-firstItem})[0][name];return typeof val=="string"?val.length:0};function routes(routes2){let toPrint="",longestSrc=longestProperty(routes2,"src"),longestDest=longestProperty(routes2,"dest"),padding2=6,space=" ".repeat(padding2),destSpace=" ".repeat(longestDest||10),arrow=import_chalk210.default.grey("->");for(let item of routes2){if("handle"in item){toPrint+=`${import_chalk210.default.grey("\u2576")} ${import_chalk210.default.cyan(item.handle)}`;continue}let{src,dest,status:status6,headers}=item,suffix=routes2.indexOf(item)===routes2.length-1?"":`
861
857
  `,finalSrc=import_chalk210.default.cyan(src.padEnd(longestSrc+padding2)),finalDest=dest?`${arrow}${space}${dest}`:` ${space}${destSpace}`,finalStatus=status6?import_chalk210.default.grey(`[${status6}]`):"",finalHeaders=null;if(headers){finalHeaders=`
862
858
  `;let headerKeys=Object.keys(headers);for(let header of headerKeys){let value=headers[header],last2=headerKeys.indexOf(header)===headerKeys.length-1,suffix2=last2?"":`
863
- `,prefix2=import_chalk210.default.grey(last2?"\u2514\u2500\u2500":"\u251C\u2500\u2500");finalHeaders+=`${prefix2} ${header}: ${value}${suffix2}`}}let prefix=import_chalk210.default.grey(finalHeaders?"\u250C":"\u2576"),fill=`${finalSrc}${finalDest}${space}${finalStatus}`;toPrint+=`${prefix} ${fill}${finalHeaders||""}${suffix}`}return toPrint}import{URL as URL2}from"url";function parseDeploymentUrl(input){let url;try{url=new URL2(input)}catch{return normalizeDeploymentId(input)}return url.hostname==="vercel.com"||url.hostname==="www.vercel.com"?parseVercelDashboardUrl(url):{deploymentIdOrHost:url.hostname}}function parseVercelDashboardUrl(url){let pathParts=url.pathname.split("/").filter(Boolean);if(pathParts.length>=3){let[scope,,deploymentId]=pathParts;return{deploymentIdOrHost:normalizeDeploymentId(deploymentId).deploymentIdOrHost,scope}}return{deploymentIdOrHost:url.hostname}}function normalizeDeploymentId(input){return input.includes(".")?{deploymentIdOrHost:input}:input.startsWith("dpl_")?{deploymentIdOrHost:input}:{deploymentIdOrHost:`dpl_${input}`}}var InspectTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(idOrHost){idOrHost&&this.trackCliArgument({arg:"deploymentIdOrHost",value:this.redactedValue})}trackCliOptionTimeout(timeout){timeout&&this.trackCliOption({option:"timeout",value:this.redactedValue})}trackCliFlagLogs(logs3){logs3&&this.trackCliFlag("logs")}trackCliFlagWait(wait){wait&&this.trackCliFlag("wait")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect14(client){let{print,error,warn}=output_manager_default,telemetry2=new InspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(inspectCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}if(parsedArguments.flags["--help"])return telemetry2.trackCliFlagHelp("inspect"),print(help(inspectCommand,{columns:client.stderr.columns})),0;parsedArguments.args[0]===inspectCommand.name&&parsedArguments.args.shift();let[deploymentIdOrHost]=parsedArguments.args;if(!deploymentIdOrHost){let stdInput=await readStandardInput(client.stdin);stdInput&&(deploymentIdOrHost=stdInput)}if(!deploymentIdOrHost)return error(`${getCommandName("inspect <url>")} expects exactly one argument`),print(help(inspectCommand,{columns:client.stderr.columns})),2;telemetry2.trackCliArgumentUrlOrDeploymentId(deploymentIdOrHost),telemetry2.trackCliOptionTimeout(parsedArguments.flags["--timeout"]),telemetry2.trackCliFlagLogs(parsedArguments.flags["--logs"]),telemetry2.trackCliFlagWait(parsedArguments.flags["--wait"]),telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetry2.trackCliFlagJson(parsedArguments.flags["--json"]);let timeout=(0,import_ms22.default)(parsedArguments.flags["--timeout"]??"3m");if(timeout===void 0)return error(`Invalid timeout "${parsedArguments.flags["--timeout"]}"`),1;let contextName=null,parsed=parseDeploymentUrl(deploymentIdOrHost);if(deploymentIdOrHost=parsed.deploymentIdOrHost,parsed.scope&&!detectExplicitScope(client)){let team=(await getTeams(client)).find(t=>t.slug===parsed.scope);team&&(client.config.currentTeam=team.id)}try{contextName=await getContextName(client)}catch(err){if((0,import_error_utils15.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let until=Date.now()+timeout,wait=parsedArguments.flags["--wait"]??!1,withLogs=parsedArguments.flags["--logs"],formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,startTimestamp=Date.now();asJson&&withLogs||output_manager_default.spinner(`Fetching deployment "${deploymentIdOrHost}" in ${import_chalk211.default.bold(contextName)}`);let deployment=await getDeployment(client,contextName,deploymentIdOrHost),abortController,buildLogsPromise;if(withLogs)if(asJson){let promise;({abortController,promise}=collectBuildLogs(client,deployment,wait)),buildLogsPromise=promise.catch(error2=>(warn(`Failed to read build logs: ${error2}`),[]))}else{let promise;({abortController,promise}=displayBuildLogs(client,deployment,wait)),wait?promise.catch(error2=>warn(`Failed to read build logs: ${error2}`)):await promise}for(;wait;){if(await sleep(250),deployment=await getDeployment(client,contextName,deploymentIdOrHost),!isDeploying(deployment.readyState)){abortController?.abort();break}if(Date.now()>until){warn(`stopped waiting after ${(0,import_ms22.default)(timeout,{long:!0})}`),abortController?.abort();break}}return asJson?(output_manager_default.stopSpinner(),withLogs?printLogsJson(client,await buildLogsPromise??[]):await printJson({deployment,contextName,client})):withLogs?print(`${import_chalk211.default.cyan("status")} ${stateString(deployment.readyState)}
864
- `):await printDetails({deployment,contextName,client,startTimestamp}),exitCode(deployment.readyState)}function stateString(s){let CIRCLE="\u25CF ",sTitle=s&&(0,import_title3.default)(s);switch(s){case"INITIALIZING":case"BUILDING":return import_chalk211.default.yellow(CIRCLE)+sTitle;case"ERROR":case"BLOCKED":return import_chalk211.default.red(CIRCLE)+sTitle;case"READY":return import_chalk211.default.green(CIRCLE)+sTitle;case"QUEUED":return import_chalk211.default.gray(CIRCLE)+sTitle;case"CANCELED":return import_chalk211.default.gray(CIRCLE)+sTitle;default:return import_chalk211.default.gray("UNKNOWN")}}async function printDetails({deployment,contextName,client,startTimestamp}){output_manager_default.log(`Fetched deployment "${import_chalk211.default.bold(deployment.url)}" in ${import_chalk211.default.bold(contextName)} ${elapsed(Date.now()-startTimestamp)}`);let{id:id2,name,url,createdAt,routes:routes2,readyState,readyStateReason,alias:aliases2}=deployment,{print,link}=output_manager_default,{builds}=deployment.version===2?await client.fetch(`/v11/deployments/${id2}/builds`):{builds:[]};print(`
859
+ `,prefix2=import_chalk210.default.grey(last2?"\u2514\u2500\u2500":"\u251C\u2500\u2500");finalHeaders+=`${prefix2} ${header}: ${value}${suffix2}`}}let prefix=import_chalk210.default.grey(finalHeaders?"\u250C":"\u2576"),fill=`${finalSrc}${finalDest}${space}${finalStatus}`;toPrint+=`${prefix} ${fill}${finalHeaders||""}${suffix}`}return toPrint}import{URL as URL2}from"url";function parseDeploymentUrl(input){let url;try{url=new URL2(input)}catch{return normalizeDeploymentId(input)}return url.hostname==="vercel.com"||url.hostname==="www.vercel.com"?parseVercelDashboardUrl(url):{deploymentIdOrHost:url.hostname}}function parseVercelDashboardUrl(url){let pathParts=url.pathname.split("/").filter(Boolean);if(pathParts.length>=3){let[scope,,deploymentId]=pathParts;return{deploymentIdOrHost:normalizeDeploymentId(deploymentId).deploymentIdOrHost,scope}}return{deploymentIdOrHost:url.hostname}}function normalizeDeploymentId(input){return input.includes(".")?{deploymentIdOrHost:input}:input.startsWith("dpl_")?{deploymentIdOrHost:input}:{deploymentIdOrHost:`dpl_${input}`}}var InspectTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(idOrHost){idOrHost&&this.trackCliArgument({arg:"deploymentIdOrHost",value:this.redactedValue})}trackCliOptionTimeout(timeout){timeout&&this.trackCliOption({option:"timeout",value:this.redactedValue})}trackCliFlagLogs(logs3){logs3&&this.trackCliFlag("logs")}trackCliFlagWait(wait){wait&&this.trackCliFlag("wait")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var WAIT_TIMEOUT_EXIT_CODE=124;async function inspect14(client){let{print,error,warn}=output_manager_default,telemetry2=new InspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(inspectCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}if(parsedArguments.flags["--help"])return telemetry2.trackCliFlagHelp("inspect"),print(help(inspectCommand,{columns:client.stderr.columns})),0;parsedArguments.args[0]===inspectCommand.name&&parsedArguments.args.shift();let[deploymentIdOrHost]=parsedArguments.args;if(!deploymentIdOrHost){let stdInput=await readStandardInput(client.stdin);stdInput&&(deploymentIdOrHost=stdInput)}if(!deploymentIdOrHost)return error(`${getCommandName("inspect <url>")} expects exactly one argument`),print(help(inspectCommand,{columns:client.stderr.columns})),2;telemetry2.trackCliArgumentUrlOrDeploymentId(deploymentIdOrHost),telemetry2.trackCliOptionTimeout(parsedArguments.flags["--timeout"]),telemetry2.trackCliFlagLogs(parsedArguments.flags["--logs"]),telemetry2.trackCliFlagWait(parsedArguments.flags["--wait"]),telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetry2.trackCliFlagJson(parsedArguments.flags["--json"]);let timeout=(0,import_ms22.default)(parsedArguments.flags["--timeout"]??"3m");if(timeout===void 0)return error(`Invalid timeout "${parsedArguments.flags["--timeout"]}"`),1;let contextName=null,parsed=parseDeploymentUrl(deploymentIdOrHost);if(deploymentIdOrHost=parsed.deploymentIdOrHost,parsed.scope&&!detectExplicitScope(client)){let team=(await getTeams(client)).find(t=>t.slug===parsed.scope);team&&(client.config.currentTeam=team.id)}try{contextName=await getContextName(client)}catch(err){if((0,import_error_utils15.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let until=Date.now()+timeout,wait=parsedArguments.flags["--wait"]??!1,withLogs=parsedArguments.flags["--logs"],formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,startTimestamp=Date.now();asJson&&withLogs||output_manager_default.spinner(`Fetching deployment "${deploymentIdOrHost}" in ${import_chalk211.default.bold(contextName)}`);let deployment=await getDeployment(client,contextName,deploymentIdOrHost),abortController,buildLogsPromise;if(withLogs)if(asJson){let promise;({abortController,promise}=collectBuildLogs(client,deployment,wait)),buildLogsPromise=promise.catch(error2=>(warn(`Failed to read build logs: ${error2}`),[]))}else{let promise;({abortController,promise}=displayBuildLogs(client,deployment,wait)),wait?promise.catch(error2=>warn(`Failed to read build logs: ${error2}`)):await promise}let timedOut=!1;for(;wait;){if(await sleep(250),deployment=await getDeployment(client,contextName,deploymentIdOrHost),!isDeploying(deployment.readyState)){abortController?.abort();break}if(Date.now()>until){warn(`stopped waiting after ${(0,import_ms22.default)(timeout,{long:!0})}, the deployment is still in progress`),timedOut=!0,abortController?.abort();break}}return asJson?(output_manager_default.stopSpinner(),withLogs?printLogsJson(client,await buildLogsPromise??[]):await printJson({deployment,contextName,client})):withLogs?print(`${import_chalk211.default.cyan("status")} ${stateString(deployment.readyState)}
860
+ `):await printDetails({deployment,contextName,client,startTimestamp}),timedOut?WAIT_TIMEOUT_EXIT_CODE:exitCode(deployment.readyState)}function stateString(s){let CIRCLE="\u25CF ",sTitle=s&&(0,import_title3.default)(s);switch(s){case"INITIALIZING":case"BUILDING":return import_chalk211.default.yellow(CIRCLE)+sTitle;case"ERROR":case"BLOCKED":return import_chalk211.default.red(CIRCLE)+sTitle;case"READY":return import_chalk211.default.green(CIRCLE)+sTitle;case"QUEUED":return import_chalk211.default.gray(CIRCLE)+sTitle;case"CANCELED":return import_chalk211.default.gray(CIRCLE)+sTitle;default:return import_chalk211.default.gray("UNKNOWN")}}async function printDetails({deployment,contextName,client,startTimestamp}){output_manager_default.log(`Fetched deployment "${import_chalk211.default.bold(deployment.url)}" in ${import_chalk211.default.bold(contextName)} ${elapsed(Date.now()-startTimestamp)}`);let{id:id2,name,url,createdAt,routes:routes2,readyState,readyStateReason,alias:aliases2}=deployment,{print,link}=output_manager_default,{builds}=deployment.version===2?await client.fetch(`/v11/deployments/${id2}/builds`):{builds:[]};print(`
865
861
  `),print(import_chalk211.default.bold(` General
866
862
 
867
863
  `)),print(` ${import_chalk211.default.cyan("id")} ${id2}
@@ -961,7 +957,7 @@ ${table([["Name","Status","Product","Integration","Projects"].map(header=>import
961
957
  `)}
962
958
  `)}function appendResourceLinks(links,lines){lines.push("## Resources"),lines.push("");for(let link of links)lines.push(`- [${link.title}](${link.href})`);lines.push("")}function printResourceLinks(client,links){let lines=[];appendResourceLinks(links,lines),client.stdout.write(`${lines.join(`
963
959
  `)}
964
- `)}async function fetchAllMarketplaceInstallations(client){let searchParams=new URLSearchParams;return searchParams.set("view","account"),searchParams.set("installationType","marketplace"),client.fetch(`/v2/integrations/configurations?${searchParams}`,{json:!0})}var import_chalk234=__toESM(require_source(),1);function pickIntegrationKey(row){let integration=row.integration;return integration&&typeof integration.slug=="string"?integration.slug:typeof row.integrationId=="string"?row.integrationId:"-"}async function installationsList(client,argv){let spec=getFlagsSpecification(installationsSubcommand.options),parsed;try{parsed=parseArguments(argv,spec)}catch(e2){return printError(e2),2}let fr=validateJsonOutput(parsed.flags);if(!fr.valid)return output_manager_default.error(fr.error),1;if(parsed.args.length>0)return output_manager_default.error("Invalid number of arguments. Usage: `vercel integration installations [--integration <slug>] [--json]`"),2;let filterSlug=parsed.flags["--integration"],{team}=await getScope(client);if(!team)return output_manager_default.error("No team context. Run `vercel switch` or use --scope."),1;try{let rows=await fetchAllMarketplaceInstallations(client),filtered=filterSlug?rows.filter(r=>pickIntegrationKey(r)===filterSlug||String(r.integrationId)===filterSlug):rows;if(fr.jsonOutput)return client.stdout.write(`${JSON.stringify({installations:filtered},null,2)}
960
+ `)}async function fetchAllMarketplaceInstallations(client){let searchParams=new URLSearchParams;return searchParams.set("view","account"),searchParams.set("installationType","marketplace"),client.fetch(`/v2/integrations/configurations?${searchParams}`,{json:!0})}var import_chalk234=__toESM(require_source(),1);function pickIntegrationKey(row){let integration=row.integration;return integration&&typeof integration.slug=="string"?integration.slug:typeof row.integrationId=="string"?row.integrationId:"-"}function redactPaymentSecrets(value){return Array.isArray(value)?value.map(redactPaymentSecrets):!value||typeof value!="object"?value:Object.fromEntries(Object.entries(value).map(([key,child])=>{if(key==="paymentIntent"&&child&&typeof child=="object"){let{clientSecret:_clientSecret,...rest}=child;return[key,redactPaymentSecrets(rest)]}return[key,redactPaymentSecrets(child)]}))}async function installationsList(client,argv){let spec=getFlagsSpecification(installationsSubcommand.options),parsed;try{parsed=parseArguments(argv,spec)}catch(e2){return printError(e2),2}let fr=validateJsonOutput(parsed.flags);if(!fr.valid)return output_manager_default.error(fr.error),1;if(parsed.args.length>0)return output_manager_default.error("Invalid number of arguments. Usage: `vercel integration installations [--integration <slug>] [--json]`"),2;let filterSlug=parsed.flags["--integration"],{team}=await getScope(client);if(!team)return output_manager_default.error("No team context. Run `vercel switch` or use --scope."),1;try{let rows=await fetchAllMarketplaceInstallations(client),filtered=filterSlug?rows.filter(r=>pickIntegrationKey(r)===filterSlug||String(r.integrationId)===filterSlug):rows;if(fr.jsonOutput)return client.stdout.write(`${JSON.stringify({installations:redactPaymentSecrets(filtered)},null,2)}
965
961
  `),0;if(filtered.length===0)return output_manager_default.log("No marketplace installations found."),0;let lines=[["Installation","Integration","Owner"].map(h=>import_chalk234.default.cyan(h)),...filtered.map(r=>{let id2=String(r.id??r.integrationConfigurationId??"-"),integ=pickIntegrationKey(r),owner=String(r.ownerId??"-");return[id2,integ,owner]})];return output_manager_default.print(`
966
962
  ${table(lines,{hsep:2}).replace(/^/gm," ")}
967
963
  `),0}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`Could not list installations (${err.status}). If your API version requires a specific integration, pass --integration <slug>.`),1;throw err}}var import_chalk235=__toESM(require_source(),1);async function installMarketplaceIntegration(client,integrationIdOrSlug,acceptedPolicies){return client.fetch(`/v2/integrations/integration/${encodeURIComponent(integrationIdOrSlug)}/marketplace/install`,{method:"POST",json:!0,body:{acceptedPolicies,source:"cli"}})}function logPolicyLinksSummary(links){output_manager_default.log(`Marketplace addendum: ${links.marketplace_addendum}`),links.integration_privacy_policy&&output_manager_default.log(`Privacy policy: ${links.integration_privacy_policy}`),links.integration_eula&&output_manager_default.log(`Terms of service: ${links.integration_eula}`)}async function acceptTerms(client,argv){let spec=getFlagsSpecification(acceptTermsSubcommand.options),parsed;try{parsed=parseArguments(argv,spec)}catch(e2){return printError(e2),2}let formatResult=validateJsonOutput(parsed.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let preferJson=formatResult.jsonOutput||shouldEmitNonInteractiveCommandError(client);if(parsed.args.length<1){let msg=`Missing integration slug. Example: \`${packageName} integration accept-terms <integration>\``;return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:msg,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration discover",packageName,{prependGlobalFlags:!0}),when:"Find integration slugs"}]},2),output_manager_default.error(msg),2}if(parsed.args.length>1){let msg="Specify only one integration at a time.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg},2),output_manager_default.error(msg),2}let integrationSlug=parsed.args[0],{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found. Run `vercel switch` or use --scope."),1;client.config.currentTeam=team.id;let integration;try{integration=await fetchIntegration(client,integrationSlug)}catch(error){let msg=isAPIError(error)&&error.serverMessage||error.message;return output_manager_default.error(`Failed to load integration "${integrationSlug}": ${msg}`),1}if(integration.capabilities?.requiresBrowserInstall){let msg=`Integration "${integration.slug}" requires accepting terms in the browser (or device attestation). Use \`${packageName} integration add ${integration.slug}\` instead.`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,policy_links:getMarketplacePolicyLinks(integration),hint:"The dashboard accept-terms flow is required for this integration.",next:[{command:buildCommandWithGlobalFlags(client.argv,`integration add ${integration.slug}`,packageName,{prependGlobalFlags:!0}),when:"Open browser / complete required install steps"}]},2),output_manager_default.error(msg),2}let existing=(await fetchInstallations(client,integration)).find(i=>i.ownerId===team.id&&i.installationType==="marketplace"),policyLinks=getMarketplacePolicyLinks(integration);if(existing)return preferJson?(client.stdout.write(`${JSON.stringify({integration:integration.slug,installationId:existing.id,alreadyInstalled:!0,policy_links:policyLinks},null,2)}
@@ -1002,7 +998,7 @@ ${table(lines,{hsep:2}).replace(/^/gm," ")}
1002
998
  `),0}return printAlignedLabel("Updated",grant.projectId,{gutter:"\u2713"}),printAlignedLabel("Issuer",issuerId),printAlignedLabel("Environments",grant.environments.join(", ")),printAlignedLabel("Token Claims",grant.tokenClaims?"set":import_chalk245.default.gray("none")),output_manager_default.print(`
1003
999
  `),output_manager_default.log(`Inspect the issuer: ${getCommandName(`kms inspect ${issuerId}`)}`),0}var KmsRmGrantTelemetryClient=class extends TelemetryClient{trackCliArgumentIssuerId(issuerId){issuerId&&this.trackCliArgument({arg:"issuerId",value:this.redactedValue})}trackCliArgumentProjectId(projectId){projectId&&this.trackCliArgument({arg:"projectId",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var USAGE12="kms rm-grant <issuerId> <projectId>";async function rmGrant(client,argv){let telemetry2=new KmsRmGrantTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeGrantSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[issuerId,projectId]=args;if(telemetry2.trackCliArgumentIssuerId(issuerId),telemetry2.trackCliArgumentProjectId(projectId),telemetry2.trackCliFlagYes(opts["--yes"]),!issuerId)return missingArgument(client,{reason:AGENT_REASON.MISSING_ISSUER_ID,message:"An issuer ID is required.",usage:`${USAGE12} --yes`});if(!projectId)return missingArgument(client,{reason:AGENT_REASON.MISSING_PROJECT,message:`A project ID is required. Run ${getCommandNamePlain(`kms inspect ${issuerId}`)} to list the issuer's grants.`,usage:`${USAGE12} --yes`});if(args.length>2)return invalidArgumentCount(client,USAGE12);let skipConfirmation=opts["--yes"]||!1;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:"Removing a grant stops the project from signing new tokens with this issuer. Re-run with --yes to confirm.",next:[{command:buildCommandWithYes(client.argv)}]},1);let contextName=await getContextName(client),grant;if(!skipConfirmation){output_manager_default.spinner(`Fetching issuer ${issuerId}`);let issuer;try{issuer=await getIssuer(client,issuerId)}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{notFound:`Issuer not found: ${issuerId}.`,attempted:"Removing a project grant",contextName,next:[{command:kmsSuggestion("kms ls",client.argv),when:"List issuers in this team"}]});if(handled!==void 0)return handled;throw err}if(output_manager_default.stopSpinner(),grant=issuer.policies.filter(isProjectGrant).find(policy=>policy.projectId===projectId),!grant){let message=`No grant for project ${projectId} on issuer ${issuerId}.`;return output_manager_default.error(message),output_manager_default.log(`Run ${getCommandName(`kms inspect ${issuerId}`)} to list its grants.`),1}if(printAlignedLabel("Issuer",issuer.id),printAlignedLabel("Project",grant.projectId),printAlignedLabel("Environments",grant.environments.join(", ")),output_manager_default.print(`
1004
1000
  `),!await client.input.confirm(`Remove ${param(grant.projectId)}'s access to this issuer?`,!1))return output_manager_default.log("Canceled"),0}client.nonInteractive||output_manager_default.spinner(`Removing grant for ${projectId}`);try{await deleteProjectGrant(client,issuerId,projectId)}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{notFound:`No grant for project ${projectId} on issuer ${issuerId}.`,attempted:"Removing a project grant",contextName,next:[{command:kmsSuggestion(`kms inspect ${issuerId}`,client.argv),when:"List the issuer's grants"}]});if(handled!==void 0)return handled;throw err}return output_manager_default.stopSpinner(),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,grant:{issuerId,projectId},message:`Grant for project ${projectId} removed.`,next:[{command:getCommandNamePlain(`kms inspect ${issuerId}`),when:"Show the issuer's remaining grants"}]},null,2)}
1005
- `),0):(printAlignedLabel("Removed",projectId,{gutter:"\u2713"}),printAlignedLabel("Issuer",issuerId),printAlignedLabel("Team",contextName),0)}var COMMAND_CONFIG51={list:getCommandAliases(listSubcommand17),inspect:getCommandAliases(inspectSubcommand11),add:getCommandAliases(addSubcommand7),import:getCommandAliases(importSubcommand2),update:getCommandAliases(updateSubcommand7),remove:getCommandAliases(removeSubcommand12),"add-key":getCommandAliases(addKeySubcommand),"import-key":getCommandAliases(importKeySubcommand),"activate-key":getCommandAliases(activateKeySubcommand),"revoke-key":getCommandAliases(revokeKeySubcommand),"add-grant":getCommandAliases(addGrantSubcommand),"update-grant":getCommandAliases(updateGrantSubcommand),"remove-grant":getCommandAliases(removeGrantSubcommand)};async function main26(client){let parsedArgs,flagsSpecification=getFlagsSpecification(kmsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new KmsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG51),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("kms"),output_manager_default.print(help(kmsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:kmsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(listSubcommand17)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls9(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(inspectSubcommand11)):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect16(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(addSubcommand7)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),add10(client,args));case"import":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(importSubcommand2)):(telemetry2.trackCliSubcommandImport(subcommandOriginal),importIssuer(client,args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(updateSubcommand7)):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update5(client,args));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(removeSubcommand12)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm8(client,args));case"add-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(addKeySubcommand)):(telemetry2.trackCliSubcommandAddKey(subcommandOriginal),addKey(client,args));case"import-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(importKeySubcommand)):(telemetry2.trackCliSubcommandImportKey(subcommandOriginal),importKey(client,args));case"activate-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(activateKeySubcommand)):(telemetry2.trackCliSubcommandActivateKey(subcommandOriginal),activateKey(client,args));case"revoke-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(revokeKeySubcommand)):(telemetry2.trackCliSubcommandRevokeKey(subcommandOriginal),revokeKey(client,args));case"add-grant":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(addGrantSubcommand)):(telemetry2.trackCliSubcommandAddGrant(subcommandOriginal),addGrant(client,args));case"update-grant":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(updateGrantSubcommand)):(telemetry2.trackCliSubcommandUpdateGrant(subcommandOriginal),updateGrant(client,args));case"remove-grant":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(removeGrantSubcommand)):(telemetry2.trackCliSubcommandRemoveGrant(subcommandOriginal),rmGrant(client,args));default:return args.length>0?(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG51)),output_manager_default.print(help(kmsCommand,{columns:client.stderr.columns})),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls9(client,args))}}var import_error_utils18=__toESM(require_dist(),1);var LogoutTelemetryClient=class extends TelemetryClient{};var import_error_utils17=__toESM(require_dist(),1);async function logout(client){let{authConfig}=client;if(!authConfig.token)return output_manager_default.note(`Not currently logged in, so ${getCommandName("logout")} did nothing`),0;output_manager_default.spinner("Logging out\u2026",200);let revocationResponse=await revocationRequest({token:authConfig.token});output_manager_default.debug(`'Revocation response:', ${await revocationResponse.clone().text()}`);let[revocationError]=await processRevocationResponse(revocationResponse),logoutError=!1;revocationError&&(output_manager_default.error(revocationError.message),output_manager_default.debug(revocationError.cause),output_manager_default.error("Failed during logout"),logoutError=!0);try{if(client.updateConfig({currentTeam:void 0}),client.writeToConfigFile(),client.emptyAuthConfig(),client.persistAuthConfig(),output_manager_default.debug("Configuration has been deleted"),!logoutError)return output_manager_default.success("Logged out!"),0}catch(err){output_manager_default.debug((0,import_error_utils17.errorToString)(err)),output_manager_default.error("Failed during logout")}return 1}async function logout2(client){let{authConfig,config}=client,parsedArgs=null,flagsSpecification=getFlagsSpecification(logoutCommand.options),telemetry2=new LogoutTelemetryClient({opts:{store:client.telemetryEventStore}});try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("logout"),output_manager_default.print(help(logoutCommand,{columns:client.stderr.columns})),0;if("refreshToken"in authConfig)return await logout(client);if(output_manager_default.debug("Falling back to legacy logout"),!authConfig.token)return output_manager_default.note(`Not currently logged in, so ${getCommandName("logout")} did nothing`),0;output_manager_default.spinner("Logging out\u2026",200);let exitCode2=0;try{await client.fetch("/v3/user/tokens/current",{method:"DELETE",useCurrentTeam:!1})}catch(err){isAPIError(err)&&(err.status===403?output_manager_default.debug("Token is invalid so it cannot be revoked"):err.status!==200&&(output_manager_default.debug(err?.message??""),exitCode2=1))}delete config.currentTeam,delete authConfig.token,delete authConfig.userId;try{authConfig.skipWrite||(writeToConfigFile(config),persistAuthConfig(authConfig,config)),output_manager_default.debug("Configuration has been deleted")}catch(err){output_manager_default.debug((0,import_error_utils18.errorToString)(err)),exitCode2=1}return exitCode2===0?output_manager_default.log("Logged out!"):output_manager_default.error("Failed during logout"),exitCode2}var import_error_utils19=__toESM(require_dist(),1),import_chalk246=__toESM(require_source(),1),import_format38=__toESM(require_format(),1);var import_ms25=__toESM(require_ms(),1),LOG_LEVEL_SEVERITY={info:0,warning:1,error:2,fatal:3};function getLogLevelSeverity(level){return LOG_LEVEL_SEVERITY[level]??-1}function getDisplayLog(logs3,requestedLevels){if(logs3.length===0)return;let matchingLogs=requestedLevels&&requestedLevels.length>0?logs3.filter(log=>requestedLevels.includes(log.level)):logs3;return(matchingLogs.length>0?matchingLogs:logs3).reduce((selected,current)=>getLogLevelSeverity(current.level)>getLogLevelSeverity(selected.level)?current:selected)}function parseRelativeTime(input){if(input==="now")return Date.now();let now=Date.now(),msValue=(0,import_ms25.default)(input);if(typeof msValue=="number")return now-msValue;let date=new Date(input);if(!isNaN(date.getTime()))return date.getTime();throw new Error(`Invalid time format: ${input}`)}async function fetchRequestLogs(client,options){let{projectId,ownerId,deploymentId,environment,level,statusCode,source,since,until,search:search3,requestId,branch,page=0}=options,now=Date.now(),defaultStartDate=now-24*60*60*1e3,query=new URLSearchParams;query.set("projectId",projectId),query.set("ownerId",ownerId),query.set("page",String(page)),query.set("startDate",String(since?parseRelativeTime(since):defaultStartDate)),query.set("endDate",String(until?parseRelativeTime(until):now)),deploymentId&&query.set("deploymentId",deploymentId),environment&&query.set("environment",environment),level&&level.length>0&&query.set("level",level.join(",")),statusCode&&query.set("statusCode",statusCode),source&&source.length>0&&query.set("source",source.join(",")),search3&&query.set("search",search3),requestId&&query.set("requestId",requestId),branch&&query.set("branch",branch);let url=`${client.apiUrl==="https://api.vercel.com"?"https://vercel.com":client.apiUrl}/api/logs/request-logs?${query.toString()}`,data=await client.fetch(url);return{logs:(data.rows||[]).map(row=>{let requestLogs=(row.logs||[]).map(log=>({level:log.level||"info",message:log.message||"",messageTruncated:log.messageTruncated})),displayLog=getDisplayLog(requestLogs,options.level),firstEvent=row.events?.[0];return{id:row.requestId||"",timestamp:row.timestamp?new Date(row.timestamp).getTime():Date.now(),deploymentId:row.deploymentId||"",projectId:options.projectId,level:displayLog?.level||"info",message:displayLog?.message||"",messageTruncated:displayLog?.messageTruncated,source:firstEvent?.source||"static",domain:row.domain||"",requestMethod:row.requestMethod||"",requestPath:row.requestPath||"",responseStatusCode:row.statusCode||0,environment:row.environment||"production",branch:row.branch,cache:row.cache,cacheReason:row.cacheReason,pprState:row.pprState,traceId:row.traceId,logs:requestLogs}}),pagination:{hasMore:data.hasMoreRows??!1}}}async function*fetchAllRequestLogs(client,options){let page=0,remaining=options.limit??100,hasMore=!0;for(;hasMore&&remaining>0;){let response=await fetchRequestLogs(client,{...options,page});if(!response.logs||response.logs.length===0)break;for(let log of response.logs)if(yield log,remaining--,remaining<=0)return;hasMore=response.pagination?.hasMore??!1,page++}}var LogsTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(v){v&&this.trackCliArgument({arg:"urlOrDeploymentId",value:this.redactedValue})}trackCliOptionDeployment(v){v&&this.trackCliOption({option:"deployment",value:this.redactedValue})}trackCliOptionEnvironment(v){if(v){let allowed=["production","preview"].includes(v)?v:this.redactedValue;this.trackCliOption({option:"environment",value:allowed})}}trackCliOptionLevel(v){if(v&&v.length>0){let allowedLevels=["error","warning","info","fatal"],sanitized=v.every(l=>allowedLevels.includes(l))?v.join(","):this.redactedValue;this.trackCliOption({option:"level",value:sanitized})}}trackCliOptionStatusCode(v){v&&this.trackCliOption({option:"status-code",value:this.redactedValue})}trackCliOptionSource(v){if(v&&v.length>0){let allowedSources=["serverless","edge-function","edge-middleware","static"],sanitized=v.every(s=>allowedSources.includes(s))?v.join(","):this.redactedValue;this.trackCliOption({option:"source",value:sanitized})}}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliFlagJson(v){v&&this.trackCliFlag("json")}trackCliFlagFollow(v){v&&this.trackCliFlag("follow")}trackCliFlagNoFollow(v){v&&this.trackCliFlag("no-follow")}trackCliOptionQuery(v){v&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionRequestId(v){v&&this.trackCliOption({option:"request-id",value:this.redactedValue})}trackCliFlagExpand(v){v&&this.trackCliFlag("expand")}trackCliOptionBranch(v){v&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliFlagNoBranch(v){v&&this.trackCliFlag("no-branch")}};async function getLatestDeployment(client,projectId,filters={}){let query=new URLSearchParams;query.set("projectId",projectId),query.set("limit","1"),query.set("state","READY"),filters.branch&&query.set("branch",filters.branch),filters.userId&&query.set("users",filters.userId),filters.target&&query.set("target",filters.target);let{deployments}=await client.fetch(`/v6/deployments?${query}`);return deployments.length===0?null:{id:deployments[0].uid,url:deployments[0].url}}async function getActiveProductionDeployment(client,projectId){try{let{deployment}=await client.fetch(`/projects/${encodeURIComponent(projectId)}/production-deployment`);return deployment}catch(err){if(isAPIError(err)&&err.status===404)return null;throw err}}async function resolveFollowDeployment({branch,client,environment,logsTarget}){let{deployment,orgSlug,projectId,projectSlug}=logsTarget;if(deployment?.id)return{deploymentId:deployment.id,label:"deployment"};if(branch){output_manager_default.spinner(`Finding latest deployment for branch "${branch}"`,1e3);let branchDeployment=await getLatestDeployment(client,projectId,{branch,target:environment});if(output_manager_default.stopSpinner(),branchDeployment)return output_manager_default.debug(`Found deployment ${branchDeployment.id} for branch ${branch}`),{deploymentId:branchDeployment.id,label:`latest deployment on branch "${branch}"`};let environmentLabel=environment?` ${environment}`:"",deployHint=environment?`Deploy that branch to ${environment} first`:"Deploy that branch first";return output_manager_default.error(`No READY${environmentLabel} deployments found for branch "${branch}" in ${formatProject(orgSlug,projectSlug)}. ${deployHint} or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1}}if(environment==="production"){output_manager_default.spinner("Finding production deployment",1e3);let productionDeployment2=await getActiveProductionDeployment(client,projectId);return output_manager_default.stopSpinner(),productionDeployment2?(output_manager_default.debug(`Found production deployment ${productionDeployment2.id} (${productionDeployment2.url})`),{deploymentId:productionDeployment2.id,label:"production deployment"}):(output_manager_default.error(`No active production deployment found for ${formatProject(orgSlug,projectSlug)}. Deploy or promote to production first, or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1})}if(environment==="preview"){let user2=await getUser(client);output_manager_default.spinner("Finding your latest deployment",1e3);let userDeployment2=await getLatestDeployment(client,projectId,{userId:user2.id,target:"preview"});return output_manager_default.stopSpinner(),userDeployment2?(output_manager_default.debug(`Found latest deployment ${userDeployment2.id} (${userDeployment2.url}) created by current user`),{deploymentId:userDeployment2.id,label:"your latest deployment"}):(output_manager_default.error(`No READY preview deployments found for ${formatProject(orgSlug,projectSlug)}. Deploy a preview first or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1})}output_manager_default.spinner("Finding production deployment",1e3);let productionDeployment=await getActiveProductionDeployment(client,projectId);if(output_manager_default.stopSpinner(),productionDeployment)return output_manager_default.debug(`Found production deployment ${productionDeployment.id} (${productionDeployment.url})`),{deploymentId:productionDeployment.id,label:"production deployment"};let user=await getUser(client);output_manager_default.spinner("Finding your latest deployment",1e3);let userDeployment=await getLatestDeployment(client,projectId,{userId:user.id});return output_manager_default.stopSpinner(),userDeployment?(output_manager_default.debug(`Found latest deployment ${userDeployment.id} (${userDeployment.url}) created by current user`),{deploymentId:userDeployment.id,label:"your latest deployment"}):(output_manager_default.error(`No READY deployments found for ${formatProject(orgSlug,projectSlug)}. Deploy first or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1})}var TIME_ONLY_FORMAT="HH:mm:ss.SS",DATE_TIME_FORMAT="MMM DD HH:mm:ss.SS";function table2({columns,rows,tableWidth,formatHeader,formatRow}){let zeroPad=[0,0],maxWidths=columns.map(col=>{let headerWidth=col.label.length;return Math.max(headerWidth,...rows.map(row=>col.getValue(row).length))}),colPaddings=columns.map(col=>col.padding??zeroPad),finalWidths=[],usedWidth=0,stretchIndex=-1;for(let i=0;i<columns.length;i++){let col=columns[i],padding2=colPaddings[i][0]+colPaddings[i][1];col.width==="stretch"?(stretchIndex=i,finalWidths.push(0)):typeof col.width=="number"?(finalWidths.push(col.width),usedWidth+=col.width+padding2):(finalWidths.push(maxWidths[i]),usedWidth+=maxWidths[i]+padding2)}if(usedWidth+=(columns.length-1)*2,stretchIndex>=0){let stretchPadding=colPaddings[stretchIndex][0]+colPaddings[stretchIndex][1];finalWidths[stretchIndex]=Math.max(10,tableWidth-usedWidth-stretchPadding)}let pad=(value,width)=>value.length>width?value.slice(0,width-1)+"\u2026":value.padEnd(width),headerStr=columns.map((col,i)=>{let padded=pad(col.label,finalWidths[i]);return" ".repeat(colPaddings[i][0])+padded+" ".repeat(colPaddings[i][1])}).join(" "),header=formatHeader?formatHeader(headerStr):headerStr,formattedRows=rows.map(row=>{let rowStr=columns.map((col,i)=>{let value=col.getValue(row),padded=pad(value,finalWidths[i]),formatted=col.format?col.format(padded,row):padded;return" ".repeat(colPaddings[i][0])+formatted+" ".repeat(colPaddings[i][1])}).join(" ");return formatRow?formatRow(rowStr,row):rowStr});return{header,rows:formattedRows}}function logsSpanMultipleDays(logs3){if(logs3.length===0)return!1;let firstDay=new Date(logs3[0].timestamp).toDateString();return logs3.some(log=>new Date(log.timestamp).toDateString()!==firstDay)}function parseLevels(levels){return levels?typeof levels=="string"?[levels]:levels:[]}function parseSources(sources){return sources?typeof sources=="string"?[sources]:sources:[]}function isNonLiveTerminalDeployment(deployment){return deployment.readyState==="ERROR"||deployment.readyState==="CANCELED"}function getInspectCommand(deployment,contextName,{plain=!1}={}){let scopeOption=contextName?` --scope ${contextName}`:"",command2=`inspect https://${deployment.url}${scopeOption}`;return plain?`\`${getCommandNamePlain(command2)}\``:getCommandName(command2)}function printNonLiveDeploymentError(deployment,contextName){let inspectCommand2=getInspectCommand(deployment,contextName);output_manager_default.error(`Logs are unavailable because deployment ${import_chalk246.default.bold(deployment.id)} never reached READY and ended in ${deployment.readyState}.
1001
+ `),0):(printAlignedLabel("Removed",projectId,{gutter:"\u2713"}),printAlignedLabel("Issuer",issuerId),printAlignedLabel("Team",contextName),0)}var COMMAND_CONFIG51={list:getCommandAliases(listSubcommand17),inspect:getCommandAliases(inspectSubcommand11),add:getCommandAliases(addSubcommand7),import:getCommandAliases(importSubcommand2),update:getCommandAliases(updateSubcommand7),remove:getCommandAliases(removeSubcommand12),"add-key":getCommandAliases(addKeySubcommand),"import-key":getCommandAliases(importKeySubcommand),"activate-key":getCommandAliases(activateKeySubcommand),"revoke-key":getCommandAliases(revokeKeySubcommand),"add-grant":getCommandAliases(addGrantSubcommand),"update-grant":getCommandAliases(updateGrantSubcommand),"remove-grant":getCommandAliases(removeGrantSubcommand)};async function main26(client){let parsedArgs,flagsSpecification=getFlagsSpecification(kmsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new KmsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG51),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("kms"),output_manager_default.print(help(kmsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:kmsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(listSubcommand17)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls9(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(inspectSubcommand11)):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect16(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(addSubcommand7)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),add10(client,args));case"import":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(importSubcommand2)):(telemetry2.trackCliSubcommandImport(subcommandOriginal),importIssuer(client,args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(updateSubcommand7)):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update5(client,args));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(removeSubcommand12)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm8(client,args));case"add-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(addKeySubcommand)):(telemetry2.trackCliSubcommandAddKey(subcommandOriginal),addKey(client,args));case"import-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(importKeySubcommand)):(telemetry2.trackCliSubcommandImportKey(subcommandOriginal),importKey(client,args));case"activate-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(activateKeySubcommand)):(telemetry2.trackCliSubcommandActivateKey(subcommandOriginal),activateKey(client,args));case"revoke-key":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(revokeKeySubcommand)):(telemetry2.trackCliSubcommandRevokeKey(subcommandOriginal),revokeKey(client,args));case"add-grant":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(addGrantSubcommand)):(telemetry2.trackCliSubcommandAddGrant(subcommandOriginal),addGrant(client,args));case"update-grant":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(updateGrantSubcommand)):(telemetry2.trackCliSubcommandUpdateGrant(subcommandOriginal),updateGrant(client,args));case"remove-grant":return needHelp?(telemetry2.trackCliFlagHelp("kms",subcommandOriginal),printHelp(removeGrantSubcommand)):(telemetry2.trackCliSubcommandRemoveGrant(subcommandOriginal),rmGrant(client,args));default:return args.length>0?(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG51)),output_manager_default.print(help(kmsCommand,{columns:client.stderr.columns})),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls9(client,args))}}var import_error_utils18=__toESM(require_dist(),1);var LogoutTelemetryClient=class extends TelemetryClient{};var import_error_utils17=__toESM(require_dist(),1);async function logout(client){let{authConfig}=client;if(!authConfig.token)return output_manager_default.note(`Not currently logged in, so ${getCommandName("logout")} did nothing`),0;output_manager_default.spinner("Logging out\u2026",200);let revocationResponse=await revocationRequest({token:authConfig.token});output_manager_default.debug(`'Revocation response:', ${await revocationResponse.clone().text()}`);let[revocationError]=await processRevocationResponse(revocationResponse),logoutError=!1;revocationError&&(output_manager_default.error(revocationError.message),output_manager_default.debug(revocationError.cause),output_manager_default.error("Failed during logout"),logoutError=!0);try{if(client.updateConfig({currentTeam:void 0}),client.writeToConfigFile(),client.emptyAuthConfig(),client.persistAuthConfig(),output_manager_default.debug("Configuration has been deleted"),!logoutError)return output_manager_default.success("Logged out!"),0}catch(err){output_manager_default.debug((0,import_error_utils17.errorToString)(err)),output_manager_default.error("Failed during logout")}return 1}async function logout2(client){let{authConfig,config}=client,parsedArgs=null,flagsSpecification=getFlagsSpecification(logoutCommand.options),telemetry2=new LogoutTelemetryClient({opts:{store:client.telemetryEventStore}});try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("logout"),output_manager_default.print(help(logoutCommand,{columns:client.stderr.columns})),0;if("refreshToken"in authConfig)return await logout(client);if(output_manager_default.debug("Falling back to legacy logout"),!authConfig.token)return output_manager_default.note(`Not currently logged in, so ${getCommandName("logout")} did nothing`),0;output_manager_default.spinner("Logging out\u2026",200);let exitCode2=0;try{await client.fetch("/v3/user/tokens/current",{method:"DELETE",useCurrentTeam:!1})}catch(err){isAPIError(err)&&(err.status===403?output_manager_default.debug("Token is invalid so it cannot be revoked"):err.status!==200&&(output_manager_default.debug(err?.message??""),exitCode2=1))}delete config.currentTeam,delete authConfig.token,delete authConfig.userId;try{authConfig.skipWrite||(writeToConfigFile(config),persistAuthConfig(authConfig,config)),output_manager_default.debug("Configuration has been deleted")}catch(err){output_manager_default.debug((0,import_error_utils18.errorToString)(err)),exitCode2=1}return exitCode2===0?output_manager_default.log("Logged out!"):output_manager_default.error("Failed during logout"),exitCode2}var import_error_utils19=__toESM(require_dist(),1),import_chalk246=__toESM(require_source(),1),import_format38=__toESM(require_format(),1);var import_ms25=__toESM(require_ms(),1);var LOG_LEVEL_SEVERITY={info:0,warning:1,error:2,fatal:3};function getLogLevelSeverity(level){return LOG_LEVEL_SEVERITY[level]??-1}function getDisplayLog(logs3,requestedLevels){if(logs3.length===0)return;let matchingLogs=requestedLevels&&requestedLevels.length>0?logs3.filter(log=>requestedLevels.includes(log.level)):logs3;return(matchingLogs.length>0?matchingLogs:logs3).reduce((selected,current)=>getLogLevelSeverity(current.level)>getLogLevelSeverity(selected.level)?current:selected)}function parseRelativeTime(input){if(input==="now")return Date.now();let now=Date.now(),msValue=(0,import_ms25.default)(input);if(typeof msValue=="number")return now-msValue;let date=new Date(input);if(!isNaN(date.getTime()))return date.getTime();throw new Error(`Invalid time format: ${input}`)}async function fetchRequestLogs(client,options){let{projectId,ownerId,deploymentId,environment,level,statusCode,source,since,until,search:search3,requestId,branch}=options,now=Date.now(),defaultStartDate=now-24*60*60*1e3,query=new URLSearchParams;query.set("projectId",projectId),query.set("ownerId",ownerId),query.set("startDate",String(since?parseRelativeTime(since):defaultStartDate)),query.set("endDate",String(until?parseRelativeTime(until):now)),deploymentId&&query.set("deploymentId",deploymentId),environment&&query.set("environment",environment),level&&level.length>0&&query.set("level",level.join(",")),statusCode&&query.set("statusCode",statusCode),source&&source.length>0&&query.set("source",source.join(",")),search3&&query.set("search",search3),requestId&&query.set("requestId",requestId),branch&&query.set("branch",branch);let url=`${client.apiUrl==="https://api.vercel.com"?"https://vercel.com":client.apiUrl}/api/logs/request-logs?${query.toString()}`,data=await client.fetch(url);return{logs:(data.rows||[]).map(row=>{let requestLogs=(row.logs||[]).map(log=>({level:log.level||"info",message:log.message||"",messageTruncated:log.messageTruncated})),displayLog=getDisplayLog(requestLogs,options.level),firstEvent=row.events?.[0];return{id:row.requestId||"",timestamp:row.timestamp?new Date(row.timestamp).getTime():Date.now(),deploymentId:row.deploymentId||"",projectId:options.projectId,level:displayLog?.level||"info",message:displayLog?.message||"",messageTruncated:displayLog?.messageTruncated,source:firstEvent?.source||"static",domain:row.domain||"",requestMethod:row.requestMethod||"",requestPath:row.requestPath||"",responseStatusCode:row.statusCode||0,environment:row.environment||"production",branch:row.branch,cache:row.cache,cacheReason:row.cacheReason,pprState:row.pprState,traceId:row.traceId,logs:requestLogs}}),pagination:{hasMore:data.hasMoreRows??!1}}}async function*fetchAllRequestLogs(client,options){let now=Date.now(),since=options.since?parseRelativeTime(options.since):now-24*60*60*1e3,until=options.until?parseRelativeTime(options.until):now,remaining=options.limit??100,hasMore=!0,seenIds=new Set;for(;hasMore&&remaining>0;){let response=await fetchRequestLogs(client,{...options,since:new Date(since).toISOString(),until:new Date(until).toISOString()});if(!response.logs||response.logs.length===0)break;let newLogs=0;for(let log of response.logs)if(!(log.id&&seenIds.has(log.id))&&(log.id&&seenIds.add(log.id),newLogs++,yield log,remaining--,remaining<=0))return;if(newLogs===0||(hasMore=response.pagination?.hasMore??!1,!hasMore))break;let timestamps=response.logs.map(log=>log.timestamp),oldestTimestamp=Math.min(...timestamps),pageSharesOneMillisecond=oldestTimestamp===Math.max(...timestamps),nextUntil=pageSharesOneMillisecond?oldestTimestamp-1:oldestTimestamp;if(!Number.isFinite(nextUntil)||nextUntil>=until||nextUntil<since)break;pageSharesOneMillisecond&&output_manager_default.debug(`Request logs at ${new Date(oldestTimestamp).toISOString()} fill a whole page; skipping to older logs`),until=nextUntil}}var LogsTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(v){v&&this.trackCliArgument({arg:"urlOrDeploymentId",value:this.redactedValue})}trackCliOptionDeployment(v){v&&this.trackCliOption({option:"deployment",value:this.redactedValue})}trackCliOptionEnvironment(v){if(v){let allowed=["production","preview"].includes(v)?v:this.redactedValue;this.trackCliOption({option:"environment",value:allowed})}}trackCliOptionLevel(v){if(v&&v.length>0){let allowedLevels=["error","warning","info","fatal"],sanitized=v.every(l=>allowedLevels.includes(l))?v.join(","):this.redactedValue;this.trackCliOption({option:"level",value:sanitized})}}trackCliOptionStatusCode(v){v&&this.trackCliOption({option:"status-code",value:this.redactedValue})}trackCliOptionSource(v){if(v&&v.length>0){let allowedSources=["serverless","edge-function","edge-middleware","static"],sanitized=v.every(s=>allowedSources.includes(s))?v.join(","):this.redactedValue;this.trackCliOption({option:"source",value:sanitized})}}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliFlagJson(v){v&&this.trackCliFlag("json")}trackCliFlagFollow(v){v&&this.trackCliFlag("follow")}trackCliFlagNoFollow(v){v&&this.trackCliFlag("no-follow")}trackCliOptionQuery(v){v&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionRequestId(v){v&&this.trackCliOption({option:"request-id",value:this.redactedValue})}trackCliFlagExpand(v){v&&this.trackCliFlag("expand")}trackCliOptionBranch(v){v&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliFlagNoBranch(v){v&&this.trackCliFlag("no-branch")}};async function getLatestDeployment(client,projectId,filters={}){let query=new URLSearchParams;query.set("projectId",projectId),query.set("limit","1"),query.set("state","READY"),filters.branch&&query.set("branch",filters.branch),filters.userId&&query.set("users",filters.userId),filters.target&&query.set("target",filters.target);let{deployments}=await client.fetch(`/v6/deployments?${query}`);return deployments.length===0?null:{id:deployments[0].uid,url:deployments[0].url}}async function getActiveProductionDeployment(client,projectId){try{let{deployment}=await client.fetch(`/projects/${encodeURIComponent(projectId)}/production-deployment`);return deployment}catch(err){if(isAPIError(err)&&err.status===404)return null;throw err}}async function resolveFollowDeployment({branch,client,environment,logsTarget}){let{deployment,orgSlug,projectId,projectSlug}=logsTarget;if(deployment?.id)return{deploymentId:deployment.id,label:"deployment"};if(branch){output_manager_default.spinner(`Finding latest deployment for branch "${branch}"`,1e3);let branchDeployment=await getLatestDeployment(client,projectId,{branch,target:environment});if(output_manager_default.stopSpinner(),branchDeployment)return output_manager_default.debug(`Found deployment ${branchDeployment.id} for branch ${branch}`),{deploymentId:branchDeployment.id,label:`latest deployment on branch "${branch}"`};let environmentLabel=environment?` ${environment}`:"",deployHint=environment?`Deploy that branch to ${environment} first`:"Deploy that branch first";return output_manager_default.error(`No READY${environmentLabel} deployments found for branch "${branch}" in ${formatProject(orgSlug,projectSlug)}. ${deployHint} or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1}}if(environment==="production"){output_manager_default.spinner("Finding production deployment",1e3);let productionDeployment2=await getActiveProductionDeployment(client,projectId);return output_manager_default.stopSpinner(),productionDeployment2?(output_manager_default.debug(`Found production deployment ${productionDeployment2.id} (${productionDeployment2.url})`),{deploymentId:productionDeployment2.id,label:"production deployment"}):(output_manager_default.error(`No active production deployment found for ${formatProject(orgSlug,projectSlug)}. Deploy or promote to production first, or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1})}if(environment==="preview"){let user2=await getUser(client);output_manager_default.spinner("Finding your latest deployment",1e3);let userDeployment2=await getLatestDeployment(client,projectId,{userId:user2.id,target:"preview"});return output_manager_default.stopSpinner(),userDeployment2?(output_manager_default.debug(`Found latest deployment ${userDeployment2.id} (${userDeployment2.url}) created by current user`),{deploymentId:userDeployment2.id,label:"your latest deployment"}):(output_manager_default.error(`No READY preview deployments found for ${formatProject(orgSlug,projectSlug)}. Deploy a preview first or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1})}output_manager_default.spinner("Finding production deployment",1e3);let productionDeployment=await getActiveProductionDeployment(client,projectId);if(output_manager_default.stopSpinner(),productionDeployment)return output_manager_default.debug(`Found production deployment ${productionDeployment.id} (${productionDeployment.url})`),{deploymentId:productionDeployment.id,label:"production deployment"};let user=await getUser(client);output_manager_default.spinner("Finding your latest deployment",1e3);let userDeployment=await getLatestDeployment(client,projectId,{userId:user.id});return output_manager_default.stopSpinner(),userDeployment?(output_manager_default.debug(`Found latest deployment ${userDeployment.id} (${userDeployment.url}) created by current user`),{deploymentId:userDeployment.id,label:"your latest deployment"}):(output_manager_default.error(`No READY deployments found for ${formatProject(orgSlug,projectSlug)}. Deploy first or specify a deployment with ${import_chalk246.default.bold("--deployment")}.`),{exitCode:1})}var TIME_ONLY_FORMAT="HH:mm:ss.SS",DATE_TIME_FORMAT="MMM DD HH:mm:ss.SS";function table2({columns,rows,tableWidth,formatHeader,formatRow}){let zeroPad=[0,0],maxWidths=columns.map(col=>{let headerWidth=col.label.length;return Math.max(headerWidth,...rows.map(row=>col.getValue(row).length))}),colPaddings=columns.map(col=>col.padding??zeroPad),finalWidths=[],usedWidth=0,stretchIndex=-1;for(let i=0;i<columns.length;i++){let col=columns[i],padding2=colPaddings[i][0]+colPaddings[i][1];col.width==="stretch"?(stretchIndex=i,finalWidths.push(0)):typeof col.width=="number"?(finalWidths.push(col.width),usedWidth+=col.width+padding2):(finalWidths.push(maxWidths[i]),usedWidth+=maxWidths[i]+padding2)}if(usedWidth+=(columns.length-1)*2,stretchIndex>=0){let stretchPadding=colPaddings[stretchIndex][0]+colPaddings[stretchIndex][1];finalWidths[stretchIndex]=Math.max(10,tableWidth-usedWidth-stretchPadding)}let pad=(value,width)=>value.length>width?value.slice(0,width-1)+"\u2026":value.padEnd(width),headerStr=columns.map((col,i)=>{let padded=pad(col.label,finalWidths[i]);return" ".repeat(colPaddings[i][0])+padded+" ".repeat(colPaddings[i][1])}).join(" "),header=formatHeader?formatHeader(headerStr):headerStr,formattedRows=rows.map(row=>{let rowStr=columns.map((col,i)=>{let value=col.getValue(row),padded=pad(value,finalWidths[i]),formatted=col.format?col.format(padded,row):padded;return" ".repeat(colPaddings[i][0])+formatted+" ".repeat(colPaddings[i][1])}).join(" ");return formatRow?formatRow(rowStr,row):rowStr});return{header,rows:formattedRows}}function logsSpanMultipleDays(logs3){if(logs3.length===0)return!1;let firstDay=new Date(logs3[0].timestamp).toDateString();return logs3.some(log=>new Date(log.timestamp).toDateString()!==firstDay)}function parseLevels(levels){return levels?typeof levels=="string"?[levels]:levels:[]}function parseSources(sources){return sources?typeof sources=="string"?[sources]:sources:[]}function isNonLiveTerminalDeployment(deployment){return deployment.readyState==="ERROR"||deployment.readyState==="CANCELED"}function getInspectCommand(deployment,contextName,{plain=!1}={}){let scopeOption=contextName?` --scope ${contextName}`:"",command2=`inspect https://${deployment.url}${scopeOption}`;return plain?`\`${getCommandNamePlain(command2)}\``:getCommandName(command2)}function printNonLiveDeploymentError(deployment,contextName){let inspectCommand2=getInspectCommand(deployment,contextName);output_manager_default.error(`Logs are unavailable because deployment ${import_chalk246.default.bold(deployment.id)} never reached READY and ended in ${deployment.readyState}.
1006
1002
  Run ${inspectCommand2} for deployment details.`)}async function resolveLogsTarget(client,{contextName,deploymentOption,projectOption}){if(deploymentOption){output_manager_default.spinner(`Resolving deployment "${deploymentOption}"`,1e3);let deployment;try{deployment=await getDeployment(client,contextName,deploymentOption)}catch(err){if(err instanceof DeploymentNotFound)return output_manager_default.error(`Deployment not found: ${deploymentOption} under ${import_chalk246.default.bold(contextName)}`),{exitCode:1};if(err instanceof InvalidDeploymentId)return output_manager_default.error(`Invalid deployment ID: ${deploymentOption}`),{exitCode:1};throw err}finally{output_manager_default.stopSpinner()}if(!deployment.projectId)return output_manager_default.error("Deployment is not associated with a project."),{exitCode:1};output_manager_default.spinner(`Fetching project "${deployment.projectId}"`,1e3);let project=await getProjectByNameOrId(client,deployment.projectId);if(output_manager_default.stopSpinner(),project instanceof ProjectNotFound)return output_manager_default.error(`Project not found: ${deployment.projectId} under ${import_chalk246.default.bold(contextName)}`),{exitCode:1};if(projectOption){output_manager_default.spinner(`Fetching project "${projectOption}"`,1e3);let explicitProject=await getProjectByNameOrId(client,projectOption);if(output_manager_default.stopSpinner(),explicitProject instanceof ProjectNotFound)return output_manager_default.error(`Project not found: ${projectOption} under ${import_chalk246.default.bold(contextName)}`),{exitCode:1};if(explicitProject.id!==project.id)return output_manager_default.error(`The deployment "${deploymentOption}" does not belong to "${projectOption}" project. Remove either the deployment selection or the ${import_chalk246.default.bold("--project")} option.`),{exitCode:1}}return{projectId:project.id,projectSlug:project.name,orgSlug:contextName,ownerId:project.accountId,deployment,targetSource:"deployment"}}if(projectOption){output_manager_default.spinner(`Fetching project "${projectOption}"`,1e3);let project=await getProjectByNameOrId(client,projectOption);return output_manager_default.stopSpinner(),project instanceof ProjectNotFound?(output_manager_default.error(`Project not found: ${projectOption} under ${import_chalk246.default.bold(contextName)}`),{exitCode:1}):{projectId:project.id,projectSlug:project.name,orgSlug:contextName,ownerId:project.accountId,targetSource:"explicit-project"}}let link=await getLinkedProject(client);return link.status==="error"?{exitCode:link.exitCode}:link.status==="not_linked"?(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Run ${getCommandName("link")} to begin, or specify a project with ${import_chalk246.default.bold("--project")}.`),{exitCode:1}):(client.config.currentTeam=link.org.type==="team"?link.org.id:void 0,{projectId:link.project.id,projectSlug:link.project.name,orgSlug:link.org.slug,ownerId:link.org.id,targetSource:"linked-project"})}async function logs2(client){let parsedArguments,flagsSpecification=getFlagsSpecification(logsCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),output_manager_default.print(help(logsCommand,{columns:client.stderr.columns})),2}let telemetry2=new LogsTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArguments.flags["--help"])return telemetry2.trackCliFlagHelp("logs"),output_manager_default.print(help(logsCommand,{columns:client.stderr.columns})),0;let subArgs=parsedArguments.args.slice(1),[deploymentArgument]=subArgs,projectOption=parsedArguments.flags["--project"],deploymentFlag=parsedArguments.flags["--deployment"],environmentOption=parsedArguments.flags["--environment"],deploymentOption=deploymentFlag;if(deploymentArgument){let deploymentIdOrHost=deploymentArgument;try{deploymentIdOrHost=new URL(deploymentArgument).hostname}catch{}deploymentOption=deploymentIdOrHost}let levelOption=parsedArguments.flags["--level"],statusCodeOption=parsedArguments.flags["--status-code"],sourceOption=parsedArguments.flags["--source"],sinceOption=parsedArguments.flags["--since"],untilOption=parsedArguments.flags["--until"],limitOption=parsedArguments.flags["--limit"],jsonOption2=parsedArguments.flags["--json"],queryOption=parsedArguments.flags["--query"],searchOption=parsedArguments.flags["--search"],requestIdOption=parsedArguments.flags["--request-id"],expandOption=parsedArguments.flags["--expand"],branchFlagValue=parsedArguments.flags["--branch"],noBranchFlagValue=parsedArguments.flags["--no-branch"],noFollowFlagValue=parsedArguments.flags["--no-follow"],followOption=parsedArguments.flags["--follow"];if(telemetry2.trackCliArgumentUrlOrDeploymentId(deploymentArgument),telemetry2.trackCliOptionProject(projectOption),telemetry2.trackCliOptionDeployment(deploymentFlag),telemetry2.trackCliOptionEnvironment(environmentOption),telemetry2.trackCliOptionLevel(levelOption),telemetry2.trackCliOptionStatusCode(statusCodeOption),telemetry2.trackCliOptionSource(sourceOption),telemetry2.trackCliOptionSince(sinceOption),telemetry2.trackCliOptionUntil(untilOption),telemetry2.trackCliOptionLimit(limitOption),telemetry2.trackCliFlagJson(jsonOption2),telemetry2.trackCliFlagFollow(followOption),telemetry2.trackCliFlagNoFollow(noFollowFlagValue),telemetry2.trackCliOptionQuery(queryOption),telemetry2.trackCliOptionSearch(searchOption),telemetry2.trackCliOptionRequestId(requestIdOption),telemetry2.trackCliFlagExpand(expandOption),telemetry2.trackCliOptionBranch(branchFlagValue),telemetry2.trackCliFlagNoBranch(noBranchFlagValue),followOption){let usedIncompatible=[{flag:"--level",value:levelOption},{flag:"--status-code",value:statusCodeOption},{flag:"--source",value:sourceOption},{flag:"--since",value:sinceOption},{flag:"--until",value:untilOption},{flag:"--limit",value:limitOption},{flag:"--query",value:queryOption},{flag:"--search",value:searchOption},{flag:"--request-id",value:requestIdOption}].filter(f=>f.value!==void 0&&f.value!==null).map(f=>import_chalk246.default.bold(f.flag));if(usedIncompatible.length>0)return output_manager_default.error(`The ${import_chalk246.default.bold("--follow")} flag does not support filtering. Remove: ${usedIncompatible.join(", ")}`),1}let contextName;try{contextName=await getContextName(client)}catch(err){if((0,import_error_utils19.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return output_manager_default.error(err.message),1;throw err}let logsTarget=await resolveLogsTarget(client,{contextName,deploymentOption,projectOption});if("exitCode"in logsTarget)return logsTarget.exitCode;let{projectId,projectSlug,orgSlug,ownerId,deployment}=logsTarget,deploymentId=deployment?.id;if(deployment&&isNonLiveTerminalDeployment(deployment)){let inspectContextName=detectExplicitScope(client)?contextName:void 0,inspectCommand2=getInspectCommand(deployment,inspectContextName,{plain:!0});return jsonOption2?client.stdout.write(`${JSON.stringify({type:"deployment_error",message:`Logs are unavailable because deployment ${deployment.id} never reached READY and ended in ${deployment.readyState}. Run ${inspectCommand2} for deployment details.`})}
1007
1003
  `):printNonLiveDeploymentError(deployment,inspectContextName),1}let branchOption=typeof branchFlagValue=="string"?branchFlagValue:void 0;if(environmentOption&&!["production","preview"].includes(environmentOption))return output_manager_default.error(`Invalid environment: ${environmentOption}. Must be "production" or "preview".`),1;if(followOption){let followDeployment=await resolveFollowDeployment({branch:branchOption,client,environment:environmentOption,logsTarget});if("exitCode"in followDeployment)return followDeployment.exitCode;jsonOption2||output_manager_default.print(`Streaming logs for ${followDeployment.label} ${import_chalk246.default.bold(followDeployment.deploymentId)} starting from ${import_chalk246.default.bold((0,import_format38.default)(Date.now(),TIME_ONLY_FORMAT))}
1008
1004
 
@@ -1094,7 +1090,7 @@ Starting setup...
1094
1090
  `),output_manager_default.print("\u2500".repeat(50)+`
1095
1091
  `),summary.forEach(line2=>output_manager_default.print(`${line2}
1096
1092
  `)),output_manager_default.print(`Complete any required setup and authentication in the selected MCP clients. Restart configured clients if needed.
1097
- `),0}var MCP_CLIENTS=[{slug:"claude-code",display:"Claude Code"},{slug:"claude-desktop",display:"Claude.ai and Claude for desktop"},{slug:"cursor",display:"Cursor"},{slug:"vscode-copilot",display:"VS Code with Copilot"}],MCP_CLIENT_DISPLAY_NAMES=MCP_CLIENTS.map(c=>c.display);function buildSuggestedMcpCommand(client,clientsValue){let args=client.argv.slice(2),preserved=[],hasNonInteractive=!1;for(let i=1;i<args.length;i++){let arg=args[i];if(arg==="--non-interactive"){hasNonInteractive=!0;continue}if(arg==="--clients"){for(i++;i<args.length&&!args[i].startsWith("-");)i++;i--;continue}arg.startsWith("--clients=")||preserved.push(arg)}let singleQuotedClients=`'${clientsValue}'`;preserved.push("--clients",singleQuotedClients),hasNonInteractive&&preserved.push("--non-interactive");let suffix=preserved.join(" ");return suffix?`${packageName} mcp ${suffix}`:`${packageName} mcp`}function parseAndValidateClients(clientsFlag){if(!clientsFlag||!clientsFlag.trim())return[];let normalized=clientsFlag.split(",").map(s=>s.trim()).filter(Boolean).map(name=>{let lower=name.toLowerCase();return MCP_CLIENT_DISPLAY_NAMES.find(c=>c.toLowerCase()===lower)??name});return[...new Set(normalized)]}async function main27(client){let parsedArgs,flagsSpecification=getFlagsSpecification(mcpCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return output_manager_default.print(help(mcpCommand,{columns:client.stderr.columns})),0;let project=!!parsedArgs.flags["--project"],clientsFlag=parsedArgs.flags["--clients"],clients=parseAndValidateClients(clientsFlag);if(client.nonInteractive){if(clients.length===0)return outputAgentError(client,{status:"error",reason:"missing_clients",message:"In non-interactive mode --clients is required. Specify a comma-separated list of MCP clients to set up.",next:[{command:buildSuggestedMcpCommand(client,"Cursor,VS Code with Copilot")}]},2),2;let invalid=clients.filter(c=>!MCP_CLIENT_DISPLAY_NAMES.some(v=>v===c));if(invalid.length>0)return outputAgentError(client,{status:"error",reason:"invalid_clients",message:`Invalid client(s): ${invalid.join(", ")}. Valid options: ${MCP_CLIENT_DISPLAY_NAMES.join(", ")}.`,next:[{command:buildSuggestedMcpCommand(client,"Cursor,VS Code with Copilot")}]},2),2}project&&client.argv.push("--project");try{return await mcp(client,{project,clients})}catch(err){return output_manager_default.prettyError(err),1}}var MetricsTelemetryClient=class extends TelemetryClient{trackCliSubcommandQuery(v){v&&this.trackCliSubcommand({subcommand:"query",value:v})}trackCliSubcommandSchema(v){v&&this.trackCliSubcommand({subcommand:"schema",value:v})}trackCliArgumentMetricId(v){v&&this.trackCliArgument({arg:"metric-id",value:v})}trackCliOptionAggregation(v){v&&this.trackCliOption({option:"aggregation",value:v})}trackCliOptionGroupBy(v){v&&v.length>0&&this.trackCliOption({option:"group-by",value:v.join(",")})}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionOrderBy(v){v&&this.trackCliOption({option:"order-by",value:v})}trackCliOptionOrder(v){v&&this.trackCliOption({option:"order",value:v})}trackCliOptionFilter(v){v&&v.length>0&&this.trackCliOption({option:"filter",value:this.redactedValue})}trackCliFlagProd(v){v&&this.trackCliFlag("prod")}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionGranularity(v){v&&this.trackCliOption({option:"granularity",value:v})}trackCliOptionBucketTimezone(v){v&&this.trackCliOption({option:"bucket-timezone",value:v})}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliError(code2,status6){this.trackErrorCode(code2),this.trackErrorStatus(status6)}};var COMMAND_CONFIG52={schema:getCommandAliases(schemaSubcommand)};async function metrics(client){let telemetry2=new MetricsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(metricsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err,client),2}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG52),positionalMetric=subArgs[0]==="query"?subArgs[1]:subArgs[0],needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("metrics",subcommand),output_manager_default.print(help(metricsCommand,{columns:client.stderr.columns})),0;function printSubHelp(command2){output_manager_default.print(help(command2,{parent:metricsCommand,columns:client.stderr.columns}))}switch(subcommand){case"schema":{if(needHelp)return telemetry2.trackCliFlagHelp("metrics",subcommandOriginal),printSubHelp(schemaSubcommand),0;telemetry2.trackCliSubcommandSchema(subcommandOriginal);let schemaFn=(await import("./chunks/schema-G6BOZBNB.js")).default;return schemaFn(client,telemetry2)}default:{if(needHelp)return telemetry2.trackCliFlagHelp("metrics",subcommandOriginal),output_manager_default.print(help(metricsCommand,{columns:client.stderr.columns})),0;if(!positionalMetric)return output_manager_default.print(help(metricsCommand,{columns:client.stderr.columns})),2;let queryFn=(await import("./chunks/query-2TTSDOFF.js")).default;return queryFn(client,telemetry2)}}}var import_chalk247=__toESM(require_source(),1);import{join as join35}from"node:path";var import_fs_extra=__toESM(require_lib(),1);var VERCEL_DIR=".vercel",VERCEL_DIR_MICROFRONTENDS="microfrontends.json";async function pull2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(pullSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let autoConfirm=!!parsedArgs.flags["--yes"],link=await ensureLink("microfrontends",client,client.cwd,{autoConfirm});if(typeof link=="number")return link;let{project,org,repoRoot}=link,currentDirectory;repoRoot?currentDirectory=join35(repoRoot,project.rootDirectory||""):currentDirectory=client.cwd,client.config.currentTeam=org.type==="team"?org.id:void 0;let contextName=await getContextName(client);output_manager_default.spinner(`Fetching microfrontends configuration in ${import_chalk247.default.bold(contextName)}`);let rawConfig,dpl=parsedArgs.flags["--dpl"];try{if(dpl){let{config}=await client.fetch(`/v1/microfrontends/${dpl}/config`,{method:"GET"});rawConfig=config}else{let projectId=project.id,{config}=await client.fetch(`/v1/microfrontends/projects/${projectId}/production-mfe-config`,{method:"GET"});rawConfig=config}let sanitizedConfig={...rawConfig,applications:Object.fromEntries(Object.entries(rawConfig.applications).map(([name,app])=>[name,{...app,projectId:void 0}]))};output_manager_default.stopSpinner();let path3=join35(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS);await(0,import_fs_extra.outputJSON)(path3,sanitizedConfig,{spaces:2});let microfrontendsStamp=stamp_default();return output_manager_default.print(`${prependEmoji(`Downloaded microfrontends configuration to ${import_chalk247.default.bold(humanizePath(join35(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS)))} ${import_chalk247.default.gray(microfrontendsStamp())}`,emoji("success"))}
1093
+ `),0}var MCP_CLIENTS=[{slug:"claude-code",display:"Claude Code"},{slug:"claude-desktop",display:"Claude.ai and Claude for desktop"},{slug:"cursor",display:"Cursor"},{slug:"vscode-copilot",display:"VS Code with Copilot"}],MCP_CLIENT_DISPLAY_NAMES=MCP_CLIENTS.map(c=>c.display);function buildSuggestedMcpCommand(client,clientsValue){let args=client.argv.slice(2),preserved=[],hasNonInteractive=!1;for(let i=1;i<args.length;i++){let arg2=args[i];if(arg2==="--non-interactive"){hasNonInteractive=!0;continue}if(arg2==="--clients"){for(i++;i<args.length&&!args[i].startsWith("-");)i++;i--;continue}arg2.startsWith("--clients=")||preserved.push(arg2)}let singleQuotedClients=`'${clientsValue}'`;preserved.push("--clients",singleQuotedClients),hasNonInteractive&&preserved.push("--non-interactive");let suffix=preserved.join(" ");return suffix?`${packageName} mcp ${suffix}`:`${packageName} mcp`}function parseAndValidateClients(clientsFlag){if(!clientsFlag||!clientsFlag.trim())return[];let normalized=clientsFlag.split(",").map(s=>s.trim()).filter(Boolean).map(name=>{let lower=name.toLowerCase();return MCP_CLIENT_DISPLAY_NAMES.find(c=>c.toLowerCase()===lower)??name});return[...new Set(normalized)]}async function main27(client){let parsedArgs,flagsSpecification=getFlagsSpecification(mcpCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return output_manager_default.print(help(mcpCommand,{columns:client.stderr.columns})),0;let project=!!parsedArgs.flags["--project"],clientsFlag=parsedArgs.flags["--clients"],clients=parseAndValidateClients(clientsFlag);if(client.nonInteractive){if(clients.length===0)return outputAgentError(client,{status:"error",reason:"missing_clients",message:"In non-interactive mode --clients is required. Specify a comma-separated list of MCP clients to set up.",next:[{command:buildSuggestedMcpCommand(client,"Cursor,VS Code with Copilot")}]},2),2;let invalid=clients.filter(c=>!MCP_CLIENT_DISPLAY_NAMES.some(v=>v===c));if(invalid.length>0)return outputAgentError(client,{status:"error",reason:"invalid_clients",message:`Invalid client(s): ${invalid.join(", ")}. Valid options: ${MCP_CLIENT_DISPLAY_NAMES.join(", ")}.`,next:[{command:buildSuggestedMcpCommand(client,"Cursor,VS Code with Copilot")}]},2),2}project&&client.argv.push("--project");try{return await mcp(client,{project,clients})}catch(err){return output_manager_default.prettyError(err),1}}var MetricsTelemetryClient=class extends TelemetryClient{trackCliSubcommandQuery(v){v&&this.trackCliSubcommand({subcommand:"query",value:v})}trackCliSubcommandSchema(v){v&&this.trackCliSubcommand({subcommand:"schema",value:v})}trackCliArgumentMetricId(v){v&&this.trackCliArgument({arg:"metric-id",value:v})}trackCliOptionAggregation(v){v&&this.trackCliOption({option:"aggregation",value:v})}trackCliOptionGroupBy(v){v&&v.length>0&&this.trackCliOption({option:"group-by",value:v.join(",")})}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionOrderBy(v){v&&this.trackCliOption({option:"order-by",value:v})}trackCliOptionOrder(v){v&&this.trackCliOption({option:"order",value:v})}trackCliOptionFilter(v){v&&v.length>0&&this.trackCliOption({option:"filter",value:this.redactedValue})}trackCliFlagProd(v){v&&this.trackCliFlag("prod")}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionGranularity(v){v&&this.trackCliOption({option:"granularity",value:v})}trackCliOptionBucketTimezone(v){v&&this.trackCliOption({option:"bucket-timezone",value:v})}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliError(code2,status6){this.trackErrorCode(code2),this.trackErrorStatus(status6)}};var COMMAND_CONFIG52={schema:getCommandAliases(schemaSubcommand)};async function metrics(client){let telemetry2=new MetricsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(metricsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err,client),2}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG52),positionalMetric=subArgs[0]==="query"?subArgs[1]:subArgs[0],needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("metrics",subcommand),output_manager_default.print(help(metricsCommand,{columns:client.stderr.columns})),0;function printSubHelp(command2){output_manager_default.print(help(command2,{parent:metricsCommand,columns:client.stderr.columns}))}switch(subcommand){case"schema":{if(needHelp)return telemetry2.trackCliFlagHelp("metrics",subcommandOriginal),printSubHelp(schemaSubcommand),0;telemetry2.trackCliSubcommandSchema(subcommandOriginal);let schemaFn=(await import("./chunks/schema-S2DE7S5N.js")).default;return schemaFn(client,telemetry2)}default:{if(needHelp)return telemetry2.trackCliFlagHelp("metrics",subcommandOriginal),output_manager_default.print(help(metricsCommand,{columns:client.stderr.columns})),0;if(!positionalMetric)return output_manager_default.print(help(metricsCommand,{columns:client.stderr.columns})),2;let queryFn=(await import("./chunks/query-22PGP7BC.js")).default;return queryFn(client,telemetry2)}}}var import_chalk247=__toESM(require_source(),1);import{join as join35}from"node:path";var import_fs_extra=__toESM(require_lib(),1);var VERCEL_DIR=".vercel",VERCEL_DIR_MICROFRONTENDS="microfrontends.json";async function pull2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(pullSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let autoConfirm=!!parsedArgs.flags["--yes"],link=await ensureLink("microfrontends",client,client.cwd,{autoConfirm});if(typeof link=="number")return link;let{project,org,repoRoot}=link,currentDirectory;repoRoot?currentDirectory=join35(repoRoot,project.rootDirectory||""):currentDirectory=client.cwd,client.config.currentTeam=org.type==="team"?org.id:void 0;let contextName=await getContextName(client);output_manager_default.spinner(`Fetching microfrontends configuration in ${import_chalk247.default.bold(contextName)}`);let rawConfig,dpl=parsedArgs.flags["--dpl"];try{if(dpl){let{config}=await client.fetch(`/v1/microfrontends/${dpl}/config`,{method:"GET"});rawConfig=config}else{let projectId=project.id,{config}=await client.fetch(`/v1/microfrontends/projects/${projectId}/production-mfe-config`,{method:"GET"});rawConfig=config}let sanitizedConfig={...rawConfig,applications:Object.fromEntries(Object.entries(rawConfig.applications).map(([name,app])=>[name,{...app,projectId:void 0}]))};output_manager_default.stopSpinner();let path3=join35(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS);await(0,import_fs_extra.outputJSON)(path3,sanitizedConfig,{spaces:2});let microfrontendsStamp=stamp_default();return output_manager_default.print(`${prependEmoji(`Downloaded microfrontends configuration to ${import_chalk247.default.bold(humanizePath(join35(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS)))} ${import_chalk247.default.gray(microfrontendsStamp())}`,emoji("success"))}
1098
1094
  `),0}catch(error){return output_manager_default.stopSpinner(),printError(error),1}}var import_chalk248=__toESM(require_source(),1);import{writeFile as writeFile6}from"fs/promises";import{existsSync as existsSync3}from"fs";import{join as join36}from"path";async function ensureMicrofrontendsContext(client,options){let link=await ensureLink("microfrontends",client,client.cwd,{autoConfirm:options?.autoConfirm});if(typeof link=="number")return link;let{project,org,repoRoot}=link;if(org.type!=="team")return output_manager_default.error("Microfrontends are only available for teams."),1;client.config.currentTeam=org.id;let{team}=await getScope(client);return team?{project,org,team,repoRoot}:(output_manager_default.error("Microfrontends are only available for teams."),1)}async function fetchMicrofrontendsGroups(client,teamId){output_manager_default.spinner("Fetching microfrontends groups\u2026");let response=await client.fetch(`/v1/microfrontends/groups?teamId=${teamId}`,{method:"GET"});return output_manager_default.stopSpinner(),response}function validateDefaultRoute(path3){if(!path3||!path3.startsWith("/"))return"Route must start with /";if(/\s/.test(path3))return"Route must not contain spaces";if(path3.includes("?")||path3.includes("#"))return"Route must not contain query strings or fragments";try{new URL(path3,"http://n")}catch{return"Route is not a valid URL path"}return!0}function validateRoutingPath(path3){return!path3||!path3.startsWith("/")?"Path must start with /. See https://vercel.com/docs/microfrontends/path-routing for supported syntax.":/\s/.test(path3)?"Path must not contain spaces. See https://vercel.com/docs/microfrontends/path-routing for supported syntax.":!0}var MAX_GROUP_NAME_LENGTH=48;async function createGroup(client){let parsedArgs,flagsSpecification=getFlagsSpecification(createGroupSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let{team}=await getScope(client);if(!team)return output_manager_default.error("Microfrontends are only available for teams."),1;let teamSlug=team.slug;output_manager_default.log("A microfrontends group allows multiple projects to be composed into one application with a seamless user experience."),output_manager_default.log(`Creating a new microfrontends group for team ${import_chalk248.default.bold(teamSlug)}.`),output_manager_default.log("");let groupsResponse=await fetchMicrofrontendsGroups(client,team.id),{groups,maxMicrofrontendsGroupsPerTeam,maxMicrofrontendsPerGroup}=groupsResponse,plan=team.billing.plan,isProTrialPlan=team.billing.plan==="pro"&&team.billing.status==="trialing",isLimitedPlan=isProTrialPlan||plan==="hobby";if(groups.length>=maxMicrofrontendsGroupsPerTeam){if(isLimitedPlan){let planName=isProTrialPlan?"Pro Trial":"Hobby",url=getTeamBillingUrl(teamSlug);return output_manager_default.log(`You've reached the microfrontends group limit for ${planName}. Upgrade to Pro to create more groups.`),output_manager_default.log(`Upgrade: ${output_manager_default.link(url,url,{fallback:!1})}`),1}return output_manager_default.error(`Maximum number of microfrontends groups (${maxMicrofrontendsGroupsPerTeam}) reached.`),1}let existingMfeProjectCount=groups.reduce((count2,g)=>count2+g.projects.length,0),freeProjects=2;if(isLimitedPlan&&existingMfeProjectCount+1>freeProjects){let planName=isProTrialPlan?"Pro Trial":"Hobby",url=`https://vercel.com/${teamSlug}/~/settings/billing`;return output_manager_default.log(`You've reached the microfrontends project limit for ${planName}. Upgrade to Pro to add more projects.`),output_manager_default.log(`Upgrade: ${output_manager_default.link(url,url,{fallback:!1})}`),1}let nameFlag=parsedArgs.flags["--name"],projectFlags=parsedArgs.flags["--project"],defaultAppFlag=parsedArgs.flags["--default-app"],defaultRouteFlag=parsedArgs.flags["--default-route"],projectDefaultRouteFlags=parsedArgs.flags["--project-default-route"],autoConfirm=!!parsedArgs.flags["--yes"],isNonInteractive=client.nonInteractive||client.argv.includes("--non-interactive");if(isNonInteractive){if(!nameFlag)return output_manager_default.error("Missing required flag --name. Use --name in non-interactive mode."),2;if(!projectFlags||projectFlags.length===0)return output_manager_default.error("Missing required flag --project. Use --project in non-interactive mode."),2;if(projectFlags.length>1&&!defaultAppFlag)return output_manager_default.error("Missing required flag --default-app when using multiple --project values in non-interactive mode."),2}let projectsToAddCount=projectFlags?.length??1;if(existingMfeProjectCount+projectsToAddCount>freeProjects){if(isNonInteractive){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),interactiveCmd=getCommandNamePlain(`microfrontends create-group ${flags.filter(f=>f!=="--non-interactive").join(" ")}`.trim());return outputAgentError(client,{status:"error",reason:"purchase_requires_user",message:"Creating a microfrontends group affects billing and cannot be performed non-interactively. Agents must not make billing changes on behalf of a user. The user must run this command interactively in a terminal to review billing details and confirm, or complete the action in the Vercel dashboard.",next:[{command:interactiveCmd,when:"user runs this command interactively (remove --non-interactive)"}]},1),1}if(!client.stdin.isTTY)return output_manager_default.error("This command must be run interactively because it affects billing."),1}let groupName;if(nameFlag){let validation=validateGroupName(nameFlag,groups);if(validation!==!0)return output_manager_default.error(validation),1;groupName=nameFlag}else groupName=await client.input.text({message:"Group name:",validate:val=>validateGroupName(val,groups)});let selectedProjects;if(projectFlags){selectedProjects=[];for(let name of projectFlags)try{let project=await getProjectByNameOrId(client,name,team.id);if(project instanceof ProjectNotFound)return output_manager_default.error(`Project "${name}" not found.`),1;selectedProjects.push(project)}catch{return output_manager_default.error(`Project "${name}" not found.`),1}}else{output_manager_default.spinner("Fetching projects\u2026");let firstPage=await client.fetch(`/v9/projects?limit=100&teamId=${team.id}`,{method:"GET"});output_manager_default.stopSpinner();let allProjects=firstPage.projects,hasMoreProjects=firstPage.pagination.next!==null,availableProjects=allProjects.filter(p=>!isProjectInMicrofrontendsGroup(p,groups));selectedProjects=[];let addMore=!0;for(;addMore;){let project;if(hasMoreProjects)await client.input.text({message:selectedProjects.length===0?"Type a project name to add:":"Type another project name to add:",validate:async val=>{if(!val)return"Project name cannot be empty";let result=await getProjectByNameOrId(client,val,team.id);return result instanceof ProjectNotFound?"Project not found":isProjectInMicrofrontendsGroup(result,groups)?`Project "${val}" is already in a microfrontends group`:selectedProjects.some(s=>s.id===result.id)?`Project "${val}" is already selected`:(project=result,!0)}});else{if(availableProjects.length===0){if(selectedProjects.length===0)return output_manager_default.error("No available projects. All projects are already in a microfrontends group."),1;break}let remaining=availableProjects.filter(p=>!selectedProjects.some(s=>s.id===p.id));if(remaining.length===0)break;let projectId=await client.input.select({message:selectedProjects.length===0?"Select a project to add:":"Select another project to add:",choices:remaining.map(p=>({name:p.name,value:p.id}))});project=availableProjects.find(p=>p.id===projectId)}project&&selectedProjects.push(project),addMore=await client.input.confirm("Add another project?",!1)}if(selectedProjects.length===0)return output_manager_default.error("At least one project must be selected."),1}if(selectedProjects.length>maxMicrofrontendsPerGroup)return output_manager_default.error(`Cannot add more than ${maxMicrofrontendsPerGroup} projects to a group.`),1;let defaultApp;if(defaultAppFlag){let found=selectedProjects.find(p=>p.name===defaultAppFlag);if(!found)return output_manager_default.error(`Default app "${defaultAppFlag}" must be one of the selected projects.`),2;defaultApp=found}else if(selectedProjects.length===1)defaultApp=selectedProjects[0];else{let defaultAppId=await client.input.select({message:"Select the default application:",choices:selectedProjects.map(p=>({name:p.name,value:p.id}))});defaultApp=selectedProjects.find(p=>p.id===defaultAppId)}let defaultRoute;if(defaultRouteFlag){let validation=validateDefaultRoute(defaultRouteFlag);if(validation!==!0)return output_manager_default.error(validation),1;defaultRoute=defaultRouteFlag}else defaultRoute="/";let otherProjects=selectedProjects.filter(p=>p.id!==defaultApp.id),parsedProjectDefaultRoutes=parseProjectDefaultRouteFlags(projectDefaultRouteFlags,selectedProjects,defaultApp);if(typeof parsedProjectDefaultRoutes=="string")return output_manager_default.error(parsedProjectDefaultRoutes),1;let otherApplications=[];for(let project of otherProjects){let routeFromFlag=parsedProjectDefaultRoutes.get(project.id),route;if(routeFromFlag)route=routeFromFlag;else{if(isNonInteractive)return output_manager_default.error(`Missing required flag --project-default-route for "${project.name}". Use --project-default-route=${project.name}=/<path> in non-interactive mode.`),2;route=await client.input.text({message:`Default route for "${project.name}":`,validate:validateDefaultRoute})}otherApplications.push({projectId:project.id,defaultRoute:route})}let newProjectCount=selectedProjects.length,totalAfter=existingMfeProjectCount+newProjectCount;output_manager_default.log(""),output_manager_default.log(import_chalk248.default.bold("Billing")),output_manager_default.log(` ${import_chalk248.default.bold("Team:")} ${teamSlug}`),output_manager_default.log(` ${import_chalk248.default.bold("Adding:")} ${newProjectCount} microfrontends project${newProjectCount>1?"s":""}`);let projectFee;if(totalAfter<=freeProjects)projectFee=import_chalk248.default.green("Free")+` (first ${freeProjects} included)`;else if(existingMfeProjectCount>=freeProjects)projectFee=import_chalk248.default.yellow(`$250.00/month x ${newProjectCount}`)+` project${newProjectCount>1?"s":""}`;else{let freeRemaining=freeProjects-existingMfeProjectCount,paidProjects=newProjectCount-freeRemaining;projectFee=import_chalk248.default.green(`${freeRemaining} free`)+", "+import_chalk248.default.yellow(`$250.00/month x ${paidProjects}`)}if(output_manager_default.log(` ${import_chalk248.default.bold("Project fee:")} ${projectFee}`),output_manager_default.log(` ${import_chalk248.default.bold("Request fee:")} ${import_chalk248.default.yellow("$2.00")} per million microfrontends routed requests`),output_manager_default.log(""),totalAfter<=freeProjects)output_manager_default.log(`This group is within the free tier, so no project fee will be charged to ${import_chalk248.default.bold(teamSlug)}'s bill. Request fees still apply for microfrontends routed requests.`);else{let newPaidProjects=Math.min(newProjectCount,totalAfter-freeProjects);output_manager_default.log(`By proceeding, ${import_chalk248.default.bold(teamSlug)} will be charged for ${newPaidProjects} additional paid project${newPaidProjects>1?"s":""} on the team's monthly bill.`)}if(output_manager_default.log(""),!autoConfirm&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to confirm group creation in non-interactive mode."),1;if(!(autoConfirm||await client.input.confirm("Create microfrontends group?",!0)))return output_manager_default.log("Aborted."),0;let createStamp=stamp_default();output_manager_default.spinner("Creating microfrontends group\u2026");try{await client.fetch(`/v1/microfrontends/group?teamId=${team.id}`,{method:"POST",body:{groupName,defaultApp:{projectId:defaultApp.id,defaultRoute},otherApplications}})}catch(error){return output_manager_default.stopSpinner(),isAPIError(error)&&error.status===403?(output_manager_default.error("You must be an Owner to create or modify microfrontends groups."),1):(printError(error),1)}output_manager_default.stopSpinner();let settingsUrl=`https://vercel.com/${teamSlug}/${defaultApp.name}/settings/microfrontends`;output_manager_default.success(`Microfrontends group "${groupName}" created ${import_chalk248.default.gray(createStamp())}`),output_manager_default.log(`View microfrontends group: ${output_manager_default.link(settingsUrl,settingsUrl,{fallback:!1})}`);let link=await getLinkedProject(client,{cwd:client.cwd}),linkedProject=link.status==="linked"?link.project:void 0;if(linkedProject&&linkedProject.id===defaultApp.id){let repoRoot=link.status==="linked"?link.repoRoot:void 0,projectDir=repoRoot?join36(repoRoot,linkedProject.rootDirectory||""):client.cwd,configPath=join36(projectDir,"microfrontends.json");if(!existsSync3(configPath)&&(output_manager_default.log(""),output_manager_default.log(`No changes to production traffic will take effect until a ${import_chalk248.default.bold("microfrontends.json")} is added to the default app. This configuration file specifies the path routing for the microfrontends group.`),client.stdin.isTTY&&!isNonInteractive&&await client.input.confirm("Create a microfrontends.json now?",!0))){let routingPaths={};for(let project of otherProjects){output_manager_default.log(`Enter routing paths for ${import_chalk248.default.bold(project.name)} (comma-separated, e.g. /docs, /docs/*)`);let pathsInput=await client.input.text({message:`Paths for ${project.name}:`,validate:val=>{if(!val.trim())return"At least one path is required";let paths=val.split(",").map(p=>p.trim());for(let p of paths){let result=validateRoutingPath(p);if(result!==!0)return`Invalid path "${p}": ${result}`}return!0}});routingPaths[project.name]=pathsInput.split(",").map(p=>p.trim())}let productionAlias=defaultApp.targets?.production?.alias?.[0],config=generateMicrofrontendsConfig(defaultApp.name,routingPaths,productionAlias);await writeFile6(configPath,config+`
1099
1095
  `,"utf-8"),output_manager_default.success(`Created ${import_chalk248.default.bold("microfrontends.json")}`),output_manager_default.log("Create a preview deployment to test microfrontends before deploying to production.")}}else output_manager_default.log(`Next step: Add a ${import_chalk248.default.bold("microfrontends.json")} to your default app. See ${output_manager_default.link("https://vercel.com/docs/microfrontends/path-routing","https://vercel.com/docs/microfrontends/path-routing",{fallback:!1})}`);return 0}function generateMicrofrontendsConfig(defaultAppName,routingPaths,productionAlias){let fallback=productionAlias||"...your-production-domain.vercel.app",applications={[defaultAppName]:{development:{fallback}}};for(let[name,paths]of Object.entries(routingPaths))applications[name]={routing:[{paths}]};return JSON.stringify({$schema:"https://openapi.vercel.sh/microfrontends.json",applications},null,2)}function validateGroupName(name,existingGroups){return!name||name.trim().length===0?"Group name cannot be empty.":name.length>MAX_GROUP_NAME_LENGTH?`Group name must be ${MAX_GROUP_NAME_LENGTH} characters or less.`:existingGroups.some(g=>g.group.name===name)?`A group named "${name}" already exists.`:!0}function isProjectInMicrofrontendsGroup(project,groups){return groups.some(g=>g.projects.some(p=>p.id===project.id))}function parseProjectDefaultRouteFlags(projectDefaultRouteFlags,selectedProjects,defaultApp){let routeByProjectId=new Map;if(!projectDefaultRouteFlags||projectDefaultRouteFlags.length===0)return routeByProjectId;for(let entry2 of projectDefaultRouteFlags){let separatorIndex=entry2.indexOf("=");if(separatorIndex<=0||separatorIndex===entry2.length-1)return`Invalid --project-default-route value "${entry2}". Use "<project>=<route>", for example "docs=/docs".`;let projectIdentifier=entry2.slice(0,separatorIndex).trim(),route=entry2.slice(separatorIndex+1).trim();if(!projectIdentifier||!route)return`Invalid --project-default-route value "${entry2}". Use "<project>=<route>", for example "docs=/docs".`;let project=selectedProjects.find(p=>p.name===projectIdentifier||p.id===projectIdentifier);if(!project)return`Invalid --project-default-route value "${entry2}". Project "${projectIdentifier}" is not one of the selected projects.`;if(project.id===defaultApp.id)return`Invalid --project-default-route value "${entry2}". Use --default-route for the default app "${defaultApp.name}".`;let routeValidation=validateDefaultRoute(route);if(routeValidation!==!0)return`Invalid --project-default-route value "${entry2}": ${routeValidation}`;if(routeByProjectId.has(project.id))return`Duplicate --project-default-route for project "${project.name}".`;routeByProjectId.set(project.id,route)}return routeByProjectId}var import_chalk249=__toESM(require_source(),1);async function addToGroup(client){let parsedArgs,flagsSpecification=getFlagsSpecification(addToGroupSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let context=await ensureMicrofrontendsContext(client);if(typeof context=="number")return context;let{project,team}=context,teamSlug=team.slug,groupsResponse=await fetchMicrofrontendsGroups(client,team.id),{groups,maxMicrofrontendsPerGroup}=groupsResponse,existingGroup=groups.find(g=>g.projects.some(p=>p.id===project.id));if(existingGroup)return output_manager_default.error(`Project "${project.name}" is already part of the microfrontends group "${existingGroup.group.name}". A project cannot be in more than one microfrontends group.`),1;if(groups.length===0)return output_manager_default.error("No microfrontends groups exist. Create one first with `vercel microfrontends create-group`."),1;let existingMfeProjectCount=groups.reduce((count2,g)=>count2+g.projects.length,0),freeProjects=2,totalAfter=existingMfeProjectCount+1,plan=team.billing.plan,isProTrialPlan=team.billing.plan==="pro"&&team.billing.status==="trialing",isLimitedPlan=isProTrialPlan||plan==="hobby";if(isLimitedPlan&&totalAfter>freeProjects){let planName=isProTrialPlan?"Pro Trial":"Hobby",url=getTeamBillingUrl(teamSlug);return output_manager_default.log(`You've reached the microfrontends project limit for ${planName}. Upgrade to Pro to add more projects.`),output_manager_default.log(`Upgrade: ${output_manager_default.link(url,url,{fallback:!1})}`),1}output_manager_default.log(`Adding project ${import_chalk249.default.bold(project.name)} to a microfrontends group on ${import_chalk249.default.bold(teamSlug)}.`),output_manager_default.log("");let groupFlag=parsedArgs.flags["--group"],defaultRouteFlag=parsedArgs.flags["--default-route"];if(totalAfter>freeProjects){if(client.nonInteractive){let settingsUrl2=`https://vercel.com/${teamSlug}/${project.name}/settings/microfrontends`,flags=getGlobalFlagsFromArgs(client.argv.slice(2)),interactiveCmd=getCommandNamePlain(`microfrontends add-to-group ${flags.filter(f=>f!=="--non-interactive").join(" ")}`.trim());outputAgentError(client,{status:"error",reason:"purchase_requires_user",message:"Adding a project to a microfrontends group affects billing and cannot be performed non-interactively. Agents must not make billing changes on behalf of a user. The user must run this command interactively in a terminal to review billing details and confirm, or complete the action in the Vercel dashboard.",next:[{command:openUrlInBrowserCommand(settingsUrl2),when:"user opens Microfrontends settings in the browser"},{command:interactiveCmd,when:"user runs this command interactively (remove --non-interactive)"}]},1)}if(!client.stdin.isTTY)return output_manager_default.error("This command must be run interactively because it affects billing."),1}let selectedGroup;if(groupFlag){let found=groups.find(g=>g.group.name===groupFlag||g.group.id===groupFlag);if(!found)return output_manager_default.error(`Microfrontends group "${groupFlag}" not found.`),1;selectedGroup=found}else{let groupId=await client.input.select({message:"Select a microfrontends group:",choices:groups.map(g=>({name:g.group.name,value:g.group.id}))});selectedGroup=groups.find(g=>g.group.id===groupId)}if(selectedGroup.projects.length>=maxMicrofrontendsPerGroup){if(isLimitedPlan){let planName=isProTrialPlan?"Pro Trial":"Hobby",url=getTeamBillingUrl(teamSlug);return output_manager_default.log(`You've reached the microfrontends project limit for ${planName}. Upgrade to Pro to add more projects.`),output_manager_default.log(`Upgrade: ${output_manager_default.link(url,url,{fallback:!1})}`),1}return output_manager_default.error(`Group "${selectedGroup.group.name}" has reached the maximum number of projects (${maxMicrofrontendsPerGroup}).`),1}let defaultRoute;if(defaultRouteFlag){let validation=validateDefaultRoute(defaultRouteFlag);if(validation!==!0)return output_manager_default.error(validation),1;defaultRoute=defaultRouteFlag}else client.stdin.isTTY&&(output_manager_default.log("Specify a default route for the project. This path will be used for deployment screenshots and the default link to the project."),defaultRoute=await client.input.text({message:"Default route (e.g. /docs):",validate:validateDefaultRoute}));output_manager_default.log(""),output_manager_default.log(import_chalk249.default.bold("Billing")),output_manager_default.log(` ${import_chalk249.default.bold("Team:")} ${teamSlug}`);let projectFee;if(totalAfter<=freeProjects?projectFee=import_chalk249.default.green("Free")+` (first ${freeProjects} included)`:existingMfeProjectCount>=freeProjects?projectFee=import_chalk249.default.yellow("$250.00/month"):projectFee=import_chalk249.default.yellow("$250.00/month")+` (${freeProjects} free projects used)`,output_manager_default.log(` ${import_chalk249.default.bold("Project fee:")} ${projectFee}`),output_manager_default.log(` ${import_chalk249.default.bold("Request fee:")} ${import_chalk249.default.yellow("$2.00")} per million microfrontends routed requests`),output_manager_default.log(""),totalAfter<=freeProjects?output_manager_default.log(`Adding "${project.name}" is within the free tier, so no project fee will be charged to ${import_chalk249.default.bold(teamSlug)}'s bill. Request fees still apply for microfrontends routed requests.`):output_manager_default.log(`By proceeding, ${import_chalk249.default.bold(teamSlug)} will be charged for this project on the team's monthly bill.`),output_manager_default.log(""),!await client.input.confirm(`Add "${project.name}" to "${selectedGroup.group.name}"?`,!0))return output_manager_default.log("Aborted."),0;let addStamp=stamp_default();output_manager_default.spinner("Adding project to microfrontends group\u2026");try{await client.fetch(`/v10/projects/${project.id}/microfrontends?teamId=${teamSlug}`,{method:"PATCH",body:{microfrontendsGroupId:selectedGroup.group.id,isDefaultApp:!1,defaultRoute,enabled:!0}})}catch(error){return output_manager_default.stopSpinner(),isAPIError(error)&&error.status===403?(output_manager_default.error("You must be an Owner to create or modify microfrontends groups."),1):(printError(error),1)}output_manager_default.stopSpinner();let settingsUrl=`https://vercel.com/${teamSlug}/${project.name}/settings/microfrontends`;return output_manager_default.success(`Project "${project.name}" added to group "${selectedGroup.group.name}" ${import_chalk249.default.gray(addStamp())}`),output_manager_default.log(`View microfrontends group: ${output_manager_default.link(settingsUrl,settingsUrl,{fallback:!1})}`),output_manager_default.log(`Next step: Add routing paths for this project in your microfrontends.json configuration. See ${output_manager_default.link("https://vercel.com/docs/microfrontends/path-routing","https://vercel.com/docs/microfrontends/path-routing",{fallback:!1})}`),0}var import_chalk250=__toESM(require_source(),1);async function removeFromGroup(client){let parsedArgs,flagsSpecification=getFlagsSpecification(removeFromGroupSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let autoConfirm=!!parsedArgs.flags["--yes"],context=await ensureMicrofrontendsContext(client,{autoConfirm});if(typeof context=="number")return context;let{project,team}=context,teamSlug=team.slug,groupsResponse=await fetchMicrofrontendsGroups(client,team.id),{groups}=groupsResponse,projectGroup=groups.find(g=>g.projects.some(p=>p.id===project.id));if(!projectGroup)return output_manager_default.error(`Project "${project.name}" is not part of any microfrontends group.`),1;if(projectGroup.projects.find(p=>p.id===project.id)?.microfrontends?.isDefaultApp)return output_manager_default.error(`Project "${project.name}" is the default app for group "${projectGroup.group.name}" and cannot be removed. To remove it, first change the default app in the dashboard.`),1;if(client.nonInteractive&&!autoConfirm)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Removing "${project.name}" from microfrontends group "${projectGroup.group.name}" requires confirmation. Use --yes to confirm.`,next:[{command:buildCommandWithYes(client.argv),when:"to confirm removal"}]},1),1;output_manager_default.log(`Removing project ${import_chalk250.default.bold(project.name)} from microfrontends group ${import_chalk250.default.bold(projectGroup.group.name)} on ${import_chalk250.default.bold(teamSlug)}.`),output_manager_default.log(`After removal, "${project.name}" will no longer be a child app in the group and will not be part of the composed application.`);let isReferencedInConfig=!!projectGroup.config?.applications?.[project.name];if(isReferencedInConfig&&(output_manager_default.log(""),output_manager_default.warn(`The microfrontends.json configuration still contains an entry for "${project.name}".`),output_manager_default.warn("Removing this project will cause other microfrontends projects in the group to fail deploying until the configuration is updated."),!autoConfirm)){if(!client.stdin.isTTY)return output_manager_default.error("Cannot remove a project that is still referenced in microfrontends.json in non-interactive mode."),1;if(output_manager_default.log(""),!await client.input.confirm(`Remove "${project.name}" even though it is still referenced in microfrontends.json?`,!1))return output_manager_default.log("Aborted."),0}if(output_manager_default.log(""),!autoConfirm){if(!client.stdin.isTTY)return output_manager_default.error("This command must be run interactively to confirm removal."),1;if(!await client.input.confirm(`Remove "${project.name}" from "${projectGroup.group.name}"?`,!1))return output_manager_default.log("Aborted."),0}let removeStamp=stamp_default();output_manager_default.spinner("Removing project from microfrontends group\u2026");try{await client.fetch(`/v10/projects/${project.id}/microfrontends?teamId=${teamSlug}`,{method:"PATCH",body:{enabled:!1}})}catch(error){return output_manager_default.stopSpinner(),isAPIError(error)&&error.status===403?(output_manager_default.error("You must be an Owner to create or modify microfrontends groups."),1):(printError(error),1)}return output_manager_default.stopSpinner(),output_manager_default.success(`Project "${project.name}" removed from group "${projectGroup.group.name}" ${import_chalk250.default.gray(removeStamp())}`),isReferencedInConfig&&output_manager_default.log(`Remember to remove "${project.name}" from your microfrontends.json configuration.`),0}var import_chalk251=__toESM(require_source(),1);async function deleteGroup(client){let parsedArgs,flagsSpecification=getFlagsSpecification(deleteGroupSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let autoConfirm=!!parsedArgs.flags["--yes"],groupFlag=parsedArgs.flags["--group"];if(client.nonInteractive&&!autoConfirm)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"Deleting a microfrontends group requires confirmation. Use --yes and --group to confirm.",next:[{command:buildCommandWithYes(client.argv),when:"to confirm deletion"}]},1),1;let{team}=await getScope(client);if(!team)return output_manager_default.error("Microfrontends are only available for teams."),1;let groupsResponse=await fetchMicrofrontendsGroups(client,team.id),{groups}=groupsResponse;if(groups.length===0)return output_manager_default.error("No microfrontends groups exist. There is nothing to delete."),1;if(!client.stdin.isTTY&&!groupFlag)return output_manager_default.error("Missing required flag --group. Use --group to specify the microfrontends group, or run interactively."),2;let selectedGroup;if(groupFlag){let found=groups.find(g=>g.group.name===groupFlag||g.group.id===groupFlag);if(!found)return output_manager_default.error(`Microfrontends group "${groupFlag}" not found.`),1;selectedGroup=found}else{let link=await getLinkedProject(client,{cwd:client.cwd}),linkedProject=link.status==="linked"?link.project:void 0,linkedGroup=linkedProject?groups.find(g=>g.projects.some(p=>p.id===linkedProject.id&&p.microfrontends?.isDefaultApp)):void 0;if(linkedGroup&&client.stdin.isTTY)if(await client.input.confirm(`Delete microfrontends group "${linkedGroup.group.name}" (linked to ${import_chalk251.default.bold(linkedProject.name)})?`,!0))selectedGroup=linkedGroup;else{if(groups.length===1)return output_manager_default.log("Aborted."),0;{let remaining=groups.filter(g=>g.group.id!==linkedGroup.group.id),groupId=await client.input.select({message:"Select a microfrontends group to delete:",choices:remaining.map(g=>({name:g.group.name,value:g.group.id}))});selectedGroup=groups.find(g=>g.group.id===groupId)}}else{let groupId=await client.input.select({message:"Select a microfrontends group to delete:",choices:groups.map(g=>({name:g.group.name,value:g.group.id}))});selectedGroup=groups.find(g=>g.group.id===groupId)}}let groupName=selectedGroup.group.name,projectCount=selectedGroup.projects.length;if(output_manager_default.log(""),output_manager_default.log(`This will delete the microfrontends group ${import_chalk251.default.bold(groupName)} and all of its settings.`),projectCount>0&&output_manager_default.log(`${projectCount} project${projectCount>1?"s":""} will be removed from the group.`),output_manager_default.log(import_chalk251.default.red("This action is not reversible.")),output_manager_default.log(""),!autoConfirm){if(!client.stdin.isTTY)return output_manager_default.error("This command must be run interactively to confirm deletion."),1;if(await client.input.text({message:`Type ${import_chalk251.default.bold(groupName)} to confirm deletion:`,validate:val=>val!==groupName?`You must type "${groupName}" to confirm.`:!0})!==groupName)return output_manager_default.log("Aborted."),0}let deleteStamp=stamp_default();output_manager_default.spinner("Deleting microfrontends group\u2026");try{await client.fetch(`/v2/teams/${team.id}/microfrontends/${selectedGroup.group.id}?teamId=${team.id}`,{method:"DELETE"})}catch(error){return output_manager_default.stopSpinner(),isAPIError(error)&&error.status===403?(output_manager_default.error("You must be an Owner to create or modify microfrontends groups."),1):(printError(error),1)}return output_manager_default.stopSpinner(),output_manager_default.success(`Microfrontends group "${groupName}" deleted ${import_chalk251.default.gray(deleteStamp())}`),0}import{existsSync as existsSync4}from"fs";import{join as join37}from"path";var import_chalk252=__toESM(require_source(),1);async function inspectGroup(client){let parsedArgs,flagsSpecification=getFlagsSpecification(inspectGroupSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error("error"in formatResult?formatResult.error:"Invalid output format"),2;let asJson=formatResult.jsonOutput,groupFlag=parsedArgs.flags["--group"],configFileNameFlag=parsedArgs.flags["--config-file-name"],{team}=await getScope(client);if(!team)return output_manager_default.error("Microfrontends are only available for teams."),1;let groupsResponse=await fetchMicrofrontendsGroups(client,team.id),{groups}=groupsResponse;if(groups.length===0)return output_manager_default.error("No microfrontends groups exist."),1;if(!groupFlag&&client.nonInteractive)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:"Missing required flag --group. Use --group and --json in non-interactive mode.",next:[{command:'vercel microfrontends inspect-group --group="<group-name-or-id>" --json',when:"to inspect a specific microfrontends group non-interactively"}]},2),2;if(!client.stdin.isTTY&&!groupFlag)return output_manager_default.error("Missing required flag --group. Use --group to specify the microfrontends group, or run interactively."),2;let selectedGroup;if(groupFlag){let found=groups.find(g=>g.group.name===groupFlag||g.group.id===groupFlag||g.group.slug===groupFlag);if(!found)return output_manager_default.error(`Microfrontends group "${groupFlag}" not found.`),1;selectedGroup=found}else{let groupId=await client.input.select({message:"Select a microfrontends group to inspect:",choices:groups.map(g=>({name:g.group.name,value:g.group.id}))});selectedGroup=groups.find(g=>g.group.id===groupId)}let localRepoContext=await getLocalRepoContext(client);output_manager_default.spinner("Fetching project metadata\u2026");let projects2=await Promise.all(selectedGroup.projects.map(project=>enrichGroupProject(client,team.id,selectedGroup,project,localRepoContext)));output_manager_default.stopSpinner();let defaultProject=projects2.find(p=>p.isDefaultApp),configuredConfigFileName=resolveConfiguredMicrofrontendsConfigFileName(configFileNameFlag);if(configFileNameFlag&&!configuredConfigFileName)return output_manager_default.error("Invalid --config-file-name. Value must end with .json or .jsonc."),2;let configFile=resolveLocalConfigFilePath(projects2,localRepoContext,configuredConfigFileName),json={group:{id:selectedGroup.group.id,slug:selectedGroup.group.slug,name:selectedGroup.group.name,fallbackEnvironment:selectedGroup.group.fallbackEnvironment??null},projectCount:projects2.length,defaultApp:defaultProject?.name??defaultProject?.id??null,configFile,config:{exists:!!selectedGroup.config,applications:Object.keys(selectedGroup.config?.applications??{})},projects:projects2};if(asJson)return client.stdout.write(`${JSON.stringify(json,null,2)}
1100
1096
  `),0;let groupTable=table([["Group",json.group.name],["ID",json.group.id],["Slug",json.group.slug],["Projects",String(json.projectCount)],["Default app",json.defaultApp??"(none)"],["Fallback environment",json.group.fallbackEnvironment??"(none)"],["Local config file",json.configFile??"(not found)"],["Config applications",json.config.applications.length>0?json.config.applications.join(", "):"(none)"]]);output_manager_default.log(""),output_manager_default.log(groupTable),output_manager_default.log(""),output_manager_default.log("Projects"),output_manager_default.log("");for(let project of projects2){let rows=[["Project",project.isDefaultApp?`${project.name} (default app)`:project.name],["Default route",project.defaultRoute??"(none)"],["Production domain",project.productionDomain??"(none)"],["Framework",project.framework??"(unknown)"],["Git org/repo",`${project.git.org??"(unknown)"}/${project.git.repo??"(unknown)"}`],["Root directory",project.git.rootDirectory??"(unknown)"]];project.packageName&&rows.push(["Package name",project.packageName]),project.inGroupConfig||rows.push(["In config",(0,import_chalk252.red)("no")]);let projectTable=table(rows);output_manager_default.log(projectTable),output_manager_default.log("")}for(let project of projects2)project.projectFetchStatus!=="ok"&&output_manager_default.warn(`Project metadata for "${project.id}" is incomplete (status: ${project.projectFetchStatus}).`);return 0}async function enrichGroupProject(client,teamId,group,groupProject,localRepoContext){let fullProject,projectFetchStatus="ok";try{let maybeProject=await getProjectByNameOrId(client,groupProject.id,teamId);maybeProject instanceof ProjectNotFound?projectFetchStatus="not_found":fullProject=maybeProject}catch{projectFetchStatus="error"}let name=groupProject.name??fullProject?.name??groupProject.id,inGroupConfig=Object.prototype.hasOwnProperty.call(group.config?.applications??{},name),rootDirectory=fullProject?.rootDirectory??null,gitRepo=fullProject?.link?.repo??null,gitOrg=fullProject?.link?.org??null,productionDomain=fullProject?.targets?.production?.alias?.[0]??fullProject?.targets?.production?.url??null,framework=fullProject?.framework??null,packageName2=await resolvePackageNameFromLocalRepo(localRepoContext,gitOrg,gitRepo,rootDirectory);return{id:groupProject.id,name,isDefaultApp:!!groupProject.microfrontends?.isDefaultApp,enabled:!!groupProject.microfrontends?.enabled,defaultRoute:groupProject.microfrontends?.defaultRoute??null,productionDomain,framework,git:{org:gitOrg,repo:gitRepo,rootDirectory},packageName:packageName2,inGroupConfig,projectFetchStatus}}async function getLocalRepoContext(client){try{let link=await getLinkedProject(client,{cwd:client.cwd});return link.status!=="linked"?{repoRoot:null,linkedProjectId:null,linkedRepoOrg:null,linkedRepoName:null}:{repoRoot:link.repoRoot??null,linkedProjectId:link.project.id,linkedRepoOrg:link.project.link?.org??null,linkedRepoName:link.project.link?.repo??null}}catch{return{repoRoot:null,linkedProjectId:null,linkedRepoOrg:null,linkedRepoName:null}}}function isProjectInLocalRepo(localRepoContext,gitOrg,gitRepo){return!localRepoContext.repoRoot||!localRepoContext.linkedRepoOrg||!localRepoContext.linkedRepoName?!1:localRepoContext.linkedRepoOrg===gitOrg&&localRepoContext.linkedRepoName===gitRepo}async function resolvePackageNameFromLocalRepo(localRepoContext,gitOrg,gitRepo,rootDirectory){if(!isProjectInLocalRepo(localRepoContext,gitOrg,gitRepo))return null;let projectDir=join37(localRepoContext.repoRoot,rootDirectory||""),packageJsonPath=join37(projectDir,"package.json"),pkg=await readJSONFile(packageJsonPath);return!pkg||pkg instanceof Error?null:typeof pkg.name=="string"?pkg.name:null}function resolveLocalConfigFilePath(projects2,localRepoContext,configuredConfigFileName){let defaultProject=projects2.find(project=>project.isDefaultApp);if(!defaultProject||!isProjectInLocalRepo(localRepoContext,defaultProject.git.org,defaultProject.git.repo))return null;let projectDir=join37(localRepoContext.repoRoot,defaultProject.git.rootDirectory||""),configuredName=configuredConfigFileName??null;if(configuredName){let configuredPath=join37(projectDir,configuredName);if(existsSync4(configuredPath))return configuredPath}let jsonPath=join37(projectDir,"microfrontends.json"),jsoncPath=join37(projectDir,"microfrontends.jsonc");return existsSync4(jsonPath)?jsonPath:existsSync4(jsoncPath)?jsoncPath:null}function resolveConfiguredMicrofrontendsConfigFileName(configured){if(!configured)return null;let normalized=configured.trim();return!normalized.endsWith(".json")&&!normalized.endsWith(".jsonc")?null:normalized.replace(/^\/+/,"")}var MicrofrontendsTelemetryClient=class extends TelemetryClient{trackCliSubcommandPull(actual){this.trackCliSubcommand({subcommand:"pull",value:actual})}trackCliSubcommandCreateGroup(actual){this.trackCliSubcommand({subcommand:"create-group",value:actual})}trackCliSubcommandAddToGroup(actual){this.trackCliSubcommand({subcommand:"add-to-group",value:actual})}trackCliSubcommandRemoveFromGroup(actual){this.trackCliSubcommand({subcommand:"remove-from-group",value:actual})}trackCliSubcommandDeleteGroup(actual){this.trackCliSubcommand({subcommand:"delete-group",value:actual})}trackCliSubcommandInspectGroup(actual){this.trackCliSubcommand({subcommand:"inspect-group",value:actual})}};var COMMAND_CONFIG53={"create-group":getCommandAliases(createGroupSubcommand),"add-to-group":getCommandAliases(addToGroupSubcommand),"remove-from-group":getCommandAliases(removeFromGroupSubcommand),"delete-group":getCommandAliases(deleteGroupSubcommand),"inspect-group":getCommandAliases(inspectGroupSubcommand),pull:getCommandAliases(pullSubcommand)};async function main28(client){let telemetry2=new MicrofrontendsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(microfrontendsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let{subcommand,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG53),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("microfrontends"),output_manager_default.print(help(microfrontendsCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:microfrontendsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"create-group":return needHelp?(telemetry2.trackCliFlagHelp("microfrontends",subcommandOriginal),printHelp(createGroupSubcommand)):(telemetry2.trackCliSubcommandCreateGroup(subcommandOriginal),createGroup(client));case"add-to-group":return needHelp?(telemetry2.trackCliFlagHelp("microfrontends",subcommandOriginal),printHelp(addToGroupSubcommand)):(telemetry2.trackCliSubcommandAddToGroup(subcommandOriginal),addToGroup(client));case"remove-from-group":return needHelp?(telemetry2.trackCliFlagHelp("microfrontends",subcommandOriginal),printHelp(removeFromGroupSubcommand)):(telemetry2.trackCliSubcommandRemoveFromGroup(subcommandOriginal),removeFromGroup(client));case"delete-group":return needHelp?(telemetry2.trackCliFlagHelp("microfrontends",subcommandOriginal),printHelp(deleteGroupSubcommand)):(telemetry2.trackCliSubcommandDeleteGroup(subcommandOriginal),deleteGroup(client));case"inspect-group":return needHelp?(telemetry2.trackCliFlagHelp("microfrontends",subcommandOriginal),printHelp(inspectGroupSubcommand)):(telemetry2.trackCliSubcommandInspectGroup(subcommandOriginal),inspectGroup(client));case"pull":return needHelp?(telemetry2.trackCliFlagHelp("microfrontends",subcommandOriginal),printHelp(pullSubcommand)):(telemetry2.trackCliSubcommandPull(subcommandOriginal),pull2(client));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG53)),output_manager_default.print(help(microfrontendsCommand,{columns:client.stderr.columns})),2}}var import_open17=__toESM(require_open(),1);var OpenTelemetryClient=class extends TelemetryClient{trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliCommandOpen(value){this.trackCliCommand({command:"open",value})}};async function openCommandHandler(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(openCommand.options),telemetry2=new OpenTelemetryClient({opts:{store:client.telemetryEventStore}});try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("open"),output_manager_default.print(help(openCommand,{columns:client.stderr.columns})),0;let autoConfirm=!!parsedArgs.flags["--yes"],link=await ensureLink("open",client,client.cwd,{autoConfirm});if(typeof link=="number")return link;if(link.status!=="linked"||!link.org||!link.project)return client.nonInteractive||(output_manager_default.error("This command requires a linked project. Please run:"),output_manager_default.print(` vercel link
@@ -1160,7 +1156,7 @@ ${tablePrint}
1160
1156
  `),result.pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["_","--next","-N","--search"]),projectName=parsedArgs.args[0]?` ${quoteArg(parsedArgs.args[0])}`:"",search3=parsedArgs.flags["--search"],searchFlag=search3?` --search ${quoteArg(String(search3))}`:"",nextCmd=`${packageName} project members${projectName}${flags}${searchFlag} --next ${result.pagination.next}`;output_manager_default.log(`To display the next page run ${cmd(nextCmd)}`)}return 0}var import_chalk261=__toESM(require_source(),1);async function accessGroups(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(accessGroupsSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1)return output_manager_default.error("Invalid number of arguments. Usage: `vercel project access-groups [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be a number between 1 and 100."),2;let result;try{let project=await getProjectByCwdOrLink({client,commandName:"project access-groups",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0}),query=new URLSearchParams;query.set("projectId",project.id),parsedArgs.flags["--search"]&&query.set("search",String(parsedArgs.flags["--search"])),typeof limit=="number"&&query.set("limit",String(limit)),typeof parsedArgs.flags["--next"]=="number"&&query.set("next",String(parsedArgs.flags["--next"])),result=await client.fetch(`/v1/access-groups?${query.toString()}`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"access-groups"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
1161
1157
  `),0;let rows=[["id","Name","Role"].map(str=>(0,import_chalk261.gray)(str)),...(result.accessGroups||[]).map(group=>[group.id,group.name,group.role||""])];return client.stderr.write(`${table(rows,{hsep:3})}
1162
1158
  `),0}var import_chalk262=__toESM(require_source(),1),import_ms28=__toESM(require_ms(),1);var ProjectRenameTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentNewName(newName){newName&&this.trackCliArgument({arg:"new-name",value:this.redactedValue})}};async function rename(client,argv){let telemetryClient=new ProjectRenameTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(renameSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs;if(args.length!==2)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk262.default.cyan(`${getCommandName("project rename <name> <new-name>")}`)}`),2;let[projectNameOrId,newName]=args;telemetryClient.trackCliArgumentName(projectNameOrId),telemetryClient.trackCliArgumentNewName(newName);let project=await getProjectByNameOrId(client,projectNameOrId);if(project instanceof ProjectNotFound)return output_manager_default.error("No such project exists"),1;let start=Date.now(),renamedProject;try{renamedProject=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{method:"PATCH",body:{name:newName}})}catch(err){if(isAPIError(err)&&err.status===409)return output_manager_default.error(`A project named "${newName}" already exists`),1;if(isAPIError(err)&&err.status===403)return output_manager_default.error(err.message),1;throw err}let elapsed2=(0,import_ms28.default)(Date.now()-start);return output_manager_default.log(`${import_chalk262.default.cyan("Success!")} Project ${import_chalk262.default.bold(project.name)} renamed to ${import_chalk262.default.bold(renamedProject.name)} ${import_chalk262.default.gray(`[${elapsed2}]`)}`),0}var import_chalk263=__toESM(require_source(),1);var ProjectUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionFramework(framework){framework&&this.trackCliOption({option:"framework",value:this.redactedValue})}trackCliOptionBuildCommand(value){this.trackSettingOption("build-command",value)}trackCliOptionDevCommand(value){this.trackSettingOption("dev-command",value)}trackCliOptionInstallCommand(value){this.trackSettingOption("install-command",value)}trackCliOptionOutputDirectory(value){this.trackSettingOption("output-directory",value)}trackCliOptionRootDirectory(value){this.trackSettingOption("root-directory",value)}trackCliOptionAutoDetect(value){value?.length&&this.trackCliOption({option:"auto-detect",value:this.redactedValue})}trackCliOptionSandboxRegion(value){this.trackSandboxRegionOption("sandbox-region",value)}trackCliOptionSandboxFailoverRegions(value){this.trackSandboxRegionOption("sandbox-failover-regions",value)}trackSandboxRegionOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackSettingOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackCliOptionFluidCompute(value){this.trackChoiceOption("fluid-compute",value,["on","off"])}trackCliOptionFunctionCpu(value){this.trackChoiceOption("function-cpu",value,["standard_legacy","standard","performance","performance_xl"])}trackCliOptionBuildMachine(value){this.trackChoiceOption("build-machine",value,["basic","standard","enhanced","turbo","elastic"])}trackCliOptionElasticConcurrency(value){this.trackChoiceOption("elastic-concurrency",value,["on","off"])}trackCliOptionNodeVersion(value){this.trackChoiceOption("node-version",value,["24.x","22.x","20.x","18.x","16.x","14.x","12.x","10.x"])}trackChoiceOption(option,value,allowed){value!==void 0&&this.trackCliOption({option,value:allowed.includes(value)?value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_frameworks2=__toESM(require_frameworks(),1);var OTHER_FRAMEWORK_SLUG="other",MAX_SETTING_LENGTH=256,CONTROL_CHARACTERS=/[\u0000-\u001f\u007f]/,frameworkSlugs=import_frameworks2.frameworkList.map(framework=>framework.slug??OTHER_FRAMEWORK_SLUG),buildSettingDefinitions=[{key:"buildCommand",flag:"--build-command",autoDetect:"build-command",label:"Build Command"},{key:"devCommand",flag:"--dev-command",autoDetect:"dev-command",label:"Dev Command"},{key:"installCommand",flag:"--install-command",autoDetect:"install-command",label:"Install Command"},{key:"outputDirectory",flag:"--output-directory",autoDetect:"output-directory",label:"Output Directory"},{key:"rootDirectory",flag:"--root-directory",autoDetect:"root-directory",label:"Root Directory"}],settingOrder=["framework",...buildSettingDefinitions.map(setting=>setting.key),"sandboxRegion","sandboxFailoverRegions"],autoDetectSettings=buildSettingDefinitions.map(setting=>setting.autoDetect),settingLabels={framework:"Framework",...Object.fromEntries(buildSettingDefinitions.map(setting=>[setting.key,setting.label])),sandboxRegion:"Sandbox Region",sandboxFailoverRegions:"Failover"};function isSandboxSettingKey(key){return key==="sandboxRegion"||key==="sandboxFailoverRegions"}function resolveFramework(input){let slug=input.trim().toLowerCase();return import_frameworks2.frameworkList.find(framework=>(framework.slug??OTHER_FRAMEWORK_SLUG)===slug)}function formatFramework(slug){let framework=import_frameworks2.frameworkList.find(item=>item.slug===slug);return framework?`${framework.name} (${framework.slug??OTHER_FRAMEWORK_SLUG})`:slug??OTHER_FRAMEWORK_SLUG}function formatSettingValue(key,value){return key==="sandboxRegion"?typeof value=="string"?value:"Auto":key==="sandboxFailoverRegions"?formatSandboxRegionList(Array.isArray(value)?value:[]):key==="framework"?formatFramework(typeof value=="string"?value:null):value===null?"Auto":value===""?'""':String(value)}function getCurrentSetting(project,key){return key==="sandboxRegion"?project.sandbox?.region??null:key==="sandboxFailoverRegions"?project.sandbox?.failoverRegions??null:project[key]??null}function isSameSettingValue(a,b){if(Array.isArray(a)||Array.isArray(b)){let left=Array.isArray(a)?a:[],right=Array.isArray(b)?b:[];return left.length===right.length&&left.every((value,index)=>value===right[index])}return a===b}function hasSetting(settings,key){return Object.prototype.hasOwnProperty.call(settings,key)}function validateSettingValue(definition,value){if(value.length>MAX_SETTING_LENGTH)return`${definition.label} must be ${MAX_SETTING_LENGTH} characters or fewer.`;if(CONTROL_CHARACTERS.test(value))return`${definition.label} can't contain control characters.`}function parseAutoDetectSettings(inputs){return inputs.flatMap(input=>input.split(",")).map(input=>input.trim())}var NODE_VERSIONS=["24.x","22.x","20.x","18.x","16.x","14.x","12.x","10.x"],FUNCTION_CPU_TIERS=["standard_legacy","standard","performance","performance_xl"],BUILD_MACHINE_TYPES=["basic","standard","enhanced","turbo","elastic"];function parseOnOff(flag,raw){return raw==="on"||raw==="off"?{ok:!0,value:raw==="on"}:{ok:!1,message:`${flag} must be "on" or "off".`}}function parseEnumValue(label,raw,allowed){return allowed.includes(raw)?{ok:!0,value:raw}:{ok:!1,message:`${label} must be one of: ${allowed.join(", ")}.`}}function displayOnOff(value){return value===!0?"on":value===!1?"off":"Auto"}function displayValue(value){return value==null?"Auto":String(value)}function parseAdvanced(definition,raw){return definition.kind==="toggle"?parseOnOff(definition.flag,raw):parseEnumValue(definition.label,raw,definition.values)}function readAdvanced(definition,project){let fields=project;switch(definition.target){case"resourceConfig":return definition.field==="buildMachineType"&&fields.resourceConfig?.buildMachineSelection==="elastic"?"elastic":fields.resourceConfig?.[definition.field];case"project":return project[definition.field]}}function displayAdvanced(definition,value){return definition.kind==="toggle"?displayOnOff(value):displayValue(value)}var advancedSettingDefinitions=[{key:"fluid",flag:"--fluid-compute",label:"Fluid Compute",kind:"toggle",target:"resourceConfig",field:"fluid"},{key:"functionDefaultMemoryType",flag:"--function-cpu",label:"Function CPU",kind:"enum",values:FUNCTION_CPU_TIERS,target:"resourceConfig",field:"functionDefaultMemoryType",requiresPaidPlan:()=>!0,hasCostImpact:()=>!0},{key:"buildMachineType",flag:"--build-machine",label:"Build Machine",kind:"enum",values:BUILD_MACHINE_TYPES,target:"resourceConfig",field:"buildMachineType",requiresPaidPlan:()=>!0,hasCostImpact:()=>!0},{key:"elasticConcurrencyEnabled",flag:"--elastic-concurrency",label:"Elastic Concurrency",kind:"toggle",target:"resourceConfig",field:"elasticConcurrencyEnabled",requiresPaidPlan:value=>value===!0,hasCostImpact:value=>value===!0},{key:"nodeVersion",flag:"--node-version",label:"Node.js Version",kind:"enum",values:NODE_VERSIONS,target:"project",field:"nodeVersion"}];function ensureResourceConfig(body){return body.resourceConfig??={},body.resourceConfig}function applyAdvanced(definition,body,value){switch(definition.target){case"resourceConfig":ensureResourceConfig(body)[definition.field]=value;break;case"project":body[definition.field]=value;break}}function computeSettingsChanges(project,requestedSettings,providedAdvanced){let previousSettings={},changedSettings=[],body={},mergedSandbox;if(hasSetting(requestedSettings,"sandboxRegion")||hasSetting(requestedSettings,"sandboxFailoverRegions")){if(mergedSandbox={...project.sandbox},hasSetting(requestedSettings,"sandboxRegion")){let region=requestedSettings.sandboxRegion;region==null?delete mergedSandbox.region:mergedSandbox.region=region}hasSetting(requestedSettings,"sandboxFailoverRegions")&&(mergedSandbox.failoverRegions=requestedSettings.sandboxFailoverRegions??[])}for(let key of settingOrder){if(!hasSetting(requestedSettings,key))continue;let previous=getCurrentSetting(project,key),next=requestedSettings[key]??null;Object.assign(previousSettings,{[key]:previous}),isSameSettingValue(previous,next)||(changedSettings.push(key),isSandboxSettingKey(key)||(body[key]=next))}mergedSandbox&&(changedSettings.includes("sandboxRegion")||changedSettings.includes("sandboxFailoverRegions"))&&(body.sandbox=mergedSandbox);let advancedRows=[];for(let{definition,value}of providedAdvanced){let previous=readAdvanced(definition,project),changed=previous!==value;advancedRows.push({key:definition.key,label:definition.label,previous:displayAdvanced(definition,previous),next:displayAdvanced(definition,value),changed}),changed&&(changedSettings.push(definition.key),applyAdvanced(definition,body,value))}return{previousSettings,changedSettings,body,advancedRows}}async function patchProjectSettings(client,project,body){return client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{method:"PATCH",accountId:project.accountId,body})}function getAdvancedResultValue(project,row){let definition=advancedSettingDefinitions.find(candidate=>candidate.key===row.key);return definition?displayAdvanced(definition,readAdvanced(definition,project)):row.next}function printChangePreview({project,previousSettings,requestedSettings,changedSettings,advancedRows}){printAlignedLabel("Project",project.name);for(let key of settingOrder){if(!hasSetting(requestedSettings,key)||!changedSettings.includes(key))continue;let previous=formatSettingValue(key,previousSettings[key]??null),next=formatSettingValue(key,requestedSettings[key]??null);printAlignedLabel(settingLabels[key],`${previous} \u2192 ${next}`)}for(let row of advancedRows)row.changed&&printAlignedLabel(row.label,`${row.previous} \u2192 ${row.next}`)}function writeUpdateResult({changedSettings,project,previousSettings,requestedSettings,advancedRows,asJson,client}){let changed=changedSettings.length>0;if(asJson){let settings={};for(let key of settingOrder)hasSetting(requestedSettings,key)&&(settings[key]=getCurrentSetting(project,key));for(let row of advancedRows){let definition=advancedSettingDefinitions.find(candidate=>candidate.key===row.key);definition&&(settings[row.key]=readAdvanced(definition,project)??null)}client.stdout.write(`${JSON.stringify({changed,changedSettings,projectId:project.id,projectName:project.name,settings},null,2)}
1163
- `);return}printAlignedLabel(changed?"Updated":"Unchanged","Project Settings",{gutter:"\u2713"}),printAlignedLabel("Project",project.name);for(let key of settingOrder){if(!hasSetting(requestedSettings,key))continue;let previous=previousSettings[key]??null,next=getCurrentSetting(project,key),value=changedSettings.includes(key)?`${formatSettingValue(key,previous)} \u2192 ${formatSettingValue(key,next)}`:formatSettingValue(key,next);printAlignedLabel(settingLabels[key],value)}for(let row of advancedRows){let result=getAdvancedResultValue(project,row),value=row.changed?`${row.previous} \u2192 ${result}`:result;printAlignedLabel(row.label,value)}}function getUpdateCommand2(framework="<slug>"){return`project update <name> --framework ${framework}`}function buildUpdateRetryCommand(client,{interactive,withYes}){let args=stripSensitiveAuthArgs(client.argv.slice(2)),nextArgs=[];for(let index=0;index<args.length;index++){let arg=args[index];if(!(arg==="--yes"||arg==="-y")){if(interactive&&(arg==="--non-interactive"||arg.startsWith("--non-interactive="))){arg==="--non-interactive"&&(args[index+1]==="true"||args[index+1]==="false")&&index++;continue}nextArgs.push(arg)}}return withYes&&nextArgs.push("--yes"),getCommandNamePlain(nextArgs.map(quoteArg).join(" "))}function printUsageError(client,message,exitCode2,reason,suggestedCommand=getUpdateCommand2()){return outputAgentError(client,{status:"error",reason,message,next:[{command:buildCommandWithGlobalFlags(client.argv,suggestedCommand),when:"Update project settings"}]},exitCode2),output_manager_default.error(message),exitCode2}function printPlanError(client,message,teamOwned){let nextCommand=teamOwned?"buy pro":"teams switch";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message,userActionRequired:!0,next:[{command:buildCommandWithGlobalFlags(client.argv,nextCommand,void 0,{excludeFlags:["--non-interactive","--yes"]}),when:teamOwned?"Upgrade this team interactively":"Switch to a Pro or Enterprise team"}]},1),output_manager_default.error(message),output_manager_default.log(teamOwned?`Upgrade with ${getCommandName("buy pro")}.`:`Switch teams with ${getCommandName("teams switch")}.`),1}function printConfirmationRequiredError(client,hasCostImpact){let nextCommand=buildUpdateRetryCommand(client,{interactive:hasCostImpact,withYes:!hasCostImpact});return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:hasCostImpact?AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:hasCostImpact?"These project settings may affect charges and require interactive confirmation.":"Updating project settings requires confirmation. Re-run with --yes to apply the changes.",userActionRequired:hasCostImpact,next:[{command:nextCommand,when:hasCostImpact?"Review and confirm the charge-sensitive settings in a terminal":"Apply the requested settings without prompting"}]},1),output_manager_default.error(hasCostImpact?"Confirmation required. These settings may affect charges and must be confirmed in an interactive terminal.":"Confirmation required. Re-run with --yes or in an interactive terminal."),1}function getSandboxValidationError(project,requestedSettings){if(!hasSetting(requestedSettings,"sandboxRegion")&&!hasSetting(requestedSettings,"sandboxFailoverRegions"))return;let mergedSandbox={...project.sandbox};if(hasSetting(requestedSettings,"sandboxRegion")){let region=requestedSettings.sandboxRegion;region==null?delete mergedSandbox.region:mergedSandbox.region=region}return hasSetting(requestedSettings,"sandboxFailoverRegions")&&(mergedSandbox.failoverRegions=requestedSettings.sandboxFailoverRegions??[]),validateSandboxConfig(mergedSandbox)}async function refreshProjectForNestedUpdate(client,project,body){return body.resourceConfig===void 0&&body.sandbox===void 0?project:client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId})}async function update6(client,argv){let telemetry2=new ProjectUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(updateSubcommand8.options))}catch(error){return outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags}=parsedArgs,[projectNameOrId]=args,frameworkInput=flags["--framework"],autoDetectInputs=flags["--auto-detect"]??[];if(telemetry2.trackCliArgumentName(projectNameOrId),telemetry2.trackCliOptionFramework(frameworkInput),telemetry2.trackCliOptionBuildCommand(flags["--build-command"]),telemetry2.trackCliOptionDevCommand(flags["--dev-command"]),telemetry2.trackCliOptionInstallCommand(flags["--install-command"]),telemetry2.trackCliOptionOutputDirectory(flags["--output-directory"]),telemetry2.trackCliOptionRootDirectory(flags["--root-directory"]),telemetry2.trackCliOptionAutoDetect(flags["--auto-detect"]),telemetry2.trackCliOptionSandboxRegion(flags["--sandbox-region"]),telemetry2.trackCliOptionSandboxFailoverRegions(flags["--sandbox-failover-regions"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),telemetry2.trackCliFlagYes(flags["--yes"]),telemetry2.trackCliOptionFluidCompute(flags["--fluid-compute"]),telemetry2.trackCliOptionFunctionCpu(flags["--function-cpu"]),telemetry2.trackCliOptionBuildMachine(flags["--build-machine"]),telemetry2.trackCliOptionElasticConcurrency(flags["--elastic-concurrency"]),telemetry2.trackCliOptionNodeVersion(flags["--node-version"]),args.length>1)return printUsageError(client,`Invalid number of arguments. Usage: ${getCommandNamePlain("project update [name] [options]")}`,2,"invalid_arguments");let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return printUsageError(client,formatResult.error,2,"invalid_arguments");let requestedSettings={};if(frameworkInput!==void 0){let framework=resolveFramework(frameworkInput);if(!framework){let normalizedInput=frameworkInput.trim().toLowerCase(),suggestion=normalizedInput?did_you_mean_default(normalizedInput,frameworkSlugs,.7):void 0,message=suggestion?`Unsupported framework preset ${JSON.stringify(frameworkInput)}. Did you mean ${JSON.stringify(suggestion)}?`:`Unsupported framework preset ${JSON.stringify(frameworkInput)}. Use a framework slug such as "nextjs", or "other" to clear the preset.`;return printUsageError(client,message,2,"invalid_arguments",getUpdateCommand2(suggestion))}requestedSettings.framework=framework.slug}let requestedAutoDetect=parseAutoDetectSettings(autoDetectInputs),autoDetectSet=new Set;for(let setting of requestedAutoDetect){if(!autoDetectSettings.includes(setting)){let suggestion=setting?did_you_mean_default(setting,autoDetectSettings,.7):void 0,message=suggestion?`Unknown auto-detect setting ${JSON.stringify(setting)}. Did you mean ${JSON.stringify(suggestion)}?`:`Unknown auto-detect setting ${JSON.stringify(setting)}. Accepted settings: ${autoDetectSettings.join(", ")}.`;return printUsageError(client,message,2,"invalid_arguments",`project update <name> --auto-detect ${suggestion??"<setting>"}`)}autoDetectSet.add(setting)}for(let definition of buildSettingDefinitions){let value=flags[definition.flag];if(value!==void 0&&autoDetectSet.has(definition.autoDetect))return printUsageError(client,`Can't use "${definition.flag}" and "--auto-detect ${definition.autoDetect}" together. Choose one.`,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);if(value!==void 0){let validationError=validateSettingValue(definition,value);if(validationError)return printUsageError(client,validationError,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);requestedSettings[definition.key]=value}else autoDetectSet.has(definition.autoDetect)&&(requestedSettings[definition.key]=null)}let sandboxRegionInput=flags["--sandbox-region"];if(sandboxRegionInput!==void 0){let normalizedRegion=sandboxRegionInput.trim().toLowerCase();requestedSettings.sandboxRegion=normalizedRegion===""?null:normalizedRegion}let sandboxFailoverInput=flags["--sandbox-failover-regions"];sandboxFailoverInput!==void 0&&(requestedSettings.sandboxFailoverRegions=parseSandboxRegionList(sandboxFailoverInput));let providedAdvanced=[];for(let definition of advancedSettingDefinitions){let raw=flags[definition.flag];if(raw===void 0)continue;let result=parseAdvanced(definition,raw);if(!result.ok)return printUsageError(client,result.message,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);providedAdvanced.push({definition,value:result.value})}if(settingOrder.every(key=>!hasSetting(requestedSettings,key))&&providedAdvanced.length===0)return printUsageError(client,'Provide at least one setting option. Run "vercel project update --help" to see every available option.',2,"missing_arguments");let project;try{project=await getProjectByCwdOrLink({client,commandName:"project update",projectNameOrId,forReadOnlyCommand:!0})}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let sandboxError=getSandboxValidationError(project,requestedSettings);if(sandboxError)return printUsageError(client,sandboxError,1,"invalid_arguments");let changes=computeSettingsChanges(project,requestedSettings,providedAdvanced),changeCount=changes.changedSettings.length,gatedProvided=providedAdvanced.filter(({definition,value})=>changes.changedSettings.includes(definition.key)&&definition.requiresPaidPlan?.(value));if(gatedProvided.length>0){let team,user,teamOwned=project.accountId.startsWith("team_");try{projectNameOrId?{team,user}=await getScope(client):{team,user}=await getScope(client,{resolveLocalScope:!0}),teamOwned&&team?.id!==project.accountId&&(team=await getTeamByIdOrSlug(client,project.accountId))}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let plan=(teamOwned?team?.billing:user?.billing)?.plan;if(!(plan==="pro"||plan==="enterprise")){let phrases=gatedProvided.map(({definition,value})=>`${definition.label} "${displayAdvanced(definition,value)}"`),list30=phrases.length===1?phrases[0]:`${phrases.slice(0,-1).join(", ")} and ${phrases[phrases.length-1]}`,verb=phrases.length>1?"require":"requires";return printPlanError(client,`${list30} ${verb} a Pro or Enterprise plan.`,teamOwned)}}let hasCostImpact=providedAdvanced.some(({definition,value})=>changes.changedSettings.includes(definition.key)&&definition.hasCostImpact?.(value));if(changeCount>0&&!(!!flags["--yes"]&&!hasCostImpact)){if(!canPrompt(client))return printConfirmationRequiredError(client,hasCostImpact);if(printChangePreview({project,previousSettings:changes.previousSettings,requestedSettings,changedSettings:changes.changedSettings,advancedRows:changes.advancedRows}),hasCostImpact&&printAlignedLabel("Charges","These settings may affect your Vercel charges.",{gutter:"!"}),!await client.input.confirm(`Update ${changeCount} ${changeCount===1?"setting":"settings"} for ${import_chalk263.default.bold(project.name)}?`,!1))return output_manager_default.log("Canceled"),0}if(changeCount>0){try{project=await refreshProjectForNestedUpdate(client,project,changes.body)}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let refreshedSandboxError=getSandboxValidationError(project,requestedSettings);if(refreshedSandboxError)return printUsageError(client,refreshedSandboxError,1,"invalid_arguments");changes=computeSettingsChanges(project,requestedSettings,providedAdvanced)}let updatedProject=project;if(changes.changedSettings.length>0)try{updatedProject=await patchProjectSettings(client,project,changes.body)}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}return writeUpdateResult({changedSettings:changes.changedSettings,project:updatedProject,previousSettings:changes.previousSettings,requestedSettings,advancedRows:changes.advancedRows,asJson:formatResult.jsonOutput||shouldEmitNonInteractiveCommandError(client),client}),0}var import_chalk264=__toESM(require_source(),1),import_ms29=__toESM(require_ms(),1);var ProjectRmTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}};var e=encodeURIComponent;async function rm9(client,argv){let telemetryClient=new ProjectRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand13.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk264.default.cyan(`${getCommandName("project rm <name>")}`)}`),2;let name=args[0];telemetryClient.trackCliArgumentName(name);let start=Date.now();if(!await readConfirmation3(client,name))return output_manager_default.log("User abort"),0;try{await client.fetch(`/v2/projects/${e(name)}`,{method:"DELETE"})}catch(err){if(isAPIError(err)&&err.status===404)return output_manager_default.error("No such project exists"),1;if(isAPIError(err)&&err.status===403)return output_manager_default.error(err.message),1}let elapsed2=(0,import_ms29.default)(Date.now()-start);return output_manager_default.log(`${import_chalk264.default.cyan("Success!")} Project ${import_chalk264.default.bold(name)} removed ${import_chalk264.default.gray(`[${elapsed2}]`)}`),0}async function readConfirmation3(client,projectName){return output_manager_default.print(prependEmoji(`The project ${import_chalk264.default.bold(projectName)} will be removed permanently.
1159
+ `);return}printAlignedLabel(changed?"Updated":"Unchanged","Project Settings",{gutter:"\u2713"}),printAlignedLabel("Project",project.name);for(let key of settingOrder){if(!hasSetting(requestedSettings,key))continue;let previous=previousSettings[key]??null,next=getCurrentSetting(project,key),value=changedSettings.includes(key)?`${formatSettingValue(key,previous)} \u2192 ${formatSettingValue(key,next)}`:formatSettingValue(key,next);printAlignedLabel(settingLabels[key],value)}for(let row of advancedRows){let result=getAdvancedResultValue(project,row),value=row.changed?`${row.previous} \u2192 ${result}`:result;printAlignedLabel(row.label,value)}}function getUpdateCommand2(framework="<slug>"){return`project update <name> --framework ${framework}`}function buildUpdateRetryCommand(client,{interactive,withYes}){let args=stripSensitiveAuthArgs(client.argv.slice(2)),nextArgs=[];for(let index=0;index<args.length;index++){let arg2=args[index];if(!(arg2==="--yes"||arg2==="-y")){if(interactive&&(arg2==="--non-interactive"||arg2.startsWith("--non-interactive="))){arg2==="--non-interactive"&&(args[index+1]==="true"||args[index+1]==="false")&&index++;continue}nextArgs.push(arg2)}}return withYes&&nextArgs.push("--yes"),getCommandNamePlain(nextArgs.map(quoteArg).join(" "))}function printUsageError(client,message,exitCode2,reason,suggestedCommand=getUpdateCommand2()){return outputAgentError(client,{status:"error",reason,message,next:[{command:buildCommandWithGlobalFlags(client.argv,suggestedCommand),when:"Update project settings"}]},exitCode2),output_manager_default.error(message),exitCode2}function printPlanError(client,message,teamOwned){let nextCommand=teamOwned?"buy pro":"teams switch";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message,userActionRequired:!0,next:[{command:buildCommandWithGlobalFlags(client.argv,nextCommand,void 0,{excludeFlags:["--non-interactive","--yes"]}),when:teamOwned?"Upgrade this team interactively":"Switch to a Pro or Enterprise team"}]},1),output_manager_default.error(message),output_manager_default.log(teamOwned?`Upgrade with ${getCommandName("buy pro")}.`:`Switch teams with ${getCommandName("teams switch")}.`),1}function printConfirmationRequiredError(client,hasCostImpact){let nextCommand=buildUpdateRetryCommand(client,{interactive:hasCostImpact,withYes:!hasCostImpact});return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:hasCostImpact?AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:hasCostImpact?"These project settings may affect charges and require interactive confirmation.":"Updating project settings requires confirmation. Re-run with --yes to apply the changes.",userActionRequired:hasCostImpact,next:[{command:nextCommand,when:hasCostImpact?"Review and confirm the charge-sensitive settings in a terminal":"Apply the requested settings without prompting"}]},1),output_manager_default.error(hasCostImpact?"Confirmation required. These settings may affect charges and must be confirmed in an interactive terminal.":"Confirmation required. Re-run with --yes or in an interactive terminal."),1}function getSandboxValidationError(project,requestedSettings){if(!hasSetting(requestedSettings,"sandboxRegion")&&!hasSetting(requestedSettings,"sandboxFailoverRegions"))return;let mergedSandbox={...project.sandbox};if(hasSetting(requestedSettings,"sandboxRegion")){let region=requestedSettings.sandboxRegion;region==null?delete mergedSandbox.region:mergedSandbox.region=region}return hasSetting(requestedSettings,"sandboxFailoverRegions")&&(mergedSandbox.failoverRegions=requestedSettings.sandboxFailoverRegions??[]),validateSandboxConfig(mergedSandbox)}async function refreshProjectForNestedUpdate(client,project,body){return body.resourceConfig===void 0&&body.sandbox===void 0?project:client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId})}async function update6(client,argv){let telemetry2=new ProjectUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(updateSubcommand8.options))}catch(error){return outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags}=parsedArgs,[projectNameOrId]=args,frameworkInput=flags["--framework"],autoDetectInputs=flags["--auto-detect"]??[];if(telemetry2.trackCliArgumentName(projectNameOrId),telemetry2.trackCliOptionFramework(frameworkInput),telemetry2.trackCliOptionBuildCommand(flags["--build-command"]),telemetry2.trackCliOptionDevCommand(flags["--dev-command"]),telemetry2.trackCliOptionInstallCommand(flags["--install-command"]),telemetry2.trackCliOptionOutputDirectory(flags["--output-directory"]),telemetry2.trackCliOptionRootDirectory(flags["--root-directory"]),telemetry2.trackCliOptionAutoDetect(flags["--auto-detect"]),telemetry2.trackCliOptionSandboxRegion(flags["--sandbox-region"]),telemetry2.trackCliOptionSandboxFailoverRegions(flags["--sandbox-failover-regions"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),telemetry2.trackCliFlagYes(flags["--yes"]),telemetry2.trackCliOptionFluidCompute(flags["--fluid-compute"]),telemetry2.trackCliOptionFunctionCpu(flags["--function-cpu"]),telemetry2.trackCliOptionBuildMachine(flags["--build-machine"]),telemetry2.trackCliOptionElasticConcurrency(flags["--elastic-concurrency"]),telemetry2.trackCliOptionNodeVersion(flags["--node-version"]),args.length>1)return printUsageError(client,`Invalid number of arguments. Usage: ${getCommandNamePlain("project update [name] [options]")}`,2,"invalid_arguments");let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return printUsageError(client,formatResult.error,2,"invalid_arguments");let requestedSettings={};if(frameworkInput!==void 0){let framework=resolveFramework(frameworkInput);if(!framework){let normalizedInput=frameworkInput.trim().toLowerCase(),suggestion=normalizedInput?did_you_mean_default(normalizedInput,frameworkSlugs,.7):void 0,message=suggestion?`Unsupported framework preset ${JSON.stringify(frameworkInput)}. Did you mean ${JSON.stringify(suggestion)}?`:`Unsupported framework preset ${JSON.stringify(frameworkInput)}. Use a framework slug such as "nextjs", or "other" to clear the preset.`;return printUsageError(client,message,2,"invalid_arguments",getUpdateCommand2(suggestion))}requestedSettings.framework=framework.slug}let requestedAutoDetect=parseAutoDetectSettings(autoDetectInputs),autoDetectSet=new Set;for(let setting of requestedAutoDetect){if(!autoDetectSettings.includes(setting)){let suggestion=setting?did_you_mean_default(setting,autoDetectSettings,.7):void 0,message=suggestion?`Unknown auto-detect setting ${JSON.stringify(setting)}. Did you mean ${JSON.stringify(suggestion)}?`:`Unknown auto-detect setting ${JSON.stringify(setting)}. Accepted settings: ${autoDetectSettings.join(", ")}.`;return printUsageError(client,message,2,"invalid_arguments",`project update <name> --auto-detect ${suggestion??"<setting>"}`)}autoDetectSet.add(setting)}for(let definition of buildSettingDefinitions){let value=flags[definition.flag];if(value!==void 0&&autoDetectSet.has(definition.autoDetect))return printUsageError(client,`Can't use "${definition.flag}" and "--auto-detect ${definition.autoDetect}" together. Choose one.`,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);if(value!==void 0){let validationError=validateSettingValue(definition,value);if(validationError)return printUsageError(client,validationError,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);requestedSettings[definition.key]=value}else autoDetectSet.has(definition.autoDetect)&&(requestedSettings[definition.key]=null)}let sandboxRegionInput=flags["--sandbox-region"];if(sandboxRegionInput!==void 0){let normalizedRegion=sandboxRegionInput.trim().toLowerCase();requestedSettings.sandboxRegion=normalizedRegion===""?null:normalizedRegion}let sandboxFailoverInput=flags["--sandbox-failover-regions"];sandboxFailoverInput!==void 0&&(requestedSettings.sandboxFailoverRegions=parseSandboxRegionList(sandboxFailoverInput));let providedAdvanced=[];for(let definition of advancedSettingDefinitions){let raw=flags[definition.flag];if(raw===void 0)continue;let result=parseAdvanced(definition,raw);if(!result.ok)return printUsageError(client,result.message,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);providedAdvanced.push({definition,value:result.value})}if(settingOrder.every(key=>!hasSetting(requestedSettings,key))&&providedAdvanced.length===0)return printUsageError(client,'Provide at least one setting option. Run "vercel project update --help" to see every available option.',2,"missing_arguments");let project;try{project=await getProjectByCwdOrLink({client,commandName:"project update",projectNameOrId,forReadOnlyCommand:!0})}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let sandboxError=getSandboxValidationError(project,requestedSettings);if(sandboxError)return printUsageError(client,sandboxError,1,"invalid_arguments");let changes=computeSettingsChanges(project,requestedSettings,providedAdvanced),changeCount=changes.changedSettings.length,gatedProvided=providedAdvanced.filter(({definition,value})=>changes.changedSettings.includes(definition.key)&&definition.requiresPaidPlan?.(value));if(gatedProvided.length>0){let team,user,teamOwned=project.accountId.startsWith("team_");try{projectNameOrId?{team,user}=await getScope(client):{team,user}=await getScope(client,{resolveLocalScope:!0}),teamOwned&&team?.id!==project.accountId&&(team=await getTeamByIdOrSlug(client,project.accountId))}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let plan=(teamOwned?team?.billing:user?.billing)?.plan;if(!(plan==="pro"||plan==="enterprise")){let phrases=gatedProvided.map(({definition,value})=>`${definition.label} "${displayAdvanced(definition,value)}"`),list30=phrases.length===1?phrases[0]:`${phrases.slice(0,-1).join(", ")} and ${phrases[phrases.length-1]}`,verb=phrases.length>1?"require":"requires";return printPlanError(client,`${list30} ${verb} a Pro or Enterprise plan.`,teamOwned)}}let hasCostImpact=providedAdvanced.some(({definition,value})=>changes.changedSettings.includes(definition.key)&&definition.hasCostImpact?.(value));if(changeCount>0&&!(!!flags["--yes"]&&!hasCostImpact)){if(!canPrompt(client))return printConfirmationRequiredError(client,hasCostImpact);if(printChangePreview({project,previousSettings:changes.previousSettings,requestedSettings,changedSettings:changes.changedSettings,advancedRows:changes.advancedRows}),hasCostImpact&&printAlignedLabel("Charges","These settings may affect your Vercel charges.",{gutter:"!"}),!await client.input.confirm(`Update ${changeCount} ${changeCount===1?"setting":"settings"} for ${import_chalk263.default.bold(project.name)}?`,!1))return output_manager_default.log("Canceled"),0}if(changeCount>0){try{project=await refreshProjectForNestedUpdate(client,project,changes.body)}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let refreshedSandboxError=getSandboxValidationError(project,requestedSettings);if(refreshedSandboxError)return printUsageError(client,refreshedSandboxError,1,"invalid_arguments");changes=computeSettingsChanges(project,requestedSettings,providedAdvanced)}let updatedProject=project;if(changes.changedSettings.length>0)try{updatedProject=await patchProjectSettings(client,project,changes.body)}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}return writeUpdateResult({changedSettings:changes.changedSettings,project:updatedProject,previousSettings:changes.previousSettings,requestedSettings,advancedRows:changes.advancedRows,asJson:formatResult.jsonOutput||shouldEmitNonInteractiveCommandError(client),client}),0}var import_chalk264=__toESM(require_source(),1),import_ms29=__toESM(require_ms(),1);var ProjectRmTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}};var e=encodeURIComponent;async function rm9(client,argv){let telemetryClient=new ProjectRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand13.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk264.default.cyan(`${getCommandName("project rm <name>")}`)}`),2;let name=args[0];telemetryClient.trackCliArgumentName(name);let start=Date.now();if(!await readConfirmation3(client,name))return output_manager_default.log("User abort"),0;try{await client.fetch(`/v2/projects/${e(name)}`,{method:"DELETE"})}catch(err){if(isAPIError(err)&&err.status===404)return output_manager_default.error("No such project exists"),1;if(isAPIError(err)&&err.status===403)return output_manager_default.error(err.message),1}let elapsed2=(0,import_ms29.default)(Date.now()-start);return output_manager_default.log(`${import_chalk264.default.cyan("Success!")} Project ${import_chalk264.default.bold(name)} removed ${import_chalk264.default.gray(`[${elapsed2}]`)}`),0}async function readConfirmation3(client,projectName){return output_manager_default.print(prependEmoji(`The project ${import_chalk264.default.bold(projectName)} will be removed permanently.
1164
1160
  It will also delete everything under the project including deployments.
1165
1161
  `,emoji("warning"))),await client.input.confirm(`${import_chalk264.default.bold.red("Are you sure?")}`,!1)}var ProjectDangerouslyDeleteImmutableStaticAssetTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path3){path3&&this.trackCliArgument({arg:"path",value:this.redactedValue})}};async function dangerouslyDeleteImmutableStaticAsset(client,argv){let telemetry2=new ProjectDangerouslyDeleteImmutableStaticAssetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(dangerouslyDeleteImmutableStaticAssetSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let[path3]=parsedArgs.args;if(!path3)return output_manager_default.error(`Missing required argument. Usage: ${getCommandName("project dangerously-delete-immutable-static-asset <path>")}`),2;telemetry2.trackCliArgumentPath(path3);let projectName=parsedArgs.flags["--project"];telemetry2.trackCliOptionProject(projectName);let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="not_linked")return output_manager_default.error("No project linked. Run `vercel link` to link a project to this directory."),1;if(link.status==="error")return link.exitCode;let{project,org}=link;if(client.config.currentTeam=org.type==="team"?org.id:void 0,!canPrompt(client)){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>!flag.startsWith("--non-interactive")),interactiveCommand=getCommandNamePlain(`project dangerously-delete-immutable-static-asset ${quoteArg(path3)} --project ${quoteArg(project.id)} ${globalFlags.map(quoteArg).join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"Deleting an immutable static asset permanently removes it from storage and cannot be undone. This cannot be confirmed non-interactively. The user must run this command in a terminal and type the asset path to confirm.",userActionRequired:!0,hint:"This action can not be automated so it should be surfaced to the user.",next:[{command:interactiveCommand,when:"user runs this command in an interactive terminal"}]},1),output_manager_default.error("This command must be run interactively because it permanently deletes the asset from storage."),1}if(output_manager_default.print(prependEmoji(`Deleting immutable static asset ${path3} for project ${project.name} permanently removes it from storage for the production and preview environments. This cannot be undone. Requests to this URL will serve 410 for 7 days and then 404.
1166
1162
  `,emoji("warning"))),await client.input.text({message:`Type ${path3} to confirm the permanent deletion:`})!==path3)return output_manager_default.log("Canceled"),0;try{await client.fetch(`/v1/edge-cache/dangerously-delete-immutable-static?projectIdOrName=${project.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:path3}),retry:{retries:0}})}catch(err){if(isAPIError(err)){if(err.code==="challenge_required")return output_manager_default.error(`This action requires a recent authentication. Run ${getCommandName("login")} and retry.`),1;if(err.status===404)return output_manager_default.error(err.code==="asset_not_found"&&err.serverMessage?err.serverMessage:"Project or asset not found."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"Invalid request."),1;if(err.status===403)return output_manager_default.error(err.serverMessage||"You do not have permission to delete this asset."),1}return printError(err),output_manager_default.log("The deletion outcome is unknown. Re-run to verify: a not-found response on re-run means this attempt succeeded and the URL now serves 410."),1}return output_manager_default.print(prependEmoji(`Successfully deleted immutable static asset ${path3}; its URL now serves 410`,emoji("success"))+`
@@ -1268,7 +1264,7 @@ ${import_chalk284.default.gray("No changes detected from current production vers
1268
1264
  `)}),0}function readConfirmation4(deployments,projects2){return new Promise(resolve14=>{if(deployments.length>0){output_manager_default.log(`The following ${(0,import_pluralize26.default)("deployment",deployments.length,deployments.length>1)} will be permanently removed:`);let deploymentTable=table(deployments.map(depl=>{let time=import_chalk285.default.gray(`${(0,import_ms34.default)(Date.now()-depl.createdAt)} ago`),url=depl.url?import_chalk285.default.underline(`https://${depl.url}`):"";return[` ${depl.id}`,url,time]}),{align:["l","r","l"],hsep:6});output_manager_default.print(`${deploymentTable}
1269
1265
  `)}for(let depl of deployments)for(let{alias:alias2}of depl.aliases)output_manager_default.warn(`${import_chalk285.default.underline(`https://${alias2}`)} is an alias for ${import_chalk285.default.bold(depl.url)} and will be removed`);if(projects2.length>0){output_manager_default.print(`The following ${(0,import_pluralize26.default)("project",projects2.length,projects2.length>1)} will be permanently removed, including all ${projects2.length>1?"their":"its"} deployments and aliases:
1270
1266
  `);for(let project of projects2)output_manager_default.print(`${import_chalk285.default.gray("-")} ${import_chalk285.default.bold(project.name)}
1271
- `)}output_manager_default.print(`${import_chalk285.default.bold.red("> Are you sure?")} ${import_chalk285.default.gray("(y/N) ")}`),process.stdin.on("data",d=>{process.stdin.pause(),resolve14(d.toString().trim())}).resume()})}function deploymentsAndProjects(deployments,projects2,conjunction="and"){return!projects2||projects2.length===0?`${(0,import_pluralize26.default)("deployment",deployments.length,!0)}`:!deployments||deployments.length===0?`${(0,import_pluralize26.default)("project",projects2.length,!0)}`:`${(0,import_pluralize26.default)("deployment",deployments.length,!0)} ${conjunction} ${(0,import_pluralize26.default)("project",projects2.length,!0)}`}var import_error_utils23=__toESM(require_dist(),1),import_ms37=__toESM(require_ms(),1);var import_chalk287=__toESM(require_source(),1);var import_ms36=__toESM(require_ms(),1);var import_chalk286=__toESM(require_source(),1);var import_ms35=__toESM(require_ms(),1);async function rollbackStatus({client,contextName,deployment,project,timeout="3m"}){let recentThreshold=Date.now()-(0,import_ms35.default)("3m"),rollbackTimeout=Date.now()+(0,import_ms35.default)(timeout),counter=0,spinnerMessage=deployment?"Rollback in progress":`Checking rollback status of ${project.name}`;contextName||(contextName=await getContextName(client));try{for(output_manager_default.spinner(`${spinnerMessage}\u2026`);;){let projectCheck=await getProjectByNameOrId(client,project.id,project.accountId,!0);if(projectCheck instanceof ProjectNotFound)throw projectCheck;let{jobStatus,requestedAt,toDeploymentId,type}=projectCheck.lastAliasRequest??{};if((!jobStatus||jobStatus!=="in-progress"&&jobStatus!=="pending")&&(output_manager_default.stopSpinner(),output_manager_default.log(`${spinnerMessage}\u2026`)),!jobStatus||!requestedAt||!toDeploymentId||requestedAt<recentThreshold)return output_manager_default.log("No deployment rollback in progress"),0;if(jobStatus==="skipped"&&type==="rollback")return output_manager_default.log("Rollback was skipped"),0;if(jobStatus==="succeeded")return await renderJobSucceeded2({client,contextName,performingRollback:!!deployment,requestedAt,project,toDeploymentId});if(jobStatus==="failed")return await renderJobFailed2({client,contextName,deployment,project,toDeploymentId});if(jobStatus!=="pending"&&jobStatus!=="in-progress")return output_manager_default.log(`Unknown rollback status "${jobStatus}"`),1;if(requestedAt<recentThreshold||Date.now()>=rollbackTimeout)return output_manager_default.log(`The rollback exceeded its deadline - rerun ${import_chalk286.default.bold(`${packageName} rollback ${toDeploymentId}`)} to try again`),1;counter++===0&&!deployment&&(spinnerMessage+=` requested at ${formatDate(requestedAt)}`),output_manager_default.spinner(`${spinnerMessage}\u2026`),await sleep(250)}}finally{output_manager_default.stopSpinner()}}async function renderJobFailed2({client,contextName,deployment,project,toDeploymentId}){try{let name=(deployment||await getDeployment(client,contextName,toDeploymentId))?.url;output_manager_default.error(`Failed to remap all aliases to the requested deployment ${name} (${toDeploymentId})`)}catch{output_manager_default.error(`Failed to remap all aliases to the requested deployment ${toDeploymentId}`)}let nextTimestamp;for(;;){let url=`/v9/projects/${project.id}/rollback/aliases?failedOnly=true&limit=20`;nextTimestamp&&(url+=`&until=${nextTimestamp}`);let{aliases:aliases2,pagination}=await client.fetch(url);for(let{alias:alias2,status:status6}of aliases2)output_manager_default.log(` ${renderAliasStatus(status6).padEnd(11)} ${alias2.alias} (${alias2.deploymentId})`);if(pagination?.next)nextTimestamp=pagination.next;else break}return 1}async function renderJobSucceeded2({client,contextName,performingRollback,project,requestedAt,toDeploymentId}){let deploymentInfo="";try{let deployment=await getDeployment(client,contextName,toDeploymentId);deploymentInfo=`${import_chalk286.default.bold(deployment.url)} (${toDeploymentId})`}catch(err){output_manager_default.debug(`Failed to get deployment url for ${toDeploymentId}: ${err?.toString()||err}`),deploymentInfo=import_chalk286.default.bold(toDeploymentId)}let duration=performingRollback?elapsed(Date.now()-requestedAt):"";return output_manager_default.log(`Success! ${import_chalk286.default.bold(project.name)} was rolled back to ${deploymentInfo} ${duration}`),0}async function requestRollback({client,deployId,timeout}){let{contextName,deployment,project}=await getProjectByDeployment({client,deployId});return await client.fetch(`/v9/projects/${project.id}/rollback/${deployment.id}`,{body:{},method:"POST"}),timeout!==void 0&&(0,import_ms36.default)(timeout)===0?(output_manager_default.log(`Successfully requested rollback of ${import_chalk287.default.bold(project.name)} to ${deployment.url} (${deployment.id})`),output_manager_default.log(`To check rollback status, run ${getCommandName("rollback")}.`),0):await rollbackStatus({client,contextName,deployment,project,timeout})}var RollbackTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(value){value&&this.trackCliArgument({arg:"urlOrDeploymentId",value:this.redactedValue})}trackCliSubcommandStatus(){this.trackCliSubcommand({subcommand:"status",value:"status"})}trackCliOptionTimeout(time){time&&this.trackCliOption({option:"timeout",value:"[TIME]"})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var rollback_default=async client=>{let parsedArgs,flagsSpecification=getFlagsSpecification(rollbackCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry2=new RollbackTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry2.trackCliOptionTimeout(parsedArgs.flags["--timeout"]),telemetry2.trackCliFlagYes(parsedArgs.flags["--yes"]);let needHelp=parsedArgs.flags["--help"];if(!parsedArgs.args[1]&&needHelp)return telemetry2.trackCliFlagHelp("rollback"),output_manager_default.print(help(rollbackCommand,{columns:client.stderr.columns})),0;let timeout=parsedArgs.flags["--timeout"];if(timeout&&(0,import_ms37.default)(timeout)===void 0)return output_manager_default.error(`Invalid timeout "${timeout}"`),1;let actionOrDeployId=parsedArgs.args[1]||"status";try{if(actionOrDeployId==="status"){if(needHelp)return telemetry2.trackCliFlagHelp("rollback","status"),output_manager_default.print(help(statusSubcommand4,{columns:client.stderr.columns,parent:rollbackCommand})),0;telemetry2.trackCliSubcommandStatus();let project=await getProjectByCwdOrLink({autoConfirm:parsedArgs.flags["--yes"],client,commandName:"rollback",projectNameOrId:parsedArgs.args[2]});return await rollbackStatus({client,project,timeout})}return await requestRollback({client,deployId:actionOrDeployId,timeout})}catch(err){if((0,import_error_utils23.isErrnoException)(err)){if(err.code==="ERR_CANCELED")return 0;if(err.code==="ERR_INVALID_CWD"||err.code==="ERR_LINK_PROJECT")return 1}return output_manager_default.prettyError(err),1}};async function startRollingRelease({client,dpl,projectId,teamId,yes}){let{deployment}=await getProjectByDeployment({client,deployId:dpl}),promoteByCreation=!1;if(deployment.target!=="production")if(yes)promoteByCreation=!0;else{if(client.nonInteractive)return output_manager_default.error("This deployment is not a production deployment. In non-interactive mode use --yes to create a new production deployment and start the rolling release."),1;{let question="This deployment is not a production deployment and cannot be directly promoted. A new deployment will be built using your production environment. Are you sure you want to continue?";if(promoteByCreation=await client.input.confirm(question,!1),!promoteByCreation)return output_manager_default.error("Canceled"),0}}if(promoteByCreation){let newDeployment=await client.fetch(`/v13/deployments?teamId=${deployment.ownerId}`,{body:{deploymentId:deployment.id,name:projectId,target:"production",meta:{action:"promote"}},accountId:deployment.ownerId,method:"POST"});return output_manager_default.log(`Created production deployment ${newDeployment.id}: ${newDeployment.inspectorUrl}`),0}return await client.fetch(`/v1/projects/${projectId}/rolling-release/start?teamId=${teamId}`,{body:{canaryDeploymentId:deployment.id},json:!0,method:"POST"}),output_manager_default.log(`Requested rolling release start for ${deployment.id}`),0}var import_ms38=__toESM(require_ms(),1);function parseDuration(value){if(!value||/^\d+(s|ms)$/i.test(value))return;let milliseconds=(0,import_ms38.default)(/^\d+$/.test(value)?`${value}m`:value);if(milliseconds===void 0||milliseconds<=0)return;let minutes=Math.round(milliseconds/6e4);if(!(minutes<=0))return minutes}function parseStageFlags(stageFlags,advancementType){let stages=[];for(let stageValue of stageFlags){let parts=stageValue.split(","),percentage=parseInt(parts[0],10);if(isNaN(percentage)||percentage<1||percentage>99)return{stages:null,error:`Invalid stage percentage "${parts[0]}". Must be a number between 1 and 99.`};if(parts.length>1){if(advancementType==="manual-approval")return{stages:null,error:'Duration must not be provided for stages when advancement type is "manual-approval".'};let duration=parseDuration(parts[1]);if(duration===void 0)return{stages:null,error:`Invalid duration "${parts[1]}". Use minutes (e.g. "5m"), hours (e.g. "1h"), or days (e.g. "1d"). Seconds are not supported.`};stages.push({targetPercentage:percentage,duration})}else{if(advancementType==="automatic")return{stages:null,error:'Duration is required for each stage when advancement type is "automatic". Use the format "PERCENTAGE,DURATION" (e.g. "10,5m").'};stages.push({targetPercentage:percentage})}}for(let i=1;i<stages.length;i++)if(stages[i].targetPercentage<=stages[i-1].targetPercentage)return{stages:null,error:"Stage percentages must be in ascending order."};return{stages,error:null}}async function interactiveConfigure(client){if(await client.input.select({message:"Would you like to enable or disable rolling releases?",choices:[{name:"Enable",value:"enable"},{name:"Disable",value:"disable"}]})==="disable")return{config:void 0};let advancementType=await client.input.select({message:"How should stages advance?",choices:[{name:"automatic - Stages advance automatically after a set duration",value:"automatic"},{name:"manual-approval - Each stage requires manual approval to advance",value:"manual-approval"}]}),stages=[],stageNumber=1,addMore=!0;for(;addMore;){let percentageStr=await client.input.text({message:`Enter traffic percentage for stage ${stageNumber} (1-99):`,validate:val=>{let num=parseInt(val,10);return isNaN(num)||num<1||num>99?"Percentage must be a number between 1 and 99.":stages.length>0&&num<=stages[stages.length-1].targetPercentage?`Percentage must be greater than the previous stage (${stages[stages.length-1].targetPercentage}%).`:!0}}),percentage=parseInt(percentageStr,10),duration;if(advancementType==="automatic"){let durationStr=await client.input.text({message:"Enter duration for this stage (e.g. 5m, 1h):",validate:val=>parseDuration(val)===void 0?'Invalid duration. Use minutes (e.g. "5m"), hours (e.g. "1h"), or days (e.g. "1d"). Seconds are not supported.':!0});duration=parseDuration(durationStr)}stages.push({targetPercentage:percentage,duration}),stageNumber++,addMore=await client.input.confirm("Add another stage?",!1)}return output_manager_default.log(""),output_manager_default.log("Rolling release configuration:"),output_manager_default.log(` Advancement: ${advancementType}`),stages.forEach((stage,i)=>{let durationText=stage.duration!==void 0?` for ${stage.duration} minutes`:"";output_manager_default.log(` Stage ${i+1}: ${stage.targetPercentage}%${durationText}`)}),output_manager_default.log(` Stage ${stages.length+1}: 100% (final)`),output_manager_default.log(""),await client.input.confirm("Apply this configuration?",!0)?{config:{enabled:!0,advancementType,stages:[...stages,{targetPercentage:100}]}}:(output_manager_default.log("Configuration cancelled."),{exitCode:0})}async function buildConfigurePayload({client,cfgString,enableFlag,disableFlag,advancementType,stageFlags}){if(cfgString!==void 0){if(cfgString==="disable")return{config:void 0};try{return{config:JSON.parse(cfgString)}}catch{return output_manager_default.error("Invalid JSON provided for --cfg option."),{exitCode:1}}}if(disableFlag)return enableFlag?(output_manager_default.error("--enable and --disable are mutually exclusive."),{exitCode:1}):{config:void 0};if(enableFlag){if(advancementType!=="automatic"&&advancementType!=="manual-approval")return output_manager_default.error('--advancement-type is required when using --enable. Must be "automatic" or "manual-approval".'),{exitCode:1};if(!stageFlags||stageFlags.length===0)return output_manager_default.error("At least one --stage is required when using --enable."),{exitCode:1};let parsed=parseStageFlags(stageFlags,advancementType);return parsed.error!==null?(output_manager_default.error(parsed.error),{exitCode:1}):{config:{enabled:!0,advancementType,stages:[...parsed.stages,{targetPercentage:100}]}}}return advancementType!==void 0||stageFlags!==void 0&&stageFlags.length>0?(output_manager_default.error("--enable or --disable is required when using --advancement-type or --stage flags."),{exitCode:1}):client.nonInteractive?(output_manager_default.error("In non-interactive mode use --enable or --disable with --advancement-type and --stage as needed. Example: vercel rolling-release configure --enable --advancement-type=automatic --stage=10,5m --stage=50,10m"),{exitCode:1}):client.stdin.isTTY?interactiveConfigure(client):(output_manager_default.error("Missing configuration flags. Use --enable/--disable with --advancement-type and --stage, or run interactively in a terminal."),{exitCode:1})}async function configureRollingRelease({client,projectId,teamId,rollingReleaseConfig}){let body={...rollingReleaseConfig,enabled:!!rollingReleaseConfig};return await client.fetch(`/v1/projects/${projectId}/rolling-release/config?teamId=${teamId}`,{body,json:!0,method:"PATCH"}),rollingReleaseConfig?output_manager_default.log("Successfully configured rolling releases."):output_manager_default.log("Successfully disabled rolling releases."),0}async function approveRollingRelease({client,projectId,teamId,activeStageIndex,dpl}){let{deployment}=await getProjectByDeployment({client,deployId:dpl});return await client.fetch(`/v1/projects/${projectId}/rolling-release/approve-stage?teamId=${teamId}`,{method:"POST",json:!0,body:{activeStageIndex,nextStageIndex:activeStageIndex+1,canaryDeploymentId:deployment.id}}),output_manager_default.log(`Requested rolling release approval from stage ${activeStageIndex} to ${activeStageIndex+1} for ${deployment.id}`),0}async function abortRollingRelease({client,projectId,dpl,teamId}){let{deployment}=await getProjectByDeployment({client,deployId:dpl});return await client.fetch(`/v9/projects/${projectId}/rollback/${deployment.id}?teamId=${teamId}`,{body:{},method:"POST"}),output_manager_default.log(`Requested rolling release abort and rollback to ${deployment.id}`),0}async function completeRollingRelease({client,projectId,teamId,dpl}){let{deployment}=await getProjectByDeployment({client,deployId:dpl});return await client.fetch(`/v1/projects/${projectId}/rolling-release/complete?teamId=${teamId}`,{body:{canaryDeploymentId:deployment.id},json:!0,method:"POST"}),output_manager_default.log(`Requested rolling release completion for ${deployment.id}`),0}var RollingReleaseTelemetryClient=class extends TelemetryClient{trackCliOptionAction(value){this.trackCliOption({option:"action",value:value??""})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionCfg(value){this.trackCliOption({option:"cfg",value:value??""})}trackCliOptionDpl(value){this.trackCliOption({option:"dpl",value:value??""})}trackCliOptionCurrentStageIndex(value){this.trackCliOption({option:"currentStageIndex",value:value??""})}trackCliSubcommandConfigure(actual){this.trackCliSubcommand({subcommand:"configure",value:actual})}trackCliSubcommandStart(actual){this.trackCliSubcommand({subcommand:"start",value:actual})}trackCliSubcommandApprove(actual){this.trackCliSubcommand({subcommand:"approve",value:actual})}trackCliSubcommandAbort(actual){this.trackCliSubcommand({subcommand:"abort",value:actual})}trackCliSubcommandComplete(actual){this.trackCliSubcommand({subcommand:"complete",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliFlagEnable(value){value&&this.trackCliFlag("enable")}trackCliFlagDisable(value){value&&this.trackCliFlag("disable")}trackCliOptionAdvancementType(value){value&&this.trackCliOption({option:"advancement-type",value})}trackCliOptionStage(value){value&&this.trackCliOption({option:"stage",value:value.join(",")})}};var COMMAND_CONFIG56={configure:getCommandAliases(configureSubcommand),start:getCommandAliases(startSubcommand2),approve:getCommandAliases(approveSubcommand),abort:getCommandAliases(abortSubcommand),complete:getCommandAliases(completeSubcommand),inspect:getCommandAliases(fetchSubcommand)},SUBCOMMANDS={configure:configureSubcommand,start:startSubcommand2,approve:approveSubcommand,abort:abortSubcommand,complete:completeSubcommand,inspect:fetchSubcommand};function getRollingReleaseSubcommand(subcommand){return typeof subcommand=="string"&&subcommand in SUBCOMMANDS?subcommand:void 0}function buildDeploymentSuggestionCommands(client,subcmd){let args=client.argv.slice(2),preservedParts=[],listParts=[],hasNonInteractive=!1;for(let i=2;i<args.length;i++){let arg=args[i];if(arg==="--non-interactive"){hasNonInteractive=!0;continue}if(arg.startsWith("--cwd=")){let cwdPath=arg.slice(6);cwdPath&&(preservedParts.push("--cwd",cwdPath),listParts.push("--cwd",cwdPath));continue}if(arg==="--cwd"){i+1<args.length&&(preservedParts.push("--cwd",args[i+1]),listParts.push("--cwd",args[i+1]),i++);continue}if(arg.startsWith("--project=")){let projectName=arg.slice(10);projectName&&listParts.push(projectName),preservedParts.push(arg);continue}if(arg==="--project"){i+1<args.length&&(listParts.push(args[i+1]),preservedParts.push(arg,args[i+1]),i++);continue}preservedParts.push(arg),listParts.push(arg)}let preservedSuffix=preservedParts.join(" "),listSuffix=listParts.join(" "),listCommand=listSuffix?`${packageName} ls ${listSuffix}`:`${packageName} ls`,base=preservedSuffix?`${packageName} rolling-release ${subcmd} ${preservedSuffix}`:`${packageName} rolling-release ${subcmd}`,defaultSuffix=subcmd==="approve"?"--dpl dpl_123 --currentStageIndex=0":"--dpl dpl_123",subcommandCommand=hasNonInteractive?`${base} ${defaultSuffix} --non-interactive`:`${base} ${defaultSuffix}`;return{listCommand,subcommandCommand}}function outputRollingReleaseErrorWithDeploymentSuggestions(client,subcmd,reason,message){let{listCommand,subcommandCommand}=buildDeploymentSuggestionCommands(client,subcmd);outputAgentError(client,{status:"error",reason,message,next:[{command:listCommand},{command:subcommandCommand}]},1)}async function rollingRelease(client){let telemetry2=new RollingReleaseTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args:subcommandArgs,subcommandOriginal}=getSubcommand7(client.argv.slice(3),COMMAND_CONFIG56),needHelp=client.argv.includes("--help")||client.argv.includes("-h");if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("rolling-release"),output_manager_default.print(help(rollingReleaseCommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:rollingReleaseCommand,columns:client.stderr.columns}))}try{let subcommandName=getRollingReleaseSubcommand(subcommand),subcommandConfig=subcommandName?SUBCOMMANDS[subcommandName]:void 0;if(subcommandConfig&&needHelp)return telemetry2.trackCliFlagHelp("rolling-release",subcommandOriginal),printHelp(subcommandConfig),0;let subcommandFlags,projectName;subcommandConfig&&(subcommandFlags=parseArguments(subcommandArgs,getFlagsSpecification(subcommandConfig.options)),projectName=subcommandFlags.flags["--project"],telemetry2.trackCliOptionProject(projectName));let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_linked",message:"No project found for rolling releases. Specify a project with --project <name-or-id>, or link your project first.",next:[{command:`${packageName} link`}]},1),output_manager_default.error(`No project found. Specify a project with \`--project <name-or-id>\`, or run \`${packageName} link\` to link your project first.`),1;let{project,org}=link;if(client.config.currentTeam=org.type==="team"?org.id:void 0,!subcommandName||!subcommandFlags)return output_manager_default.debug(`Invalid subcommand: ${subcommand}`),output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG56)),output_manager_default.print(help(rollingReleaseCommand,{columns:client.stderr.columns})),2;switch(subcommandName){case"configure":{let cfgString=subcommandFlags.flags["--cfg"],enableFlag=subcommandFlags.flags["--enable"],disableFlag=subcommandFlags.flags["--disable"],advancementType=subcommandFlags.flags["--advancement-type"],stageFlags=subcommandFlags.flags["--stage"];telemetry2.trackCliFlagEnable(enableFlag),telemetry2.trackCliFlagDisable(disableFlag),telemetry2.trackCliOptionAdvancementType(advancementType),telemetry2.trackCliOptionStage(stageFlags);let configResult=await buildConfigurePayload({client,cfgString,enableFlag,disableFlag,advancementType,stageFlags});if(configResult.exitCode!==void 0)return configResult.exitCode;await configureRollingRelease({client,projectId:project.id,teamId:org.id,rollingReleaseConfig:configResult.config});break}case"start":{let dpl=subcommandFlags.flags["--dpl"];if(dpl===void 0)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"start","missing_flags","Starting a rolling release in non-interactive mode requires the --dpl flag."),output_manager_default.error("starting a rolling release requires --dpl option."),2;try{await startRollingRelease({client,dpl,projectId:project.id,teamId:project.accountId,yes:subcommandFlags.flags["--yes"]??!1})}catch(err){if(client.nonInteractive&&isAPIError(err))return outputRollingReleaseErrorWithDeploymentSuggestions(client,"start","api_error",err.message||"Starting the rolling release failed for this deployment."),1;throw err}break}case"approve":{let dpl=subcommandFlags.flags["--dpl"],currentStageIndex=subcommandFlags.flags["--currentStageIndex"],activeStageIndex=parseInt(currentStageIndex??"");if(!dpl)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"approve","missing_flags","Approving a rolling release in non-interactive mode requires --dpl and --currentStageIndex."),output_manager_default.error("Missing required flag --dpl"),2;if(currentStageIndex===void 0)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"approve","missing_flags","Approving a rolling release in non-interactive mode requires --currentStageIndex."),output_manager_default.error("Missing required flag --currentStageIndex"),2;if(isNaN(activeStageIndex))return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"approve","invalid_flag","--currentStageIndex must be a valid number."),output_manager_default.error("--currentStageIndex must be a valid number."),2;await approveRollingRelease({client,projectId:project.id,teamId:org.id,activeStageIndex,dpl});break}case"abort":{let dpl=subcommandFlags.flags["--dpl"];if(!dpl)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"abort","missing_flags","Aborting a rolling release in non-interactive mode requires the --dpl flag."),output_manager_default.error("Missing required flag --dpl"),2;try{await abortRollingRelease({client,projectId:project.id,teamId:org.id,dpl})}catch(err){if(client.nonInteractive&&isAPIError(err))return outputRollingReleaseErrorWithDeploymentSuggestions(client,"abort","api_error",err.message||"Aborting the rolling release failed for this deployment."),1;throw err}break}case"complete":{let dpl=subcommandFlags.flags["--dpl"];if(!dpl)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"complete","missing_flags","Completing a rolling release in non-interactive mode requires the --dpl flag."),output_manager_default.error("Missing required flag --dpl"),2;await completeRollingRelease({client,projectId:project.id,teamId:org.id,dpl});break}case"inspect":{telemetry2.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="fetch"&&warnDeprecatedSubcommand(client,"rolling-release fetch","rolling-release inspect");let result=await requestRollingRelease({client,projectId:project.id,teamId:org.id});output_manager_default.log(JSON.stringify(result,null,2));break}}return 0}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:"api_error",message:err.message||"Rolling release command failed."},1),printError(err),1}}var import_chalk288=__toESM(require_source(),1),import_pluralize27=__toESM(require_pluralize(),1);async function list23(client,argv){let parsed=await parseSubcommandArgs(argv,listSubcommand20,client);if(typeof parsed=="number")return parsed;let link=await requireProjectContext(client,"routes",parsed.flags["--project"]);if(typeof link=="number")return link;let{project,org}=link,{flags}=parsed,teamId=org.type==="team"?org.id:void 0,search3=flags["--search"],filter=flags["--filter"],production=flags["--production"],versionIdFlag=flags["--version-id"],diffFlag=flags["--diff"],expand=flags["--expand"];if(filter){let validFilters=["rewrite","redirect","set_status","transform"];if(!validFilters.includes(filter)){let msg=`Invalid filter type "${filter}". Valid types: ${validFilters.join(", ")}`;return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"invalid_arguments",message:msg,next:[{command:withGlobalFlags2(client,"routes list")}]}),process.exit(1)),output_manager_default.error(msg),2}}if(production&&versionIdFlag){let msg="Cannot use both --production and --version-id flags together";return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"invalid_arguments",message:msg,next:[{command:withGlobalFlags2(client,"routes list")}]}),process.exit(1)),output_manager_default.error(msg),2}if(production&&diffFlag){let msg="Cannot use both --production and --diff flags together. --diff compares staged changes against production.";return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"invalid_arguments",message:msg,next:[{command:withGlobalFlags2(client,"routes list --diff")}]}),process.exit(1)),output_manager_default.error(msg),2}let versionId,versionName,useDiff=!1;if(production){output_manager_default.spinner("Fetching production version");let{versions:versions2}=await getRouteVersions(client,project.id,{teamId}),productionVersion=versions2.find(v=>!v.isStaging);if(!productionVersion){let msg=`No production version found for ${project.name}.`;return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"not_found",message:msg,next:[{command:withGlobalFlags2(client,"routes list")}]}),process.exit(1)),output_manager_default.error(`No production version found for ${import_chalk288.default.bold(project.name)}.`),1}versionId=productionVersion.id,versionName=productionVersion.id}if(diffFlag&&!versionIdFlag){output_manager_default.spinner("Fetching staging version");let{versions:versions2}=await getRouteVersions(client,project.id,{teamId}),stagingVersion=versions2.find(v=>v.isStaging);if(!stagingVersion){let msg=`No staged changes to diff. Run ${withGlobalFlags2(client,"routes add")} or ${withGlobalFlags2(client,"routes edit")} to make changes.`;return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"not_found",message:msg,next:[{command:withGlobalFlags2(client,"routes list")},{command:withGlobalFlags2(client,"routes add")}]}),process.exit(1)),output_manager_default.error(`No staged changes to diff. Run ${import_chalk288.default.cyan(withGlobalFlags2(client,"routes add"))} or ${import_chalk288.default.cyan(withGlobalFlags2(client,"routes edit"))} to make changes.`),1}versionId=stagingVersion.id,versionName=stagingVersion.id,useDiff=!0}if(versionIdFlag){output_manager_default.spinner("Fetching version");let{versions:versions2}=await getRouteVersions(client,project.id,{teamId}),result=findVersionById(client,versions2,versionIdFlag);if(result.error||!result.version){let msg=result.error??"Version not found";return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"not_found",message:msg,next:[{command:withGlobalFlags2(client,"routes list-versions")}]}),process.exit(1)),output_manager_default.error(msg),1}versionId=result.version.id,versionName=result.version.id,diffFlag&&(useDiff=!0)}let lsStamp=stamp_default(),spinnerMessage=`Fetching routes for ${import_chalk288.default.bold(project.name)}`;versionName&&(spinnerMessage+=` (version: ${versionName})`),search3&&(spinnerMessage+=` matching "${search3}"`),filter&&(spinnerMessage+=` filtered by ${filter}`),output_manager_default.spinner(spinnerMessage);let{routes:routes2,version:version2,limit}=await getRoutes(client,project.id,{teamId,search:search3,filter,versionId,diff:useDiff});if(useDiff){let added=routes2.filter(r=>r.action==="+"),removed=routes2.filter(r=>r.action==="-"),modified=routes2.filter(r=>r.action==="~"),unchanged=routes2.filter(r=>!r.action);output_manager_default.log(`Changes in staging version ${import_chalk288.default.bold(versionName||"")} ${import_chalk288.default.gray(lsStamp())}`),added.length===0&&removed.length===0&&modified.length===0?output_manager_default.log(`
1267
+ `)}output_manager_default.print(`${import_chalk285.default.bold.red("> Are you sure?")} ${import_chalk285.default.gray("(y/N) ")}`),process.stdin.on("data",d=>{process.stdin.pause(),resolve14(d.toString().trim())}).resume()})}function deploymentsAndProjects(deployments,projects2,conjunction="and"){return!projects2||projects2.length===0?`${(0,import_pluralize26.default)("deployment",deployments.length,!0)}`:!deployments||deployments.length===0?`${(0,import_pluralize26.default)("project",projects2.length,!0)}`:`${(0,import_pluralize26.default)("deployment",deployments.length,!0)} ${conjunction} ${(0,import_pluralize26.default)("project",projects2.length,!0)}`}var import_error_utils23=__toESM(require_dist(),1),import_ms37=__toESM(require_ms(),1);var import_chalk287=__toESM(require_source(),1);var import_ms36=__toESM(require_ms(),1);var import_chalk286=__toESM(require_source(),1);var import_ms35=__toESM(require_ms(),1);async function rollbackStatus({client,contextName,deployment,project,timeout="3m"}){let recentThreshold=Date.now()-(0,import_ms35.default)("3m"),rollbackTimeout=Date.now()+(0,import_ms35.default)(timeout),counter=0,spinnerMessage=deployment?"Rollback in progress":`Checking rollback status of ${project.name}`;contextName||(contextName=await getContextName(client));try{for(output_manager_default.spinner(`${spinnerMessage}\u2026`);;){let projectCheck=await getProjectByNameOrId(client,project.id,project.accountId,!0);if(projectCheck instanceof ProjectNotFound)throw projectCheck;let{jobStatus,requestedAt,toDeploymentId,type}=projectCheck.lastAliasRequest??{};if((!jobStatus||jobStatus!=="in-progress"&&jobStatus!=="pending")&&(output_manager_default.stopSpinner(),output_manager_default.log(`${spinnerMessage}\u2026`)),!jobStatus||!requestedAt||!toDeploymentId||requestedAt<recentThreshold)return output_manager_default.log("No deployment rollback in progress"),0;if(jobStatus==="skipped"&&type==="rollback")return output_manager_default.log("Rollback was skipped"),0;if(jobStatus==="succeeded")return await renderJobSucceeded2({client,contextName,performingRollback:!!deployment,requestedAt,project,toDeploymentId});if(jobStatus==="failed")return await renderJobFailed2({client,contextName,deployment,project,toDeploymentId});if(jobStatus!=="pending"&&jobStatus!=="in-progress")return output_manager_default.log(`Unknown rollback status "${jobStatus}"`),1;if(requestedAt<recentThreshold||Date.now()>=rollbackTimeout)return output_manager_default.log(`The rollback exceeded its deadline - rerun ${import_chalk286.default.bold(`${packageName} rollback ${toDeploymentId}`)} to try again`),1;counter++===0&&!deployment&&(spinnerMessage+=` requested at ${formatDate(requestedAt)}`),output_manager_default.spinner(`${spinnerMessage}\u2026`),await sleep(250)}}finally{output_manager_default.stopSpinner()}}async function renderJobFailed2({client,contextName,deployment,project,toDeploymentId}){try{let name=(deployment||await getDeployment(client,contextName,toDeploymentId))?.url;output_manager_default.error(`Failed to remap all aliases to the requested deployment ${name} (${toDeploymentId})`)}catch{output_manager_default.error(`Failed to remap all aliases to the requested deployment ${toDeploymentId}`)}let nextTimestamp;for(;;){let url=`/v9/projects/${project.id}/rollback/aliases?failedOnly=true&limit=20`;nextTimestamp&&(url+=`&until=${nextTimestamp}`);let{aliases:aliases2,pagination}=await client.fetch(url);for(let{alias:alias2,status:status6}of aliases2)output_manager_default.log(` ${renderAliasStatus(status6).padEnd(11)} ${alias2.alias} (${alias2.deploymentId})`);if(pagination?.next)nextTimestamp=pagination.next;else break}return 1}async function renderJobSucceeded2({client,contextName,performingRollback,project,requestedAt,toDeploymentId}){let deploymentInfo="";try{let deployment=await getDeployment(client,contextName,toDeploymentId);deploymentInfo=`${import_chalk286.default.bold(deployment.url)} (${toDeploymentId})`}catch(err){output_manager_default.debug(`Failed to get deployment url for ${toDeploymentId}: ${err?.toString()||err}`),deploymentInfo=import_chalk286.default.bold(toDeploymentId)}let duration=performingRollback?elapsed(Date.now()-requestedAt):"";return output_manager_default.log(`Success! ${import_chalk286.default.bold(project.name)} was rolled back to ${deploymentInfo} ${duration}`),0}async function requestRollback({client,deployId,timeout}){let{contextName,deployment,project}=await getProjectByDeployment({client,deployId});return await client.fetch(`/v9/projects/${project.id}/rollback/${deployment.id}`,{body:{},method:"POST"}),timeout!==void 0&&(0,import_ms36.default)(timeout)===0?(output_manager_default.log(`Successfully requested rollback of ${import_chalk287.default.bold(project.name)} to ${deployment.url} (${deployment.id})`),output_manager_default.log(`To check rollback status, run ${getCommandName("rollback")}.`),0):await rollbackStatus({client,contextName,deployment,project,timeout})}var RollbackTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(value){value&&this.trackCliArgument({arg:"urlOrDeploymentId",value:this.redactedValue})}trackCliSubcommandStatus(){this.trackCliSubcommand({subcommand:"status",value:"status"})}trackCliOptionTimeout(time){time&&this.trackCliOption({option:"timeout",value:"[TIME]"})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var rollback_default=async client=>{let parsedArgs,flagsSpecification=getFlagsSpecification(rollbackCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry2=new RollbackTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry2.trackCliOptionTimeout(parsedArgs.flags["--timeout"]),telemetry2.trackCliFlagYes(parsedArgs.flags["--yes"]);let needHelp=parsedArgs.flags["--help"];if(!parsedArgs.args[1]&&needHelp)return telemetry2.trackCliFlagHelp("rollback"),output_manager_default.print(help(rollbackCommand,{columns:client.stderr.columns})),0;let timeout=parsedArgs.flags["--timeout"];if(timeout&&(0,import_ms37.default)(timeout)===void 0)return output_manager_default.error(`Invalid timeout "${timeout}"`),1;let actionOrDeployId=parsedArgs.args[1]||"status";try{if(actionOrDeployId==="status"){if(needHelp)return telemetry2.trackCliFlagHelp("rollback","status"),output_manager_default.print(help(statusSubcommand4,{columns:client.stderr.columns,parent:rollbackCommand})),0;telemetry2.trackCliSubcommandStatus();let project=await getProjectByCwdOrLink({autoConfirm:parsedArgs.flags["--yes"],client,commandName:"rollback",projectNameOrId:parsedArgs.args[2]});return await rollbackStatus({client,project,timeout})}return await requestRollback({client,deployId:actionOrDeployId,timeout})}catch(err){if((0,import_error_utils23.isErrnoException)(err)){if(err.code==="ERR_CANCELED")return 0;if(err.code==="ERR_INVALID_CWD"||err.code==="ERR_LINK_PROJECT")return 1}return output_manager_default.prettyError(err),1}};async function startRollingRelease({client,dpl,projectId,teamId,yes}){let{deployment}=await getProjectByDeployment({client,deployId:dpl}),promoteByCreation=!1;if(deployment.target!=="production")if(yes)promoteByCreation=!0;else{if(client.nonInteractive)return output_manager_default.error("This deployment is not a production deployment. In non-interactive mode use --yes to create a new production deployment and start the rolling release."),1;{let question="This deployment is not a production deployment and cannot be directly promoted. A new deployment will be built using your production environment. Are you sure you want to continue?";if(promoteByCreation=await client.input.confirm(question,!1),!promoteByCreation)return output_manager_default.error("Canceled"),0}}if(promoteByCreation){let newDeployment=await client.fetch(`/v13/deployments?teamId=${deployment.ownerId}`,{body:{deploymentId:deployment.id,name:projectId,target:"production",meta:{action:"promote"}},accountId:deployment.ownerId,method:"POST"});return output_manager_default.log(`Created production deployment ${newDeployment.id}: ${newDeployment.inspectorUrl}`),0}return await client.fetch(`/v1/projects/${projectId}/rolling-release/start?teamId=${teamId}`,{body:{canaryDeploymentId:deployment.id},json:!0,method:"POST"}),output_manager_default.log(`Requested rolling release start for ${deployment.id}`),0}var import_ms38=__toESM(require_ms(),1);function parseDuration(value){if(!value||/^\d+(s|ms)$/i.test(value))return;let milliseconds=(0,import_ms38.default)(/^\d+$/.test(value)?`${value}m`:value);if(milliseconds===void 0||milliseconds<=0)return;let minutes=Math.round(milliseconds/6e4);if(!(minutes<=0))return minutes}function parseStageFlags(stageFlags,advancementType){let stages=[];for(let stageValue of stageFlags){let parts=stageValue.split(","),percentage=parseInt(parts[0],10);if(isNaN(percentage)||percentage<1||percentage>99)return{stages:null,error:`Invalid stage percentage "${parts[0]}". Must be a number between 1 and 99.`};if(parts.length>1){if(advancementType==="manual-approval")return{stages:null,error:'Duration must not be provided for stages when advancement type is "manual-approval".'};let duration=parseDuration(parts[1]);if(duration===void 0)return{stages:null,error:`Invalid duration "${parts[1]}". Use minutes (e.g. "5m"), hours (e.g. "1h"), or days (e.g. "1d"). Seconds are not supported.`};stages.push({targetPercentage:percentage,duration})}else{if(advancementType==="automatic")return{stages:null,error:'Duration is required for each stage when advancement type is "automatic". Use the format "PERCENTAGE,DURATION" (e.g. "10,5m").'};stages.push({targetPercentage:percentage})}}for(let i=1;i<stages.length;i++)if(stages[i].targetPercentage<=stages[i-1].targetPercentage)return{stages:null,error:"Stage percentages must be in ascending order."};return{stages,error:null}}async function interactiveConfigure(client){if(await client.input.select({message:"Would you like to enable or disable rolling releases?",choices:[{name:"Enable",value:"enable"},{name:"Disable",value:"disable"}]})==="disable")return{config:void 0};let advancementType=await client.input.select({message:"How should stages advance?",choices:[{name:"automatic - Stages advance automatically after a set duration",value:"automatic"},{name:"manual-approval - Each stage requires manual approval to advance",value:"manual-approval"}]}),stages=[],stageNumber=1,addMore=!0;for(;addMore;){let percentageStr=await client.input.text({message:`Enter traffic percentage for stage ${stageNumber} (1-99):`,validate:val=>{let num=parseInt(val,10);return isNaN(num)||num<1||num>99?"Percentage must be a number between 1 and 99.":stages.length>0&&num<=stages[stages.length-1].targetPercentage?`Percentage must be greater than the previous stage (${stages[stages.length-1].targetPercentage}%).`:!0}}),percentage=parseInt(percentageStr,10),duration;if(advancementType==="automatic"){let durationStr=await client.input.text({message:"Enter duration for this stage (e.g. 5m, 1h):",validate:val=>parseDuration(val)===void 0?'Invalid duration. Use minutes (e.g. "5m"), hours (e.g. "1h"), or days (e.g. "1d"). Seconds are not supported.':!0});duration=parseDuration(durationStr)}stages.push({targetPercentage:percentage,duration}),stageNumber++,addMore=await client.input.confirm("Add another stage?",!1)}return output_manager_default.log(""),output_manager_default.log("Rolling release configuration:"),output_manager_default.log(` Advancement: ${advancementType}`),stages.forEach((stage,i)=>{let durationText=stage.duration!==void 0?` for ${stage.duration} minutes`:"";output_manager_default.log(` Stage ${i+1}: ${stage.targetPercentage}%${durationText}`)}),output_manager_default.log(` Stage ${stages.length+1}: 100% (final)`),output_manager_default.log(""),await client.input.confirm("Apply this configuration?",!0)?{config:{enabled:!0,advancementType,stages:[...stages,{targetPercentage:100}]}}:(output_manager_default.log("Configuration cancelled."),{exitCode:0})}async function buildConfigurePayload({client,cfgString,enableFlag,disableFlag,advancementType,stageFlags}){if(cfgString!==void 0){if(cfgString==="disable")return{config:void 0};try{return{config:JSON.parse(cfgString)}}catch{return output_manager_default.error("Invalid JSON provided for --cfg option."),{exitCode:1}}}if(disableFlag)return enableFlag?(output_manager_default.error("--enable and --disable are mutually exclusive."),{exitCode:1}):{config:void 0};if(enableFlag){if(advancementType!=="automatic"&&advancementType!=="manual-approval")return output_manager_default.error('--advancement-type is required when using --enable. Must be "automatic" or "manual-approval".'),{exitCode:1};if(!stageFlags||stageFlags.length===0)return output_manager_default.error("At least one --stage is required when using --enable."),{exitCode:1};let parsed=parseStageFlags(stageFlags,advancementType);return parsed.error!==null?(output_manager_default.error(parsed.error),{exitCode:1}):{config:{enabled:!0,advancementType,stages:[...parsed.stages,{targetPercentage:100}]}}}return advancementType!==void 0||stageFlags!==void 0&&stageFlags.length>0?(output_manager_default.error("--enable or --disable is required when using --advancement-type or --stage flags."),{exitCode:1}):client.nonInteractive?(output_manager_default.error("In non-interactive mode use --enable or --disable with --advancement-type and --stage as needed. Example: vercel rolling-release configure --enable --advancement-type=automatic --stage=10,5m --stage=50,10m"),{exitCode:1}):client.stdin.isTTY?interactiveConfigure(client):(output_manager_default.error("Missing configuration flags. Use --enable/--disable with --advancement-type and --stage, or run interactively in a terminal."),{exitCode:1})}async function configureRollingRelease({client,projectId,teamId,rollingReleaseConfig}){let body={...rollingReleaseConfig,enabled:!!rollingReleaseConfig};return await client.fetch(`/v1/projects/${projectId}/rolling-release/config?teamId=${teamId}`,{body,json:!0,method:"PATCH"}),rollingReleaseConfig?output_manager_default.log("Successfully configured rolling releases."):output_manager_default.log("Successfully disabled rolling releases."),0}async function approveRollingRelease({client,projectId,teamId,activeStageIndex,dpl}){let{deployment}=await getProjectByDeployment({client,deployId:dpl});return await client.fetch(`/v1/projects/${projectId}/rolling-release/approve-stage?teamId=${teamId}`,{method:"POST",json:!0,body:{activeStageIndex,nextStageIndex:activeStageIndex+1,canaryDeploymentId:deployment.id}}),output_manager_default.log(`Requested rolling release approval from stage ${activeStageIndex} to ${activeStageIndex+1} for ${deployment.id}`),0}async function abortRollingRelease({client,projectId,dpl,teamId}){let{deployment}=await getProjectByDeployment({client,deployId:dpl});return await client.fetch(`/v9/projects/${projectId}/rollback/${deployment.id}?teamId=${teamId}`,{body:{},method:"POST"}),output_manager_default.log(`Requested rolling release abort and rollback to ${deployment.id}`),0}async function completeRollingRelease({client,projectId,teamId,dpl}){let{deployment}=await getProjectByDeployment({client,deployId:dpl});return await client.fetch(`/v1/projects/${projectId}/rolling-release/complete?teamId=${teamId}`,{body:{canaryDeploymentId:deployment.id},json:!0,method:"POST"}),output_manager_default.log(`Requested rolling release completion for ${deployment.id}`),0}var RollingReleaseTelemetryClient=class extends TelemetryClient{trackCliOptionAction(value){this.trackCliOption({option:"action",value:value??""})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionCfg(value){this.trackCliOption({option:"cfg",value:value??""})}trackCliOptionDpl(value){this.trackCliOption({option:"dpl",value:value??""})}trackCliOptionCurrentStageIndex(value){this.trackCliOption({option:"currentStageIndex",value:value??""})}trackCliSubcommandConfigure(actual){this.trackCliSubcommand({subcommand:"configure",value:actual})}trackCliSubcommandStart(actual){this.trackCliSubcommand({subcommand:"start",value:actual})}trackCliSubcommandApprove(actual){this.trackCliSubcommand({subcommand:"approve",value:actual})}trackCliSubcommandAbort(actual){this.trackCliSubcommand({subcommand:"abort",value:actual})}trackCliSubcommandComplete(actual){this.trackCliSubcommand({subcommand:"complete",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliFlagEnable(value){value&&this.trackCliFlag("enable")}trackCliFlagDisable(value){value&&this.trackCliFlag("disable")}trackCliOptionAdvancementType(value){value&&this.trackCliOption({option:"advancement-type",value})}trackCliOptionStage(value){value&&this.trackCliOption({option:"stage",value:value.join(",")})}};var COMMAND_CONFIG56={configure:getCommandAliases(configureSubcommand),start:getCommandAliases(startSubcommand2),approve:getCommandAliases(approveSubcommand),abort:getCommandAliases(abortSubcommand),complete:getCommandAliases(completeSubcommand),inspect:getCommandAliases(fetchSubcommand)},SUBCOMMANDS={configure:configureSubcommand,start:startSubcommand2,approve:approveSubcommand,abort:abortSubcommand,complete:completeSubcommand,inspect:fetchSubcommand};function getRollingReleaseSubcommand(subcommand){return typeof subcommand=="string"&&subcommand in SUBCOMMANDS?subcommand:void 0}function buildDeploymentSuggestionCommands(client,subcmd){let args=client.argv.slice(2),preservedParts=[],listParts=[],hasNonInteractive=!1;for(let i=2;i<args.length;i++){let arg2=args[i];if(arg2==="--non-interactive"){hasNonInteractive=!0;continue}if(arg2.startsWith("--cwd=")){let cwdPath=arg2.slice(6);cwdPath&&(preservedParts.push("--cwd",cwdPath),listParts.push("--cwd",cwdPath));continue}if(arg2==="--cwd"){i+1<args.length&&(preservedParts.push("--cwd",args[i+1]),listParts.push("--cwd",args[i+1]),i++);continue}if(arg2.startsWith("--project=")){let projectName=arg2.slice(10);projectName&&listParts.push(projectName),preservedParts.push(arg2);continue}if(arg2==="--project"){i+1<args.length&&(listParts.push(args[i+1]),preservedParts.push(arg2,args[i+1]),i++);continue}preservedParts.push(arg2),listParts.push(arg2)}let preservedSuffix=preservedParts.join(" "),listSuffix=listParts.join(" "),listCommand=listSuffix?`${packageName} ls ${listSuffix}`:`${packageName} ls`,base=preservedSuffix?`${packageName} rolling-release ${subcmd} ${preservedSuffix}`:`${packageName} rolling-release ${subcmd}`,defaultSuffix=subcmd==="approve"?"--dpl dpl_123 --currentStageIndex=0":"--dpl dpl_123",subcommandCommand=hasNonInteractive?`${base} ${defaultSuffix} --non-interactive`:`${base} ${defaultSuffix}`;return{listCommand,subcommandCommand}}function outputRollingReleaseErrorWithDeploymentSuggestions(client,subcmd,reason,message){let{listCommand,subcommandCommand}=buildDeploymentSuggestionCommands(client,subcmd);outputAgentError(client,{status:"error",reason,message,next:[{command:listCommand},{command:subcommandCommand}]},1)}async function rollingRelease(client){let telemetry2=new RollingReleaseTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args:subcommandArgs,subcommandOriginal}=getSubcommand7(client.argv.slice(3),COMMAND_CONFIG56),needHelp=client.argv.includes("--help")||client.argv.includes("-h");if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("rolling-release"),output_manager_default.print(help(rollingReleaseCommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:rollingReleaseCommand,columns:client.stderr.columns}))}try{let subcommandName=getRollingReleaseSubcommand(subcommand),subcommandConfig=subcommandName?SUBCOMMANDS[subcommandName]:void 0;if(subcommandConfig&&needHelp)return telemetry2.trackCliFlagHelp("rolling-release",subcommandOriginal),printHelp(subcommandConfig),0;let subcommandFlags,projectName;subcommandConfig&&(subcommandFlags=parseArguments(subcommandArgs,getFlagsSpecification(subcommandConfig.options)),projectName=subcommandFlags.flags["--project"],telemetry2.trackCliOptionProject(projectName));let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_linked",message:"No project found for rolling releases. Specify a project with --project <name-or-id>, or link your project first.",next:[{command:`${packageName} link`}]},1),output_manager_default.error(`No project found. Specify a project with \`--project <name-or-id>\`, or run \`${packageName} link\` to link your project first.`),1;let{project,org}=link;if(client.config.currentTeam=org.type==="team"?org.id:void 0,!subcommandName||!subcommandFlags)return output_manager_default.debug(`Invalid subcommand: ${subcommand}`),output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG56)),output_manager_default.print(help(rollingReleaseCommand,{columns:client.stderr.columns})),2;switch(subcommandName){case"configure":{let cfgString=subcommandFlags.flags["--cfg"],enableFlag=subcommandFlags.flags["--enable"],disableFlag=subcommandFlags.flags["--disable"],advancementType=subcommandFlags.flags["--advancement-type"],stageFlags=subcommandFlags.flags["--stage"];telemetry2.trackCliFlagEnable(enableFlag),telemetry2.trackCliFlagDisable(disableFlag),telemetry2.trackCliOptionAdvancementType(advancementType),telemetry2.trackCliOptionStage(stageFlags);let configResult=await buildConfigurePayload({client,cfgString,enableFlag,disableFlag,advancementType,stageFlags});if(configResult.exitCode!==void 0)return configResult.exitCode;await configureRollingRelease({client,projectId:project.id,teamId:org.id,rollingReleaseConfig:configResult.config});break}case"start":{let dpl=subcommandFlags.flags["--dpl"];if(dpl===void 0)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"start","missing_flags","Starting a rolling release in non-interactive mode requires the --dpl flag."),output_manager_default.error("starting a rolling release requires --dpl option."),2;try{await startRollingRelease({client,dpl,projectId:project.id,teamId:project.accountId,yes:subcommandFlags.flags["--yes"]??!1})}catch(err){if(client.nonInteractive&&isAPIError(err))return outputRollingReleaseErrorWithDeploymentSuggestions(client,"start","api_error",err.message||"Starting the rolling release failed for this deployment."),1;throw err}break}case"approve":{let dpl=subcommandFlags.flags["--dpl"],currentStageIndex=subcommandFlags.flags["--currentStageIndex"],activeStageIndex=parseInt(currentStageIndex??"");if(!dpl)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"approve","missing_flags","Approving a rolling release in non-interactive mode requires --dpl and --currentStageIndex."),output_manager_default.error("Missing required flag --dpl"),2;if(currentStageIndex===void 0)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"approve","missing_flags","Approving a rolling release in non-interactive mode requires --currentStageIndex."),output_manager_default.error("Missing required flag --currentStageIndex"),2;if(isNaN(activeStageIndex))return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"approve","invalid_flag","--currentStageIndex must be a valid number."),output_manager_default.error("--currentStageIndex must be a valid number."),2;await approveRollingRelease({client,projectId:project.id,teamId:org.id,activeStageIndex,dpl});break}case"abort":{let dpl=subcommandFlags.flags["--dpl"];if(!dpl)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"abort","missing_flags","Aborting a rolling release in non-interactive mode requires the --dpl flag."),output_manager_default.error("Missing required flag --dpl"),2;try{await abortRollingRelease({client,projectId:project.id,teamId:org.id,dpl})}catch(err){if(client.nonInteractive&&isAPIError(err))return outputRollingReleaseErrorWithDeploymentSuggestions(client,"abort","api_error",err.message||"Aborting the rolling release failed for this deployment."),1;throw err}break}case"complete":{let dpl=subcommandFlags.flags["--dpl"];if(!dpl)return client.nonInteractive&&outputRollingReleaseErrorWithDeploymentSuggestions(client,"complete","missing_flags","Completing a rolling release in non-interactive mode requires the --dpl flag."),output_manager_default.error("Missing required flag --dpl"),2;await completeRollingRelease({client,projectId:project.id,teamId:org.id,dpl});break}case"inspect":{telemetry2.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="fetch"&&warnDeprecatedSubcommand(client,"rolling-release fetch","rolling-release inspect");let result=await requestRollingRelease({client,projectId:project.id,teamId:org.id});output_manager_default.log(JSON.stringify(result,null,2));break}}return 0}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:"api_error",message:err.message||"Rolling release command failed."},1),printError(err),1}}var import_chalk288=__toESM(require_source(),1),import_pluralize27=__toESM(require_pluralize(),1);async function list23(client,argv){let parsed=await parseSubcommandArgs(argv,listSubcommand20,client);if(typeof parsed=="number")return parsed;let link=await requireProjectContext(client,"routes",parsed.flags["--project"]);if(typeof link=="number")return link;let{project,org}=link,{flags}=parsed,teamId=org.type==="team"?org.id:void 0,search3=flags["--search"],filter=flags["--filter"],production=flags["--production"],versionIdFlag=flags["--version-id"],diffFlag=flags["--diff"],expand=flags["--expand"];if(filter){let validFilters=["rewrite","redirect","set_status","transform"];if(!validFilters.includes(filter)){let msg=`Invalid filter type "${filter}". Valid types: ${validFilters.join(", ")}`;return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"invalid_arguments",message:msg,next:[{command:withGlobalFlags2(client,"routes list")}]}),process.exit(1)),output_manager_default.error(msg),2}}if(production&&versionIdFlag){let msg="Cannot use both --production and --version-id flags together";return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"invalid_arguments",message:msg,next:[{command:withGlobalFlags2(client,"routes list")}]}),process.exit(1)),output_manager_default.error(msg),2}if(production&&diffFlag){let msg="Cannot use both --production and --diff flags together. --diff compares staged changes against production.";return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"invalid_arguments",message:msg,next:[{command:withGlobalFlags2(client,"routes list --diff")}]}),process.exit(1)),output_manager_default.error(msg),2}let versionId,versionName,useDiff=!1;if(production){output_manager_default.spinner("Fetching production version");let{versions:versions2}=await getRouteVersions(client,project.id,{teamId}),productionVersion=versions2.find(v=>!v.isStaging);if(!productionVersion){let msg=`No production version found for ${project.name}.`;return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"not_found",message:msg,next:[{command:withGlobalFlags2(client,"routes list")}]}),process.exit(1)),output_manager_default.error(`No production version found for ${import_chalk288.default.bold(project.name)}.`),1}versionId=productionVersion.id,versionName=productionVersion.id}if(diffFlag&&!versionIdFlag){output_manager_default.spinner("Fetching staging version");let{versions:versions2}=await getRouteVersions(client,project.id,{teamId}),stagingVersion=versions2.find(v=>v.isStaging);if(!stagingVersion){let msg=`No staged changes to diff. Run ${withGlobalFlags2(client,"routes add")} or ${withGlobalFlags2(client,"routes edit")} to make changes.`;return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"not_found",message:msg,next:[{command:withGlobalFlags2(client,"routes list")},{command:withGlobalFlags2(client,"routes add")}]}),process.exit(1)),output_manager_default.error(`No staged changes to diff. Run ${import_chalk288.default.cyan(withGlobalFlags2(client,"routes add"))} or ${import_chalk288.default.cyan(withGlobalFlags2(client,"routes edit"))} to make changes.`),1}versionId=stagingVersion.id,versionName=stagingVersion.id,useDiff=!0}if(versionIdFlag){output_manager_default.spinner("Fetching version");let{versions:versions2}=await getRouteVersions(client,project.id,{teamId}),result=findVersionById(client,versions2,versionIdFlag);if(result.error||!result.version){let msg=result.error??"Version not found";return client.nonInteractive&&(outputAgentError(client,{status:"error",reason:"not_found",message:msg,next:[{command:withGlobalFlags2(client,"routes list-versions")}]}),process.exit(1)),output_manager_default.error(msg),1}versionId=result.version.id,versionName=result.version.id,diffFlag&&(useDiff=!0)}let lsStamp=stamp_default(),spinnerMessage=`Fetching routes for ${import_chalk288.default.bold(project.name)}`;versionName&&(spinnerMessage+=` (version: ${versionName})`),search3&&(spinnerMessage+=` matching "${search3}"`),filter&&(spinnerMessage+=` filtered by ${filter}`),output_manager_default.spinner(spinnerMessage);let{routes:routes2,version:version2,limit}=await getRoutes(client,project.id,{teamId,search:search3,filter,versionId,diff:useDiff});if(useDiff){let added=routes2.filter(r=>r.action==="+"),removed=routes2.filter(r=>r.action==="-"),modified=routes2.filter(r=>r.action==="~"),unchanged=routes2.filter(r=>!r.action);output_manager_default.log(`Changes in staging version ${import_chalk288.default.bold(versionName||"")} ${import_chalk288.default.gray(lsStamp())}`),added.length===0&&removed.length===0&&modified.length===0?output_manager_default.log(`
1272
1268
  No changes from production version
1273
1269
  `):(added.length>0&&(output_manager_default.print(`
1274
1270
  ${import_chalk288.default.bold(import_chalk288.default.green(`Added (${added.length}):`))}
@@ -1321,13 +1317,13 @@ ${import_chalk284.default.gray("No changes detected from current production vers
1321
1317
  `),output_manager_default.print(` ${import_chalk291.default.gray("ID:")} ${route.id}
1322
1318
  `),output_manager_default.print(`
1323
1319
  ${import_chalk291.default.bold("Staging version:")} ${version2.id}
1324
- `),await offerAutoPromote(client,projectId,version2,!!existingStagingVersion,{teamId,skipPrompts}),0}catch(e2){let error=e2;return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.ROUTE_CREATE_FAILED,message:"Route creation failed for this project. See hint for next steps.",hint:error.message||"Use `vercel routes list --diff` to inspect staged routes, then adjust flags and retry.",next:[{command:withGlobalFlags2(client,"routes list --diff"),when:"to inspect staged state"}]},1),output_manager_default.error(error.message||"Failed to create route"),1}}var COMMAND_CONFIG57={list:getCommandAliases(listSubcommand20),"list-versions":getCommandAliases(listVersionsSubcommand2),inspect:getCommandAliases(inspectSubcommand13),add:getCommandAliases(addSubcommand10),edit:getCommandAliases(editSubcommand2),delete:getCommandAliases(deleteSubcommand3),enable:getCommandAliases(enableSubcommand3),disable:getCommandAliases(disableSubcommand3),reorder:getCommandAliases(reorderSubcommand),export:getCommandAliases(exportSubcommand),publish:getCommandAliases(publishSubcommand2),restore:getCommandAliases(restoreSubcommand2),"discard-staging":getCommandAliases(discardSubcommand2)};async function main31(client){let telemetry2=new RoutesTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(routesCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG57),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("routes"),output_manager_default.print(help(routesCommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:routesCommand,columns:client.stderr.columns}))}switch(subcommand&&!needHelp&&telemetry2.trackCliOptionProject(getProjectOptionFromArgs(args)),subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(listSubcommand20),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),list23(client,args));case"list-versions":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(listVersionsSubcommand2),0):(telemetry2.trackCliSubcommandListVersions(subcommandOriginal),listVersions3(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(inspectSubcommand13),0):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect18(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(addSubcommand10),0):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add13(client,args));case"edit":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(editSubcommand2),0):(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-DMOIBVEP.js")).default(client,args));case"delete":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(deleteSubcommand3),0):(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-KSZ7R5V6.js")).default(client,args));case"enable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(enableSubcommand3),0):(telemetry2.trackCliSubcommandEnable(subcommandOriginal),(await import("./chunks/enable-IL27VHSU.js")).default(client,args));case"disable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(disableSubcommand3),0):(telemetry2.trackCliSubcommandDisable(subcommandOriginal),(await import("./chunks/disable-BUGWQUS7.js")).default(client,args));case"reorder":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(reorderSubcommand),0):(telemetry2.trackCliSubcommandReorder(subcommandOriginal),(await import("./chunks/reorder-NGBZWNZH.js")).default(client,args));case"export":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(exportSubcommand),0):(telemetry2.trackCliSubcommandExport(subcommandOriginal),(await import("./chunks/export-HBUUGMGE.js")).default(client,args));case"publish":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(publishSubcommand2),0):(telemetry2.trackCliSubcommandPublish(subcommandOriginal),(await import("./chunks/publish-JHNLZT6K.js")).default(client,args));case"restore":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(restoreSubcommand2),0):(telemetry2.trackCliSubcommandRestore(subcommandOriginal),(await import("./chunks/restore-NVY4A3T3.js")).default(client,args));case"discard-staging":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(discardSubcommand2),0):(telemetry2.trackCliSubcommandDiscardStaging(subcommandOriginal),(await import("./chunks/discard-J5O3C753.js")).default(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG57)),output_manager_default.print(help(routesCommand,{columns:client.stderr.columns})),2}}function getFlagValue(args,names){let value;for(let i=0;i<args.length;i++){let arg=args[i],[option,inlineValue]=arg.split("=",2);if(names.includes(option)){if(inlineValue!==void 0){value=inlineValue;continue}i+1<args.length&&(value=args[i+1],i++)}}return value}async function sandbox(client){let argv=client.argv.slice(2),commandIndex=argv.indexOf("sandbox"),rootArgs=commandIndex===-1?argv:argv.slice(0,commandIndex),sandboxArgs=commandIndex===-1?[]:argv.slice(commandIndex+1),scope=getFlagValue(rootArgs,["--scope","-S"]),team=getFlagValue(rootArgs,["--team","-T"]),token2=getFlagValue(rootArgs,["--token","-t"]),forwardedArgs=[...scope?["--scope",scope]:team?["--team",team]:[],...sandboxArgs],originalCwd=process.cwd(),originalAuthToken=process.env.VERCEL_AUTH_TOKEN;try{token2?process.env.VERCEL_AUTH_TOKEN=token2:!process.env.VERCEL_AUTH_TOKEN&&process.env.VERCEL_TOKEN?process.env.VERCEL_AUTH_TOKEN=process.env.VERCEL_TOKEN:!process.env.VERCEL_AUTH_TOKEN&&client.authConfig.token&&(process.env.VERCEL_AUTH_TOKEN=client.authConfig.token),process.env.VERCEL_CLI_INVOCATION_ID=client.telemetryEventStore.currentInvocationId,process.chdir(client.cwd);let{createApp}=await import("sandbox");return await createApp({appName:"vercel sandbox",withoutAuth:!1}).run(forwardedArgs),0}catch(error){return printError(error),1}finally{process.chdir(originalCwd),typeof originalAuthToken=="string"?process.env.VERCEL_AUTH_TOKEN=originalAuthToken:delete process.env.VERCEL_AUTH_TOKEN}}var SchedulesTelemetryClient=class extends TelemetryClient{trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandDisable(actual){this.trackCliSubcommand({subcommand:"disable",value:actual})}trackCliSubcommandInvoke(actual){this.trackCliSubcommand({subcommand:"invoke",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandExecutions(actual){this.trackCliSubcommand({subcommand:"executions",value:actual})}trackCliSubcommandExecutionsList(actual){this.trackCliSubcommand({subcommand:"executions:list",value:actual})}};var DEFAULT_SCHEDULES_BASE_URL="https://vercel-schedules.com",DEFAULT_SCHEDULE_NAMESPACE="default";function sanitizeSchedule(schedule){let{trackId:_trackId,...publicSchedule}=schedule;return publicSchedule}var SchedulesClient=class{constructor(client,options){this.client=client;this.options=options;this.baseUrl=new URL(options.baseUrl??process.env.VERCEL_SCHEDULE_BASE_URL??DEFAULT_SCHEDULES_BASE_URL)}request(path3,options={}){let url=new URL(path3,this.baseUrl);return url.searchParams.set("projectId",this.options.projectId),this.client.fetch(url.href,{...options,accountId:this.options.ownerId,useCurrentTeam:!1})}schedulePath(name,namespace,suffix=""){return`${`/v1/schedules/${encodeURIComponent(name)}${suffix}`}?${new URLSearchParams({namespace})}`}async create({target,...params}){let schedule=await this.request("/v1/schedules",{method:"POST",bailOn429:!0,body:{...params,target:{type:"queue",topic:target.topic}}});return sanitizeSchedule(schedule)}async get({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){let schedule=await this.request(this.schedulePath(name,namespace),{bailOn429:!0});return sanitizeSchedule(schedule)}async list({namespace=DEFAULT_SCHEDULE_NAMESPACE,cursor:cursor2,limit=20}={}){let searchParams=new URLSearchParams({namespace,limit:String(limit)});cursor2!==void 0&&searchParams.set("cursor",cursor2);let response=await this.request(`/v1/schedules?${searchParams}`,{bailOn429:!0});return{data:response.data.map(sanitizeSchedule),cursor:response.cursor}}async update({name,namespace=DEFAULT_SCHEDULE_NAMESPACE,target,...params}){let schedule=await this.request(this.schedulePath(name,namespace),{method:"PATCH",bailOn429:!0,body:{...params,...target?{target:{type:"queue",topic:target.topic}}:{}}});return sanitizeSchedule(schedule)}async delete({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){return this.request(this.schedulePath(name,namespace),{method:"DELETE",bailOn429:!0})}async enable({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){return this.changeState(name,namespace,"enable")}async disable({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){return this.changeState(name,namespace,"disable")}async changeState(name,namespace,action){let schedule=await this.request(this.schedulePath(name,namespace,`/${action}`),{method:"POST",bailOn429:!0});return sanitizeSchedule(schedule)}async invoke({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){await this.request(this.schedulePath(name,namespace,"/invoke"),{method:"POST",bailOn429:!0,retry:{retries:0}})}async listExecutions({name,namespace=DEFAULT_SCHEDULE_NAMESPACE,cursor:cursor2,limit=20,sort,from,to,executionId}){let searchParams=new URLSearchParams({limit:String(limit)});return cursor2!==void 0&&searchParams.set("cursor",cursor2),sort!==void 0&&searchParams.set("sort",sort),from!==void 0&&searchParams.set("from",String(from)),to!==void 0&&searchParams.set("to",String(to)),executionId!==void 0&&searchParams.set("executionId",executionId),this.request(`${this.schedulePath(name,namespace,"/executions")}&${searchParams}`,{bailOn429:!0})}};var SchedulesActionTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function asSentence(value){let trimmed=value.trim();return/[.!?]$/.test(trimmed)?trimmed:`${trimmed}.`}function apiErrorDetail(error){let message=error.serverMessage?.trim();return message&&message!=="Response Error"?asSentence(message):void 0}function requestDescription(context){return context.action==="list"?`list schedules in namespace ${context.namespace}`:context.action==="list-executions"?`list executions for schedule ${context.namespace}/${context.name}`:`${context.action} schedule ${context.namespace}/${context.name}`}function ambiguousInvokeError(){return{reason:AGENT_REASON.API_ERROR,message:"The schedule invocation may have been accepted, but the CLI did not receive confirmation. Check whether the schedule ran before invoking it again.",retryable:!1,userActionRequired:!0}}function getSchedulesError(client,error,context){if(!isAPIError(error))return context.action==="invoke"?ambiguousInvokeError():{reason:AGENT_REASON.API_ERROR,message:"Failed to connect to the Schedules API. Check your connection and try again.",retryable:!0};let serverMessage=error.serverMessage?.trim().toLowerCase();if(error.code==="schedule_already_exists")return{reason:AGENT_REASON.SCHEDULE_ALREADY_EXISTS,message:context.name?`Schedule ${context.namespace}/${context.name} already exists. Choose a different name or update the existing schedule.`:"The schedule already exists. Choose a different name or update the existing schedule.",retryable:!1};if(error.code==="schedule_completed")return{reason:AGENT_REASON.SCHEDULE_COMPLETED,message:context.name?`Schedule ${context.namespace}/${context.name} has completed and can't be modified. Delete it or create a new schedule.`:"The schedule has completed and can't be modified. Delete it or create a new schedule.",retryable:!1};if(error.code==="static_schedule"){let schedule=context.name?`${quoteArg(context.name)} --namespace ${quoteArg(context.namespace)}`:void 0;return{reason:AGENT_REASON.STATIC_SCHEDULE,message:context.name?`Static schedule ${context.namespace}/${context.name} can't be updated or deleted. Enable or disable it instead.`:"Static schedules can't be updated or deleted. Enable or disable them instead.",retryable:!1,...schedule&&{next:[{command:buildCommandWithGlobalFlags(client.argv,`schedules enable ${schedule}`,void 0,{excludeFlags:["--yes"]}),when:"Enable the static schedule"},{command:buildCommandWithGlobalFlags(client.argv,`schedules disable ${schedule}`,void 0,{excludeFlags:["--yes"]}),when:"Disable the static schedule"}]}}}if(error.code==="invalid_cron_expression")return{reason:AGENT_REASON.INVALID_CRON_EXPRESSION,message:`${apiErrorDetail(error)??"The cron expression is invalid."} Check \`--cron\` and try again.`,retryable:!1};if(error.code==="invalid_jitter")return{reason:AGENT_REASON.INVALID_JITTER,message:apiErrorDetail(error)??"The schedule jitter setting is invalid.",retryable:!1};if(error.code==="jitter_exceeds_cadence")return{reason:AGENT_REASON.JITTER_EXCEEDS_CADENCE,message:`${apiErrorDetail(error)??"The schedule jitter exceeds the interval between runs."} Increase the interval between runs.`,retryable:!1};if(error.code==="single_at_too_soon")return{reason:AGENT_REASON.SINGLE_AT_TOO_SOON,message:`${apiErrorDetail(error)??"The one-time schedule is too soon."} Choose a later value for \`--at\`.`,retryable:!1};if(error.code==="payload_too_large")return{reason:AGENT_REASON.SCHEDULE_PAYLOAD_TOO_LARGE,message:`${apiErrorDetail(error)??"The schedule payload is too large."} Reduce the value passed to \`--payload\` and try again.`,retryable:!1};if(error.code==="payload_store_failed")return{reason:AGENT_REASON.SCHEDULE_PAYLOAD_STORE_FAILED,message:"Failed to store the schedule payload. Try again later.",retryable:!0};if(error.code==="service_unavailable")return{reason:AGENT_REASON.SCHEDULE_SERVICE_UNAVAILABLE,message:"Schedule execution history is temporarily unavailable. Try again later.",retryable:!0};if(error.code==="service_error")return{reason:AGENT_REASON.SCHEDULE_SERVICE_ERROR,message:error.status>=500?"Failed to load schedule execution history. Try again later.":"Failed to load schedule execution history. Choose a shorter time range and try again.",retryable:error.status>=500};if(error.status===400){let detail2=apiErrorDetail(error);return{reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The Schedules API rejected the request.${detail2?` ${detail2}`:""}`,retryable:!1}}if(error.status===401&&error.code==="missing_team_param")return{reason:AGENT_REASON.MISSING_SCOPE,message:"Schedules requires a team project. Run `vercel link` to link a project owned by a team.",retryable:!1,userActionRequired:!0};if(error.status===401){let tokenSource=client.authConfig.tokenSource;return{reason:AGENT_REASON.LOGIN_REQUIRED,message:tokenSource==="env"?"Schedules API authentication failed. Replace VERCEL_TOKEN, or unset it to use your saved login.":tokenSource==="flag"?"Schedules API authentication failed. Replace the token passed to `--token`.":`Schedules API authentication failed. Run ${getCommandName("login")} and try again.`,retryable:!1,userActionRequired:!0}}if(error.status===402){let detail2=apiErrorDetail(error);return{reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message:`Schedules isn't available for this team.${detail2?` ${detail2}`:""} Ask a team owner to review the requirement.`,retryable:!1,userActionRequired:!0}}if(error.status===403&&error.code==="not_enabled"||error.status===404&&(serverMessage==="not found"||serverMessage==="not found."))return{reason:AGENT_REASON.SCHEDULES_NOT_ENABLED,message:"Vercel Schedules is not enabled for this team.",retryable:!1,userActionRequired:!0};if(error.status===403)return{reason:AGENT_REASON.PERMISSION_DENIED,message:"Can't access Schedules with the current credentials and team. Check the token and selected team. If both are correct, ask a team owner for access.",retryable:!1,userActionRequired:!0};if(error.status===404&&(serverMessage==="project not found"||serverMessage==="project not found."))return{reason:AGENT_REASON.PROJECT_NOT_FOUND,message:"The linked project isn't available to this team. Run `vercel link` to update the project link.",retryable:!1,userActionRequired:!0};if(error.status===404&&context.action!=="create"&&context.action!=="list"&&context.name)return{reason:AGENT_REASON.NOT_FOUND,message:`Schedule not found: ${context.namespace}/${context.name}.`,retryable:!1};if(error.status===429){let retryAfterMs=typeof error.retryAfterMs=="number"&&error.retryAfterMs>0?error.retryAfterMs:void 0;return{reason:AGENT_REASON.RATE_LIMITED,message:retryAfterMs===void 0?"The Schedules API request limit was reached. Wait and try again.":`The Schedules API request limit was reached. Try again in ${Math.ceil(retryAfterMs/1e3)} second${retryAfterMs>1e3?"s":""}.`,retryable:!0,...retryAfterMs&&{retryAfterMs}}}if(error.status>=500)return context.action==="invoke"?ambiguousInvokeError():{reason:AGENT_REASON.API_ERROR,message:"The Schedules API is temporarily unavailable. Try again later.",retryable:!0};let detail=apiErrorDetail(error);return{reason:AGENT_REASON.API_ERROR,message:`Failed to ${requestDescription(context)}.${detail?` ${detail}`:""}`,retryable:!1}}function handleSchedulesApiError(client,error,context){let details=getSchedulesError(client,error,context);return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,...details},1),1):(output_manager_default.fatal(details.message),1)}var IDENTIFIER_PATTERN2=/^[0-9A-Za-z][0-9A-Za-z._-]*$/;var QUEUE_TOPIC_PATTERN=/^[A-Za-z0-9_-]+$/;var LOCAL_MINUTE_DATETIME_PATTERN=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/,LOCAL_SECOND_DATETIME_PATTERN=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/,TIMEZONE_PATTERN=/^[A-Za-z][A-Za-z0-9_+/-]*$/;function validateScheduleIdentifier(value,label){if(value.length>256)return`${label} must be at most 256 characters.`;if(!IDENTIFIER_PATTERN2.test(value))return`${label} must start with a letter or number and can contain only letters, numbers, periods, underscores, and hyphens.`}function validateScheduleTimezone(value){if(value!==void 0){if(value.length===0||value.length>50||!TIMEZONE_PATTERN.test(value))return"`--timezone` must be a valid IANA timezone.";try{new Intl.DateTimeFormat("en-US",{timeZone:value})}catch{return"`--timezone` must be a valid IANA timezone."}}}function validateScheduleQueueTopic(value){if(value.length>256||!QUEUE_TOPIC_PATTERN.test(value))return"`--topic` must be 1\u2013256 characters and contain only letters, numbers, underscores, and hyphens."}function normalizeLocalDatetime(value){let secondMatch=LOCAL_SECOND_DATETIME_PATTERN.exec(value);if(secondMatch){if(secondMatch[6]!=="00")return}else LOCAL_MINUTE_DATETIME_PATTERN.test(value)&&(value=`${value}:00`);let match=LOCAL_SECOND_DATETIME_PATTERN.exec(value);if(!match)return;let[,yearValue,monthValue,dayValue,hourValue,minuteValue]=match,year=Number(yearValue),month=Number(monthValue),day=Number(dayValue),hour=Number(hourValue),minute=Number(minuteValue),daysInMonth=[31,year%4===0&&(year%100!==0||year%400===0)?29:28,31,30,31,30,31,31,30,31,30,31];if(!(month<1||month>12||day<1||day>daysInMonth[month-1]||hour<0||hour>23||minute<0||minute>59))return value}function parseScheduleExpression(cron,at,required){if(cron!==void 0&&at!==void 0)return{valid:!1,error:"Use either `--cron` or `--at`, not both."};if(cron!==void 0)return cron.trim()?{valid:!0,value:{type:"cron",cron}}:{valid:!1,error:"`--cron` cannot be empty."};if(at!==void 0){let normalized=normalizeLocalDatetime(at);return normalized===void 0?{valid:!1,error:"`--at` must use YYYY-MM-DDTHH:mm or YYYY-MM-DDTHH:mm:00 without a timezone suffix. Use `--timezone` to select the timezone."}:{valid:!0,value:{type:"single",at:normalized}}}return required?{valid:!1,error:"A schedule expression is required. Use `--cron` or `--at`."}:{valid:!0,value:void 0}}function validateJitter(value){return!Number.isInteger(value)||value<1||value>15?{valid:!1,error:"`--jitter` must be an integer between 1 and 15."}:{valid:!0,value}}function parseCreateJitter(value){return value===void 0?{valid:!0,value:void 0}:validateJitter(value)}function parseUpdateJitter(value){return value===void 0?{valid:!0,value:void 0}:value==="none"?{valid:!0,value:null}:validateJitter(Number(value))}function parseSchedulePayload(value){if(value===void 0)return{valid:!0,value:void 0};try{return{valid:!0,value:JSON.parse(value)}}catch{return{valid:!1,error:"`--payload` must be valid JSON."}}}function invalidScheduleArguments(client,usage2,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,usage2),when:"Provide valid schedule arguments"}]}),2):(output_manager_default.fatal(message),2)}function validateScheduleNameAndNamespace(client,args,namespaceFlag,usage2){let[name]=args;if(!name)return{valid:!1,exitCode:invalidScheduleArguments(client,usage2,"A schedule name is required")};if(args.length!==1)return{valid:!1,exitCode:invalidScheduleArguments(client,usage2,`Expected one schedule name. Usage: ${getCommandName(usage2)}`)};let namespace=namespaceFlag??DEFAULT_SCHEDULE_NAMESPACE,nameError=validateScheduleIdentifier(name,"Schedule name"),namespaceError=validateScheduleIdentifier(namespace,"Namespace"),error=nameError??namespaceError;return error?{valid:!1,exitCode:invalidScheduleArguments(client,usage2,error)}:{valid:!0,name,namespace}}function parseScheduleOutput(client,usage2,flags){let result=validateJsonOutput(flags);return result.valid?{valid:!0,json:result.jsonOutput||client.nonInteractive}:{valid:!1,exitCode:invalidScheduleArguments(client,usage2,result.error)}}function writeScheduleMutationResult(client,schedule,message,json){if(json){let value=client.nonInteractive?{status:AGENT_STATUS.OK,schedule,message}:schedule;client.stdout.write(`${JSON.stringify(value,null,2)}
1325
- `)}else output_manager_default.success(message);return 0}async function runScheduleAction(client,argv,action){let subcommand=action==="enable"?enableSubcommand4:action==="disable"?disableSubcommand4:invokeSubcommand,usage2=`schedules ${action} <name>`,telemetry2=new SchedulesActionTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(subcommand.options))}catch(error){return invalidScheduleArguments(client,usage2,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],usage2);if(!identifier.valid)return identifier.exitCode;let outputMode=parseScheduleOutput(client,usage2,flags);if(!outputMode.valid)return outputMode.exitCode;let link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;let presentParticiple=action==="enable"?"Enabling":action==="disable"?"Disabling":"Invoking";outputMode.json||output_manager_default.spinner(`${presentParticiple} schedule\u2026`);let schedulesClient=new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}),schedule;try{action==="enable"?schedule=await schedulesClient.enable(identifier):action==="disable"?schedule=await schedulesClient.disable(identifier):await schedulesClient.invoke(identifier)}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action,name:identifier.name,namespace:identifier.namespace})}output_manager_default.stopSpinner();let message=`${action==="enable"?"Enabled":action==="disable"?"Disabled":"Invoked"} schedule ${identifier.namespace}/${identifier.name}.`;if(schedule)return writeScheduleMutationResult(client,schedule,message,outputMode.json);if(outputMode.json){let result=client.nonInteractive?{status:AGENT_STATUS.OK,message}:{invoked:!0,name:identifier.name,namespace:identifier.namespace};client.stdout.write(`${JSON.stringify(result,null,2)}
1326
- `)}else output_manager_default.success(message);return 0}var SchedulesCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionCron(cron){cron&&this.trackCliOption({option:"cron",value:this.redactedValue})}trackCliOptionAt(at){at&&this.trackCliOption({option:"at",value:this.redactedValue})}trackCliOptionTimezone(timezone){timezone&&this.trackCliOption({option:"timezone",value:timezone})}trackCliOptionJitter(jitter){jitter!==void 0&&this.trackCliOption({option:"jitter",value:String(jitter)})}trackCliOptionTopic(topic){topic&&this.trackCliOption({option:"topic",value:this.redactedValue})}trackCliOptionPayload(payload){payload!==void 0&&this.trackCliOption({option:"payload",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE13="schedules create <name> --cron <expression> --topic <topic>";async function create6(client,argv){let telemetry2=new SchedulesCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(createSubcommand6.options))}catch(error){return invalidScheduleArguments(client,USAGE13,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionCron(flags["--cron"]),telemetry2.trackCliOptionAt(flags["--at"]),telemetry2.trackCliOptionTimezone(flags["--timezone"]),telemetry2.trackCliOptionJitter(flags["--jitter"]),telemetry2.trackCliOptionTopic(flags["--topic"]),telemetry2.trackCliOptionPayload(flags["--payload"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],USAGE13);if(!identifier.valid)return identifier.exitCode;let expression=parseScheduleExpression(flags["--cron"],flags["--at"],!0);if(!expression.valid)return invalidScheduleArguments(client,USAGE13,expression.error);let topic=flags["--topic"];if(!topic?.trim())return invalidScheduleArguments(client,USAGE13,"A target queue topic is required. Use `--topic`.");let topicError=validateScheduleQueueTopic(topic);if(topicError)return invalidScheduleArguments(client,USAGE13,topicError);let jitter=parseCreateJitter(flags["--jitter"]);if(!jitter.valid)return invalidScheduleArguments(client,USAGE13,jitter.error);let timezoneError=validateScheduleTimezone(flags["--timezone"]);if(timezoneError)return invalidScheduleArguments(client,USAGE13,timezoneError);let payload=parseSchedulePayload(flags["--payload"]);if(!payload.valid)return invalidScheduleArguments(client,USAGE13,payload.error);let outputMode=parseScheduleOutput(client,USAGE13,flags);if(!outputMode.valid)return outputMode.exitCode;let link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;outputMode.json||output_manager_default.spinner("Creating schedule\u2026");let schedule;try{schedule=await new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}).create({name:identifier.name,namespace:identifier.namespace,expression:expression.value,target:{topic},...flags["--timezone"]!==void 0&&{timezone:flags["--timezone"]},...jitter.value!==void 0&&{jitter:jitter.value},...flags["--payload"]!==void 0&&{payload:payload.value}})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"create",name:identifier.name,namespace:identifier.namespace})}return output_manager_default.stopSpinner(),writeScheduleMutationResult(client,schedule,`Created schedule ${identifier.namespace}/${identifier.name}.`,outputMode.json)}var SchedulesDeleteTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE14="schedules delete <name> --yes";async function deleteSchedule(client,argv){let telemetry2=new SchedulesDeleteTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(deleteSubcommand4.options))}catch(error){return invalidScheduleArguments(client,USAGE14,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliFlagYes(flags["--yes"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],USAGE14);if(!identifier.valid)return identifier.exitCode;let outputMode=parseScheduleOutput(client,USAGE14,flags);if(!outputMode.valid)return outputMode.exitCode;let skipConfirmation=flags["--yes"]??!1;if(client.nonInteractive&&!skipConfirmation)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:"Deleting a schedule requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1),1;let link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;if(!skipConfirmation&&!await client.input.confirm(`Delete schedule ${identifier.namespace}/${identifier.name}? This cannot be undone.`,!1))return output_manager_default.log("Canceled"),0;outputMode.json||output_manager_default.spinner("Deleting schedule\u2026");let deletedScheduleId;try{deletedScheduleId=(await new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}).delete(identifier)).scheduleId}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"delete",name:identifier.name,namespace:identifier.namespace})}output_manager_default.stopSpinner();let message=`Deleted schedule ${identifier.namespace}/${identifier.name}.`;if(outputMode.json){let deleted={name:identifier.name,namespace:identifier.namespace,scheduleId:deletedScheduleId},result=client.nonInteractive?{status:AGENT_STATUS.OK,deleted,message}:{deleted:!0,...deleted};client.stdout.write(`${JSON.stringify(result,null,2)}
1327
- `)}else output_manager_default.success(message);return 0}var import_chalk292=__toESM(require_source(),1);var SchedulesListExecutionsTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionSort(sort){sort&&this.trackCliOption({option:"sort",value:sort})}trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionFrom(from){from!==void 0&&this.trackCliOption({option:"from",value:String(from)})}trackCliOptionTo(to){to!==void 0&&this.trackCliOption({option:"to",value:String(to)})}trackCliOptionExecutionId(executionId){executionId&&this.trackCliOption({option:"execution-id",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE15="schedules executions list <name>",MAX_EXECUTION_RANGE_MS=30*864e5;function invalidArguments3(client,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,USAGE15),when:"List schedule executions with valid options"}]}),2):(output_manager_default.fatal(message),2)}function capitalize2(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function formatExecutionStatus(status6){return status6==="succeeded"?import_chalk292.default.green("Succeeded"):status6==="failed"?import_chalk292.default.red("Failed"):import_chalk292.default.gray("Unavailable")}function formatPercentage3(value){return value===null?import_chalk292.default.gray("-"):`${Number((value*100).toFixed(2))}%`}function formatDuration3(value){return value===null?import_chalk292.default.gray("-"):value<1e3?`${Math.round(value)}ms`:value<6e4?`${Number((value/1e3).toFixed(1))}s`:`${Number((value/6e4).toFixed(1))}m`}function formatInvocationCount(value){return`${value} invocation${value===1?"":"s"}`}function executionMetrics(metrics2){return[formatAlignedLabel("Range",`${formatDate(metrics2.from)} \u2013 ${formatDate(metrics2.to)}`),formatAlignedLabel("Recorded",formatInvocationCount(metrics2.recordedInvocations)),formatAlignedLabel("Failed",formatInvocationCount(metrics2.failedInvocations)),formatAlignedLabel("Error Rate",formatPercentage3(metrics2.errorRate)),formatAlignedLabel("Avg Duration",formatDuration3(metrics2.averageDurationMs))].join(`
1320
+ `),await offerAutoPromote(client,projectId,version2,!!existingStagingVersion,{teamId,skipPrompts}),0}catch(e2){let error=e2;return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.ROUTE_CREATE_FAILED,message:"Route creation failed for this project. See hint for next steps.",hint:error.message||"Use `vercel routes list --diff` to inspect staged routes, then adjust flags and retry.",next:[{command:withGlobalFlags2(client,"routes list --diff"),when:"to inspect staged state"}]},1),output_manager_default.error(error.message||"Failed to create route"),1}}var COMMAND_CONFIG57={list:getCommandAliases(listSubcommand20),"list-versions":getCommandAliases(listVersionsSubcommand2),inspect:getCommandAliases(inspectSubcommand13),add:getCommandAliases(addSubcommand10),edit:getCommandAliases(editSubcommand2),delete:getCommandAliases(deleteSubcommand3),enable:getCommandAliases(enableSubcommand3),disable:getCommandAliases(disableSubcommand3),reorder:getCommandAliases(reorderSubcommand),export:getCommandAliases(exportSubcommand),publish:getCommandAliases(publishSubcommand2),restore:getCommandAliases(restoreSubcommand2),"discard-staging":getCommandAliases(discardSubcommand2)};async function main31(client){let telemetry2=new RoutesTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(routesCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG57),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("routes"),output_manager_default.print(help(routesCommand,{columns:client.stderr.columns})),0;function printHelp(command2){output_manager_default.print(help(command2,{parent:routesCommand,columns:client.stderr.columns}))}switch(subcommand&&!needHelp&&telemetry2.trackCliOptionProject(getProjectOptionFromArgs(args)),subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(listSubcommand20),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),list23(client,args));case"list-versions":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(listVersionsSubcommand2),0):(telemetry2.trackCliSubcommandListVersions(subcommandOriginal),listVersions3(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(inspectSubcommand13),0):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect18(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(addSubcommand10),0):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add13(client,args));case"edit":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(editSubcommand2),0):(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-2M3KEE3H.js")).default(client,args));case"delete":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(deleteSubcommand3),0):(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-E7J4B5E5.js")).default(client,args));case"enable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(enableSubcommand3),0):(telemetry2.trackCliSubcommandEnable(subcommandOriginal),(await import("./chunks/enable-2QTTTYQD.js")).default(client,args));case"disable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(disableSubcommand3),0):(telemetry2.trackCliSubcommandDisable(subcommandOriginal),(await import("./chunks/disable-5TKY6JK2.js")).default(client,args));case"reorder":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(reorderSubcommand),0):(telemetry2.trackCliSubcommandReorder(subcommandOriginal),(await import("./chunks/reorder-Y3NMEA2S.js")).default(client,args));case"export":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(exportSubcommand),0):(telemetry2.trackCliSubcommandExport(subcommandOriginal),(await import("./chunks/export-PV2NDS7C.js")).default(client,args));case"publish":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(publishSubcommand2),0):(telemetry2.trackCliSubcommandPublish(subcommandOriginal),(await import("./chunks/publish-2CS4RYJW.js")).default(client,args));case"restore":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(restoreSubcommand2),0):(telemetry2.trackCliSubcommandRestore(subcommandOriginal),(await import("./chunks/restore-RMQVGYQB.js")).default(client,args));case"discard-staging":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(discardSubcommand2),0):(telemetry2.trackCliSubcommandDiscardStaging(subcommandOriginal),(await import("./chunks/discard-ALSOF66H.js")).default(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG57)),output_manager_default.print(help(routesCommand,{columns:client.stderr.columns})),2}}function getFlagValue(args,names){let value;for(let i=0;i<args.length;i++){let arg2=args[i],[option,inlineValue]=arg2.split("=",2);if(names.includes(option)){if(inlineValue!==void 0){value=inlineValue;continue}i+1<args.length&&(value=args[i+1],i++)}}return value}async function sandbox(client){let argv=client.argv.slice(2),commandIndex=argv.indexOf("sandbox"),rootArgs=commandIndex===-1?argv:argv.slice(0,commandIndex),sandboxArgs=commandIndex===-1?[]:argv.slice(commandIndex+1),scope=getFlagValue(rootArgs,["--scope","-S"]),team=getFlagValue(rootArgs,["--team","-T"]),token2=getFlagValue(rootArgs,["--token","-t"]),forwardedArgs=[...scope?["--scope",scope]:team?["--team",team]:[],...sandboxArgs],originalCwd=process.cwd(),originalAuthToken=process.env.VERCEL_AUTH_TOKEN;try{token2?process.env.VERCEL_AUTH_TOKEN=token2:!process.env.VERCEL_AUTH_TOKEN&&process.env.VERCEL_TOKEN?process.env.VERCEL_AUTH_TOKEN=process.env.VERCEL_TOKEN:!process.env.VERCEL_AUTH_TOKEN&&client.authConfig.token&&(process.env.VERCEL_AUTH_TOKEN=client.authConfig.token),process.env.VERCEL_CLI_INVOCATION_ID=client.telemetryEventStore.currentInvocationId,process.chdir(client.cwd);let{createApp}=await import("sandbox");return await createApp({appName:"vercel sandbox",withoutAuth:!1}).run(forwardedArgs),0}catch(error){return printError(error),1}finally{process.chdir(originalCwd),typeof originalAuthToken=="string"?process.env.VERCEL_AUTH_TOKEN=originalAuthToken:delete process.env.VERCEL_AUTH_TOKEN}}var SchedulesTelemetryClient=class extends TelemetryClient{trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandDisable(actual){this.trackCliSubcommand({subcommand:"disable",value:actual})}trackCliSubcommandInvoke(actual){this.trackCliSubcommand({subcommand:"invoke",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandExecutions(actual){this.trackCliSubcommand({subcommand:"executions",value:actual})}trackCliSubcommandExecutionsList(actual){this.trackCliSubcommand({subcommand:"executions:list",value:actual})}};var SchedulesActionTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function asSentence(value){let trimmed=value.trim();return/[.!?]$/.test(trimmed)?trimmed:`${trimmed}.`}function apiErrorDetail(error){let message=error.serverMessage?.trim();return message&&message!=="Response Error"?asSentence(message):void 0}function requestDescription(context){return context.action==="list"?`list schedules in namespace ${context.namespace}`:context.action==="list-executions"?`list executions for schedule ${context.namespace}/${context.name}`:`${context.action} schedule ${context.namespace}/${context.name}`}function ambiguousInvokeError(local){return{reason:AGENT_REASON.API_ERROR,message:"The schedule invocation may have been accepted, but the CLI did not receive confirmation. Check whether the schedule ran before invoking it again."+(local?` Inspect the ${getCommandName("dev")} output for local executions.`:""),retryable:!1,userActionRequired:!0}}function getSchedulesError(client,error,context){if(!isAPIError(error))return context.action==="invoke"?ambiguousInvokeError(context.local):context.local?{reason:AGENT_REASON.API_ERROR,message:`${error instanceof Error?asSentence(error.message):"Failed to connect to local Schedules."} Check the local session and restart ${getCommandName("dev")} in this project if needed.`,retryable:!1,userActionRequired:!0}:{reason:AGENT_REASON.API_ERROR,message:"Failed to connect to the Schedules API. Check your connection and try again.",retryable:!0};let serverMessage=error.serverMessage?.trim().toLowerCase();if(context.local&&context.action==="invoke"&&error.status>=500)return ambiguousInvokeError(!0);if(context.local&&(error.status===401||error.status===402||error.status===403||/(?:project|session)_(?:mismatch|not_found|expired)/.test(error.code??"")||/^(?:local )?(?:project|session)\b/.test(serverMessage??"")))return{reason:AGENT_REASON.API_ERROR,message:`${apiErrorDetail(error)??"The local Schedules session is unavailable."} Restart ${getCommandName("dev")} in this project and use its local session.`,retryable:!1,userActionRequired:!0};if(error.code==="schedule_already_exists")return{reason:AGENT_REASON.SCHEDULE_ALREADY_EXISTS,message:context.name?`Schedule ${context.namespace}/${context.name} already exists. Choose a different name or update the existing schedule.`:"The schedule already exists. Choose a different name or update the existing schedule.",retryable:!1};if(error.code==="schedule_completed")return{reason:AGENT_REASON.SCHEDULE_COMPLETED,message:context.name?`Schedule ${context.namespace}/${context.name} has completed and can't be modified. Delete it or create a new schedule.`:"The schedule has completed and can't be modified. Delete it or create a new schedule.",retryable:!1};if(error.code==="static_schedule"){let schedule=context.name?`${quoteArg(context.name)} --namespace ${quoteArg(context.namespace)}`:void 0;return{reason:AGENT_REASON.STATIC_SCHEDULE,message:context.name?`Static schedule ${context.namespace}/${context.name} can't be updated or deleted. Enable or disable it instead.`:"Static schedules can't be updated or deleted. Enable or disable them instead.",retryable:!1,...schedule&&{next:[{command:buildCommandWithGlobalFlags(client.argv,`schedules enable ${schedule}`,void 0,{excludeFlags:["--yes"]}),when:"Enable the static schedule"},{command:buildCommandWithGlobalFlags(client.argv,`schedules disable ${schedule}`,void 0,{excludeFlags:["--yes"]}),when:"Disable the static schedule"}]}}}if(error.code==="invalid_cron_expression")return{reason:AGENT_REASON.INVALID_CRON_EXPRESSION,message:`${apiErrorDetail(error)??"The cron expression is invalid."} Check \`--cron\` and try again.`,retryable:!1};if(error.code==="invalid_jitter")return{reason:AGENT_REASON.INVALID_JITTER,message:apiErrorDetail(error)??"The schedule jitter setting is invalid.",retryable:!1};if(error.code==="jitter_exceeds_cadence")return{reason:AGENT_REASON.JITTER_EXCEEDS_CADENCE,message:`${apiErrorDetail(error)??"The schedule jitter exceeds the interval between runs."} Increase the interval between runs.`,retryable:!1};if(error.code==="single_at_too_soon")return{reason:AGENT_REASON.SINGLE_AT_TOO_SOON,message:`${apiErrorDetail(error)??"The one-time schedule is too soon."} Choose a later value for \`--at\`.`,retryable:!1};if(error.code==="payload_too_large")return{reason:AGENT_REASON.SCHEDULE_PAYLOAD_TOO_LARGE,message:`${apiErrorDetail(error)??"The schedule payload is too large."} Reduce the value passed to \`--payload\` and try again.`,retryable:!1};if(error.code==="payload_store_failed")return{reason:AGENT_REASON.SCHEDULE_PAYLOAD_STORE_FAILED,message:"Failed to store the schedule payload. Try again later.",retryable:!0};if(error.code==="service_unavailable")return{reason:AGENT_REASON.SCHEDULE_SERVICE_UNAVAILABLE,message:"Schedule execution history is temporarily unavailable. Try again later.",retryable:!0};if(error.code==="service_error")return{reason:AGENT_REASON.SCHEDULE_SERVICE_ERROR,message:error.status>=500?"Failed to load schedule execution history. Try again later.":"Failed to load schedule execution history. Choose a shorter time range and try again.",retryable:error.status>=500};if(error.status===400){let detail2=apiErrorDetail(error);return{reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The Schedules API rejected the request.${detail2?` ${detail2}`:""}`,retryable:!1}}if(error.status===401&&error.code==="missing_team_param")return{reason:AGENT_REASON.MISSING_SCOPE,message:"Schedules requires a team project. Run `vercel link` to link a project owned by a team.",retryable:!1,userActionRequired:!0};if(error.status===401){let tokenSource=client.authConfig.tokenSource;return{reason:AGENT_REASON.LOGIN_REQUIRED,message:tokenSource==="env"?"Schedules API authentication failed. Replace VERCEL_TOKEN, or unset it to use your saved login.":tokenSource==="flag"?"Schedules API authentication failed. Replace the token passed to `--token`.":`Schedules API authentication failed. Run ${getCommandName("login")} and try again.`,retryable:!1,userActionRequired:!0}}if(error.status===402){let detail2=apiErrorDetail(error);return{reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message:`Schedules isn't available for this team.${detail2?` ${detail2}`:""} Ask a team owner to review the requirement.`,retryable:!1,userActionRequired:!0}}if(error.status===403&&error.code==="not_enabled"||!context.local&&error.status===404&&(serverMessage==="not found"||serverMessage==="not found."))return{reason:AGENT_REASON.SCHEDULES_NOT_ENABLED,message:"Vercel Schedules is not enabled for this team.",retryable:!1,userActionRequired:!0};if(error.status===403)return{reason:AGENT_REASON.PERMISSION_DENIED,message:"Can't access Schedules with the current credentials and team. Check the token and selected team. If both are correct, ask a team owner for access.",retryable:!1,userActionRequired:!0};if(error.status===404&&(serverMessage==="project not found"||serverMessage==="project not found."))return{reason:AGENT_REASON.PROJECT_NOT_FOUND,message:"The linked project isn't available to this team. Run `vercel link` to update the project link.",retryable:!1,userActionRequired:!0};if(error.status===404&&context.action!=="create"&&context.action!=="list"&&context.name)return{reason:AGENT_REASON.NOT_FOUND,message:`Schedule not found: ${context.namespace}/${context.name}.`,retryable:!1};if(error.status===429){let retryAfterMs=typeof error.retryAfterMs=="number"&&error.retryAfterMs>0?error.retryAfterMs:void 0;return{reason:AGENT_REASON.RATE_LIMITED,message:retryAfterMs===void 0?"The Schedules API request limit was reached. Wait and try again.":`The Schedules API request limit was reached. Try again in ${Math.ceil(retryAfterMs/1e3)} second${retryAfterMs>1e3?"s":""}.`,retryable:!0,...retryAfterMs&&{retryAfterMs}}}if(error.status>=500)return context.action==="invoke"?ambiguousInvokeError(context.local):{reason:AGENT_REASON.API_ERROR,message:context.local?`Local Schedules is unavailable. Check the ${getCommandName("dev")} output and restart the local session if needed.`:"The Schedules API is temporarily unavailable. Try again later.",retryable:!0};let detail=apiErrorDetail(error);return{reason:AGENT_REASON.API_ERROR,message:`Failed to ${requestDescription(context)}.${detail?` ${detail}`:""}`,retryable:!1}}function handleSchedulesApiError(client,error,context){let details=getSchedulesError(client,error,context);return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,...details},1),1):(output_manager_default.fatal(details.message),1)}var import_arg=__toESM(require_arg(),1);var DEFAULT_SCHEDULES_BASE_URL="https://vercel-schedules.com",DEFAULT_SCHEDULE_NAMESPACE="default",DEFAULT_SCHEDULES_LIMIT=20,LocalSchedulesError=class extends Error{constructor(message){super(message),this.name="LocalSchedulesError"}};function sanitizeSchedule(schedule){let{trackId:_trackId,...publicSchedule}=schedule;return publicSchedule}var SchedulesClient=class{constructor(client,options){this.client=client;this.options=options;if("local"in options){if(!isLocalSchedulesOrigin(options.local.origin))throw new LocalSchedulesError("Local Schedules requires an HTTP 127.0.0.1 endpoint with a valid port.");this.baseUrl=new URL(options.local.origin);return}this.baseUrl=new URL(options.baseUrl??process.env.VERCEL_SCHEDULE_BASE_URL??DEFAULT_SCHEDULES_BASE_URL)}get localOrigin(){return"local"in this.options?this.baseUrl.origin:void 0}async request(path3,options={}){let url=new URL(path3,this.baseUrl);if("local"in this.options){let session=this.options.local;url.searchParams.set("projectId",session.projectId);let response;try{response=await directFetch(url.href,{method:options.method??"GET",headers:{authorization:`Bearer ${DEV_RESOURCE_TOKEN}`,[LOCAL_SCHEDULES_SESSION_HEADER]:session.id,...options.body===void 0?{}:{"content-type":"application/json"}},body:options.body===void 0?void 0:JSON.stringify(options.body),redirect:"manual",signal:AbortSignal.timeout(3e4)})}catch{throw new LocalSchedulesError(`Could not reach local Schedules at ${session.origin}. No cloud request was made.`)}if(response.status>=300&&response.status<400||response.headers.get(LOCAL_SCHEDULES_SESSION_HEADER)!==session.id)throw await response.body?.cancel(),new LocalSchedulesError("The local Schedules session changed or returned an unexpected response. Restart vercel dev and try again.");if(!response.ok)throw await responseError(response);if(response.status===204)return;try{return await response.json()}catch{throw new LocalSchedulesError("The local Schedules session returned an invalid JSON response.")}}return url.searchParams.set("projectId",this.options.projectId),this.client.fetch(url.href,{...options,accountId:this.options.ownerId,useCurrentTeam:!1})}schedulePath(name,namespace,suffix=""){return`${`/v1/schedules/${encodeURIComponent(name)}${suffix}`}?${new URLSearchParams({namespace})}`}async create({target,...params}){let schedule=await this.request("/v1/schedules",{method:"POST",bailOn429:!0,body:{...params,target:{type:"queue",topic:target.topic}}});return sanitizeSchedule(schedule)}async get({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){let schedule=await this.request(this.schedulePath(name,namespace),{bailOn429:!0});return sanitizeSchedule(schedule)}async list({namespace=DEFAULT_SCHEDULE_NAMESPACE,cursor:cursor2,limit=DEFAULT_SCHEDULES_LIMIT}={}){let searchParams=new URLSearchParams({namespace,limit:String(limit)});cursor2!==void 0&&searchParams.set("cursor",cursor2);let response=await this.request(`/v1/schedules?${searchParams}`,{bailOn429:!0});return{data:response.data.map(sanitizeSchedule),cursor:response.cursor}}async update({name,namespace=DEFAULT_SCHEDULE_NAMESPACE,target,...params}){let schedule=await this.request(this.schedulePath(name,namespace),{method:"PATCH",bailOn429:!0,body:{...params,...target?{target:{type:"queue",topic:target.topic}}:{}}});return sanitizeSchedule(schedule)}async delete({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){return this.request(this.schedulePath(name,namespace),{method:"DELETE",bailOn429:!0})}async enable({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){return this.changeState(name,namespace,"enable")}async disable({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){return this.changeState(name,namespace,"disable")}async changeState(name,namespace,action){let schedule=await this.request(this.schedulePath(name,namespace,`/${action}`),{method:"POST",bailOn429:!0});return sanitizeSchedule(schedule)}async invoke({name,namespace=DEFAULT_SCHEDULE_NAMESPACE}){await this.request(this.schedulePath(name,namespace,"/invoke"),{method:"POST",bailOn429:!0,retry:{retries:0}})}async listExecutions({name,namespace=DEFAULT_SCHEDULE_NAMESPACE,cursor:cursor2,limit=DEFAULT_SCHEDULES_LIMIT,sort,from,to,executionId}){if("local"in this.options)throw new LocalSchedulesError("Execution history is not supported for local Schedules. Inspect the vercel dev output for local executions.");let searchParams=new URLSearchParams({limit:String(limit)});return cursor2!==void 0&&searchParams.set("cursor",cursor2),sort!==void 0&&searchParams.set("sort",sort),from!==void 0&&searchParams.set("from",String(from)),to!==void 0&&searchParams.set("to",String(to)),executionId!==void 0&&searchParams.set("executionId",executionId),this.request(`${this.schedulePath(name,namespace,"/executions")}&${searchParams}`,{bailOn429:!0})}};async function createLocalSchedulesClient(client){let sessions=await readLocalSchedulesSessions(client.cwd);if(sessions.length===0)throw new LocalSchedulesError("No running local Schedules session was found in this directory. Start vercel dev here, or use --cwd to select its project directory.");if(sessions.length>1)throw new LocalSchedulesError("Multiple vercel dev sessions are running in this directory. Stop the extra instances before using schedules --local.");let[session]=sessions,response;try{response=await directFetch(`${session.origin}/v1/info`,{headers:{authorization:`Bearer ${DEV_RESOURCE_TOKEN}`,[LOCAL_SCHEDULES_SESSION_HEADER]:session.id},redirect:"manual",signal:AbortSignal.timeout(2e3)})}catch{throw new LocalSchedulesError(`The local Schedules session at ${session.origin} is unavailable. Restart vercel dev in this directory. No cloud request was made.`)}if(!response.ok||response.headers.get(LOCAL_SCHEDULES_SESSION_HEADER)!==session.id)throw await response.body?.cancel(),new LocalSchedulesError("The local Schedules session is stale, not ready, or incompatible. Restart vercel dev in this directory.");let info;try{info=await response.json()}catch{throw new LocalSchedulesError("The local Schedules session returned invalid metadata. Restart vercel dev in this directory.")}if(!info||info.version!==session.version||info.id!==session.id||info.pid!==session.pid||info.cwd!==session.cwd||info.origin!==session.origin||info.projectId!==session.projectId)throw new LocalSchedulesError("The local Schedules session does not match this project instance. Restart vercel dev in this directory.");return new SchedulesClient(client,{local:session})}var IDENTIFIER_PATTERN2=/^[0-9A-Za-z][0-9A-Za-z._-]*$/;var QUEUE_TOPIC_PATTERN=/^[A-Za-z0-9_-]+$/;var LOCAL_MINUTE_DATETIME_PATTERN=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/,LOCAL_SECOND_DATETIME_PATTERN=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/,TIMEZONE_PATTERN=/^[A-Za-z][A-Za-z0-9_+/-]*$/;function validateScheduleIdentifier(value,label){if(value.length>256)return`${label} must be at most 256 characters.`;if(!IDENTIFIER_PATTERN2.test(value))return`${label} must start with a letter or number and can contain only letters, numbers, periods, underscores, and hyphens.`}function validateScheduleTimezone(value){if(value!==void 0){if(value.length===0||value.length>50||!TIMEZONE_PATTERN.test(value))return"`--timezone` must be a valid IANA timezone.";try{new Intl.DateTimeFormat("en-US",{timeZone:value})}catch{return"`--timezone` must be a valid IANA timezone."}}}function validateScheduleQueueTopic(value){if(value.length>256||!QUEUE_TOPIC_PATTERN.test(value))return"`--topic` must be 1\u2013256 characters and contain only letters, numbers, underscores, and hyphens."}function normalizeLocalDatetime(value){let secondMatch=LOCAL_SECOND_DATETIME_PATTERN.exec(value);if(secondMatch){if(secondMatch[6]!=="00")return}else LOCAL_MINUTE_DATETIME_PATTERN.test(value)&&(value=`${value}:00`);let match=LOCAL_SECOND_DATETIME_PATTERN.exec(value);if(!match)return;let[,yearValue,monthValue,dayValue,hourValue,minuteValue]=match,year=Number(yearValue),month=Number(monthValue),day=Number(dayValue),hour=Number(hourValue),minute=Number(minuteValue),daysInMonth=[31,year%4===0&&(year%100!==0||year%400===0)?29:28,31,30,31,30,31,31,30,31,30,31];if(!(month<1||month>12||day<1||day>daysInMonth[month-1]||hour<0||hour>23||minute<0||minute>59))return value}function parseScheduleExpression(cron,at,required){if(cron!==void 0&&at!==void 0)return{valid:!1,error:"Use either `--cron` or `--at`, not both."};if(cron!==void 0)return cron.trim()?{valid:!0,value:{type:"cron",cron}}:{valid:!1,error:"`--cron` cannot be empty."};if(at!==void 0){let normalized=normalizeLocalDatetime(at);return normalized===void 0?{valid:!1,error:"`--at` must use YYYY-MM-DDTHH:mm or YYYY-MM-DDTHH:mm:00 without a timezone suffix. Use `--timezone` to select the timezone."}:{valid:!0,value:{type:"single",at:normalized}}}return required?{valid:!1,error:"A schedule expression is required. Use `--cron` or `--at`."}:{valid:!0,value:void 0}}function validateJitter(value){return!Number.isInteger(value)||value<1||value>15?{valid:!1,error:"`--jitter` must be an integer between 1 and 15."}:{valid:!0,value}}function parseCreateJitter(value){return value===void 0?{valid:!0,value:void 0}:validateJitter(value)}function parseUpdateJitter(value){return value===void 0?{valid:!0,value:void 0}:value==="none"?{valid:!0,value:null}:validateJitter(Number(value))}function parseSchedulePayload(value){if(value===void 0)return{valid:!0,value:void 0};try{return{valid:!0,value:JSON.parse(value)}}catch{return{valid:!1,error:"`--payload` must be valid JSON."}}}var routingFlags=getFlagsSpecification([...schedulesCommand.subcommands.flatMap(command2=>[...command2.options]),...executionsListSubcommand.options]);function takeScheduleCommand(argv){let positional;try{positional=(0,import_arg.default)({...arg_common_default(),...routingFlags},{argv,stopAtPositional:!0})._}catch(error){throw parseArguments(argv,routingFlags),error}let index=argv.length-positional.length;return{command:positional[0],args:[...argv.slice(0,index),...argv.slice(index+1)]}}function scheduleCommandWithGlobalFlags(client,usage2){let local=!1;try{local=!!parseArguments(client.argv.slice(2),routingFlags,{permissive:!0}).flags["--local"]}catch{}return buildCommandWithGlobalFlags(client.argv,`${usage2}${local?" --local":""}`,void 0,{excludeFlags:local?["--scope","--team"]:[]})}function validateLocalScheduleFlags(client,flags,usage2){if(!flags["--local"])return;let originalFlags;try{originalFlags=parseArguments(client.argv.slice(2),routingFlags,{permissive:!0}).flags}catch(error){return invalidScheduleArguments(client,usage2,error instanceof Error?error.message:String(error))}for(let flag of["--scope","--team","--token"])if(flags[flag]!==void 0||originalFlags[flag]!==void 0)return invalidScheduleArguments(client,usage2,`Cannot combine --local with ${flag}. Local Schedules uses the current vercel dev session.`)}function unsupportedLocalExecutions(client){let message="Execution history is not supported for local Schedules. Inspect the vercel dev output for local executions.";return client.nonInteractive?outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message,retryable:!1}):output_manager_default.fatal(message),1}async function resolveSchedulesClient(client,local){if(local)try{let schedules=await createLocalSchedulesClient(client);return output_manager_default.log(`Using local Schedules at ${schedules.localOrigin}`),schedules}catch(error){let message=error instanceof Error?error.message:String(error);return client.nonInteractive?outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message,retryable:!1}):output_manager_default.fatal(message),1}let link=await requireProjectContext(client,"schedules");return typeof link=="number"?link:new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id})}function invalidScheduleArguments(client,usage2,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:scheduleCommandWithGlobalFlags(client,usage2),when:"Provide valid schedule arguments"}]}),2):(output_manager_default.fatal(message),2)}function validateScheduleNameAndNamespace(client,args,namespaceFlag,usage2){let[name]=args;if(!name)return{valid:!1,exitCode:invalidScheduleArguments(client,usage2,"A schedule name is required")};if(args.length!==1)return{valid:!1,exitCode:invalidScheduleArguments(client,usage2,`Expected one schedule name. Usage: ${getCommandName(usage2)}`)};let namespace=namespaceFlag??DEFAULT_SCHEDULE_NAMESPACE,nameError=validateScheduleIdentifier(name,"Schedule name"),namespaceError=validateScheduleIdentifier(namespace,"Namespace"),error=nameError??namespaceError;return error?{valid:!1,exitCode:invalidScheduleArguments(client,usage2,error)}:{valid:!0,name,namespace}}function parseScheduleOutput(client,usage2,flags){let result=validateJsonOutput(flags);return result.valid?{valid:!0,json:result.jsonOutput||client.nonInteractive}:{valid:!1,exitCode:invalidScheduleArguments(client,usage2,result.error)}}function writeScheduleMutationResult(client,schedule,message,json){if(json){let value=client.nonInteractive?{status:AGENT_STATUS.OK,schedule,message}:schedule;client.stdout.write(`${JSON.stringify(value,null,2)}
1321
+ `)}else output_manager_default.success(message);return 0}async function runScheduleAction(client,argv,action){let subcommand=action==="enable"?enableSubcommand4:action==="disable"?disableSubcommand4:invokeSubcommand,usage2=`schedules ${action} <name>`,telemetry2=new SchedulesActionTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(subcommand.options))}catch(error){return invalidScheduleArguments(client,usage2,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,usage2);if(conflict!==void 0)return conflict;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],usage2);if(!identifier.valid)return identifier.exitCode;let outputMode=parseScheduleOutput(client,usage2,flags);if(!outputMode.valid)return outputMode.exitCode;let schedulesClient=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedulesClient=="number")return schedulesClient;let presentParticiple=action==="enable"?"Enabling":action==="disable"?"Disabling":"Invoking";outputMode.json||output_manager_default.spinner(`${presentParticiple} schedule\u2026`);let schedule;try{action==="enable"?schedule=await schedulesClient.enable(identifier):action==="disable"?schedule=await schedulesClient.disable(identifier):await schedulesClient.invoke(identifier)}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action,local:flags["--local"],name:identifier.name,namespace:identifier.namespace})}output_manager_default.stopSpinner();let message=`${action==="enable"?"Enabled":action==="disable"?"Disabled":"Invoked"} schedule ${identifier.namespace}/${identifier.name}.`;if(schedule)return writeScheduleMutationResult(client,schedule,message,outputMode.json);if(outputMode.json){let result=client.nonInteractive?{status:AGENT_STATUS.OK,message}:{invoked:!0,name:identifier.name,namespace:identifier.namespace};client.stdout.write(`${JSON.stringify(result,null,2)}
1322
+ `)}else output_manager_default.success(message);return 0}var SchedulesCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionCron(cron){cron&&this.trackCliOption({option:"cron",value:this.redactedValue})}trackCliOptionAt(at){at&&this.trackCliOption({option:"at",value:this.redactedValue})}trackCliOptionTimezone(timezone){timezone&&this.trackCliOption({option:"timezone",value:timezone})}trackCliOptionJitter(jitter){jitter!==void 0&&this.trackCliOption({option:"jitter",value:String(jitter)})}trackCliOptionTopic(topic){topic&&this.trackCliOption({option:"topic",value:this.redactedValue})}trackCliOptionPayload(payload){payload!==void 0&&this.trackCliOption({option:"payload",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE13="schedules create <name> --cron <expression> --topic <topic>";async function create6(client,argv){let telemetry2=new SchedulesCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(createSubcommand6.options))}catch(error){return invalidScheduleArguments(client,USAGE13,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,USAGE13);if(conflict!==void 0)return conflict;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionCron(flags["--cron"]),telemetry2.trackCliOptionAt(flags["--at"]),telemetry2.trackCliOptionTimezone(flags["--timezone"]),telemetry2.trackCliOptionJitter(flags["--jitter"]),telemetry2.trackCliOptionTopic(flags["--topic"]),telemetry2.trackCliOptionPayload(flags["--payload"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],USAGE13);if(!identifier.valid)return identifier.exitCode;let expression=parseScheduleExpression(flags["--cron"],flags["--at"],!0);if(!expression.valid)return invalidScheduleArguments(client,USAGE13,expression.error);let topic=flags["--topic"];if(!topic?.trim())return invalidScheduleArguments(client,USAGE13,"A target queue topic is required. Use `--topic`.");let topicError=validateScheduleQueueTopic(topic);if(topicError)return invalidScheduleArguments(client,USAGE13,topicError);let jitter=parseCreateJitter(flags["--jitter"]);if(!jitter.valid)return invalidScheduleArguments(client,USAGE13,jitter.error);let timezoneError=validateScheduleTimezone(flags["--timezone"]);if(timezoneError)return invalidScheduleArguments(client,USAGE13,timezoneError);let payload=parseSchedulePayload(flags["--payload"]);if(!payload.valid)return invalidScheduleArguments(client,USAGE13,payload.error);let outputMode=parseScheduleOutput(client,USAGE13,flags);if(!outputMode.valid)return outputMode.exitCode;let schedules=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedules=="number")return schedules;outputMode.json||output_manager_default.spinner("Creating schedule\u2026");let schedule;try{schedule=await schedules.create({name:identifier.name,namespace:identifier.namespace,expression:expression.value,target:{topic},...flags["--timezone"]!==void 0&&{timezone:flags["--timezone"]},...jitter.value!==void 0&&{jitter:jitter.value},...flags["--payload"]!==void 0&&{payload:payload.value}})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"create",local:flags["--local"],name:identifier.name,namespace:identifier.namespace})}return output_manager_default.stopSpinner(),writeScheduleMutationResult(client,schedule,`Created schedule ${identifier.namespace}/${identifier.name}.`,outputMode.json)}var SchedulesDeleteTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE14="schedules delete <name> --yes";async function deleteSchedule(client,argv){let telemetry2=new SchedulesDeleteTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(deleteSubcommand4.options))}catch(error){return invalidScheduleArguments(client,USAGE14,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,USAGE14);if(conflict!==void 0)return conflict;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliFlagYes(flags["--yes"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],USAGE14);if(!identifier.valid)return identifier.exitCode;let outputMode=parseScheduleOutput(client,USAGE14,flags);if(!outputMode.valid)return outputMode.exitCode;let skipConfirmation=flags["--yes"]??!1;if(client.nonInteractive&&!skipConfirmation)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:flags["--local"]?"Deleting a local schedule requires confirmation. Re-run with `--yes`.":"Deleting a schedule requires confirmation. Re-run with `--yes`.",next:[{command:flags["--local"]?scheduleCommandWithGlobalFlags(client,`schedules delete ${quoteArg(identifier.name)} --namespace ${quoteArg(identifier.namespace)} --yes`):buildCommandWithYes(client.argv)}]},1),1;let schedules=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedules=="number")return schedules;let target=flags["--local"]?"local schedule":"schedule";if(!skipConfirmation&&!await client.input.confirm(`Delete ${target} ${identifier.namespace}/${identifier.name}? This cannot be undone.`,!1))return output_manager_default.log("Canceled"),0;outputMode.json||output_manager_default.spinner("Deleting schedule\u2026");let deletedScheduleId;try{deletedScheduleId=(await schedules.delete(identifier)).scheduleId}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"delete",local:flags["--local"],name:identifier.name,namespace:identifier.namespace})}output_manager_default.stopSpinner();let message=`Deleted ${target} ${identifier.namespace}/${identifier.name}.`;if(outputMode.json){let deleted={name:identifier.name,namespace:identifier.namespace,scheduleId:deletedScheduleId},result=client.nonInteractive?{status:AGENT_STATUS.OK,deleted,message}:{deleted:!0,...deleted};client.stdout.write(`${JSON.stringify(result,null,2)}
1323
+ `)}else output_manager_default.success(message);return 0}var import_chalk292=__toESM(require_source(),1);var SchedulesListExecutionsTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionSort(sort){sort&&this.trackCliOption({option:"sort",value:sort})}trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionFrom(from){from!==void 0&&this.trackCliOption({option:"from",value:String(from)})}trackCliOptionTo(to){to!==void 0&&this.trackCliOption({option:"to",value:String(to)})}trackCliOptionExecutionId(executionId){executionId&&this.trackCliOption({option:"execution-id",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE15="schedules executions list <name>",MAX_EXECUTION_RANGE_MS=30*864e5;function invalidArguments3(client,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,USAGE15),when:"List schedule executions with valid options"}]}),2):(output_manager_default.fatal(message),2)}function capitalize2(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function formatExecutionStatus(status6){return status6==="succeeded"?import_chalk292.default.green("Succeeded"):status6==="failed"?import_chalk292.default.red("Failed"):import_chalk292.default.gray("Unavailable")}function formatPercentage3(value){return value===null?import_chalk292.default.gray("-"):`${Number((value*100).toFixed(2))}%`}function formatDuration3(value){return value===null?import_chalk292.default.gray("-"):value<1e3?`${Math.round(value)}ms`:value<6e4?`${Number((value/1e3).toFixed(1))}s`:`${Number((value/6e4).toFixed(1))}m`}function formatInvocationCount(value){return`${value} invocation${value===1?"":"s"}`}function executionMetrics(metrics2){return[formatAlignedLabel("Range",`${formatDate(metrics2.from)} \u2013 ${formatDate(metrics2.to)}`),formatAlignedLabel("Recorded",formatInvocationCount(metrics2.recordedInvocations)),formatAlignedLabel("Failed",formatInvocationCount(metrics2.failedInvocations)),formatAlignedLabel("Error Rate",formatPercentage3(metrics2.errorRate)),formatAlignedLabel("Avg Duration",formatDuration3(metrics2.averageDurationMs))].join(`
1328
1324
  `)}function executionTable(executions2){let rows=[["Execution ID","Status","Source","Fired At"].map(header=>import_chalk292.default.dim(header)),...executions2.map(execution=>[import_chalk292.default.bold(execution.executionId),formatExecutionStatus(execution.status),execution.invokeSource?capitalize2(execution.invokeSource):import_chalk292.default.gray("-"),execution.firedAt===null?import_chalk292.default.gray("-"):formatDate(execution.firedAt)])];return table(rows,{hsep:3}).split(`
1329
1325
  `).map(line2=>line2.trimEnd()).join(`
1330
- `).replace(/^/gm," ")}function nextPageCommand(client,name,namespace,options){let parts=["schedules executions list",quoteArg(name)];return options.namespaceWasExplicit&&parts.push(`--namespace ${quoteArg(namespace)}`),options.limitWasExplicit&&parts.push(`--limit ${options.limit}`),options.sortWasExplicit&&options.sort&&parts.push(`--sort ${options.sort}`),options.from!==void 0&&options.to!==void 0&&parts.push(`--since ${new Date(options.from).toISOString()} --until ${new Date(options.to).toISOString()}`),options.executionId!==void 0&&parts.push(`--execution-id ${quoteArg(options.executionId)}`),parts.push(`--next ${quoteArg(options.cursor)}`),buildCommandWithGlobalFlags(client.argv,parts.join(" "))}function resolveTimeBound(flag,value,legacyFlag,legacyValue){if(value!==void 0&&legacyValue!==void 0)return{error:`Pass only one of \`${flag}\` or \`${legacyFlag}\`. (\`${legacyFlag}\` is deprecated.)`};if(legacyValue!==void 0)return!Number.isInteger(legacyValue)||legacyValue<0?{error:`\`${legacyFlag}\` must be a non-negative integer (Unix milliseconds).`}:{value:legacyValue};if(value===void 0)return{};if(!value.trim())return{error:`\`${flag}\` cannot be empty.`};let result=validateTimeBound(value);return result.valid?{value:result.value?.getTime()}:{error:`\`${flag}\`: ${result.message}`}}function resolveTimeRange2(since,until,legacyFrom,legacyTo){let now=Date.now(),start=resolveTimeBound("--since",since,"--from",legacyFrom);if("error"in start)return start;let end=resolveTimeBound("--until",until,"--to",legacyTo);if("error"in end)return end;let sinceName=legacyFrom!==void 0?"--from":"--since",untilName=legacyTo!==void 0?"--to":"--until",from=start.value;if(from===void 0)return end.value!==void 0?{error:`\`${untilName}\` requires \`--since\`.`}:{};let to=end.value??now;return to<=from?{error:`\`${untilName}\` must be after \`${sinceName}\`.`}:to-from>MAX_EXECUTION_RANGE_MS?{error:"The time range must be at most 30 days."}:{from,to}}async function list24(client,argv){let telemetry2=new SchedulesListExecutionsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(executionsListSubcommand.options))}catch(error){return invalidArguments3(client,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs,[name]=args,namespace=flags["--namespace"]??DEFAULT_SCHEDULE_NAMESPACE,limitResult=validateIntegerRangeWithDefault(flags["--limit"],{flag:"--limit",min:1,max:100,defaultValue:20}),sort=flags["--sort"],executionId=flags["--execution-id"];if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionLimit(flags["--limit"]),telemetry2.trackCliOptionNext(flags["--next"]),telemetry2.trackCliOptionSort(sort),telemetry2.trackCliOptionSince(flags["--since"]),telemetry2.trackCliOptionUntil(flags["--until"]),telemetry2.trackCliOptionFrom(flags["--from"]),telemetry2.trackCliOptionTo(flags["--to"]),telemetry2.trackCliOptionExecutionId(executionId),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),!name)return invalidArguments3(client,`A schedule name is required. Usage: ${getCommandName(USAGE15)}`);if(args.length!==1)return invalidArguments3(client,`Expected one schedule name. Usage: ${getCommandName(USAGE15)}`);let nameError=validateScheduleIdentifier(name,"Schedule name");if(nameError)return invalidArguments3(client,nameError);let namespaceError=validateScheduleIdentifier(namespace,"Namespace");if(namespaceError)return invalidArguments3(client,namespaceError);if(!limitResult.valid)return invalidArguments3(client,limitResult.message);if(sort!==void 0&&sort!=="asc"&&sort!=="desc")return invalidArguments3(client,"`--sort` must be `asc` or `desc`.");let timeRange=resolveTimeRange2(flags["--since"],flags["--until"],flags["--from"],flags["--to"]);if("error"in timeRange)return invalidArguments3(client,timeRange.error);let{from,to}=timeRange;if(flags["--from"]!==void 0&&output_manager_default.warn("`--from` is deprecated, please use `--since` instead"),flags["--to"]!==void 0&&output_manager_default.warn("`--to` is deprecated, please use `--until` instead"),executionId!==void 0&&!executionId.trim())return invalidArguments3(client,"`--execution-id` cannot be empty.");let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidArguments3(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;asJson||output_manager_default.spinner(`Fetching executions for ${namespace}/${name}\u2026`);let result;try{result=await new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}).listExecutions({name,namespace,cursor:flags["--next"],limit:limitResult.value,...sort!==void 0?{sort}:{},...from!==void 0?{from,to}:{},...executionId!==void 0?{executionId}:{}})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"list-executions",name,namespace})}if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,data:result.data,cursor:result.cursor,metrics:result.metrics,message:`Found ${result.data.length} execution${result.data.length===1?"":"s"} for schedule ${namespace}/${name}.`}:result;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1326
+ `).replace(/^/gm," ")}function nextPageCommand(client,name,namespace,options){let parts=["schedules executions list",quoteArg(name)];return options.namespaceWasExplicit&&parts.push(`--namespace ${quoteArg(namespace)}`),options.limitWasExplicit&&parts.push(`--limit ${options.limit}`),options.sortWasExplicit&&options.sort&&parts.push(`--sort ${options.sort}`),options.from!==void 0&&options.to!==void 0&&parts.push(`--since ${new Date(options.from).toISOString()} --until ${new Date(options.to).toISOString()}`),options.executionId!==void 0&&parts.push(`--execution-id ${quoteArg(options.executionId)}`),parts.push(`--next ${quoteArg(options.cursor)}`),buildCommandWithGlobalFlags(client.argv,parts.join(" "))}function resolveTimeBound(flag,value,legacyFlag,legacyValue){if(value!==void 0&&legacyValue!==void 0)return{error:`Pass only one of \`${flag}\` or \`${legacyFlag}\`. (\`${legacyFlag}\` is deprecated.)`};if(legacyValue!==void 0)return!Number.isInteger(legacyValue)||legacyValue<0?{error:`\`${legacyFlag}\` must be a non-negative integer (Unix milliseconds).`}:{value:legacyValue};if(value===void 0)return{};if(!value.trim())return{error:`\`${flag}\` cannot be empty.`};let result=validateTimeBound(value);return result.valid?{value:result.value?.getTime()}:{error:`\`${flag}\`: ${result.message}`}}function resolveTimeRange2(since,until,legacyFrom,legacyTo){let now=Date.now(),start=resolveTimeBound("--since",since,"--from",legacyFrom);if("error"in start)return start;let end=resolveTimeBound("--until",until,"--to",legacyTo);if("error"in end)return end;let sinceName=legacyFrom!==void 0?"--from":"--since",untilName=legacyTo!==void 0?"--to":"--until",from=start.value;if(from===void 0)return end.value!==void 0?{error:`\`${untilName}\` requires \`--since\`.`}:{};let to=end.value??now;return to<=from?{error:`\`${untilName}\` must be after \`${sinceName}\`.`}:to-from>MAX_EXECUTION_RANGE_MS?{error:"The time range must be at most 30 days."}:{from,to}}async function list24(client,argv){let telemetry2=new SchedulesListExecutionsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(executionsListSubcommand.options))}catch(error){return invalidArguments3(client,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,USAGE15);if(conflict!==void 0)return conflict;if(flags["--local"])return unsupportedLocalExecutions(client);let[name]=args,namespace=flags["--namespace"]??DEFAULT_SCHEDULE_NAMESPACE,limitResult=validateIntegerRangeWithDefault(flags["--limit"],{flag:"--limit",min:1,max:100,defaultValue:DEFAULT_SCHEDULES_LIMIT}),sort=flags["--sort"],executionId=flags["--execution-id"];if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionLimit(flags["--limit"]),telemetry2.trackCliOptionNext(flags["--next"]),telemetry2.trackCliOptionSort(sort),telemetry2.trackCliOptionSince(flags["--since"]),telemetry2.trackCliOptionUntil(flags["--until"]),telemetry2.trackCliOptionFrom(flags["--from"]),telemetry2.trackCliOptionTo(flags["--to"]),telemetry2.trackCliOptionExecutionId(executionId),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),!name)return invalidArguments3(client,`A schedule name is required. Usage: ${getCommandName(USAGE15)}`);if(args.length!==1)return invalidArguments3(client,`Expected one schedule name. Usage: ${getCommandName(USAGE15)}`);let nameError=validateScheduleIdentifier(name,"Schedule name");if(nameError)return invalidArguments3(client,nameError);let namespaceError=validateScheduleIdentifier(namespace,"Namespace");if(namespaceError)return invalidArguments3(client,namespaceError);if(!limitResult.valid)return invalidArguments3(client,limitResult.message);if(sort!==void 0&&sort!=="asc"&&sort!=="desc")return invalidArguments3(client,"`--sort` must be `asc` or `desc`.");let timeRange=resolveTimeRange2(flags["--since"],flags["--until"],flags["--from"],flags["--to"]);if("error"in timeRange)return invalidArguments3(client,timeRange.error);let{from,to}=timeRange;if(flags["--from"]!==void 0&&output_manager_default.warn("`--from` is deprecated, please use `--since` instead"),flags["--to"]!==void 0&&output_manager_default.warn("`--to` is deprecated, please use `--until` instead"),executionId!==void 0&&!executionId.trim())return invalidArguments3(client,"`--execution-id` cannot be empty.");let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidArguments3(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,schedules=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedules=="number")return schedules;asJson||output_manager_default.spinner(`Fetching executions for ${namespace}/${name}\u2026`);let result;try{result=await schedules.listExecutions({name,namespace,cursor:flags["--next"],limit:limitResult.value,...sort!==void 0?{sort}:{},...from!==void 0?{from,to}:{},...executionId!==void 0?{executionId}:{}})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"list-executions",local:flags["--local"],name,namespace})}if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,data:result.data,cursor:result.cursor,metrics:result.metrics,message:`Found ${result.data.length} execution${result.data.length===1?"":"s"} for schedule ${namespace}/${name}.`}:result;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1331
1327
  `),0}if(output_manager_default.print(`Executions for schedule ${import_chalk292.default.bold(`${namespace}/${name}`)}
1332
1328
 
1333
1329
  ${executionMetrics(result.metrics)}
@@ -1337,17 +1333,17 @@ ${executionMetrics(result.metrics)}
1337
1333
  ${executionTable(result.data)}
1338
1334
  `),result.cursor){let next=nextPageCommand(client,name,namespace,{namespaceWasExplicit:flags["--namespace"]!==void 0,limit:limitResult.value,limitWasExplicit:flags["--limit"]!==void 0,sort,sortWasExplicit:flags["--sort"]!==void 0,from,to,executionId,cursor:result.cursor});output_manager_default.print(`
1339
1335
  More executions are available. Run ${cmd(next)} to continue.
1340
- `)}return 0}var COMMAND_CONFIG58={list:getCommandAliases(executionsListSubcommand)};async function executions(client,args,telemetry2){let parsedArgs;try{parsedArgs=parseArguments(args,getFlagsSpecification(executionsSubcommand.options),{permissive:!0})}catch(error){return printError(error),2}let{subcommand,args:subArgs,subcommandOriginal}=getSubcommand7(parsedArgs.args,COMMAND_CONFIG58),needHelp=parsedArgs.flags["--help"];function printHelp(command2,nested){return output_manager_default.print(help(command2,{parent:nested?{...schedulesCommand,name:"schedules executions"}:schedulesCommand,columns:client.stderr.columns})),0}return subcommand?subcommand==="list"?needHelp?(telemetry2.trackCliFlagHelp("schedules",`executions:${subcommandOriginal}`),printHelp(executionsListSubcommand,!0)):(telemetry2.trackCliSubcommandExecutionsList(subcommandOriginal),list24(client,subArgs)):(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG58)),printHelp(executionsSubcommand,!1)):needHelp?(telemetry2.trackCliFlagHelp("schedules","executions"),output_manager_default.print(help(executionsSubcommand,{parent:schedulesCommand,columns:client.stderr.columns})),0):(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG58)),output_manager_default.print(help(executionsSubcommand,{parent:schedulesCommand,columns:client.stderr.columns})),2)}var import_chalk293=__toESM(require_source(),1);function formatScheduleTarget(target){switch(target.type){case"queue":return`Queue: ${target.topic}`;case"path":return`Path: ${target.path}`;case"function":return`Function: ${target.function}`}}function formatScheduleTargetDetail(target){switch(target.type){case"queue":return`${target.topic} ${import_chalk293.default.gray("(Queue)")}`;case"path":return`${target.path} ${import_chalk293.default.gray("(Path)")}`;case"function":return`${target.function} ${import_chalk293.default.gray("(Function)")}`}}var SchedulesGetTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE16="schedules inspect <name>";function invalidArguments4(client,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,USAGE16),when:"Provide a valid schedule name"}]}),2):(output_manager_default.fatal(message),2)}function formatExpression(expression){return expression.type==="cron"?expression.cron:expression.at}function capitalize3(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function printSchedule(schedule){printAlignedLabel("Name",schedule.name),printAlignedLabel("Namespace",schedule.namespace),printAlignedLabel("State",capitalize3(schedule.state)),printAlignedLabel("Source",capitalize3(schedule.source)),printAlignedLabel("Type",capitalize3(schedule.expression.type)),printAlignedLabel("Expression",formatExpression(schedule.expression)),printAlignedLabel("Timezone",schedule.timezone),schedule.jitter!==void 0&&printAlignedLabel("Jitter",`${schedule.jitter} minute${schedule.jitter===1?"":"s"}`),printAlignedLabel("Target",formatScheduleTargetDetail(schedule.target)),printAlignedLabel("Schedule ID",schedule.scheduleId),printAlignedLabel("Project ID",schedule.projectId),printAlignedLabel("Owner ID",schedule.ownerId),printAlignedLabel("Created",formatDate(schedule.createdAt)),printAlignedLabel("Updated",formatDate(schedule.updatedAt))}async function get3(client,argv){let telemetry2=new SchedulesGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(getSubcommand2.options))}catch(error){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),2):(output_manager_default.fatal(error instanceof Error?error.message:String(error)),2)}let{args,flags}=parsedArgs,[name]=args,namespace=flags["--namespace"]??DEFAULT_SCHEDULE_NAMESPACE;if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),!name)return invalidArguments4(client,"A schedule name is required");if(args.length!==1)return invalidArguments4(client,`Expected one schedule name. Usage: ${getCommandName(USAGE16)}`);let nameError=validateScheduleIdentifier(name,"Schedule name");if(nameError)return invalidArguments4(client,nameError);let namespaceError=validateScheduleIdentifier(namespace,"Namespace");if(namespaceError)return invalidArguments4(client,namespaceError);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidArguments4(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;asJson||output_manager_default.spinner("Fetching schedule\u2026");let schedule;try{schedule=await new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}).get({name,namespace})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"get",name,namespace})}if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,schedule,message:`Schedule ${namespace}/${name} found.`}:schedule;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1341
- `),0}return printSchedule(schedule),0}var import_chalk294=__toESM(require_source(),1);var SchedulesListTelemetryClient=class extends TelemetryClient{trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE17="schedules list";function invalidArguments5(client,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,USAGE17),when:"List schedules with valid options"}]}),2):(output_manager_default.fatal(message),2)}function capitalize4(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function formatExpression2(expression){return expression.type==="cron"?expression.cron:expression.at}function scheduleTable(schedules){let rows=[["Name","State","Type","Expression","Target"].map(header=>import_chalk294.default.dim(header)),...schedules.map(schedule=>[import_chalk294.default.bold(schedule.name),capitalize4(schedule.state),capitalize4(schedule.expression.type),formatExpression2(schedule.expression),formatScheduleTarget(schedule.target)])];return table(rows,{hsep:3}).split(`
1336
+ `)}return 0}var COMMAND_CONFIG58={list:getCommandAliases(executionsListSubcommand)};async function executions(client,args,telemetry2){let parsedArgs,commandArgs;try{commandArgs=takeScheduleCommand(args),parsedArgs=parseArguments(commandArgs.args,getFlagsSpecification(executionsListSubcommand.options))}catch(error){return client.nonInteractive?invalidScheduleArguments(client,"schedules executions",error instanceof Error?error.message:String(error)):(printError(error),2)}let{subcommand,subcommandOriginal}=getSubcommand7(commandArgs.command?[commandArgs.command]:[],COMMAND_CONFIG58),subArgs=commandArgs.args,needHelp=parsedArgs.flags["--help"],conflict=validateLocalScheduleFlags(client,parsedArgs.flags,"schedules executions");if(conflict!==void 0)return conflict;if(parsedArgs.flags["--local"]&&!needHelp)return unsupportedLocalExecutions(client);function printHelp(command2,nested){return output_manager_default.print(help(command2,{parent:nested?{...schedulesCommand,name:"schedules executions"}:schedulesCommand,columns:client.stderr.columns})),0}return subcommand?subcommand==="list"?needHelp?(telemetry2.trackCliFlagHelp("schedules",`executions:${subcommandOriginal}`),printHelp(executionsListSubcommand,!0)):(telemetry2.trackCliSubcommandExecutionsList(subcommandOriginal),list24(client,subArgs)):(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG58)),printHelp(executionsSubcommand,!1)):needHelp?(telemetry2.trackCliFlagHelp("schedules","executions"),output_manager_default.print(help(executionsSubcommand,{parent:schedulesCommand,columns:client.stderr.columns})),0):(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG58)),output_manager_default.print(help(executionsSubcommand,{parent:schedulesCommand,columns:client.stderr.columns})),2)}var import_chalk293=__toESM(require_source(),1);function formatScheduleTarget(target){switch(target.type){case"queue":return`Queue: ${target.topic}`;case"path":return`Path: ${target.path}`;case"function":return`Function: ${target.function}`}}function formatScheduleTargetDetail(target){switch(target.type){case"queue":return`${target.topic} ${import_chalk293.default.gray("(Queue)")}`;case"path":return`${target.path} ${import_chalk293.default.gray("(Path)")}`;case"function":return`${target.function} ${import_chalk293.default.gray("(Function)")}`}}var SchedulesGetTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE16="schedules inspect <name>";function invalidArguments4(client,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:scheduleCommandWithGlobalFlags(client,USAGE16),when:"Provide a valid schedule name"}]}),2):(output_manager_default.fatal(message),2)}function formatExpression(expression){return expression.type==="cron"?expression.cron:expression.at}function capitalize3(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function printSchedule(schedule){printAlignedLabel("Name",schedule.name),printAlignedLabel("Namespace",schedule.namespace),printAlignedLabel("State",capitalize3(schedule.state)),printAlignedLabel("Source",capitalize3(schedule.source)),printAlignedLabel("Type",capitalize3(schedule.expression.type)),printAlignedLabel("Expression",formatExpression(schedule.expression)),printAlignedLabel("Timezone",schedule.timezone),schedule.jitter!==void 0&&printAlignedLabel("Jitter",`${schedule.jitter} minute${schedule.jitter===1?"":"s"}`),printAlignedLabel("Target",formatScheduleTargetDetail(schedule.target)),printAlignedLabel("Schedule ID",schedule.scheduleId),printAlignedLabel("Project ID",schedule.projectId),printAlignedLabel("Owner ID",schedule.ownerId),printAlignedLabel("Created",formatDate(schedule.createdAt)),printAlignedLabel("Updated",formatDate(schedule.updatedAt))}async function get3(client,argv){let telemetry2=new SchedulesGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(getSubcommand2.options))}catch(error){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),2):(output_manager_default.fatal(error instanceof Error?error.message:String(error)),2)}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,USAGE16);if(conflict!==void 0)return conflict;let[name]=args,namespace=flags["--namespace"]??DEFAULT_SCHEDULE_NAMESPACE;if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),!name)return invalidArguments4(client,"A schedule name is required");if(args.length!==1)return invalidArguments4(client,`Expected one schedule name. Usage: ${getCommandName(USAGE16)}`);let nameError=validateScheduleIdentifier(name,"Schedule name");if(nameError)return invalidArguments4(client,nameError);let namespaceError=validateScheduleIdentifier(namespace,"Namespace");if(namespaceError)return invalidArguments4(client,namespaceError);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidArguments4(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,schedules=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedules=="number")return schedules;asJson||output_manager_default.spinner("Fetching schedule\u2026");let schedule;try{schedule=await schedules.get({name,namespace})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"get",local:flags["--local"],name,namespace})}if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,schedule,message:`Schedule ${namespace}/${name} found.`}:schedule;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1337
+ `),0}return printSchedule(schedule),0}var import_chalk294=__toESM(require_source(),1);var SchedulesListTelemetryClient=class extends TelemetryClient{trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE17="schedules list";function invalidArguments5(client,message){return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:scheduleCommandWithGlobalFlags(client,USAGE17),when:"List schedules with valid options"}]}),2):(output_manager_default.fatal(message),2)}function capitalize4(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function formatExpression2(expression){return expression.type==="cron"?expression.cron:expression.at}function scheduleTable(schedules){let rows=[["Name","State","Type","Expression","Target"].map(header=>import_chalk294.default.dim(header)),...schedules.map(schedule=>[import_chalk294.default.bold(schedule.name),capitalize4(schedule.state),capitalize4(schedule.expression.type),formatExpression2(schedule.expression),formatScheduleTarget(schedule.target)])];return table(rows,{hsep:3}).split(`
1342
1338
  `).map(line2=>line2.trimEnd()).join(`
1343
- `).replace(/^/gm," ")}function nextPageCommand2(client,namespace,namespaceWasExplicit,limit,limitWasExplicit,cursor2){let parts=["schedules list"];return namespaceWasExplicit&&parts.push(`--namespace ${quoteArg(namespace)}`),limitWasExplicit&&parts.push(`--limit ${limit}`),parts.push(`--next ${quoteArg(cursor2)}`),buildCommandWithGlobalFlags(client.argv,parts.join(" "))}async function list25(client,argv){let telemetry2=new SchedulesListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand21.options))}catch(error){return invalidArguments5(client,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs,namespace=flags["--namespace"]??DEFAULT_SCHEDULE_NAMESPACE,limitResult=validateIntegerRangeWithDefault(flags["--limit"],{flag:"--limit",min:1,max:100,defaultValue:20});if(telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionLimit(flags["--limit"]),telemetry2.trackCliOptionNext(flags["--next"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),args.length!==0)return invalidArguments5(client,`Expected no arguments. Usage: ${getCommandName(USAGE17)}`);let namespaceError=validateScheduleIdentifier(namespace,"Namespace");if(namespaceError)return invalidArguments5(client,namespaceError);if(!limitResult.valid)return invalidArguments5(client,limitResult.message);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidArguments5(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;asJson||output_manager_default.spinner("Fetching schedules\u2026");let result;try{result=await new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}).list({namespace,cursor:flags["--next"],limit:limitResult.value})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"list",namespace})}if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,data:result.data,cursor:result.cursor,message:`Found ${result.data.length} schedule${result.data.length===1?"":"s"} in namespace ${namespace}.`}:result;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1339
+ `).replace(/^/gm," ")}function nextPageCommand2(client,namespace,namespaceWasExplicit,limit,limitWasExplicit,cursor2){let parts=["schedules list"];return namespaceWasExplicit&&parts.push(`--namespace ${quoteArg(namespace)}`),limitWasExplicit&&parts.push(`--limit ${limit}`),parts.push(`--next ${quoteArg(cursor2)}`),scheduleCommandWithGlobalFlags(client,parts.join(" "))}async function list25(client,argv){let telemetry2=new SchedulesListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand21.options))}catch(error){return invalidArguments5(client,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,USAGE17);if(conflict!==void 0)return conflict;let namespace=flags["--namespace"]??DEFAULT_SCHEDULE_NAMESPACE,limitResult=validateIntegerRangeWithDefault(flags["--limit"],{flag:"--limit",min:1,max:100,defaultValue:DEFAULT_SCHEDULES_LIMIT});if(telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionLimit(flags["--limit"]),telemetry2.trackCliOptionNext(flags["--next"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]),args.length!==0)return invalidArguments5(client,`Expected no arguments. Usage: ${getCommandName(USAGE17)}`);let namespaceError=validateScheduleIdentifier(namespace,"Namespace");if(namespaceError)return invalidArguments5(client,namespaceError);if(!limitResult.valid)return invalidArguments5(client,limitResult.message);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidArguments5(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,schedules=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedules=="number")return schedules;asJson||output_manager_default.spinner("Fetching schedules\u2026");let result;try{result=await schedules.list({namespace,cursor:flags["--next"],limit:limitResult.value})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"list",local:flags["--local"],namespace})}if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,data:result.data,cursor:result.cursor,message:`Found ${result.data.length} schedule${result.data.length===1?"":"s"} in namespace ${namespace}.`}:result;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1344
1340
  `),0}if(result.data.length===0)return output_manager_default.print(`No schedules found in namespace ${namespace}.
1345
1341
  `),0;if(output_manager_default.print(`Schedules in namespace ${import_chalk294.default.bold(namespace)}
1346
1342
 
1347
1343
  ${scheduleTable(result.data)}
1348
1344
  `),result.cursor){let next=nextPageCommand2(client,namespace,flags["--namespace"]!==void 0,limitResult.value,flags["--limit"]!==void 0,result.cursor);output_manager_default.print(`
1349
1345
  More schedules are available. Run ${cmd(next)} to continue.
1350
- `)}return 0}var SchedulesUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionCron(cron){cron&&this.trackCliOption({option:"cron",value:this.redactedValue})}trackCliOptionAt(at){at&&this.trackCliOption({option:"at",value:this.redactedValue})}trackCliOptionTimezone(timezone){timezone&&this.trackCliOption({option:"timezone",value:timezone})}trackCliOptionJitter(jitter){jitter!==void 0&&this.trackCliOption({option:"jitter",value:jitter})}trackCliOptionTopic(topic){topic&&this.trackCliOption({option:"topic",value:this.redactedValue})}trackCliOptionPayload(payload){payload!==void 0&&this.trackCliOption({option:"payload",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE18="schedules update <name> [options]";async function update7(client,argv){let telemetry2=new SchedulesUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(updateSubcommand9.options))}catch(error){return invalidScheduleArguments(client,USAGE18,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionCron(flags["--cron"]),telemetry2.trackCliOptionAt(flags["--at"]),telemetry2.trackCliOptionTimezone(flags["--timezone"]),telemetry2.trackCliOptionJitter(flags["--jitter"]),telemetry2.trackCliOptionTopic(flags["--topic"]),telemetry2.trackCliOptionPayload(flags["--payload"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],USAGE18);if(!identifier.valid)return identifier.exitCode;let expression=parseScheduleExpression(flags["--cron"],flags["--at"],!1);if(!expression.valid)return invalidScheduleArguments(client,USAGE18,expression.error);let jitter=parseUpdateJitter(flags["--jitter"]);if(!jitter.valid)return invalidScheduleArguments(client,USAGE18,jitter.error);let timezoneError=validateScheduleTimezone(flags["--timezone"]);if(timezoneError)return invalidScheduleArguments(client,USAGE18,timezoneError);let payload=parseSchedulePayload(flags["--payload"]);if(!payload.valid)return invalidScheduleArguments(client,USAGE18,payload.error);if(!(expression.value!==void 0||flags["--timezone"]!==void 0||flags["--jitter"]!==void 0||flags["--topic"]!==void 0||flags["--payload"]!==void 0))return invalidScheduleArguments(client,USAGE18,"At least one update option is required.");if(flags["--topic"]!==void 0&&!flags["--topic"].trim())return invalidScheduleArguments(client,USAGE18,"`--topic` cannot be empty.");if(flags["--topic"]!==void 0){let topicError=validateScheduleQueueTopic(flags["--topic"]);if(topicError)return invalidScheduleArguments(client,USAGE18,topicError)}let outputMode=parseScheduleOutput(client,USAGE18,flags);if(!outputMode.valid)return outputMode.exitCode;let link=await requireProjectContext(client,"schedules");if(typeof link=="number")return link;outputMode.json||output_manager_default.spinner("Updating schedule\u2026");let schedule;try{schedule=await new SchedulesClient(client,{ownerId:link.org.id,projectId:link.project.id}).update({name:identifier.name,namespace:identifier.namespace,...expression.value!==void 0&&{expression:expression.value},...flags["--timezone"]!==void 0&&{timezone:flags["--timezone"]},...flags["--jitter"]!==void 0&&{jitter:jitter.value},...flags["--topic"]!==void 0&&{target:{topic:flags["--topic"]}},...flags["--payload"]!==void 0&&{payload:payload.value}})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"update",name:identifier.name,namespace:identifier.namespace})}return output_manager_default.stopSpinner(),writeScheduleMutationResult(client,schedule,`Updated schedule ${identifier.namespace}/${identifier.name}.`,outputMode.json)}var COMMAND_CONFIG59={create:getCommandAliases(createSubcommand6),delete:getCommandAliases(deleteSubcommand4),disable:getCommandAliases(disableSubcommand4),enable:getCommandAliases(enableSubcommand4),executions:getCommandAliases(executionsSubcommand),inspect:getCommandAliases(getSubcommand2),invoke:getCommandAliases(invokeSubcommand),list:getCommandAliases(listSubcommand21),update:getCommandAliases(updateSubcommand9)};async function main32(client){let parsedArgs,flagsSpecification=getFlagsSpecification(schedulesCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry2=new SchedulesTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG59),needHelp=parsedArgs.flags["--help"];function printHelp(command2,parent){return output_manager_default.print(help(command2,{parent:parent??(command2===schedulesCommand?void 0:schedulesCommand),columns:client.stderr.columns})),0}if(!subcommand)return parsedArgs.args.length>1&&output_manager_default.fatal(getInvalidSubcommand(COMMAND_CONFIG59)),needHelp&&telemetry2.trackCliFlagHelp("schedules"),printHelp(schedulesCommand);if(needHelp&&subcommand!=="executions")return telemetry2.trackCliFlagHelp("schedules",subcommandOriginal),printHelp(subcommand==="create"?createSubcommand6:subcommand==="delete"?deleteSubcommand4:subcommand==="disable"?disableSubcommand4:subcommand==="enable"?enableSubcommand4:subcommand==="inspect"?getSubcommand2:subcommand==="invoke"?invokeSubcommand:subcommand==="update"?updateSubcommand9:listSubcommand21);if(subcommand==="inspect")return telemetry2.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"schedules get","schedules inspect"),get3(client,args);if(subcommand==="list")return telemetry2.trackCliSubcommandList(subcommandOriginal),list25(client,args);if(subcommand==="executions"){telemetry2.trackCliSubcommandExecutions(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return executions(client,nestedArgs,telemetry2)}return subcommand==="create"?(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create6(client,args)):subcommand==="delete"?(telemetry2.trackCliSubcommandDelete(subcommandOriginal),deleteSchedule(client,args)):subcommand==="update"?(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update7(client,args)):subcommand==="enable"?(telemetry2.trackCliSubcommandEnable(subcommandOriginal),runScheduleAction(client,args,"enable")):subcommand==="disable"?(telemetry2.trackCliSubcommandDisable(subcommandOriginal),runScheduleAction(client,args,"disable")):(telemetry2.trackCliSubcommandInvoke(subcommandOriginal),runScheduleAction(client,args,"invoke"))}var SecurityTelemetryClient=class extends TelemetryClient{trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}};var import_chalk295=__toESM(require_source(),1);var SecurityCheckTelemetryClient=class extends TelemetryClient{trackCliArgumentCheck(checks2){checks2.length>0&&this.trackCliArgument({arg:"check",value:checks2.join(",")})}trackCliFlagFindings(findings){findings&&this.trackCliFlag("findings")}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var SECURITY_CHECKS=[{slug:"members-no-mfa",description:"Team members without multi-factor authentication",risk:"high"},{slug:"members-too-many-owners",description:"Team owners to review",risk:"high"},{slug:"pats-no-expiration",description:"PATs that never expire",risk:"high"},{slug:"env-vars-creds-instead-of-oidc",description:"Long-lived credentials where OIDC is available",risk:"high"},{slug:"depl-no-git-fork-protection",description:"Projects without Git fork deploy prevention",risk:"high"},{slug:"proj-no-preview-depl-protection",description:"Projects without preview deployment protection",risk:"high"},{slug:"env-vars-non-sensitive",description:"Environment variables not marked Sensitive",risk:"medium"},{slug:"env-vars-non-sensitive-stale",description:"Environment variables older than 90 days",risk:"medium"},{slug:"env-vars-exposed-web-app-fwk",description:"Environment variables exposed via web application framework",risk:"medium"}];function isKnownCheck(slug){return SECURITY_CHECKS.some(check4=>check4.slug===slug)}async function check2(client,argv){let telemetry2=new SecurityCheckTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(checkSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args:checks2,flags:opts}=parsedArgs,unknown=checks2.filter(slug=>!isKnownCheck(slug));if(unknown.length>0){let message=`Unknown check${unknown.length===1?"":"s"}: ${unknown.join(", ")}. Valid slugs: ${SECURITY_CHECKS.map(check4=>check4.slug).join(", ")}`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"security check <slug>"),when:"Re-run with a valid check slug (replace placeholder)"},{command:buildCommandWithGlobalFlags(client.argv,"security check --help"),when:"See all flags and examples"}]}),output_manager_default.error(`Unknown check${unknown.length===1?"":"s"}: ${unknown.join(", ")}. Valid slugs:
1346
+ `)}return 0}var SchedulesUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionNamespace(namespace){namespace&&this.trackCliOption({option:"namespace",value:this.redactedValue})}trackCliOptionCron(cron){cron&&this.trackCliOption({option:"cron",value:this.redactedValue})}trackCliOptionAt(at){at&&this.trackCliOption({option:"at",value:this.redactedValue})}trackCliOptionTimezone(timezone){timezone&&this.trackCliOption({option:"timezone",value:timezone})}trackCliOptionJitter(jitter){jitter!==void 0&&this.trackCliOption({option:"jitter",value:jitter})}trackCliOptionTopic(topic){topic&&this.trackCliOption({option:"topic",value:this.redactedValue})}trackCliOptionPayload(payload){payload!==void 0&&this.trackCliOption({option:"payload",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagLocal(local){local&&this.trackCliFlag("local")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE18="schedules update <name> [options]";async function update7(client,argv){let telemetry2=new SchedulesUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(updateSubcommand9.options))}catch(error){return invalidScheduleArguments(client,USAGE18,error instanceof Error?error.message:String(error))}let{args,flags}=parsedArgs;telemetry2.trackCliFlagLocal(flags["--local"]);let conflict=validateLocalScheduleFlags(client,flags,USAGE18);if(conflict!==void 0)return conflict;telemetry2.trackCliArgumentName(args[0]),telemetry2.trackCliOptionNamespace(flags["--namespace"]),telemetry2.trackCliOptionCron(flags["--cron"]),telemetry2.trackCliOptionAt(flags["--at"]),telemetry2.trackCliOptionTimezone(flags["--timezone"]),telemetry2.trackCliOptionJitter(flags["--jitter"]),telemetry2.trackCliOptionTopic(flags["--topic"]),telemetry2.trackCliOptionPayload(flags["--payload"]),telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let identifier=validateScheduleNameAndNamespace(client,args,flags["--namespace"],USAGE18);if(!identifier.valid)return identifier.exitCode;let expression=parseScheduleExpression(flags["--cron"],flags["--at"],!1);if(!expression.valid)return invalidScheduleArguments(client,USAGE18,expression.error);let jitter=parseUpdateJitter(flags["--jitter"]);if(!jitter.valid)return invalidScheduleArguments(client,USAGE18,jitter.error);let timezoneError=validateScheduleTimezone(flags["--timezone"]);if(timezoneError)return invalidScheduleArguments(client,USAGE18,timezoneError);let payload=parseSchedulePayload(flags["--payload"]);if(!payload.valid)return invalidScheduleArguments(client,USAGE18,payload.error);if(!(expression.value!==void 0||flags["--timezone"]!==void 0||flags["--jitter"]!==void 0||flags["--topic"]!==void 0||flags["--payload"]!==void 0))return invalidScheduleArguments(client,USAGE18,"At least one update option is required.");if(flags["--topic"]!==void 0&&!flags["--topic"].trim())return invalidScheduleArguments(client,USAGE18,"`--topic` cannot be empty.");if(flags["--topic"]!==void 0){let topicError=validateScheduleQueueTopic(flags["--topic"]);if(topicError)return invalidScheduleArguments(client,USAGE18,topicError)}let outputMode=parseScheduleOutput(client,USAGE18,flags);if(!outputMode.valid)return outputMode.exitCode;let schedules=await resolveSchedulesClient(client,flags["--local"]);if(typeof schedules=="number")return schedules;outputMode.json||output_manager_default.spinner("Updating schedule\u2026");let schedule;try{schedule=await schedules.update({name:identifier.name,namespace:identifier.namespace,...expression.value!==void 0&&{expression:expression.value},...flags["--timezone"]!==void 0&&{timezone:flags["--timezone"]},...flags["--jitter"]!==void 0&&{jitter:jitter.value},...flags["--topic"]!==void 0&&{target:{topic:flags["--topic"]}},...flags["--payload"]!==void 0&&{payload:payload.value}})}catch(error){return output_manager_default.stopSpinner(),handleSchedulesApiError(client,error,{action:"update",local:flags["--local"],name:identifier.name,namespace:identifier.namespace})}return output_manager_default.stopSpinner(),writeScheduleMutationResult(client,schedule,`Updated schedule ${identifier.namespace}/${identifier.name}.`,outputMode.json)}var COMMAND_CONFIG59={create:getCommandAliases(createSubcommand6),delete:getCommandAliases(deleteSubcommand4),disable:getCommandAliases(disableSubcommand4),enable:getCommandAliases(enableSubcommand4),executions:getCommandAliases(executionsSubcommand),inspect:getCommandAliases(getSubcommand2),invoke:getCommandAliases(invokeSubcommand),list:getCommandAliases(listSubcommand21),update:getCommandAliases(updateSubcommand9)};async function main32(client){let parsedArgs,commandArgs,selectedCommand;try{let group=takeScheduleCommand(client.argv.slice(2));commandArgs=takeScheduleCommand(group.args),selectedCommand=schedulesCommand.subcommands.find(command2=>getCommandAliases(command2).includes(commandArgs.command)),parsedArgs=parseArguments(commandArgs.args,getFlagsSpecification(selectedCommand?.options??schedulesCommand.options),{permissive:selectedCommand?.name==="executions"})}catch(error){return client.nonInteractive?invalidScheduleArguments(client,"schedules",error instanceof Error?error.message:String(error)):(printError(error),2)}let telemetry2=new SchedulesTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal}=getSubcommand7(commandArgs.command?[commandArgs.command]:[],COMMAND_CONFIG59),args=commandArgs.args,needHelp=parsedArgs.flags["--help"];(!subcommand||needHelp||subcommand==="executions")&&telemetry2.trackCliFlagLocal(parsedArgs.flags["--local"]);let conflict=validateLocalScheduleFlags(client,parsedArgs.flags,"schedules");if(conflict!==void 0)return conflict;function printHelp(command2,parent){return output_manager_default.print(help(command2,{parent:parent??(command2===schedulesCommand?void 0:schedulesCommand),columns:client.stderr.columns})),0}return subcommand?needHelp&&subcommand!=="executions"?(telemetry2.trackCliFlagHelp("schedules",subcommandOriginal),printHelp(subcommand==="create"?createSubcommand6:subcommand==="delete"?deleteSubcommand4:subcommand==="disable"?disableSubcommand4:subcommand==="enable"?enableSubcommand4:subcommand==="inspect"?getSubcommand2:subcommand==="invoke"?invokeSubcommand:subcommand==="update"?updateSubcommand9:listSubcommand21)):subcommand==="inspect"?(telemetry2.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"schedules get","schedules inspect"),get3(client,args)):subcommand==="list"?(telemetry2.trackCliSubcommandList(subcommandOriginal),list25(client,args)):subcommand==="executions"?(telemetry2.trackCliSubcommandExecutions(subcommandOriginal),executions(client,args,telemetry2)):subcommand==="create"?(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create6(client,args)):subcommand==="delete"?(telemetry2.trackCliSubcommandDelete(subcommandOriginal),deleteSchedule(client,args)):subcommand==="update"?(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update7(client,args)):subcommand==="enable"?(telemetry2.trackCliSubcommandEnable(subcommandOriginal),runScheduleAction(client,args,"enable")):subcommand==="disable"?(telemetry2.trackCliSubcommandDisable(subcommandOriginal),runScheduleAction(client,args,"disable")):(telemetry2.trackCliSubcommandInvoke(subcommandOriginal),runScheduleAction(client,args,"invoke")):(commandArgs.command&&output_manager_default.fatal(getInvalidSubcommand(COMMAND_CONFIG59)),needHelp&&telemetry2.trackCliFlagHelp("schedules"),printHelp(schedulesCommand))}var SecurityTelemetryClient=class extends TelemetryClient{trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}};var import_chalk295=__toESM(require_source(),1);var SecurityCheckTelemetryClient=class extends TelemetryClient{trackCliArgumentCheck(checks2){checks2.length>0&&this.trackCliArgument({arg:"check",value:checks2.join(",")})}trackCliFlagFindings(findings){findings&&this.trackCliFlag("findings")}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var SECURITY_CHECKS=[{slug:"members-no-mfa",description:"Team members without multi-factor authentication",risk:"high"},{slug:"members-too-many-owners",description:"Team owners to review",risk:"high"},{slug:"pats-no-expiration",description:"PATs that never expire",risk:"high"},{slug:"env-vars-creds-instead-of-oidc",description:"Long-lived credentials where OIDC is available",risk:"high"},{slug:"depl-no-git-fork-protection",description:"Projects without Git fork deploy prevention",risk:"high"},{slug:"proj-no-preview-depl-protection",description:"Projects without preview deployment protection",risk:"high"},{slug:"env-vars-non-sensitive",description:"Environment variables not marked Sensitive",risk:"medium"},{slug:"env-vars-non-sensitive-stale",description:"Environment variables older than 90 days",risk:"medium"},{slug:"env-vars-exposed-web-app-fwk",description:"Environment variables exposed via web application framework",risk:"medium"}];function isKnownCheck(slug){return SECURITY_CHECKS.some(check4=>check4.slug===slug)}async function check2(client,argv){let telemetry2=new SecurityCheckTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(checkSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args:checks2,flags:opts}=parsedArgs,unknown=checks2.filter(slug=>!isKnownCheck(slug));if(unknown.length>0){let message=`Unknown check${unknown.length===1?"":"s"}: ${unknown.join(", ")}. Valid slugs: ${SECURITY_CHECKS.map(check4=>check4.slug).join(", ")}`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"security check <slug>"),when:"Re-run with a valid check slug (replace placeholder)"},{command:buildCommandWithGlobalFlags(client.argv,"security check --help"),when:"See all flags and examples"}]}),output_manager_default.error(`Unknown check${unknown.length===1?"":"s"}: ${unknown.join(", ")}. Valid slugs:
1351
1347
  ${SECURITY_CHECKS.map(check4=>check4.slug).join(`
1352
1348
  `)}`),2}let limit=opts["--limit"];if(limit!==void 0&&(!Number.isInteger(limit)||limit<1))return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:"`--limit` must be a positive integer.",next:[{command:buildCommandWithGlobalFlags(client.argv,"security check --limit <N>"),when:"Re-run with a positive integer (replace placeholder)"}]}),output_manager_default.error("`--limit` must be a positive integer."),2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;telemetry2.trackCliArgumentCheck(checks2),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagFindings(opts["--findings"]),telemetry2.trackCliOptionLimit(limit),telemetry2.trackCliOptionProject(opts["--project"]),telemetry2.trackCliFlagJson(opts["--json"]);let{team,contextName}=await getScope(client);if(!team)return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_SCOPE,message:"Security checks require a team scope. Run `vercel switch` to select a team.",next:[{command:buildCommandWithGlobalFlags(client.argv,"whoami"),when:"See current user and team"},{command:buildCommandWithGlobalFlags(client.argv,"teams switch"),when:"Switch to a team"}]}),output_manager_default.error(`Security checks require a team scope. Run ${getCommandName("switch")} to select a team.`),1;let params=new URLSearchParams({teamId:team.id,maxSamples:String(limit??100)});for(let slug of checks2)params.append("facets",slug);let project=opts["--project"];project&&params.set("projectIdOrName",project);let dashStamp=stamp_default();output_manager_default.spinner(checks2.length>0?"Computing security checks\u2026":"Computing security report\u2026");let data;try{data=await client.fetch(`/dashboard/security-dashboard?${params}`)}catch(error){output_manager_default.stopSpinner();let status6=isAPIError(error)?error.status:void 0;return outputAgentError(client,{status:"error",reason:status6===401||status6===403?"not_authorized":status6===429?"rate_limited":AGENT_REASON.API_ERROR,message:isAPIError(error)&&error.serverMessage||"The security report request failed.",next:[{command:buildCommandWithGlobalFlags(client.argv,"whoami"),when:"Verify the authenticated user and team"}]}),printError(error),1}if(output_manager_default.stopSpinner(),asJson)return client.stdout.write(`${JSON.stringify(data,null,2)}
1353
1349
  `),0;let rows=SECURITY_CHECKS.filter(check4=>checks2.length===0||checks2.includes(check4.slug)).map(check4=>({check:check4,posture:data.report[check4.slug]})),counts={failing:0,passing:0,muted:0,unavailable:0};for(let{posture}of rows)counts[statusOf(posture)]++;let summary=[`${rows.length} ${rows.length===1?"check":"checks"}`,counts.failing>0&&import_chalk295.default.red(`${counts.failing} failing`),counts.muted>0&&import_chalk295.default.yellow(`${counts.muted} muted`),counts.unavailable>0&&import_chalk295.default.gray(`${counts.unavailable} unavailable`),counts.passing>0&&import_chalk295.default.green(`${counts.passing} passing`)].filter(Boolean).join(" \xB7 ");if(output_manager_default.log(`${summary} under ${import_chalk295.default.bold(contextName)} ${import_chalk295.default.gray(dashStamp())}`),output_manager_default.print(formatSummaryTable(rows).replace(/^(.*)/gm," $1")),output_manager_default.print(`
@@ -1405,7 +1401,7 @@ ${tablePrint}
1405
1401
  `),output_manager_default.log(`To display the next page run ${cmd(nextCmd)}`)}}return 0}var import_chalk312=__toESM(require_source(),1);var import_chalk311=__toESM(require_source(),1);async function inviteUserToTeam(client,teamId,email2){return await client.fetch(`/teams/${encodeURIComponent(teamId)}/members`,{method:"POST",body:{email:email2}})}var import_error_utils24=__toESM(require_dist(),1);var TeamsInviteTelemetryClient=class extends TelemetryClient{trackCliArgumentEmail(values){values&&this.trackCliArgument({arg:"email",value:this.redactedArgumentsLength(values)})}};var validateEmail=data=>email.test(data.trim())||data.length===0,domains=Array.from(new Set(["aol.com","gmail.com","google.com","yahoo.com","ymail.com","hotmail.com","live.com","outlook.com","inbox.com","mail.com","gmx.com","icloud.com"]));async function invite(client,argv,{introMsg="",noopMsg="No changes made"}={}){let{config,telemetryEventStore}=client,{currentTeam:currentTeamId}=config,telemetry2=new TeamsInviteTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inviteSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:emails}=parsedArgs;if(client.nonInteractive&&emails.length===0){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),cmd2=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode at least one email is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to invite teammates (replace <email> with a teammate email)"}]},2),2}output_manager_default.spinner("Fetching teams");let currentTeam=(await getTeams(client)).find(team=>team.id===currentTeamId);output_manager_default.spinner("Fetching user information");let user=await getUser(client);if(domains.push(user.email.split("@")[1]),!currentTeam){let err=`You can't run this command under ${param(user.username||user.email)}.
1406
1402
  Please select a team scope using ${getCommandName("switch")} or use ${cmd("--scope")}`;if(client.nonInteractive){let switchCmd=withGlobalFlags(client,"teams switch <slug>");outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams invite. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1)}return output_manager_default.error(err),1}if(output_manager_default.log(introMsg||`Inviting team members to ${import_chalk311.default.bold(currentTeam.name)}`),telemetry2.trackCliArgumentEmail(emails),emails.length>0){for(let email3 of emails)if(email.test(email3)){output_manager_default.spinner(email3);let elapsed2=stamp_default(),userInfo2=null;try{userInfo2=(await inviteUserToTeam(client,currentTeam.id,email3)).username}catch(err){if(isAPIError(err)&&err.code==="user_not_found"){if(client.nonInteractive){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),retryCmd=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());outputAgentError(client,{status:"error",reason:"user_not_found",message:`No user exists with the email address "${email3}".`,next:[{command:retryCmd}]},1)}return output_manager_default.error(`No user exists with the email address "${email3}".`),1}throw err}output_manager_default.log(`${import_chalk311.default.cyan(chars_default.tick)} ${email3}${userInfo2?` (${userInfo2})`:""} ${elapsed2()}`)}else output_manager_default.log(`${import_chalk311.default.red(`\u2716 ${email3}`)} ${import_chalk311.default.gray("[invalid]")}`);return 0}let inviteUserPrefix="Invite User".padEnd(14),sentEmailPrefix="Sent Email".padEnd(14),hasError=!1,email2;do{email2="";try{email2=await client.input.text({message:`- ${inviteUserPrefix}`,validate:validateEmail})}catch(err){if(!(0,import_error_utils24.isError)(err)||err.message!=="USER_ABORT")throw err}let elapsed2;if(email2){elapsed2=stamp_default(),output_manager_default.spinner(inviteUserPrefix+email2);try{let{username}=await inviteUserToTeam(client,currentTeam.id,email2);if(email2=`${email2}${username?` (${username})`:""} ${elapsed2()}`,emails.push(email2),output_manager_default.log(`${import_chalk311.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email2}`),hasError){hasError=!1,process.stderr.write(eraseLines(emails.length+2)),output_manager_default.log(introMsg||`Inviting team members to ${import_chalk311.default.bold(currentTeam.name)}`);for(let email3 of emails)output_manager_default.log(`${import_chalk311.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}}catch(err){output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2)),output_manager_default.error((0,import_error_utils24.errorToString)(err)),hasError=!0;for(let email3 of emails)output_manager_default.log(`${import_chalk311.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email3}`)}}}while(email2!=="");output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2));let n=emails.length;if(emails.length===0)output_manager_default.log(noopMsg);else{output_manager_default.success(`Invited ${n} teammate${n>1?"s":""}`);for(let email3 of emails)output_manager_default.log(`${import_chalk311.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}return 0}async function createTeam(client,{slug},opts){let fetchOpts={method:"POST",body:{slug},useCurrentTeam:!1,bailOn429:!0};return opts?.signal&&(fetchOpts.signal=opts.signal),await client.fetch("/teams",fetchOpts)}async function patchTeam(client,teamId,payload){let body=await client.fetch(`/teams/${encodeURIComponent(teamId)}`,{method:"PATCH",body:payload});if(body&&typeof body=="object"&&"ok"in body)throw new Error("PATCH /teams returned non-JSON response");return body}var import_error_utils25=__toESM(require_dist(),1);var validateSlug=value=>/^[a-z]+[a-z0-9_-]*$/.test(value),validateName=value=>/^[ a-zA-Z0-9_-]+$/.test(value),teamUrlPrefix="Team URL".padEnd(14)+import_chalk312.default.gray("vercel.com/"),teamNamePrefix="Team Name".padEnd(14),CREATE_TEAM_TIMEOUT_MS=3e4,TIMEOUT_HINT="The request took too long and was cancelled. The team URL may already be taken, or the server may be slow. Try a different slug (e.g. your-company-name) or try again later. Run with `--debug` to see where the request is getting stuck.";function createTeamWithTimeout(client,slug){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),CREATE_TEAM_TIMEOUT_MS);output_manager_default.debug(`Creating team with slug "${slug}" (timeout: ${CREATE_TEAM_TIMEOUT_MS/1e3}s, apiUrl: ${client.apiUrl})`);let promise=createTeam(client,{slug},{signal:controller.signal}).then(result=>(clearTimeout(timeoutId),result)).catch(err=>{throw clearTimeout(timeoutId),err});return Promise.race([promise,new Promise((_,reject)=>setTimeout(()=>reject(new Error("Request timed out.")),CREATE_TEAM_TIMEOUT_MS+500))])}function formatCreateTeamError(err,slug){let isAbort=(0,import_error_utils25.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils25.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429){let retryMs=err.retryAfterMs,retrySec=typeof retryMs=="number"&&retryMs>=0?Math.ceil(retryMs/1e3):0,formatWait=sec=>sec<60?`${sec} seconds`:sec<3600?`${sec} seconds (${Math.ceil(sec/60)} minutes)`:`${sec} seconds (${(sec/3600).toFixed(1)} hours)`;return"Rate limited (429 Too Many Requests). The Vercel API limits how often you can create teams."+(retrySec>0?` Try again in ${formatWait(retrySec)}.`:" Wait a minute or two, then try again.")+" (The API sends when the rate limit window resets, often a fixed time like the next hour or midnight UTC.) Dashboard: https://vercel.com/account."}if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (${import_chalk312.default.cyan(`vercel.com/${slug}`)}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
1407
1403
  `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils25.errorToString)(err)}function formatCreateTeamErrorPlain(err,slug){let isAbort=(0,import_error_utils25.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils25.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429)return formatCreateTeamError(err,slug);if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (vercel.com/${slug}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
1408
- `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils25.errorToString)(err)}var VERCEL_ACCOUNT_BILLING_URL="https://vercel.com/account/billing";function createTeamErrorReason(err){if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase();if(msg.includes("payment"))return"payment_required";if(msg.includes("slug")||msg.includes("cannot be used"))return"slug_unavailable"}return isAPIError(err)&&err.status===429?"rate_limited":(0,import_error_utils25.isError)(err)&&(err.name==="AbortError"||err.message==="Request timed out.")?"timeout":"team_creation_failed"}async function add14(client,argv=[]){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand11.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let slugFlag=parsedArgs.flags["--slug"],nameFlag=parsedArgs.flags["--name"];if(client.nonInteractive){let missing=[];if((!slugFlag||!slugFlag.trim())&&missing.push("--slug"),(!nameFlag||!nameFlag.trim())&&missing.push("--name"),missing.length>0){let fullArgs=client.argv.slice(2),subcommandNames=[addSubcommand11.name,...addSubcommand11.aliases],addIdx=fullArgs.findIndex(arg=>subcommandNames.includes(arg)),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams create --slug <slug> --name <name> ${flagParts.join(" ")}`.trim()),requiredPlain=missing.join(" and "),verb=missing.length===1?"is":"are";outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode ${requiredPlain} ${verb} required. Run: ${cmd2}`,next:[{command:cmd2,when:"to create a team non-interactively"}]},2)}let slug2=slugFlag.trim().toLowerCase(),name2=nameFlag.trim();if(!validateSlug(slug2)){let msg=`Invalid ${param("--slug")}: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. ${param("acme")})`,msgPlain="Invalid --slug: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. acme)";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_slug",message:msgPlain,next:[{command:getCommandNamePlain("teams create --slug <slug> --name <name>")}]},2),output_manager_default.error(msg),2}if(!validateName(name2)){let msg=`Invalid ${param("--name")}: only letters, numbers, spaces, hyphens, and underscores allowed`,msgPlain="Invalid --name: only letters, numbers, spaces, hyphens, and underscores allowed";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_name",message:msgPlain},2),output_manager_default.error(msg),2}output_manager_default.spinner(teamUrlPrefix+slug2);let team2;try{team2=await createTeamWithTimeout(client,slug2)}catch(err){if(output_manager_default.stopSpinner(),client.nonInteractive){let message=formatCreateTeamErrorPlain(err,slug2),reason=createTeamErrorReason(err),next=[];reason==="payment_required"&&(message+=` Add a payment method at ${VERCEL_ACCOUNT_BILLING_URL}, then retry.`,next.push({command:openUrlInBrowserCommand(VERCEL_ACCOUNT_BILLING_URL),when:"To open the billing page in your browser"})),outputAgentError(client,{status:"error",reason,message,...next.length>0&&{next}},1)}return output_manager_default.error(formatCreateTeamError(err,slug2)),1}output_manager_default.stopSpinner(),output_manager_default.spinner(teamNamePrefix+name2);try{let res2=await patchTeam(client,team2.id,{name:name2});team2=Object.assign(team2,res2)}catch(err){return output_manager_default.stopSpinner(),client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_update_failed",message:(0,import_error_utils25.errorToString)(err)},1),output_manager_default.error((0,import_error_utils25.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.config.currentTeam=team2.id,writeToConfigFile(client.config),output_manager_default.success(`Team ${import_chalk312.default.bold(team2.name)} (${import_chalk312.default.cyan(`vercel.com/${slug2}`)}) created.`),0}let slug=slugFlag?.trim().toLowerCase(),team,elapsed2;output_manager_default.log(`Pick a team identifier for its URL (e.g.: ${import_chalk312.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils25.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("Canceled"),0;throw err}elapsed2=stamp_default(),output_manager_default.spinner(teamUrlPrefix+slug);try{team=await createTeamWithTimeout(client,slug)}catch(err){output_manager_default.stopSpinner(),output_manager_default.print(eraseLines(2)),output_manager_default.error(formatCreateTeamError(err,slug)),slug=void 0}}while(!team);output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),output_manager_default.success(`Team created ${elapsed2()}`),output_manager_default.log(`${import_chalk312.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
1404
+ `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils25.errorToString)(err)}var VERCEL_ACCOUNT_BILLING_URL="https://vercel.com/account/billing";function createTeamErrorReason(err){if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase();if(msg.includes("payment"))return"payment_required";if(msg.includes("slug")||msg.includes("cannot be used"))return"slug_unavailable"}return isAPIError(err)&&err.status===429?"rate_limited":(0,import_error_utils25.isError)(err)&&(err.name==="AbortError"||err.message==="Request timed out.")?"timeout":"team_creation_failed"}async function add14(client,argv=[]){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand11.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let slugFlag=parsedArgs.flags["--slug"],nameFlag=parsedArgs.flags["--name"];if(client.nonInteractive){let missing=[];if((!slugFlag||!slugFlag.trim())&&missing.push("--slug"),(!nameFlag||!nameFlag.trim())&&missing.push("--name"),missing.length>0){let fullArgs=client.argv.slice(2),subcommandNames=[addSubcommand11.name,...addSubcommand11.aliases],addIdx=fullArgs.findIndex(arg2=>subcommandNames.includes(arg2)),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams create --slug <slug> --name <name> ${flagParts.join(" ")}`.trim()),requiredPlain=missing.join(" and "),verb=missing.length===1?"is":"are";outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode ${requiredPlain} ${verb} required. Run: ${cmd2}`,next:[{command:cmd2,when:"to create a team non-interactively"}]},2)}let slug2=slugFlag.trim().toLowerCase(),name2=nameFlag.trim();if(!validateSlug(slug2)){let msg=`Invalid ${param("--slug")}: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. ${param("acme")})`,msgPlain="Invalid --slug: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. acme)";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_slug",message:msgPlain,next:[{command:getCommandNamePlain("teams create --slug <slug> --name <name>")}]},2),output_manager_default.error(msg),2}if(!validateName(name2)){let msg=`Invalid ${param("--name")}: only letters, numbers, spaces, hyphens, and underscores allowed`,msgPlain="Invalid --name: only letters, numbers, spaces, hyphens, and underscores allowed";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_name",message:msgPlain},2),output_manager_default.error(msg),2}output_manager_default.spinner(teamUrlPrefix+slug2);let team2;try{team2=await createTeamWithTimeout(client,slug2)}catch(err){if(output_manager_default.stopSpinner(),client.nonInteractive){let message=formatCreateTeamErrorPlain(err,slug2),reason=createTeamErrorReason(err),next=[];reason==="payment_required"&&(message+=` Add a payment method at ${VERCEL_ACCOUNT_BILLING_URL}, then retry.`,next.push({command:openUrlInBrowserCommand(VERCEL_ACCOUNT_BILLING_URL),when:"To open the billing page in your browser"})),outputAgentError(client,{status:"error",reason,message,...next.length>0&&{next}},1)}return output_manager_default.error(formatCreateTeamError(err,slug2)),1}output_manager_default.stopSpinner(),output_manager_default.spinner(teamNamePrefix+name2);try{let res2=await patchTeam(client,team2.id,{name:name2});team2=Object.assign(team2,res2)}catch(err){return output_manager_default.stopSpinner(),client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_update_failed",message:(0,import_error_utils25.errorToString)(err)},1),output_manager_default.error((0,import_error_utils25.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.config.currentTeam=team2.id,writeToConfigFile(client.config),output_manager_default.success(`Team ${import_chalk312.default.bold(team2.name)} (${import_chalk312.default.cyan(`vercel.com/${slug2}`)}) created.`),0}let slug=slugFlag?.trim().toLowerCase(),team,elapsed2;output_manager_default.log(`Pick a team identifier for its URL (e.g.: ${import_chalk312.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils25.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("Canceled"),0;throw err}elapsed2=stamp_default(),output_manager_default.spinner(teamUrlPrefix+slug);try{team=await createTeamWithTimeout(client,slug)}catch(err){output_manager_default.stopSpinner(),output_manager_default.print(eraseLines(2)),output_manager_default.error(formatCreateTeamError(err,slug)),slug=void 0}}while(!team);output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),output_manager_default.success(`Team created ${elapsed2()}`),output_manager_default.log(`${import_chalk312.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
1409
1405
  `),output_manager_default.log("Pick a display name for your team");let name=nameFlag?.trim();try{name=await client.input.text({message:`- ${teamNamePrefix}`,validate:validateName,default:name})}catch(err){if((0,import_error_utils25.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("No name specified"),2;throw err}elapsed2=stamp_default(),output_manager_default.spinner(teamNamePrefix+name);let res=await patchTeam(client,team.id,{name});return output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),team=Object.assign(team,res),output_manager_default.success(`Team name saved ${elapsed2()}`),output_manager_default.log(`${import_chalk312.default.cyan(`${chars_default.tick} `)+teamNamePrefix+team.name}
1410
1406
  `),output_manager_default.spinner("Saving"),client.config.currentTeam=team.id,writeToConfigFile(client.config),output_manager_default.stopSpinner(),await invite(client,[],{introMsg:"Invite your teammates! When done, press enter on an empty field",noopMsg:`You can invite teammates later by running ${getCommandName("teams invite")}`}),0}var import_chalk313=__toESM(require_source(),1);var TeamsSwitchTelemetryClient=class extends TelemetryClient{trackCliArgumentName(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}};var updateCurrentTeam=(config,team)=>{team?config.currentTeam=team.id:delete config.currentTeam,writeToConfigFile(config)};async function warnIfStaleLinkExists(client,newOrgId){let link=null;try{link=await getLinkFromDir(getVercelDirectory(client.cwd))}catch{link=null}!link||link.orgId===newOrgId||output_manager_default.warn("This directory is linked to a project under a different team/scope. Commands like `deploy` will still use the linked project's team. Run `vc link` to re-link.")}async function change(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(switchSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:[desiredSlug]}=parsedArgs;if(client.nonInteractive&&!desiredSlug){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}let{config,telemetryEventStore}=client;new TeamsSwitchTelemetryClient({opts:{store:telemetryEventStore}}).trackCliArgumentName(desiredSlug),output_manager_default.spinner("Fetching teams information");let[user,teams2]=await Promise.all([getUser(client),getTeams(client)]),defaultTeamId=user.version==="northstar"?user.defaultTeamId:void 0,currentTeamId=config.currentTeam||defaultTeamId,personalScopeSelected=!currentTeamId,currentTeam=currentTeamId?teams2.find(team=>team.id===currentTeamId):void 0;if(!personalScopeSelected&&!currentTeam&&output_manager_default.warn("You are no longer a member of the previously selected team. Choose another scope to continue."),!desiredSlug){let teamChoices=teams2.slice(0).sort((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(team=>{let title6=`${team.name} (${team.slug})`,selected=team.id===currentTeam?.id;return selected&&(title6+=` ${import_chalk313.default.bold("(current)")}`),team.limited&&(title6+=` ${emoji("locked")}`),{name:title6,value:team.slug,short:team.slug,selected}}),suffix=personalScopeSelected?` ${import_chalk313.default.bold("(current)")}`:"";user.limited&&(suffix+=` ${emoji("locked")}`);let choices=[...user.version==="northstar"?[]:[{separator:"Personal Account"},{name:`${user.name||user.email} (${user.username})${suffix}`,value:user.username,short:user.username,selected:personalScopeSelected}],{separator:"Teams"},...teamChoices];if(output_manager_default.stopSpinner(),client.nonInteractive){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}desiredSlug=await list(client,{message:"Switch to:",choices,eraseFinalAnswer:!0})}if(!desiredSlug)return output_manager_default.log("No changes made."),0;if(desiredSlug===user.username||desiredSlug===user.email)return user.version==="northstar"?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"personal_scope_not_allowed",message:"You cannot set your Personal Account as the scope in this account type."},1),output_manager_default.error("You cannot set your Personal Account as the scope."),1):personalScopeSelected?(output_manager_default.log("No changes made"),0):(user.limited&&await client.reauthenticate({scope:user.username,teamId:null}),updateCurrentTeam(config),output_manager_default.success(`Your account (${import_chalk313.default.bold(user.username)}) is now active!`),await warnIfStaleLinkExists(client,user.id),0);let newTeam=teams2.find(team=>team.slug===desiredSlug);if(!newTeam)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"scope_not_accessible",message:`You do not have permission to access scope "${desiredSlug}".`,next:[{command:withGlobalFlags(client,"teams list")}]},1),output_manager_default.error(`You do not have permission to access scope ${import_chalk313.default.bold(desiredSlug)}.`),1;if(newTeam.slug===currentTeam?.slug)return output_manager_default.log("No changes made"),0;if(newTeam.limited){let samlEnabled=newTeam.saml?.connection?.state==="active";await client.reauthenticate({teamId:newTeam.id,scope:newTeam.slug,enforced:samlEnabled&&newTeam.saml?.enforced===!0})}return updateCurrentTeam(config,newTeam),output_manager_default.success(`The team ${import_chalk313.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`),await warnIfStaleLinkExists(client,newTeam.id),0}function optionRoot(flagToken){return flagToken.startsWith("--")&&flagToken.includes("=")?`--${flagToken.slice(2).split("=")[0]}`:flagToken}function teamsRequestNextCommand(client){let fullArgs=client.argv.slice(2),reqIdx=fullArgs.findIndex(a=>a==="request"||a==="access-request"),afterRequest=reqIdx>=0?fullArgs.slice(reqIdx+1):[],globalParts=getGlobalFlagsFromArgs(fullArgs),subParts=getSameSubcommandSuggestionFlags(afterRequest),seen=new Set;for(let g of globalParts)seen.add(optionRoot(g));let extras=[];for(let i=0;i<subParts.length;){let a=subParts[i],root=optionRoot(a);if(seen.has(root)){i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(i+=1);continue}seen.add(root),extras.push(a),i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(extras.push(subParts[i]),i+=1)}let base=withGlobalFlags(client,"teams request [userId]");return extras.length===0?base:getCommandNamePlain(`${base} ${extras.join(" ")}`.trim())}function apiFailureReason2(err){return typeof err.code=="string"&&err.code?err.code:typeof err.code=="number"&&Number.isFinite(err.code)?String(err.code):`http_${err.status}`}async function request(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(requestSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1){if(client.nonInteractive){let cmdStr=teamsRequestNextCommand(client);outputAgentError(client,{status:"error",reason:"invalid_arguments",message:"Invalid number of arguments. At most one optional userId is allowed.",next:[{command:cmdStr,when:"to check join-request status (omit userId for the current user)"}]},2)}return output_manager_default.error("Invalid number of arguments. Usage: `vercel teams request [userId]`"),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{currentTeam:teamId}=client.config;if(!teamId){let switchCmd=withGlobalFlags(client,"teams switch <slug>");return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams request. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1),output_manager_default.error(`This command requires a team scope. Run ${cmd("teams switch")} first.`),1}let userId=parsedArgs.args[0],path3=userId?`/v1/teams/${encodeURIComponent(teamId)}/request/${encodeURIComponent(userId)}`:`/v1/teams/${encodeURIComponent(teamId)}/request`,data;try{data=await client.fetch(path3)}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:apiFailureReason2(err),message:err.serverMessage||err.message,next:[{command:teamsRequestNextCommand(client),when:"to retry after resolving the error (same flags and optional userId)"}]},1),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
1411
1407
  `),0):(output_manager_default.log(`Team: ${String(data.teamName??"")} (${String(data.teamSlug??"")})`),output_manager_default.log(`Confirmed: ${String(data.confirmed??"")}`),data.accessRequestedAt!=null&&output_manager_default.log(`Access requested at: ${String(data.accessRequestedAt)}`),data.joinedFrom&&typeof data.joinedFrom=="object"&&output_manager_default.log(`Joined from: ${JSON.stringify(data.joinedFrom)}`),0)}var import_chalk314=__toESM(require_source(),1);function teamMemberPreviewLabel(member){return member.username&&member.email?`${member.username} (${member.email})`:teamMemberLabel(member)}function matchesEmail(first,second){return!!(first&&second&&first.trim().toLowerCase()===second.trim().toLowerCase())}function invoiceRecipientError(invoiceRecipient,departingMember,currentInvoiceRecipient){if(!email.test(invoiceRecipient))return"Enter a valid invoice recipient email address.";if(matchesEmail(invoiceRecipient,departingMember.email)||matchesEmail(invoiceRecipient,currentInvoiceRecipient))return"Choose a different invoice recipient. That address belongs to the team member being removed."}function buildInteractiveRemoveCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams members remove <member>",void 0,{excludeFlags:["--non-interactive"]})}async function membersRemove2(client,argv){let parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification([formatOption,jsonOption]))}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult;function fail2(reason,message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),getExitCodeForReason(reason)):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
@@ -1451,7 +1447,7 @@ Learn more: ${import_chalk317.default.cyan("https://vercel.com/docs/cli/about-te
1451
1447
  `),output_manager_default.debug(String(err))}return output_manager_default.log("Run with --json for full trace data."),0}var import_chalk320=__toESM(require_source(),1);import{z as z5}from"zod";var import_ms41=__toESM(require_ms(),1);import{z as z4}from"zod";var DEFAULT_LIMIT3=100,MAX_LIMIT4=1e3,SPAN_KINDS=["UNSPECIFIED","INTERNAL","SERVER","CLIENT","PRODUCER","CONSUMER"],MAX_RANGE_MS=30*24*60*60*1e3,isoDateTimeSchema=z4.iso.datetime({offset:!0}),timeInputSchema=z4.union([isoDateTimeSchema,z4.iso.date()]),TIME_FORMAT_HINT="Use a duration with units such as 100ms or 30m, an ISO timestamp, or YYYY-MM-DD at midnight UTC.";async function resolveSpanSearchScope(client,project){if(project!==void 0){let scope2=await resolveConfigScope(client,{project});return"exitCode"in scope2?scope2:{ownerId:scope2.teamId,projectIds:[scope2.projectId]}}let scope;try{scope=await getScope(client,{resolveLocalScope:!0})}catch(error){return{exitCode:handleTracingApiError(client,error)}}return scope.isCrossTeamRepo&&!scope.localOrgId&&!scope.explicitScopeProvided&&(!scope.app||scope.user)?{exitCode:invalidArguments(client,"This repository has projects across multiple teams. Pass `--scope <team>` or run from a linked project directory.")}:scope.team?{ownerId:scope.team.id}:{exitCode:invalidArguments(client,"A team scope is required. Pass `--scope <team>` or run `vercel switch <team>`.")}}function parseTime(input,now){let value=input.trim();if(!value)return null;try{let duration=(0,import_ms41.default)(value);if(duration!==void 0&&(duration<=0||!/[a-z]/i.test(value))||duration===void 0&&!timeInputSchema.safeParse(value).success)return null;let date=new Date(duration===void 0?value:now-duration);return Number.isFinite(date.getTime())?date:null}catch{return null}}function buildFilter(flags,spanKind){let clauses=["NOT (service.name:vercel.* AND span.kind:1)"],query=flags["--query"];typeof query=="string"&&clauses.push(`(${query.trim()})`),spanKind!==void 0&&clauses.push(`span.kind:${spanKind}`),flags["--root"]&&clauses.push("span.isRoot:1");let filters=[["--environment","environment"],["--service","service.name"],["--name","span.name"],["--status","span.status.code"],["--deployment-id","deployment.id"],["--request-id","request.id"],["--trace-id","trace.id"],["--span-id","span.id"]];for(let[flag,dimension]of filters){let rawValue=flags[flag];if(typeof rawValue!="string")continue;let value=flag==="--status"?{error:"Error",ok:"Ok",unset:"Unset"}[rawValue]:rawValue.trim();clauses.push(`${dimension}:${JSON.stringify(value)}`)}return clauses.join(" AND ")}function trackSpanQueryOptions(flags,telemetry2){telemetry2.trackCliFlagJson(flags["--json"]),telemetry2.trackCliOptionProject(flags["--project"]),telemetry2.trackCliOptionEnvironment(flags["--environment"]),telemetry2.trackCliOptionService(flags["--service"]),telemetry2.trackCliOptionName(flags["--name"]),telemetry2.trackCliOptionKind(flags["--kind"]),telemetry2.trackCliOptionStatus(flags["--status"]),telemetry2.trackCliOptionDeploymentId(flags["--deployment-id"]),telemetry2.trackCliOptionRequestId(flags["--request-id"]),telemetry2.trackCliOptionTraceId(flags["--trace-id"]),telemetry2.trackCliOptionSpanId(flags["--span-id"]),telemetry2.trackCliFlagRoot(flags["--root"]),telemetry2.trackCliOptionSince(flags["--since"]),telemetry2.trackCliOptionUntil(flags["--until"]),telemetry2.trackCliOptionLimit(flags["--limit"]),telemetry2.trackCliOptionQuery(flags["--query"])}async function resolveSpanQuery(client,flags,telemetry2){let project=flags["--project"],environment=flags["--environment"]?.trim().toLowerCase(),status6=flags["--status"]?.trim().toLowerCase(),query=flags["--query"];if(trackSpanQueryOptions(flags,telemetry2),environment!==void 0&&!["production","preview"].includes(environment))return{exitCode:invalidArguments(client,"`--environment` must be one of: production, preview.")};if(status6!==void 0&&!["error","ok","unset"].includes(status6))return{exitCode:invalidArguments(client,"`--status` must be one of: error, ok, unset.")};for(let flag of["--service","--name","--deployment-id","--request-id","--trace-id","--span-id"])if(flags[flag]!==void 0&&flags[flag]?.trim()==="")return{exitCode:invalidArguments(client,`\`${flag}\` must not be empty.`)};if(query!==void 0&&query.trim()==="")return{exitCode:invalidArguments(client,"`--query` must not be empty.")};let spanKind;if(flags["--kind"]!==void 0){let value=flags["--kind"].trim().toUpperCase();if(spanKind=/^[0-5]$/.test(value)?Number(value):SPAN_KINDS.indexOf(value.replace(/^SPAN_KIND_/,"")),spanKind===-1)return{exitCode:invalidArguments(client,"`--kind` must be one of: UNSPECIFIED (0), INTERNAL (1), SERVER (2), CLIENT (3), PRODUCER (4), CONSUMER (5).")}}let limitResult=validateIntegerRangeWithDefault(flags["--limit"],{flag:"--limit",min:1,max:MAX_LIMIT4,defaultValue:DEFAULT_LIMIT3});if(!limitResult.valid)return{exitCode:invalidArguments(client,limitResult.message)};let now=Date.now(),start=parseTime(flags["--since"]??"1h",now),end=flags["--until"]!==void 0?parseTime(flags["--until"],now):new Date(now);if(!start)return{exitCode:invalidArguments(client,`Invalid time format for \`--since\`. ${TIME_FORMAT_HINT}`)};if(!end)return{exitCode:invalidArguments(client,`Invalid time format for \`--until\`. ${TIME_FORMAT_HINT}`)};if(start.getTime()>=end.getTime())return{exitCode:invalidArguments(client,"`--since` must be earlier than `--until`.")};if(end.getTime()-start.getTime()>MAX_RANGE_MS)return{exitCode:invalidArguments(client,"The requested time range must not exceed 30 days.")};if(now-start.getTime()>MAX_RANGE_MS)return{exitCode:invalidArguments(client,"`--since` must be within the last 30 days.")};let scope=await resolveSpanSearchScope(client,project);return"exitCode"in scope?scope:{scope,timeRange:{start:start.toISOString(),end:end.toISOString()},filter:buildFilter({...flags,"--environment":environment,"--status":status6},spanKind),limit:limitResult.value}}function fetchSpanQuery(client,teamId,request2){let query=new URLSearchParams({teamId});return client.fetch(`/v1/observability/events?${query}`,{method:"POST",headers:{"x-vercel-observability-query-reason":"cli/traces-search"},body:request2,bailOn429:!0})}function handleSpanQueryError(client,err){if(isAPIError(err)){let issues=z4.array(z4.object({path:z4.string(),message:z4.string()})).safeParse(err.issues);if(issues.success&&issues.data.length>0){let details=issues.data.map(issue2=>`${issue2.path}: ${issue2.message}`).join(", ");err.serverMessage=`${err.serverMessage}: ${details}`,(err.status===400||err.status===422)&&issues.data.some(issue2=>issue2.path==="filter")&&(err.serverMessage+=". Filter error positions refer to the generated filter, including CLI-added clauses."),err.message=`${err.serverMessage} (${err.status})`}}return handleTracingApiError(client,err)}var select=["span","resource"],spanSchema=z5.object({span:z5.object({startTime:isoDateTimeSchema,traceId:z5.string(),id:z5.string(),parentSpanId:z5.string().nullable(),isRoot:z5.number(),traceState:z5.string(),name:z5.string(),kind:z5.string(),status:z5.object({code:z5.string(),message:z5.string()}),duration:z5.number(),attributes:z5.record(z5.string(),z5.unknown()),events:z5.array(z5.object({name:z5.string(),timestamp:isoDateTimeSchema,attributes:z5.record(z5.string(),z5.unknown())})).optional(),links:z5.array(z5.object({traceId:z5.string(),spanId:z5.string(),traceState:z5.string(),attributes:z5.record(z5.string(),z5.unknown())})).optional()}).passthrough(),resource:z5.object({attributes:z5.record(z5.string(),z5.unknown())})}),responseSchema=z5.object({events:z5.array(spanSchema),pagination:z5.object({hasMore:z5.boolean(),nextCursor:z5.string().nullable()}),meta:z5.record(z5.string(),z5.unknown())});function formatDuration4(durationMs){if(durationMs===0)return"0ms";if(durationMs<1e-6)return"<1ns";let units=[[1e-6,"ns"],[.001,"\u03BCs"],[1,"ms"],[1e3,"s"],[6e4,"m"],[36e5,"h"],[864e5,"d"]],index=units.length-1;for(;durationMs<units[index][0];)index--;let value=Number((durationMs/units[index][0]).toFixed(1));return index<units.length-1&&value>=Math.round(units[index+1][0]/units[index][0])&&(index++,value=Number((durationMs/units[index][0]).toFixed(1))),`${value}${units[index][1]}`}function cell(value){return value||"-"}function stringAttribute(attributes,key){let value=attributes[key];return typeof value=="string"?value:null}var spanColumns={"span.startTime":{header:"TIME",format:event=>new Date(event.span.startTime).toISOString()},"span.duration":{header:"DURATION",format:event=>formatDuration4(event.span.duration)},"span.name":{header:"SPAN NAME",format:event=>ellipsis(cell(event.span.name),60)},"span.status.code":{header:"STATUS",format:event=>event.span.status.code.toUpperCase()==="ERROR"?import_chalk320.default.red("ERROR"):cell(event.span.status.code.toUpperCase())},"service.name":{header:"SERVICE NAME",format:event=>{let serviceName=stringAttribute(event.resource.attributes,"service.name");return serviceName?.startsWith("vercel.")?`\u25B2 ${serviceName}`:cell(serviceName)}},environment:{header:"ENVIRONMENT",format:event=>cell(stringAttribute(event.resource.attributes,"deployment.environment.name"))},"request.id":{header:"REQUEST ID",format:event=>stringAttribute(event.span.attributes,"vercel.request_id")?.split("::").at(-1)||"-"},"trace.id":{header:"TRACE ID",format:event=>cell(event.span.traceId)},"span.id":{header:"SPAN ID",format:event=>cell(event.span.id)},"parent.id":{header:"PARENT ID",format:event=>cell(event.span.parentSpanId)},"span.kind":{header:"SPAN KIND",format:event=>SPAN_KINDS.find((kind,index)=>event.span.kind===String(index)||event.span.kind.toUpperCase()===kind)??cell(event.span.kind)}};function printSpans(client,spans,columns){if(spans.length===0){client.stdout.write(`No spans found for this period.
1452
1448
  `);return}client.stdout.write(`${table([columns.map(column=>column.header),...spans.map(span=>columns.map(column=>column.format(span)))])}
1453
1449
  `)}async function search2(client,telemetry2){let parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(searchSubcommand3.options))}catch(err){return invalidArguments(client,err instanceof Error?err.message:String(err))}let{flags}=parsedArgs,json=!!(flags["--json"]||client.nonInteractive),columnsOption=flags["--columns"];if(telemetry2.trackCliOptionColumns(columnsOption),parsedArgs.args.slice(2).length>0)return trackSpanQueryOptions(flags,telemetry2),invalidArguments(client,`Unexpected argument: ${parsedArgs.args.slice(2)[0]}.`);let columns=Object.values(spanColumns).filter(column=>column!==spanColumns["span.kind"]&&column!==spanColumns["request.id"]&&column!==spanColumns.environment);if(columnsOption!==void 0){if(json)return invalidArguments(client,"`--columns` cannot be combined with `--json` or `--non-interactive`.");let names=columnsOption.split(",").map(name=>name.trim());if(names.some(name=>!Object.hasOwn(spanColumns,name)))return invalidArguments(client,`Invalid column selection. Available columns: ${Object.keys(spanColumns).join(", ")}.`);if(new Set(names).size!==names.length)return invalidArguments(client,"Columns cannot repeat. List each column once.");columns=names.map(name=>spanColumns[name])}let query=await resolveSpanQuery(client,flags,telemetry2);if("exitCode"in query)return query.exitCode;let request2={...query,event:"vercel.span",select,order:"desc"};json||output_manager_default.spinner("Searching spans\u2026");let rawResponse;try{rawResponse=await fetchSpanQuery(client,query.scope.ownerId,request2)}catch(err){return handleSpanQueryError(client,err)}finally{json||output_manager_default.stopSpinner()}let result=responseSchema.safeParse(rawResponse);if(!result.success)return handleTracingApiError(client,new Error("The Observability API returned an invalid span search response."));if(json)for(let span of result.data.events)client.stdout.write(`${JSON.stringify(span)}
1454
- `);else printSpans(client,result.data.events,columns);return result.data.pagination.hasMore&&output_manager_default.log("More spans matched. Narrow the query or increase --limit."),0}var COMMAND_CONFIG66={inspect:getCommandAliases(getSubcommand4),create:getCommandAliases(createSubcommand8),search:getCommandAliases(searchSubcommand3),config:getCommandAliases(tracesConfigCommand)},SUBCOMMAND_METADATA={[getSubcommand4.name]:getSubcommand4,[createSubcommand8.name]:createSubcommand8,[searchSubcommand3.name]:searchSubcommand3};async function traces(client){let telemetry2=new TracesTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(tracesCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return invalidArguments(client,err instanceof Error?err.message:String(err))}let{subcommand,subcommandOriginal,args}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG66),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-Q3TRA4NK.js")).default(client,{args,needHelp,subcommandOriginal,telemetry:telemetry2});if(needHelp){telemetry2.trackCliFlagHelp("traces",subcommandOriginal);let subMetadata=typeof subcommand=="string"?SUBCOMMAND_METADATA[subcommand]:void 0;return output_manager_default.print(help(subMetadata??tracesCommand,{parent:subMetadata?tracesCommand:void 0,columns:client.stderr.columns})),0}if(subcommand===createSubcommand8.name){let args2=client.argv.slice(4);return runCurl(client,{forceTrace:!0,args:args2})}return subcommand===searchSubcommand3.name?(telemetry2.trackCliSubcommandSearch(subcommandOriginal||subcommand),search2(client,telemetry2)):(subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"traces get","traces inspect"),get5(client,telemetry2))}var UpgradeTelemetryClient=class extends TelemetryClient{trackCliArgumentVersion(value){value&&this.trackCliArgument({arg:"version",value})}trackCliFlagDryRun(dryRun){dryRun&&this.trackCliFlag("dry-run")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagEnableAuto(enableAuto){enableAuto&&this.trackCliFlag("enable-auto")}trackCliFlagDisableAuto(disableAuto){disableAuto&&this.trackCliFlag("disable-auto")}trackCliFlagBypassMinReleaseAge(bypass){bypass&&this.trackCliFlag("bypass-min-release-age")}trackCliFlagDisableMinReleaseAgeBypass(disable6){disable6&&this.trackCliFlag("disable-min-release-age-bypass")}trackCliFlagEnableBinary(enableBinary){enableBinary&&this.trackCliFlag("enable-binary")}trackCliFlagDisableBinary(disableBinary){disableBinary&&this.trackCliFlag("disable-binary")}};function setUseNativeBinary(client,enabled){let config={...client.config,useNativeBinary:enabled};delete config.nativeBinaryAutoOptIn,writeToConfigFile(config),client.config=config}var import_semver=__toESM(require_semver(),1);async function installProductionRelease({version:requested,skipIfCurrent=!1,currentVersion=pkg_default.version,track}={}){let pinned=requested&&requested!=="latest"?requested:void 0,version2=pinned;try{if(output_manager_default.spinner("Checking for updates\u2026",0),pinned){let available=await listAvailableVersions(packageName).catch(()=>{});if(available&&!available.includes(pinned))return output_manager_default.stopSpinner(),output_manager_default.error(`Version ${pinned} does not exist.`),output_manager_default.log(`Run ${getCommandName("version list")} to see available versions.`),1}else version2=await resolveLatestNativeVersion();let target=version2,current=!((track??(await readActivePointer(getInstallRoot()).catch(()=>{}))?.track)==="pr")&&import_semver.default.valid(currentVersion)?currentVersion:void 0;return skipIfCurrent&&current&&import_semver.default.gte(current,target)?(output_manager_default.stopSpinner(),output_manager_default.log(`No upgrade available. Vercel CLI is already up to date (v${current}).`),0):(await installAndActivateProductionVersion(target),output_manager_default.stopSpinner(),!current||import_semver.default.gt(target,current)?output_manager_default.success(`Upgraded Vercel CLI to v${target}.`):(output_manager_default.success(`Vercel CLI v${target} is active.`),import_semver.default.lt(target,current)&&output_manager_default.warn(`Older CLI versions can replace the installer-managed links when running version commands. If that happens, restore the bounded slot layout with:
1450
+ `);else printSpans(client,result.data.events,columns);return result.data.pagination.hasMore&&output_manager_default.log("More spans matched. Narrow the query or increase --limit."),0}var COMMAND_CONFIG66={inspect:getCommandAliases(getSubcommand4),create:getCommandAliases(createSubcommand8),search:getCommandAliases(searchSubcommand3),config:getCommandAliases(tracesConfigCommand)},SUBCOMMAND_METADATA={[getSubcommand4.name]:getSubcommand4,[createSubcommand8.name]:createSubcommand8,[searchSubcommand3.name]:searchSubcommand3};async function traces(client){let telemetry2=new TracesTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(tracesCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return invalidArguments(client,err instanceof Error?err.message:String(err))}let{subcommand,subcommandOriginal,args}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG66),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-JPX6NJMJ.js")).default(client,{args,needHelp,subcommandOriginal,telemetry:telemetry2});if(needHelp){telemetry2.trackCliFlagHelp("traces",subcommandOriginal);let subMetadata=typeof subcommand=="string"?SUBCOMMAND_METADATA[subcommand]:void 0;return output_manager_default.print(help(subMetadata??tracesCommand,{parent:subMetadata?tracesCommand:void 0,columns:client.stderr.columns})),0}if(subcommand===createSubcommand8.name){let args2=client.argv.slice(4);return runCurl(client,{forceTrace:!0,args:args2})}return subcommand===searchSubcommand3.name?(telemetry2.trackCliSubcommandSearch(subcommandOriginal||subcommand),search2(client,telemetry2)):(subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"traces get","traces inspect"),get5(client,telemetry2))}var UpgradeTelemetryClient=class extends TelemetryClient{trackCliArgumentVersion(value){value&&this.trackCliArgument({arg:"version",value})}trackCliFlagDryRun(dryRun){dryRun&&this.trackCliFlag("dry-run")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagEnableAuto(enableAuto){enableAuto&&this.trackCliFlag("enable-auto")}trackCliFlagDisableAuto(disableAuto){disableAuto&&this.trackCliFlag("disable-auto")}trackCliFlagBypassMinReleaseAge(bypass){bypass&&this.trackCliFlag("bypass-min-release-age")}trackCliFlagDisableMinReleaseAgeBypass(disable6){disable6&&this.trackCliFlag("disable-min-release-age-bypass")}trackCliFlagEnableBinary(enableBinary){enableBinary&&this.trackCliFlag("enable-binary")}trackCliFlagDisableBinary(disableBinary){disableBinary&&this.trackCliFlag("disable-binary")}};function setUseNativeBinary(client,enabled){let config={...client.config,useNativeBinary:enabled};delete config.nativeBinaryAutoOptIn,writeToConfigFile(config),client.config=config}var import_semver=__toESM(require_semver(),1);async function installProductionRelease({version:requested,skipIfCurrent=!1,currentVersion=pkg_default.version,track}={}){let pinned=requested&&requested!=="latest"?requested:void 0,version2=pinned;try{if(output_manager_default.spinner("Checking for updates\u2026",0),pinned){let available=await listAvailableVersions(packageName).catch(()=>{});if(available&&!available.includes(pinned))return output_manager_default.stopSpinner(),output_manager_default.error(`Version ${pinned} does not exist.`),output_manager_default.log(`Run ${getCommandName("version list")} to see available versions.`),1}else version2=await resolveLatestNativeVersion();let target=version2,current=!((track??(await readActivePointer(getInstallRoot()).catch(()=>{}))?.track)==="pr")&&import_semver.default.valid(currentVersion)?currentVersion:void 0;return skipIfCurrent&&current&&import_semver.default.gte(current,target)?(output_manager_default.stopSpinner(),output_manager_default.log(`No upgrade available. Vercel CLI is already up to date (v${current}).`),0):(await installAndActivateProductionVersion(target),output_manager_default.stopSpinner(),!current||import_semver.default.gt(target,current)?output_manager_default.success(`Upgraded Vercel CLI to v${target}.`):(output_manager_default.success(`Vercel CLI v${target} is active.`),import_semver.default.lt(target,current)&&output_manager_default.warn(`Older CLI versions can replace the installer-managed links when running version commands. If that happens, restore the bounded slot layout with:
1455
1451
  ${CURL_INSTALL_COMMAND}`)),0)}catch(error){output_manager_default.stopSpinner();let reason=error instanceof Error?error.message:String(error);return output_manager_default.fatal(version2?`Failed to install Vercel CLI v${version2}: ${reason}`:`Failed to resolve the latest Vercel CLI version: ${reason}`),output_manager_default.log(`To reinstall the CLI manually, run:
1456
1452
  ${CURL_INSTALL_COMMAND}`),1}}var import_semver2=__toESM(require_semver(),1);async function upgrade(client){try{return await runUpgrade(client)}catch(error){return printError(error),1}}async function runUpgrade(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(upgradeCommand.options),telemetry2=new UpgradeTelemetryClient({opts:{store:client.telemetryEventStore}});try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("upgrade"),output_manager_default.print(help(upgradeCommand,{columns:client.stderr.columns})),0;let targetArg=parsedArgs.args[1],target=targetArg==="latest"?targetArg:targetArg?import_semver2.default.valid(targetArg)??void 0:void 0;if(telemetry2.trackCliArgumentVersion(targetArg?targetArg==="latest"?"latest":target?"version":"invalid":void 0),parsedArgs.args.length>2)return output_manager_default.error(`Unexpected argument: "${parsedArgs.args[2]}".`),1;if(targetArg&&!target)return output_manager_default.error(`Invalid version: "${targetArg}". Use a major.minor.patch version or "latest".`),1;let dryRun=parsedArgs.flags["--dry-run"],enableAuto=parsedArgs.flags["--enable-auto"],disableAuto=parsedArgs.flags["--disable-auto"],bypassMinReleaseAge=parsedArgs.flags["--bypass-min-release-age"],disableMinReleaseAgeBypass=parsedArgs.flags["--disable-min-release-age-bypass"],enableBinary=parsedArgs.flags["--enable-binary"],disableBinary=parsedArgs.flags["--disable-binary"],formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(telemetry2.trackCliFlagDryRun(dryRun),telemetry2.trackCliFlagEnableAuto(enableAuto),telemetry2.trackCliFlagDisableAuto(disableAuto),telemetry2.trackCliFlagBypassMinReleaseAge(bypassMinReleaseAge),telemetry2.trackCliFlagDisableMinReleaseAgeBypass(disableMinReleaseAgeBypass),telemetry2.trackCliFlagEnableBinary(enableBinary),telemetry2.trackCliFlagDisableBinary(disableBinary),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]),enableAuto&&disableAuto)return output_manager_default.error("Cannot use --enable-auto and --disable-auto together"),2;if(enableBinary&&disableBinary)return output_manager_default.error("Cannot use --enable-binary and --disable-binary together"),2;if(bypassMinReleaseAge&&disableMinReleaseAgeBypass)return output_manager_default.error("Can't use --bypass-min-release-age and --disable-min-release-age-bypass together"),2;let hasSettingsOnlyFlag=!!(disableMinReleaseAgeBypass||enableBinary||disableBinary||enableAuto||disableAuto);if(target&&hasSettingsOnlyFlag)return output_manager_default.error("Can't use a version with settings-only upgrade flags."),2;let installerManaged=await isCurlInstall();if(installerManaged&&bypassMinReleaseAge&&!hasSettingsOnlyFlag)return output_manager_default.fatal("Can't use `--bypass-min-release-age` with a CLI installed by the Vercel installer. The installer downloads releases directly from the registry and has no minimum release-age setting.\nRun `vc upgrade` without the flag."),1;if(dryRun||asJson){let requestedPreference;disableMinReleaseAgeBypass?requestedPreference={name:"bypassMinReleaseAge",label:"minimum release-age bypass",enabled:!1}:enableBinary||disableBinary?requestedPreference={name:"useNativeBinary",label:"native Vercel CLI binary",enabled:!!enableBinary}:enableAuto||disableAuto?requestedPreference={name:"autoUpdatesEnabled",label:"automatic CLI updates",enabled:!!enableAuto}:bypassMinReleaseAge&&(requestedPreference={name:"bypassMinReleaseAge",label:"minimum release-age bypass",enabled:!0});let detectedUpdateCommand=hasSettingsOnlyFlag||installerManaged?void 0:await getUpdateCommand(),updateCommand=detectedUpdateCommand&&target&&target!=="latest"?pinPackageVersion(detectedUpdateCommand.split(" "),target).join(" "):detectedUpdateCommand,installationType=installerManaged?"installer":await isGlobal()?"global":"local";if(asJson){let jsonOutput={currentVersion:pkg_default.version,installationType,...updateCommand&&{upgradeCommand:updateCommand},autoUpdatesEnabled:isAutoUpdateEnabled(client.config),...requestedPreference&&{requestedSettings:{[requestedPreference.name]:requestedPreference.enabled}}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1457
1453
  `)}else output_manager_default.print(`Current version: ${pkg_default.version}
@@ -1486,7 +1482,7 @@ ${tablePrint}
1486
1482
  `)}var import_chalk326=__toESM(require_source(),1);function getPeriodLabel(period){switch(period){case"daily":return"Daily";case"weekly":return"Weekly";case"monthly":return"Monthly"}}function outputBreakdown({data,breakdownPeriod,startTime}){let{print,log}=output_manager_default,periodLabel=getPeriodLabel(breakdownPeriod);outputUsageHeader(data,`${periodLabel} usage`,elapsed(Date.now()-startTime));let sortedPeriods=[...data.periodUsage.keys()].sort();if(sortedPeriods.length===0){log("No usage data found for this period.");return}let hiddenCount=0;for(let periodKey of sortedPeriods){let periodData=data.periodUsage.get(periodKey),allServices=[...periodData.services.entries()],sortedServices=visibleServices(periodData.services).sort((a,b)=>b[1].cost-a[1].cost);if(hiddenCount+=allServices.length-sortedServices.length,sortedServices.length===0)continue;log(`${import_chalk326.default.bold(import_chalk326.default.cyan(periodKey))} (${formatUsageAmount(periodData.totalCost,data.costUnit)})`);let rows=sortedServices.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:!0,singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,data.costUnit)]),tablePrint=table([["Service","Usage","Cost"].map(header=>import_chalk326.default.bold(import_chalk326.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1487
1483
  `)}outputHiddenServicesHint(hiddenCount)}var import_chalk327=__toESM(require_source(),1);function getDimensionLabel(dimension){return dimension==="project"?"Project":"Region"}function outputGroupBy({data,groupByDimension,startTime}){let{print,log}=output_manager_default,dimensionLabel=getDimensionLabel(groupByDimension);outputUsageHeader(data,`Usage by ${dimensionLabel}`,elapsed(Date.now()-startTime));let sortedGroups=[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalCost-a[1].totalCost);if(sortedGroups.length===0){log("No usage data found for this period.");return}let hiddenCount=0;for(let[groupName,groupData]of sortedGroups){let allServices=[...groupData.services.entries()],services=visibleServices(groupData.services).sort((a,b)=>b[1].cost-a[1].cost);if(hiddenCount+=allServices.length-services.length,services.length===0)continue;log(`${import_chalk327.default.bold(import_chalk327.default.cyan(groupName))} (${formatUsageAmount(groupData.totalCost,data.costUnit)})`);let rows=services.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:!0,singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,data.costUnit)]),tablePrint=table([["Service","Usage","Cost"].map(header=>import_chalk327.default.bold(import_chalk327.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1488
1484
  `)}log(""),log(`${import_chalk327.default.gray("Estimated total:")} ${import_chalk327.default.bold(formatUsageAmount(data.totalCost,data.costUnit))}`),outputHiddenServicesHint(hiddenCount)}function serializeService(service){return{name:service.name,product:service.product,quantity:service.quantity,unit:service.unit,cost:service.cost,included:service.included,category:service.category}}function outputJson9(client,{data,fromDate,toDate,breakdownPeriod,groupByDimension}){let sortedServices=[...data.services.entries()].sort((a,b)=>b[1].cost-a[1].cost),jsonOutput={period:{from:fromDate,to:toDate},context:data.contextName,costUnit:data.costUnit};data.creditBalance&&(jsonOutput.creditBalance=data.creditBalance),breakdownPeriod&&(jsonOutput.breakdown={period:breakdownPeriod,data:[...data.periodUsage.keys()].sort().map(periodKey=>{let period=data.periodUsage.get(periodKey);return{periodKey,services:[...period.services.entries()].sort((a,b)=>b[1].cost-a[1].cost).map(([,service])=>serializeService(service)),totals:{cost:period.totalCost}}})}),groupByDimension&&(jsonOutput.groupBy={dimension:groupByDimension,data:[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalCost-a[1].totalCost).map(([name,group])=>({name,services:[...group.services.entries()].sort((a,b)=>b[1].cost-a[1].cost).map(([,service])=>serializeService(service)),totals:{cost:group.totalCost}}))}),jsonOutput.services=sortedServices.map(([,service])=>serializeService(service)),jsonOutput.totals={cost:data.totalCost},client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1489
- `)}var GROSS_COST_METRIC="gross_cost",SUMMARY_VIEW="byProduct",DETAIL_VIEW="byProductRegionProject";function getCostViews(groupByDimension){let views={};return groupByDimension&&(views[DETAIL_VIEW]={groupBy:["product","region","project"]}),views[SUMMARY_VIEW]={groupBy:["product"]},{views,summaryViewName:SUMMARY_VIEW,detailViewName:groupByDimension?DETAIL_VIEW:void 0}}async function usage(client){let{print,error,debug,spinner,warn}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry2=new UsageTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("usage"),print(help(usageCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(fromFlag!==void 0&&parsedArgs.flags["--since"]!==void 0)return error("Pass only one of --since or --from. (--from is deprecated.)"),2;if(toFlag!==void 0&&parsedArgs.flags["--until"]!==void 0)return error("Pass only one of --until or --to. (--to is deprecated.)"),2;fromFlag!==void 0&&warn("`--from` is deprecated, please use `--since` instead"),toFlag!==void 0&&warn("`--to` is deprecated, please use `--until` instead");let sinceFlag=parsedArgs.flags["--since"]??fromFlag,untilFlag=parsedArgs.flags["--until"]??toFlag;if(untilFlag&&!sinceFlag)return error("--until requires --since. Omit both to show the current billing cycle."),2;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),2;let breakdownPeriod=breakdownFlag,groupByFlag=parsedArgs.flags["--group-by"];if(groupByFlag&&!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),2;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),2;let sinceDate,untilDate;try{sinceDate=sinceFlag?parseBillingDate(sinceFlag,!1):void 0,untilDate=untilFlag?parseBillingDate(untilFlag,!0):void 0}catch(err){return error(err.message),2}telemetry2.trackCliOptionSince(parsedArgs.flags["--since"]),telemetry2.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry2.trackCliOptionFrom(fromFlag),telemetry2.trackCliOptionTo(toFlag),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]),telemetry2.trackCliOptionBreakdown(breakdownFlag),telemetry2.trackCliOptionGroupBy(groupByFlag);let contextName,contextType,teamId,billingPeriod,hasPrecommitment=!1;try{let scope=await getScope(client),owner=scope.team??scope.user;contextName=scope.contextName,contextType=scope.team?"team":"personal account",teamId=scope.team?.id;let billing=owner?.billing;billingPeriod=billing?.subscriptions?.find(subscription=>subscription.frequency.interval==="month"&&subscription.frequency.intervalCount===1)?.period??billing?.period,hasPrecommitment=billing?.plan==="enterprise"||billing?.planIteration==="plus"||billing?.plan==="pro"&&billing?.planIteration==="flex"}catch(err){if((0,import_error_utils26.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!sinceFlag,fromDate=sinceDate??(billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate()),toDate=untilDate??(sinceFlag?new Date().toISOString():billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()),fromDisplay=sinceFlag&&!isRelativeTime(sinceFlag)?sinceFlag:extractDatePortion(fromDate),toDisplay=untilFlag&&!isRelativeTime(untilFlag)?untilFlag:extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk328.default.bold(contextName)}`);try{let query=new URLSearchParams;teamId&&query.set("teamId",teamId);let viewPlan=getCostViews(groupByDimension),queryString=query.toString(),costsRequest=client.fetch(`/v2/billing/costs${queryString?`?${queryString}`:""}`,{method:"POST",body:{from:fromDate,to:toDate,metrics:[GROSS_COST_METRIC,"quantity"],format:"timeseries",views:viewPlan.views,userAgent:"vercel-cli.usage"},useCurrentTeam:!1}),commitmentRequest=usingDefaults&&teamId&&hasPrecommitment?client.fetch(`/v1/invoices/pre-commitment-usage?teamId=${encodeURIComponent(teamId)}`,{useCurrentTeam:!1}).catch(err=>(debug(`Unable to fetch infrastructure credit: ${String(err)}`),null)):Promise.resolve(null),[response,commitmentUsage]=await Promise.all([costsRequest,commitmentRequest]),usageData=processCosts(response,{summaryView:response.results.views[viewPlan.summaryViewName],detailView:viewPlan.detailViewName?response.results.views[viewPlan.detailViewName]:void 0,contextName,contextType,scope:parsedArgs.flags["--scope"],fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension});return attachCredit(usageData,commitmentUsage),asJson?(outputJson9(client,{data:usageData,fromDate,toDate,breakdownPeriod,groupByDimension}),0):(groupByDimension?outputGroupBy({data:usageData,groupByDimension,startTime:start}):breakdownPeriod?outputBreakdown({data:usageData,breakdownPeriod,startTime:start}):outputAggregated({data:usageData,startTime:start}),0)}catch(err){return isAPIError(err)&&err.status===404&&err.code==="costs_not_found"?error(`Billing cost data is unavailable for ${fromDisplay} through ${toDisplay}. This does not mean usage was zero. It usually means the team has no active subscription for that range, or the range is before the team's billing data starts. Check that the selected team and date range are correct.`):output_manager_default.prettyError(err),1}}function roundToHundredths(value){return Math.round((value+Number.EPSILON)*100)/100}function getUsageThrough(queriedAt,toDisplay){let queriedDate=extractDatePortion(queriedAt);return queriedDate<toDisplay?queriedDate:toDisplay}function attachCredit(usageData,commitmentUsage){if(!commitmentUsage)return;let creditLedger=commitmentUsage.creditLedgers.find(ledger=>ledger.currency===usageData.costUnit);if(!creditLedger)return;let used=roundToHundredths(creditLedger.total-creditLedger.remaining);usageData.creditBalance={cadence:commitmentUsage.cadence,currency:creditLedger.currency,allocated:creditLedger.total,used,remaining:creditLedger.remaining}}function processCosts(response,options){let{summaryView,detailView,contextName,contextType,scope,fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension}=options;if(!summaryView)throw new Error("The billing API did not return the requested usage summary.");let costUnit=getCostUnit(response);if(response.availableCurrencies?.some(currency=>currency!==costUnit))throw new Error("Can't show complete costs for this date range because some costs use a different billing currency. Choose a date range within the current billing currency or view usage in the dashboard.");let products=response.results.dimensionsMeta.product?.values??{},projects2=response.results.dimensionsMeta.project?.values??{},regions=response.results.dimensionsMeta.region?.values??{};if(groupByDimension&&(!detailView||!detailView.groupBy.includes(groupByDimension)))throw new Error(`Usage cannot be grouped by ${groupByDimension} for this team.`);let services=new Map,periodUsage=new Map,groupByUsage=new Map,totalCost=0;for(let result of summaryView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses");if(addService(services,serviceName,aggregation),totalCost+=aggregation.cost,breakdownPeriod)for(let index=0;index<response.results.times.length;index++){let periodKey=getPeriodKey(response.results.times[index],breakdownPeriod),period=periodUsage.get(periodKey)??emptyAggregation(),sample=aggregateResult(result,product,serviceName,response.metrics,index,productMetadata?.category==="Subscription Licenses");addService(period.services,serviceName,sample),period.totalCost+=sample.cost,periodUsage.set(periodKey,period)}}if(groupByDimension)for(let result of detailView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses"),id2=result.dimensionValues[groupByDimension],groupName=id2?(groupByDimension==="project"?projects2:regions)[id2]?.title??id2:groupByDimension==="project"?"(unattributed)":"(global)",group=groupByUsage.get(groupName)??emptyAggregation();addService(group.services,serviceName,aggregation),group.totalCost+=aggregation.cost,groupByUsage.set(groupName,group)}return{contextName,contextType,scope,fromDisplay,toDisplay,usageThrough:getUsageThrough(response.queriedAt,toDisplay),usingDefaults,costUnit,services,periodUsage,groupByUsage,totalCost}}function getCostUnit(response){let unit=response.metrics.find(metric=>metric.slug===GROSS_COST_METRIC)?.unit;return unit?.singular==="MIU"||unit?.plural==="MIUs"?"managed_infrastructure_units":"USD"}function aggregateResult(result,product,name,metrics2,sampleIndex,isSubscription=!1){let grossCostIndex=result.metrics.indexOf(GROSS_COST_METRIC),quantityIndex=result.metrics.findIndex(metric=>metric!==GROSS_COST_METRIC),quantityMetric=metrics2.find(metric=>metric.slug===result.metrics[quantityIndex]),values=sampleIndex===void 0?result.totalValue:result.values[sampleIndex]??[],cost=grossCostIndex===-1?0:values[grossCostIndex]??0,included=result.flatRate===!0,rawQuantity=quantityIndex===-1?0:values[quantityIndex]??0,quantity=isSubscription&&sampleIndex===void 0&&quantityIndex!==-1?result.values.reduce((maximum,sample)=>Math.max(maximum,sample[quantityIndex]??0),0):rawQuantity,units=getQuantityUnits(quantityMetric,product,isSubscription);return{name,product,quantity,...units,cost,included,category:isSubscription?"subscription":"usage"}}function getQuantityUnits(metric,product,isSubscription){if(isSubscription)return{unit:"licenses",singularUnit:"license"};if(!metric?.unit)return{};if(metric.unit.kind==="custom"){let singularUnit=metric.unit.singular,unit2=metric.unit.plural??singularUnit;return!unit2||singularUnit===metric.title||unit2===metric.title?{}:{unit:unit2,singularUnit}}if(metric.unit.kind==="digitalStorage"&&metric.unit.name)return{unit:metric.unit.name,unitKind:metric.unit.kind};let unit=metric.unit.name;return!unit||unit===metric.title||unit===product?{}:{unit,unitKind:metric.unit.kind}}function addService(services,name,value){let key=JSON.stringify([value.product,value.included]),existing=services.get(key);if(!existing){services.set(key,{...value,name});return}let previousQuantity=existing.quantity;existing.quantity=existing.category==="subscription"?Math.max(previousQuantity,value.quantity):previousQuantity+value.quantity,existing.cost+=value.cost}function emptyAggregation(){return{services:new Map,totalCost:0}}var VcrTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandRm(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandLogin(actual){this.trackCliSubcommand({subcommand:"login",value:actual})}trackCliSubcommandBuild(actual){this.trackCliSubcommand({subcommand:"build",value:actual})}trackCliSubcommandPush(actual){this.trackCliSubcommand({subcommand:"push",value:actual})}trackCliArgumentEngine(value){value&&this.trackCliArgument({arg:"engine",value})}trackCliArgumentPath(value){value&&this.trackCliArgument({arg:"path",value:this.redactedValue})}trackCliArgumentName(value){value&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionPlatform(value){if(value){let known=value==="linux/amd64"||value==="linux/arm64";this.trackCliOption({option:"platform",value:known?value:this.redactedValue})}}trackCliSubcommandTag(actual){this.trackCliSubcommand({subcommand:"tag",value:actual})}trackCliSubcommandImage(actual){this.trackCliSubcommand({subcommand:"image",value:actual})}trackCliSubcommandPermissions(actual){this.trackCliSubcommand({subcommand:"permissions",value:actual})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionCursor(value){value&&this.trackCliOption({option:"cursor",value:this.redactedValue})}trackCliOptionSortBy(value){value&&this.trackCliOption({option:"sort-by",value})}trackCliOptionSortOrder(value){value&&this.trackCliOption({option:"sort-order",value})}trackCliOptionPublic(value){(value==="true"||value==="false")&&this.trackCliOption({option:"public",value})}trackCliFlagUntagged(value){value&&this.trackCliFlag("untagged")}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}trackCliFlagPush(value){value&&this.trackCliFlag("push")}};var COMMAND_CONFIG68={ls:getCommandAliases(listSubcommand26),inspect:getCommandAliases(inspectSubcommand14),add:getCommandAliases(addSubcommand13),config:getCommandAliases(configSubcommand),rm:getCommandAliases(removeSubcommand16),login:getCommandAliases(loginSubcommand),build:getCommandAliases(buildSubcommand),push:getCommandAliases(pushSubcommand),tag:getCommandAliases(tagsAggregateCommand),image:getCommandAliases(imageAggregateCommand),permissions:getCommandAliases(permissionsAggregateCommand)};async function vcr(client){let telemetry2=new VcrTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(vcrCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG68),needHelp=parsedArgs.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{parent:vcrCommand,columns:client.stderr.columns}))}if(needHelp)switch(subcommand){case"ls":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(listSubcommand26),0;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand14),0;case"add":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(addSubcommand13),0;case"config":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(configSubcommand),0;case"rm":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(removeSubcommand16),0;case"login":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(loginSubcommand),0;case"build":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(buildSubcommand),0;case"push":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(pushSubcommand),0;case"tag":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(tagsLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(tagsInspectSubcommand),0):(printHelp(tagsAggregateCommand),0)}case"image":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(imageLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(imageInspectSubcommand),0):nested==="rm"||nested==="remove"||nested==="delete"?(printHelp(imageRmSubcommand),0):(printHelp(imageAggregateCommand),0)}case"permissions":{let printPermissionsActionHelp2=function(command2){output_manager_default.print(help(command2,{parent:{...vcrCommand,name:"vcr permissions repository"},columns:client.stderr.columns}))};var printPermissionsActionHelp=printPermissionsActionHelp2;telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args.slice(0,2),hasAction=aliases2=>nested.some(arg=>arg!==void 0&&aliases2.includes(arg));return hasAction(PERMISSIONS_ACTIONS.ls)?(printPermissionsActionHelp2(permissionsLsSubcommand),0):hasAction(PERMISSIONS_ACTIONS.add)?(printPermissionsActionHelp2(permissionsAddSubcommand),0):hasAction(PERMISSIONS_ACTIONS.rm)?(printPermissionsActionHelp2(permissionsRmSubcommand),0):hasAction(PERMISSIONS_ACTIONS.clear)?(printPermissionsActionHelp2(permissionsClearSubcommand),0):(printHelp(permissionsAggregateCommand),0)}default:return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),0}switch(subcommand){case"ls":return telemetry2.trackCliSubcommandLs(subcommandOriginal),(await import("./chunks/ls-6CYMQBX3.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-SUEMHSB6.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandCreate(subcommandOriginal),(await import("./chunks/add-SUDX7R63.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-YQ7FIAFK.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-DB5K2RI7.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-A6R3RQIW.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-BRMOQZHW.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-MUMGVOSY.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-C34XXMYO.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-M2XIQYXT.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-LWKZBBU7.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG68)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms43=__toESM(require_ms(),1),import_chalk329=__toESM(require_source(),1),import_pluralize28=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls11(client,argv){let telemetry2=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand30.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk329.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1485
+ `)}var GROSS_COST_METRIC="gross_cost",SUMMARY_VIEW="byProduct",DETAIL_VIEW="byProductRegionProject";function getCostViews(groupByDimension){let views={};return groupByDimension&&(views[DETAIL_VIEW]={groupBy:["product","region","project"]}),views[SUMMARY_VIEW]={groupBy:["product"]},{views,summaryViewName:SUMMARY_VIEW,detailViewName:groupByDimension?DETAIL_VIEW:void 0}}async function usage(client){let{print,error,debug,spinner,warn}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry2=new UsageTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("usage"),print(help(usageCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(fromFlag!==void 0&&parsedArgs.flags["--since"]!==void 0)return error("Pass only one of --since or --from. (--from is deprecated.)"),2;if(toFlag!==void 0&&parsedArgs.flags["--until"]!==void 0)return error("Pass only one of --until or --to. (--to is deprecated.)"),2;fromFlag!==void 0&&warn("`--from` is deprecated, please use `--since` instead"),toFlag!==void 0&&warn("`--to` is deprecated, please use `--until` instead");let sinceFlag=parsedArgs.flags["--since"]??fromFlag,untilFlag=parsedArgs.flags["--until"]??toFlag;if(untilFlag&&!sinceFlag)return error("--until requires --since. Omit both to show the current billing cycle."),2;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),2;let breakdownPeriod=breakdownFlag,groupByFlag=parsedArgs.flags["--group-by"];if(groupByFlag&&!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),2;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),2;let sinceDate,untilDate;try{sinceDate=sinceFlag?parseBillingDate(sinceFlag,!1):void 0,untilDate=untilFlag?parseBillingDate(untilFlag,!0):void 0}catch(err){return error(err.message),2}telemetry2.trackCliOptionSince(parsedArgs.flags["--since"]),telemetry2.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry2.trackCliOptionFrom(fromFlag),telemetry2.trackCliOptionTo(toFlag),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]),telemetry2.trackCliOptionBreakdown(breakdownFlag),telemetry2.trackCliOptionGroupBy(groupByFlag);let contextName,contextType,teamId,billingPeriod,hasPrecommitment=!1;try{let scope=await getScope(client),owner=scope.team??scope.user;contextName=scope.contextName,contextType=scope.team?"team":"personal account",teamId=scope.team?.id;let billing=owner?.billing;billingPeriod=billing?.subscriptions?.find(subscription=>subscription.frequency.interval==="month"&&subscription.frequency.intervalCount===1)?.period??billing?.period,hasPrecommitment=billing?.plan==="enterprise"||billing?.planIteration==="plus"||billing?.plan==="pro"&&billing?.planIteration==="flex"}catch(err){if((0,import_error_utils26.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!sinceFlag,fromDate=sinceDate??(billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate()),toDate=untilDate??(sinceFlag?new Date().toISOString():billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()),fromDisplay=sinceFlag&&!isRelativeTime(sinceFlag)?sinceFlag:extractDatePortion(fromDate),toDisplay=untilFlag&&!isRelativeTime(untilFlag)?untilFlag:extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk328.default.bold(contextName)}`);try{let query=new URLSearchParams;teamId&&query.set("teamId",teamId);let viewPlan=getCostViews(groupByDimension),queryString=query.toString(),costsRequest=client.fetch(`/v2/billing/costs${queryString?`?${queryString}`:""}`,{method:"POST",body:{from:fromDate,to:toDate,metrics:[GROSS_COST_METRIC,"quantity"],format:"timeseries",views:viewPlan.views,userAgent:"vercel-cli.usage"},useCurrentTeam:!1}),commitmentRequest=usingDefaults&&teamId&&hasPrecommitment?client.fetch(`/v1/invoices/pre-commitment-usage?teamId=${encodeURIComponent(teamId)}`,{useCurrentTeam:!1}).catch(err=>(debug(`Unable to fetch infrastructure credit: ${String(err)}`),null)):Promise.resolve(null),[response,commitmentUsage]=await Promise.all([costsRequest,commitmentRequest]),usageData=processCosts(response,{summaryView:response.results.views[viewPlan.summaryViewName],detailView:viewPlan.detailViewName?response.results.views[viewPlan.detailViewName]:void 0,contextName,contextType,scope:parsedArgs.flags["--scope"],fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension});return attachCredit(usageData,commitmentUsage),asJson?(outputJson9(client,{data:usageData,fromDate,toDate,breakdownPeriod,groupByDimension}),0):(groupByDimension?outputGroupBy({data:usageData,groupByDimension,startTime:start}):breakdownPeriod?outputBreakdown({data:usageData,breakdownPeriod,startTime:start}):outputAggregated({data:usageData,startTime:start}),0)}catch(err){return isAPIError(err)&&err.status===404&&err.code==="costs_not_found"?error(`Billing cost data is unavailable for ${fromDisplay} through ${toDisplay}. This does not mean usage was zero. It usually means the team has no active subscription for that range, or the range is before the team's billing data starts. Check that the selected team and date range are correct.`):output_manager_default.prettyError(err),1}}function roundToHundredths(value){return Math.round((value+Number.EPSILON)*100)/100}function getUsageThrough(queriedAt,toDisplay){let queriedDate=extractDatePortion(queriedAt);return queriedDate<toDisplay?queriedDate:toDisplay}function attachCredit(usageData,commitmentUsage){if(!commitmentUsage)return;let creditLedger=commitmentUsage.creditLedgers.find(ledger=>ledger.currency===usageData.costUnit);if(!creditLedger)return;let used=roundToHundredths(creditLedger.total-creditLedger.remaining);usageData.creditBalance={cadence:commitmentUsage.cadence,currency:creditLedger.currency,allocated:creditLedger.total,used,remaining:creditLedger.remaining}}function processCosts(response,options){let{summaryView,detailView,contextName,contextType,scope,fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension}=options;if(!summaryView)throw new Error("The billing API did not return the requested usage summary.");let costUnit=getCostUnit(response);if(response.availableCurrencies?.some(currency=>currency!==costUnit))throw new Error("Can't show complete costs for this date range because some costs use a different billing currency. Choose a date range within the current billing currency or view usage in the dashboard.");let products=response.results.dimensionsMeta.product?.values??{},projects2=response.results.dimensionsMeta.project?.values??{},regions=response.results.dimensionsMeta.region?.values??{};if(groupByDimension&&(!detailView||!detailView.groupBy.includes(groupByDimension)))throw new Error(`Usage cannot be grouped by ${groupByDimension} for this team.`);let services=new Map,periodUsage=new Map,groupByUsage=new Map,totalCost=0;for(let result of summaryView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses");if(addService(services,serviceName,aggregation),totalCost+=aggregation.cost,breakdownPeriod)for(let index=0;index<response.results.times.length;index++){let periodKey=getPeriodKey(response.results.times[index],breakdownPeriod),period=periodUsage.get(periodKey)??emptyAggregation(),sample=aggregateResult(result,product,serviceName,response.metrics,index,productMetadata?.category==="Subscription Licenses");addService(period.services,serviceName,sample),period.totalCost+=sample.cost,periodUsage.set(periodKey,period)}}if(groupByDimension)for(let result of detailView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses"),id2=result.dimensionValues[groupByDimension],groupName=id2?(groupByDimension==="project"?projects2:regions)[id2]?.title??id2:groupByDimension==="project"?"(unattributed)":"(global)",group=groupByUsage.get(groupName)??emptyAggregation();addService(group.services,serviceName,aggregation),group.totalCost+=aggregation.cost,groupByUsage.set(groupName,group)}return{contextName,contextType,scope,fromDisplay,toDisplay,usageThrough:getUsageThrough(response.queriedAt,toDisplay),usingDefaults,costUnit,services,periodUsage,groupByUsage,totalCost}}function getCostUnit(response){let unit=response.metrics.find(metric=>metric.slug===GROSS_COST_METRIC)?.unit;return unit?.singular==="MIU"||unit?.plural==="MIUs"?"managed_infrastructure_units":"USD"}function aggregateResult(result,product,name,metrics2,sampleIndex,isSubscription=!1){let grossCostIndex=result.metrics.indexOf(GROSS_COST_METRIC),quantityIndex=result.metrics.findIndex(metric=>metric!==GROSS_COST_METRIC),quantityMetric=metrics2.find(metric=>metric.slug===result.metrics[quantityIndex]),values=sampleIndex===void 0?result.totalValue:result.values[sampleIndex]??[],cost=grossCostIndex===-1?0:values[grossCostIndex]??0,included=result.flatRate===!0,rawQuantity=quantityIndex===-1?0:values[quantityIndex]??0,quantity=isSubscription&&sampleIndex===void 0&&quantityIndex!==-1?result.values.reduce((maximum,sample)=>Math.max(maximum,sample[quantityIndex]??0),0):rawQuantity,units=getQuantityUnits(quantityMetric,product,isSubscription);return{name,product,quantity,...units,cost,included,category:isSubscription?"subscription":"usage"}}function getQuantityUnits(metric,product,isSubscription){if(isSubscription)return{unit:"licenses",singularUnit:"license"};if(!metric?.unit)return{};if(metric.unit.kind==="custom"){let singularUnit=metric.unit.singular,unit2=metric.unit.plural??singularUnit;return!unit2||singularUnit===metric.title||unit2===metric.title?{}:{unit:unit2,singularUnit}}if(metric.unit.kind==="digitalStorage"&&metric.unit.name)return{unit:metric.unit.name,unitKind:metric.unit.kind};let unit=metric.unit.name;return!unit||unit===metric.title||unit===product?{}:{unit,unitKind:metric.unit.kind}}function addService(services,name,value){let key=JSON.stringify([value.product,value.included]),existing=services.get(key);if(!existing){services.set(key,{...value,name});return}let previousQuantity=existing.quantity;existing.quantity=existing.category==="subscription"?Math.max(previousQuantity,value.quantity):previousQuantity+value.quantity,existing.cost+=value.cost}function emptyAggregation(){return{services:new Map,totalCost:0}}var VcrTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandRm(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandLogin(actual){this.trackCliSubcommand({subcommand:"login",value:actual})}trackCliSubcommandBuild(actual){this.trackCliSubcommand({subcommand:"build",value:actual})}trackCliSubcommandPush(actual){this.trackCliSubcommand({subcommand:"push",value:actual})}trackCliArgumentEngine(value){value&&this.trackCliArgument({arg:"engine",value})}trackCliArgumentPath(value){value&&this.trackCliArgument({arg:"path",value:this.redactedValue})}trackCliArgumentName(value){value&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionPlatform(value){if(value){let known=value==="linux/amd64"||value==="linux/arm64";this.trackCliOption({option:"platform",value:known?value:this.redactedValue})}}trackCliSubcommandTag(actual){this.trackCliSubcommand({subcommand:"tag",value:actual})}trackCliSubcommandImage(actual){this.trackCliSubcommand({subcommand:"image",value:actual})}trackCliSubcommandPermissions(actual){this.trackCliSubcommand({subcommand:"permissions",value:actual})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionCursor(value){value&&this.trackCliOption({option:"cursor",value:this.redactedValue})}trackCliOptionSortBy(value){value&&this.trackCliOption({option:"sort-by",value})}trackCliOptionSortOrder(value){value&&this.trackCliOption({option:"sort-order",value})}trackCliOptionPublic(value){(value==="true"||value==="false")&&this.trackCliOption({option:"public",value})}trackCliFlagUntagged(value){value&&this.trackCliFlag("untagged")}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}trackCliFlagPush(value){value&&this.trackCliFlag("push")}};var COMMAND_CONFIG68={ls:getCommandAliases(listSubcommand26),inspect:getCommandAliases(inspectSubcommand14),add:getCommandAliases(addSubcommand13),config:getCommandAliases(configSubcommand),rm:getCommandAliases(removeSubcommand16),login:getCommandAliases(loginSubcommand),build:getCommandAliases(buildSubcommand),push:getCommandAliases(pushSubcommand),tag:getCommandAliases(tagsAggregateCommand),image:getCommandAliases(imageAggregateCommand),permissions:getCommandAliases(permissionsAggregateCommand)};async function vcr(client){let telemetry2=new VcrTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(vcrCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG68),needHelp=parsedArgs.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{parent:vcrCommand,columns:client.stderr.columns}))}if(needHelp)switch(subcommand){case"ls":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(listSubcommand26),0;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand14),0;case"add":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(addSubcommand13),0;case"config":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(configSubcommand),0;case"rm":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(removeSubcommand16),0;case"login":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(loginSubcommand),0;case"build":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(buildSubcommand),0;case"push":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(pushSubcommand),0;case"tag":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(tagsLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(tagsInspectSubcommand),0):(printHelp(tagsAggregateCommand),0)}case"image":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(imageLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(imageInspectSubcommand),0):nested==="rm"||nested==="remove"||nested==="delete"?(printHelp(imageRmSubcommand),0):(printHelp(imageAggregateCommand),0)}case"permissions":{let printPermissionsActionHelp2=function(command2){output_manager_default.print(help(command2,{parent:{...vcrCommand,name:"vcr permissions repository"},columns:client.stderr.columns}))};var printPermissionsActionHelp=printPermissionsActionHelp2;telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args.slice(0,2),hasAction=aliases2=>nested.some(arg2=>arg2!==void 0&&aliases2.includes(arg2));return hasAction(PERMISSIONS_ACTIONS.ls)?(printPermissionsActionHelp2(permissionsLsSubcommand),0):hasAction(PERMISSIONS_ACTIONS.add)?(printPermissionsActionHelp2(permissionsAddSubcommand),0):hasAction(PERMISSIONS_ACTIONS.rm)?(printPermissionsActionHelp2(permissionsRmSubcommand),0):hasAction(PERMISSIONS_ACTIONS.clear)?(printPermissionsActionHelp2(permissionsClearSubcommand),0):(printHelp(permissionsAggregateCommand),0)}default:return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),0}switch(subcommand){case"ls":return telemetry2.trackCliSubcommandLs(subcommandOriginal),(await import("./chunks/ls-6CD2OQGA.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-3HGROSZO.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandCreate(subcommandOriginal),(await import("./chunks/add-OXHI3PVM.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-YMUUPO3R.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-DPHE34CD.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-JREQ7SLY.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-J6VW3KHT.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-OPRW7M4I.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-AGLQDT3Z.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-6GL2UOA2.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-A4WMGETJ.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG68)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms43=__toESM(require_ms(),1),import_chalk329=__toESM(require_source(),1),import_pluralize28=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls11(client,argv){let telemetry2=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand30.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk329.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1490
1486
  `)}else output_manager_default.log(`${(0,import_pluralize28.default)("Webhook",webhooks.length,!0)} found under ${import_chalk329.default.bold(contextName)} ${import_chalk329.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
1491
1487
 
1492
1488
  `));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms43.default)(current-webhook.createdAt):"-",eventsDisplay=webhook.events.length>2?`${webhook.events.slice(0,2).join(", ")} +${webhook.events.length-2}`:webhook.events.join(", ");return[webhook.id,webhook.url,eventsDisplay,import_chalk329.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk330=__toESM(require_source(),1);var WebhooksGetTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id2){id2&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function get6(client,argv){let telemetry2=new WebhooksGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args,getStamp=stamp_default();if(!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:getCommandNamePlain("webhooks ls")},{command:getCommandNamePlain("webhooks inspect <id>")}]},2),output_manager_default.error(`${getCommandName("webhooks inspect <id>")} expects one argument`),2;telemetry2.trackCliArgumentId(webhookId),telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk330.default.cyan(`${getCommandName("webhooks inspect <id>")}`)}`),2;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk330.default.bold(contextName)}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:getCommandNamePlain("webhooks ls")}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(asJson){output_manager_default.stopSpinner();let jsonOutput=client.nonInteractive?{status:"ok",webhook,message:`Webhook ${webhookId} found.`,next:[{command:getCommandNamePlain(`webhooks rm ${webhookId} --yes`),when:"Remove this webhook"}]}:webhook;client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}