vercel 62.1.0 → 62.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/chunks/{add-HANL3P77.js → add-7HJR3HK7.js} +1 -1
  2. package/dist/chunks/{add-XUAM4VOK.js → add-Q5OZFIRM.js} +1 -1
  3. package/dist/chunks/{add-XNYC3JIL.js → add-VLVURKGS.js} +1 -1
  4. package/dist/chunks/{build-ZBS6SOT7.js → build-MR7MUWBQ.js} +1 -1
  5. package/dist/chunks/{chunk-4NICAS7W.js → chunk-4HXRTNAK.js} +1 -1
  6. package/dist/chunks/{chunk-OGVFR4VL.js → chunk-743NGLUN.js} +1 -1
  7. package/dist/chunks/{chunk-BN3XAVPG.js → chunk-7ANQHBBE.js} +1 -1
  8. package/dist/chunks/{chunk-Z5PMK6F2.js → chunk-7IRKF3ZG.js} +3 -3
  9. package/dist/chunks/{chunk-35QWU4NB.js → chunk-7POWBJDF.js} +2 -2
  10. package/dist/chunks/{chunk-NKC536ZX.js → chunk-ADDXKC3J.js} +2 -2
  11. package/dist/chunks/{chunk-Z6TGFLIO.js → chunk-AKPQWZIP.js} +2 -2
  12. package/dist/chunks/{chunk-ZNFC3CZF.js → chunk-ALXWJ7XN.js} +1 -1
  13. package/dist/chunks/{chunk-QMBXEDTG.js → chunk-B5PFD6Q3.js} +1 -1
  14. package/dist/chunks/{chunk-7VSX264O.js → chunk-C6ITILVT.js} +2 -2
  15. package/dist/chunks/chunk-D5VTBRWF.js +7 -0
  16. package/dist/chunks/{chunk-RBYCFVJN.js → chunk-DECIQZZQ.js} +1 -1
  17. package/dist/chunks/{chunk-AIMMAROX.js → chunk-E4RLHRDF.js} +1 -1
  18. package/dist/chunks/{chunk-ULYAF4N3.js → chunk-EQHNA4BW.js} +1 -1
  19. package/dist/chunks/{chunk-DECRXYX6.js → chunk-GASSNHZG.js} +1 -1
  20. package/dist/chunks/{chunk-7NSHIG54.js → chunk-HLVUEYOZ.js} +1 -1
  21. package/dist/chunks/chunk-HVROAV4B.js +9 -0
  22. package/dist/chunks/{chunk-64JYKBGN.js → chunk-HYW4A5B3.js} +1 -1
  23. package/dist/chunks/{chunk-CS4QF4YI.js → chunk-ILXXXXVQ.js} +1 -1
  24. package/dist/chunks/{chunk-NYUESPV2.js → chunk-JO3XBFR3.js} +1 -1
  25. package/dist/chunks/{chunk-B7YJLE3P.js → chunk-JSKSNCK2.js} +1 -1
  26. package/dist/chunks/{chunk-I327YWUE.js → chunk-K5WTLFS6.js} +1 -1
  27. package/dist/chunks/{chunk-V6BHS2M2.js → chunk-KG5BMLOI.js} +1 -1
  28. package/dist/chunks/{chunk-FWN57YF7.js → chunk-KREBNPHL.js} +1 -1
  29. package/dist/chunks/{chunk-6MR2VYMC.js → chunk-L46BHPRD.js} +1 -1
  30. package/dist/chunks/{chunk-NXJLJLEM.js → chunk-LCY4SULE.js} +1 -1
  31. package/dist/chunks/chunk-LHQUNL52.js +7 -0
  32. package/dist/chunks/{chunk-A5VLP25I.js → chunk-MCCL762Q.js} +1 -1
  33. package/dist/chunks/chunk-MK3CTSDV.js +24 -0
  34. package/dist/chunks/{chunk-DT3EUC6S.js → chunk-N4PVXHAJ.js} +2 -1
  35. package/dist/chunks/{chunk-JK5Z72G5.js → chunk-N5MNZPPJ.js} +1 -1
  36. package/dist/chunks/{chunk-GR76JFDX.js → chunk-NRN65VUM.js} +1 -1
  37. package/dist/chunks/{chunk-Z26EOSNI.js → chunk-NXTK7VKL.js} +1 -1
  38. package/dist/chunks/{chunk-JLOCNOBV.js → chunk-PADCVJ7G.js} +1 -1
  39. package/dist/chunks/{chunk-QAPUB4EX.js → chunk-PAI3WRPA.js} +1 -1
  40. package/dist/chunks/{chunk-Y3A7ZJNX.js → chunk-PTFKU33G.js} +1 -1
  41. package/dist/chunks/{chunk-XF5HR3BJ.js → chunk-RVKOPGOI.js} +1 -1
  42. package/dist/chunks/{chunk-6OI6SRHZ.js → chunk-SDGWKUST.js} +1 -1
  43. package/dist/chunks/{chunk-BKNROJQU.js → chunk-UOHVKN6N.js} +1 -1
  44. package/dist/chunks/{chunk-ZOIPWLUF.js → chunk-UWO3M2L2.js} +1 -1
  45. package/dist/chunks/chunk-VGXFOQ4P.js +8 -0
  46. package/dist/chunks/{chunk-T4QWSTWE.js → chunk-VTMLKJVQ.js} +1 -1
  47. package/dist/chunks/{chunk-7PQBWGSI.js → chunk-VZDY57PJ.js} +1 -1
  48. package/dist/chunks/{chunk-TBLJVTTQ.js → chunk-WN6OXK2F.js} +1 -1
  49. package/dist/chunks/{chunk-X5OINFLV.js → chunk-WOKSTB3F.js} +1 -1
  50. package/dist/chunks/{chunk-K6GIN2TC.js → chunk-WW3VUXRV.js} +1 -1
  51. package/dist/chunks/{chunk-7RT22KMX.js → chunk-ZQIUMXCI.js} +1 -1
  52. package/dist/chunks/{clear-UYIYBIU7.js → clear-PPE55RPM.js} +1 -1
  53. package/dist/chunks/{compile-vercel-config-SRYQK624.js → compile-vercel-config-2IC23CNT.js} +1 -1
  54. package/dist/chunks/{config-EDC5XGQX.js → config-G2A6KPPM.js} +1 -1
  55. package/dist/chunks/{config-6AXT6WNO.js → config-T3WHONFJ.js} +1 -1
  56. package/dist/chunks/config-validator.mjs +1 -1
  57. package/dist/chunks/{delete-GYK2QMZA.js → delete-75SYJKNE.js} +1 -1
  58. package/dist/chunks/{delete-PIASS7TQ.js → delete-MHXN5KTO.js} +1 -1
  59. package/dist/chunks/{detect-projects-325QE23N.js → detect-projects-GJF4VXQI.js} +1 -1
  60. package/dist/chunks/detect-services-K3363KB7.js +7 -0
  61. package/dist/chunks/{disable-SFNXBFOL.js → disable-OUYOHEWN.js} +1 -1
  62. package/dist/chunks/{discard-QX7SXCDX.js → discard-RXSHOY3J.js} +1 -1
  63. package/dist/chunks/{edit-4U3ZERPO.js → edit-Y7OL72ZK.js} +1 -1
  64. package/dist/chunks/{edit-PNIFJF2H.js → edit-Z5RCWPOX.js} +1 -1
  65. package/dist/chunks/{enable-HZFCTROZ.js → enable-HI2UH2NM.js} +1 -1
  66. package/dist/chunks/{export-QOTSGWFE.js → export-CMP3APAJ.js} +1 -1
  67. package/dist/chunks/{generate-cert-for-deploy-L5NMXX37.js → generate-cert-for-deploy-2HHUYGHU.js} +1 -1
  68. package/dist/chunks/{image-PY2GZYQD.js → image-SQIUEBFK.js} +1 -1
  69. package/dist/chunks/{import-builders-WWYNSGXV.js → import-builders-EUOOFPHW.js} +1 -1
  70. package/dist/chunks/{inspect-NIRGPMGV.js → inspect-2SXPXNYH.js} +1 -1
  71. package/dist/chunks/{inspect-DKJC7ORF.js → inspect-DYNTJMTQ.js} +1 -1
  72. package/dist/chunks/{inspect-QQJAYYMO.js → inspect-J3F3U3YF.js} +1 -1
  73. package/dist/chunks/{inspect-EHEMDPJD.js → inspect-KYFVYFWX.js} +1 -1
  74. package/dist/chunks/{inspect-IIF3N5Z2.js → inspect-V7HA2GZ5.js} +1 -1
  75. package/dist/chunks/{list-4TZ6QS5J.js → list-TSDBEAVF.js} +1 -1
  76. package/dist/chunks/{list-MMQAS2OQ.js → list-X4MKKDJX.js} +1 -1
  77. package/dist/chunks/{list-4MCOLKTO.js → list-ZQSOWXRI.js} +1 -1
  78. package/dist/chunks/{login-5QOABZRX.js → login-5FMKHZVG.js} +1 -1
  79. package/dist/chunks/{login-ZAAIOSQ4.js → login-YEDMPXUF.js} +1 -1
  80. package/dist/chunks/{logs-KWMWFGLA.js → logs-X2OIQXGW.js} +1 -1
  81. package/dist/chunks/{ls-KCE6GJZL.js → ls-4W4KTJ6T.js} +1 -1
  82. package/dist/chunks/{ls-43NFH2L6.js → ls-6EDJUUDW.js} +1 -1
  83. package/dist/chunks/{ls-HKXEYGZT.js → ls-BMAVUMXU.js} +1 -1
  84. package/dist/chunks/{ls-L454FAKC.js → ls-HK45UWBD.js} +1 -1
  85. package/dist/chunks/{ls-KAIRQI27.js → ls-LAYBQVU2.js} +1 -1
  86. package/dist/chunks/{ls-ID2DGRGG.js → ls-SQ42O6O5.js} +1 -1
  87. package/dist/chunks/{ls-42F5OUPY.js → ls-XIJ4CY2N.js} +1 -1
  88. package/dist/chunks/{mutate-QK3U73PH.js → mutate-6FCOCHSA.js} +1 -1
  89. package/dist/chunks/{notifications-2QARJQFZ.js → notifications-JTK7ZOLC.js} +1 -1
  90. package/dist/chunks/{open-PORNBO4I.js → open-3G4R3VIN.js} +1 -1
  91. package/dist/chunks/{openapi-6L7RIFOR.js → openapi-W365UPH2.js} +1 -1
  92. package/dist/chunks/{permissions-EYOTCJGO.js → permissions-IWUBXZBZ.js} +1 -1
  93. package/dist/chunks/{prompt-missing-credentials-N7ETDDXW.js → prompt-missing-credentials-VDR5HVA2.js} +1 -1
  94. package/dist/chunks/{publish-JTCJ6Z5K.js → publish-5QKVU6YV.js} +1 -1
  95. package/dist/chunks/{pull-FNJGDSP2.js → pull-K4JQEP7N.js} +1 -1
  96. package/dist/chunks/{purchase-domain-if-available-IIEFQGPX.js → purchase-domain-if-available-Q7H2TGKR.js} +1 -1
  97. package/dist/chunks/{push-LBPCQFBD.js → push-COILRLCW.js} +1 -1
  98. package/dist/chunks/{query-CBEGOTEI.js → query-ABPO2REN.js} +2 -2
  99. package/dist/chunks/{reorder-LLR3OV6E.js → reorder-FBUQ5ET7.js} +1 -1
  100. package/dist/chunks/{reply-3CDS6LPX.js → reply-FR5VO7DA.js} +1 -1
  101. package/dist/chunks/{resolve-XQ6UPCSZ.js → resolve-JI2ENFS6.js} +1 -1
  102. package/dist/chunks/{restore-U4EWQAAZ.js → restore-LYY4BSYJ.js} +1 -1
  103. package/dist/chunks/{rm-XGXSPQIY.js → rm-C2RWWMO3.js} +1 -1
  104. package/dist/chunks/{rm-WEMHKTUL.js → rm-CYYVIF2U.js} +1 -1
  105. package/dist/chunks/{rm-3FAU5JLM.js → rm-ETLZ75RJ.js} +1 -1
  106. package/dist/chunks/{rm-7OBAUU4F.js → rm-GHSQEFRG.js} +1 -1
  107. package/dist/chunks/{rm-XW6CPP6J.js → rm-KHO6RV55.js} +1 -1
  108. package/dist/chunks/{routes-IPGKJ2E4.js → routes-FOCZWOGO.js} +1 -1
  109. package/dist/chunks/{rule-inspect-I6WJTC7O.js → rule-inspect-MISYALLU.js} +1 -1
  110. package/dist/chunks/{rules-TMEV52OR.js → rules-KAGL6MH3.js} +1 -1
  111. package/dist/chunks/schema-EKWTCBNR.js +14 -0
  112. package/dist/chunks/{schema-4R7CRVMR.js → schema-FZVKQRNB.js} +2 -2
  113. package/dist/chunks/{set-FOMKZDT2.js → set-5D7C6HMZ.js} +1 -1
  114. package/dist/chunks/{setup-and-link-QI6PHWVL.js → setup-and-link-H4P3FZB3.js} +1 -1
  115. package/dist/chunks/{tags-BTMFM3XQ.js → tags-DVGQQZNC.js} +1 -1
  116. package/dist/chunks/{update-CA3E2G46.js → update-QY3ZME4T.js} +1 -1
  117. package/dist/commands/build/index.js +1 -1
  118. package/dist/commands/deploy/index.js +4 -4
  119. package/dist/commands/dev/index.js +7 -7
  120. package/dist/commands/env/index.js +1 -1
  121. package/dist/commands/link/index.js +1 -1
  122. package/dist/commands/list/index.js +1 -1
  123. package/dist/commands-bulk.js +66 -65
  124. package/dist/index.js +2 -2
  125. package/dist/version.mjs +1 -1
  126. package/package.json +56 -55
  127. package/dist/chunks/chunk-4O5TQSWD.js +0 -7
  128. package/dist/chunks/chunk-G43DZJ2Z.js +0 -7
  129. package/dist/chunks/chunk-JVCUTKAX.js +0 -24
  130. package/dist/chunks/chunk-N5Q4IX3H.js +0 -9
  131. package/dist/chunks/detect-services-QNPD7J6F.js +0 -7
  132. package/dist/chunks/schema-W3ZXTSRT.js +0 -14
@@ -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{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope}from"./chunks/chunk-JLOCNOBV.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-X47XV2WG.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-ACCZWEKL.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-6OI6SRHZ.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-6MR2VYMC.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-NYUESPV2.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{collectBuildLogs,displayBuildLogs,displayRuntimeLogs,require_split2}from"./chunks/chunk-AIMMAROX.js";import{require_format}from"./chunks/chunk-WRILLB46.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-7NSHIG54.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-B7YJLE3P.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-FA6O7FPC.js";import{api,tryOpenApiFallback}from"./chunks/chunk-FWN57YF7.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-T4QWSTWE.js";import{dump,load,main}from"./chunks/chunk-X5OINFLV.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{require_fast_deep_equal}from"./chunks/chunk-4MZK6JT6.js";import{selectOrg}from"./chunks/chunk-N7XPPYQQ.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-DECRXYX6.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-VDOJERIW.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-V6BHS2M2.js";import{require_semver}from"./chunks/chunk-KKS7XWEX.js";import{readJSONFile}from"./chunks/chunk-I327YWUE.js";import{Now,getBuildMachineResourceConfig,isDeploying,printDeploymentStatus}from"./chunks/chunk-35QWU4NB.js";import"./chunks/chunk-K6GIN2TC.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-XQQGQ55A.js";import"./chunks/chunk-2H77IRPI.js";import{require_dist as require_dist3}from"./chunks/chunk-Z6TGFLIO.js";import"./chunks/chunk-OHDEHZLX.js";import"./chunks/chunk-M2W3HKV3.js";import"./chunks/chunk-PHW54NU5.js";import"./chunks/chunk-U56NHYAH.js";import"./chunks/chunk-RBYCFVJN.js";import"./chunks/chunk-TRTEXGVN.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-T52FMXWC.js";import"./chunks/chunk-V6MR45PD.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-MKY5IBKK.js";import{require_execa}from"./chunks/chunk-HWWHR7H3.js";import{isGuidanceEnabled}from"./chunks/chunk-DQ2KI6FO.js";import{stamp_default}from"./chunks/chunk-XPXOV5UO.js";import"./chunks/chunk-2I64AYHG.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ILFUNCJZ.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-LQBC5QPO.js";import{validateLsArgs}from"./chunks/chunk-Z4VR6CQ2.js";import{elapsed}from"./chunks/chunk-JZRMH5UA.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import{require_dist2}from"./chunks/chunk-DT3EUC6S.js";import"./chunks/chunk-ZOIPWLUF.js";import"./chunks/chunk-P2O5DOYE.js";import"./chunks/chunk-L3JDEHCQ.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-4NICAS7W.js";import{resolveProjectContext}from"./chunks/chunk-ULYAF4N3.js";import{performDeviceCodeFlow,saveDeviceCodeTokens}from"./chunks/chunk-6JU3QZ3O.js";import{require_open}from"./chunks/chunk-ULLWCOYC.js";import"./chunks/chunk-N6CNMMSZ.js";import{getTeams}from"./chunks/chunk-I46LFJJG.js";import{getSubcommand as getSubcommand7}from"./chunks/chunk-ETV3C2CV.js";import{init_main,parse}from"./chunks/chunk-OI263FBO.js";import{ensureLink}from"./chunks/chunk-7RT22KMX.js";import"./chunks/chunk-NXJLJLEM.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS}from"./chunks/chunk-CVX5X5RI.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_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,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,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,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-NKC536ZX.js";import{createSubcommand as createSubcommand8,getSubcommand as getSubcommand4,searchSubcommand as searchSubcommand3,tracesCommand}from"./chunks/chunk-4O5TQSWD.js";import{tracesConfigCommand}from"./chunks/chunk-3R66O72V.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand14,listSubcommand as listSubcommand26,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-G43DZJ2Z.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-2RQFMCPJ.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-NT67T6DL.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-NESZV33T.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-RFWCEREA.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-KOSM3DYE.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand5,listSubcommand as listSubcommand7,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-7JFK53D4.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-XF5HR3BJ.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesNotificationsUpdateSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-N5Q4IX3H.js";import{logsCommand}from"./chunks/chunk-JRU6AGXG.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-W7PVS44H.js";import"./chunks/chunk-7I23VXBQ.js";import"./chunks/chunk-JKTQV2QJ.js";import"./chunks/chunk-TBLJVTTQ.js";import"./chunks/chunk-C3XFIO5L.js";import"./chunks/chunk-FAW6NBLQ.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-QMBXEDTG.js";import"./chunks/chunk-SOJCELXH.js";import{param}from"./chunks/chunk-SXUEGVWB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-6BZCSVH6.js";import"./chunks/chunk-R3B67TKQ.js";import{getDeployment,toHost}from"./chunks/chunk-C5KVTG2O.js";import{mapCertError}from"./chunks/chunk-6NPXWN5F.js";import"./chunks/chunk-S2LBGLRE.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-BKNROJQU.js";import{table}from"./chunks/chunk-6TAQ6OWD.js";import{detectExplicitScope,getContextName,getScope,introspectToken,isAppPrincipalEnabled,persistAuthConfig,readLocalConfig,resolveAppFromToken,writeToConfigFile}from"./chunks/chunk-ZNFC3CZF.js";import{require_ms}from"./chunks/chunk-QTKJC2O5.js";import{getGlobalPathConfig}from"./chunks/chunk-CQ3RAERR.js";import{TelemetryClient}from"./chunks/chunk-A5VLP25I.js";import"./chunks/chunk-RCTYVKM5.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-7T6TL3GQ.js";import"./chunks/chunk-GHM7V3GG.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-5XJNPXQK.js";import{printError}from"./chunks/chunk-7T4CJ6MJ.js";import{parseArguments}from"./chunks/chunk-LCWCTL6L.js";import{fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{VERCEL_CONFIG_EXTENSIONS,execFileAsync,getGitConfigPath,getGitExecutable,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-Z5PMK6F2.js";import"./chunks/chunk-F2ZWW2IO.js";import"./chunks/chunk-B4ATVYZW.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import"./chunks/chunk-BRK4OB4B.js";import"./chunks/chunk-WPS6JZF6.js";import{require_strip_ansi}from"./chunks/chunk-OSCCYU74.js";import{argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,exitWithNonInteractiveError,getGlobalFlagsFromArgv,mentionsObservabilityPlus,observabilityPlusPurchaseFix,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags,writeAgentError}from"./chunks/chunk-5VWK73R6.js";import{quoteArg}from"./chunks/chunk-BKV35LVB.js";import{GLOBAL_CLI_FLAG_NAMES,arg_common_default,formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,jsonOption,stripSensitiveAuthArgs}from"./chunks/chunk-PV5YI2ZZ.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-YMM3VY3J.js";import{getUser}from"./chunks/chunk-SM5JI6QM.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-RINZXCDJ.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-EWWFNMPZ.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{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope}from"./chunks/chunk-PADCVJ7G.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-X47XV2WG.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-ACCZWEKL.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-SDGWKUST.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-L46BHPRD.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-JO3XBFR3.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{collectBuildLogs,displayBuildLogs,displayRuntimeLogs,require_split2}from"./chunks/chunk-E4RLHRDF.js";import{require_format}from"./chunks/chunk-WRILLB46.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-HLVUEYOZ.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-JSKSNCK2.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-FA6O7FPC.js";import{api,tryOpenApiFallback}from"./chunks/chunk-KREBNPHL.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-VTMLKJVQ.js";import{dump,load,main}from"./chunks/chunk-WOKSTB3F.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{require_fast_deep_equal}from"./chunks/chunk-4MZK6JT6.js";import{selectOrg}from"./chunks/chunk-N7XPPYQQ.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-GASSNHZG.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-VDOJERIW.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-KG5BMLOI.js";import{require_semver}from"./chunks/chunk-KKS7XWEX.js";import{readJSONFile}from"./chunks/chunk-K5WTLFS6.js";import{Now,getBuildMachineResourceConfig,isDeploying,printDeploymentStatus}from"./chunks/chunk-7POWBJDF.js";import"./chunks/chunk-WW3VUXRV.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-XQQGQ55A.js";import"./chunks/chunk-2H77IRPI.js";import{require_dist as require_dist3}from"./chunks/chunk-AKPQWZIP.js";import"./chunks/chunk-OHDEHZLX.js";import"./chunks/chunk-M2W3HKV3.js";import"./chunks/chunk-PHW54NU5.js";import"./chunks/chunk-U56NHYAH.js";import"./chunks/chunk-DECIQZZQ.js";import"./chunks/chunk-TRTEXGVN.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-T52FMXWC.js";import"./chunks/chunk-V6MR45PD.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-MKY5IBKK.js";import{require_execa}from"./chunks/chunk-HWWHR7H3.js";import{isGuidanceEnabled}from"./chunks/chunk-DQ2KI6FO.js";import{stamp_default}from"./chunks/chunk-XPXOV5UO.js";import"./chunks/chunk-2I64AYHG.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ILFUNCJZ.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-LQBC5QPO.js";import{validateLsArgs}from"./chunks/chunk-Z4VR6CQ2.js";import{elapsed}from"./chunks/chunk-JZRMH5UA.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import{require_dist2}from"./chunks/chunk-N4PVXHAJ.js";import"./chunks/chunk-UWO3M2L2.js";import"./chunks/chunk-P2O5DOYE.js";import"./chunks/chunk-L3JDEHCQ.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-4HXRTNAK.js";import{resolveProjectContext}from"./chunks/chunk-EQHNA4BW.js";import{performDeviceCodeFlow,saveDeviceCodeTokens}from"./chunks/chunk-6JU3QZ3O.js";import{require_open}from"./chunks/chunk-ULLWCOYC.js";import"./chunks/chunk-N6CNMMSZ.js";import{getTeams}from"./chunks/chunk-I46LFJJG.js";import{getSubcommand as getSubcommand7}from"./chunks/chunk-ETV3C2CV.js";import{init_main,parse}from"./chunks/chunk-OI263FBO.js";import{ensureLink}from"./chunks/chunk-ZQIUMXCI.js";import"./chunks/chunk-LCY4SULE.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS}from"./chunks/chunk-CVX5X5RI.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_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,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,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,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-ADDXKC3J.js";import{createSubcommand as createSubcommand8,getSubcommand as getSubcommand4,searchSubcommand as searchSubcommand3,tracesCommand}from"./chunks/chunk-LHQUNL52.js";import{tracesConfigCommand}from"./chunks/chunk-3R66O72V.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand14,listSubcommand as listSubcommand26,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-D5VTBRWF.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-2RQFMCPJ.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-NT67T6DL.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-NESZV33T.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-RFWCEREA.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-KOSM3DYE.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand5,listSubcommand as listSubcommand7,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-7JFK53D4.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-RVKOPGOI.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesNotificationsUpdateSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-HVROAV4B.js";import{logsCommand}from"./chunks/chunk-JRU6AGXG.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-W7PVS44H.js";import"./chunks/chunk-7I23VXBQ.js";import"./chunks/chunk-JKTQV2QJ.js";import"./chunks/chunk-WN6OXK2F.js";import"./chunks/chunk-C3XFIO5L.js";import"./chunks/chunk-FAW6NBLQ.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-B5PFD6Q3.js";import"./chunks/chunk-SOJCELXH.js";import{param}from"./chunks/chunk-SXUEGVWB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-6BZCSVH6.js";import"./chunks/chunk-R3B67TKQ.js";import{getDeployment,toHost}from"./chunks/chunk-C5KVTG2O.js";import{mapCertError}from"./chunks/chunk-6NPXWN5F.js";import"./chunks/chunk-S2LBGLRE.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-UOHVKN6N.js";import{table}from"./chunks/chunk-6TAQ6OWD.js";import{detectExplicitScope,getContextName,getScope,introspectToken,isAppPrincipalEnabled,persistAuthConfig,readLocalConfig,resolveAppFromToken,writeToConfigFile}from"./chunks/chunk-ALXWJ7XN.js";import{require_ms}from"./chunks/chunk-QTKJC2O5.js";import{getGlobalPathConfig}from"./chunks/chunk-CQ3RAERR.js";import{TelemetryClient}from"./chunks/chunk-MCCL762Q.js";import"./chunks/chunk-RCTYVKM5.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-7T6TL3GQ.js";import"./chunks/chunk-GHM7V3GG.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-5XJNPXQK.js";import{printError}from"./chunks/chunk-7T4CJ6MJ.js";import{parseArguments}from"./chunks/chunk-LCWCTL6L.js";import{fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{VERCEL_CONFIG_EXTENSIONS,execFileAsync,getGitConfigPath,getGitExecutable,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-7IRKF3ZG.js";import"./chunks/chunk-F2ZWW2IO.js";import"./chunks/chunk-B4ATVYZW.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import"./chunks/chunk-BRK4OB4B.js";import"./chunks/chunk-WPS6JZF6.js";import{require_strip_ansi}from"./chunks/chunk-OSCCYU74.js";import{argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,exitWithNonInteractiveError,getGlobalFlagsFromArgv,mentionsObservabilityPlus,observabilityPlusPurchaseFix,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags,writeAgentError}from"./chunks/chunk-5VWK73R6.js";import{quoteArg}from"./chunks/chunk-BKV35LVB.js";import{GLOBAL_CLI_FLAG_NAMES,arg_common_default,formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,jsonOption,stripSensitiveAuthArgs}from"./chunks/chunk-PV5YI2ZZ.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-YMM3VY3J.js";import{getUser}from"./chunks/chunk-SM5JI6QM.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-RINZXCDJ.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-EWWFNMPZ.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),1}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})),1):(needHelp&&telemetry2.trackCliFlagHelp("agent-runs"),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2)}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(listSubcommand),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),await list2(client));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(inspectSubcommand),2):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),await inspect(client));case"trace":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(traceSubcommand),2):(telemetry2.trackCliSubcommandTrace(subcommandOriginal),await trace(client));case"projects":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(projectsSubcommand),2):(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})),1}}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),1}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-UN5J66MI.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-MMQAS2OQ.js")).default;return listFn(client,telemetry2)}}}var import_chalk6=__toESM(require_source(),1);async function listApiKeys(client){let{apiKeys:apiKeys2}=await client.fetch("/v1/api-keys?purpose=ai-gateway",{method:"GET"});return apiKeys2??[]}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})}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let matches=(await listApiKeys(client)).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),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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),1}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})),1):(needHelp&&telemetry2.trackCliFlagHelp("agent-runs"),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2)}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(listSubcommand),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),await list2(client));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(inspectSubcommand),2):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),await inspect(client));case"trace":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(traceSubcommand),2):(telemetry2.trackCliSubcommandTrace(subcommandOriginal),await trace(client));case"projects":return needHelp?(telemetry2.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(projectsSubcommand),2):(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})),1}}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),1}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-UN5J66MI.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-X4MKKDJX.js")).default;return listFn(client,telemetry2)}}}var import_chalk6=__toESM(require_source(),1);async function listApiKeys(client){let{apiKeys:apiKeys2}=await client.fetch("/v1/api-keys?purpose=ai-gateway",{method:"GET"});return apiKeys2??[]}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})}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let matches=(await listApiKeys(client)).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),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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")}]},1),output_manager_default.error(message),1}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{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}};async function renderResource(client,{asJson,spinnerText,fetch:fetch3,toJSON,isEmpty,emptyMessage,header,renderTable:renderTable2,notFoundMessage}){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)),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),1}let{flags:opts}=parsedArgs;telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),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:()=>listApiKeys(client),toJSON:apiKeys2=>({apiKeys:apiKeys2}),isEmpty:apiKeys2=>apiKeys2.length===0,emptyMessage:`No API keys found. Create one with ${getCommandName("ai-gateway api-keys create")}.`,header:()=>"API keys",renderTable:apiKeys2=>printApiKeysTable(apiKeys2,keyDefault)})}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
 
@@ -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),1}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),1}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})),2;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),2):(telemetry2.trackCliSubcommandModels(subcommandOriginal),models2(client,args));case"labs":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardLabsSubcommand),2):(telemetry2.trackCliSubcommandLabs(subcommandOriginal),labs(client,args));case"apps":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardAppsSubcommand),2):(telemetry2.trackCliSubcommandApps(subcommandOriginal),apps(client,args));case"providers":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardProvidersSubcommand),2):(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),1}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})),2;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})),2):(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})),2):(output_manager_default.error("Please specify a subcommand. Run `vercel ai-gateway --help` for usage information."),1)}}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"}]},1),printError(err),1}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-NIRGPMGV.js")).default;return inspectFn(client,rawSubcommandArgs)}case"rules":{telemetry2.trackCliSubcommandRules(getRulesTelemetryAction(args));let rulesFn=(await import("./chunks/rules-TMEV52OR.js")).default;return rulesFn(client,rawSubcommandArgs)}default:{telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-4TZ6QS5J.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),1}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),1;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),1}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),1}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})),2;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),2):(telemetry2.trackCliSubcommandModels(subcommandOriginal),models2(client,args));case"labs":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardLabsSubcommand),2):(telemetry2.trackCliSubcommandLabs(subcommandOriginal),labs(client,args));case"apps":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardAppsSubcommand),2):(telemetry2.trackCliSubcommandApps(subcommandOriginal),apps(client,args));case"providers":return needHelp?(telemetry2.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardProvidersSubcommand),2):(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),1}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})),2;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})),2):(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})),2):(output_manager_default.error("Please specify a subcommand. Run `vercel ai-gateway --help` for usage information."),1)}}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"}]},1),printError(err),1}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-2SXPXNYH.js")).default;return inspectFn(client,rawSubcommandArgs)}case"rules":{telemetry2.trackCliSubcommandRules(getRulesTelemetryAction(args));let rulesFn=(await import("./chunks/rules-KAGL6MH3.js")).default;return rulesFn(client,rawSubcommandArgs)}default:{telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-TSDBEAVF.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),1}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),1;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),1}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>")}`)}`),1;if(!aliasOrId)return output_manager_default.error(`${getCommandName("alias rm <alias>")} expects one argument`),1;if(!isValidName(aliasOrId))return output_manager_default.error(`The provided argument "${aliasOrId}" is not a valid alias`),1;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}
@@ -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),1}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})),2}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})),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),1}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-QQJAYYMO.js")).default(client,telemetry2));case"open":return handleHelp(openSubcommand)?0:(telemetry2.trackCliSubcommandOpen(subcommandOriginal),(await import("./chunks/open-PORNBO4I.js")).default(client,telemetry2));case"reply":return handleHelp(replySubcommand)?0:(telemetry2.trackCliSubcommandReply(subcommandOriginal),(await import("./chunks/reply-3CDS6LPX.js")).default(client,telemetry2));case"resolve":return handleHelp(resolveSubcommand)?0:(telemetry2.trackCliSubcommandResolve(subcommandOriginal),(await import("./chunks/resolve-XQ6UPCSZ.js")).default(client,telemetry2,!0));case"reopen":return handleHelp(reopenSubcommand)?0:(telemetry2.trackCliSubcommandReopen(subcommandOriginal),(await import("./chunks/resolve-XQ6UPCSZ.js")).default(client,telemetry2,!1));case"edit":return handleHelp(editSubcommand)?0:(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-4U3ZERPO.js")).default(client,telemetry2));case"delete":return handleHelp(deleteSubcommand)?0:(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-PIASS7TQ.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-4MCOLKTO.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(targets){return targets.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),1}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})),2}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})),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),1}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-J3F3U3YF.js")).default(client,telemetry2));case"open":return handleHelp(openSubcommand)?0:(telemetry2.trackCliSubcommandOpen(subcommandOriginal),(await import("./chunks/open-3G4R3VIN.js")).default(client,telemetry2));case"reply":return handleHelp(replySubcommand)?0:(telemetry2.trackCliSubcommandReply(subcommandOriginal),(await import("./chunks/reply-FR5VO7DA.js")).default(client,telemetry2));case"resolve":return handleHelp(resolveSubcommand)?0:(telemetry2.trackCliSubcommandResolve(subcommandOriginal),(await import("./chunks/resolve-JI2ENFS6.js")).default(client,telemetry2,!0));case"reopen":return handleHelp(reopenSubcommand)?0:(telemetry2.trackCliSubcommandReopen(subcommandOriginal),(await import("./chunks/resolve-JI2ENFS6.js")).default(client,telemetry2,!1));case"edit":return handleHelp(editSubcommand)?0:(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-Y7OL72ZK.js")).default(client,telemetry2));case"delete":return handleHelp(deleteSubcommand)?0:(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-MHXN5KTO.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-ZQSOWXRI.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(targets){return targets.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,connectionMethodFlag,targetFlag}=opts;if(methods.length===0)throw new ConnexMethodError(`"${opts.service}" doesn't publish connection methods.`);let explicitTarget=targetFlag?validateTarget(targetFlag,targets,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&&targets&&targets.length>1&&opts.interactive&&(printOptionCatalog(`${opts.serviceName} products:`,targets.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:targets.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(`
@@ -667,7 +667,7 @@ ${steps.flatMap(([why,command2])=>[import_chalk149.default.dim(` ${why}`),` ${
667
667
  `),0}catch(e2){return failFirewallApi(client,e2,{fallback:"Failed to fetch bot management",nextCommand:"firewall bot-management",permissionAction:"read firewall config",projectName:project.name,timeoutJob:"bot management"})}finally{output_manager_default.stopSpinner()}}async function loadUnknownBotTraffic(client,projectId,teamId){let dimension=getDimension("unknown-bot"),title6=dimension?.widgetTitle??"Unknown Bot Traffic",unavailable=error=>({dimension:"unknown-bot",title:title6,rows:[],unavailable:isActivityUnavailable6(error)?"plan":isUnsupportedDimension(error)?"filter":isRateLimited(error)?"rate-limit":isActivityTimeout(error)?"timeout":"error",retrySeconds:rateLimitRetrySeconds(error),message:isRateLimited(error)?apiServerMessage(error):void 0});if(!dimension)return unavailable(new Error("unknown-bot dimension missing"));let endTime=new Date,startTime=new Date(endTime.getTime()-DEFAULT_TRAFFIC_WINDOW_MS);try{let rows=await getTopList(client,{projectId,ownerId:teamId,startTime,endTime,metric:dimension.metric,groupBy:[dimension.field],filter:andFilters(dimension.excludeFilter,dimension.extraFilter),top:topListFetchCount(UNKNOWN_BOT_TOP)});return{dimension:dimension.alias,title:title6,rows:toTopListRows(rows,dimension.field).slice(0,UNKNOWN_BOT_TOP)}}catch(e2){return output_manager_default.debug(isAPIError(e2)?`Unknown bot traffic query failed: status=${e2.status} code=${e2.code??"(none)"} message=${e2.serverMessage}`:`Unknown bot traffic query failed: ${e2 instanceof Error?e2.message:String(e2)}`),unavailable(e2)}}var FirewallTelemetryClient=class extends TelemetryClient{trackCliFlagTeamLevel(value){value&&this.trackCliFlag("team-level")}trackCliSubcommandStatus(actual){this.trackCliSubcommand({subcommand:"status",value:actual})}trackCliSubcommandOverview(actual){this.trackCliSubcommand({subcommand:"overview",value:actual})}trackCliSubcommandDiff(actual){this.trackCliSubcommand({subcommand:"diff",value:actual})}trackCliSubcommandPublish(actual){this.trackCliSubcommand({subcommand:"publish",value:actual})}trackCliSubcommandDiscard(actual){this.trackCliSubcommand({subcommand:"discard",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandRulesList(actual){this.trackCliSubcommand({subcommand:"rules:list",value:actual})}trackCliSubcommandRulesInspect(actual){this.trackCliSubcommand({subcommand:"rules:inspect",value:actual})}trackCliSubcommandRulesAdd(actual){this.trackCliSubcommand({subcommand:"rules:add",value:actual})}trackCliSubcommandRulesEdit(actual){this.trackCliSubcommand({subcommand:"rules:edit",value:actual})}trackCliSubcommandRulesEnable(actual){this.trackCliSubcommand({subcommand:"rules:enable",value:actual})}trackCliSubcommandRulesDisable(actual){this.trackCliSubcommand({subcommand:"rules:disable",value:actual})}trackCliSubcommandRulesRemove(actual){this.trackCliSubcommand({subcommand:"rules:remove",value:actual})}trackCliSubcommandRulesReorder(actual){this.trackCliSubcommand({subcommand:"rules:reorder",value:actual})}trackCliSubcommandIpBlocks(actual){this.trackCliSubcommand({subcommand:"ip-blocks",value:actual})}trackCliSubcommandIpBlocksList(actual){this.trackCliSubcommand({subcommand:"ip-blocks:list",value:actual})}trackCliSubcommandIpBlocksBlock(actual){this.trackCliSubcommand({subcommand:"ip-blocks:block",value:actual})}trackCliSubcommandIpBlocksUnblock(actual){this.trackCliSubcommand({subcommand:"ip-blocks:unblock",value:actual})}trackCliSubcommandSystemBypass(actual){this.trackCliSubcommand({subcommand:"system-bypass",value:actual})}trackCliSubcommandSystemBypassList(actual){this.trackCliSubcommand({subcommand:"system-bypass:list",value:actual})}trackCliSubcommandSystemBypassAdd(actual){this.trackCliSubcommand({subcommand:"system-bypass:add",value:actual})}trackCliSubcommandSystemBypassRemove(actual){this.trackCliSubcommand({subcommand:"system-bypass:remove",value:actual})}trackCliSubcommandAttackMode(actual){this.trackCliSubcommand({subcommand:"attack-mode",value:actual})}trackCliSubcommandAttackModeEnable(actual){this.trackCliSubcommand({subcommand:"attack-mode:enable",value:actual})}trackCliSubcommandAttackModeDisable(actual){this.trackCliSubcommand({subcommand:"attack-mode:disable",value:actual})}trackCliSubcommandSystemMitigations(actual){this.trackCliSubcommand({subcommand:"system-mitigations",value:actual})}trackCliSubcommandSystemMitigationsPause(actual){this.trackCliSubcommand({subcommand:"system-mitigations:pause",value:actual})}trackCliSubcommandSystemMitigationsResume(actual){this.trackCliSubcommand({subcommand:"system-mitigations:resume",value:actual})}trackCliSubcommandAlerts(actual){this.trackCliSubcommand({subcommand:"alerts",value:actual})}trackCliSubcommandAlertsList(actual){this.trackCliSubcommand({subcommand:"alerts:list",value:actual})}trackCliSubcommandAlertsInspect(actual){this.trackCliSubcommand({subcommand:"alerts:inspect",value:actual})}trackCliSubcommandPersistentActions(actual){this.trackCliSubcommand({subcommand:"persistent-actions",value:actual})}trackCliSubcommandPersistentActionsList(actual){this.trackCliSubcommand({subcommand:"persistent-actions:list",value:actual})}trackCliSubcommandPersistentActionsInspect(actual){this.trackCliSubcommand({subcommand:"persistent-actions:inspect",value:actual})}trackCliSubcommandTraffic(actual){this.trackCliSubcommand({subcommand:"traffic",value:actual})}trackCliSubcommandTrafficList(actual){this.trackCliSubcommand({subcommand:"traffic:list",value:actual})}trackCliSubcommandTrafficInspect(actual){this.trackCliSubcommand({subcommand:"traffic:inspect",value:actual})}trackCliSubcommandBotManagement(actual){this.trackCliSubcommand({subcommand:"bot-management",value:actual})}};var COMMAND_CONFIG38={overview:getCommandAliases(overviewSubcommand),status:getCommandAliases(statusSubcommand),rules:getCommandAliases(rulesSubcommand2),diff:getCommandAliases(diffSubcommand),publish:getCommandAliases(publishSubcommand),discard:getCommandAliases(discardSubcommand),"ip-blocks":getCommandAliases(ipBlocksSubcommand),"system-bypass":getCommandAliases(systemBypassSubcommand),"attack-mode":getCommandAliases(attackModeSubcommand),"system-mitigations":getCommandAliases(systemMitigationsSubcommand),alerts:getCommandAliases(alertsSubcommand),"persistent-actions":getCommandAliases(persistentActionsSubcommand),traffic:getCommandAliases(trafficSubcommand),"bot-management":getCommandAliases(botManagementSubcommand)};async function main19(client){let telemetry2=new FirewallTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(firewallCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),1}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG38),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("firewall"),output_manager_default.print(help(firewallCommand,{columns:client.stderr.columns})),2;function printHelp(command2){output_manager_default.print(help(command2,{parent:firewallCommand,columns:client.stderr.columns}))}switch(subcommand&&!needHelp&&(telemetry2.trackCliOptionProject(getProjectOptionFromArgs(args)),telemetry2.trackCliFlagTeamLevel(args.includes("--team-level"))),subcommand){case"status":return needHelp?(telemetry2.trackCliFlagHelp("firewall",subcommandOriginal),printHelp(statusSubcommand),2):(telemetry2.trackCliSubcommandStatus(subcommandOriginal),status(client,args));case"overview":return needHelp?(telemetry2.trackCliFlagHelp("firewall",subcommandOriginal),printHelp(overviewSubcommand),2):(telemetry2.trackCliSubcommandOverview(subcommandOriginal),overview(client,args));case"diff":return needHelp?(telemetry2.trackCliFlagHelp("firewall",subcommandOriginal),printHelp(diffSubcommand),2):(telemetry2.trackCliSubcommandDiff(subcommandOriginal),diff(client,args));case"publish":return needHelp?(telemetry2.trackCliFlagHelp("firewall",subcommandOriginal),printHelp(publishSubcommand),2):(telemetry2.trackCliSubcommandPublish(subcommandOriginal),publish(client,args));case"discard":return needHelp?(telemetry2.trackCliFlagHelp("firewall",subcommandOriginal),printHelp(discardSubcommand),2):(telemetry2.trackCliSubcommandDiscard(subcommandOriginal),discard(client,args));case"rules":{telemetry2.trackCliSubcommandRules(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main15(client,nestedArgs,telemetry2)}case"ip-blocks":{telemetry2.trackCliSubcommandIpBlocks(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main14(client,nestedArgs,telemetry2)}case"system-bypass":{telemetry2.trackCliSubcommandSystemBypass(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main11(client,nestedArgs,telemetry2)}case"attack-mode":{telemetry2.trackCliSubcommandAttackMode(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main12(client,nestedArgs,telemetry2)}case"system-mitigations":{telemetry2.trackCliSubcommandSystemMitigations(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main13(client,nestedArgs,telemetry2)}case"alerts":{telemetry2.trackCliSubcommandAlerts(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main16(client,nestedArgs,telemetry2)}case"persistent-actions":{telemetry2.trackCliSubcommandPersistentActions(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main17(client,nestedArgs,telemetry2)}case"traffic":{telemetry2.trackCliSubcommandTraffic(subcommandOriginal);let nestedArgs=needHelp?[...args,"--help"]:args;return main18(client,nestedArgs,telemetry2)}case"bot-management":return needHelp?(telemetry2.trackCliFlagHelp("firewall",subcommandOriginal),printHelp(botManagementSubcommand),2):(telemetry2.trackCliSubcommandBotManagement(subcommandOriginal),botManagement(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG38)),output_manager_default.print(help(firewallCommand,{columns:client.stderr.columns})),2}}var import_chalk150=__toESM(require_source(),1);var GlobalConfigLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function listCmd(client,argv){let telemetry2=new GlobalConfigLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand15.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,1,{variant:"global-config"}),printError(error),1}let{args,flags}=parsedArgs,lsCheck=validateLsArgs({commandName:"global-config list",args,maxArgs:0,exitCode:2});if(lsCheck!==0)return lsCheck;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;telemetry2.trackCliOptionFormat(flags["--format"]);let rows;try{rows=await client.fetch("/v1/global-config")}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(rows,null,2)}
668
668
  `),0;let contextName=await getContextName(client);if(output_manager_default.print(`${(0,import_chalk150.gray)(`${rows.length} Global Config${rows.length===1?"":"s"} found under ${contextName} ${stamp_default()}`)}
669
669
  `),rows.length===0)return 0;let tableRows=[["id","slug","items","size","updated"].map(h=>(0,import_chalk150.gray)(h)),...rows.map(r=>[r.id,r.slug,String(r.itemCount??""),String(r.sizeInBytes??""),r.updatedAt!=null?new Date(r.updatedAt).toISOString():""])];return client.stderr.write(`${table(tableRows,{hsep:2})}
670
- `),0}var import_chalk151=__toESM(require_source(),1);var GlobalConfigAddTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(value){this.trackCliArgument({arg:"slug",value})}trackCliOptionItems(value){value&&this.trackCliOption({option:"items",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function addCmd(client,argv){let telemetry2=new GlobalConfigAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(addSubcommand5.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,1,{variant:"global-config"}),printError(error),1}let{args,flags}=parsedArgs,[slug]=args;if(telemetry2.trackCliArgumentSlug(slug),telemetry2.trackCliOptionItems(flags["--items"]),telemetry2.trackCliOptionFormat(flags["--format"]),!slug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Slug is required. Usage: `vercel global-config add <slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config add <slug>")}]},1),output_manager_default.error(`Missing slug. Usage: ${import_chalk151.default.cyan(getCommandName("global-config add <slug>"))}`),1;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,items;if(flags["--items"])try{let parsed=JSON.parse(String(flags["--items"]));if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return output_manager_default.error("`--items` must be a JSON object of key \u2192 value pairs."),1;items=parsed}catch{return output_manager_default.error("`--items` must be valid JSON."),1}let created;try{created=await client.fetch("/v1/global-config",{method:"POST",body:items?{slug,items}:{slug}})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
670
+ `),0}var import_chalk151=__toESM(require_source(),1);var GlobalConfigAddTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(value){this.trackCliArgument({arg:"slug",value})}trackCliOptionItems(value){value&&this.trackCliOption({option:"items",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function addCmd(client,argv){let telemetry2=new GlobalConfigAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(addSubcommand5.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,1,{variant:"global-config"}),printError(error),1}let{args,flags}=parsedArgs,[slug]=args;if(telemetry2.trackCliArgumentSlug(slug),telemetry2.trackCliOptionItems(flags["--items"]),telemetry2.trackCliOptionFormat(flags["--format"]),!slug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Slug is required. Usage: `vercel global-config create <slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config create <slug>")}]},1),output_manager_default.error(`Missing slug. Usage: ${import_chalk151.default.cyan(getCommandName("global-config create <slug>"))}`),1;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,items;if(flags["--items"])try{let parsed=JSON.parse(String(flags["--items"]));if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return output_manager_default.error("`--items` must be a JSON object of key \u2192 value pairs."),1;items=parsed}catch{return output_manager_default.error("`--items` must be valid JSON."),1}let created;try{created=await client.fetch("/v1/global-config",{method:"POST",body:items?{slug,items}:{slug}})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
671
671
  `),0):(output_manager_default.success(`Global Config ${import_chalk151.default.bold(slug)} created.`),0)}var import_chalk152=__toESM(require_source(),1);var GlobalConfigGetTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function resolveGlobalConfigId(client,idOrSlug){return idOrSlug?idOrSlug.startsWith("ecfg_")?idOrSlug:(await client.fetch("/v1/global-config")).find(c=>c.slug===idOrSlug)?.id??null:null}async function getCmd(client,argv){let telemetry2=new GlobalConfigGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(getSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,1,{variant:"global-config"}),printError(error),1}let{args,flags}=parsedArgs,[idOrSlug]=args;if(telemetry2.trackCliArgumentIdOrSlug(idOrSlug),telemetry2.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config get <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk152.default.cyan(getCommandName("global-config get <id-or-slug>"))}`),1;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,id2;try{id2=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id2)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let data;try{data=await client.fetch(`/v1/global-config/${encodeURIComponent(id2)}`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
672
672
  `),0):(output_manager_default.log(JSON.stringify(data,null,2)),0)}var import_chalk153=__toESM(require_source(),1);var GlobalConfigUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionSlug(value){value&&this.trackCliOption({option:"slug",value:this.redactedValue})}trackCliOptionPatch(value){value&&this.trackCliOption({option:"patch",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function parsePatchJson(raw){let trimmed=raw.trim();try{return JSON.parse(trimmed)}catch(firstError){let normalized=trimmed.replace(/\\r\\n/g,`
673
673
  `).replace(/\\n/g,`
@@ -687,7 +687,7 @@ ${created.token}
687
687
  `),0):(output_manager_default.log(JSON.stringify(backup,null,2)),0)}let query=new URLSearchParams4;limit!==void 0&&query.set("limit",String(limit)),next&&query.set("next",next),query.set("metadata","true");let queryString=query.toString(),suffix=queryString?`?${queryString}`:"",response=await client.fetch(`${base}${suffix}`);if(asJson)return client.stdout.write(`${JSON.stringify(response,null,2)}
688
688
  `),0;if(!response.backups.length)return output_manager_default.log("No backups."),0;let tableRows=[["id","last modified","items","bytes"].map(h=>(0,import_chalk157.gray)(h)),...response.backups.map(backup=>[backup.id,formatDate3(backup.lastModified),formatNumber(backup.metadata?.itemsCount),formatNumber(backup.metadata?.itemsBytes)])];if(client.stderr.write(`${table(tableRows,{hsep:2})}
689
689
  `),response.pagination?.hasNext&&response.pagination.next){let commandFlags=getCommandFlags(flags,["--format","--next","--restore","--yes"]);output_manager_default.print(`${(0,import_chalk157.gray)(`Next page: ${getCommandName(`global-config backups ${idOrSlug}${commandFlags} --next ${response.pagination.next}`)}`)}
690
- `)}return 0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}function formatDate3(value){if(value===void 0)return"";let timestamp2=typeof value=="number"?value:Date.parse(value);return Number.isFinite(timestamp2)?new Date(timestamp2).toISOString():String(value)}function formatNumber(value){return value===void 0?"":String(value)}var GlobalConfigTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandGet(actual){this.trackCliSubcommand({subcommand:"get",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandItems(actual){this.trackCliSubcommand({subcommand:"items",value:actual})}trackCliSubcommandTokens(actual){this.trackCliSubcommand({subcommand:"tokens",value:actual})}trackCliSubcommandBackups(actual){this.trackCliSubcommand({subcommand:"backups",value:actual})}};async function applyLinkedProjectTeam(client){let link=await getLinkedProject(client);if(link.status==="error")return link.exitCode;link.status==="linked"&&(client.config.currentTeam=link.org.type==="team"?link.org.id:void 0)}var COMMAND_CONFIG39={list:["list","ls"],add:["add","create"],get:["get","inspect"],update:["update"],remove:["remove","rm","delete"],items:["items"],tokens:["tokens"],backups:["backups"]};async function main20(client){let parsedArgs,flagsSpecification=getFlagsSpecification(globalConfigCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),1}let telemetry2=new GlobalConfigTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG39),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("global-config"),output_manager_default.print(help(globalConfigCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:globalConfigCommand,columns:client.stderr.columns})),2}if(!needHelp){let linkExitCode=await applyLinkedProjectTeam(client);if(linkExitCode!==void 0)return linkExitCode}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(addSubcommand5)):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),addCmd(client,args));case"get":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(getSubcommand)):(telemetry2.trackCliSubcommandGet(subcommandOriginal),getCmd(client,args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(updateSubcommand5)):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),updateCmd(client,args));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(removeSubcommand9)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),removeCmd(client,args));case"items":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(itemsSubcommand)):(telemetry2.trackCliSubcommandItems(subcommandOriginal),itemsCmd(client,args));case"tokens":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(tokensSubcommand)):(telemetry2.trackCliSubcommandTokens(subcommandOriginal),tokensCmd(client,args));case"backups":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(backupsSubcommand)):(telemetry2.trackCliSubcommandBackups(subcommandOriginal),backupsCmd(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(listSubcommand15)):(telemetry2.trackCliSubcommandList(subcommandOriginal),listCmd(client,args))}}var FlagsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandVersions(actual){this.trackCliSubcommand({subcommand:"versions",value:actual})}trackCliSubcommandEvaluations(actual){this.trackCliSubcommand({subcommand:"evaluations",value:actual})}trackCliSubcommandStale(actual){this.trackCliSubcommand({subcommand:"stale",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandUseTargeting(actual){this.trackCliSubcommand({subcommand:"use-targeting",value:actual})}trackCliSubcommandSplit(actual){this.trackCliSubcommand({subcommand:"split",value:actual})}trackCliSubcommandRollout(actual){this.trackCliSubcommand({subcommand:"rollout",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandArchive(actual){this.trackCliSubcommand({subcommand:"archive",value:actual})}trackCliSubcommandUnarchive(actual){this.trackCliSubcommand({subcommand:"unarchive",value:actual})}trackCliSubcommandDisable(actual){this.trackCliSubcommand({subcommand:"disable",value:actual})}trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandSdkKeys(actual){this.trackCliSubcommand({subcommand:"sdk-keys",value:actual})}trackCliSubcommandSegments(actual){this.trackCliSubcommand({subcommand:"segments",value:actual})}trackCliSubcommandEntities(actual){this.trackCliSubcommand({subcommand:"entities",value:actual})}trackCliSubcommandLabels(actual){this.trackCliSubcommand({subcommand:"labels",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandPrepare(actual){this.trackCliSubcommand({subcommand:"prepare",value:actual})}trackCliSubcommandOverride(actual){this.trackCliSubcommand({subcommand:"override",value:actual})}};var import_chalk158=__toESM(require_source(),1),import_ms17=__toESM(require_ms(),1),import_pluralize11=__toESM(require_pluralize(),1);function flagUrl(projectId,flagIdOrSlug){return`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/flags/${encodeURIComponent(flagIdOrSlug)}`}async function fetchFlagForUpdate(client,projectId,flagIdOrSlug){output_manager_default.debug(`Fetching feature flag ${flagIdOrSlug} for project ${projectId} with ETag`);let response=await client.fetch(flagUrl(projectId,flagIdOrSlug),{json:!1}),etag=response.headers.get("etag");if(!etag)throw new Error("Unable to update flag safely because the flag ETag is missing.");return{flag:await response.json(),etag}}async function updateFlag(client,projectId,flagIdOrSlug,request2,options){output_manager_default.debug(`Updating feature flag ${flagIdOrSlug} for project ${projectId}`);let url=flagUrl(projectId,flagIdOrSlug);return await client.fetch(url,{method:"PATCH",headers:options?.ifMatch?{"If-Match":options.ifMatch}:void 0,body:request2})}var MAX_FLAGS_PAGE_LIMIT=100,MAX_FLAG_VERSIONS_PAGE_LIMIT=100;async function getFlags(client,projectId,options={}){let{state="active",tags,createdBy,maintainerIds,limit,cursor:cursor2}=options;output_manager_default.debug(`Fetching feature flags for project ${projectId}`);let basePath=`/v2/projects/${encodeURIComponent(projectId)}/feature-flags/flags`,buildQuery=(pageLimit,pageCursor2)=>{let query=new URLSearchParams;query.set("state",state),query.set("limit",String(pageLimit)),pageCursor2&&query.set("cursor",pageCursor2),createdBy&&query.set("createdBy",createdBy);for(let tag of tags??[])query.append("tags",tag);for(let maintainerId of maintainerIds??[])query.append("maintainerIds",maintainerId);return query.toString()};if(limit!==void 0||cursor2!==void 0){let pageLimit=Math.min(limit??MAX_FLAGS_PAGE_LIMIT,MAX_FLAGS_PAGE_LIMIT),response=await client.fetch(`${basePath}?${buildQuery(pageLimit,cursor2)}`);return{flags:response.data,next:response.pagination?.next??null}}let flags=[],pageCursor;do{let response=await client.fetch(`${basePath}?${buildQuery(MAX_FLAGS_PAGE_LIMIT,pageCursor)}`);flags.push(...response.data),pageCursor=response.pagination?.next??void 0}while(pageCursor);return{flags,next:null}}async function getFlag(client,projectId,flagIdOrSlug){output_manager_default.debug(`Fetching feature flag ${flagIdOrSlug} for project ${projectId}`);let url=flagUrl(projectId,flagIdOrSlug);return await client.fetch(url)}async function getFlagSettings(client,projectId){return output_manager_default.debug(`Fetching feature flag settings for project ${projectId}`),await client.fetch(flagSettingsUrl(projectId))}async function updateFlagSettings(client,projectId,request2){return output_manager_default.debug(`Updating feature flag settings for project ${projectId}`),client.fetch(flagSettingsUrl(projectId),{method:"PATCH",body:request2})}function flagSettingsUrl(projectId){return`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/settings`}async function getFlagVersions(client,projectId,flagIdOrSlug,options={}){output_manager_default.debug(`Fetching feature flag versions for ${flagIdOrSlug} in project ${projectId}`);let query=new URLSearchParams;query.set("withMetadata","true"),options.environment&&query.set("environment",options.environment),options.limit!==void 0&&query.set("limit",String(options.limit)),options.cursor&&query.set("cursor",options.cursor);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/flags/${encodeURIComponent(flagIdOrSlug)}/versions?${query.toString()}`,response=await client.fetch(url),next=response.pagination?.next??(response.pagination?.hasNext?response.pagination.cursor:null)??null;return{versions:response.versions,next}}var FlagsLsTelemetryClient=class extends TelemetryClient{trackCliOptionState(state){state&&this.trackCliOption({option:"state",value:state})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionTag(tags){tags&&tags.length>0&&this.trackCliOption({option:"tag",value:this.redactedValue})}trackCliOptionCreatedBy(createdBy){createdBy&&this.trackCliOption({option:"created-by",value:this.redactedValue})}trackCliOptionMaintainerId(maintainerIds){maintainerIds&&maintainerIds.length>0&&this.trackCliOption({option:"maintainer-id",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})}};async function ls8(client,argv){let telemetryClient=new FlagsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand14.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,state=flags["--state"]||"active",tags=flags["--tag"],createdBy=flags["--created-by"],maintainerIds=flags["--maintainer-id"],limit=flags["--limit"],next=flags["--next"],json=flags["--json"],projectName=getProjectNameFromFlags(flags);if(telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionState(state),telemetryClient.trackCliOptionTag(tags),telemetryClient.trackCliOptionCreatedBy(createdBy),telemetryClient.trackCliOptionMaintainerId(maintainerIds),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionNext(next),telemetryClient.trackCliFlagJson(json),limit!==void 0&&(!Number.isInteger(limit)||limit<1||limit>MAX_FLAGS_PAGE_LIMIT))return output_manager_default.error(`The --limit option must be an integer between 1 and ${MAX_FLAGS_PAGE_LIMIT}.`),1;let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name),lsStamp=stamp_default();output_manager_default.spinner(`Fetching ${state} feature flags for ${projectSlugLink}`);try{let{flags:flagsList,next:nextCursor}=await getFlags(client,project.id,{state,tags,createdBy,maintainerIds,limit,cursor:next});if(output_manager_default.stopSpinner(),json)outputJson3(client,flagsList,nextCursor);else if(flagsList.length===0)output_manager_default.log(`No ${state} feature flags found for ${projectSlugLink} ${import_chalk158.default.gray(lsStamp())}`);else if(output_manager_default.log(`${(0,import_pluralize11.default)("feature flag",flagsList.length,!0)} found for ${projectSlugLink} ${import_chalk158.default.gray(lsStamp())}`),printFlagsTable(flagsList),nextCursor){let nextCmd=buildNextPageCommand(flags,tags,maintainerIds,nextCursor);output_manager_default.log(`To display the next page, run ${getCommandName(nextCmd)}`)}}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function buildNextPageCommand(flags,tags,maintainerIds,nextCursor){let baseFlags=getCommandFlags(flags,["_","--tag","--maintainer-id","--next","--json"]),repeatable=[...(tags??[]).map(tag=>`--tag ${quoteArg(tag)}`),...(maintainerIds??[]).map(id2=>`--maintainer-id ${quoteArg(id2)}`)],suffix=repeatable.length>0?` ${repeatable.join(" ")}`:"";return`flags ls${baseFlags}${suffix} --next ${nextCursor}`}function outputJson3(client,flags,next){let jsonOutput={flags:flags.map(flag=>({id:flag.id,slug:flag.slug,description:flag.description??null,kind:flag.kind,state:flag.state,variants:flag.variants,createdAt:flag.createdAt,updatedAt:flag.updatedAt})),pagination:{next}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
690
+ `)}return 0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}function formatDate3(value){if(value===void 0)return"";let timestamp2=typeof value=="number"?value:Date.parse(value);return Number.isFinite(timestamp2)?new Date(timestamp2).toISOString():String(value)}function formatNumber(value){return value===void 0?"":String(value)}var GlobalConfigTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandGet(actual){this.trackCliSubcommand({subcommand:"get",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandItems(actual){this.trackCliSubcommand({subcommand:"items",value:actual})}trackCliSubcommandTokens(actual){this.trackCliSubcommand({subcommand:"tokens",value:actual})}trackCliSubcommandBackups(actual){this.trackCliSubcommand({subcommand:"backups",value:actual})}};async function applyLinkedProjectTeam(client){let link=await getLinkedProject(client);if(link.status==="error")return link.exitCode;link.status==="linked"&&(client.config.currentTeam=link.org.type==="team"?link.org.id:void 0)}var COMMAND_CONFIG39={list:["list","ls"],add:["add","create"],get:["get","inspect"],update:["update"],remove:["remove","rm","delete"],items:["items"],tokens:["tokens"],backups:["backups"]};async function main20(client){let parsedArgs,flagsSpecification=getFlagsSpecification(globalConfigCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),1}let telemetry2=new GlobalConfigTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG39),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("global-config"),output_manager_default.print(help(globalConfigCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:globalConfigCommand,columns:client.stderr.columns})),2}if(!needHelp){let linkExitCode=await applyLinkedProjectTeam(client);if(linkExitCode!==void 0)return linkExitCode}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(addSubcommand5)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),addCmd(client,args));case"get":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(getSubcommand)):(telemetry2.trackCliSubcommandGet(subcommandOriginal),getCmd(client,args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(updateSubcommand5)):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),updateCmd(client,args));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(removeSubcommand9)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),removeCmd(client,args));case"items":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(itemsSubcommand)):(telemetry2.trackCliSubcommandItems(subcommandOriginal),itemsCmd(client,args));case"tokens":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(tokensSubcommand)):(telemetry2.trackCliSubcommandTokens(subcommandOriginal),tokensCmd(client,args));case"backups":return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(backupsSubcommand)):(telemetry2.trackCliSubcommandBackups(subcommandOriginal),backupsCmd(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(listSubcommand15)):(telemetry2.trackCliSubcommandList(subcommandOriginal),listCmd(client,args))}}var FlagsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandVersions(actual){this.trackCliSubcommand({subcommand:"versions",value:actual})}trackCliSubcommandEvaluations(actual){this.trackCliSubcommand({subcommand:"evaluations",value:actual})}trackCliSubcommandStale(actual){this.trackCliSubcommand({subcommand:"stale",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandUseTargeting(actual){this.trackCliSubcommand({subcommand:"use-targeting",value:actual})}trackCliSubcommandSplit(actual){this.trackCliSubcommand({subcommand:"split",value:actual})}trackCliSubcommandRollout(actual){this.trackCliSubcommand({subcommand:"rollout",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandArchive(actual){this.trackCliSubcommand({subcommand:"archive",value:actual})}trackCliSubcommandUnarchive(actual){this.trackCliSubcommand({subcommand:"unarchive",value:actual})}trackCliSubcommandDisable(actual){this.trackCliSubcommand({subcommand:"disable",value:actual})}trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandSdkKeys(actual){this.trackCliSubcommand({subcommand:"sdk-keys",value:actual})}trackCliSubcommandSegments(actual){this.trackCliSubcommand({subcommand:"segments",value:actual})}trackCliSubcommandEntities(actual){this.trackCliSubcommand({subcommand:"entities",value:actual})}trackCliSubcommandLabels(actual){this.trackCliSubcommand({subcommand:"labels",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandPrepare(actual){this.trackCliSubcommand({subcommand:"prepare",value:actual})}trackCliSubcommandOverride(actual){this.trackCliSubcommand({subcommand:"override",value:actual})}};var import_chalk158=__toESM(require_source(),1),import_ms17=__toESM(require_ms(),1),import_pluralize11=__toESM(require_pluralize(),1);function flagUrl(projectId,flagIdOrSlug){return`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/flags/${encodeURIComponent(flagIdOrSlug)}`}async function fetchFlagForUpdate(client,projectId,flagIdOrSlug){output_manager_default.debug(`Fetching feature flag ${flagIdOrSlug} for project ${projectId} with ETag`);let response=await client.fetch(flagUrl(projectId,flagIdOrSlug),{json:!1}),etag=response.headers.get("etag");if(!etag)throw new Error("Unable to update flag safely because the flag ETag is missing.");return{flag:await response.json(),etag}}async function updateFlag(client,projectId,flagIdOrSlug,request2,options){output_manager_default.debug(`Updating feature flag ${flagIdOrSlug} for project ${projectId}`);let url=flagUrl(projectId,flagIdOrSlug);return await client.fetch(url,{method:"PATCH",headers:options?.ifMatch?{"If-Match":options.ifMatch}:void 0,body:request2})}var MAX_FLAGS_PAGE_LIMIT=100,MAX_FLAG_VERSIONS_PAGE_LIMIT=100;async function getFlags(client,projectId,options={}){let{state="active",tags,createdBy,maintainerIds,limit,cursor:cursor2}=options;output_manager_default.debug(`Fetching feature flags for project ${projectId}`);let basePath=`/v2/projects/${encodeURIComponent(projectId)}/feature-flags/flags`,buildQuery=(pageLimit,pageCursor2)=>{let query=new URLSearchParams;query.set("state",state),query.set("limit",String(pageLimit)),pageCursor2&&query.set("cursor",pageCursor2),createdBy&&query.set("createdBy",createdBy);for(let tag of tags??[])query.append("tags",tag);for(let maintainerId of maintainerIds??[])query.append("maintainerIds",maintainerId);return query.toString()};if(limit!==void 0||cursor2!==void 0){let pageLimit=Math.min(limit??MAX_FLAGS_PAGE_LIMIT,MAX_FLAGS_PAGE_LIMIT),response=await client.fetch(`${basePath}?${buildQuery(pageLimit,cursor2)}`);return{flags:response.data,next:response.pagination?.next??null}}let flags=[],pageCursor;do{let response=await client.fetch(`${basePath}?${buildQuery(MAX_FLAGS_PAGE_LIMIT,pageCursor)}`);flags.push(...response.data),pageCursor=response.pagination?.next??void 0}while(pageCursor);return{flags,next:null}}async function getFlag(client,projectId,flagIdOrSlug){output_manager_default.debug(`Fetching feature flag ${flagIdOrSlug} for project ${projectId}`);let url=flagUrl(projectId,flagIdOrSlug);return await client.fetch(url)}async function getFlagSettings(client,projectId){return output_manager_default.debug(`Fetching feature flag settings for project ${projectId}`),await client.fetch(flagSettingsUrl(projectId))}async function updateFlagSettings(client,projectId,request2){return output_manager_default.debug(`Updating feature flag settings for project ${projectId}`),client.fetch(flagSettingsUrl(projectId),{method:"PATCH",body:request2})}function flagSettingsUrl(projectId){return`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/settings`}async function getFlagVersions(client,projectId,flagIdOrSlug,options={}){output_manager_default.debug(`Fetching feature flag versions for ${flagIdOrSlug} in project ${projectId}`);let query=new URLSearchParams;query.set("withMetadata","true"),options.environment&&query.set("environment",options.environment),options.limit!==void 0&&query.set("limit",String(options.limit)),options.cursor&&query.set("cursor",options.cursor);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/flags/${encodeURIComponent(flagIdOrSlug)}/versions?${query.toString()}`,response=await client.fetch(url),next=response.pagination?.next??(response.pagination?.hasNext?response.pagination.cursor:null)??null;return{versions:response.versions,next}}var FlagsLsTelemetryClient=class extends TelemetryClient{trackCliOptionState(state){state&&this.trackCliOption({option:"state",value:state})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionTag(tags){tags&&tags.length>0&&this.trackCliOption({option:"tag",value:this.redactedValue})}trackCliOptionCreatedBy(createdBy){createdBy&&this.trackCliOption({option:"created-by",value:this.redactedValue})}trackCliOptionMaintainerId(maintainerIds){maintainerIds&&maintainerIds.length>0&&this.trackCliOption({option:"maintainer-id",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})}};async function ls8(client,argv){let telemetryClient=new FlagsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand14.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,state=flags["--state"]||"active",tags=flags["--tag"],createdBy=flags["--created-by"],maintainerIds=flags["--maintainer-id"],limit=flags["--limit"],next=flags["--next"],json=flags["--json"],projectName=getProjectNameFromFlags(flags);if(telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionState(state),telemetryClient.trackCliOptionTag(tags),telemetryClient.trackCliOptionCreatedBy(createdBy),telemetryClient.trackCliOptionMaintainerId(maintainerIds),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionNext(next),telemetryClient.trackCliFlagJson(json),limit!==void 0&&(!Number.isInteger(limit)||limit<1||limit>MAX_FLAGS_PAGE_LIMIT))return output_manager_default.error(`The --limit option must be an integer between 1 and ${MAX_FLAGS_PAGE_LIMIT}.`),1;let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name),lsStamp=stamp_default();output_manager_default.spinner(`Fetching ${state} feature flags for ${projectSlugLink}`);try{let{flags:flagsList,next:nextCursor}=await getFlags(client,project.id,{state,tags,createdBy,maintainerIds,limit,cursor:next});if(output_manager_default.stopSpinner(),json)outputJson3(client,flagsList,nextCursor);else if(flagsList.length===0)output_manager_default.log(`No ${state} feature flags found for ${projectSlugLink} ${import_chalk158.default.gray(lsStamp())}`);else if(output_manager_default.log(`${(0,import_pluralize11.default)("feature flag",flagsList.length,!0)} found for ${projectSlugLink} ${import_chalk158.default.gray(lsStamp())}`),printFlagsTable(flagsList),nextCursor){let nextCmd=buildNextPageCommand(flags,tags,maintainerIds,nextCursor);output_manager_default.log(`To display the next page, run ${getCommandName(nextCmd)}`)}}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function buildNextPageCommand(flags,tags,maintainerIds,nextCursor){let baseFlags=getCommandFlags(flags,["_","--tag","--maintainer-id","--next","--json"]),repeatable=[...(tags??[]).map(tag=>`--tag ${quoteArg(tag)}`),...(maintainerIds??[]).map(id2=>`--maintainer-id ${quoteArg(id2)}`)],suffix=repeatable.length>0?` ${repeatable.join(" ")}`:"";return`flags ls${baseFlags}${suffix} --next ${nextCursor}`}function outputJson3(client,flags,next){let jsonOutput={flags:flags.map(flag=>({id:flag.id,slug:flag.slug,description:flag.description??null,kind:flag.kind,state:flag.state,variants:flag.variants,createdAt:flag.createdAt,updatedAt:flag.updatedAt})),pagination:{next}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
691
691
  `)}function printFlagsTable(flags){let headers=["Name","Kind","State","Variants","Updated"],now=Date.now(),rows=flags.map(flag=>[import_chalk158.default.bold(flag.slug),flag.kind,flag.state==="active"?import_chalk158.default.green(flag.state):import_chalk158.default.gray(flag.state),String(flag.variants.length),(0,import_ms17.default)(now-flag.updatedAt)+" ago"]),table3=formatTable(headers,["l","l","l","r","l"],[{name:"",rows}]);output_manager_default.print(`
692
692
  ${table3}
693
693
  `)}var import_chalk159=__toESM(require_source(),1),import_pluralize12=__toESM(require_pluralize(),1);var DEFAULT_STALE_FLAGS_LIMIT=50,MAX_STALE_FLAGS_LIMIT=100,DEFAULT_STALE_AFTER="30d",MAX_STALE_AFTER_DAYS=90;async function getStaleFlags(client,projectId,options={}){let{staleAfter=DEFAULT_STALE_AFTER,limit=DEFAULT_STALE_FLAGS_LIMIT,cursor:cursor2}=options;output_manager_default.debug(`Fetching stale feature flags for project ${projectId}`);let query=new URLSearchParams;query.set("staleAfter",staleAfter),query.set("limit",String(limit)),cursor2&&query.set("cursor",cursor2);let response=await client.fetch(`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/stale-flags?${query}`);return{flags:response.data,next:response.pagination.next}}var FlagsStaleTelemetryClient=class extends TelemetryClient{trackCliOptionStaleAfter(staleAfter){staleAfter&&this.trackCliOption({option:"stale-after",value:staleAfter})}trackCliOptionLimit(limit){limit!==void 0&&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 stale(client,argv){let telemetryClient=new FlagsStaleTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(staleSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,staleAfter=flags["--stale-after"]??DEFAULT_STALE_AFTER,limit=flags["--limit"]??DEFAULT_STALE_FLAGS_LIMIT,next=flags["--next"],json=flags["--json"],projectName=getProjectNameFromFlags(flags);if(telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionStaleAfter(staleAfter),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionNext(next),telemetryClient.trackCliFlagJson(json),!Number.isInteger(limit)||limit<1||limit>MAX_STALE_FLAGS_LIMIT)return output_manager_default.error(`The --limit option must be an integer between 1 and ${MAX_STALE_FLAGS_LIMIT}.`),1;let staleAfterValidationError=getStaleAfterValidationError(staleAfter);if(staleAfterValidationError)return output_manager_default.error(staleAfterValidationError),1;let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name),staleStamp=stamp_default();output_manager_default.spinner(`Fetching stale feature flags for ${projectSlugLink}`);try{let{flags:staleFlags,next:nextCursor}=await getStaleFlags(client,project.id,{staleAfter,limit,cursor:next});output_manager_default.stopSpinner();let stalePeriod=`(past ${formatStaleAfter(staleAfter)})`;if(json)outputJson4(client,staleFlags,nextCursor,staleAfter);else if(staleFlags.length===0)output_manager_default.log(`No stale feature flags found for ${projectSlugLink} ${stalePeriod} ${import_chalk159.default.gray(staleStamp())}`);else if(output_manager_default.log(`${(0,import_pluralize12.default)("stale feature flag",staleFlags.length,!0)} found for ${projectSlugLink} ${stalePeriod} ${import_chalk159.default.gray(staleStamp())}`),printStaleFlagsTable(staleFlags),nextCursor){let nextCmd=buildNextPageCommand2(flags,nextCursor);output_manager_default.log(`To display the next page, run ${getCommandName(nextCmd)}`)}}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function getStaleAfterValidationError(value){let match=/^([1-9][0-9]*)d$/.exec(value);return match?Number(match[1])>MAX_STALE_AFTER_DAYS?`The --stale-after option cannot exceed ${MAX_STALE_AFTER_DAYS}d.`:null:"The --stale-after option must be a relative day duration like 14d."}function buildNextPageCommand2(flags,nextCursor){return`flags stale${getCommandFlags(flags,["_","--next","--json"])} --next ${quoteArg(nextCursor)}`}function outputJson4(client,flags,next,staleAfter){let jsonOutput={staleAfter,flags:flags.map(flag=>({slug:flag.slug,reason:flag.reason})),pagination:{next}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
@@ -755,11 +755,11 @@ ${detailLines.join(`
755
755
  `)}`)}function assertUniqueVariantValues(variants){for(let index=0;index<variants.length;index++){let variant=variants[index],duplicateVariant=variants.slice(0,index).find(candidate=>(0,import_fast_deep_equal3.default)(candidate.value,variant.value));if(duplicateVariant)throw new Error(`Variant value ${formatVariantValue(variant.value)} would be duplicated by ${formatVariantForLog(duplicateVariant)} and ${formatVariantForLog(variant)}.`)}}async function confirmVariantRemoval(client,flag,removedVariants,skipConfirmation){if(skipConfirmation)return!0;if(!client.stdin.isTTY)throw new Error("Missing required flag --yes. Use --yes to skip the removal confirmation prompt in non-interactive mode.");let promptLines=removedVariants.map(variant=>` - ${formatVariantForLog(variant)}`).join(`
756
756
  `);return client.input.confirm(`Remove ${removedVariants.length} variant${removedVariants.length===1?"":"s"} from ${import_chalk167.default.bold(flag.slug)}?
757
757
  ${promptLines}`,!1)}function formatVariantForLog(variant){return`${formatVariantForDisplay(variant)} ${import_chalk167.default.dim(`[id: ${variant.id}]`)}`}async function collectVariantUpdate(client,flag,input){let selectedVariant=await resolveSelectedVariant(client,flag,input.selector),nextValueInput=input.valueInput,nextLabel=input.label;return flag.kind!=="boolean"&&nextValueInput===void 0&&client.stdin.isTTY&&(nextValueInput=await promptForVariantValueUpdate(client,flag,selectedVariant)),nextLabel===void 0&&client.stdin.isTTY&&(nextLabel=await promptForVariantLabelUpdate(client,selectedVariant)),client.stdin.isTTY||ensureVariantUpdateInput(nextValueInput,nextLabel),{selector:selectedVariant.id,valueInput:nextValueInput,label:nextLabel}}function ensureVariantUpdateInput(valueInput,label){if(!valueInput&&!label)throw new Error("At least one of --value or --label must be provided. Use --value <VALUE>, --label <LABEL>, or run interactively in a terminal.")}async function resolveSelectedVariant(client,flag,selector){if(selector){let result=resolveVariant(selector,flag.variants);if(result.error||!result.variant)throw new Error(result.error||`Variant "${selector}" not found`);return result.variant}if(!client.stdin.isTTY)throw new Error("Missing required flag --variant. Use --variant <VARIANT>, or run interactively in a terminal.");let selectedVariantId=await client.input.select({message:"Select a variant to update:",choices:flag.variants.map(variant=>({name:formatVariantForLog(variant),value:variant.id}))}),selectedVariant=flag.variants.find(v=>v.id===selectedVariantId);if(!selectedVariant)throw new Error("No variant selected");return selectedVariant}async function promptForVariantValueUpdate(client,flag,selectedVariant){let valueResponse=await client.input.text({message:`Enter a new value for ${formatVariantForDisplay(selectedVariant)} (press Enter to keep ${formatVariantValue(selectedVariant.value)}):`,validate:value=>{if(!value.trim())return!0;let result=validateVariantValue(value,flag.kind);return result===null?!0:result}});return normalizeOptionalInput(valueResponse)}async function promptForVariantLabelUpdate(client,selectedVariant){let currentLabel=selectedVariant.label,labelResponse=await client.input.text({message:currentLabel?`Enter a new label for ${formatVariantForDisplay(selectedVariant)} (press Enter to keep ${JSON.stringify(currentLabel)}):`:`Enter an optional label for ${formatVariantForDisplay(selectedVariant)} (press Enter to skip):`});return normalizeOptionalInput(labelResponse)}function applyVariantUpdates(flag,updates){let variants=flag.variants.map(variant=>({...variant})),changedVariantIds=new Set;for(let update9 of updates){let result=resolveVariant(update9.selector,variants);if(result.error||!result.variant)throw new Error(result.error||`Variant "${update9.selector}" not found`);let nextValue=update9.valueInput!==void 0?parseUpdatedVariantValue(update9.valueInput,flag.kind,result.variant):result.variant.value,nextLabel=update9.label??result.variant.label,variantIndex=variants.findIndex(v=>v.id===result.variant.id),existingVariant=variants[variantIndex],hasChanged=!(0,import_fast_deep_equal3.default)(existingVariant.value,nextValue)||existingVariant.label!==nextLabel;variants[variantIndex]={...existingVariant,value:nextValue,label:nextLabel},hasChanged&&changedVariantIds.add(existingVariant.id)}return{variants,changedVariants:variants.filter(variant=>changedVariantIds.has(variant.id))}}function parseUpdatedVariantValue(valueInput,kind,existingVariant){let validationError=validateVariantValue(valueInput,kind);if(validationError)throw new Error(validationError);if(kind==="boolean"){let nextValue=valueInput.toLowerCase()==="true";if(nextValue!==existingVariant.value)throw new Error("Boolean variant values cannot be changed. You can update the label only.");return nextValue}return kind==="number"?Number(valueInput):kind==="json"?JSON.parse(valueInput):valueInput}var import_chalk169=__toESM(require_source(),1);var import_chalk168=__toESM(require_source(),1);async function resolveFlagEnvironment(client,flag,environment,promptMessage2,options={}){let nextEnvironment=environment;if(!nextEnvironment){if(!canPrompt(client))throw new Error("Missing required flag --environment. Use --environment <ENV>, or run interactively in a terminal.");let availableEnvironments=STANDARD_ENVIRONMENTS.filter(env=>Object.prototype.hasOwnProperty.call(flag.environments,env));if(availableEnvironments.length===0)throw new Error("No valid environments found for this flag");options.showEnvironmentDetails&&printFlagEnvironmentDetails(flag,void 0,availableEnvironments),nextEnvironment=await client.input.select({message:promptMessage2,choices:availableEnvironments.map(env=>({name:options.decorateChoices===!1?env:formatEnvironmentChoiceLabel(env,flag.environments[env]),value:env}))})}if(!STANDARD_ENVIRONMENTS.includes(nextEnvironment))throw new Error(`Invalid environment: ${nextEnvironment}. Must be one of: ${STANDARD_ENVIRONMENTS.join(", ")}`);if(!flag.environments[nextEnvironment])throw new Error(`Environment ${nextEnvironment} not found for this flag`);return nextEnvironment}function formatEnvironmentChoiceLabel(envName,envConfig){let status6=envConfig?.active?import_chalk168.default.green("active"):import_chalk168.default.yellow("paused");return`${envName} (${status6})`}function isOverridingEnvironmentToVariant(envConfig,variantId){return!envConfig.active&&envConfig.pausedOutcome?.variantId===variantId&&envConfig.fallthrough.type==="variant"&&envConfig.fallthrough.variantId===variantId}function isPausingEnvironmentToVariant(envConfig,variantId){return!envConfig.active&&envConfig.pausedOutcome?.variantId===variantId}function buildVariantOverrideEnvironmentConfig(envConfig,variantId){return{...envConfig,active:!1,pausedOutcome:{type:"variant",variantId},fallthrough:{type:"variant",variantId}}}function buildTargetingVariantEnvironmentConfig(envConfig,variantId){return buildOutcomeEnvConfig(envConfig,{outcome:{type:"variant",variantId},defaultVariantId:variantId})}function buildResumeTargetingEnvironmentConfig(flag,environment){let envConfig=flag.environments[environment],fallthrough=resolveEffectiveFallthrough(flag,environment),defaultVariantId=getFallthroughDefaultVariantId(fallthrough);return buildOutcomeEnvConfig(envConfig,{outcome:fallthrough,defaultVariantId})}function resolveEffectiveFallthrough(flag,environment){let envConfig=flag.environments[environment],inheritedFrom=envConfig.reuse?.active?envConfig.reuse.environment:void 0;if(inheritedFrom){let inheritedConfig=flag.environments[inheritedFrom];if(inheritedConfig)return structuredClone(inheritedConfig.fallthrough)}return structuredClone(envConfig.fallthrough)}function isUsableFallthrough(fallthrough,variants){let variantIds=new Set(variants.map(variant=>variant.id));return fallthrough.type==="variant"?variantIds.has(fallthrough.variantId):fallthrough.type==="split"?variantIds.has(fallthrough.defaultVariantId):fallthrough.type==="experiment"?!1:variantIds.has(fallthrough.defaultVariantId)&&variantIds.has(fallthrough.rollFromVariantId)&&variantIds.has(fallthrough.rollToVariantId)}function getFallthroughDefaultVariantId(fallthrough){if(fallthrough.type==="variant")return fallthrough.variantId;if(fallthrough.type==="experiment")throw new Error("Experiment outcomes do not have a default variant");return fallthrough.defaultVariantId}function buildPausedEnvironmentConfig(envConfig,variantId){return{...envConfig,active:!1,pausedOutcome:{type:"variant",variantId}}}function buildOutcomeEnvConfig(envConfig,options){let{reuse,...restConfig}=envConfig,nextConfig={...restConfig,active:!0,pausedOutcome:envConfig.pausedOutcome??{type:"variant",variantId:options.defaultVariantId},fallthrough:options.outcome};return reuse&&(nextConfig.reuse={...reuse,active:!1}),nextConfig}function getBooleanVariant(flag,value){let variant=flag.variants.find(candidate=>candidate.value===value);if(!variant)throw new Error(`Flag ${import_chalk168.default.bold(flag.slug)} is missing the standard boolean variants`);return variant}async function resolveFlagUpdateMessage(client,message,defaultMessage){if(message!==void 0)return message;if(!canPrompt(client))return defaultMessage;let response=await client.input.text({message:"Enter a message for this update:",default:defaultMessage});return normalizeOptionalInput(response)||defaultMessage}var FlagsSetTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionVariant(variant){variant&&this.trackCliOption({option:"variant",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function set5(client,argv){let telemetryClient=new FlagsSetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(setSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],variantSelector=normalizeOptionalInput(flags["--variant"]),message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to set"),output_manager_default.log(`Example: ${getCommandName("flags set my-feature --environment production --variant true")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionVariant(variantSelector),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk169.default.bold(flag.slug)} is archived and cannot be set`),1;let selectedEnvironment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to set the variant in:",{showEnvironmentDetails:!0,decorateChoices:!1}),selectedVariant=await resolveVariantToSet(client,flag,variantSelector),envConfig=flag.environments[selectedEnvironment];if(isOverridingEnvironmentToVariant(envConfig,selectedVariant.id))return output_manager_default.warn(`Flag ${import_chalk169.default.bold(flag.slug)} is already serving ${formatVariantForDisplay(selectedVariant)} in ${selectedEnvironment}`),0;let presentation=getSetPresentation(flag,selectedVariant),updateMessage=await resolveFlagUpdateMessage(client,message,presentation.defaultMessage(selectedEnvironment));output_manager_default.spinner(presentation.spinner(selectedEnvironment)),await updateFlag(client,project.id,flagArg,{environments:{[selectedEnvironment]:buildVariantOverrideEnvironmentConfig(envConfig,selectedVariant.id)},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(presentation.success(flag.slug,selectedEnvironment)),output_manager_default.log(` ${import_chalk169.default.dim("Serving variant:")} ${formatVariantForDisplay(selectedVariant)}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}async function resolveVariantToSet(client,flag,selector){if(selector){let result=resolveVariant(selector,flag.variants);if(result.error||!result.variant)throw new Error(result.error||`Variant "${selector}" not found`);return result.variant}if(!client.stdin.isTTY)throw new Error("Missing required flag --variant. Use --variant <VARIANT>, or run interactively in a terminal.");let selectedVariantId=await client.input.select({message:"Select a variant to serve:",choices:flag.variants.map(variant=>({name:formatVariantForDisplay(variant),value:variant.id}))}),selectedVariant=flag.variants.find(variant=>variant.id===selectedVariantId);if(!selectedVariant)throw new Error("No variant selected");return selectedVariant}function getSetPresentation(flag,variant){return flag.kind==="boolean"&&variant.value===!0?{spinner:environment=>`Enabling flag in ${environment}...`,success:(slug,environment)=>`Feature flag ${import_chalk169.default.bold(slug)} has been enabled in ${import_chalk169.default.bold(environment)}`,defaultMessage:environment=>`Enabled for ${environment} via CLI`}:flag.kind==="boolean"&&variant.value===!1?{spinner:environment=>`Disabling flag in ${environment}...`,success:(slug,environment)=>`Feature flag ${import_chalk169.default.bold(slug)} has been disabled in ${import_chalk169.default.bold(environment)}`,defaultMessage:environment=>`Disabled for ${environment} via CLI`}:{spinner:environment=>`Setting variant in ${environment}...`,success:(slug,environment)=>`Feature flag ${import_chalk169.default.bold(slug)} has been set in ${import_chalk169.default.bold(environment)}`,defaultMessage:environment=>`Set variant for ${environment} via CLI`}}var import_chalk170=__toESM(require_source(),1),import_fast_deep_equal4=__toESM(require_fast_deep_equal(),1);var FlagsUseTargetingTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionDefaultVariant(variant){variant&&this.trackCliOption({option:"default-variant",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}trackCliOptionProject(project){project&&this.trackCliOption({option:"project",value:this.redactedValue})}};async function useTargeting(client,argv){let telemetryClient=new FlagsUseTargetingTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(useTargetingSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],defaultVariantSelector=normalizeOptionalInput(flags["--default-variant"]),message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to use targeting for"),output_manager_default.log(`Example: ${getCommandName("flags use-targeting my-feature --environment production")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionDefaultVariant(defaultVariantSelector),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk170.default.bold(flag.slug)} is archived and cannot use targeting`),1;let selectedEnvironment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to use targeting in:",{showEnvironmentDetails:!0,decorateChoices:!1}),envConfig=flag.environments[selectedEnvironment],nextEnvConfig=await resolveNextTargetingEnvironmentConfig(client,flag,selectedEnvironment,defaultVariantSelector);if((0,import_fast_deep_equal4.default)(envConfig,nextEnvConfig))return output_manager_default.warn(formatAlreadyUsingTargetingWarning(flag,selectedEnvironment,nextEnvConfig)),0;let updateMessage=await resolveFlagUpdateMessage(client,message,`Activated targeting for ${selectedEnvironment} via CLI`);output_manager_default.spinner(`Activating targeting in ${selectedEnvironment}...`),await updateFlag(client,project.id,flagArg,{environments:{[selectedEnvironment]:nextEnvConfig},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk170.default.bold(flag.slug)} now uses targeting in ${import_chalk170.default.bold(selectedEnvironment)}`),output_manager_default.log(` ${import_chalk170.default.dim("Fallthrough:")} ${formatFlagOutcome(nextEnvConfig.fallthrough,flag.variants)}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}async function resolveNextTargetingEnvironmentConfig(client,flag,environment,defaultVariantSelector){if(defaultVariantSelector){let variant=resolveDefaultVariantOrThrow(flag,defaultVariantSelector);return buildTargetingVariantEnvironmentConfig(flag.environments[environment],variant.id)}let fallthrough=resolveEffectiveFallthrough(flag,environment);if(isUsableFallthrough(fallthrough,flag.variants))return buildResumeTargetingEnvironmentConfig(flag,environment);let selectedVariant=await resolveReplacementDefaultVariant(client,flag,fallthrough);return buildTargetingVariantEnvironmentConfig(flag.environments[environment],selectedVariant.id)}function resolveDefaultVariantOrThrow(flag,selector){let result=resolveVariant(selector,flag.variants);if(result.error||!result.variant)throw new Error(result.error||`Variant "${selector}" not found`);return result.variant}async function resolveReplacementDefaultVariant(client,flag,fallthrough){if(!canPrompt(client))throw new Error(`Couldn't resume targeting because the current fallthrough references a missing variant. Pass --default-variant <VARIANT>${describeUnusableFallthrough(fallthrough)}.`);output_manager_default.warn(`Current fallthrough references a missing variant${describeUnusableFallthrough(fallthrough)}. Choose a new default variant.`);let selectedVariantId=await client.input.select({message:"Select a default variant when no rules match:",choices:flag.variants.map(variant=>({name:formatVariantForDisplay(variant),value:variant.id}))}),selectedVariant=flag.variants.find(variant=>variant.id===selectedVariantId);if(!selectedVariant)throw new Error("No variant selected");return selectedVariant}function describeUnusableFallthrough(fallthrough){return fallthrough.type==="variant"?` (${fallthrough.variantId})`:fallthrough.type==="experiment"?" (experiment assignment)":` (${fallthrough.type} default ${fallthrough.defaultVariantId})`}function formatAlreadyUsingTargetingWarning(flag,environment,envConfig){let{fallthrough}=envConfig;if(fallthrough.type==="variant"){let variant=flag.variants.find(candidate=>candidate.id===fallthrough.variantId),label=variant?formatVariantForDisplay(variant):fallthrough.variantId;return`Flag ${import_chalk170.default.bold(flag.slug)} already uses targeting with default ${label} in ${environment}`}return`Flag ${import_chalk170.default.bold(flag.slug)} already uses targeting in ${environment}`}var import_chalk173=__toESM(require_source(),1),import_fast_deep_equal5=__toESM(require_fast_deep_equal(),1);var import_chalk172=__toESM(require_source(),1);var import_chalk171=__toESM(require_source(),1);function resolveFlagBucketingBase(settings,selector){let separatorIndex=selector.indexOf(".");if(separatorIndex<=0||separatorIndex===selector.length-1)throw new Error("Invalid value for --by. Use the format <entity.attribute>, for example --by user.userId.");let kind=selector.slice(0,separatorIndex),attribute=selector.slice(separatorIndex+1),entity=settings.entities.find(candidate=>candidate.kind===kind);if(!entity){let availableKinds=settings.entities.map(candidate=>candidate.kind);throw new Error(`Unknown entity ${import_chalk171.default.bold(kind)}. Available entities: ${availableKinds.join(", ")}`)}let matchingAttribute=entity.attributes.find(candidate=>candidate.key===attribute);if(!matchingAttribute){let availableAttributes=entity.attributes.map(candidate=>candidate.key);throw new Error(`Unknown attribute ${import_chalk171.default.bold(selector)}. Available attributes for ${kind}: ${availableAttributes.join(", ")}`)}if(!isBucketingAttribute(matchingAttribute))throw new Error(`Attribute ${import_chalk171.default.bold(selector)} is a Timestamp and cannot be used for bucketing. Choose a string or number attribute.`);return{type:"entity",kind,attribute}}function formatFlagBucketingBaseSelector(base){if(base)return`${base.kind}.${base.attribute}`}function resolveFlagSplit(flag,settings,options){let currentSplit=options.currentOutcome?.type==="split"?options.currentOutcome:void 0,baseSelector=options.baseSelector||formatFlagBucketingBaseSelector(currentSplit?.base);if(!baseSelector)throw new Error("Missing required flag --by. Use --by <entity.attribute> to choose how users are bucketed.");let base=resolveFlagBucketingBase(settings,baseSelector),weights=resolveSplitWeights(flag,options.weightInputs,currentSplit),defaultVariant=resolveDefaultVariant(flag,options.defaultVariantSelector,currentSplit);return{outcome:{type:"split",base,weights,defaultVariantId:defaultVariant.id},defaultVariant,baseLabel:`${base.kind}.${base.attribute}`,summary:formatSplitSummary(flag.variants,weights)}}function resolveSplitWeights(flag,weightInputs,currentSplit){if(weightInputs.length===0&&currentSplit)return validateAndNormalizeWeights(flag,currentSplit.weights);if(weightInputs.length===0)throw new Error("At least one --weight is required. Use --weight <VARIANT=WEIGHT> for each variant, or run interactively in a terminal.");let weights={},seen=new Set;for(let input of weightInputs){let{variantSelector,weight}=parseWeightInput(input),variant=resolveVariantOrThrow(variantSelector,flag.variants,"--weight");if(seen.has(variant.id))throw new Error(`Duplicate weight for variant ${import_chalk172.default.bold(formatVariantForDisplay(variant))}.`);seen.add(variant.id),weights[variant.id]=weight}let missingVariants=flag.variants.filter(variant=>!seen.has(variant.id));if(missingVariants.length>0)throw new Error(`Missing weights for variants: ${missingVariants.map(variant=>formatVariantForDisplay(variant)).join(", ")}. Use --weight <VARIANT=WEIGHT> for each variant, including 0 for variants that should receive no traffic.`);return validateAndNormalizeWeights(flag,weights)}function parseWeightInput(input){let separatorIndex=input.lastIndexOf("=");if(separatorIndex<=0||separatorIndex===input.length-1)throw new Error(`Invalid weight ${import_chalk172.default.bold(input)}. Use --weight <VARIANT=WEIGHT>, for example --weight true=5.`);let variantSelector=input.slice(0,separatorIndex).trim(),rawWeight=input.slice(separatorIndex+1).trim();if(!variantSelector)throw new Error(`Invalid weight ${import_chalk172.default.bold(input)}. Variant cannot be empty.`);if(!rawWeight)throw new Error(`Invalid weight ${import_chalk172.default.bold(input)}. Weight cannot be empty.`);let weight=Number(rawWeight);if(!Number.isFinite(weight)||weight<0)throw new Error(`Invalid weight "${rawWeight}". Use a number greater than or equal to 0.`);return{variantSelector,weight}}function validateAndNormalizeWeights(flag,weights){let normalizedWeights=Object.fromEntries(flag.variants.map(variant=>[variant.id,weights[variant.id]??0]));if(Object.values(normalizedWeights).reduce((sum,weight)=>sum+weight,0)<=0)throw new Error("At least one weight must be greater than 0.");return normalizedWeights}function resolveDefaultVariant(flag,selector,currentSplit){if(selector)return resolveVariantOrThrow(selector,flag.variants,"--default-variant");if(currentSplit)return resolveVariantByIdOrThrow(currentSplit.defaultVariantId,flag.variants,"--default-variant");if(flag.kind==="boolean")return getBooleanVariant(flag,!1);throw new Error("Missing required flag --default-variant. Use --default-variant <VARIANT> for non-boolean splits.")}function formatSplitSummary(variants,weights){let total=Object.values(weights).reduce((sum,weight)=>sum+weight,0);return variants.map(variant=>{let weight=weights[variant.id]??0,percentage=total>0?weight/total*100:0;return`${formatPlainVariant(variant)}: ${formatPercentage2(percentage)}`}).join(", ")}function formatPlainVariant(variant){let value=formatVariantValue(variant.value);return variant.label?`${variant.label} (${value})`:value}function formatPercentage2(percentage){return Number.isInteger(percentage)?`${percentage}%`:`${Number(percentage.toFixed(2))}%`}var FlagsSplitTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionBy(base){base&&this.trackCliOption({option:"by",value:this.redactedValue})}trackCliOptionWeight(weights){weights?.length&&this.trackCliOption({option:"weight",value:this.redactedValue})}trackCliOptionDefaultVariant(variant){variant&&this.trackCliOption({option:"default-variant",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function split2(client,argv){let telemetryClient=new FlagsSplitTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(splitSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],baseSelector=normalizeOptionalInput(flags["--by"]),defaultVariantSelector=normalizeOptionalInput(flags["--default-variant"]),weightInputs=flags["--weight"]||[],message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to split"),output_manager_default.log(`Example: ${getCommandName("flags split my-feature --environment production --by user.userId --weight false=95 --weight true=5")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionBy(baseSelector),telemetryClient.trackCliOptionWeight(weightInputs.length>0?[weightInputs[0]]:void 0),telemetryClient.trackCliOptionDefaultVariant(defaultVariantSelector),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let[flag,settings]=await Promise.all([getFlag(client,project.id,flagArg),getFlagSettings(client,project.id)]);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk173.default.bold(flag.slug)} is archived and cannot be split`),1;let selectedEnvironment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to split traffic in:",{showEnvironmentDetails:!0,decorateChoices:!1}),envConfig=flag.environments[selectedEnvironment],currentSplit=envConfig.fallthrough.type==="split"?envConfig.fallthrough:void 0,shouldPromptCurrentSplit=canPrompt(client)&&currentSplit!==void 0&&!baseSelector&&weightInputs.length===0&&!defaultVariantSelector&&!message,resolvedBaseSelector=await resolveBaseSelector(client,settings,baseSelector,currentSplit,shouldPromptCurrentSplit),resolvedWeightInputs=await resolveWeightInputs(client,flag,weightInputs,currentSplit,shouldPromptCurrentSplit),resolvedDefaultVariantSelector=await resolveDefaultVariantSelector(client,flag,defaultVariantSelector,currentSplit,shouldPromptCurrentSplit),splitConfig=resolveFlagSplit(flag,settings,{baseSelector:resolvedBaseSelector,weightInputs:resolvedWeightInputs,defaultVariantSelector:resolvedDefaultVariantSelector,currentOutcome:envConfig.fallthrough.type==="experiment"?void 0:envConfig.fallthrough}),nextEnvironmentConfig=buildOutcomeEnvConfig(envConfig,{outcome:splitConfig.outcome,defaultVariantId:splitConfig.defaultVariant.id});if(!message&&envConfig.active&&(0,import_fast_deep_equal5.default)(envConfig.fallthrough,splitConfig.outcome)&&(0,import_fast_deep_equal5.default)(envConfig,nextEnvironmentConfig))return output_manager_default.warn(`Flag ${import_chalk173.default.bold(flag.slug)} is already configured with this split in ${selectedEnvironment}`),0;let updateMessage=await resolveFlagUpdateMessage(client,message,getDefaultSplitMessage(selectedEnvironment,splitConfig));output_manager_default.spinner(`Updating split in ${selectedEnvironment}...`),await updateFlag(client,project.id,flagArg,{environments:{[selectedEnvironment]:nextEnvironmentConfig},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk173.default.bold(flag.slug)} split has been updated in ${import_chalk173.default.bold(selectedEnvironment)}`),output_manager_default.log(` ${import_chalk173.default.dim("Based on:")} ${splitConfig.baseLabel}`),output_manager_default.log(` ${import_chalk173.default.dim("Fallback:")} ${formatVariantForDisplay(splitConfig.defaultVariant)}`),output_manager_default.log(` ${import_chalk173.default.dim("Weights:")} ${splitConfig.summary}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function getDefaultSplitMessage(environment,splitConfig){return`Configure split for ${environment}: ${splitConfig.summary}`}async function resolveBaseSelector(client,settings,baseSelector,currentSplit,shouldPromptCurrentSplit){if(baseSelector||currentSplit&&!shouldPromptCurrentSplit)return baseSelector;if(!canPrompt(client))return;let choices=settings.entities.flatMap(entity=>entity.attributes.filter(isBucketingAttribute).map(attribute=>({name:`${entity.label} \u203A ${attribute.key}`,value:`${entity.kind}.${attribute.key}`}))),currentBaseSelector=formatFlagBucketingBaseSelector(currentSplit?.base),defaultChoice=choices.find(choice=>choice.value===currentBaseSelector)?.value;if(choices.length===0)throw new Error("No entities are configured for weighted splits.");return client.input.select({message:"Select an attribute to split by:",choices,default:defaultChoice})}async function resolveWeightInputs(client,flag,weightInputs,currentSplit,shouldPromptCurrentSplit){if(weightInputs.length>0||currentSplit&&!shouldPromptCurrentSplit||!canPrompt(client))return weightInputs;output_manager_default.log("Enter weights for each variant. Weights are ratios; use 0 for variants that should receive no traffic.");let promptedWeights=[];for(let variant of flag.variants){let defaultWeight=currentSplit?.weights[variant.id]!==void 0?String(currentSplit.weights[variant.id]):currentSplit?"0":"1",weight=await client.input.text({message:`Weight for ${formatVariantForDisplay(variant)}:`,default:defaultWeight,validate:value=>{let trimmed=value.trim();if(!trimmed)return"Enter a weight";let parsed=Number(trimmed);return!Number.isFinite(parsed)||parsed<0?"Enter a number greater than or equal to 0":!0}});promptedWeights.push(`${variant.id}=${weight.trim()}`)}return promptedWeights}async function resolveDefaultVariantSelector(client,flag,defaultVariantSelector,currentSplit,shouldPromptCurrentSplit){if(defaultVariantSelector||currentSplit&&!shouldPromptCurrentSplit||flag.kind==="boolean"&&!canPrompt(client))return defaultVariantSelector;if(canPrompt(client))return client.input.select({message:"Select a fallback variant:",choices:flag.variants.map(variant=>({name:formatVariantForDisplay(variant),value:variant.id})),default:flag.variants.find(variant=>variant.id===currentSplit?.defaultVariantId)?.id||getBooleanFallbackVariantId(flag)})}function getBooleanFallbackVariantId(flag){if(flag.kind==="boolean")return flag.variants.find(variant=>variant.value===!1)?.id}var import_chalk175=__toESM(require_source(),1),import_fast_deep_equal6=__toESM(require_fast_deep_equal(),1);var import_chalk174=__toESM(require_source(),1),import_ms19=__toESM(require_ms(),1);function resolveFlagRollout(flag,settings,options){let currentRollout=options.currentOutcome?.type==="rollout"?options.currentOutcome:void 0,baseSelector=options.baseSelector||formatFlagBucketingBaseSelector(currentRollout?.base);if(!baseSelector)throw new Error("Missing required flag --by. Use --by <entity.attribute> to choose how users are bucketed.");let base=resolveFlagBucketingBase(settings,baseSelector),rollFromVariant=resolveRollFromVariant(flag,options.rollFromVariantSelector,currentRollout),rollToVariant=resolveRollToVariant(flag,options.rollToVariantSelector,currentRollout);if(rollFromVariant.id===rollToVariant.id)throw new Error("`--from-variant` and `--to-variant` must resolve to different variants.");let defaultVariant=resolveDefaultVariant2(flag,options.defaultVariantSelector,currentRollout,rollFromVariant),slots=options.stageInputs.length>0?parseStageInputs(options.stageInputs):currentRollout?.slots;if(!slots||slots.length===0)throw new Error("At least one --stage is required. Use --stage <PERCENTAGE,DURATION>, for example --stage 5,6h.");let finalPromille=options.finalPercentage===void 0?currentRollout?.finalPromille:parseFinalPercentage(options.finalPercentage),startTimestamp=resolveRolloutStartTimestamp(options.start,currentRollout?.startTimestamp);return{outcome:{type:"rollout",base,startTimestamp,rollFromVariantId:rollFromVariant.id,rollToVariantId:rollToVariant.id,defaultVariantId:defaultVariant.id,slots,...finalPromille!==void 0&&{finalPromille}},defaultVariant,rollFromVariant,rollToVariant,baseLabel:`${base.kind}.${base.attribute}`,summary:formatRolloutStages(slots,finalPromille),startLabel:formatStartLabel(options.start,currentRollout?.startTimestamp)}}function resolveRollFromVariant(flag,selector,currentRollout){return selector?resolveVariantOrThrow(selector,flag.variants,"--from-variant"):currentRollout?resolveVariantByIdOrThrow(currentRollout.rollFromVariantId,flag.variants,"--from-variant"):inferBooleanVariant(flag,!1,"--from-variant")}function resolveRollToVariant(flag,selector,currentRollout){return selector?resolveVariantOrThrow(selector,flag.variants,"--to-variant"):currentRollout?resolveVariantByIdOrThrow(currentRollout.rollToVariantId,flag.variants,"--to-variant"):inferBooleanVariant(flag,!0,"--to-variant")}function resolveDefaultVariant2(flag,selector,currentRollout,rollFromVariant){return selector?resolveVariantOrThrow(selector,flag.variants,"--default-variant"):currentRollout?resolveVariantByIdOrThrow(currentRollout.defaultVariantId,flag.variants,"--default-variant"):rollFromVariant}function inferBooleanVariant(flag,value,optionName){if(flag.kind!=="boolean")throw new Error(`Missing required flag ${optionName}. Use ${optionName} <VARIANT> for non-boolean rollouts.`);let variant=flag.variants.find(candidate=>candidate.value===value);if(!variant)throw new Error(`Flag ${import_chalk174.default.bold(flag.slug)} is missing the standard boolean variants`);return variant}function parseStageInputs(stageInputs){let slots=stageInputs.map(parseStageInput);for(let index=1;index<slots.length;index++)if(slots[index].promille<=slots[index-1].promille)throw new Error("Stage percentages must be in ascending order.");return slots}function parseStageInput(input){let parts=input.split(",").map(part=>part.trim());if(parts.length!==2)throw new Error(`Invalid stage ${import_chalk174.default.bold(input)}. Use --stage <PERCENTAGE,DURATION>, for example --stage 5,6h.`);let percentage=Number(parts[0]);if(!Number.isFinite(percentage)||percentage<=0||percentage>=100||!Number.isInteger(percentage*1e3))throw new Error(`Invalid stage percentage "${parts[0]}". Use a number greater than 0 and less than 100 with up to 3 decimal places.`);let durationMs=parseStageDuration(parts[1]);if(durationMs===void 0)throw new Error(`Invalid duration "${parts[1]}". Use minutes (e.g. "30m"), hours (e.g. "6h"), or days (e.g. "1d"). Seconds are not supported.`);return{durationMs,promille:Math.round(percentage*1e3)}}function parseStageDuration(value){if(!value||/^\d+(s|ms)$/i.test(value))return;let durationMs=(0,import_ms19.default)(/^\d+$/.test(value)?`${value}m`:value);if(durationMs===void 0||durationMs<=0)return;let roundedMinutes=Math.round(durationMs/6e4);if(!(roundedMinutes<=0))return roundedMinutes*6e4}function resolveRolloutStartTimestamp(start,currentStartTimestamp){if(start===void 0)return currentStartTimestamp??Date.now();if(start==="now")return Date.now();let relativeDurationMs=(0,import_ms19.default)(start);if(relativeDurationMs!==void 0){if(relativeDurationMs<=0)throw new Error(`Invalid start time "${start}". Use "now", a future relative duration such as "1h", or an ISO 8601 datetime.`);return Date.now()+relativeDurationMs}let absoluteTime=new Date(start).getTime();if(Number.isNaN(absoluteTime))throw new Error(`Invalid start time "${start}". Use "now", a future relative duration such as "1h", or an ISO 8601 datetime.`);return absoluteTime}function parseFinalPercentage(input){let percentage=Number(input);if(input.trim()===""||!Number.isFinite(percentage)||percentage<0||percentage>100||Math.round(percentage*1e3)/1e3!==percentage)throw new Error(`Invalid final percentage "${input}". Use --final-percentage with a number between 0 and 100 with up to 3 decimal places.`);return Math.round(percentage*1e3)}function formatRolloutStages(slots,finalPromille=1e5){return`${slots.map(slot=>`${formatPromille(slot.promille)} for ${(0,import_ms19.default)(slot.durationMs,{long:!0})}`).join(", ")}, then ${formatPromille(finalPromille)} indefinitely`}function formatPromille(promille){let percentage=promille/1e3;return Number.isInteger(percentage)?`${percentage}%`:`${Number(percentage.toFixed(3))}%`}function formatStartLabel(start,currentStartTimestamp){return start===void 0?currentStartTimestamp?"preserve current start time":"immediately":start==="now"?"immediately":`start at ${start}`}var FlagsRolloutTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionFromVariant(variant){variant&&this.trackCliOption({option:"from-variant",value:this.redactedValue})}trackCliOptionToVariant(variant){variant&&this.trackCliOption({option:"to-variant",value:this.redactedValue})}trackCliOptionDefaultVariant(variant){variant&&this.trackCliOption({option:"default-variant",value:this.redactedValue})}trackCliOptionBy(base){base&&this.trackCliOption({option:"by",value:this.redactedValue})}trackCliOptionStage(stages){stages?.length&&this.trackCliOption({option:"stage",value:this.redactedValue})}trackCliOptionFinalPercentage(percentage){percentage!==void 0&&this.trackCliOption({option:"final-percentage",value:this.redactedValue})}trackCliOptionStart(start){start&&this.trackCliOption({option:"start",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function rollout(client,argv){let telemetryClient=new FlagsRolloutTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(rolloutSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],rollFromVariantSelector=normalizeOptionalInput(flags["--from-variant"]),rollToVariantSelector=normalizeOptionalInput(flags["--to-variant"]),defaultVariantSelector=normalizeOptionalInput(flags["--default-variant"]),baseSelector=normalizeOptionalInput(flags["--by"]),stageInputs=(flags["--stage"]||[]).map(input=>input.trim()),finalPercentage=flags["--final-percentage"],start=normalizeOptionalInput(flags["--start"]),message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to roll out"),output_manager_default.log(`Example: ${getCommandName("flags rollout my-feature --environment production --by user.userId --stage 5,6h --stage 25,1d")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionFromVariant(rollFromVariantSelector),telemetryClient.trackCliOptionToVariant(rollToVariantSelector),telemetryClient.trackCliOptionDefaultVariant(defaultVariantSelector),telemetryClient.trackCliOptionBy(baseSelector),telemetryClient.trackCliOptionStage(stageInputs.length>0?[stageInputs[0]]:void 0),telemetryClient.trackCliOptionFinalPercentage(finalPercentage),telemetryClient.trackCliOptionStart(start),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let[flag,settings]=await Promise.all([getFlag(client,project.id,flagArg),getFlagSettings(client,project.id)]);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk175.default.bold(flag.slug)} is archived and cannot be rolled out`),1;let selectedEnvironment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to roll out in:",{showEnvironmentDetails:!0,decorateChoices:!1}),currentOutcome=flag.environments[selectedEnvironment].fallthrough,rolloutConfig=resolveFlagRollout(flag,settings,{stageInputs,finalPercentage,baseSelector,rollFromVariantSelector,rollToVariantSelector,defaultVariantSelector,start,currentOutcome:currentOutcome.type==="experiment"?void 0:currentOutcome}),nextEnvironmentConfig=buildOutcomeEnvConfig(flag.environments[selectedEnvironment],{outcome:rolloutConfig.outcome,defaultVariantId:rolloutConfig.defaultVariant.id});if(flag.environments[selectedEnvironment].active&&(0,import_fast_deep_equal6.default)(flag.environments[selectedEnvironment].fallthrough,rolloutConfig.outcome)&&(0,import_fast_deep_equal6.default)(flag.environments[selectedEnvironment],nextEnvironmentConfig))return output_manager_default.warn(`Flag ${import_chalk175.default.bold(flag.slug)} is already configured with this rollout in ${selectedEnvironment}`),0;let updateMessage=await resolveFlagUpdateMessage(client,message,getDefaultRolloutMessage(selectedEnvironment,rolloutConfig));output_manager_default.spinner(`Updating rollout in ${selectedEnvironment}...`),await updateFlag(client,project.id,flagArg,{environments:{[selectedEnvironment]:nextEnvironmentConfig},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk175.default.bold(flag.slug)} rollout has been updated in ${import_chalk175.default.bold(selectedEnvironment)}`),output_manager_default.log(` ${import_chalk175.default.dim("Based on:")} ${rolloutConfig.baseLabel}`),output_manager_default.log(` ${import_chalk175.default.dim("Roll from:")} ${formatVariantLabel(rolloutConfig.rollFromVariant)}`),output_manager_default.log(` ${import_chalk175.default.dim("Roll to:")} ${formatVariantLabel(rolloutConfig.rollToVariant)}`),output_manager_default.log(` ${import_chalk175.default.dim("Fallback:")} ${formatVariantLabel(rolloutConfig.defaultVariant)}`),output_manager_default.log(` ${import_chalk175.default.dim("Start:")} ${rolloutConfig.startLabel}`),output_manager_default.log(` ${import_chalk175.default.dim("Stages:")} ${rolloutConfig.summary}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function getDefaultRolloutMessage(environment,rolloutConfig){return`Configure rollout for ${environment}: ${rolloutConfig.summary}`}function formatVariantLabel(variant){return variant.label||variant.id}var import_chalk176=__toESM(require_source(),1);async function deleteFlag(client,projectId,flagIdOrSlug){output_manager_default.debug(`Deleting feature flag ${flagIdOrSlug} for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/flags/${encodeURIComponent(flagIdOrSlug)}`;await client.fetch(url,{method:"DELETE"})}var FlagsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm7(client,argv){let telemetryClient=new FlagsRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to delete"),output_manager_default.log(`Example: ${getCommandName("flags rm my-feature")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state!=="archived")return output_manager_default.error(`Flag ${import_chalk176.default.bold(flag.slug)} must be archived before it can be deleted. Run ${getCommandName(`flags archive ${flag.slug}`)} first.`),1;if(!skipConfirmation){if(!client.stdin.isTTY)return output_manager_default.error("Missing required flag --yes. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Are you sure you want to delete ${import_chalk176.default.bold(flag.slug)}? This action cannot be undone.`,!1))return output_manager_default.log("Aborted"),0}output_manager_default.spinner("Deleting flag..."),await deleteFlag(client,project.id,flagArg),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk176.default.bold(flag.slug)} has been deleted`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk177=__toESM(require_source(),1);var FlagsArchiveTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function archive(client,argv){let telemetryClient=new FlagsArchiveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(archiveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to archive"),output_manager_default.log(`Example: ${getCommandName("flags archive my-feature")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.warn(`Flag ${import_chalk177.default.bold(flag.slug)} is already archived`),0;if(!skipConfirmation){if(!client.stdin.isTTY)return output_manager_default.error("Missing required flag --yes. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Are you sure you want to archive ${import_chalk177.default.bold(flag.slug)}?`,!1))return output_manager_default.log("Aborted"),0}output_manager_default.spinner("Archiving flag..."),await updateFlag(client,project.id,flagArg,{state:"archived",message:"Archived via CLI"}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk177.default.bold(flag.slug)} has been archived`),output_manager_default.log(`
758
- To unarchive this flag, run ${getCommandName(`flags unarchive ${flag.slug}`)}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk178=__toESM(require_source(),1);var FlagsUnarchiveTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function unarchive(client,argv){let telemetryClient=new FlagsUnarchiveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(unarchiveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to unarchive"),output_manager_default.log(`Example: ${getCommandName("flags unarchive my-feature")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="active")return output_manager_default.warn(`Flag ${import_chalk178.default.bold(flag.slug)} is already active`),0;if(!skipConfirmation){if(!client.stdin.isTTY)return output_manager_default.error("Missing required flag --yes. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Are you sure you want to unarchive ${import_chalk178.default.bold(flag.slug)}?`,!1))return output_manager_default.log("Aborted"),0}output_manager_default.spinner("Unarchiving flag..."),await updateFlag(client,project.id,flagArg,{state:"active",message:"Unarchive"}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk178.default.bold(flag.slug)} has been unarchived`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk180=__toESM(require_source(),1);var import_chalk179=__toESM(require_source(),1);function logNonBooleanFlagGuidance(flag,{attemptedSubcommand,environment,isInteractive,teamSlug,projectName}){let dashboardUrl=getFlagDashboardUrl(teamSlug,projectName,flag.slug),suggestedEnvironment=environment&&environment in flag.environments?environment:void 0;if(output_manager_default.warn(`The ${getCommandName(`flags ${attemptedSubcommand}`)} command only works with boolean flags.`),output_manager_default.log(`Flag ${import_chalk179.default.bold(flag.slug)} is a ${import_chalk179.default.cyan(flag.kind)} flag. Set a specific variant instead:`),output_manager_default.log(` ${getCommandName(getSuggestedSetCommand(flag.slug,suggestedEnvironment,isInteractive))}`),flag.variants.length>0){output_manager_default.log("Available variants:");for(let variant of flag.variants)output_manager_default.log(` - ${formatVariantForDisplay(variant)}`)}output_manager_default.log(`See full flag details with ${getCommandName(`flags inspect ${flag.slug}`)}`),output_manager_default.log(`Open in the dashboard: ${import_chalk179.default.cyan(dashboardUrl)}`)}function getSuggestedSetCommand(slug,environment,isInteractive){let parts=[`flags set ${slug}`];return environment?parts.push(`--environment ${environment}`):isInteractive||parts.push("--environment <ENV>"),isInteractive||parts.push("--variant <VARIANT>"),parts.join(" ")}var FlagsDisableTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionVariant(variant){variant&&this.trackCliOption({option:"variant",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function disable3(client,argv){let telemetryClient=new FlagsDisableTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(disableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],variantId=flags["--variant"],message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg){if(client.nonInteractive){let envPart=environment?`--environment ${environment}`:"--environment <production|preview|development>";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide a flag slug or ID to disable.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags disable <flag> ${envPart}`),when:"disable a feature flag by slug or ID"}]},1),1}return output_manager_default.error("Please provide a flag slug or ID to disable"),output_manager_default.log(`Example: ${getCommandName("flags disable my-feature --environment production")}`),1}telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionVariant(variantId),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:"Your codebase is not linked to a project. Run link first.",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"link the project"}]},1),1):(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1);client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk180.default.bold(flag.slug)} is archived and cannot be disabled`),1;if(flag.kind!=="boolean")return logNonBooleanFlagGuidance(flag,{attemptedSubcommand:"disable",environment,isInteractive:!!client.stdin.isTTY,teamSlug:link.org.slug,projectName:project.name}),0;if(!environment&&client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --environment (production, preview, or development) to disable the flag in.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags disable ${flagArg} --environment <production|preview|development>`),when:"disable the flag in a specific environment"}]},1),1;environment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to disable the flag in:");let envConfig=flag.environments[environment],selectedVariant=getBooleanVariant(flag,!1);if(variantId){let result=resolveVariant(variantId,flag.variants);if(result.error)return output_manager_default.error(result.error),1;selectedVariant=result.variant}if(isPausingEnvironmentToVariant(envConfig,selectedVariant.id))return output_manager_default.warn(`Flag ${import_chalk180.default.bold(flag.slug)} is already disabled in ${environment}`),0;let updateMessage=await resolveFlagUpdateMessage(client,message,getDefaultDisableMessage(environment));output_manager_default.spinner(`Disabling flag in ${environment}...`),await updateFlag(client,project.id,flagArg,{environments:{[environment]:buildPausedEnvironmentConfig(envConfig,selectedVariant.id)},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk180.default.bold(flag.slug)} has been disabled in ${import_chalk180.default.bold(environment)}`),output_manager_default.log(` ${import_chalk180.default.dim("Serving variant:")} ${formatVariantForDisplay(selectedVariant)}`)}catch(err){output_manager_default.stopSpinner();let message2=err instanceof Error?err.message:String(err);return client.nonInteractive&&message2.startsWith("Invalid environment:")?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:message2,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags disable ${flagArg} --environment <production|preview|development>`),when:"use a valid environment (production, preview, or development)"}]},1),1):(printError(err),1)}return 0}function getDefaultDisableMessage(environment){return`Disabled for ${environment} via CLI`}var import_chalk181=__toESM(require_source(),1);var FlagsEnableTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function enable3(client,argv){let telemetryClient=new FlagsEnableTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(enableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to enable"),output_manager_default.log(`Example: ${getCommandName("flags enable my-feature --environment production")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk181.default.bold(flag.slug)} is archived and cannot be enabled`),1;if(flag.kind!=="boolean")return logNonBooleanFlagGuidance(flag,{attemptedSubcommand:"enable",environment,isInteractive:!!client.stdin.isTTY,teamSlug:link.org.slug,projectName:project.name}),0;if(!environment&&client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --environment (production, preview, or development) to enable the flag in.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags enable ${flagArg} --environment <production|preview|development>`),when:"enable the flag in a specific environment"}]},1),1;environment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to enable the flag in:");let envConfig=flag.environments[environment],onVariant=getBooleanVariant(flag,!0);if(isPausingEnvironmentToVariant(envConfig,onVariant.id))return output_manager_default.warn(`Flag ${import_chalk181.default.bold(flag.slug)} is already enabled in ${environment}`),0;let updateMessage=await resolveFlagUpdateMessage(client,message,getDefaultEnableMessage(environment));output_manager_default.spinner(`Enabling flag in ${environment}...`),await updateFlag(client,project.id,flagArg,{environments:{[environment]:buildPausedEnvironmentConfig(envConfig,onVariant.id)},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk181.default.bold(flag.slug)} has been enabled in ${import_chalk181.default.bold(environment)}`),output_manager_default.log(` ${import_chalk181.default.dim("Serving variant:")} ${formatVariantForDisplay(onVariant)}`)}catch(err){output_manager_default.stopSpinner();let message2=err instanceof Error?err.message:String(err);return client.nonInteractive&&message2.startsWith("Invalid environment:")?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:message2,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags enable ${flagArg} --environment <production|preview|development>`),when:"use a valid environment (production, preview, or development)"}]},1),1):(printError(err),1)}return 0}function getDefaultEnableMessage(environment){return`Enabled for ${environment} via CLI`}var FlagsSdkKeysTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}},FlagsSdkKeysLsTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSdkKeysAddTelemetryClient=class extends TelemetryClient{trackCliOptionType(type){type&&this.trackCliOption({option:"type",value:type})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:environment})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}},FlagsSdkKeysRmTelemetryClient=class extends TelemetryClient{trackCliArgumentKey(key){key&&this.trackCliArgument({arg:"key",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_chalk182=__toESM(require_source(),1),import_ms20=__toESM(require_ms(),1);async function getSdkKeys(client,projectId){output_manager_default.debug(`Fetching SDK keys for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return(await client.fetch(url)).data}async function createSdkKey(client,projectId,request2){output_manager_default.debug(`Creating SDK key for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return await client.fetch(url,{method:"PUT",body:request2})}async function deleteSdkKey(client,projectId,hashKey){output_manager_default.debug(`Deleting SDK key ${hashKey} for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys/${encodeURIComponent(hashKey)}`;await client.fetch(url,{method:"DELETE",json:!1})}async function sdkKeysLs(client,argv){let telemetryClient=new FlagsSdkKeysLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(sdkKeysListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,json=flags["--json"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagJson(json);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name);try{output_manager_default.spinner("Fetching SDK keys...");let keys=await getSdkKeys(client,project.id);output_manager_default.stopSpinner();let sortedKeys=keys.sort((a,b)=>b.createdAt-a.createdAt);json?outputSdkKeysJson(client,sortedKeys):keys.length===0?(output_manager_default.log(`No SDK keys found for ${projectSlugLink}`),output_manager_default.log(`
759
- Create one with: ${getCommandName("flags sdk-keys add --type server --environment production")}`)):(output_manager_default.log(`${import_chalk182.default.bold(keys.length)} SDK key${keys.length===1?"":"s"} found for ${projectSlugLink}`),printSdkKeysTable(sortedKeys))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function outputSdkKeysJson(client,keys){let jsonOutput={sdkKeys:keys.map(key=>({hashKey:key.hashKey,type:key.type,environment:key.environment,label:key.label??null,partialKeyValue:key.partialKeyValue??null,createdAt:key.createdAt,updatedAt:key.updatedAt}))};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
758
+ To unarchive this flag, run ${getCommandName(`flags unarchive ${flag.slug}`)}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk178=__toESM(require_source(),1);var FlagsUnarchiveTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function unarchive(client,argv){let telemetryClient=new FlagsUnarchiveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(unarchiveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to unarchive"),output_manager_default.log(`Example: ${getCommandName("flags unarchive my-feature")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="active")return output_manager_default.warn(`Flag ${import_chalk178.default.bold(flag.slug)} is already active`),0;if(!skipConfirmation){if(!client.stdin.isTTY)return output_manager_default.error("Missing required flag --yes. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Are you sure you want to unarchive ${import_chalk178.default.bold(flag.slug)}?`,!1))return output_manager_default.log("Aborted"),0}output_manager_default.spinner("Unarchiving flag..."),await updateFlag(client,project.id,flagArg,{state:"active",message:"Unarchive"}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk178.default.bold(flag.slug)} has been unarchived`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk180=__toESM(require_source(),1);var import_chalk179=__toESM(require_source(),1);function logNonBooleanFlagGuidance(flag,{attemptedSubcommand,environment,isInteractive,teamSlug,projectName}){let dashboardUrl=getFlagDashboardUrl(teamSlug,projectName,flag.slug),suggestedEnvironment=environment&&environment in flag.environments?environment:void 0;if(output_manager_default.warn(`The ${getCommandName(`flags ${attemptedSubcommand}`)} command only works with boolean flags.`),output_manager_default.log(`Flag ${import_chalk179.default.bold(flag.slug)} is a ${import_chalk179.default.cyan(flag.kind)} flag. Set a specific variant instead:`),output_manager_default.log(` ${getCommandName(getSuggestedSetCommand(flag.slug,suggestedEnvironment,isInteractive))}`),flag.variants.length>0){output_manager_default.log("Available variants:");for(let variant of flag.variants)output_manager_default.log(` - ${formatVariantForDisplay(variant)}`)}output_manager_default.log(`See full flag details with ${getCommandName(`flags inspect ${flag.slug}`)}`),output_manager_default.log(`Open in the dashboard: ${import_chalk179.default.cyan(dashboardUrl)}`)}function getSuggestedSetCommand(slug,environment,isInteractive){let parts=[`flags set ${slug}`];return environment?parts.push(`--environment ${environment}`):isInteractive||parts.push("--environment <ENV>"),isInteractive||parts.push("--variant <VARIANT>"),parts.join(" ")}var FlagsDisableTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionVariant(variant){variant&&this.trackCliOption({option:"variant",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function disable3(client,argv){let telemetryClient=new FlagsDisableTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(disableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],variantId=flags["--variant"],message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg){if(client.nonInteractive){let envPart=environment?`--environment ${environment}`:"--environment <production|preview|development>";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide a flag slug or ID to disable.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags disable <flag> ${envPart}`),when:"disable a feature flag by slug or ID"}]},1),1}return output_manager_default.error("Please provide a flag slug or ID to disable"),output_manager_default.log(`Example: ${getCommandName("flags disable my-feature --environment production")}`),1}telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionVariant(variantId),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:"Your codebase is not linked to a project. Run link first.",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"link the project"}]},1),1):(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1);client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk180.default.bold(flag.slug)} is archived and cannot be disabled`),1;if(flag.kind!=="boolean")return logNonBooleanFlagGuidance(flag,{attemptedSubcommand:"disable",environment,isInteractive:!!client.stdin.isTTY,teamSlug:link.org.slug,projectName:project.name}),0;if(!environment&&client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --environment (production, preview, or development) to disable the flag in.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags disable ${flagArg} --environment <production|preview|development>`),when:"disable the flag in a specific environment"}]},1),1;environment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to disable the flag in:");let envConfig=flag.environments[environment],selectedVariant=getBooleanVariant(flag,!1);if(variantId){let result=resolveVariant(variantId,flag.variants);if(result.error)return output_manager_default.error(result.error),1;selectedVariant=result.variant}if(isPausingEnvironmentToVariant(envConfig,selectedVariant.id))return output_manager_default.warn(`Flag ${import_chalk180.default.bold(flag.slug)} is already disabled in ${environment}`),0;let updateMessage=await resolveFlagUpdateMessage(client,message,getDefaultDisableMessage(environment));output_manager_default.spinner(`Disabling flag in ${environment}...`),await updateFlag(client,project.id,flagArg,{environments:{[environment]:buildPausedEnvironmentConfig(envConfig,selectedVariant.id)},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk180.default.bold(flag.slug)} has been disabled in ${import_chalk180.default.bold(environment)}`),output_manager_default.log(` ${import_chalk180.default.dim("Serving variant:")} ${formatVariantForDisplay(selectedVariant)}`)}catch(err){output_manager_default.stopSpinner();let message2=err instanceof Error?err.message:String(err);return client.nonInteractive&&message2.startsWith("Invalid environment:")?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:message2,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags disable ${flagArg} --environment <production|preview|development>`),when:"use a valid environment (production, preview, or development)"}]},1),1):(printError(err),1)}return 0}function getDefaultDisableMessage(environment){return`Disabled for ${environment} via CLI`}var import_chalk181=__toESM(require_source(),1);var FlagsEnableTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}};async function enable3(client,argv){let telemetryClient=new FlagsEnableTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(enableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[flagArg]=args,environment=flags["--environment"],message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to enable"),output_manager_default.log(`Example: ${getCommandName("flags enable my-feature --environment production")}`),1;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionMessage(message);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);if(output_manager_default.stopSpinner(),flag.state==="archived")return output_manager_default.error(`Flag ${import_chalk181.default.bold(flag.slug)} is archived and cannot be enabled`),1;if(flag.kind!=="boolean")return logNonBooleanFlagGuidance(flag,{attemptedSubcommand:"enable",environment,isInteractive:!!client.stdin.isTTY,teamSlug:link.org.slug,projectName:project.name}),0;if(!environment&&client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --environment (production, preview, or development) to enable the flag in.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags enable ${flagArg} --environment <production|preview|development>`),when:"enable the flag in a specific environment"}]},1),1;environment=await resolveFlagEnvironment(client,flag,environment,"Select an environment to enable the flag in:");let envConfig=flag.environments[environment],onVariant=getBooleanVariant(flag,!0);if(isPausingEnvironmentToVariant(envConfig,onVariant.id))return output_manager_default.warn(`Flag ${import_chalk181.default.bold(flag.slug)} is already enabled in ${environment}`),0;let updateMessage=await resolveFlagUpdateMessage(client,message,getDefaultEnableMessage(environment));output_manager_default.spinner(`Enabling flag in ${environment}...`),await updateFlag(client,project.id,flagArg,{environments:{[environment]:buildPausedEnvironmentConfig(envConfig,onVariant.id)},message:updateMessage}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk181.default.bold(flag.slug)} has been enabled in ${import_chalk181.default.bold(environment)}`),output_manager_default.log(` ${import_chalk181.default.dim("Serving variant:")} ${formatVariantForDisplay(onVariant)}`)}catch(err){output_manager_default.stopSpinner();let message2=err instanceof Error?err.message:String(err);return client.nonInteractive&&message2.startsWith("Invalid environment:")?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:message2,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags enable ${flagArg} --environment <production|preview|development>`),when:"use a valid environment (production, preview, or development)"}]},1),1):(printError(err),1)}return 0}function getDefaultEnableMessage(environment){return`Enabled for ${environment} via CLI`}var FlagsSdkKeysTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}},FlagsSdkKeysLsTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSdkKeysAddTelemetryClient=class extends TelemetryClient{trackCliOptionType(type){type&&this.trackCliOption({option:"type",value:type})}trackCliOptionEnvironment(environment){environment&&this.trackCliOption({option:"environment",value:environment})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}},FlagsSdkKeysRmTelemetryClient=class extends TelemetryClient{trackCliArgumentKey(key){key&&this.trackCliArgument({arg:"key",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_chalk182=__toESM(require_source(),1),import_ms20=__toESM(require_ms(),1);async function getSdkKeys(client,projectId){output_manager_default.debug(`Fetching SDK keys for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return(await client.fetch(url)).data}async function createSdkKey(client,projectId,request2){output_manager_default.debug(`Creating SDK key for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return await client.fetch(url,{method:"PUT",body:request2})}async function deleteSdkKey(client,projectId,hashKey){output_manager_default.debug(`Deleting SDK key ${hashKey} for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys/${encodeURIComponent(hashKey)}`;await client.fetch(url,{method:"DELETE",json:!1})}async function sdkKeysLs(client,argv){let telemetryClient=new FlagsSdkKeysLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(sdkKeysListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,json=flags["--json"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagJson(json);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name);try{output_manager_default.spinner("Fetching SDK keys...");let keys=await getSdkKeys(client,project.id);output_manager_default.stopSpinner();let sortedKeys=keys.sort((a,b)=>b.createdAt-a.createdAt);json?outputSdkKeysJson(client,sortedKeys):keys.length===0?(output_manager_default.log(`No SDK keys found for ${projectSlugLink}`),output_manager_default.log(`
759
+ Create one with: ${getCommandName("flags sdk-keys create --type server --environment production")}`)):(output_manager_default.log(`${import_chalk182.default.bold(keys.length)} SDK key${keys.length===1?"":"s"} found for ${projectSlugLink}`),printSdkKeysTable(sortedKeys))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function outputSdkKeysJson(client,keys){let jsonOutput={sdkKeys:keys.map(key=>({hashKey:key.hashKey,type:key.type,environment:key.environment,label:key.label??null,partialKeyValue:key.partialKeyValue??null,createdAt:key.createdAt,updatedAt:key.updatedAt}))};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
760
760
  `)}function printSdkKeysTable(keys){let headers=["Hash Key","Type","Environment","Label","Partial Key Value","Created"],now=Date.now(),rows=keys.map(key=>[import_chalk182.default.dim(key.hashKey.slice(0,12)+"..."),getTypeLabel(key.type),key.environment,key.label||import_chalk182.default.dim("-"),key.partialKeyValue||import_chalk182.default.dim("-"),(0,import_ms20.default)(now-key.createdAt)+" ago"]),table3=formatTable(headers,["l","l","l","l","l","l"],[{name:"",rows}]);output_manager_default.print(`
761
761
  ${table3}
762
- `)}function getTypeLabel(type){switch(type){case"server":return import_chalk182.default.blue("server");case"client":return import_chalk182.default.green("client");case"mobile":return import_chalk182.default.yellow("mobile");default:return type}}var import_chalk183=__toESM(require_source(),1);var VALID_TYPES=["server","client","mobile"],VALID_ENVIRONMENTS2=["production","preview","development"];async function sdkKeysAdd(client,argv){let telemetryClient=new FlagsSdkKeysAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(sdkKeysAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,sdkKeyType=flags["--type"],environment=flags["--environment"],label=flags["--label"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionType(sdkKeyType),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionLabel(label);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:"Your codebase is not linked to a project. Run link first.",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"link the project"}]},1),1):(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1);client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;if(!sdkKeyType){if(client.nonInteractive){let envPart=environment?`--environment ${environment}`:"--environment <production|preview|development>";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --type (server, client, or mobile) for the SDK key.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys add --type <server|client|mobile> ${envPart}`),when:"create an SDK key with a specific type"}]},1),1}sdkKeyType=await client.input.select({message:"Select the SDK key type:",choices:[{name:"Server (for backend/server-side usage)",value:"server"},{name:"Client (for browser/frontend usage)",value:"client"},{name:"Mobile (for mobile app usage)",value:"mobile"}]})}if(!VALID_TYPES.includes(sdkKeyType)){if(client.nonInteractive){let envPart=environment?`--environment ${environment}`:"--environment <production|preview|development>";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid type: ${sdkKeyType}. Must be one of: ${VALID_TYPES.join(", ")}`,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys add --type <server|client|mobile> ${envPart}`),when:"use a valid type (server, client, or mobile)"}]},1),1}return output_manager_default.error(`Invalid type: ${sdkKeyType}. Must be one of: ${VALID_TYPES.join(", ")}`),1}if(!environment){if(client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --environment (production, preview, or development) for the SDK key.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys add --type ${sdkKeyType} --environment <production|preview|development>`),when:"create an SDK key for a specific environment"}]},1),1;environment=await client.input.select({message:"Select the environment:",choices:VALID_ENVIRONMENTS2.map(env=>({name:env,value:env}))})}if(!VALID_ENVIRONMENTS2.includes(environment))return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid environment: ${environment}. Must be one of: ${VALID_ENVIRONMENTS2.join(", ")}`,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys add --type ${sdkKeyType} --environment <production|preview|development>`),when:"use a valid environment (production, preview, or development)"}]},1),1):(output_manager_default.error(`Invalid environment: ${environment}. Must be one of: ${VALID_ENVIRONMENTS2.join(", ")}`),1);let finalLabel=label;!finalLabel&&client.stdin.isTTY&&!client.nonInteractive&&(finalLabel=await client.input.text({message:"Enter an optional label for this SDK key (press Enter to skip):"}),finalLabel===""&&(finalLabel=void 0));let request2={sdkKeyType,environment,label:finalLabel};try{output_manager_default.spinner("Creating SDK key...");let key=await createSdkKey(client,project.id,request2);output_manager_default.stopSpinner(),output_manager_default.success("SDK key created successfully"),output_manager_default.print(`
762
+ `)}function getTypeLabel(type){switch(type){case"server":return import_chalk182.default.blue("server");case"client":return import_chalk182.default.green("client");case"mobile":return import_chalk182.default.yellow("mobile");default:return type}}var import_chalk183=__toESM(require_source(),1);var VALID_TYPES=["server","client","mobile"],VALID_ENVIRONMENTS2=["production","preview","development"];async function sdkKeysAdd(client,argv){let telemetryClient=new FlagsSdkKeysAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(sdkKeysAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,sdkKeyType=flags["--type"],environment=flags["--environment"],label=flags["--label"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionType(sdkKeyType),telemetryClient.trackCliOptionEnvironment(environment),telemetryClient.trackCliOptionLabel(label);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:"Your codebase is not linked to a project. Run link first.",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"link the project"}]},1),1):(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1);client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;if(!sdkKeyType){if(client.nonInteractive){let envPart=environment?`--environment ${environment}`:"--environment <production|preview|development>";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --type (server, client, or mobile) for the SDK key.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys create --type <server|client|mobile> ${envPart}`),when:"create an SDK key with a specific type"}]},1),1}sdkKeyType=await client.input.select({message:"Select the SDK key type:",choices:[{name:"Server (for backend/server-side usage)",value:"server"},{name:"Client (for browser/frontend usage)",value:"client"},{name:"Mobile (for mobile app usage)",value:"mobile"}]})}if(!VALID_TYPES.includes(sdkKeyType)){if(client.nonInteractive){let envPart=environment?`--environment ${environment}`:"--environment <production|preview|development>";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid type: ${sdkKeyType}. Must be one of: ${VALID_TYPES.join(", ")}`,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys create --type <server|client|mobile> ${envPart}`),when:"use a valid type (server, client, or mobile)"}]},1),1}return output_manager_default.error(`Invalid type: ${sdkKeyType}. Must be one of: ${VALID_TYPES.join(", ")}`),1}if(!environment){if(client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide --environment (production, preview, or development) for the SDK key.",next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys create --type ${sdkKeyType} --environment <production|preview|development>`),when:"create an SDK key for a specific environment"}]},1),1;environment=await client.input.select({message:"Select the environment:",choices:VALID_ENVIRONMENTS2.map(env=>({name:env,value:env}))})}if(!VALID_ENVIRONMENTS2.includes(environment))return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid environment: ${environment}. Must be one of: ${VALID_ENVIRONMENTS2.join(", ")}`,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys create --type ${sdkKeyType} --environment <production|preview|development>`),when:"use a valid environment (production, preview, or development)"}]},1),1):(output_manager_default.error(`Invalid environment: ${environment}. Must be one of: ${VALID_ENVIRONMENTS2.join(", ")}`),1);let finalLabel=label;!finalLabel&&client.stdin.isTTY&&!client.nonInteractive&&(finalLabel=await client.input.text({message:"Enter an optional label for this SDK key (press Enter to skip):"}),finalLabel===""&&(finalLabel=void 0));let request2={sdkKeyType,environment,label:finalLabel};try{output_manager_default.spinner("Creating SDK key...");let key=await createSdkKey(client,project.id,request2);output_manager_default.stopSpinner(),output_manager_default.success("SDK key created successfully"),output_manager_default.print(`
763
763
  `),output_manager_default.print(` ${import_chalk183.default.dim("Hash Key:")} ${key.hashKey}
764
764
  `),output_manager_default.print(` ${import_chalk183.default.dim("Type:")} ${key.type}
765
765
  `),output_manager_default.print(` ${import_chalk183.default.dim("Environment:")} ${key.environment}
@@ -769,7 +769,7 @@ ${table3}
769
769
  ${import_chalk183.default.cyan(key.keyValue)}
770
770
  `)),key.connectionString&&(output_manager_default.print(`
771
771
  `),output_manager_default.log(`${import_chalk183.default.dim("Connection string:")}`),output_manager_default.print(` ${import_chalk183.default.cyan(key.connectionString)}
772
- `))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk184=__toESM(require_source(),1);async function sdkKeysRm(client,argv){let telemetryClient=new FlagsSdkKeysRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(sdkKeysRemoveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[hashKey]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliArgumentKey(hashKey),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:"Your codebase is not linked to a project. A user must run `vercel link` in a terminal to continue (this will prompt for login if needed).",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"run in a terminal to log in if needed and link this codebase to a Vercel project, then retry this command"}]},1),1):(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1);client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{if(!hashKey){if(client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide the SDK key hash to delete. Run `vercel flags sdk-keys ls` to list keys.",next:[{command:buildCommandWithGlobalFlags(client.argv,"flags sdk-keys rm <hashKey>"),when:"delete an SDK key by hash"},{command:buildCommandWithGlobalFlags(client.argv,"flags sdk-keys ls"),when:"list SDK keys to find the hash"}]},1),1;output_manager_default.spinner("Fetching SDK keys...");let keys=await getSdkKeys(client,project.id);if(output_manager_default.stopSpinner(),keys.length===0)return output_manager_default.log("No SDK keys found"),0;hashKey=await client.input.select({message:"Select an SDK key to delete:",choices:keys.map(key=>({name:`${key.hashKey.slice(0,12)}... (${key.type}, ${key.environment}${key.label?`, ${key.label}`:""})`,value:key.hashKey}))})}if(!skipConfirmation){if(client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Confirm deletion of SDK key ${hashKey.slice(0,12)}... by adding --yes.`,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys rm ${hashKey} --yes`),when:"confirm and delete the SDK key"}]},1),1;if(!await client.input.confirm(`Are you sure you want to delete SDK key ${import_chalk184.default.bold(hashKey.slice(0,12)+"...")}?`,!1))return output_manager_default.log("Aborted"),0}output_manager_default.spinner("Deleting SDK key..."),await deleteSdkKey(client,project.id,hashKey),output_manager_default.stopSpinner(),output_manager_default.success(`SDK key ${import_chalk184.default.bold(hashKey.slice(0,12)+"...")} has been deleted`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var COMMAND_CONFIG41={ls:getCommandAliases(sdkKeysListSubcommand),add:getCommandAliases(sdkKeysAddSubcommand),rm:getCommandAliases(sdkKeysRemoveSubcommand)};async function sdkKeys(client){let telemetry2=new FlagsSdkKeysTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(sdkKeysSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),1}let subArgs=parsedArgs.args.slice(0),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG41),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("flags sdk-keys",subcommand),output_manager_default.print(help(sdkKeysSubcommand,{parent:flagsCommand,columns:client.stderr.columns})),2;function printHelp(command2){output_manager_default.print(help(command2,{parent:sdkKeysSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry2.trackCliFlagHelp("flags sdk-keys",subcommandOriginal),printHelp(sdkKeysListSubcommand),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),sdkKeysLs(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("flags sdk-keys",subcommandOriginal),printHelp(sdkKeysAddSubcommand),2):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),sdkKeysAdd(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("flags sdk-keys",subcommandOriginal),printHelp(sdkKeysRemoveSubcommand),2):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),sdkKeysRm(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG41)),output_manager_default.print(help(sdkKeysSubcommand,{parent:flagsCommand,columns:client.stderr.columns})),2}}var FlagsSegmentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}},FlagsSegmentsLsTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionHint(hint){hint&&this.trackCliOption({option:"hint",value:this.redactedValue})}trackCliOptionData(data){data&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionAdd(add16){add16?.length&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionHint(hint){hint&&this.trackCliOption({option:"hint",value:this.redactedValue})}trackCliOptionData(data){data&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionAdd(add16){add16?.length&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliOptionRemove(remove14){remove14?.length&&this.trackCliOption({option:"remove",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_chalk185=__toESM(require_source(),1),import_ms21=__toESM(require_ms(),1),import_pluralize14=__toESM(require_pluralize(),1);function getSegmentsUrl(projectId,withMetadata=!1){let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/segments`;return withMetadata?`${url}?withMetadata=true`:url}function getSegmentUrl(projectId,segmentIdOrSlug,withMetadata=!1){let url=`${getSegmentsUrl(projectId)}/${encodeURIComponent(segmentIdOrSlug)}`;return withMetadata?`${url}?withMetadata=true`:url}async function getSegments(client,projectId,withMetadata=!1){return output_manager_default.debug(`Fetching feature flag segments for project ${projectId}`),(await client.fetch(getSegmentsUrl(projectId,withMetadata))).data}async function getSegment(client,projectId,segmentIdOrSlug,withMetadata=!0){return output_manager_default.debug(`Fetching feature flag segment ${segmentIdOrSlug} for project ${projectId}`),client.fetch(getSegmentUrl(projectId,segmentIdOrSlug,withMetadata))}async function createSegment(client,projectId,request2){let url=getSegmentsUrl(projectId);return output_manager_default.debug(`Creating feature flag segment ${request2.slug} for project ${projectId}`),output_manager_default.debug(`API endpoint: PUT ${url}`),client.fetch(url,{method:"PUT",body:request2})}async function updateSegment(client,projectId,segmentIdOrSlug,request2){let url=getSegmentUrl(projectId,segmentIdOrSlug);return output_manager_default.debug(`Updating feature flag segment ${segmentIdOrSlug} for project ${projectId}`),client.fetch(url,{method:"PATCH",body:request2})}async function deleteSegment(client,projectId,segmentIdOrSlug){let url=getSegmentUrl(projectId,segmentIdOrSlug);output_manager_default.debug(`Deleting feature flag segment ${segmentIdOrSlug} for project ${projectId}`),await client.fetch(url,{method:"DELETE"})}async function segmentsLs(client,argv){let telemetryClient=new FlagsSegmentsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(segmentsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,json=flags["--json"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagJson(json);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name),lsStamp=stamp_default();output_manager_default.spinner(`Fetching feature flag segments for ${projectSlugLink}`);try{let segments2=await getSegments(client,project.id,!0);output_manager_default.stopSpinner();let sortedSegments=segments2.sort((a,b)=>b.updatedAt-a.updatedAt);json?outputJson6(client,sortedSegments):segments2.length===0?(output_manager_default.log(`No feature flag segments found for ${projectSlugLink} ${import_chalk185.default.gray(lsStamp())}`),output_manager_default.log(`
772
+ `))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var import_chalk184=__toESM(require_source(),1);async function sdkKeysRm(client,argv){let telemetryClient=new FlagsSdkKeysRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(sdkKeysRemoveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{args,flags}=parsedArgs,[hashKey]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliArgumentKey(hashKey),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:"Your codebase is not linked to a project. A user must run `vercel link` in a terminal to continue (this will prompt for login if needed).",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"run in a terminal to log in if needed and link this codebase to a Vercel project, then retry this command"}]},1),1):(output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1);client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{if(!hashKey){if(client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Please provide the SDK key hash to delete. Run `vercel flags sdk-keys ls` to list keys.",next:[{command:buildCommandWithGlobalFlags(client.argv,"flags sdk-keys rm <hashKey>"),when:"delete an SDK key by hash"},{command:buildCommandWithGlobalFlags(client.argv,"flags sdk-keys ls"),when:"list SDK keys to find the hash"}]},1),1;output_manager_default.spinner("Fetching SDK keys...");let keys=await getSdkKeys(client,project.id);if(output_manager_default.stopSpinner(),keys.length===0)return output_manager_default.log("No SDK keys found"),0;hashKey=await client.input.select({message:"Select an SDK key to delete:",choices:keys.map(key=>({name:`${key.hashKey.slice(0,12)}... (${key.type}, ${key.environment}${key.label?`, ${key.label}`:""})`,value:key.hashKey}))})}if(!skipConfirmation){if(client.nonInteractive)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Confirm deletion of SDK key ${hashKey.slice(0,12)}... by adding --yes.`,next:[{command:buildCommandWithGlobalFlags(client.argv,`flags sdk-keys rm ${hashKey} --yes`),when:"confirm and delete the SDK key"}]},1),1;if(!await client.input.confirm(`Are you sure you want to delete SDK key ${import_chalk184.default.bold(hashKey.slice(0,12)+"...")}?`,!1))return output_manager_default.log("Aborted"),0}output_manager_default.spinner("Deleting SDK key..."),await deleteSdkKey(client,project.id,hashKey),output_manager_default.stopSpinner(),output_manager_default.success(`SDK key ${import_chalk184.default.bold(hashKey.slice(0,12)+"...")} has been deleted`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var COMMAND_CONFIG41={ls:getCommandAliases(sdkKeysListSubcommand),add:getCommandAliases(sdkKeysAddSubcommand),rm:getCommandAliases(sdkKeysRemoveSubcommand)};async function sdkKeys(client){let telemetry2=new FlagsSdkKeysTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(sdkKeysSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),1}let subArgs=parsedArgs.args.slice(0),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG41),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("flags sdk-keys",subcommand),output_manager_default.print(help(sdkKeysSubcommand,{parent:flagsCommand,columns:client.stderr.columns})),2;function printHelp(command2){output_manager_default.print(help(command2,{parent:sdkKeysSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry2.trackCliFlagHelp("flags sdk-keys",subcommandOriginal),printHelp(sdkKeysListSubcommand),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),sdkKeysLs(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("flags sdk-keys",subcommandOriginal),printHelp(sdkKeysAddSubcommand),2):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),sdkKeysAdd(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("flags sdk-keys",subcommandOriginal),printHelp(sdkKeysRemoveSubcommand),2):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),sdkKeysRm(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG41)),output_manager_default.print(help(sdkKeysSubcommand,{parent:flagsCommand,columns:client.stderr.columns})),2}}var FlagsSegmentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}},FlagsSegmentsLsTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionHint(hint){hint&&this.trackCliOption({option:"hint",value:this.redactedValue})}trackCliOptionData(data){data&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionAdd(add16){add16?.length&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionHint(hint){hint&&this.trackCliOption({option:"hint",value:this.redactedValue})}trackCliOptionData(data){data&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionAdd(add16){add16?.length&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliOptionRemove(remove14){remove14?.length&&this.trackCliOption({option:"remove",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_chalk185=__toESM(require_source(),1),import_ms21=__toESM(require_ms(),1),import_pluralize14=__toESM(require_pluralize(),1);function getSegmentsUrl(projectId,withMetadata=!1){let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/segments`;return withMetadata?`${url}?withMetadata=true`:url}function getSegmentUrl(projectId,segmentIdOrSlug,withMetadata=!1){let url=`${getSegmentsUrl(projectId)}/${encodeURIComponent(segmentIdOrSlug)}`;return withMetadata?`${url}?withMetadata=true`:url}async function getSegments(client,projectId,withMetadata=!1){return output_manager_default.debug(`Fetching feature flag segments for project ${projectId}`),(await client.fetch(getSegmentsUrl(projectId,withMetadata))).data}async function getSegment(client,projectId,segmentIdOrSlug,withMetadata=!0){return output_manager_default.debug(`Fetching feature flag segment ${segmentIdOrSlug} for project ${projectId}`),client.fetch(getSegmentUrl(projectId,segmentIdOrSlug,withMetadata))}async function createSegment(client,projectId,request2){let url=getSegmentsUrl(projectId);return output_manager_default.debug(`Creating feature flag segment ${request2.slug} for project ${projectId}`),output_manager_default.debug(`API endpoint: PUT ${url}`),client.fetch(url,{method:"PUT",body:request2})}async function updateSegment(client,projectId,segmentIdOrSlug,request2){let url=getSegmentUrl(projectId,segmentIdOrSlug);return output_manager_default.debug(`Updating feature flag segment ${segmentIdOrSlug} for project ${projectId}`),client.fetch(url,{method:"PATCH",body:request2})}async function deleteSegment(client,projectId,segmentIdOrSlug){let url=getSegmentUrl(projectId,segmentIdOrSlug);output_manager_default.debug(`Deleting feature flag segment ${segmentIdOrSlug} for project ${projectId}`),await client.fetch(url,{method:"DELETE"})}async function segmentsLs(client,argv){let telemetryClient=new FlagsSegmentsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(segmentsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),1}let{flags}=parsedArgs,json=flags["--json"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagJson(json);let link=await getLinkedFlagsProject(client,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 run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name),lsStamp=stamp_default();output_manager_default.spinner(`Fetching feature flag segments for ${projectSlugLink}`);try{let segments2=await getSegments(client,project.id,!0);output_manager_default.stopSpinner();let sortedSegments=segments2.sort((a,b)=>b.updatedAt-a.updatedAt);json?outputJson6(client,sortedSegments):segments2.length===0?(output_manager_default.log(`No feature flag segments found for ${projectSlugLink} ${import_chalk185.default.gray(lsStamp())}`),output_manager_default.log(`
773
773
  Create one with: ${getCommandName('flags segments create beta-users --label "Beta users" --add include:user.id=user_123')}`)):(output_manager_default.log(`${(0,import_pluralize14.default)("feature flag segment",segments2.length,!0)} found for ${projectSlugLink} ${import_chalk185.default.gray(lsStamp())}`),printSegmentsTable(sortedSegments))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function outputJson6(client,segments2){let jsonOutput={segments:segments2.map(segment=>({id:segment.id,slug:segment.slug,label:segment.label,description:segment.description??null,data:segment.data,hint:segment.hint,usedByFlags:segment.usedByFlags??[],usedBySegments:segment.usedBySegments??[],createdAt:segment.createdAt,updatedAt:segment.updatedAt}))};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
774
774
  `)}function printSegmentsTable(segments2){let headers=["Slug","Label","Rules","Values","Used By","Updated"],now=Date.now(),rows=segments2.map(segment=>[import_chalk185.default.bold(segment.slug),segment.label,String(segment.data.rules?.length??0),String(countSegmentValues(segment)),String((segment.usedByFlags?.length??0)+(segment.usedBySegments?.length??0)),(0,import_ms21.default)(now-segment.updatedAt)+" ago"]),table3=formatTable(headers,["l","l","r","r","r","l"],[{name:"",rows}]);output_manager_default.print(`
775
775
  ${table3}
@@ -958,8 +958,8 @@ ${table(lines,{hsep:2}).replace(/^/gm," ")}
958
958
  `),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_chalk231=__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),1}let formatResult=validateJsonOutput(parsed.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;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"}]},1),output_manager_default.error(msg),1}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},1),output_manager_default.error(msg),1}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"}]},1),output_manager_default.error(msg),1}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)}
959
959
  `),0):(output_manager_default.log(`Integration ${import_chalk231.default.bold(integration.slug)} is already installed for this team.`),0);let acceptedPolicies;if(shouldEmitNonInteractiveCommandError(client)){let msg="Marketplace terms cannot be accepted in non-interactive mode. Run this command in an interactive terminal as a human.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INTEGRATION_TERMS_ACCEPTANCE_REQUIRED,message:msg,policy_links:getMarketplacePolicyLinks(integration),hint:`Open the policy links, then run \`${packageName} integration accept-terms ${integration.slug}\` interactively.`},1),output_manager_default.error(msg),1}if(acceptedPolicies=await promptForTermAcceptance(client,integration),!acceptedPolicies)return 1;try{let result=await installMarketplaceIntegration(client,integration.id,acceptedPolicies);return preferJson?(client.stdout.write(`${JSON.stringify({integration:integration.slug,installationId:result.id,installed:!0,policy_links:policyLinks},null,2)}
960
960
  `),0):(output_manager_default.success(`Terms accepted. Integration ${import_chalk231.default.bold(integration.slug)} is installed for this team.`),logPolicyLinksSummary(policyLinks),0)}catch(error){if(isAPIError(error)&&error.status===409)return preferJson?(client.stdout.write(`${JSON.stringify({integration:integration.slug,alreadyInstalled:!0,policy_links:policyLinks},null,2)}
961
- `),0):(output_manager_default.log(`Integration ${import_chalk231.default.bold(integration.slug)} is already installed for this team.`),0);let msg=isAPIError(error)&&error.serverMessage||error.message;return output_manager_default.error(`Failed to accept terms for "${integration.slug}": ${msg}`),1}}var COMMAND_CONFIG49={add:getCommandAliases(addSubcommand6),"accept-terms":getCommandAliases(acceptTermsSubcommand),open:getCommandAliases(openSubcommand5),list:getCommandAliases(listSubcommand16),installations:getCommandAliases(installationsSubcommand),categories:getCommandAliases(categoriesSubcommand),discover:getCommandAliases(discoverSubcommand),guide:getCommandAliases(guideSubcommand),balance:getCommandAliases(balanceSubcommand),remove:getCommandAliases(removeSubcommand11),resource:getCommandAliases(resourceSubcommand),update:getCommandAliases(updateSubcommand6)};async function main25(client){let telemetry2=new IntegrationTelemetryClient({opts:{store:client.telemetryEventStore}}),{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(integrationCommand.options),{permissive:!0}),{subcommand,subcommandOriginal,args:subArgs}=getSubcommand7(args.slice(1),COMMAND_CONFIG49),needHelp=flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:integrationCommand}))}function printHelpToStdout(command2){client.stdout.write(help(command2,{columns:client.stderr.columns,parent:integrationCommand}))}if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("integration"),output_manager_default.print(help(integrationCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"add":{if(needHelp)return telemetry2.trackCliFlagHelp("integration",subcommandOriginal),await printAddDynamicHelp(client,subArgs[0],addSubcommand6,printHelpToStdout,"integration add")||printHelpToStdout(addSubcommand6),0;telemetry2.trackCliSubcommandAdd(subcommandOriginal);let addFlagsSpec=getFlagsSpecification(addSubcommand6.options),addParsedArgs;try{addParsedArgs=parseArguments(subArgs,addFlagsSpec)}catch(error){return printError(error),1}return add9(client,addParsedArgs.args,addParsedArgs.flags,"integration add")}case"accept-terms":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(acceptTermsSubcommand),0):(telemetry2.trackCliSubcommandAcceptTerms(subcommandOriginal),acceptTerms(client,subArgs));case"list":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(listSubcommand16),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),list20(client));case"installations":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(installationsSubcommand),0):(telemetry2.trackCliSubcommandInstallations(subcommandOriginal),installationsList(client,subArgs));case"categories":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(categoriesSubcommand),0):(telemetry2.trackCliSubcommandCategories(subcommandOriginal),categories(client,subArgs));case"discover":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(discoverSubcommand),0):(telemetry2.trackCliSubcommandDiscover(subcommandOriginal),discover(client,subArgs));case"guide":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(guideSubcommand),0):(telemetry2.trackCliSubcommandGuide(subcommandOriginal),guide(client,subArgs));case"balance":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(balanceSubcommand),0):(telemetry2.trackCliSubcommandBalance(subcommandOriginal),balance(client));case"open":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(openSubcommand5),0):(telemetry2.trackCliSubcommandOpen(subcommandOriginal),openIntegration(client,subArgs));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(removeSubcommand11),0):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),remove11(client,subArgs));case"resource":return subArgs.length===0&&needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(resourceSubcommand),0):(telemetry2.trackCliSubcommandResource(subcommandOriginal),dispatchResourceSubcommand(client,subArgs,!!needHelp,{helpBreadcrumb:"integration resource",parentForChildHelp:resourceSubcommand}));case"update":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(updateSubcommand6),0):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update4(client,subArgs));default:{let validSubcommands=Object.keys(COMMAND_CONFIG49).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,hint:missingSubcommand?`Pass a subcommand after \`integration\`, for example \`${packageName} integration installations\` or \`${packageName} integration list\`. Global flags such as \`--cwd\` may appear anywhere.`:`Check the spelling or run \`${packageName} integration --help\` for the list of subcommands.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration --help",packageName,{prependGlobalFlags:!0}),when:"Show all integration subcommands and options"},...missingSubcommand?[{command:buildCommandWithGlobalFlags(client.argv,"integration installations",packageName,{prependGlobalFlags:!0}),when:"List marketplace installations for the current team"}]:[]]},2),output_manager_default.error(message),2}}}var KmsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandAddKey(actual){this.trackCliSubcommand({subcommand:"add-key",value:actual})}trackCliSubcommandImportKey(actual){this.trackCliSubcommand({subcommand:"import-key",value:actual})}trackCliSubcommandActivateKey(actual){this.trackCliSubcommand({subcommand:"activate-key",value:actual})}trackCliSubcommandRevokeKey(actual){this.trackCliSubcommand({subcommand:"revoke-key",value:actual})}trackCliSubcommandAddGrant(actual){this.trackCliSubcommand({subcommand:"add-grant",value:actual})}trackCliSubcommandUpdateGrant(actual){this.trackCliSubcommand({subcommand:"update-grant",value:actual})}trackCliSubcommandRemoveGrant(actual){this.trackCliSubcommand({subcommand:"remove-grant",value:actual})}};var import_chalk234=__toESM(require_source(),1),import_pluralize19=__toESM(require_pluralize(),1);var ISSUERS_PATH="/v1/kms/issuers";function issuerPath(issuerId){return`${ISSUERS_PATH}/${encodeURIComponent(issuerId)}`}async function getIssuers(client,{limit,next}={}){let query=new URLSearchParams;limit!==void 0&&query.set("limit",String(limit)),next!==void 0&&query.set("next",next);let search3=query.toString();return client.fetch(search3?`${ISSUERS_PATH}?${search3}`:ISSUERS_PATH)}async function getIssuer(client,issuerId){return client.fetch(issuerPath(issuerId))}async function createIssuer(client,payload){return client.fetch(ISSUERS_PATH,{method:"POST",body:payload})}async function updateIssuer(client,issuerId,payload){return client.fetch(issuerPath(issuerId),{method:"PATCH",body:payload})}async function deleteIssuer(client,issuerId){await client.fetch(issuerPath(issuerId),{method:"DELETE"})}var import_chalk232=__toESM(require_source(),1),import_ms24=__toESM(require_ms(),1);function relativeAge(isoDate){let elapsed2=Date.now()-new Date(isoDate).getTime();return elapsed2>0?`${(0,import_ms24.default)(elapsed2)} ago`:(0,import_ms24.default)(-elapsed2)}function activeSigningKey(issuer){return issuer.signingKeys.find(key=>key.status==="active")}function describeKeyStatus(key){return key.status==="pending"?key.activateAt?`pending \xB7 activates in ${(0,import_ms24.default)(Math.max(0,new Date(key.activateAt).getTime()-Date.now()))}`:"pending \xB7 activate manually":key.status==="revoking"?key.revokeAt?`revoking \xB7 revoked in ${(0,import_ms24.default)(Math.max(0,new Date(key.revokeAt).getTime()-Date.now()))}`:"revoking":"active"}function formatIssuersTable(issuers){let rows=issuers.map(issuer=>{let active=activeSigningKey(issuer);return[issuer.id,issuer.name,issuer.algorithm,active?active.keyId:import_chalk232.default.gray("none"),import_chalk232.default.gray(relativeAge(issuer.createdAt))]});return formatTable(["ID","Name","Algorithm","Active Key","Age"],["l","l","l","l","l"],[{rows}])}function formatSigningKeysTable(keys){let rows=keys.map(key=>[key.keyId,key.algorithm,describeKeyStatus(key),key.importKeyId??import_chalk232.default.gray("-"),import_chalk232.default.gray(relativeAge(key.createdAt))]);return formatTable(["Key ID","Algorithm","Status","JWKS kid","Age"],["l","l","l","l","l"],[{rows}])}function formatGrantsTable(policies){let rows=policies.map(policy=>isProjectGrant(policy)?[policy.kind,policy.projectId,policy.environments.join(", "),policy.tokenClaims?"yes":import_chalk232.default.gray("no")]:[policy.kind,policy.clientId,import_chalk232.default.gray("-"),policy.tokenClaims?"yes":import_chalk232.default.gray("no")]);return formatTable(["Kind","Target","Environments","Token Claims"],["l","l","l","l"],[{rows}])}function indentTable(table3){return table3.replace(/^(.*)/gm," $1")}function printIssuerRows(issuer,gutterLabel){gutterLabel?(printAlignedLabel(gutterLabel.label,issuer.name,{gutter:gutterLabel.gutter}),printAlignedLabel("Issuer",issuer.id)):(printAlignedLabel("Issuer",issuer.id),printAlignedLabel("Name",issuer.name)),printAlignedLabel("Algorithm",issuer.algorithm),printAlignedLabel("Origin",issuer.origin),issuer.managedBy&&printAlignedLabel("Managed By",issuer.managedBy)}function printSigningKeyRows(key,gutterLabel){printAlignedLabel(gutterLabel.label,key.keyId,{gutter:gutterLabel.gutter}),printAlignedLabel("Algorithm",key.algorithm),printAlignedLabel("Status",describeKeyStatus(key)),key.importKeyId&&printAlignedLabel("JWKS kid",key.importKeyId)}var import_chalk233=__toESM(require_source(),1);var MANAGED_ISSUER_CODE="issuer_managed_by_mismatch";function handleKmsApiError(client,err,{notFound,attempted,contextName,next}){if(!isAPIError(err))return;if(err.status===404&&notFound)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.ISSUER_NOT_FOUND,message:notFound,next},1),output_manager_default.error(notFound),1;if(err.status===403&&err.code===MANAGED_ISSUER_CODE){let message2=`${attempted} isn't available for this issuer. It was provisioned by another Vercel service, which manages its keys and grants.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.ISSUER_MANAGED,message:message2},1),output_manager_default.error(message2),1}if(err.status===403){let message2=`${attempted} requires the Owner role on ${contextName}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PERMISSION_DENIED,message:message2,...err.action&&{action:err.action},...typeof err.resource=="string"&&{resource:err.resource}},1),output_manager_default.error(message2),output_manager_default.log(`Ask an Owner of ${import_chalk233.default.bold(contextName)} to run it, or switch teams with ${import_chalk233.default.cyan("--scope")}.`),1}let message=err.serverMessage||err.message;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message},1),output_manager_default.error(message),1}var KmsLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}};async function ls9(client,argv){let telemetry2=new KmsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand17.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"kms ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]),telemetry2.trackCliOptionLimit(opts["--limit"]),telemetry2.trackCliOptionNext(opts["--next"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching KMS issuers under ${import_chalk234.default.bold(contextName)}`);let response;try{response=await getIssuers(client,{limit:opts["--limit"],next:opts["--next"]})}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{attempted:"Listing KMS issuers",contextName});if(handled!==void 0)return handled;throw err}let{issuers,pagination}=response;if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,issuers,pagination,message:`${(0,import_pluralize19.default)("issuer",issuers.length,!0)} found.`,next:[{command:getCommandNamePlain("kms inspect <issuerId>"),when:"Show an issuer with its keys and grants"}]}:{issuers,pagination};return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
962
- `),0}if(issuers.length===0)return output_manager_default.log(`No issuers found under ${import_chalk234.default.bold(contextName)}. Run ${getCommandName("kms add <name>")} to create one.`),0;if(output_manager_default.log(`${(0,import_pluralize19.default)("issuer",issuers.length,!0)} found under ${import_chalk234.default.bold(contextName)} ${import_chalk234.default.gray(lsStamp())}`),output_manager_default.print(indentTable(formatIssuersTable(issuers))),output_manager_default.print(`
961
+ `),0):(output_manager_default.log(`Integration ${import_chalk231.default.bold(integration.slug)} is already installed for this team.`),0);let msg=isAPIError(error)&&error.serverMessage||error.message;return output_manager_default.error(`Failed to accept terms for "${integration.slug}": ${msg}`),1}}var COMMAND_CONFIG49={add:getCommandAliases(addSubcommand6),"accept-terms":getCommandAliases(acceptTermsSubcommand),open:getCommandAliases(openSubcommand5),list:getCommandAliases(listSubcommand16),installations:getCommandAliases(installationsSubcommand),categories:getCommandAliases(categoriesSubcommand),discover:getCommandAliases(discoverSubcommand),guide:getCommandAliases(guideSubcommand),balance:getCommandAliases(balanceSubcommand),remove:getCommandAliases(removeSubcommand11),resource:getCommandAliases(resourceSubcommand),update:getCommandAliases(updateSubcommand6)};async function main25(client){let telemetry2=new IntegrationTelemetryClient({opts:{store:client.telemetryEventStore}}),{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(integrationCommand.options),{permissive:!0}),{subcommand,subcommandOriginal,args:subArgs}=getSubcommand7(args.slice(1),COMMAND_CONFIG49),needHelp=flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:integrationCommand}))}function printHelpToStdout(command2){client.stdout.write(help(command2,{columns:client.stderr.columns,parent:integrationCommand}))}if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("integration"),output_manager_default.print(help(integrationCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"add":{if(needHelp)return telemetry2.trackCliFlagHelp("integration",subcommandOriginal),await printAddDynamicHelp(client,subArgs[0],addSubcommand6,printHelpToStdout,"integration add")||printHelpToStdout(addSubcommand6),0;telemetry2.trackCliSubcommandAdd(subcommandOriginal);let addFlagsSpec=getFlagsSpecification(addSubcommand6.options),addParsedArgs;try{addParsedArgs=parseArguments(subArgs,addFlagsSpec)}catch(error){return printError(error),1}return add9(client,addParsedArgs.args,addParsedArgs.flags,"integration add")}case"accept-terms":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(acceptTermsSubcommand),0):(telemetry2.trackCliSubcommandAcceptTerms(subcommandOriginal),acceptTerms(client,subArgs));case"list":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(listSubcommand16),0):(telemetry2.trackCliSubcommandList(subcommandOriginal),list20(client));case"installations":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(installationsSubcommand),0):(telemetry2.trackCliSubcommandInstallations(subcommandOriginal),installationsList(client,subArgs));case"categories":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(categoriesSubcommand),0):(telemetry2.trackCliSubcommandCategories(subcommandOriginal),categories(client,subArgs));case"discover":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(discoverSubcommand),0):(telemetry2.trackCliSubcommandDiscover(subcommandOriginal),discover(client,subArgs));case"guide":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(guideSubcommand),0):(telemetry2.trackCliSubcommandGuide(subcommandOriginal),guide(client,subArgs));case"balance":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(balanceSubcommand),0):(telemetry2.trackCliSubcommandBalance(subcommandOriginal),balance(client));case"open":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(openSubcommand5),0):(telemetry2.trackCliSubcommandOpen(subcommandOriginal),openIntegration(client,subArgs));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(removeSubcommand11),0):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),remove11(client,subArgs));case"resource":return subArgs.length===0&&needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(resourceSubcommand),0):(telemetry2.trackCliSubcommandResource(subcommandOriginal),dispatchResourceSubcommand(client,subArgs,!!needHelp,{helpBreadcrumb:"integration resource",parentForChildHelp:resourceSubcommand}));case"update":return needHelp?(telemetry2.trackCliFlagHelp("integration",subcommandOriginal),printHelp(updateSubcommand6),0):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),update4(client,subArgs));default:{let validSubcommands=Object.keys(COMMAND_CONFIG49).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,hint:missingSubcommand?`Pass a subcommand after \`integration\`, for example \`${packageName} integration installations\` or \`${packageName} integration list\`. Global flags such as \`--cwd\` may appear anywhere.`:`Check the spelling or run \`${packageName} integration --help\` for the list of subcommands.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration --help",packageName,{prependGlobalFlags:!0}),when:"Show all integration subcommands and options"},...missingSubcommand?[{command:buildCommandWithGlobalFlags(client.argv,"integration installations",packageName,{prependGlobalFlags:!0}),when:"List marketplace installations for the current team"}]:[]]},2),output_manager_default.error(message),2}}}var KmsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandAddKey(actual){this.trackCliSubcommand({subcommand:"add-key",value:actual})}trackCliSubcommandImportKey(actual){this.trackCliSubcommand({subcommand:"import-key",value:actual})}trackCliSubcommandActivateKey(actual){this.trackCliSubcommand({subcommand:"activate-key",value:actual})}trackCliSubcommandRevokeKey(actual){this.trackCliSubcommand({subcommand:"revoke-key",value:actual})}trackCliSubcommandAddGrant(actual){this.trackCliSubcommand({subcommand:"add-grant",value:actual})}trackCliSubcommandUpdateGrant(actual){this.trackCliSubcommand({subcommand:"update-grant",value:actual})}trackCliSubcommandRemoveGrant(actual){this.trackCliSubcommand({subcommand:"remove-grant",value:actual})}};var import_chalk234=__toESM(require_source(),1),import_pluralize19=__toESM(require_pluralize(),1);var ISSUERS_PATH="/v1/kms/issuers";function issuerPath(issuerId){return`${ISSUERS_PATH}/${encodeURIComponent(issuerId)}`}async function getIssuers(client,{limit,next}={}){let query=new URLSearchParams;limit!==void 0&&query.set("limit",String(limit)),next!==void 0&&query.set("next",next);let search3=query.toString();return client.fetch(search3?`${ISSUERS_PATH}?${search3}`:ISSUERS_PATH)}async function getIssuer(client,issuerId){return client.fetch(issuerPath(issuerId))}async function createIssuer(client,payload){return client.fetch(ISSUERS_PATH,{method:"POST",body:payload})}async function updateIssuer(client,issuerId,payload){return client.fetch(issuerPath(issuerId),{method:"PATCH",body:payload})}async function deleteIssuer(client,issuerId){await client.fetch(issuerPath(issuerId),{method:"DELETE"})}var import_chalk232=__toESM(require_source(),1),import_ms24=__toESM(require_ms(),1);function relativeAge(isoDate){let elapsed2=Date.now()-new Date(isoDate).getTime();return elapsed2>0?`${(0,import_ms24.default)(elapsed2)} ago`:(0,import_ms24.default)(-elapsed2)}function activeSigningKey(issuer){return issuer.signingKeys.find(key=>key.status==="active")}function describeKeyStatus(key){return key.status==="pending"?key.activateAt?`pending \xB7 activates in ${(0,import_ms24.default)(Math.max(0,new Date(key.activateAt).getTime()-Date.now()))}`:"pending \xB7 activate manually":key.status==="revoking"?key.revokeAt?`revoking \xB7 revoked in ${(0,import_ms24.default)(Math.max(0,new Date(key.revokeAt).getTime()-Date.now()))}`:"revoking":"active"}function formatIssuersTable(issuers){let rows=issuers.map(issuer=>{let active=activeSigningKey(issuer);return[issuer.id,issuer.name,issuer.algorithm,active?active.keyId:import_chalk232.default.gray("none"),import_chalk232.default.gray(relativeAge(issuer.createdAt))]});return formatTable(["ID","Name","Algorithm","Active Key","Age"],["l","l","l","l","l"],[{rows}])}function formatSigningKeysTable(keys){let rows=keys.map(key=>[key.keyId,key.algorithm,describeKeyStatus(key),key.importKeyId??import_chalk232.default.gray("-"),import_chalk232.default.gray(relativeAge(key.createdAt))]);return formatTable(["Key ID","Algorithm","Status","JWKS kid","Age"],["l","l","l","l","l"],[{rows}])}function formatGrantsTable(policies){let rows=policies.map(policy=>isProjectGrant(policy)?[policy.kind,policy.projectId,policy.environments.join(", "),policy.tokenClaims?"yes":import_chalk232.default.gray("no")]:[policy.kind,policy.clientId,import_chalk232.default.gray("-"),policy.tokenClaims?"yes":import_chalk232.default.gray("no")]);return formatTable(["Kind","Target","Environments","Token Claims"],["l","l","l","l"],[{rows}])}function indentTable(table3){return table3.replace(/^(.*)/gm," $1")}function printIssuerRows(issuer,gutterLabel){gutterLabel?(printAlignedLabel(gutterLabel.label,issuer.name,{gutter:gutterLabel.gutter}),printAlignedLabel("Issuer",issuer.id)):(printAlignedLabel("Issuer",issuer.id),printAlignedLabel("Name",issuer.name)),printAlignedLabel("Algorithm",issuer.algorithm),printAlignedLabel("Origin",issuer.origin),issuer.managedBy&&printAlignedLabel("Managed By",issuer.managedBy)}function printSigningKeyRows(key,gutterLabel){printAlignedLabel(gutterLabel.label,key.keyId,{gutter:gutterLabel.gutter}),printAlignedLabel("Algorithm",key.algorithm),printAlignedLabel("Status",describeKeyStatus(key)),key.importKeyId&&printAlignedLabel("JWKS kid",key.importKeyId)}var import_chalk233=__toESM(require_source(),1);var MANAGED_ISSUER_CODE="issuer_managed_by_mismatch";function handleKmsApiError(client,err,{notFound,attempted,contextName,next}){if(!isAPIError(err))return;if(err.status===404&&notFound)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.ISSUER_NOT_FOUND,message:notFound,next},1),output_manager_default.error(notFound),1;if(err.status===403&&err.code===MANAGED_ISSUER_CODE){let message2=`${attempted} isn't available for this issuer. It was provisioned by another Vercel service, which manages its keys and grants.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.ISSUER_MANAGED,message:message2},1),output_manager_default.error(message2),1}if(err.status===403){let message2=`${attempted} requires the Owner role on ${contextName}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PERMISSION_DENIED,message:message2,...err.action&&{action:err.action},...typeof err.resource=="string"&&{resource:err.resource}},1),output_manager_default.error(message2),output_manager_default.log(`Ask an Owner of ${import_chalk233.default.bold(contextName)} to run it, or switch teams with ${import_chalk233.default.cyan("--scope")}.`),1}let message=err.serverMessage||err.message;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message},1),output_manager_default.error(message),1}var KmsLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}};async function ls9(client,argv){let telemetry2=new KmsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand17.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"kms ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]),telemetry2.trackCliOptionLimit(opts["--limit"]),telemetry2.trackCliOptionNext(opts["--next"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching KMS issuers under ${import_chalk234.default.bold(contextName)}`);let response;try{response=await getIssuers(client,{limit:opts["--limit"],next:opts["--next"]})}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{attempted:"Listing KMS issuers",contextName});if(handled!==void 0)return handled;throw err}let{issuers,pagination}=response;if(output_manager_default.stopSpinner(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,issuers,pagination,message:`${(0,import_pluralize19.default)("issuer",issuers.length,!0)} found.`,next:[{command:getCommandNamePlain("kms inspect <issuerId>"),when:"Show an issuer with its keys and grants"}]}:{issuers,pagination};return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
962
+ `),0}if(issuers.length===0)return output_manager_default.log(`No issuers found under ${import_chalk234.default.bold(contextName)}. Run ${getCommandName("kms create <name>")} to create one.`),0;if(output_manager_default.log(`${(0,import_pluralize19.default)("issuer",issuers.length,!0)} found under ${import_chalk234.default.bold(contextName)} ${import_chalk234.default.gray(lsStamp())}`),output_manager_default.print(indentTable(formatIssuersTable(issuers))),output_manager_default.print(`
963
963
 
964
964
  `),pagination.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.log(`To display the next page, run ${getCommandName(`kms ls${flags} --next ${pagination.next}`)}`)}return 0}var import_chalk236=__toESM(require_source(),1);var import_chalk235=__toESM(require_source(),1);function kmsSuggestion(subcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${subcommand} ${globalFlags.join(" ")}`:subcommand;return getCommandNamePlain(full)}function missingArgument(client,options){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:options.reason,message:options.message,next:[{command:kmsSuggestion("kms ls",client.argv),when:"List issuers to find an ID"},{command:kmsSuggestion(options.usage,client.argv)}]},1),output_manager_default.error(options.message),output_manager_default.log(`Usage: ${import_chalk235.default.cyan(getCommandName(options.usage))}`),1}function invalidArgumentCount(client,usage2){let message=`Too many arguments. Usage: ${getCommandNamePlain(usage2)}`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},1),output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk235.default.cyan(getCommandName(usage2))}`),1}function invalidInput(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},1),output_manager_default.error(message),1}var KmsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentIssuerId(issuerId){issuerId&&this.trackCliArgument({arg:"issuerId",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE="kms inspect <issuerId>";async function inspect16(client,argv){let telemetry2=new KmsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand11.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[issuerId]=args;if(telemetry2.trackCliArgumentIssuerId(issuerId),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]),!issuerId)return missingArgument(client,{reason:AGENT_REASON.MISSING_ISSUER_ID,message:"An issuer ID is required.",usage:USAGE});if(args.length>1)return invalidArgumentCount(client,USAGE);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client);client.nonInteractive||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:"Reading this issuer",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(),asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,issuer,message:`Issuer ${issuer.id} found.`,next:[{command:getCommandNamePlain(`kms add-key ${issuer.id}`),when:"Rotate to a new signing key"}]}:issuer;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
965
965
  `),0}return printIssuerRows(issuer),printAlignedLabel("Issuer URL",import_chalk236.default.cyan(issuerUrl(issuer.id))),printAlignedLabel("JWKS",import_chalk236.default.cyan(issuerJwksUrl(issuer.id))),printAlignedLabel("Created",formatDate(issuer.createdAt)),printAlignedLabel("Claims Schema",issuer.claimsSchema?"set":import_chalk236.default.gray("none")),output_manager_default.print(`
@@ -971,7 +971,7 @@ ${table(lines,{hsep:2}).replace(/^/gm," ")}
971
971
  `),issuer.policies.length===0?output_manager_default.print(` ${import_chalk236.default.gray("No grants visible. Only team owners can see grants.")}
972
972
  `):(output_manager_default.print(indentTable(formatGrantsTable(issuer.policies))),output_manager_default.print(`
973
973
  `)),output_manager_default.print(`
974
- `),0}var import_chalk237=__toESM(require_source(),1);import{readFile as readFile8}from"node:fs/promises";import{resolve as resolve11}from"node:path";import{text as text2}from"node:stream/consumers";async function readStdinToEnd2(stdin){return stdin.isTTY?"":text2(stdin)}async function resolveFlagSource(client,flagName2,raw){if(!raw.startsWith("@"))return raw;let source=raw.slice(1);if(source==="-")return readStdinToEnd2(client.stdin);if(source.length===0)throw new Error(`Invalid ${flagName2} value. Use \`@<path>\` to read from a file or \`@-\` to read from stdin.`);try{return await readFile8(resolve11(client.cwd,source),"utf8")}catch(err){throw new Error(`Couldn't read ${flagName2} file at "${source}": ${err.message}`)}}async function parseJsonObjectFlag(client,flagName2,raw){let source=await resolveFlagSource(client,flagName2,raw);if(source.trim().length===0)throw new Error(`${flagName2} requires a non-empty JSON object.`);let parsed;try{parsed=JSON.parse(source)}catch{throw new Error(`Invalid JSON for ${flagName2}. Expected a JSON object.`)}if(parsed===null||typeof parsed!="object"||Array.isArray(parsed))throw new Error(`${flagName2} must be a JSON object.`);return parsed}async function readPrivateKey(client,raw){let pem=raw==="-"?await readStdinToEnd2(client.stdin):await readPem(client,raw);if(pem.trim().length===0)throw new Error("--key is empty. Pass a path to a PEM private key file, or `-` to read it from stdin.");if(!pem.includes("-----BEGIN"))throw new Error("--key must be a PEM-encoded private key. Pass a path to a `.pem` file, or `-` to read it from stdin.");return pem}async function readPem(client,path3){try{return await readFile8(resolve11(client.cwd,path3),"utf8")}catch(err){throw new Error(`Couldn't read --key file at "${path3}": ${err.message}`)}}var KmsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionAlgorithm(algorithm){algorithm&&this.trackCliOption({option:"algorithm",value:algorithm})}trackCliOptionClaimsSchema(claimsSchema){claimsSchema&&this.trackCliOption({option:"claims-schema",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE2="kms add <name>";async function add10(client,argv){let telemetry2=new KmsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand7.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[name]=args;if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionAlgorithm(opts["--algorithm"]),telemetry2.trackCliOptionClaimsSchema(opts["--claims-schema"]),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]),!name)return missingArgument(client,{reason:AGENT_REASON.MISSING_NAME,message:"An issuer name is required.",usage:USAGE2});if(args.length>1)return invalidArgumentCount(client,USAGE2);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive,algorithm=opts["--algorithm"];if(algorithm&&!KMS_ALGORITHMS.includes(algorithm))return invalidInput(client,`Invalid algorithm "${algorithm}". Supported algorithms: ${KMS_ALGORITHMS.join(", ")}.`);let claimsSchema;if(opts["--claims-schema"])try{claimsSchema=await parseJsonObjectFlag(client,"--claims-schema",opts["--claims-schema"])}catch(err){return invalidInput(client,err.message)}let payload={name,...algorithm&&{algorithm},...claimsSchema&&{claimsSchema}},contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Creating issuer under ${import_chalk237.default.bold(contextName)}`);let issuer;try{issuer=await createIssuer(client,payload)}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{attempted:"Creating an issuer",contextName});if(handled!==void 0)return handled;throw err}output_manager_default.stopSpinner();let grantCommand=`kms add-grant ${issuer.id} --project <projectId> --environment production`;if(asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,issuer,message:`Issuer ${issuer.id} created.`,next:[{command:getCommandNamePlain(grantCommand),when:"Let a project sign with this issuer"}]}:issuer;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
974
+ `),0}var import_chalk237=__toESM(require_source(),1);import{readFile as readFile8}from"node:fs/promises";import{resolve as resolve11}from"node:path";import{text as text2}from"node:stream/consumers";async function readStdinToEnd2(stdin){return stdin.isTTY?"":text2(stdin)}async function resolveFlagSource(client,flagName2,raw){if(!raw.startsWith("@"))return raw;let source=raw.slice(1);if(source==="-")return readStdinToEnd2(client.stdin);if(source.length===0)throw new Error(`Invalid ${flagName2} value. Use \`@<path>\` to read from a file or \`@-\` to read from stdin.`);try{return await readFile8(resolve11(client.cwd,source),"utf8")}catch(err){throw new Error(`Couldn't read ${flagName2} file at "${source}": ${err.message}`)}}async function parseJsonObjectFlag(client,flagName2,raw){let source=await resolveFlagSource(client,flagName2,raw);if(source.trim().length===0)throw new Error(`${flagName2} requires a non-empty JSON object.`);let parsed;try{parsed=JSON.parse(source)}catch{throw new Error(`Invalid JSON for ${flagName2}. Expected a JSON object.`)}if(parsed===null||typeof parsed!="object"||Array.isArray(parsed))throw new Error(`${flagName2} must be a JSON object.`);return parsed}async function readPrivateKey(client,raw){let pem=raw==="-"?await readStdinToEnd2(client.stdin):await readPem(client,raw);if(pem.trim().length===0)throw new Error("--key is empty. Pass a path to a PEM private key file, or `-` to read it from stdin.");if(!pem.includes("-----BEGIN"))throw new Error("--key must be a PEM-encoded private key. Pass a path to a `.pem` file, or `-` to read it from stdin.");return pem}async function readPem(client,path3){try{return await readFile8(resolve11(client.cwd,path3),"utf8")}catch(err){throw new Error(`Couldn't read --key file at "${path3}": ${err.message}`)}}var KmsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionAlgorithm(algorithm){algorithm&&this.trackCliOption({option:"algorithm",value:algorithm})}trackCliOptionClaimsSchema(claimsSchema){claimsSchema&&this.trackCliOption({option:"claims-schema",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE2="kms create <name>";async function add10(client,argv){let telemetry2=new KmsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand7.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[name]=args;if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionAlgorithm(opts["--algorithm"]),telemetry2.trackCliOptionClaimsSchema(opts["--claims-schema"]),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]),!name)return missingArgument(client,{reason:AGENT_REASON.MISSING_NAME,message:"An issuer name is required.",usage:USAGE2});if(args.length>1)return invalidArgumentCount(client,USAGE2);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive,algorithm=opts["--algorithm"];if(algorithm&&!KMS_ALGORITHMS.includes(algorithm))return invalidInput(client,`Invalid algorithm "${algorithm}". Supported algorithms: ${KMS_ALGORITHMS.join(", ")}.`);let claimsSchema;if(opts["--claims-schema"])try{claimsSchema=await parseJsonObjectFlag(client,"--claims-schema",opts["--claims-schema"])}catch(err){return invalidInput(client,err.message)}let payload={name,...algorithm&&{algorithm},...claimsSchema&&{claimsSchema}},contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Creating issuer under ${import_chalk237.default.bold(contextName)}`);let issuer;try{issuer=await createIssuer(client,payload)}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{attempted:"Creating an issuer",contextName});if(handled!==void 0)return handled;throw err}output_manager_default.stopSpinner();let grantCommand=`kms add-grant ${issuer.id} --project <projectId> --environment production`;if(asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,issuer,message:`Issuer ${issuer.id} created.`,next:[{command:getCommandNamePlain(grantCommand),when:"Let a project sign with this issuer"}]}:issuer;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
975
975
  `),0}printIssuerRows(issuer,{label:"Created",gutter:"\u2713"}),printAlignedLabel("Issuer URL",import_chalk237.default.cyan(issuerUrl(issuer.id))),printAlignedLabel("JWKS",import_chalk237.default.cyan(issuerJwksUrl(issuer.id)));let active=activeSigningKey(issuer);return active&&printAlignedLabel("Signing Key",active.keyId),output_manager_default.print(`
976
976
  `),output_manager_default.log(`Let a project sign with this issuer: ${getCommandName(grantCommand)}`),0}var import_chalk238=__toESM(require_source(),1);var KmsImportTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionKey(key){key&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionKeyId(keyId){keyId&&this.trackCliOption({option:"key-id",value:this.redactedValue})}trackCliOptionAlgorithm(algorithm){algorithm&&this.trackCliOption({option:"algorithm",value:algorithm})}trackCliOptionClaimsSchema(claimsSchema){claimsSchema&&this.trackCliOption({option:"claims-schema",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var USAGE3="kms import <name> --key <file>";async function importIssuer(client,argv){let telemetry2=new KmsImportTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(importSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[name]=args;if(telemetry2.trackCliArgumentName(name),telemetry2.trackCliOptionKey(opts["--key"]),telemetry2.trackCliOptionKeyId(opts["--key-id"]),telemetry2.trackCliOptionAlgorithm(opts["--algorithm"]),telemetry2.trackCliOptionClaimsSchema(opts["--claims-schema"]),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagJson(opts["--json"]),!name)return missingArgument(client,{reason:AGENT_REASON.MISSING_NAME,message:"An issuer name is required.",usage:USAGE3});if(args.length>1)return invalidArgumentCount(client,USAGE3);let keyFlag=opts["--key"];if(!keyFlag)return missingArgument(client,{reason:AGENT_REASON.MISSING_KEY,message:"A private key is required. Pass --key with a path to a PEM file, or `-` to read it from stdin.",usage:USAGE3});let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive,algorithm=opts["--algorithm"];if(algorithm&&!KMS_ALGORITHMS.includes(algorithm))return invalidInput(client,`Invalid algorithm "${algorithm}". Supported algorithms: ${KMS_ALGORITHMS.join(", ")}.`);let claimsSchema;if(opts["--claims-schema"])try{claimsSchema=await parseJsonObjectFlag(client,"--claims-schema",opts["--claims-schema"])}catch(err){return invalidInput(client,err.message)}let importKey2;try{importKey2=await readPrivateKey(client,keyFlag)}catch(err){return invalidInput(client,err.message)}let keyId=opts["--key-id"],payload={name,importKey:importKey2,...keyId&&{importKeyId:keyId},...algorithm&&{algorithm},...claimsSchema&&{claimsSchema}},contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Importing issuer under ${import_chalk238.default.bold(contextName)}`);let issuer;try{issuer=await createIssuer(client,payload)}catch(err){output_manager_default.stopSpinner();let handled=handleKmsApiError(client,err,{attempted:"Importing an issuer",contextName});if(handled!==void 0)return handled;throw err}output_manager_default.stopSpinner();let grantCommand=`kms add-grant ${issuer.id} --project <projectId> --environment production`;if(asJson){let jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,issuer,message:`Issuer ${issuer.id} imported.`,next:[{command:getCommandNamePlain(grantCommand),when:"Let a project sign with this issuer"}]}:issuer;return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
977
977
  `),0}printIssuerRows(issuer,{label:"Imported",gutter:"\u2713"}),printAlignedLabel("Issuer URL",import_chalk238.default.cyan(issuerUrl(issuer.id))),printAlignedLabel("JWKS",import_chalk238.default.cyan(issuerJwksUrl(issuer.id)));let active=activeSigningKey(issuer);return active&&(printAlignedLabel("Signing Key",active.keyId),active.importKeyId&&printAlignedLabel("JWKS kid",active.importKeyId)),output_manager_default.print(`
@@ -993,7 +993,7 @@ ${table(lines,{hsep:2}).replace(/^/gm," ")}
993
993
  `),0}return printAlignedLabel("Updated",grant.projectId,{gutter:"\u2713"}),printAlignedLabel("Issuer",issuerId),printAlignedLabel("Environments",grant.environments.join(", ")),printAlignedLabel("Token Claims",grant.tokenClaims?"set":import_chalk241.default.gray("none")),output_manager_default.print(`
994
994
  `),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),1}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(`
995
995
  `),!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)}
996
- `),0):(printAlignedLabel("Removed",projectId,{gutter:"\u2713"}),printAlignedLabel("Issuer",issuerId),printAlignedLabel("Team",contextName),0)}var COMMAND_CONFIG50={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),1}let telemetry2=new KmsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG50),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("kms"),output_manager_default.print(help(kmsCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:kmsCommand,columns:client.stderr.columns})),2}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.trackCliSubcommandAdd(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_CONFIG50)),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),1}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_chalk242=__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_chalk242.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_chalk242.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_chalk242.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_chalk242.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_chalk242.default.bold(deployment.id)} never reached READY and ended in ${deployment.readyState}.
996
+ `),0):(printAlignedLabel("Removed",projectId,{gutter:"\u2713"}),printAlignedLabel("Issuer",issuerId),printAlignedLabel("Team",contextName),0)}var COMMAND_CONFIG50={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),1}let telemetry2=new KmsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG50),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("kms"),output_manager_default.print(help(kmsCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:kmsCommand,columns:client.stderr.columns})),2}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_CONFIG50)),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),1}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_chalk242=__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_chalk242.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_chalk242.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_chalk242.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_chalk242.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_chalk242.default.bold(deployment.id)} never reached READY and ended in ${deployment.readyState}.
997
997
  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_chalk242.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_chalk242.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_chalk242.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_chalk242.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_chalk242.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_chalk242.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})),1}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_chalk242.default.bold(f.flag));if(usedIncompatible.length>0)return output_manager_default.error(`The ${import_chalk242.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.`})}
998
998
  `):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_chalk242.default.bold(followDeployment.deploymentId)} starting from ${import_chalk242.default.bold((0,import_format38.default)(Date.now(),TIME_ONLY_FORMAT))}
999
999
 
@@ -1085,11 +1085,11 @@ Starting setup...
1085
1085
  `),output_manager_default.print("\u2500".repeat(50)+`
1086
1086
  `),summary.forEach(line2=>output_manager_default.print(`${line2}
1087
1087
  `)),output_manager_default.print(`Complete any required setup and authentication in the selected MCP clients. Restart configured clients if needed.
1088
- `),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),1}if(parsedArgs.flags["--help"])return output_manager_default.print(help(mcpCommand,{columns:client.stderr.columns})),2;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")}]},1),1;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")}]},1),1}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_CONFIG51={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),1}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG51),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-W3ZXTSRT.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-CBEGOTEI.js")).default;return queryFn(client,telemetry2)}}}var import_chalk243=__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),1}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_chalk243.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_chalk243.default.bold(humanizePath(join35(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS)))} ${import_chalk243.default.gray(microfrontendsStamp())}`,emoji("success"))}
1088
+ `),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),1}if(parsedArgs.flags["--help"])return output_manager_default.print(help(mcpCommand,{columns:client.stderr.columns})),2;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")}]},1),1;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")}]},1),1}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_CONFIG51={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),1}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG51),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-EKWTCBNR.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-ABPO2REN.js")).default;return queryFn(client,telemetry2)}}}var import_chalk243=__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),1}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_chalk243.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_chalk243.default.bold(humanizePath(join35(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS)))} ${import_chalk243.default.gray(microfrontendsStamp())}`,emoji("success"))}
1089
1089
  `),0}catch(error){return output_manager_default.stopSpinner(),printError(error),1}}var import_chalk244=__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),1}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_chalk244.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."),1;if(!projectFlags||projectFlags.length===0)return output_manager_default.error("Missing required flag --project. Use --project in non-interactive mode."),1;if(projectFlags.length>1&&!defaultAppFlag)return output_manager_default.error("Missing required flag --default-app when using multiple --project values in non-interactive mode."),1}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.`),1;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.`),1;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_chalk244.default.bold("Billing")),output_manager_default.log(` ${import_chalk244.default.bold("Team:")} ${teamSlug}`),output_manager_default.log(` ${import_chalk244.default.bold("Adding:")} ${newProjectCount} microfrontends project${newProjectCount>1?"s":""}`);let projectFee;if(totalAfter<=freeProjects)projectFee=import_chalk244.default.green("Free")+` (first ${freeProjects} included)`;else if(existingMfeProjectCount>=freeProjects)projectFee=import_chalk244.default.yellow(`$250.00/month x ${newProjectCount}`)+` project${newProjectCount>1?"s":""}`;else{let freeRemaining=freeProjects-existingMfeProjectCount,paidProjects=newProjectCount-freeRemaining;projectFee=import_chalk244.default.green(`${freeRemaining} free`)+", "+import_chalk244.default.yellow(`$250.00/month x ${paidProjects}`)}if(output_manager_default.log(` ${import_chalk244.default.bold("Project fee:")} ${projectFee}`),output_manager_default.log(` ${import_chalk244.default.bold("Request fee:")} ${import_chalk244.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_chalk244.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_chalk244.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_chalk244.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_chalk244.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_chalk244.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+`
1090
1090
  `,"utf-8"),output_manager_default.success(`Created ${import_chalk244.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_chalk244.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_chalk245=__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),1}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_chalk245.default.bold(project.name)} to a microfrontends group on ${import_chalk245.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_chalk245.default.bold("Billing")),output_manager_default.log(` ${import_chalk245.default.bold("Team:")} ${teamSlug}`);let projectFee;if(totalAfter<=freeProjects?projectFee=import_chalk245.default.green("Free")+` (first ${freeProjects} included)`:existingMfeProjectCount>=freeProjects?projectFee=import_chalk245.default.yellow("$250.00/month"):projectFee=import_chalk245.default.yellow("$250.00/month")+` (${freeProjects} free projects used)`,output_manager_default.log(` ${import_chalk245.default.bold("Project fee:")} ${projectFee}`),output_manager_default.log(` ${import_chalk245.default.bold("Request fee:")} ${import_chalk245.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_chalk245.default.bold(teamSlug)}'s bill. Request fees still apply for microfrontends routed requests.`):output_manager_default.log(`By proceeding, ${import_chalk245.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_chalk245.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_chalk246=__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),1}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_chalk246.default.bold(project.name)} from microfrontends group ${import_chalk246.default.bold(projectGroup.group.name)} on ${import_chalk246.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_chalk246.default.gray(removeStamp())}`),isReferencedInConfig&&output_manager_default.log(`Remember to remove "${project.name}" from your microfrontends.json configuration.`),0}var import_chalk247=__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),1}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."),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 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_chalk247.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_chalk247.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_chalk247.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_chalk247.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_chalk247.default.gray(deleteStamp())}`),0}import{existsSync as existsSync4}from"fs";import{join as join37}from"path";var import_chalk248=__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),1}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error("error"in formatResult?formatResult.error:"Invalid output format"),1;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"}]},1),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."),1;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."),1;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)}
1091
1091
  `),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_chalk248.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_CONFIG52={"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),1}let{subcommand,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG52),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("microfrontends"),output_manager_default.print(help(microfrontendsCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:microfrontendsCommand,columns:client.stderr.columns})),2}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_CONFIG52)),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),1}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
1092
- `)),1;let{org,project}=link,projectUrl=`https://vercel.com/${org.slug}/${project.name}`;return output_manager_default.log(`Opening ${projectUrl} in your browser...`),await(0,import_open17.default)(projectUrl),0}var import_chalk249=__toESM(require_source(),1),import_ms26=__toESM(require_ms(),1);var ProjectAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}};async function add11(client,argv){let telemetryClient=new ProjectAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args}=parsedArgs;if(args.length!==1){if(output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk249.default.cyan(`${getCommandName("project add <name>")}`)}`),args.length>1){let example=import_chalk249.default.cyan(`${getCommandName(`project add "${args.join(" ")}"`)}`);output_manager_default.log(`If your project name has spaces, make sure to wrap it in quotes. Example:
1092
+ `)),1;let{org,project}=link,projectUrl=`https://vercel.com/${org.slug}/${project.name}`;return output_manager_default.log(`Opening ${projectUrl} in your browser...`),await(0,import_open17.default)(projectUrl),0}var import_chalk249=__toESM(require_source(),1),import_ms26=__toESM(require_ms(),1);var ProjectAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}};async function add11(client,argv){let telemetryClient=new ProjectAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args}=parsedArgs;if(args.length!==1){if(output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk249.default.cyan(`${getCommandName("project create <name>")}`)}`),args.length>1){let example=import_chalk249.default.cyan(`${getCommandName(`project create "${args.join(" ")}"`)}`);output_manager_default.log(`If your project name has spaces, make sure to wrap it in quotes. Example:
1093
1093
  ${example} `)}return 1}let start=Date.now(),[name]=args;telemetryClient.trackCliArgumentName(name);try{await createProject(client,{name})}catch(err){if(isAPIError(err)&&err.code==="too_many_projects")return output_manager_default.prettyError(err),1;if(!(isAPIError(err)&&err.status===409))throw err}let elapsed2=(0,import_ms26.default)(Date.now()-start),contextName=await getContextName(client);return output_manager_default.log(`${import_chalk249.default.cyan("Success!")} Project ${import_chalk249.default.bold(name.toLowerCase())} added (${import_chalk249.default.bold(contextName)}) ${import_chalk249.default.gray(`[${elapsed2}]`)}`),0}var import_chalk250=__toESM(require_source(),1);async function accessSummary(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(accessSummarySubcommand.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)},1),printError(error),1}if(parsedArgs.args.length>1)return output_manager_default.error("Invalid number of arguments. Usage: `vercel project access-summary [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,summary;try{let project=await getProjectByCwdOrLink({client,commandName:"project access-summary",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0});summary=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/members/summary`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"access-summary"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(summary,null,2)}
1094
1094
  `),0;let entries=Object.entries(summary).sort(([a],[b])=>a.localeCompare(b));if(entries.length===0)return output_manager_default.log("No summary data returned."),0;let rows=[["Role","Count"].map(h=>(0,import_chalk250.gray)(h)),...entries.map(([role,count2])=>[role,String(count2)])];return client.stderr.write(`${table(rows,{hsep:3})}
1095
1095
  `),0}var import_chalk251=__toESM(require_source(),1);import{readFileSync as readFileSync3}from"fs";import{resolve as resolve12}from"path";var REQUIRES=["build-ready","deployment-url","none"],BLOCKING_STAGES=["build-start","deployment-start","deployment-alias","deployment-promotion","none"];function emitValidationError(client,message,exitCode2,extra){outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,...extra},exitCode2)}async function checksAdd(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification([...checksAddFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},1),printError(error),1}if(parsedArgs.args.length>1)return emitValidationError(client,"Invalid number of arguments. Usage: `vercel project checks add [name]`",2),output_manager_default.error("Invalid number of arguments. Usage: `vercel project checks add [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&emitValidationError(client,formatResult.error,1),output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||!!client.nonInteractive,filePath=parsedArgs.flags["--file"],checkName=parsedArgs.flags["--check-name"],requires=parsedArgs.flags["--requires"],blocksFlag=parsedArgs.flags["--blocks"],timeout=parsedArgs.flags["--timeout"],targetsRaw=parsedArgs.flags["--targets"],sourceRaw=parsedArgs.flags["--source"],body;if(typeof filePath=="string"&&filePath.length>0)try{let raw=readFileSync3(resolve12(client.cwd,filePath),"utf8"),parsed=JSON.parse(raw);if(!parsed||typeof parsed!="object"||Array.isArray(parsed))return emitValidationError(client,"`--file` must contain a JSON object.",1),output_manager_default.error("`--file` must contain a JSON object."),1;body=parsed}catch(err){let msg=err instanceof Error?err.message:String(err);return emitValidationError(client,`Failed to read \`--file\`: ${msg}`,1),output_manager_default.error(`Failed to read \`--file\`: ${msg}`),1}else{if(typeof checkName!="string"||!checkName.trim())return emitValidationError(client,"Provide `--check-name` and `--requires`, or a `--file` with the full JSON body.",1,{hint:'See `vercel project checks --help` and the REST API "Create a check" documentation.',next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks add <name> --file <path>"),when:"Create from a JSON file (replace paths)"}]}),output_manager_default.error("Provide `--check-name` and `--requires`, or a `--file` with the full JSON body. See `vercel project checks add --help`."),1;if(typeof requires!="string"||!requires.trim())return emitValidationError(client,"`--requires` is required when using `--check-name` (build-ready, deployment-url, or none).",1),output_manager_default.error("`--requires` is required when using `--check-name` (build-ready, deployment-url, or none)."),1;if(!REQUIRES.includes(requires))return emitValidationError(client,`\`--requires\` must be one of: ${REQUIRES.join(", ")}`,1),output_manager_default.error(`\`--requires\` must be one of: ${REQUIRES.join(", ")}`),1;if(body={name:checkName.trim(),requires:requires.trim()},typeof blocksFlag=="string"&&blocksFlag.length>0){if(!BLOCKING_STAGES.includes(blocksFlag))return emitValidationError(client,`\`--blocks\` must be one of: ${BLOCKING_STAGES.join(", ")}`,1),output_manager_default.error(`\`--blocks\` must be one of: ${BLOCKING_STAGES.join(", ")}`),1;body.blocks=blocksFlag}if(typeof timeout=="number"&&(body.timeout=timeout),typeof targetsRaw=="string"&&targetsRaw.trim()&&(body.targets=targetsRaw.split(",").map(s=>s.trim()).filter(Boolean)),typeof sourceRaw=="string"&&sourceRaw.trim())try{body.source=JSON.parse(sourceRaw)}catch{return emitValidationError(client,"`--source` must be valid JSON.",1),output_manager_default.error("`--source` must be valid JSON."),1}}try{let project=await getProjectByCwdOrLink({client,commandName:"project checks add",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0}),result=await client.fetch(`/v2/projects/${encodeURIComponent(project.id)}/checks`,{method:"POST",body});if(asJson){let id3=String(result.id??"");return client.nonInteractive?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,check:result,projectId:project.id,projectName:project.name,message:id3?`Created deployment check ${id3} on ${project.name}.`:`Created deployment check on ${project.name}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks"),when:"List checks for this project"},{command:buildCommandWithGlobalFlags(client.argv,"project checks remove <check_id>"),when:"Remove a check by id if needed"}]},null,2)}
@@ -1126,7 +1126,7 @@ Starting setup...
1126
1126
  `)}function outputTable(projectList,options){let{contextName,elapsed:elapsed2,deprecated,opts,pagination}=options;output_manager_default.log(`${projectList.length>0?"Projects":"No projects"} found under ${import_chalk253.default.bold(contextName)} ${deprecated?"that are using a deprecated Node.js version":"\b"} ${import_chalk253.default.gray(`[${elapsed2}]`)}`),projectList.length>0&&(printProjectsTable(projectList),printPaginationInstructions(opts,pagination))}function printProjectsTable(projectList){let tablePrint=table([TABLE_HEADERS.map(header=>import_chalk253.default.bold(import_chalk253.default.cyan(header))),...projectList.flatMap(project=>[[import_chalk253.default.bold(project.name),getLatestProdUrl(project),import_chalk253.default.gray((0,import_ms27.default)(Date.now()-project.updatedAt)),project.nodeVersion??""]])],{hsep:3}).replace(/^/gm," ");output_manager_default.print(`
1127
1127
  ${tablePrint}
1128
1128
 
1129
- `)}function printPaginationInstructions(opts,pagination){if(pagination?.next){let nextCmd=`project ls${getCommandFlags(opts,PAGINATION_FLAGS_TO_EXCLUDE)} --next ${pagination.next}`;output_manager_default.log(`To display the next page, run ${getCommandName(nextCmd)}`)}}function getLatestProdUrl(project){let alias2=project.targets?.production?.alias?.[0];return alias2?`https://${alias2}`:"--"}var import_chalk255=__toESM(require_source(),1);var import_chalk254=__toESM(require_source(),1);var ProjectTelemetryClient=class extends TelemetryClient{trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandAccessSummary(actual){this.trackCliSubcommand({subcommand:"access-summary",value:actual})}trackCliSubcommandChecks(actual){this.trackCliSubcommand({subcommand:"checks",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandRename(actual){this.trackCliSubcommand({subcommand:"rename",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandMembers(actual){this.trackCliSubcommand({subcommand:"members",value:actual})}trackCliArgumentProject(project){project&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliArgumentMember(member){member&&this.trackCliArgument({arg:"member",value:this.redactedValue})}trackCliOptionRole(role){role&&this.trackCliOption({option:"role",value:PROJECT_MEMBER_ROLES.includes(role)?role:this.redactedValue})}trackCliSubcommandAccessGroups(actual){this.trackCliSubcommand({subcommand:"access-groups",value:actual})}trackCliSubcommandProtection(actual){this.trackCliSubcommand({subcommand:"protection",value:actual})}trackCliSubcommandWebAnalytics(actual){this.trackCliSubcommand({subcommand:"web-analytics",value:actual})}trackCliSubcommandSpeedInsights(actual){this.trackCliSubcommand({subcommand:"speed-insights",value:actual})}trackCliSubcommandPause(actual){this.trackCliSubcommand({subcommand:"pause",value:actual})}trackCliSubcommandDangerouslyDeleteImmutableStaticAsset(actual){this.trackCliSubcommand({subcommand:"dangerously-delete-immutable-static-asset",value:actual})}trackCliSubcommandObservability(actual){this.trackCliSubcommand({subcommand:"observability",value:actual})}trackCliSubcommandResume(actual){this.trackCliSubcommand({subcommand:"resume",value:actual})}};function findMember(members3,identifier){let needle=identifier.toLowerCase();return members3.find(m=>m.uid===identifier||m.username?.toLowerCase()===needle||m.email?.toLowerCase()===needle)}async function findProjectMember(client,projectId,identifier){let until;for(let page=0;page<100;page++){let query=new URLSearchParams({limit:"100"});until&&query.set("until",String(until));let{members:members3,pagination}=await client.fetch(`/v1/projects/${encodeURIComponent(projectId)}/members?${query.toString()}`),match=findMember(members3??[],identifier);if(match)return match;let next=pagination?.next;if(!members3||members3.length===0||!next)return;until=next}}async function membersRemove(client,argv){let telemetry2=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification([...membersRemoveFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),1}let[projectNameOrId,member]=parsedArgs.args;telemetry2.trackCliArgumentProject(projectNameOrId),telemetry2.trackCliArgumentMember(member);let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error}),output_manager_default.error(formatResult.error),1;let{jsonOutput}=formatResult,asJson=jsonOutput||!canPrompt(client);function fail(reason,message,humanMessage=message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),1):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
1129
+ `)}function printPaginationInstructions(opts,pagination){if(pagination?.next){let nextCmd=`project ls${getCommandFlags(opts,PAGINATION_FLAGS_TO_EXCLUDE)} --next ${pagination.next}`;output_manager_default.log(`To display the next page, run ${getCommandName(nextCmd)}`)}}function getLatestProdUrl(project){let alias2=project.targets?.production?.alias?.[0];return alias2?`https://${alias2}`:"--"}var import_chalk255=__toESM(require_source(),1);var import_chalk254=__toESM(require_source(),1);var ProjectTelemetryClient=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})}trackCliSubcommandAccessSummary(actual){this.trackCliSubcommand({subcommand:"access-summary",value:actual})}trackCliSubcommandChecks(actual){this.trackCliSubcommand({subcommand:"checks",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandRename(actual){this.trackCliSubcommand({subcommand:"rename",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandMembers(actual){this.trackCliSubcommand({subcommand:"members",value:actual})}trackCliArgumentProject(project){project&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliArgumentMember(member){member&&this.trackCliArgument({arg:"member",value:this.redactedValue})}trackCliOptionRole(role){role&&this.trackCliOption({option:"role",value:PROJECT_MEMBER_ROLES.includes(role)?role:this.redactedValue})}trackCliSubcommandAccessGroups(actual){this.trackCliSubcommand({subcommand:"access-groups",value:actual})}trackCliSubcommandProtection(actual){this.trackCliSubcommand({subcommand:"protection",value:actual})}trackCliSubcommandWebAnalytics(actual){this.trackCliSubcommand({subcommand:"web-analytics",value:actual})}trackCliSubcommandSpeedInsights(actual){this.trackCliSubcommand({subcommand:"speed-insights",value:actual})}trackCliSubcommandPause(actual){this.trackCliSubcommand({subcommand:"pause",value:actual})}trackCliSubcommandDangerouslyDeleteImmutableStaticAsset(actual){this.trackCliSubcommand({subcommand:"dangerously-delete-immutable-static-asset",value:actual})}trackCliSubcommandObservability(actual){this.trackCliSubcommand({subcommand:"observability",value:actual})}trackCliSubcommandResume(actual){this.trackCliSubcommand({subcommand:"resume",value:actual})}};function findMember(members3,identifier){let needle=identifier.toLowerCase();return members3.find(m=>m.uid===identifier||m.username?.toLowerCase()===needle||m.email?.toLowerCase()===needle)}async function findProjectMember(client,projectId,identifier){let until;for(let page=0;page<100;page++){let query=new URLSearchParams({limit:"100"});until&&query.set("until",String(until));let{members:members3,pagination}=await client.fetch(`/v1/projects/${encodeURIComponent(projectId)}/members?${query.toString()}`),match=findMember(members3??[],identifier);if(match)return match;let next=pagination?.next;if(!members3||members3.length===0||!next)return;until=next}}async function membersRemove(client,argv){let telemetry2=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification([...membersRemoveFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),1}let[projectNameOrId,member]=parsedArgs.args;telemetry2.trackCliArgumentProject(projectNameOrId),telemetry2.trackCliArgumentMember(member);let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error}),output_manager_default.error(formatResult.error),1;let{jsonOutput}=formatResult,asJson=jsonOutput||!canPrompt(client);function fail(reason,message,humanMessage=message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),1):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
1130
1130
  `),1):(output_manager_default.error(humanMessage),1)}if(parsedArgs.args.length!==2){let cmd2=buildCommandWithGlobalFlags(client.argv,"project members remove <project> <member>");return fail(AGENT_REASON.INVALID_ARGUMENTS,"Invalid number of arguments. Usage: `vercel project members remove <project> <member>`","Invalid number of arguments. Usage: `vercel project members remove <project> <member>`",{next:[{command:cmd2,when:"Remove a member from a project (replace <project> and <member>)"}]})}let project,target;try{project=await getProjectByCwdOrLink({client,commandName:"project members remove",projectNameOrId,forReadOnlyCommand:!0}),target=await findProjectMember(client,project.id,member)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"members"}),jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)},null,2)}
1131
1131
  `),1):(printError(err),1)}if(!target){let message=`${member} is not a member of ${project.name}.`;return fail(AGENT_REASON.NOT_FOUND,message,message,{next:[{command:buildCommandWithGlobalFlags(client.argv,`project members ${project.name}`),when:"List current members to find the right identifier"}]})}let memberLabel=target.username||target.email||target.uid;if(!canPrompt(client)){let actionRequired={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,userActionRequired:!0,message:`Removing ${memberLabel} from ${project.name} requires interactive confirmation and cannot be done non-interactively.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project members remove <project> <member>"),when:"user runs this command in an interactive terminal"}]};return outputActionRequired(client,actionRequired,1),client.stdout.write(`${JSON.stringify(actionRequired,null,2)}
1132
1132
  `),1}if(!await client.input.confirm(`Remove ${import_chalk254.default.bold(memberLabel)} from ${import_chalk254.default.bold(project.name)}?`,!1))return output_manager_default.log("Canceled."),0;try{let result=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/members/${encodeURIComponent(target.uid)}`,{method:"DELETE"});return asJson?(shouldEmitNonInteractiveCommandError(client)?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,projectId:project.id,projectName:project.name,uid:target.uid,result,message:`Removed ${memberLabel} from ${project.name}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,`project members ${project.name}`),when:"List remaining members"}]},null,2)}
@@ -1167,7 +1167,7 @@ ${err}`),1)}}var import_chalk263=__toESM(require_source(),1);async function setS
1167
1167
  `,emoji("warning"))),await client.input.confirm(`Disable Observability Plus for ${project.name}?`,!1)?setObservability(client,project,!1,asJson):(output_manager_default.log("Canceled"),0);let{team}=await getScope(client);return team?team.billing?.plan==="hobby"?(output_manager_default.error("Observability Plus requires an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")}.`),1):(output_manager_default.print(prependEmoji(`Enabling Observability Plus for ${import_chalk265.default.bold(project.name)} will incur charges on your account.
1168
1168
  `,emoji("warning"))),await client.input.confirm(`Enable Observability Plus for ${project.name}?`,!1)?setObservability(client,project,!0,asJson):(output_manager_default.log("Canceled"),0)):(output_manager_default.error("Observability Plus requires a team. Use --scope to specify one."),1)}var import_chalk266=__toESM(require_source(),1),PROTECTION_ACTIONS=["enable","disable"],DEFAULT_SKEW_PROTECTION_MAX_AGE=2592e3,ENABLED_DEPLOYMENT_TYPE="prod_deployment_urls_and_all_previews",MAX_PROTECTION_PASSWORD_LENGTH=72;function validateProtectionPassword(value){let password=value.trim();return password===""?{ok:!1,message:"Invalid --protection-password: expected a non-empty password string."}:password.length>MAX_PROTECTION_PASSWORD_LENGTH?{ok:!1,message:`Invalid --protection-password: password must be at most ${MAX_PROTECTION_PASSWORD_LENGTH} characters.`}:{ok:!0,password}}function parseSkewMaxAgeSeconds(value){let trimmed=value.trim();if(trimmed===""||!/^\d+$/.test(trimmed))return{ok:!1,message:"Invalid --skew-max-age: expected a positive integer (seconds), e.g. 604800."};let n=Number(trimmed);return!Number.isSafeInteger(n)||n<=0?{ok:!1,message:"Invalid --skew-max-age: value must be a positive integer within safe range."}:{ok:!0,seconds:n}}var PROTECTION_KEYS=["passwordProtection","ssoProtection","skewProtectionMaxAge","customerSupportCodeVisibility","gitForkProtection","protectionBypass"];function isProtectionAction(v){return!!v&&PROTECTION_ACTIONS.includes(v)}async function protection(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(protectionSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},1),printError(error),1}let actionArg=parsedArgs.args[0],action=isProtectionAction(actionArg)?actionArg:void 0;if(!action&&parsedArgs.args.length>1)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:"Invalid arguments. Usage: `vercel project protection [name]`",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection"),when:"Show deployment protection for the linked project"}]},2),output_manager_default.error("Invalid arguments. Usage: `vercel project protection [name]`"),2;if(action&&parsedArgs.args.length>2)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid arguments. Usage: \`vercel project protection ${action} [name]\``,next:[{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action}`),when:"Retry with at most one project name"}]},2),output_manager_default.error(`Invalid arguments. Usage: \`vercel project protection ${action} [name]\``),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error},1),output_manager_default.error(formatResult.error),1;let preferJson=formatResult.jsonOutput||!!client.nonInteractive,skewMaxAgeFlag=parsedArgs.flags["--skew-max-age"];if(action==="disable"&&skewMaxAgeFlag!==void 0){let msg="`--skew-max-age` can only be used with `project protection enable`.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,hint:"Use `project protection disable ... --skew` to turn skew protection off."},2),output_manager_default.error(msg),2}let enableSkewMaxAgeSeconds;if(action==="enable"&&skewMaxAgeFlag!==void 0){let parsed=parseSkewMaxAgeSeconds(skewMaxAgeFlag);if(!parsed.ok)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:parsed.message,hint:"Pass a positive integer number of seconds (e.g. 604800 for 7 days).",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection enable --skew --skew-max-age 604800"),when:"Example with a valid max age in seconds"}]},1),output_manager_default.error(parsed.message),1;enableSkewMaxAgeSeconds=parsed.seconds}let ssoSelected=!!parsedArgs.flags["--sso"],passwordSelected=!!parsedArgs.flags["--password"],protectionPasswordFlag=parsedArgs.flags["--protection-password"],customerSupportCodeVisibilitySelected=!!parsedArgs.flags["--customer-support-code-visibility"],skewSelected=!!parsedArgs.flags["--skew"],bypassSelected=!!parsedArgs.flags["--protection-bypass"],protectionBypassSecret=parsedArgs.flags["--protection-bypass-secret"],gitForkProtectionSelected=!!parsedArgs.flags["--git-fork-protection"];if(protectionPasswordFlag!==void 0&&!passwordSelected){let msg="`--protection-password` requires `--password`. Usage: `vercel project protection enable [name] --password --protection-password <password>`";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,hint:"Pass --password together with --protection-password when enabling password protection.",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection enable --password --protection-password <password>"),when:"Replace <password> with the deployment protection password"}]},2),output_manager_default.error(msg),2}if(action==="disable"&&protectionPasswordFlag!==void 0){let msg="`--protection-password` can only be used with `project protection enable`.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,hint:"Use `project protection disable ... --password` to turn password protection off."},2),output_manager_default.error(msg),2}let protectionPassword;if(action==="enable"&&protectionPasswordFlag!==void 0){let parsed=validateProtectionPassword(protectionPasswordFlag);if(!parsed.ok)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:parsed.message,hint:`Pass a password string up to ${MAX_PROTECTION_PASSWORD_LENGTH} characters.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection enable --password --protection-password <password>"),when:"Replace <password> with a valid deployment protection password"}]},1),output_manager_default.error(parsed.message),1;protectionPassword=parsed.password}if(action&&!ssoSelected&&!passwordSelected&&!customerSupportCodeVisibilitySelected&&!skewSelected&&!bypassSelected&&!gitForkProtectionSelected){let msg="No protection selected. Pass --sso, --password, --customer-support-code-visibility, --skew, --protection-bypass, or --git-fork-protection. Usage: `vercel project protection enable|disable [name] --sso|--password|--customer-support-code-visibility|--skew|--protection-bypass|--git-fork-protection`";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:msg,hint:"Use `project protection enable|disable` with a protection flag (e.g. --sso, --password, --customer-support-code-visibility, --skew, --protection-bypass, or --git-fork-protection).",next:[{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --sso`),when:"Example: same action with SSO protection selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --password`),when:"Example: same action with password protection selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --customer-support-code-visibility`),when:"Example: same action with customer support code visibility selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --skew`),when:"Example: same action with skew protection selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --protection-bypass`),when:"Example: same action with automation protection bypass"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --git-fork-protection`),when:"Example: same action with Git fork protection selected"}]},2),output_manager_default.error(msg),2}let project;try{project=await getProjectByCwdOrLink({client,commandName:"project protection",projectNameOrId:action?parsedArgs.args[1]:parsedArgs.args[0],forReadOnlyCommand:!action})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"protection"}),printError(err),1}if(action){let skewProtectionMaxAge=action==="enable"?enableSkewMaxAgeSeconds??DEFAULT_SKEW_PROTECTION_MAX_AGE:0;if(bypassSelected){if(action==="disable"&&!protectionBypassSecret){let secretMsg="Disabling protection bypass requires --protection-bypass-secret <secret>.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:secretMsg,hint:"Pass the existing automation bypass secret to revoke it.",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection disable --protection-bypass --protection-bypass-secret <secret>"),when:"Replace <secret> with the bypass secret to revoke"}]},2),output_manager_default.error(secretMsg),2}try{let bypassBody=action==="enable"?{generate:protectionBypassSecret?{secret:protectionBypassSecret}:{}}:{revoke:{secret:protectionBypassSecret,regenerate:!1}};await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/protection-bypass`,{method:"PATCH",body:bypassBody})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"protection"}),printError(err),1}}let patchBody={};if(ssoSelected&&(patchBody.ssoProtection=action==="enable"?{deploymentType:ENABLED_DEPLOYMENT_TYPE}:null),passwordSelected&&(patchBody.passwordProtection=action==="enable"?{deploymentType:ENABLED_DEPLOYMENT_TYPE,...protectionPassword?{password:protectionPassword}:{}}:null),customerSupportCodeVisibilitySelected&&(patchBody.customerSupportCodeVisibility=action==="enable"),skewSelected&&(patchBody.skewProtectionMaxAge=skewProtectionMaxAge),gitForkProtectionSelected&&(patchBody.gitForkProtection=action==="enable"),Object.keys(patchBody).length>0)try{await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{method:"PATCH",body:patchBody})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"protection"}),printError(err),1}return preferJson?(client.stdout.write(`${JSON.stringify({action,projectId:project.id,projectName:project.name,ssoProtection:ssoSelected?action==="enable":void 0,passwordProtection:passwordSelected?action==="enable":void 0,customerSupportCodeVisibility:customerSupportCodeVisibilitySelected?action==="enable":void 0,skewProtection:skewSelected?action==="enable":void 0,...skewSelected?action==="enable"?{skewProtectionMaxAge}:{skewProtectionMaxAge:0}:{},protectionBypass:bypassSelected?action==="enable":void 0,gitForkProtection:gitForkProtectionSelected?action==="enable":void 0},null,2)}
1169
1169
  `),0):(output_manager_default.log(`${import_chalk266.default.bold("Deployment protection")} ${action==="enable"?"enabled":"disabled"} for ${import_chalk266.default.cyan(project.name)}`),0)}let raw=project,slice={};for(let key of PROTECTION_KEYS)key in raw&&(slice[key]=raw[key]);if(preferJson)return client.stdout.write(`${JSON.stringify({projectId:project.id,name:project.name,...slice},null,2)}
1170
- `),0;if(output_manager_default.log(`${import_chalk266.default.bold("Protection settings")} for ${import_chalk266.default.cyan(project.name)} (${project.id})`),Object.keys(slice).length===0)return output_manager_default.log("No deployment protection fields returned for this project."),0;for(let[k,v]of Object.entries(slice))output_manager_default.log(`${import_chalk266.default.cyan(`${k}:`)} ${JSON.stringify(v)}`);return 0}var COMMAND_CONFIG53={inspect:getCommandAliases(inspectSubcommand12),list:getCommandAliases(listSubcommand18),members:getCommandAliases(membersSubcommand),accessGroups:getCommandAliases(accessGroupsSubcommand),add:getCommandAliases(addSubcommand8),"access-summary":getCommandAliases(accessSummarySubcommand),checks:getCommandAliases(checksSubcommand),protection:getCommandAliases(protectionSubcommand),update:getCommandAliases(updateSubcommand8),rename:getCommandAliases(renameSubcommand),remove:getCommandAliases(removeSubcommand13),token:getCommandAliases(tokenSubcommand2),speedInsights:getCommandAliases(speedInsightsSubcommand),webAnalytics:getCommandAliases(webAnalyticsSubcommand),pause:getCommandAliases(pauseSubcommand),"dangerously-delete-immutable-static-asset":getCommandAliases(dangerouslyDeleteImmutableStaticAssetSubcommand),observability:getCommandAliases(observabilitySubcommand),resume:getCommandAliases(resumeSubcommand)};async function main29(client){let telemetry2=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(projectCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG53),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("project"),output_manager_default.print(help(projectCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:projectCommand,columns:client.stderr.columns})),0}parsedArgs.args[1]||(subcommand="list");let exitCode2;switch(subcommand){case"inspect":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(inspectSubcommand12);telemetry2.trackCliSubcommandInspect(subcommandOriginal),exitCode2=await inspect17(client,args);break;case"list":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(listSubcommand18);telemetry2.trackCliSubcommandList(subcommandOriginal),exitCode2=await list21(client,args);break;case"add":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(addSubcommand8);telemetry2.trackCliSubcommandAdd(subcommandOriginal),exitCode2=await add11(client,args);break;case"access-summary":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(accessSummarySubcommand);telemetry2.trackCliSubcommandAccessSummary(subcommandOriginal),exitCode2=await accessSummary(client,args);break;case"checks":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(checksSubcommand);telemetry2.trackCliSubcommandChecks(args[0]==="add"?"checks add":args[0]==="remove"||args[0]==="rm"?"checks remove":subcommandOriginal),exitCode2=await checks(client,args);break;case"members":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(membersSubcommand);telemetry2.trackCliSubcommandMembers(args[0]==="add"?"members add":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),exitCode2=await members(client,args);break;case"accessGroups":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(accessGroupsSubcommand);telemetry2.trackCliSubcommandAccessGroups(subcommandOriginal),exitCode2=await accessGroups(client,args);break;case"protection":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(protectionSubcommand);telemetry2.trackCliSubcommandProtection(args[0]==="enable"?"protection enable":args[0]==="disable"?"protection disable":subcommandOriginal),exitCode2=await protection(client,args);break;case"webAnalytics":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(webAnalyticsSubcommand);telemetry2.trackCliSubcommandWebAnalytics(args[0]==="enable"?"web-analytics enable":args[0]==="disable"?"web-analytics disable":subcommandOriginal),exitCode2=await webAnalytics(client,args);break;case"speedInsights":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(speedInsightsSubcommand);telemetry2.trackCliSubcommandSpeedInsights(args[0]==="enable"?"speed-insights enable":args[0]==="disable"?"speed-insights disable":subcommandOriginal),exitCode2=await speedInsights(client,args);break;case"pause":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(pauseSubcommand);telemetry2.trackCliSubcommandPause(subcommandOriginal),exitCode2=await pause2(client,args);break;case"dangerously-delete-immutable-static-asset":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(dangerouslyDeleteImmutableStaticAssetSubcommand);telemetry2.trackCliSubcommandDangerouslyDeleteImmutableStaticAsset(subcommandOriginal),exitCode2=await dangerouslyDeleteImmutableStaticAsset(client,args);break;case"observability":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(observabilitySubcommand);telemetry2.trackCliSubcommandObservability(args[0]==="enable"?"observability enable":args[0]==="disable"?"observability disable":subcommandOriginal),exitCode2=await observability(client,args);break;case"resume":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(resumeSubcommand);telemetry2.trackCliSubcommandResume(subcommandOriginal),exitCode2=await resume2(client,args);break;case"token":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(tokenSubcommand2);telemetry2.trackCliSubcommandToken(subcommandOriginal),exitCode2=await getOidcToken(client,args);break;case"rename":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(renameSubcommand);telemetry2.trackCliSubcommandRename(subcommandOriginal),exitCode2=await rename(client,args);break;case"update":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(updateSubcommand8);telemetry2.trackCliSubcommandUpdate(subcommandOriginal),exitCode2=await update6(client,args);break;case"remove":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(removeSubcommand13);telemetry2.trackCliSubcommandRemove(subcommandOriginal),exitCode2=await rm9(client,args);break;default:{if(handleCommandTypo({client,command:parsedArgs.args[1],availableCommands:projectCommand.subcommands}))return 2;let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForProjectsCli);if(fallback!==null){exitCode2=fallback;break}return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG53)),output_manager_default.print(help(projectCommand,{columns:client.stderr.columns})),2}}return exitCode2===0&&await autoInstallVercelPlugin(client),exitCode2}var import_ms32=__toESM(require_ms(),1);var import_error_utils20=__toESM(require_dist(),1);var import_chalk270=__toESM(require_source(),1);var import_chalk267=__toESM(require_source(),1);async function getProjectByDeployment({client,deployId}){let{config}=client,contextName=await getContextName(client);if(!isValidName(deployId))throw new Error(`The provided argument "${deployId}" is not a valid deployment ID or URL`);let deployment,team;try{output_manager_default?.spinner(`Fetching deployment "${deployId}" in ${import_chalk267.default.bold(contextName)}\u2026`);let[teamResult,deploymentResult]=await Promise.allSettled([config.currentTeam?getTeamByIdOrSlug(client,config.currentTeam):void 0,getDeployment(client,contextName,deployId)]);if(teamResult.status==="rejected")throw new Error(`Failed to retrieve team information: ${teamResult.reason}`);if(deploymentResult.status==="rejected")throw new Error(deploymentResult.reason);if(team=teamResult.value,deployment=deploymentResult.value,output_manager_default?.log(`Fetching deployment "${deployId}" in ${import_chalk267.default.bold(contextName)}\u2026`),deployment.team?.id){if(!team||deployment.team.id!==team.id){let err=new Error(team?`Deployment doesn't belong to current team ${import_chalk267.default.bold(contextName)}`:"Deployment belongs to a different team");throw err.code="ERR_INVALID_TEAM",err}}else if(team){let err=new Error(`Deployment doesn't belong to current team ${import_chalk267.default.bold(contextName)}`);throw err.code="ERR_INVALID_TEAM",err}if(!deployment.projectId)throw new Error("Deployment is not associated to a project");let project=await getProjectByNameOrId(client,deployment.projectId);if(project instanceof ProjectNotFound)throw project;return{contextName,deployment,project}}finally{output_manager_default?.stopSpinner()}}var import_ms31=__toESM(require_ms(),1);var import_chalk269=__toESM(require_source(),1);var import_ms30=__toESM(require_ms(),1);var import_chalk268=__toESM(require_source(),1);function renderAliasStatus(status6){return status6==="completed"?import_chalk268.default.green(status6):status6==="failed"?import_chalk268.default.red(status6):status6==="skipped"?import_chalk268.default.gray(status6):import_chalk268.default.yellow(status6)}async function requestRollingRelease({client,projectId,teamId}){let{rollingRelease:rollingRelease2}=await client.fetch(`/v1/projects/${projectId}/rolling-release?teamId=${teamId}`);return rollingRelease2}async function promoteStatus({client,contextName,deployment,project,timeout="3m"}){let recentThreshold=Date.now()-(0,import_ms30.default)("3m"),promoteTimeout=Date.now()+(0,import_ms30.default)(timeout),counter=0,spinnerMessage=deployment?"Promote in progress":`Checking promotion 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;if(projectCheck.rollingRelease){output_manager_default.log("Rolling Releases enabled \u2026");let rr=await requestRollingRelease({client,projectId:project.id,teamId:project.accountId});if(rr.activeStage)return output_manager_default.stopSpinner(),output_manager_default.log(`Rolling Release serving traffic at initial percentage ${rr.activeStage.targetPercentage}`),0;continue}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 promotion in progress"),0;if(jobStatus==="skipped"&&type==="promote")return output_manager_default.log("Promote deployment was skipped"),0;if(jobStatus==="succeeded")return await renderJobSucceeded({client,contextName,performingPromote:!!deployment,requestedAt,project,toDeploymentId});if(jobStatus==="failed")return await renderJobFailed({client,contextName,deployment,project,toDeploymentId});if(jobStatus!=="pending"&&jobStatus!=="in-progress")return output_manager_default.log(`Unknown promote deployment status "${jobStatus}"`),1;if(requestedAt<recentThreshold||Date.now()>=promoteTimeout)return output_manager_default.log(`The promotion exceeded its deadline - rerun ${import_chalk269.default.bold(`${packageName} promote ${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 renderJobFailed({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}/promote/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 renderJobSucceeded({client,contextName,performingPromote,project,requestedAt,toDeploymentId}){let deploymentInfo="";try{let deployment=await getDeployment(client,contextName,toDeploymentId);deploymentInfo=`${import_chalk269.default.bold(deployment.url)} (${toDeploymentId})`}catch(err){output_manager_default.debug(`Failed to get deployment url for ${toDeploymentId}: ${err?.toString()||err}`),deploymentInfo=import_chalk269.default.bold(toDeploymentId)}let duration=performingPromote?elapsed(Date.now()-requestedAt):"";return output_manager_default.log(`Success! ${import_chalk269.default.bold(project.name)} was promoted to ${deploymentInfo} ${duration}`),0}async function requestPromote({client,deployId,timeout,yes}){let{contextName,deployment,project}=await getProjectByDeployment({client,deployId}),promoteByCreation=!1;if(deployment.target!=="production")if(yes)promoteByCreation=!0;else{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:project.name,target:"production",meta:{action:"promote"}},accountId:deployment.ownerId,method:"POST"});return output_manager_default.log(`Successfully created new deployment of ${import_chalk270.default.bold(project.name)} at ${newDeployment.inspectorUrl}`),0}return(await client.fetch(`/v10/projects/${project.id}/promote/${deployment.id}`,{body:{},json:!1,method:"POST"})).status===202?(output_manager_default.log("Promotion has been queued and will begin when the active rolling release completes successfully."),0):timeout!==void 0&&(0,import_ms31.default)(timeout)===0?(output_manager_default.log(`Successfully requested promote of ${import_chalk270.default.bold(project.name)} to ${deployment.url} (${deployment.id})`),output_manager_default.log(`To check promote status, run ${getCommandName("promote")}.`),0):await promoteStatus({client,contextName,deployment,project,timeout})}var PromoteTelemetryClient=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 promote_default=async client=>{let parsedArgs,flagsSpecification=getFlagsSpecification(promoteCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let telemetry2=new PromoteTelemetryClient({opts:{store:client.telemetryEventStore}}),needHelp=parsedArgs.flags["--help"];if(!parsedArgs.args[1]&&needHelp)return telemetry2.trackCliFlagHelp("promote"),output_manager_default.print(help(promoteCommand,{columns:client.stderr.columns})),2;let yes=parsedArgs.flags["--yes"]??!1;telemetry2.trackCliFlagYes(parsedArgs.flags["--yes"]);let timeout=parsedArgs.flags["--timeout"];if(timeout&&(0,import_ms32.default)(timeout)===void 0)return output_manager_default.error(`Invalid timeout "${timeout}"`),1;telemetry2.trackCliOptionTimeout(parsedArgs.flags["--timeout"]);let actionOrDeployId=parsedArgs.args[1]||"status";try{if(actionOrDeployId==="status"){if(needHelp)return telemetry2.trackCliFlagHelp("promote","status"),output_manager_default.print(help(statusSubcommand3,{columns:client.stderr.columns,parent:promoteCommand})),2;telemetry2.trackCliSubcommandStatus();let project=await getProjectByCwdOrLink({autoConfirm:parsedArgs.flags["--yes"],client,commandName:"promote",projectNameOrId:parsedArgs.args[2]});return await promoteStatus({client,project,timeout})}return telemetry2.trackCliArgumentUrlOrDeploymentId(actionOrDeployId),await requestPromote({client,deployId:actionOrDeployId,timeout,yes})}catch(err){if((0,import_error_utils20.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}};var import_chalk272=__toESM(require_source(),1),import_client=__toESM(require_dist3(),1);var import_chalk271=__toESM(require_source(),1);async function getDeploymentByIdOrURL({client,contextName,deployIdOrUrl}){let{config}=client;if(!isValidName(deployIdOrUrl))throw new Error(`The provided argument "${deployIdOrUrl}" is not a valid deployment ID or URL`);let deployment,team;try{output_manager_default.spinner(`Fetching deployment "${deployIdOrUrl}" in ${import_chalk271.default.bold(contextName)}\u2026`);let[teamResult,deploymentResult]=await Promise.allSettled([config.currentTeam?getTeamByIdOrSlug(client,config.currentTeam):void 0,getDeployment(client,contextName,deployIdOrUrl)]);if(teamResult.status==="rejected")throw new Error(`Failed to retrieve team information: ${teamResult.reason}`);if(deploymentResult.status==="rejected")throw new Error(deploymentResult.reason.message);team=teamResult.value,deployment=deploymentResult.value,output_manager_default.log(`Fetching deployment "${deployIdOrUrl}" in ${import_chalk271.default.bold(contextName)}\u2026`)}finally{output_manager_default.stopSpinner()}if(deployment.team?.id){if(!team||deployment.team.id!==team.id){let err=new Error(team?`Deployment doesn't belong to current team ${import_chalk271.default.bold(contextName)}`:"Deployment belongs to a different team");throw err.code="ERR_INVALID_TEAM",err}}else if(team){let err=new Error(`Deployment doesn't belong to current team ${import_chalk271.default.bold(contextName)}`);throw err.code="ERR_INVALID_TEAM",err}return deployment}var import_error_utils21=__toESM(require_dist(),1);var RedeployTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(value){value&&this.trackCliArgument({arg:"urlOrDeploymentId",value:this.redactedValue})}trackCliFlagNoWait(noWait){noWait&&this.trackCliFlag("no-wait")}trackCliOptionTarget(target){target&&this.trackCliArgument({arg:"target",value:this.redactedTargetName(target)})}};async function redeploy(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(redeployCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),1}let telemetry2=new RedeployTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("redeploy"),output_manager_default.print(help(redeployCommand,{columns:client.stderr.columns})),2;let deployIdOrUrl=parsedArgs.args[1];if(!deployIdOrUrl)return output_manager_default.error(`Missing required deployment id or url: ${getCommandName("redeploy <deployment-id-or-url>")}`),1;telemetry2.trackCliArgumentUrlOrDeploymentId(deployIdOrUrl),telemetry2.trackCliFlagNoWait(parsedArgs.flags["--no-wait"]),telemetry2.trackCliOptionTarget(parsedArgs.flags["--target"]);let contextName=await getContextName(client),noWait=!!parsedArgs.flags["--no-wait"],targetArgument=parsedArgs.flags["--target"];try{let fromDeployment=await getDeploymentByIdOrURL({client,contextName,deployIdOrUrl}),target,customEnvironmentSlugOrId;targetArgument?targetArgument==="staging"||targetArgument==="production"?target=targetArgument:targetArgument==="preview"?target=void 0:targetArgument?(customEnvironmentSlugOrId=targetArgument,target=void 0):target=fromDeployment.target:(target=fromDeployment.target??void 0,customEnvironmentSlugOrId=fromDeployment.customEnvironment?.id);let customEnvironment;if(fromDeployment?.projectId&&customEnvironmentSlugOrId){let customEnvironments=await getCustomEnvironments(client,fromDeployment.projectId);customEnvironment=pickCustomEnvironment(customEnvironments,customEnvironmentSlugOrId)}if(customEnvironmentSlugOrId&&!customEnvironment)return output_manager_default.error(`The provided argument "${targetArgument}" is not a valid target environment.`),1;let deployStamp=stamp_default();output_manager_default.spinner(`Redeploying project ${fromDeployment.id}`,0);let deployment=await client.fetch("/v13/deployments?forceNew=1",{body:{deploymentId:fromDeployment.id,meta:{action:"redeploy"},name:fromDeployment.name,target,customEnvironmentSlugOrId},method:"POST"});output_manager_default.stopSpinner();let previewUrl=`https://${deployment.url}`,isProdDeployment=target==="production";if(customEnvironmentSlugOrId&&customEnvironment&&(isProdDeployment=customEnvironment.type==="production"),printAlignedLabel("Inspect",import_chalk272.default.cyan(deployment.inspectorUrl)),printAlignedLabel(isProdDeployment?"Production":"Preview",import_chalk272.default.cyan(previewUrl),isProdDeployment&&noWait?{gutter:"\u25B2"}:{}),client.stdout.isTTY||client.stdout.write(`https://${deployment.url}`),!noWait){output_manager_default.spinner(deployment.readyState==="QUEUED"?"Queued\u2026":"Building\u2026",0);let project,rollingRelease2;if(deployment.projectId&&deployment.projectId!=""&&(project=await getProjectByNameOrId(client,deployment.projectId),rollingRelease2=project?.rollingRelease),deployment.readyState==="READY"&&deployment.aliasAssigned&&!rollingRelease2){if(output_manager_default.spinner("Completing\u2026",0),deployment.target==="production"&&deployment.alias&&deployment.alias.length>0){output_manager_default.stopSpinner();let prodUrl=`https://${deployment.alias[0]}`;printAlignedLabel("Aliased",import_chalk272.default.cyan(prodUrl),{gutter:"\u25B2"})}}else try{let clientOptions={dispatcher:getFetchDispatcher(),apiUrl:client.apiUrl,debug:output_manager_default.debugEnabled,path:"",teamId:fromDeployment.team?.id,token:client.authConfig.token,userAgent:ua_default};for await(let event of(0,import_client.checkDeploymentStatus)(deployment,clientOptions))if(event.type==="building")output_manager_default.spinner("Building\u2026",0);else if(event.type==="ready"&&rollingRelease2){output_manager_default.spinner("Releasing\u2026",0),output_manager_default.stopSpinner(),deployment=event.payload;break}else if(event.type==="ready"&&(!event.payload.checksState||event.payload.checksState==="completed"))output_manager_default.spinner("Completing\u2026",0);else if(event.type==="checks-running")output_manager_default.spinner("Running Checks\u2026",0);else if(event.type==="alias-assigned"||event.type==="checks-conclusion-failed"){if(output_manager_default.stopSpinner(),event.type==="alias-assigned"&&!Array.isArray(event.payload)&&event.payload.target==="production"&&event.payload.alias&&event.payload.alias.length>0){let prodUrl=`https://${event.payload.alias[0]}`;printAlignedLabel("Aliased",import_chalk272.default.cyan(prodUrl),{gutter:"\u25B2"})}deployment=event.payload;break}else{if(event.type==="canceled")return output_manager_default.stopSpinner(),output_manager_default.print(`The deployment has been canceled.
1170
+ `),0;if(output_manager_default.log(`${import_chalk266.default.bold("Protection settings")} for ${import_chalk266.default.cyan(project.name)} (${project.id})`),Object.keys(slice).length===0)return output_manager_default.log("No deployment protection fields returned for this project."),0;for(let[k,v]of Object.entries(slice))output_manager_default.log(`${import_chalk266.default.cyan(`${k}:`)} ${JSON.stringify(v)}`);return 0}var COMMAND_CONFIG53={inspect:getCommandAliases(inspectSubcommand12),list:getCommandAliases(listSubcommand18),members:getCommandAliases(membersSubcommand),accessGroups:getCommandAliases(accessGroupsSubcommand),add:getCommandAliases(addSubcommand8),"access-summary":getCommandAliases(accessSummarySubcommand),checks:getCommandAliases(checksSubcommand),protection:getCommandAliases(protectionSubcommand),update:getCommandAliases(updateSubcommand8),rename:getCommandAliases(renameSubcommand),remove:getCommandAliases(removeSubcommand13),token:getCommandAliases(tokenSubcommand2),speedInsights:getCommandAliases(speedInsightsSubcommand),webAnalytics:getCommandAliases(webAnalyticsSubcommand),pause:getCommandAliases(pauseSubcommand),"dangerously-delete-immutable-static-asset":getCommandAliases(dangerouslyDeleteImmutableStaticAssetSubcommand),observability:getCommandAliases(observabilitySubcommand),resume:getCommandAliases(resumeSubcommand)};async function main29(client){let telemetry2=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(projectCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG53),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("project"),output_manager_default.print(help(projectCommand,{columns:client.stderr.columns})),0;function printHelp(command2){return output_manager_default.print(help(command2,{parent:projectCommand,columns:client.stderr.columns})),0}parsedArgs.args[1]||(subcommand="list");let exitCode2;switch(subcommand){case"inspect":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(inspectSubcommand12);telemetry2.trackCliSubcommandInspect(subcommandOriginal),exitCode2=await inspect17(client,args);break;case"list":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(listSubcommand18);telemetry2.trackCliSubcommandList(subcommandOriginal),exitCode2=await list21(client,args);break;case"add":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(addSubcommand8);telemetry2.trackCliSubcommandCreate(subcommandOriginal),exitCode2=await add11(client,args);break;case"access-summary":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(accessSummarySubcommand);telemetry2.trackCliSubcommandAccessSummary(subcommandOriginal),exitCode2=await accessSummary(client,args);break;case"checks":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(checksSubcommand);telemetry2.trackCliSubcommandChecks(args[0]==="add"?"checks add":args[0]==="remove"||args[0]==="rm"?"checks remove":subcommandOriginal),exitCode2=await checks(client,args);break;case"members":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(membersSubcommand);telemetry2.trackCliSubcommandMembers(args[0]==="add"?"members add":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),exitCode2=await members(client,args);break;case"accessGroups":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(accessGroupsSubcommand);telemetry2.trackCliSubcommandAccessGroups(subcommandOriginal),exitCode2=await accessGroups(client,args);break;case"protection":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(protectionSubcommand);telemetry2.trackCliSubcommandProtection(args[0]==="enable"?"protection enable":args[0]==="disable"?"protection disable":subcommandOriginal),exitCode2=await protection(client,args);break;case"webAnalytics":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(webAnalyticsSubcommand);telemetry2.trackCliSubcommandWebAnalytics(args[0]==="enable"?"web-analytics enable":args[0]==="disable"?"web-analytics disable":subcommandOriginal),exitCode2=await webAnalytics(client,args);break;case"speedInsights":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(speedInsightsSubcommand);telemetry2.trackCliSubcommandSpeedInsights(args[0]==="enable"?"speed-insights enable":args[0]==="disable"?"speed-insights disable":subcommandOriginal),exitCode2=await speedInsights(client,args);break;case"pause":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(pauseSubcommand);telemetry2.trackCliSubcommandPause(subcommandOriginal),exitCode2=await pause2(client,args);break;case"dangerously-delete-immutable-static-asset":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(dangerouslyDeleteImmutableStaticAssetSubcommand);telemetry2.trackCliSubcommandDangerouslyDeleteImmutableStaticAsset(subcommandOriginal),exitCode2=await dangerouslyDeleteImmutableStaticAsset(client,args);break;case"observability":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(observabilitySubcommand);telemetry2.trackCliSubcommandObservability(args[0]==="enable"?"observability enable":args[0]==="disable"?"observability disable":subcommandOriginal),exitCode2=await observability(client,args);break;case"resume":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(resumeSubcommand);telemetry2.trackCliSubcommandResume(subcommandOriginal),exitCode2=await resume2(client,args);break;case"token":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(tokenSubcommand2);telemetry2.trackCliSubcommandToken(subcommandOriginal),exitCode2=await getOidcToken(client,args);break;case"rename":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(renameSubcommand);telemetry2.trackCliSubcommandRename(subcommandOriginal),exitCode2=await rename(client,args);break;case"update":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(updateSubcommand8);telemetry2.trackCliSubcommandUpdate(subcommandOriginal),exitCode2=await update6(client,args);break;case"remove":if(needHelp)return telemetry2.trackCliFlagHelp("project",subcommandOriginal),printHelp(removeSubcommand13);telemetry2.trackCliSubcommandRemove(subcommandOriginal),exitCode2=await rm9(client,args);break;default:{if(handleCommandTypo({client,command:parsedArgs.args[1],availableCommands:projectCommand.subcommands}))return 2;let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForProjectsCli);if(fallback!==null){exitCode2=fallback;break}return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG53)),output_manager_default.print(help(projectCommand,{columns:client.stderr.columns})),2}}return exitCode2===0&&await autoInstallVercelPlugin(client),exitCode2}var import_ms32=__toESM(require_ms(),1);var import_error_utils20=__toESM(require_dist(),1);var import_chalk270=__toESM(require_source(),1);var import_chalk267=__toESM(require_source(),1);async function getProjectByDeployment({client,deployId}){let{config}=client,contextName=await getContextName(client);if(!isValidName(deployId))throw new Error(`The provided argument "${deployId}" is not a valid deployment ID or URL`);let deployment,team;try{output_manager_default?.spinner(`Fetching deployment "${deployId}" in ${import_chalk267.default.bold(contextName)}\u2026`);let[teamResult,deploymentResult]=await Promise.allSettled([config.currentTeam?getTeamByIdOrSlug(client,config.currentTeam):void 0,getDeployment(client,contextName,deployId)]);if(teamResult.status==="rejected")throw new Error(`Failed to retrieve team information: ${teamResult.reason}`);if(deploymentResult.status==="rejected")throw new Error(deploymentResult.reason);if(team=teamResult.value,deployment=deploymentResult.value,output_manager_default?.log(`Fetching deployment "${deployId}" in ${import_chalk267.default.bold(contextName)}\u2026`),deployment.team?.id){if(!team||deployment.team.id!==team.id){let err=new Error(team?`Deployment doesn't belong to current team ${import_chalk267.default.bold(contextName)}`:"Deployment belongs to a different team");throw err.code="ERR_INVALID_TEAM",err}}else if(team){let err=new Error(`Deployment doesn't belong to current team ${import_chalk267.default.bold(contextName)}`);throw err.code="ERR_INVALID_TEAM",err}if(!deployment.projectId)throw new Error("Deployment is not associated to a project");let project=await getProjectByNameOrId(client,deployment.projectId);if(project instanceof ProjectNotFound)throw project;return{contextName,deployment,project}}finally{output_manager_default?.stopSpinner()}}var import_ms31=__toESM(require_ms(),1);var import_chalk269=__toESM(require_source(),1);var import_ms30=__toESM(require_ms(),1);var import_chalk268=__toESM(require_source(),1);function renderAliasStatus(status6){return status6==="completed"?import_chalk268.default.green(status6):status6==="failed"?import_chalk268.default.red(status6):status6==="skipped"?import_chalk268.default.gray(status6):import_chalk268.default.yellow(status6)}async function requestRollingRelease({client,projectId,teamId}){let{rollingRelease:rollingRelease2}=await client.fetch(`/v1/projects/${projectId}/rolling-release?teamId=${teamId}`);return rollingRelease2}async function promoteStatus({client,contextName,deployment,project,timeout="3m"}){let recentThreshold=Date.now()-(0,import_ms30.default)("3m"),promoteTimeout=Date.now()+(0,import_ms30.default)(timeout),counter=0,spinnerMessage=deployment?"Promote in progress":`Checking promotion 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;if(projectCheck.rollingRelease){output_manager_default.log("Rolling Releases enabled \u2026");let rr=await requestRollingRelease({client,projectId:project.id,teamId:project.accountId});if(rr.activeStage)return output_manager_default.stopSpinner(),output_manager_default.log(`Rolling Release serving traffic at initial percentage ${rr.activeStage.targetPercentage}`),0;continue}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 promotion in progress"),0;if(jobStatus==="skipped"&&type==="promote")return output_manager_default.log("Promote deployment was skipped"),0;if(jobStatus==="succeeded")return await renderJobSucceeded({client,contextName,performingPromote:!!deployment,requestedAt,project,toDeploymentId});if(jobStatus==="failed")return await renderJobFailed({client,contextName,deployment,project,toDeploymentId});if(jobStatus!=="pending"&&jobStatus!=="in-progress")return output_manager_default.log(`Unknown promote deployment status "${jobStatus}"`),1;if(requestedAt<recentThreshold||Date.now()>=promoteTimeout)return output_manager_default.log(`The promotion exceeded its deadline - rerun ${import_chalk269.default.bold(`${packageName} promote ${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 renderJobFailed({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}/promote/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 renderJobSucceeded({client,contextName,performingPromote,project,requestedAt,toDeploymentId}){let deploymentInfo="";try{let deployment=await getDeployment(client,contextName,toDeploymentId);deploymentInfo=`${import_chalk269.default.bold(deployment.url)} (${toDeploymentId})`}catch(err){output_manager_default.debug(`Failed to get deployment url for ${toDeploymentId}: ${err?.toString()||err}`),deploymentInfo=import_chalk269.default.bold(toDeploymentId)}let duration=performingPromote?elapsed(Date.now()-requestedAt):"";return output_manager_default.log(`Success! ${import_chalk269.default.bold(project.name)} was promoted to ${deploymentInfo} ${duration}`),0}async function requestPromote({client,deployId,timeout,yes}){let{contextName,deployment,project}=await getProjectByDeployment({client,deployId}),promoteByCreation=!1;if(deployment.target!=="production")if(yes)promoteByCreation=!0;else{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:project.name,target:"production",meta:{action:"promote"}},accountId:deployment.ownerId,method:"POST"});return output_manager_default.log(`Successfully created new deployment of ${import_chalk270.default.bold(project.name)} at ${newDeployment.inspectorUrl}`),0}return(await client.fetch(`/v10/projects/${project.id}/promote/${deployment.id}`,{body:{},json:!1,method:"POST"})).status===202?(output_manager_default.log("Promotion has been queued and will begin when the active rolling release completes successfully."),0):timeout!==void 0&&(0,import_ms31.default)(timeout)===0?(output_manager_default.log(`Successfully requested promote of ${import_chalk270.default.bold(project.name)} to ${deployment.url} (${deployment.id})`),output_manager_default.log(`To check promote status, run ${getCommandName("promote")}.`),0):await promoteStatus({client,contextName,deployment,project,timeout})}var PromoteTelemetryClient=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 promote_default=async client=>{let parsedArgs,flagsSpecification=getFlagsSpecification(promoteCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let telemetry2=new PromoteTelemetryClient({opts:{store:client.telemetryEventStore}}),needHelp=parsedArgs.flags["--help"];if(!parsedArgs.args[1]&&needHelp)return telemetry2.trackCliFlagHelp("promote"),output_manager_default.print(help(promoteCommand,{columns:client.stderr.columns})),2;let yes=parsedArgs.flags["--yes"]??!1;telemetry2.trackCliFlagYes(parsedArgs.flags["--yes"]);let timeout=parsedArgs.flags["--timeout"];if(timeout&&(0,import_ms32.default)(timeout)===void 0)return output_manager_default.error(`Invalid timeout "${timeout}"`),1;telemetry2.trackCliOptionTimeout(parsedArgs.flags["--timeout"]);let actionOrDeployId=parsedArgs.args[1]||"status";try{if(actionOrDeployId==="status"){if(needHelp)return telemetry2.trackCliFlagHelp("promote","status"),output_manager_default.print(help(statusSubcommand3,{columns:client.stderr.columns,parent:promoteCommand})),2;telemetry2.trackCliSubcommandStatus();let project=await getProjectByCwdOrLink({autoConfirm:parsedArgs.flags["--yes"],client,commandName:"promote",projectNameOrId:parsedArgs.args[2]});return await promoteStatus({client,project,timeout})}return telemetry2.trackCliArgumentUrlOrDeploymentId(actionOrDeployId),await requestPromote({client,deployId:actionOrDeployId,timeout,yes})}catch(err){if((0,import_error_utils20.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}};var import_chalk272=__toESM(require_source(),1),import_client=__toESM(require_dist3(),1);var import_chalk271=__toESM(require_source(),1);async function getDeploymentByIdOrURL({client,contextName,deployIdOrUrl}){let{config}=client;if(!isValidName(deployIdOrUrl))throw new Error(`The provided argument "${deployIdOrUrl}" is not a valid deployment ID or URL`);let deployment,team;try{output_manager_default.spinner(`Fetching deployment "${deployIdOrUrl}" in ${import_chalk271.default.bold(contextName)}\u2026`);let[teamResult,deploymentResult]=await Promise.allSettled([config.currentTeam?getTeamByIdOrSlug(client,config.currentTeam):void 0,getDeployment(client,contextName,deployIdOrUrl)]);if(teamResult.status==="rejected")throw new Error(`Failed to retrieve team information: ${teamResult.reason}`);if(deploymentResult.status==="rejected")throw new Error(deploymentResult.reason.message);team=teamResult.value,deployment=deploymentResult.value,output_manager_default.log(`Fetching deployment "${deployIdOrUrl}" in ${import_chalk271.default.bold(contextName)}\u2026`)}finally{output_manager_default.stopSpinner()}if(deployment.team?.id){if(!team||deployment.team.id!==team.id){let err=new Error(team?`Deployment doesn't belong to current team ${import_chalk271.default.bold(contextName)}`:"Deployment belongs to a different team");throw err.code="ERR_INVALID_TEAM",err}}else if(team){let err=new Error(`Deployment doesn't belong to current team ${import_chalk271.default.bold(contextName)}`);throw err.code="ERR_INVALID_TEAM",err}return deployment}var import_error_utils21=__toESM(require_dist(),1);var RedeployTelemetryClient=class extends TelemetryClient{trackCliArgumentUrlOrDeploymentId(value){value&&this.trackCliArgument({arg:"urlOrDeploymentId",value:this.redactedValue})}trackCliFlagNoWait(noWait){noWait&&this.trackCliFlag("no-wait")}trackCliOptionTarget(target){target&&this.trackCliArgument({arg:"target",value:this.redactedTargetName(target)})}};async function redeploy(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(redeployCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),1}let telemetry2=new RedeployTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("redeploy"),output_manager_default.print(help(redeployCommand,{columns:client.stderr.columns})),2;let deployIdOrUrl=parsedArgs.args[1];if(!deployIdOrUrl)return output_manager_default.error(`Missing required deployment id or url: ${getCommandName("redeploy <deployment-id-or-url>")}`),1;telemetry2.trackCliArgumentUrlOrDeploymentId(deployIdOrUrl),telemetry2.trackCliFlagNoWait(parsedArgs.flags["--no-wait"]),telemetry2.trackCliOptionTarget(parsedArgs.flags["--target"]);let contextName=await getContextName(client),noWait=!!parsedArgs.flags["--no-wait"],targetArgument=parsedArgs.flags["--target"];try{let fromDeployment=await getDeploymentByIdOrURL({client,contextName,deployIdOrUrl}),target,customEnvironmentSlugOrId;targetArgument?targetArgument==="staging"||targetArgument==="production"?target=targetArgument:targetArgument==="preview"?target=void 0:targetArgument?(customEnvironmentSlugOrId=targetArgument,target=void 0):target=fromDeployment.target:(target=fromDeployment.target??void 0,customEnvironmentSlugOrId=fromDeployment.customEnvironment?.id);let customEnvironment;if(fromDeployment?.projectId&&customEnvironmentSlugOrId){let customEnvironments=await getCustomEnvironments(client,fromDeployment.projectId);customEnvironment=pickCustomEnvironment(customEnvironments,customEnvironmentSlugOrId)}if(customEnvironmentSlugOrId&&!customEnvironment)return output_manager_default.error(`The provided argument "${targetArgument}" is not a valid target environment.`),1;let deployStamp=stamp_default();output_manager_default.spinner(`Redeploying project ${fromDeployment.id}`,0);let deployment=await client.fetch("/v13/deployments?forceNew=1",{body:{deploymentId:fromDeployment.id,meta:{action:"redeploy"},name:fromDeployment.name,target,customEnvironmentSlugOrId},method:"POST"});output_manager_default.stopSpinner();let previewUrl=`https://${deployment.url}`,isProdDeployment=target==="production";if(customEnvironmentSlugOrId&&customEnvironment&&(isProdDeployment=customEnvironment.type==="production"),printAlignedLabel("Inspect",import_chalk272.default.cyan(deployment.inspectorUrl)),printAlignedLabel(isProdDeployment?"Production":"Preview",import_chalk272.default.cyan(previewUrl),isProdDeployment&&noWait?{gutter:"\u25B2"}:{}),client.stdout.isTTY||client.stdout.write(`https://${deployment.url}`),!noWait){output_manager_default.spinner(deployment.readyState==="QUEUED"?"Queued\u2026":"Building\u2026",0);let project,rollingRelease2;if(deployment.projectId&&deployment.projectId!=""&&(project=await getProjectByNameOrId(client,deployment.projectId),rollingRelease2=project?.rollingRelease),deployment.readyState==="READY"&&deployment.aliasAssigned&&!rollingRelease2){if(output_manager_default.spinner("Completing\u2026",0),deployment.target==="production"&&deployment.alias&&deployment.alias.length>0){output_manager_default.stopSpinner();let prodUrl=`https://${deployment.alias[0]}`;printAlignedLabel("Aliased",import_chalk272.default.cyan(prodUrl),{gutter:"\u25B2"})}}else try{let clientOptions={dispatcher:getFetchDispatcher(),apiUrl:client.apiUrl,debug:output_manager_default.debugEnabled,path:"",teamId:fromDeployment.team?.id,token:client.authConfig.token,userAgent:ua_default};for await(let event of(0,import_client.checkDeploymentStatus)(deployment,clientOptions))if(event.type==="building")output_manager_default.spinner("Building\u2026",0);else if(event.type==="ready"&&rollingRelease2){output_manager_default.spinner("Releasing\u2026",0),output_manager_default.stopSpinner(),deployment=event.payload;break}else if(event.type==="ready"&&(!event.payload.checksState||event.payload.checksState==="completed"))output_manager_default.spinner("Completing\u2026",0);else if(event.type==="checks-running")output_manager_default.spinner("Running Checks\u2026",0);else if(event.type==="alias-assigned"||event.type==="checks-conclusion-failed"){if(output_manager_default.stopSpinner(),event.type==="alias-assigned"&&!Array.isArray(event.payload)&&event.payload.target==="production"&&event.payload.alias&&event.payload.alias.length>0){let prodUrl=`https://${event.payload.alias[0]}`;printAlignedLabel("Aliased",import_chalk272.default.cyan(prodUrl),{gutter:"\u25B2"})}deployment=event.payload;break}else{if(event.type==="canceled")return output_manager_default.stopSpinner(),output_manager_default.print(`The deployment has been canceled.
1171
1171
  `),1;if(event.type==="error")throw output_manager_default.stopSpinner(),await new Now({client,currentTeam:fromDeployment.team?.id}).handleDeploymentError(event.payload,{env:{}})}}catch(err){output_manager_default.prettyError(err),process.exit(1)}}return printDeploymentStatus(client,deployment,deployStamp,noWait,!1)}catch(err){return output_manager_default.prettyError(err),(0,import_error_utils21.isErrnoException)(err)&&err.code==="ERR_INVALID_TEAM"&&output_manager_default.error(`Use ${import_chalk272.default.bold("vc switch")} to change your current team`),1}}var import_chalk273=__toESM(require_source(),1),import_pluralize21=__toESM(require_pluralize(),1);function withGlobalFlags4(client,commandTemplate){return withGlobalFlags(client,commandTemplate,{preserveProject:!0})}async function parseSubcommandArgs3(argv,command2){let parsedArgs;try{parsedArgs=parseSubcommandArguments(argv,command2)}catch(err){return printError(err),1}return parsedArgs}async function confirmAction2(client,skipConfirmation,message,details){return skipConfirmation?!0:(details&&output_manager_default.print(` ${details}
1172
1172
  `),await client.input.confirm(message,!1))}function isValidUrl(url){if(url.startsWith("/"))return!0;try{let parsed=new URL(url);return parsed.protocol==="http:"||parsed.protocol==="https:"}catch{return!1}}function getArgsAfterRedirectsSubcommand(fullArgs,subcommand){let idx=fullArgs.indexOf(subcommand);return idx>=0?fullArgs.slice(idx+1):[]}function getRedirectGlobalFlagsOnly(afterSubcommandArgs){return getGlobalFlagsFromArgs(afterSubcommandArgs,{preserveProject:!0})}function getRedirectPromoteSuggestionFlags(afterSubcommandArgs){let parts=getRedirectGlobalFlagsOnly(afterSubcommandArgs);return parts.some(p=>p==="--yes"||p==="-y")||parts.push("--yes"),parts}function buildRedirectsSuggestionFlags(fullArgs,subcommand,options={}){let after=getArgsAfterRedirectsSubcommand(fullArgs,subcommand),flagParts=getSameSubcommandSuggestionFlags(after);return options.ensureYes!==!1&&!flagParts.some(a=>a==="--yes"||a==="-y")&&flagParts.push("--yes"),flagParts}async function getRedirects(client,projectId,options={}){let{teamId,search:search3,page,perPage=50,versionId,diff:diff2}=options,params=new URLSearchParams;params.set("projectId",projectId),teamId&&params.set("teamId",teamId),versionId&&params.set("versionId",versionId),diff2?params.set("diff",diff2===!0?"true":diff2):(params.set("per_page",perPage.toString()),search3&&params.set("q",search3),page&&params.set("page",page.toString()));let url=`/v1/bulk-redirects?${params}`;return await client.fetch(url)}async function getRedirectVersions(client,projectId,teamId){let params=new URLSearchParams;params.set("projectId",projectId),teamId&&params.set("teamId",teamId);let url=`/v1/bulk-redirects/versions?${params}`;return await client.fetch(url)}async function list22(client,argv){let parsed=await parseSubcommandArgs3(argv,listSubcommand19);if(typeof parsed=="number")return parsed;let link=await requireProjectContext(client,"redirects",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"],page=flags["--next"]??flags["--page"],perPage=flags["--limit"]??flags["--per-page"],staging=flags["--staging"],versionIdFlag=flags["--version"],versionId,versionName,useDiff=!1;if(staging){output_manager_default.spinner("Fetching staging version");let{versions:versions2}=await getRedirectVersions(client,project.id,teamId),stagingVersion=versions2.find(v=>v.isStaging);if(!stagingVersion)return output_manager_default.error(`No staging version found for ${import_chalk273.default.bold(project.name)}. Run ${import_chalk273.default.cyan(withGlobalFlags4(client,"redirects list-versions"))} to see available versions.`),1;versionId=stagingVersion.id,versionName=stagingVersion.name||stagingVersion.id,!search3&&!page&&(useDiff=!0)}if(versionIdFlag){if(staging)return output_manager_default.error("Cannot use both --staging and --version flags together"),1;output_manager_default.spinner("Fetching version");let{versions:versions2}=await getRedirectVersions(client,project.id,teamId),version2=versions2.find(v=>v.id===versionIdFlag||v.name===versionIdFlag);if(!version2)return output_manager_default.error(`Version "${versionIdFlag}" not found. Run ${import_chalk273.default.cyan(withGlobalFlags4(client,"redirects list-versions"))} to see available versions.`),1;versionId=version2.id,versionName=version2.name||version2.id}let lsStamp=stamp_default(),spinnerMessage=`Fetching redirects for ${import_chalk273.default.bold(project.name)}`;versionName&&(spinnerMessage+=` (version: ${versionName})`),search3&&(spinnerMessage+=` matching "${search3}"`),output_manager_default.spinner(spinnerMessage);let{redirects,pagination}=await getRedirects(client,project.id,{teamId,search:search3,page,perPage,versionId,diff:useDiff});if(useDiff){let added=redirects.filter(r=>r.action==="+"),removed=redirects.filter(r=>r.action==="-"),unchanged=redirects.filter(r=>!r.action);output_manager_default.log(`Changes in staging version ${import_chalk273.default.bold(versionName||"")} ${import_chalk273.default.gray(lsStamp())}`),added.length===0&&removed.length===0?output_manager_default.log(`
1173
1173
  No changes from production version
@@ -1304,7 +1304,7 @@ ${import_chalk279.default.gray("No changes detected from current production vers
1304
1304
  `),output_manager_default.print(` ${import_chalk286.default.gray("ID:")} ${route.id}
1305
1305
  `),output_manager_default.print(`
1306
1306
  ${import_chalk286.default.bold("Staging version:")} ${version2.id}
1307
- `),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_CONFIG56={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),1}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG56),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("routes"),output_manager_default.print(help(routesCommand,{columns:client.stderr.columns})),2;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),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list23(client,args));case"list-versions":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(listVersionsSubcommand2),2):(telemetry2.trackCliSubcommandListVersions(subcommandOriginal),listVersions3(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(inspectSubcommand13),2):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect18(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(addSubcommand10),2):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add13(client,args));case"edit":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(editSubcommand2),2):(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-PNIFJF2H.js")).default(client,args));case"delete":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(deleteSubcommand3),2):(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-GYK2QMZA.js")).default(client,args));case"enable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(enableSubcommand3),2):(telemetry2.trackCliSubcommandEnable(subcommandOriginal),(await import("./chunks/enable-HZFCTROZ.js")).default(client,args));case"disable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(disableSubcommand3),2):(telemetry2.trackCliSubcommandDisable(subcommandOriginal),(await import("./chunks/disable-SFNXBFOL.js")).default(client,args));case"reorder":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(reorderSubcommand),2):(telemetry2.trackCliSubcommandReorder(subcommandOriginal),(await import("./chunks/reorder-LLR3OV6E.js")).default(client,args));case"export":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(exportSubcommand),2):(telemetry2.trackCliSubcommandExport(subcommandOriginal),(await import("./chunks/export-QOTSGWFE.js")).default(client,args));case"publish":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(publishSubcommand2),2):(telemetry2.trackCliSubcommandPublish(subcommandOriginal),(await import("./chunks/publish-JTCJ6Z5K.js")).default(client,args));case"restore":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(restoreSubcommand2),2):(telemetry2.trackCliSubcommandRestore(subcommandOriginal),(await import("./chunks/restore-U4EWQAAZ.js")).default(client,args));case"discard-staging":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(discardSubcommand2),2):(telemetry2.trackCliSubcommandDiscardStaging(subcommandOriginal),(await import("./chunks/discard-QX7SXCDX.js")).default(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG56)),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{trackCliSubcommandGet(actual){this.trackCliSubcommand({subcommand:"get",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):(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"}]}),1):(output_manager_default.fatal(message),1)}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)}
1307
+ `),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_CONFIG56={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),1}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand7(subArgs,COMMAND_CONFIG56),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("routes"),output_manager_default.print(help(routesCommand,{columns:client.stderr.columns})),2;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),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list23(client,args));case"list-versions":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(listVersionsSubcommand2),2):(telemetry2.trackCliSubcommandListVersions(subcommandOriginal),listVersions3(client,args));case"inspect":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(inspectSubcommand13),2):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect18(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(addSubcommand10),2):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add13(client,args));case"edit":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(editSubcommand2),2):(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-Z5RCWPOX.js")).default(client,args));case"delete":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(deleteSubcommand3),2):(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-75SYJKNE.js")).default(client,args));case"enable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(enableSubcommand3),2):(telemetry2.trackCliSubcommandEnable(subcommandOriginal),(await import("./chunks/enable-HI2UH2NM.js")).default(client,args));case"disable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(disableSubcommand3),2):(telemetry2.trackCliSubcommandDisable(subcommandOriginal),(await import("./chunks/disable-OUYOHEWN.js")).default(client,args));case"reorder":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(reorderSubcommand),2):(telemetry2.trackCliSubcommandReorder(subcommandOriginal),(await import("./chunks/reorder-FBUQ5ET7.js")).default(client,args));case"export":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(exportSubcommand),2):(telemetry2.trackCliSubcommandExport(subcommandOriginal),(await import("./chunks/export-CMP3APAJ.js")).default(client,args));case"publish":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(publishSubcommand2),2):(telemetry2.trackCliSubcommandPublish(subcommandOriginal),(await import("./chunks/publish-5QKVU6YV.js")).default(client,args));case"restore":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(restoreSubcommand2),2):(telemetry2.trackCliSubcommandRestore(subcommandOriginal),(await import("./chunks/restore-LYY4BSYJ.js")).default(client,args));case"discard-staging":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(discardSubcommand2),2):(telemetry2.trackCliSubcommandDiscardStaging(subcommandOriginal),(await import("./chunks/discard-RXSHOY3J.js")).default(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG56)),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{trackCliSubcommandGet(actual){this.trackCliSubcommand({subcommand:"get",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):(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"}]}),1):(output_manager_default.fatal(message),1)}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)}
1308
1308
  `)}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)}
1309
1309
  `)}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)}
1310
1310
  `)}else output_manager_default.success(message);return 0}var import_chalk287=__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})}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"}]}),1):(output_manager_default.fatal(message),1)}function capitalize(value){return`${value.charAt(0).toUpperCase()}${value.slice(1)}`}function formatExecutionStatus(status6){return status6==="succeeded"?import_chalk287.default.green("Succeeded"):status6==="failed"?import_chalk287.default.red("Failed"):import_chalk287.default.gray("Unavailable")}function formatPercentage3(value){return value===null?import_chalk287.default.gray("-"):`${Number((value*100).toFixed(2))}%`}function formatDuration3(value){return value===null?import_chalk287.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(`
@@ -1388,7 +1388,7 @@ ${tablePrint}
1388
1388
  `),output_manager_default.log(`To display the next page run ${cmd(nextCmd)}`)}}return 0}var import_chalk307=__toESM(require_source(),1);var import_chalk306=__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_utils23=__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)},1),printError(error),1}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)"}]},1),1}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)}.
1389
1389
  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_chalk306.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_chalk306.default.cyan(chars_default.tick)} ${email3}${userInfo2?` (${userInfo2})`:""} ${elapsed2()}`)}else output_manager_default.log(`${import_chalk306.default.red(`\u2716 ${email3}`)} ${import_chalk306.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_utils23.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_chalk306.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_chalk306.default.bold(currentTeam.name)}`);for(let email3 of emails)output_manager_default.log(`${import_chalk306.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_utils23.errorToString)(err)),hasError=!0;for(let email3 of emails)output_manager_default.log(`${import_chalk306.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_chalk306.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_utils24=__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_chalk307.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_utils24.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils24.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_chalk307.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()?`
1390
1390
  `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils24.errorToString)(err)}function formatCreateTeamErrorPlain(err,slug){let isAbort=(0,import_error_utils24.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils24.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()?`
1391
- `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils24.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_utils24.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)},1),printError(error),1}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),addIdx=fullArgs.indexOf("add"),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams add --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"}]},1)}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 add --slug <slug> --name <name>")}]},1),output_manager_default.error(msg),1}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},1),output_manager_default.error(msg),1}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_utils24.errorToString)(err)},1),output_manager_default.error((0,import_error_utils24.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.config.currentTeam=team2.id,writeToConfigFile(client.config),output_manager_default.success(`Team ${import_chalk307.default.bold(team2.name)} (${import_chalk307.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_chalk307.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils24.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_chalk307.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
1391
+ `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils24.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_utils24.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)},1),printError(error),1}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"}]},1)}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>")}]},1),output_manager_default.error(msg),1}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},1),output_manager_default.error(msg),1}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_utils24.errorToString)(err)},1),output_manager_default.error((0,import_error_utils24.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.config.currentTeam=team2.id,writeToConfigFile(client.config),output_manager_default.success(`Team ${import_chalk307.default.bold(team2.name)} (${import_chalk307.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_chalk307.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils24.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_chalk307.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
1392
1392
  `),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_utils24.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_chalk307.default.cyan(`${chars_default.tick} `)+teamNamePrefix+team.name}
1393
1393
  `),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_chalk308=__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)},1),printError(error),1}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"}]},1),1}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_chalk308.default.bold("(current)")}`),team.limited&&(title6+=` ${emoji("locked")}`),{name:title6,value:team.slug,short:team.slug,selected}}),suffix=personalScopeSelected?` ${import_chalk308.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"}]},1),1}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_chalk308.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_chalk308.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_chalk308.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)},1),printError(error),1}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)"}]},1)}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},1),output_manager_default.error(formatResult.error),1;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)}
1394
1394
  `),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_chalk309=__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),1}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let{jsonOutput}=formatResult;function fail(reason,message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),1):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
@@ -1401,7 +1401,7 @@ Please select a team scope using ${getCommandName("switch")} or use ${cmd("--sco
1401
1401
  `),0):(printAlignedLabel("Removed",label,{gutter:"\u2713"}),printAlignedLabel("Team",teamLabel),0)}catch{return fail(AGENT_REASON.API_ERROR,requiresInvoiceRecipient?"Invoice recipient updated, but the team member was not removed. Try removing them again.":"Failed to remove the team member. Try again.")}}async function members2(client,argv){if(argv[0]==="invite")return invite(client,argv.slice(1));if(argv[0]==="remove"||argv[0]==="rm")return membersRemove2(client,argv.slice(1));let parsedArgs,flagsSpecification=getFlagsSpecification(membersSubcommand2.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)},1),printError(error),1}let next=parsedArgs.flags["--next"],limit=parsedArgs.flags["--limit"],formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(typeof next<"u"&&!Number.isInteger(next))return output_manager_default.error("Please provide a number for flag `--next`"),1;try{getPaginationOpts(parsedArgs.flags)}catch(error){return output_manager_default.error(error instanceof Error?error.message:String(error)),1}let teamId=client.config.currentTeam;if(!teamId)return output_manager_default.error("Team scope is required. Run `vercel teams switch <slug>` or pass `--scope`."),1;let query=new URLSearchParams({limit:String(limit??20)});next&&query.set("until",String(next));let result=await client.fetch(`/v2/teams/${teamId}/members?${query}`),members3=result.members||[],{pagination}=result;if(asJson)return client.stdout.write(`${JSON.stringify({members:members3,pagination},null,2)}
1402
1402
  `),0;let rows=[["uid","Identity","Role"].map(str=>(0,import_chalk309.gray)(str)),...members3.map(member=>[member.uid,member.username||member.email||"",member.role||""])];if(client.stderr.write(`${table(rows,{hsep:3})}
1403
1403
  `),pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["--next","-N"]),nextCmd=`${packageName} teams members${flags} --next ${pagination.next}`;output_manager_default.log(`To display the next page run ${cmd(nextCmd)}`)}return 0}var import_chalk310=__toESM(require_source(),1);async function sso(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(ssoSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let{team}=await getScope(client);if(!team)return output_manager_default.error("No team context. Run `vercel switch` or use --scope."),1;try{let full=await client.fetch(`/teams/${encodeURIComponent(team.id)}`),payload={teamId:full.id,slug:full.slug,name:full.name,saml:full.saml??null};return formatResult.jsonOutput?(client.stdout.write(`${JSON.stringify(payload,null,2)}
1404
- `),0):(output_manager_default.log(`${import_chalk310.default.bold("Team")} ${full.name} (${import_chalk310.default.cyan(full.slug)})`),full.saml?(output_manager_default.log(`${import_chalk310.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`),full.saml.connection?.state&&output_manager_default.log(`${import_chalk310.default.cyan("Connection state:")} ${full.saml.connection.state}`)):output_manager_default.log("No SAML configuration on this team (or not visible to your token)."),0)}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`API error (${err.status})`),1;throw err}}var TeamsTelemetryClient=class extends TelemetryClient{trackCliSubcommandInvite(actual){actual&&this.trackCliSubcommand({subcommand:"invite",value:actual})}trackCliSubcommandAdd(actual){actual&&this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandSwitch(actual){actual&&this.trackCliSubcommand({subcommand:"switch",value:actual})}trackCliSubcommandList(actual){actual&&this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRequest(actual){actual&&this.trackCliSubcommand({subcommand:"request",value:actual})}trackCliSubcommandSso(actual){actual&&this.trackCliSubcommand({subcommand:"sso",value:actual})}trackCliSubcommandMembers(actual){actual&&this.trackCliSubcommand({subcommand:"members",value:actual})}};var COMMAND_CONFIG62={list:["ls","list"],switch:["switch","change"],add:["create","add"],invite:["invite"],request:["request","access-request"],sso:["sso"],members:["members","member"]};async function teams(client){let telemetry2=new TeamsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(teamsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},1),printError(error),1}parsedArgs.args[0]==="switch"&&parsedArgs.args.unshift("teams");let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG62),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("teams",subcommand),output_manager_default.print(help(teamsCommand,{columns:client.stderr.columns})),2;function printHelp(command2){output_manager_default.print(help(command2,{parent:teamsCommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(listSubcommand24),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list28(client,args));case"switch":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(switchSubcommand),2):(telemetry2.trackCliSubcommandSwitch(subcommandOriginal),change(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(addSubcommand11),2):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add14(client,args));case"invite":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(inviteSubcommand),2):(telemetry2.trackCliSubcommandInvite(subcommandOriginal),invite(client,args));case"request":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(requestSubcommand),2):(telemetry2.trackCliSubcommandRequest(subcommandOriginal),request(client,args));case"sso":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(ssoSubcommand),2):(telemetry2.trackCliSubcommandSso(subcommandOriginal),sso(client,args));case"members":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),args[0]==="invite"?(printHelp(membersInviteSubcommand),2):args[0]==="remove"||args[0]==="rm"?(printHelp(membersRemoveSubcommand),2):(printHelp(membersSubcommand2),2)):(telemetry2.trackCliSubcommandMembers(args[0]==="invite"?"members invite":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),members2(client,args));default:{let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForTeamsCli);return fallback!==null?fallback:(output_manager_default.error("Please specify a valid subcommand: add | ls | switch | invite | request | sso | members"),output_manager_default.print(help(teamsCommand,{columns:client.stderr.columns})),2)}}}var import_chalk311=__toESM(require_source(),1);async function ls10(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand25.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be between 1 and 100."),1;let next=parsedArgs.flags["--next"],params=new URLSearchParams;typeof limit=="number"&&params.set("limit",String(limit)),typeof next=="string"&&params.set("until",next);let qs=params.toString(),path3=`/v6/user/tokens${qs?`?${qs}`:""}`,result=await client.fetch(path3,{useCurrentTeam:!1}),tokens=result.tokens||[];if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
1404
+ `),0):(output_manager_default.log(`${import_chalk310.default.bold("Team")} ${full.name} (${import_chalk310.default.cyan(full.slug)})`),full.saml?(output_manager_default.log(`${import_chalk310.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`),full.saml.connection?.state&&output_manager_default.log(`${import_chalk310.default.cyan("Connection state:")} ${full.saml.connection.state}`)):output_manager_default.log("No SAML configuration on this team (or not visible to your token)."),0)}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`API error (${err.status})`),1;throw err}}var TeamsTelemetryClient=class extends TelemetryClient{trackCliSubcommandInvite(actual){actual&&this.trackCliSubcommand({subcommand:"invite",value:actual})}trackCliSubcommandCreate(actual){actual&&this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandSwitch(actual){actual&&this.trackCliSubcommand({subcommand:"switch",value:actual})}trackCliSubcommandList(actual){actual&&this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRequest(actual){actual&&this.trackCliSubcommand({subcommand:"request",value:actual})}trackCliSubcommandSso(actual){actual&&this.trackCliSubcommand({subcommand:"sso",value:actual})}trackCliSubcommandMembers(actual){actual&&this.trackCliSubcommand({subcommand:"members",value:actual})}};var COMMAND_CONFIG62={list:["ls","list"],switch:["switch","change"],add:["create","add"],invite:["invite"],request:["request","access-request"],sso:["sso"],members:["members","member"]};async function teams(client){let telemetry2=new TeamsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(teamsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},1),printError(error),1}parsedArgs.args[0]==="switch"&&parsedArgs.args.unshift("teams");let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG62),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("teams",subcommand),output_manager_default.print(help(teamsCommand,{columns:client.stderr.columns})),2;function printHelp(command2){output_manager_default.print(help(command2,{parent:teamsCommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(listSubcommand24),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list28(client,args));case"switch":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(switchSubcommand),2):(telemetry2.trackCliSubcommandSwitch(subcommandOriginal),change(client,args));case"add":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(addSubcommand11),2):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),add14(client,args));case"invite":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(inviteSubcommand),2):(telemetry2.trackCliSubcommandInvite(subcommandOriginal),invite(client,args));case"request":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(requestSubcommand),2):(telemetry2.trackCliSubcommandRequest(subcommandOriginal),request(client,args));case"sso":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),printHelp(ssoSubcommand),2):(telemetry2.trackCliSubcommandSso(subcommandOriginal),sso(client,args));case"members":return needHelp?(telemetry2.trackCliFlagHelp("teams",subcommandOriginal),args[0]==="invite"?(printHelp(membersInviteSubcommand),2):args[0]==="remove"||args[0]==="rm"?(printHelp(membersRemoveSubcommand),2):(printHelp(membersSubcommand2),2)):(telemetry2.trackCliSubcommandMembers(args[0]==="invite"?"members invite":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),members2(client,args));default:{let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForTeamsCli);return fallback!==null?fallback:(output_manager_default.error("Please specify a valid subcommand: add | ls | switch | invite | request | sso | members"),output_manager_default.print(help(teamsCommand,{columns:client.stderr.columns})),2)}}}var import_chalk311=__toESM(require_source(),1);async function ls10(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand25.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be between 1 and 100."),1;let next=parsedArgs.flags["--next"],params=new URLSearchParams;typeof limit=="number"&&params.set("limit",String(limit)),typeof next=="string"&&params.set("until",next);let qs=params.toString(),path3=`/v6/user/tokens${qs?`?${qs}`:""}`,result=await client.fetch(path3,{useCurrentTeam:!1}),tokens=result.tokens||[];if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
1405
1405
  `),0;if(tokens.length===0)return output_manager_default.log("No tokens found."),0;let rows=[["id","name","type","active"].map(h=>(0,import_chalk311.gray)(h)),...tokens.map(t=>[t.id??"",t.name??"",t.type??"",t.active===void 0?"":String(t.active)])];if(client.stderr.write(`${table(rows,{hsep:2})}
1406
1406
  `),result.pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["_","--next","-N"]),nextCmd=`${packageName} tokens ls${flags} --next ${quoteArg(String(result.pagination.next))}`;output_manager_default.log(`To display the next page run ${cmd(nextCmd)}`)}return 0}var import_open19=__toESM(require_open(),1);import{KNOWN_AGENTS as KNOWN_AGENTS2}from"@vercel/detect-agent";var VERCEL_ACCOUNT_TOKENS_URL="https://vercel.com/account/tokens",CLASSIC_TOKEN_GUIDANCE=`Creating a new token requires a classic personal access token. Sessions from "vercel login" use OAuth and cannot call the create-token API.
1407
1407
 
@@ -1413,27 +1413,28 @@ What to do:
1413
1413
  Common cases:
1414
1414
  \u2022 Team-only, project-only, or limited product tokens (for example some "vcp_" tokens) cannot mint new tokens.
1415
1415
  \u2022 Create a new classic token in the dashboard (Account \u2192 Settings \u2192 Tokens) with access to your personal account / full token permissions.
1416
- \u2022 Then set VERCEL_TOKEN or use --token with that value and run this command again.`,USER_SCOPE_AGENT_HINT=`Creating a personal token requires a classic token that includes full user account scope. Team-scoped, project-scoped, or narrow product tokens are rejected with HTTP 403. Create a classic personal access token at ${VERCEL_ACCOUNT_TOKENS_URL} with account-level access, set VERCEL_TOKEN or --token, then re-run.`;function normalizeApiMessage(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function getSanitizedRerunCommand(client){let rerunArgs=stripSensitiveAuthArgs(client.argv.slice(2));return getCommandNamePlain(rerunArgs.join(" ").trim())}function isClassicTokenRequiredForCreateError(err){if(!isAPIError(err)||err.status!==403)return!1;let raw=err.serverMessage||err.message;return normalizeApiMessage(raw)==="Only user authentication tokens can be used to create new tokens."}function isTokenUserScopeRequiredError(err){return!isAPIError(err)||err.status!==403?!1:normalizeApiMessage(err.serverMessage||err.message).startsWith('To create a token you must be authenticated to scope "')}function tokensAddRecoveryNext(client,rerun2,rerunWhen){return[{command:openUrlInBrowserCommand(VERCEL_ACCOUNT_TOKENS_URL),when:"Open the Vercel dashboard to create a classic personal access token"},{command:"export VERCEL_TOKEN='<class_access_token>'",when:"Paste your classic token from the dashboard (replace <class_access_token>); on Windows use set VERCEL_TOKEN=<class_access_token> in cmd or $env:VERCEL_TOKEN in PowerShell"},{command:rerun2,when:rerunWhen}]}async function openTokensDashboardInBrowser(client){let isCursorAgent=client.agentName===KNOWN_AGENTS2.CURSOR||client.agentName===KNOWN_AGENTS2.CURSOR_CLI;if(!(process.env.CI&&!isCursorAgent))try{(await(0,import_open19.default)(VERCEL_ACCOUNT_TOKENS_URL))?.on?.("error",()=>{})}catch{}}async function add15(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand12.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args}=parsedArgs,name=args[0]?.trim();if(!name)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:'Token name is required. Example: `vercel tokens add "My token"`'},1),output_manager_default.error('Token name is required. Example: `vercel tokens add "My token"`'),1;if(args.length>1)return output_manager_default.error("Too many arguments. Pass a single token name."),1;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,projectId=parsedArgs.flags["--project"],body={name};typeof projectId=="string"&&projectId.length>0&&(body.projectId=projectId);let result;try{result=await client.fetch("/v3/user/tokens",{method:"POST",body,useCurrentTeam:!1})}catch(err){if(isClassicTokenRequiredForCreateError(err)){await openTokensDashboardInBrowser(client);let rerun2=getSanitizedRerunCommand(client);return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.CLASSIC_TOKEN_REQUIRED,message:"Creating tokens requires a classic personal access token; OAuth login cannot create new tokens.",userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:CLASSIC_TOKEN_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun2,"Re-run after the token is set (or use --token <class_access_token> instead of export)")},1),output_manager_default.error(CLASSIC_TOKEN_GUIDANCE),1}if(isTokenUserScopeRequiredError(err)){await openTokensDashboardInBrowser(client);let rerun2=getSanitizedRerunCommand(client),apiMessage=normalizeApiMessage(isAPIError(err)?err.serverMessage||err.message:String(err));return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.TOKEN_USER_SCOPE_REQUIRED,message:apiMessage,userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:USER_SCOPE_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun2,"Re-run with a classic token that has full user account scope (or pass --token <class_access_token>)")},1),output_manager_default.error(USER_SCOPE_GUIDANCE),output_manager_default.error(""),output_manager_default.error(apiMessage),1}return printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(result,null,2)}
1416
+ \u2022 Then set VERCEL_TOKEN or use --token with that value and run this command again.`,USER_SCOPE_AGENT_HINT=`Creating a personal token requires a classic token that includes full user account scope. Team-scoped, project-scoped, or narrow product tokens are rejected with HTTP 403. Create a classic personal access token at ${VERCEL_ACCOUNT_TOKENS_URL} with account-level access, set VERCEL_TOKEN or --token, then re-run.`;function normalizeApiMessage(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function getSanitizedRerunCommand(client){let rerunArgs=stripSensitiveAuthArgs(client.argv.slice(2));return getCommandNamePlain(rerunArgs.join(" ").trim())}function isClassicTokenRequiredForCreateError(err){if(!isAPIError(err)||err.status!==403)return!1;let raw=err.serverMessage||err.message;return normalizeApiMessage(raw)==="Only user authentication tokens can be used to create new tokens."}function isTokenUserScopeRequiredError(err){return!isAPIError(err)||err.status!==403?!1:normalizeApiMessage(err.serverMessage||err.message).startsWith('To create a token you must be authenticated to scope "')}function tokensAddRecoveryNext(client,rerun2,rerunWhen){return[{command:openUrlInBrowserCommand(VERCEL_ACCOUNT_TOKENS_URL),when:"Open the Vercel dashboard to create a classic personal access token"},{command:"export VERCEL_TOKEN='<class_access_token>'",when:"Paste your classic token from the dashboard (replace <class_access_token>); on Windows use set VERCEL_TOKEN=<class_access_token> in cmd or $env:VERCEL_TOKEN in PowerShell"},{command:rerun2,when:rerunWhen}]}async function openTokensDashboardInBrowser(client){let isCursorAgent=client.agentName===KNOWN_AGENTS2.CURSOR||client.agentName===KNOWN_AGENTS2.CURSOR_CLI;if(!(process.env.CI&&!isCursorAgent))try{(await(0,import_open19.default)(VERCEL_ACCOUNT_TOKENS_URL))?.on?.("error",()=>{})}catch{}}async function add15(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand12.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args}=parsedArgs,name=args[0]?.trim();if(!name)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:'Token name is required. Example: `vercel tokens create "My token"`'},1),output_manager_default.error('Token name is required. Example: `vercel tokens create "My token"`'),1;if(args.length>1)return output_manager_default.error("Too many arguments. Pass a single token name."),1;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,projectId=parsedArgs.flags["--project"],body={name};typeof projectId=="string"&&projectId.length>0&&(body.projectId=projectId);let result;try{result=await client.fetch("/v3/user/tokens",{method:"POST",body,useCurrentTeam:!1})}catch(err){if(isClassicTokenRequiredForCreateError(err)){await openTokensDashboardInBrowser(client);let rerun2=getSanitizedRerunCommand(client);return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.CLASSIC_TOKEN_REQUIRED,message:"Creating tokens requires a classic personal access token; OAuth login cannot create new tokens.",userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:CLASSIC_TOKEN_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun2,"Re-run after the token is set (or use --token <class_access_token> instead of export)")},1),output_manager_default.error(CLASSIC_TOKEN_GUIDANCE),1}if(isTokenUserScopeRequiredError(err)){await openTokensDashboardInBrowser(client);let rerun2=getSanitizedRerunCommand(client),apiMessage=normalizeApiMessage(isAPIError(err)?err.serverMessage||err.message:String(err));return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.TOKEN_USER_SCOPE_REQUIRED,message:apiMessage,userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:USER_SCOPE_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun2,"Re-run with a classic token that has full user account scope (or pass --token <class_access_token>)")},1),output_manager_default.error(USER_SCOPE_GUIDANCE),output_manager_default.error(""),output_manager_default.error(apiMessage),1}return printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(result,null,2)}
1417
1417
  `),0):(output_manager_default.success("Token created. Save the value below \u2014 it will not be shown again."),result.bearerToken&&output_manager_default.log(result.bearerToken),result.token?.id&&output_manager_default.log(`id: ${result.token.id}`),0)}async function rm10(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand15.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let id2=parsedArgs.args[0];if(!id2)return outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Token id is required. Example: `vercel tokens rm tok_abc123`",hint:"Run `tokens ls` to list ids, then pass the id to `tokens rm`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"tokens ls"),when:"List personal access token ids for the current account"},{command:buildCommandWithGlobalFlags(client.argv,"tokens rm <token_id>"),when:"Remove a token after replacing <token_id> with an id from the list"}]},1),output_manager_default.error("Token id is required. Example: `vercel tokens rm tok_abc123`"),1;if(parsedArgs.args.length>1)return output_manager_default.error("Too many arguments. Pass a single token id."),1;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput;return await client.fetch(`/v3/user/tokens/${encodeURIComponent(id2)}`,{method:"DELETE",useCurrentTeam:!1}),asJson?(client.stdout.write(`${JSON.stringify({ok:!0,id:id2},null,2)}
1418
- `),0):(output_manager_default.success(`Removed token ${id2}`),0)}var TokensTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG63={add:["add","create"],remove:["rm","remove","delete"],ls:["ls","list"]};async function main35(client){let parsedArgs,flagsSpecification=getFlagsSpecification(tokensCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),1}let telemetry2=new TokensTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG63),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("tokens"),output_manager_default.print(help(tokensCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:tokensCommand,columns:client.stderr.columns})),2}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(addSubcommand12)):(telemetry2.trackCliSubcommandAdd(subcommandOriginal),add15(client,args));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(removeSubcommand15)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm10(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(listSubcommand25)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls10(client,args))}}var import_chalk312=__toESM(require_source(),1);async function status4(client){let enabled=client.config.telemetry?.enabled!==!1,status6=enabled?import_chalk312.default.green("Enabled"):import_chalk312.default.red("Disabled");output_manager_default.print(`
1418
+ `),0):(output_manager_default.success(`Removed token ${id2}`),0)}var TokensTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG63={add:["add","create"],remove:["rm","remove","delete"],ls:["ls","list"]};async function main35(client){let parsedArgs,flagsSpecification=getFlagsSpecification(tokensCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),1}let telemetry2=new TokensTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG63),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("tokens"),output_manager_default.print(help(tokensCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:tokensCommand,columns:client.stderr.columns})),2}switch(subcommand){case"add":return needHelp?(telemetry2.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(addSubcommand12)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),add15(client,args));case"remove":return needHelp?(telemetry2.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(removeSubcommand15)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm10(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(listSubcommand25)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls10(client,args))}}var import_chalk312=__toESM(require_source(),1);async function status4(client){let enabled=client.config.telemetry?.enabled!==!1,status6=enabled?import_chalk312.default.green("Enabled"):import_chalk312.default.red("Disabled");output_manager_default.print(`
1419
1419
  `),output_manager_default.log(`${import_chalk312.default.bold("Telemetry status")}: ${status6}
1420
1420
  `);let learnMoreMessage=`
1421
1421
 
1422
1422
  Learn more: ${import_chalk312.default.cyan("https://vercel.com/docs/cli/about-telemetry")}`;return enabled?output_manager_default.log(`You have opted in to Vercel CLI telemetry${learnMoreMessage}`):(output_manager_default.log("You have opted out of Vercel CLI telemetry"),output_manager_default.log(`No data will be collected from your machine${learnMoreMessage}`)),0}async function enable5(client){return client.config={...client.config,telemetry:{...client.config.telemetry,enabled:!0}},writeToConfigFile(client.config),await status4(client),0}async function disable5(client){return client.config={...client.config,telemetry:{...client.config.telemetry,enabled:!1}},writeToConfigFile(client.config),await status4(client),0}import{randomUUID as randomUUID3}from"node:crypto";function configPreference(value){return value===void 0?"unset":value?"enabled":"disabled"}function getConfigTelemetryEvents(config){return[{key:"config_auto_update",value:configPreference(config.updates?.auto)},{key:"config_bypass_min_release_age",value:configPreference(config.updates?.bypassMinReleaseAge)},{key:"config_use_native_binary",value:configPreference(config.useNativeBinary)},{key:"config_credential_storage",value:config.credStorage??"unset"}]}import{createHash as createHash5,randomUUID as randomUUID2}from"node:crypto";import{mkdir as mkdir2,readFile as readFile10,realpath,rename as rename2,rm as rm11,writeFile as writeFile7}from"node:fs/promises";import{dirname as dirname8,join as join39,resolve as resolve13}from"node:path";function getPackageManagerInstallCommand(context,version2="latest"){if(context.upgradeCommand===void 0)throw context.upgradeError;return context.upgradeCommand.includes("@latest")?context.upgradeCommand.replace("@latest",`@${version2}`):context.upgradeCommand}async function resolvePackageManagerContext(version2,runtime,options){try{let info=await getUpdateCommandInfo(void 0,options.signal);return{version:version2,runtime,manager:"package-manager",canSwitchVersions:!1,packageManager:info.packageManager,packageManagerAssumed:info.assumed,global:info.global,upgradeCommand:info.command}}catch(error){if(options.signal?.aborted)throw error;let upgradeError=error instanceof Error?error:new Error("Could not detect a supported global npm, pnpm, Yarn, or Bun installation of Vercel CLI. Update it with the package manager that installed it.");return{version:version2,runtime,manager:"package-manager",canSwitchVersions:!1,packageManager:void 0,packageManagerAssumed:!1,global:void 0,upgradeCommand:void 0,upgradeError}}}async function getVersionContext(options={}){let version2=pkg_default.version,runtime=isNativeBinaryInstall()?"native":"node";if(await isCurlInstall()){let installRoot=getInstallRoot(),state=await readNativeInstallState(installRoot);return{version:version2,runtime:"native",manager:"installer",canSwitchVersions:!0,installRoot,track:state?.track,slot:state?.slot,activeVersion:state?.version,pendingProduction:state?.pendingProduction,prBuild:state?.track==="pr"&&state.pr?{number:state.pr,sha:state.buildSha}:void 0}}return resolvePackageManagerContext(version2,runtime,options)}function describeRuntime(context){return context.runtime==="native"?"native binary":"Node.js"}function describeManager(context){if(context.manager==="installer")return`Vercel installer (${context.installRoot})`;if(context.global===void 0)return"package manager (unsupported installation)";let scope=context.global?"global":"local";return context.packageManagerAssumed?`package manager (assumed ${context.packageManager}, ${scope})`:`package manager (${context.packageManager}, ${scope})`}var VERSION_CONTEXT_TIMEOUT_MS=1e4;function getVersionContextTelemetryEvents(context){let events=[{key:"version_context_status",value:context.status},{key:"version_context_source",value:context.source}];return context.status!=="resolved"||(events.push({key:"version_context_runtime",value:context.runtime},{key:"version_context_manager",value:context.manager}),context.manager==="installer"?events.push({key:"version_context_track",value:context.track},{key:"version_context_slot",value:context.slot}):events.push({key:"version_context_package_manager",value:context.packageManager},{key:"version_context_package_manager_assumed",value:String(context.packageManagerAssumed)},{key:"version_context_global",value:String(context.global)})),events}async function collectVersionContextForTelemetry(timeoutMs=VERSION_CONTEXT_TIMEOUT_MS){let controller=new AbortController,timeout=setTimeout(()=>{controller.abort(new Error("Version context collection timed out"))},timeoutMs);timeout.unref();try{let context=await getVersionContext({signal:controller.signal});return context.manager==="installer"?{status:"resolved",source:"detected",runtime:context.runtime,manager:context.manager,track:context.track??"legacy",slot:context.slot??"legacy"}:{status:"resolved",source:"detected",runtime:context.runtime,manager:context.manager,packageManager:context.packageManager??"unknown",packageManagerAssumed:context.packageManagerAssumed,global:context.global??"unknown"}}catch{return{status:controller.signal.aborted?"cancelled":"error",source:"detected"}}finally{clearTimeout(timeout)}}var VERSION_CONTEXT_CACHE_MAX_AGE_MS=7*24*60*60*1e3,VERSION_CONTEXT_FAILURE_CACHE_MAX_AGE_MS=60*60*1e3,VERSION_CONTEXT_CACHE_SCHEMA_VERSION=1,VERSION_CONTEXT_CACHE_MAX_INSTALLATIONS=20,VERSION_CONTEXT_CACHE_LOCK_WAIT_MS=250;function isResolvedVersionContext(value){if(!value||typeof value!="object")return!1;let context=value;return context.status!=="resolved"||context.source!=="detected"&&context.source!=="cache"||context.runtime!=="native"&&context.runtime!=="node"?!1:context.manager==="installer"?(context.track==="production"||context.track==="pr"||context.track==="legacy")&&(context.slot==="a"||context.slot==="b"||context.slot==="legacy"):context.manager==="package-manager"&&typeof context.packageManagerAssumed=="boolean"&&typeof context.packageManager=="string"&&(typeof context.global=="boolean"||context.global==="unknown")}function isVersionContext(value){if(isResolvedVersionContext(value))return!0;if(!value||typeof value!="object")return!1;let context=value;return(context.status==="cancelled"||context.status==="error")&&(context.source==="detected"||context.source==="cache")}async function readVersionContextCache(filePath){try{let value=JSON.parse(await readFile10(filePath,"utf8"));if(value.schemaVersion===VERSION_CONTEXT_CACHE_SCHEMA_VERSION&&value.installations&&typeof value.installations=="object")return{schemaVersion:VERSION_CONTEXT_CACHE_SCHEMA_VERSION,installations:value.installations}}catch{}return{schemaVersion:VERSION_CONTEXT_CACHE_SCHEMA_VERSION,installations:{}}}async function writeVersionContextCache(filePath,cache){let temporaryPath=`${filePath}.${process.pid}.${randomUUID2()}.tmp`;try{await mkdir2(dirname8(filePath),{recursive:!0}),await writeFile7(temporaryPath,`${JSON.stringify(cache,null,2)}
1423
- `,{flag:"wx",mode:384}),await rename2(temporaryPath,filePath)}finally{await rm11(temporaryPath,{force:!0}).catch(()=>{})}}function getFreshContext(cache,installationKey,currentTime,maxAgeMs,failureMaxAgeMs){let cached=cache.installations[installationKey];if(!cached||!isVersionContext(cached.context))return;let contextMaxAgeMs=cached.context.status==="resolved"?maxAgeMs:failureMaxAgeMs;if(Number.isFinite(cached.collectedAt)&&currentTime-cached.collectedAt<=contextMaxAgeMs)return{...cached.context,source:"cache"}}function boundedInstallations(installations){return Object.fromEntries(Object.entries(installations).sort(([,left],[,right])=>right.collectedAt-left.collectedAt).slice(0,VERSION_CONTEXT_CACHE_MAX_INSTALLATIONS))}function getVersionContextCacheFilePath(globalConfigDirectory=getGlobalPathConfig()){return join39(globalConfigDirectory,"telemetry-version-context.json")}async function getVersionContextInstallationKey(){let runtime=isNativeBinaryInstall()?"native":"node",entrypoint=runtime==="native"?process.execPath:process.argv[1],canonicalEntrypoint=await realpath(entrypoint).catch(()=>resolve13(entrypoint));return createHash5("sha256").update(`${runtime}\0${canonicalEntrypoint}`).digest("hex")}async function collectCachedVersionContextForTelemetry({cacheFilePath=getVersionContextCacheFilePath(),failureMaxAgeMs=VERSION_CONTEXT_FAILURE_CACHE_MAX_AGE_MS,installationKey,maxAgeMs=VERSION_CONTEXT_CACHE_MAX_AGE_MS,now=Date.now,timeoutMs=VERSION_CONTEXT_TIMEOUT_MS}={}){let key=installationKey??await getVersionContextInstallationKey(),currentTime=now(),initialCache=await readVersionContextCache(cacheFilePath),initialContext=getFreshContext(initialCache,key,currentTime,maxAgeMs,failureMaxAgeMs);if(initialContext)return initialContext;try{return await withDirectoryLock(`${cacheFilePath}.lock`,async()=>{let cache=await readVersionContextCache(cacheFilePath),contextAfterLock=getFreshContext(cache,key,currentTime,maxAgeMs,failureMaxAgeMs);if(contextAfterLock)return contextAfterLock;let context=await collectVersionContextForTelemetry(timeoutMs);try{cache.installations[key]={collectedAt:currentTime,context:{...context,source:"detected"}},cache.installations=boundedInstallations(cache.installations),await writeVersionContextCache(cacheFilePath,cache)}catch{}return context},{waitMs:VERSION_CONTEXT_CACHE_LOCK_WAIT_MS,retryMs:25,abandonedAfterMs:3e4,busyMessage:()=>"Version context cache is busy"})}catch{let cache=await readVersionContextCache(cacheFilePath);return getFreshContext(cache,key,currentTime,maxAgeMs,failureMaxAgeMs)??{status:"cancelled",source:"detected"}}}var TELEMETRY_FLUSH_TIMEOUT_MS=1e4;async function flush(client,args,{timeoutMs=TELEMETRY_FLUSH_TIMEOUT_MS}={}){let url=process.env.VERCEL_TELEMETRY_BRIDGE_URL||"https://telemetry.vercel.com/api/vercel-cli/v1/events",{headers,body}=JSON.parse(args[0]),versionContext=await collectCachedVersionContextForTelemetry().catch(()=>({status:"error",source:"detected"})),firstEvent=body[0],contextEvents=[...getVersionContextTelemetryEvents(versionContext),...getConfigTelemetryEvents(client.config)];for(let event of contextEvents)body.push({id:randomUUID3(),event_time:Date.now(),team_id:firstEvent?.team_id,user_id:firstEvent?.user_id,project_id:firstEvent?.project_id,...event});let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),timeoutMs),response;try{response=await fetch2(url,{method:"POST",headers,body:JSON.stringify(body),signal:controller.signal});let status6=response.status,wasRecorded=(response.headers.get("x-vercel-cli-tracked")||"")==="1";return status6===204?wasRecorded?process.stderr.write("Telemetry event tracked"):process.stderr.write("Telemetry event ignored"):process.stderr.write(`Failed to send telemetry events. Unexpected response from telemetry server: ${status6}`),0}catch(error){return error instanceof Error&&process.stderr.write(`Failed to send telemetry events. ${error.message}`),1}finally{response?.body?.cancel().catch(()=>{}),clearTimeout(timeout)}}var TelemetryTelemetryClient=class extends TelemetryClient{trackCliSubcommandStatus(actual){this.trackCliSubcommand({subcommand:"status",value:actual})}trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandDisable(_){}trackCliSubcommandFlush(_){}};var import_chalk313=__toESM(require_source(),1);var COMMAND_CONFIG64={status:getCommandAliases(statusSubcommand6),enable:getCommandAliases(enableSubcommand5),disable:getCommandAliases(disableSubcommand5),flush:getCommandAliases(flushSubcommand)};async function telemetry(client){let telemetryClient=new TelemetryTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(telemetryCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArguments.args.slice(1),COMMAND_CONFIG64),needHelp=parsedArguments.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:telemetryCommand}))}if(!subcommand&&needHelp)return telemetryClient.trackCliFlagHelp("telemetry",subcommand),output_manager_default.print(help(telemetryCommand,{columns:client.stderr.columns})),2;switch(subcommand){case"status":return needHelp?(telemetryClient.trackCliFlagHelp("telemetry",subcommandOriginal),printHelp(statusSubcommand6),2):(telemetryClient.trackCliSubcommandStatus(subcommandOriginal),status4(client));case"flush":return flush(client,args);case"enable":return needHelp?(telemetryClient.trackCliFlagHelp("telemetry",subcommandOriginal),printHelp(enableSubcommand5),2):(telemetryClient.trackCliSubcommandEnable(subcommandOriginal),enable5(client));case"disable":return needHelp?(telemetryClient.trackCliFlagHelp("telemetry",subcommandOriginal),printHelp(disableSubcommand5),2):disable5(client);default:{let errorMessage2=parsedArguments.args.length!==2?"Invalid number of arguments":"Invalid subcommand";return output_manager_default.print(`${import_chalk313.default.red("Error")}: ${errorMessage2}. See help instructions for usage:
1424
- `),output_manager_default.print(help(telemetryCommand,{columns:client.stderr.columns})),2}}}var TracesTelemetryClient=class extends TelemetryClient{trackCliArgumentRequestId(requestId){requestId&&this.trackCliArgument({arg:"requestId",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionProject(project){project&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagOpen(open18){open18&&this.trackCliFlag("open")}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliOptionEnvironment(value){this.trackRedactedOption("environment",value)}trackCliOptionService(value){this.trackRedactedOption("service",value)}trackCliOptionName(value){this.trackRedactedOption("name",value)}trackCliOptionKind(value){this.trackRedactedOption("kind",value)}trackCliOptionStatus(value){this.trackRedactedOption("status",value)}trackCliOptionDeploymentId(value){this.trackRedactedOption("deployment-id",value)}trackCliOptionRequestId(value){this.trackRedactedOption("request-id",value)}trackCliOptionTraceId(value){this.trackRedactedOption("trace-id",value)}trackCliOptionSpanId(value){this.trackRedactedOption("span-id",value)}trackCliFlagRoot(root){root&&this.trackCliFlag("root")}trackCliOptionSince(value){this.trackRedactedOption("since",value)}trackCliOptionUntil(value){this.trackRedactedOption("until",value)}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionQuery(value){this.trackRedactedOption("query",value)}trackCliOptionColumns(value){this.trackRedactedOption("columns",value)}trackRedactedOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackCliOptionView(view){view&&this.trackCliOption({option:"view",value:view})}};var import_open20=__toESM(require_open(),1);var OBSERVABILITY_API_URL="https://vercel.com/api/observability-api/",QUERY_REASON_HEADER="x-vercel-observability-query-reason",QUERY_REASON="cli/traces-get",QueryEngineResponseError=class extends Error{constructor(message){super(message),this.name="QueryEngineResponseError"}};async function fetchTrace({client,teamId,projectId,requestId}){return fetchQueryEngineTrace({client,teamId,projectId,requestId})}async function fetchQueryEngineTrace({client,teamId,projectId,requestId}){let traceUrl=new URL(`v1/traces/requests/${encodeURIComponent(requestId)}`,OBSERVABILITY_API_URL);traceUrl.searchParams.set("teamId",teamId),traceUrl.searchParams.set("projectId",projectId);let response=await client.fetch(traceUrl.href,{headers:{[QUERY_REASON_HEADER]:QUERY_REASON}});return{trace:mapTrace(response),partial:isRecord4(response.meta)&&response.meta.partial===!0}}function mapTrace(response){if(!isRecord4(response)||typeof response.traceId!="string"||!Array.isArray(response.spans))throw new QueryEngineResponseError("Observability API returned an invalid resolved trace.");return{traceId:response.traceId,...typeof response.rootSpanId=="string"?{rootSpanId:response.rootSpanId}:{},spans:response.spans.map(mapSpan)}}function mapSpan(value){if(!isRecord4(value)||typeof value.spanId!="string")throw new QueryEngineResponseError("Observability API returned an invalid trace span.");if(typeof value.name!="string"||typeof value.durationMs!="number")throw new QueryEngineResponseError("Observability API returned an invalid trace span.");let timestamp2=parseTimestamp(value.timestamp),attributes=isRecord4(value.attributes)?value.attributes:void 0,status6=isRecord4(value.status)?value.status:void 0,statusCode=status6?.code==="ERROR"?1:0,statusMessage=typeof status6?.message=="string"?status6.message:void 0;return{spanId:value.spanId,...typeof value.parentSpanId=="string"&&value.parentSpanId?{parentSpanId:value.parentSpanId}:{},name:value.name,duration:durationTuple(value.durationMs),startTime:timestampTuple(timestamp2),...attributes?{attributes}:{},status:{code:statusCode,...statusMessage?{message:statusMessage}:{}}}}function parseTimestamp(value){if(typeof value!="string")throw new QueryEngineResponseError("Observability API returned an invalid trace timestamp.");let timestamp2=Date.parse(value);if(!Number.isFinite(timestamp2))throw new QueryEngineResponseError("Observability API returned an invalid trace timestamp.");return timestamp2}function durationTuple(durationMs){let nanoseconds=Math.round(durationMs*1e6);if(!Number.isSafeInteger(nanoseconds)||nanoseconds<0)throw new QueryEngineResponseError("Observability API returned an invalid span duration.");return[Math.floor(nanoseconds/1e9),nanoseconds%1e9]}function timestampTuple(timestampMs){let seconds=Math.floor(timestampMs/1e3);return[seconds,(timestampMs-seconds*1e3)*1e6]}function isRecord4(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var ATTR_HINT_KEYS=["http.url","http.target","db.statement","http.status_code"];function tupleToUs(tuple){if(!tuple||tuple.length!==2)return null;let[seconds,nanoseconds]=tuple;return typeof seconds!="number"||typeof nanoseconds!="number"?null:seconds*1e6+nanoseconds/1e3}function getDurationUs(span){let us=tupleToUs(span.duration);return us===null?null:us<0?0:us}function getStartTimeUs(span){return tupleToUs(span.startTime)}function readAttrString(attributes,key){let value=attributes?.[key];if(typeof value=="string")return value;if(typeof value=="number")return String(value)}function resolveRootSpan(trace3){if(trace3.spans.length!==0){if(trace3.rootSpanId){let match=trace3.spans.find(span=>span.spanId===trace3.rootSpanId);if(match)return match}return trace3.spans[0]}}function compareByStart(a,b){let startA=getStartTimeUs(a),startB=getStartTimeUs(b);return startA===null&&startB===null?0:startA===null?1:startB===null?-1:startA-startB}function analyze(trace3){let root=resolveRootSpan(trace3),rootDurationUs=root?getDurationUs(root):null,rootStartUs=root?getStartTimeUs(root):null,spansById=new Map;for(let span of trace3.spans)spansById.set(span.spanId,span);let childrenByParent=new Map;for(let span of trace3.spans){if(!span.parentSpanId||!spansById.has(span.parentSpanId))continue;let list30=childrenByParent.get(span.parentSpanId);list30?list30.push(span):childrenByParent.set(span.parentSpanId,[span])}for(let list30 of childrenByParent.values())list30.sort(compareByStart);let spanInfo=new Map;for(let span of trace3.spans){let durationUs=getDurationUs(span),children=childrenByParent.get(span.spanId)??[],childTotalUs=0;for(let child of children){let cd=getDurationUs(child);cd!==null&&(childTotalUs+=cd)}let selfTimeUs=durationUs===null?null:Math.max(0,durationUs-childTotalUs),startOffsetUs=null;if(rootStartUs!==null){let startUs=getStartTimeUs(span);startUs!==null&&(startOffsetUs=Math.max(0,startUs-rootStartUs))}spanInfo.set(span.spanId,{span,durationUs,selfTimeUs,startOffsetUs})}let visited=new Set,treeOrder=[],truncatedAtDepth=!1;root&&(truncatedAtDepth=walkTree(root,0,childrenByParent,visited,treeOrder)||truncatedAtDepth);let orphanOrder=[],orphanRoots=trace3.spans.filter(span=>!visited.has(span.spanId)&&(!span.parentSpanId||!spansById.has(span.parentSpanId))).sort(compareByStart);for(let orphan of orphanRoots)truncatedAtDepth=walkTree(orphan,0,childrenByParent,visited,orphanOrder)||truncatedAtDepth;for(let span of trace3.spans)visited.has(span.spanId)||(orphanOrder.push({span,depth:0}),visited.add(span.spanId));let errorSpans=trace3.spans.filter(span=>span.status?.code===1),byName=new Map;for(let span of trace3.spans){let name=span.name||"<unnamed>",durationUs=getDurationUs(span)??0,entry2=byName.get(name);entry2?(entry2.count+=1,entry2.totalUs+=durationUs):byName.set(name,{count:1,totalUs:durationUs})}let repeatedOps=[];for(let[name,{count:count2,totalUs}]of byName)count2>=2&&repeatedOps.push({name,count:count2,totalUs,perCallUs:totalUs/count2});return repeatedOps.sort((a,b)=>b.totalUs-a.totalUs),{trace:trace3,root,rootDurationUs,rootStartUs,spanInfo,treeOrder,orphanOrder,errorSpans,repeatedOps,truncatedAtDepth}}function walkTree(span,depth,childrenByParent,visited,out){if(visited.has(span.spanId))return!1;if(visited.add(span.spanId),depth>=256)return out.push({span,depth}),!0;out.push({span,depth});let truncated=!1,children=childrenByParent.get(span.spanId)??[];for(let child of children)truncated=walkTree(child,depth+1,childrenByParent,visited,out)||truncated;return truncated}var UNKNOWN="<unknown>",UNNAMED="<unnamed>",ATTR_VALUE_MAX_LEN=80,TRACE_ID_MAX_LEN=13;function renderMarkdown(trace3,options){let analysis=analyze(trace3),sections=[];return sections.push(renderHeader(analysis,options)),analysis.errorSpans.length>0&&sections.push(renderErrors(analysis)),analysis.repeatedOps.length>0&&sections.push(renderRepeatedOps(analysis)),sections.push(renderTree(analysis)),`${sections.join(`
1423
+ `,{flag:"wx",mode:384}),await rename2(temporaryPath,filePath)}finally{await rm11(temporaryPath,{force:!0}).catch(()=>{})}}function getFreshContext(cache,installationKey,currentTime,maxAgeMs,failureMaxAgeMs){let cached=cache.installations[installationKey];if(!cached||!isVersionContext(cached.context))return;let contextMaxAgeMs=cached.context.status==="resolved"?maxAgeMs:failureMaxAgeMs;if(Number.isFinite(cached.collectedAt)&&currentTime-cached.collectedAt<=contextMaxAgeMs)return{...cached.context,source:"cache"}}function boundedInstallations(installations){return Object.fromEntries(Object.entries(installations).sort(([,left],[,right])=>right.collectedAt-left.collectedAt).slice(0,VERSION_CONTEXT_CACHE_MAX_INSTALLATIONS))}function getVersionContextCacheFilePath(globalConfigDirectory=getGlobalPathConfig()){return join39(globalConfigDirectory,"telemetry-version-context.json")}async function getVersionContextInstallationKey(){let runtime=isNativeBinaryInstall()?"native":"node",entrypoint=runtime==="native"?process.execPath:process.argv[1],canonicalEntrypoint=await realpath(entrypoint).catch(()=>resolve13(entrypoint));return createHash5("sha256").update(`${runtime}\0${canonicalEntrypoint}`).digest("hex")}async function collectCachedVersionContextForTelemetry({cacheFilePath=getVersionContextCacheFilePath(),failureMaxAgeMs=VERSION_CONTEXT_FAILURE_CACHE_MAX_AGE_MS,installationKey,maxAgeMs=VERSION_CONTEXT_CACHE_MAX_AGE_MS,now=Date.now,timeoutMs=VERSION_CONTEXT_TIMEOUT_MS}={}){let key=installationKey??await getVersionContextInstallationKey(),currentTime=now(),initialCache=await readVersionContextCache(cacheFilePath),initialContext=getFreshContext(initialCache,key,currentTime,maxAgeMs,failureMaxAgeMs);if(initialContext)return initialContext;try{return await withDirectoryLock(`${cacheFilePath}.lock`,async()=>{let cache=await readVersionContextCache(cacheFilePath),contextAfterLock=getFreshContext(cache,key,currentTime,maxAgeMs,failureMaxAgeMs);if(contextAfterLock)return contextAfterLock;let context=await collectVersionContextForTelemetry(timeoutMs);try{cache.installations[key]={collectedAt:currentTime,context:{...context,source:"detected"}},cache.installations=boundedInstallations(cache.installations),await writeVersionContextCache(cacheFilePath,cache)}catch{}return context},{waitMs:VERSION_CONTEXT_CACHE_LOCK_WAIT_MS,retryMs:25,abandonedAfterMs:3e4,busyMessage:()=>"Version context cache is busy"})}catch{let cache=await readVersionContextCache(cacheFilePath);return getFreshContext(cache,key,currentTime,maxAgeMs,failureMaxAgeMs)??{status:"cancelled",source:"detected"}}}var TELEMETRY_FLUSH_TIMEOUT_MS=1e4;async function flush(client,args,{timeoutMs=TELEMETRY_FLUSH_TIMEOUT_MS}={}){let url=process.env.VERCEL_TELEMETRY_BRIDGE_URL||"https://telemetry.vercel.com/api/vercel-cli/v1/events",{headers,body,invocationId}=JSON.parse(args[0]),versionContext=await collectCachedVersionContextForTelemetry().catch(()=>({status:"error",source:"detected"})),firstEvent=body[0],contextEvents=[...getVersionContextTelemetryEvents(versionContext),...getConfigTelemetryEvents(client.config)];for(let event of contextEvents)body.push({id:randomUUID3(),event_time:Date.now(),team_id:firstEvent?.team_id,user_id:firstEvent?.user_id,project_id:firstEvent?.project_id,...event});let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),timeoutMs),response;try{response=await fetch2(url,{method:"POST",headers,body:JSON.stringify(body.map(event=>invocationId&&event.invocation_id==null?{...event,invocation_id:invocationId}:event)),signal:controller.signal});let status6=response.status,wasRecorded=(response.headers.get("x-vercel-cli-tracked")||"")==="1";return status6===204?wasRecorded?process.stderr.write("Telemetry event tracked"):process.stderr.write("Telemetry event ignored"):process.stderr.write(`Failed to send telemetry events. Unexpected response from telemetry server: ${status6}`),0}catch(error){return error instanceof Error&&process.stderr.write(`Failed to send telemetry events. ${error.message}`),1}finally{response?.body?.cancel().catch(()=>{}),clearTimeout(timeout)}}var TelemetryTelemetryClient=class extends TelemetryClient{trackCliSubcommandStatus(actual){this.trackCliSubcommand({subcommand:"status",value:actual})}trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandDisable(_){}trackCliSubcommandFlush(_){}};var import_chalk313=__toESM(require_source(),1);var COMMAND_CONFIG64={status:getCommandAliases(statusSubcommand6),enable:getCommandAliases(enableSubcommand5),disable:getCommandAliases(disableSubcommand5),flush:getCommandAliases(flushSubcommand)};async function telemetry(client){let telemetryClient=new TelemetryTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(telemetryCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArguments.args.slice(1),COMMAND_CONFIG64),needHelp=parsedArguments.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:telemetryCommand}))}if(!subcommand&&needHelp)return telemetryClient.trackCliFlagHelp("telemetry",subcommand),output_manager_default.print(help(telemetryCommand,{columns:client.stderr.columns})),2;switch(subcommand){case"status":return needHelp?(telemetryClient.trackCliFlagHelp("telemetry",subcommandOriginal),printHelp(statusSubcommand6),2):(telemetryClient.trackCliSubcommandStatus(subcommandOriginal),status4(client));case"flush":return flush(client,args);case"enable":return needHelp?(telemetryClient.trackCliFlagHelp("telemetry",subcommandOriginal),printHelp(enableSubcommand5),2):(telemetryClient.trackCliSubcommandEnable(subcommandOriginal),enable5(client));case"disable":return needHelp?(telemetryClient.trackCliFlagHelp("telemetry",subcommandOriginal),printHelp(disableSubcommand5),2):disable5(client);default:{let errorMessage2=parsedArguments.args.length!==2?"Invalid number of arguments":"Invalid subcommand";return output_manager_default.print(`${import_chalk313.default.red("Error")}: ${errorMessage2}. See help instructions for usage:
1424
+ `),output_manager_default.print(help(telemetryCommand,{columns:client.stderr.columns})),2}}}var TracesTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id2,kind="requestId"){id2&&this.trackCliArgument({arg:kind,value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionProject(project){project&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagOpen(open18){open18&&this.trackCliFlag("open")}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliOptionEnvironment(value){this.trackRedactedOption("environment",value)}trackCliOptionService(value){this.trackRedactedOption("service",value)}trackCliOptionName(value){this.trackRedactedOption("name",value)}trackCliOptionKind(value){this.trackRedactedOption("kind",value)}trackCliOptionStatus(value){this.trackRedactedOption("status",value)}trackCliOptionDeploymentId(value){this.trackRedactedOption("deployment-id",value)}trackCliOptionRequestId(value){this.trackRedactedOption("request-id",value)}trackCliOptionTraceId(value){this.trackRedactedOption("trace-id",value)}trackCliOptionSpanId(value){this.trackRedactedOption("span-id",value)}trackCliFlagRoot(root){root&&this.trackCliFlag("root")}trackCliOptionSince(value){this.trackRedactedOption("since",value)}trackCliOptionUntil(value){this.trackRedactedOption("until",value)}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionQuery(value){this.trackRedactedOption("query",value)}trackCliOptionColumns(value){this.trackRedactedOption("columns",value)}trackRedactedOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackCliOptionView(view){view&&this.trackCliOption({option:"view",value:view})}};var import_chalk314=__toESM(require_source(),1),import_open20=__toESM(require_open(),1);var OBSERVABILITY_API_URL="https://vercel.com/api/observability-api/",QUERY_REASON_HEADER="x-vercel-observability-query-reason",QUERY_REASON="cli/traces-get",QueryEngineResponseError=class extends Error{constructor(message){super(message),this.name="QueryEngineResponseError"}};async function fetchTrace({client,teamId,projectId,requestId,traceId}){let traceUrl=new URL(traceId!==void 0?`v1/traces/${encodeURIComponent(traceId)}`:`v1/traces/requests/${encodeURIComponent(requestId)}`,OBSERVABILITY_API_URL);traceUrl.searchParams.set("teamId",teamId),traceUrl.searchParams.set("projectId",projectId);let response=await client.fetch(traceUrl.href,{headers:{[QUERY_REASON_HEADER]:QUERY_REASON}});return{trace:mapTrace(response),partial:isRecord4(response.meta)&&response.meta.partial===!0}}function mapTrace(response){if(!isRecord4(response)||typeof response.traceId!="string"||!Array.isArray(response.spans))throw new QueryEngineResponseError("Observability API returned an invalid resolved trace.");return{traceId:response.traceId,...typeof response.rootSpanId=="string"?{rootSpanId:response.rootSpanId}:{},spans:response.spans.map(mapSpan)}}function mapSpan(value){if(!isRecord4(value)||typeof value.spanId!="string")throw new QueryEngineResponseError("Observability API returned an invalid trace span.");if(typeof value.name!="string"||typeof value.durationMs!="number")throw new QueryEngineResponseError("Observability API returned an invalid trace span.");let timestamp2=parseTimestamp(value.timestamp),attributes=isRecord4(value.attributes)?value.attributes:void 0,status6=isRecord4(value.status)?value.status:void 0,statusCode=status6?.code==="ERROR"?1:0,statusMessage=typeof status6?.message=="string"?status6.message:void 0;return{spanId:value.spanId,...typeof value.parentSpanId=="string"&&value.parentSpanId?{parentSpanId:value.parentSpanId}:{},name:value.name,duration:durationTuple(value.durationMs),startTime:timestampTuple(timestamp2),...attributes?{attributes}:{},status:{code:statusCode,...statusMessage?{message:statusMessage}:{}}}}function parseTimestamp(value){if(typeof value!="string")throw new QueryEngineResponseError("Observability API returned an invalid trace timestamp.");let timestamp2=Date.parse(value);if(!Number.isFinite(timestamp2))throw new QueryEngineResponseError("Observability API returned an invalid trace timestamp.");return timestamp2}function durationTuple(durationMs){let nanoseconds=Math.round(durationMs*1e6);if(!Number.isSafeInteger(nanoseconds)||nanoseconds<0)throw new QueryEngineResponseError("Observability API returned an invalid span duration.");return[Math.floor(nanoseconds/1e9),nanoseconds%1e9]}function timestampTuple(timestampMs){let seconds=Math.floor(timestampMs/1e3);return[seconds,(timestampMs-seconds*1e3)*1e6]}function isRecord4(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var ATTR_HINT_KEYS=["http.url","http.target","db.statement","http.status_code"];function tupleToUs(tuple){if(!tuple||tuple.length!==2)return null;let[seconds,nanoseconds]=tuple;return typeof seconds!="number"||typeof nanoseconds!="number"?null:seconds*1e6+nanoseconds/1e3}function getDurationUs(span){let us=tupleToUs(span.duration);return us===null?null:us<0?0:us}function getStartTimeUs(span){return tupleToUs(span.startTime)}function readAttrString(attributes,key){let value=attributes?.[key];if(typeof value=="string")return value;if(typeof value=="number")return String(value)}function resolveRootSpan(trace3){if(trace3.spans.length!==0){if(trace3.rootSpanId){let match=trace3.spans.find(span=>span.spanId===trace3.rootSpanId);if(match)return match}return trace3.spans[0]}}function compareByStart(a,b){let startA=getStartTimeUs(a),startB=getStartTimeUs(b);return startA===null&&startB===null?0:startA===null?1:startB===null?-1:startA-startB}function analyze(trace3){let root=resolveRootSpan(trace3),rootDurationUs=root?getDurationUs(root):null,rootStartUs=root?getStartTimeUs(root):null,spansById=new Map;for(let span of trace3.spans)spansById.set(span.spanId,span);let childrenByParent=new Map;for(let span of trace3.spans){if(!span.parentSpanId||!spansById.has(span.parentSpanId))continue;let list30=childrenByParent.get(span.parentSpanId);list30?list30.push(span):childrenByParent.set(span.parentSpanId,[span])}for(let list30 of childrenByParent.values())list30.sort(compareByStart);let spanInfo=new Map;for(let span of trace3.spans){let durationUs=getDurationUs(span),children=childrenByParent.get(span.spanId)??[],childTotalUs=0;for(let child of children){let cd=getDurationUs(child);cd!==null&&(childTotalUs+=cd)}let selfTimeUs=durationUs===null?null:Math.max(0,durationUs-childTotalUs),startOffsetUs=null;if(rootStartUs!==null){let startUs=getStartTimeUs(span);startUs!==null&&(startOffsetUs=Math.max(0,startUs-rootStartUs))}spanInfo.set(span.spanId,{span,durationUs,selfTimeUs,startOffsetUs})}let visited=new Set,treeOrder=[],truncatedAtDepth=!1;root&&(truncatedAtDepth=walkTree(root,0,childrenByParent,visited,treeOrder)||truncatedAtDepth);let orphanOrder=[],orphanRoots=trace3.spans.filter(span=>!visited.has(span.spanId)&&(!span.parentSpanId||!spansById.has(span.parentSpanId))).sort(compareByStart);for(let orphan of orphanRoots)truncatedAtDepth=walkTree(orphan,0,childrenByParent,visited,orphanOrder)||truncatedAtDepth;for(let span of trace3.spans)visited.has(span.spanId)||(orphanOrder.push({span,depth:0}),visited.add(span.spanId));let errorSpans=trace3.spans.filter(span=>span.status?.code===1),byName=new Map;for(let span of trace3.spans){let name=span.name||"<unnamed>",durationUs=getDurationUs(span)??0,entry2=byName.get(name);entry2?(entry2.count+=1,entry2.totalUs+=durationUs):byName.set(name,{count:1,totalUs:durationUs})}let repeatedOps=[];for(let[name,{count:count2,totalUs}]of byName)count2>=2&&repeatedOps.push({name,count:count2,totalUs,perCallUs:totalUs/count2});return repeatedOps.sort((a,b)=>b.totalUs-a.totalUs),{trace:trace3,root,rootDurationUs,rootStartUs,spanInfo,treeOrder,orphanOrder,errorSpans,repeatedOps,truncatedAtDepth}}function walkTree(span,depth,childrenByParent,visited,out){if(visited.has(span.spanId))return!1;if(visited.add(span.spanId),depth>=256)return out.push({span,depth}),!0;out.push({span,depth});let truncated=!1,children=childrenByParent.get(span.spanId)??[];for(let child of children)truncated=walkTree(child,depth+1,childrenByParent,visited,out)||truncated;return truncated}var UNKNOWN="<unknown>",UNNAMED="<unnamed>",ATTR_VALUE_MAX_LEN=80,TRACE_ID_MAX_LEN=13;function renderMarkdown(trace3,options){let analysis=analyze(trace3),sections=[];return sections.push(renderHeader(analysis,options)),analysis.errorSpans.length>0&&sections.push(renderErrors(analysis)),analysis.repeatedOps.length>0&&sections.push(renderRepeatedOps(analysis)),sections.push(renderTree(analysis)),`${sections.join(`
1425
1425
 
1426
1426
  `)}
1427
- `}function renderHeader(analysis,options){let{trace:trace3,root,rootDurationUs,errorSpans}=analysis,attributes=root?.attributes,method=readAttrString(attributes,"http.method"),target=readAttrString(attributes,"http.target"),status6=readAttrString(attributes,"http.status_code"),endpoint=formatEndpoint(method,target,status6),duration=formatDurationUs(rootDurationUs),spans=formatSpansLine(trace3.spans.length,errorSpans.length);return[`# Trace ${ellipsis(trace3.traceId,TRACE_ID_MAX_LEN)}`,"",`- **Trace id:** ${trace3.traceId}`,`- **Request id:** ${options.requestId}`,`- **Endpoint:** ${endpoint}`,`- **Duration:** ${duration}`,`- **Spans:** ${spans}`].join(`
1427
+ `}function renderHeader(analysis,options){let{trace:trace3,root,rootDurationUs,errorSpans}=analysis,attributes=root?.attributes,method=readAttrString(attributes,"http.method"),target=readAttrString(attributes,"http.target"),status6=readAttrString(attributes,"http.status_code"),endpoint=formatEndpoint(method,target,status6),duration=formatDurationUs(rootDurationUs),spans=formatSpansLine(trace3.spans.length,errorSpans.length);return[`# Trace ${ellipsis(trace3.traceId,TRACE_ID_MAX_LEN)}`,"",`- **Trace id:** ${trace3.traceId}`,...options.requestId!==void 0?[`- **Request id:** ${options.requestId}`]:[],`- **Endpoint:** ${endpoint}`,`- **Duration:** ${duration}`,`- **Spans:** ${spans}`].join(`
1428
1428
  `)}function renderErrors(analysis){let lines=[`## Errors (${analysis.errorSpans.length})`,""];for(let span of analysis.errorSpans){let name=`\`${span.name||UNNAMED}\``,message=span.status?.message,header=message?`${name} \u2014 \`${message}\``:name;lines.push(`- ${header}`);for(let hint of collectAttrHints(span.attributes))lines.push(` - \`${hint.key}\`: ${hint.value}`)}return lines.join(`
1429
1429
  `)}function renderRepeatedOps(analysis){let{repeatedOps,rootDurationUs}=analysis,showPctColumn=rootDurationUs!==null&&rootDurationUs>0,header=["Operation","Count","Total","Per call"],align=["---","---:","---:","---:"];showPctColumn&&(header.push("% of root"),align.push("---:"));let lines=["## Repeated operations","",`| ${header.join(" | ")} |`,`| ${align.join(" | ")} |`];for(let op of repeatedOps){let cells=[`\`${op.name}\``,String(op.count),formatDurationUs(op.totalUs),formatDurationUs(op.perCallUs)];showPctColumn&&rootDurationUs!==null&&cells.push(formatPct(op.totalUs,rootDurationUs)),lines.push(`| ${cells.join(" | ")} |`)}return lines.join(`
1430
1430
  `)}function renderTree(analysis){let lines=["## Span tree",""];if(analysis.treeOrder.length===0&&analysis.orphanOrder.length===0)return lines.push("_No spans._"),lines.join(`
1431
1431
  `);for(let node of analysis.treeOrder)lines.push(formatTreeRow(node,analysis));if(analysis.orphanOrder.length>0){lines.push("","### Orphan spans","");for(let node of analysis.orphanOrder)lines.push(formatTreeRow(node,analysis))}return analysis.truncatedAtDepth&&lines.push("",`_Tree truncated at depth ${256}._`),lines.join(`
1432
- `)}function formatTreeRow(node,analysis){let{span,depth}=node,info=analysis.spanInfo.get(span.spanId),indent3=" ".repeat(depth),parts=[],durationUs=info?.durationUs??null;if(parts.push(`\`${formatDurationUs(durationUs)}\``),analysis.rootDurationUs!==null&&analysis.rootDurationUs>0&&parts.push(formatPct(durationUs,analysis.rootDurationUs)),analysis.rootStartUs!==null){let offset=info?.startOffsetUs??null;parts.push(formatOffset(offset))}if(parts.push(`\`${span.name||UNNAMED}\``),span.status?.code===1){let message=span.status.message;parts.push(message?`[error: ${message}]`:"[error]")}let[hint]=collectAttrHints(span.attributes);return hint&&parts.push(`\u2014 \`${hint.key}\`: ${hint.value}`),`${indent3}- ${parts.join(" ")}`}function formatEndpoint(method,target,status6){let left=method&&target?`${method} ${target}`:method??target,path3=left?`\`${left}\``:UNKNOWN;return status6?`${path3} \u2192 ${status6}`:path3}function formatSpansLine(count2,errors){return errors===0?String(count2):`${count2} (${errors} ${errors===1?"error":"errors"})`}function formatDurationUs(us){return us===null?UNKNOWN:us<1e3?`${Math.round(us)}\u03BCs`:us<1e6?`${(us/1e3).toFixed(1)}ms`:`${(us/1e6).toFixed(1)}s`}function formatOffset(us){return us===null?`+${UNKNOWN}`:`+${formatDurationUs(us)}`}function formatPct(us,rootUs){if(us===null||rootUs<=0)return UNKNOWN;let pct=us/rootUs*100;return pct>0&&pct<1?"<1%":`${Math.round(pct)}%`}function collectAttrHints(attributes){if(!attributes)return[];let out=[];for(let key of ATTR_HINT_KEYS){let value=readAttrString(attributes,key);value!==void 0&&out.push({key,value:ellipsis(value,ATTR_VALUE_MAX_LEN)})}return out}var VIEW_OPTIONS=["timeline","tree","waterfall"];function isView(value){return VIEW_OPTIONS.includes(value)}function buildDashboardUrl({teamSlug,projectName,traceId,view}){let base=`https://vercel.com/${encodeURIComponent(teamSlug)}/${encodeURIComponent(projectName)}/logs/traces/${encodeURIComponent(traceId)}`;return view&&view!=="timeline"?`${base}?view=${encodeURIComponent(view)}`:base}async function resolveDashboardScope({client,scopeFlag,projectFlag,teamId,linkedProject}){let teamSlug;if(scopeFlag)scopeFlag.startsWith("team_")?teamSlug=(await getTeamByIdOrSlug(client,scopeFlag)).slug:teamSlug=scopeFlag;else if(linkedProject.status==="linked")teamSlug=linkedProject.org.slug;else return{error:"Unable to resolve team slug for the dashboard URL.",reason:AGENT_REASON.NOT_LINKED};let projectName;if(projectFlag){let project=await getProjectByNameOrId(client,projectFlag,teamId);if(project instanceof ProjectNotFound)return{error:`Project not found: ${projectFlag}`,reason:AGENT_REASON.NOT_FOUND};projectName=project.name}else if(linkedProject.status==="linked")projectName=linkedProject.project.name;else return{error:"Unable to resolve project name for the dashboard URL.",reason:AGENT_REASON.NOT_LINKED};return{teamSlug,projectName}}async function get5(client,telemetry2){let parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand4.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let positional=parsedArgs.args.slice(1),requestId=positional[0]===getSubcommand4.name?positional[1]:positional[0],json=parsedArgs.flags["--json"],scopeFlag=parsedArgs.flags["--scope"],projectFlag=parsedArgs.flags["--project"],openFlag2=parsedArgs.flags["--open"],viewFlag=parsedArgs.flags["--view"];if(telemetry2.trackCliArgumentRequestId(requestId),telemetry2.trackCliFlagJson(json),telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliFlagOpen(openFlag2),telemetry2.trackCliOptionView(viewFlag),json&&openFlag2){let msg="`--json` and `--open` cannot be used together.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),1}if(viewFlag&&!openFlag2){let msg="`--view` can only be used with `--open`.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),1}let view;if(viewFlag!==void 0){if(!isView(viewFlag)){let msg=`\`--view\` must be one of: ${VIEW_OPTIONS.join(", ")}. Received: ${viewFlag}`;return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),1}view=viewFlag}if(!requestId)return output_manager_default.print(help(getSubcommand4,{parent:tracesCommand,columns:client.stderr.columns})),2;let teamId,projectId,linkedProject;if(linkedProject=await getLinkedProject(client),linkedProject.status==="error")if(scopeFlag&&projectFlag)linkedProject={status:"not_linked",org:null,project:null};else return linkedProject.exitCode;let scope;try{scope=await resolveScope({client,flags:{scope:scopeFlag,project:projectFlag},linkedProject})}catch(err){return printError(err),1}if("message"in scope)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:scope.reason,message:scope.message}),output_manager_default.error(scope.message),1;teamId=scope.teamId,projectId=scope.projectId,output_manager_default.spinner("Fetching trace\u2026");let trace3,partial;try{({trace:trace3,partial}=await fetchTrace({client,teamId,projectId,requestId}))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}if(output_manager_default.stopSpinner(),partial&&output_manager_default.warn("Trace is incomplete because it exceeded the span limit."),openFlag2){if(!linkedProject){let msg="Unable to resolve project link for the dashboard URL.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:msg}),output_manager_default.error(msg),1}let resolved=await resolveDashboardScope({client,scopeFlag,projectFlag,teamId,linkedProject});if("error"in resolved)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:resolved.reason,message:resolved.error}),output_manager_default.error(resolved.error),1;let url=buildDashboardUrl({teamSlug:resolved.teamSlug,projectName:resolved.projectName,traceId:trace3.traceId,view});return output_manager_default.log(`Opening ${url} in your browser...`),await(0,import_open20.default)(url),0}return json?(client.stdout.write(`${JSON.stringify(trace3,null,2)}
1433
- `),0):(client.stdout.write(renderMarkdown(trace3,{requestId})),output_manager_default.log("Run with --json for full trace data."),0)}var import_chalk314=__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_chalk314.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.
1432
+ `)}function formatTreeRow(node,analysis){let{span,depth}=node,info=analysis.spanInfo.get(span.spanId),indent3=" ".repeat(depth),parts=[],durationUs=info?.durationUs??null;if(parts.push(`\`${formatDurationUs(durationUs)}\``),analysis.rootDurationUs!==null&&analysis.rootDurationUs>0&&parts.push(formatPct(durationUs,analysis.rootDurationUs)),analysis.rootStartUs!==null){let offset=info?.startOffsetUs??null;parts.push(formatOffset(offset))}if(parts.push(`\`${span.name||UNNAMED}\``),span.status?.code===1){let message=span.status.message;parts.push(message?`[error: ${message}]`:"[error]")}let[hint]=collectAttrHints(span.attributes);return hint&&parts.push(`\u2014 \`${hint.key}\`: ${hint.value}`),`${indent3}- ${parts.join(" ")}`}function formatEndpoint(method,target,status6){let left=method&&target?`${method} ${target}`:method??target,path3=left?`\`${left}\``:UNKNOWN;return status6?`${path3} \u2192 ${status6}`:path3}function formatSpansLine(count2,errors){return errors===0?String(count2):`${count2} (${errors} ${errors===1?"error":"errors"})`}function formatDurationUs(us){return us===null?UNKNOWN:us<1e3?`${Math.round(us)}\u03BCs`:us<1e6?`${(us/1e3).toFixed(1)}ms`:`${(us/1e6).toFixed(1)}s`}function formatOffset(us){return us===null?`+${UNKNOWN}`:`+${formatDurationUs(us)}`}function formatPct(us,rootUs){if(us===null||rootUs<=0)return UNKNOWN;let pct=us/rootUs*100;return pct>0&&pct<1?"<1%":`${Math.round(pct)}%`}function collectAttrHints(attributes){if(!attributes)return[];let out=[];for(let key of ATTR_HINT_KEYS){let value=readAttrString(attributes,key);value!==void 0&&out.push({key,value:ellipsis(value,ATTR_VALUE_MAX_LEN)})}return out}var VIEW_OPTIONS=["timeline","tree","waterfall"];function isView(value){return VIEW_OPTIONS.includes(value)}function buildDashboardUrl({teamSlug,projectName,traceId,view}){let base=`https://vercel.com/${encodeURIComponent(teamSlug)}/${encodeURIComponent(projectName)}/logs/traces/${encodeURIComponent(traceId)}`;return view&&view!=="timeline"?`${base}?view=${encodeURIComponent(view)}`:base}async function resolveDashboardScope({client,scopeFlag,projectName,linkedProject}){let teamSlug;if(scopeFlag)scopeFlag.startsWith("team_")?teamSlug=(await getTeamByIdOrSlug(client,scopeFlag)).slug:teamSlug=scopeFlag;else if(linkedProject.status==="linked")teamSlug=linkedProject.org.slug;else return{error:"Unable to resolve team slug for the dashboard URL.",reason:AGENT_REASON.NOT_LINKED};return{teamSlug,projectName}}async function get5(client,telemetry2){let parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand4.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let positional=parsedArgs.args.slice(1),identifiers=positional[0]===getSubcommand4.name?positional.slice(1):positional,id2=identifiers[0],isTraceId=id2!==void 0&&/^[a-fA-F0-9]{32}$/.test(id2),json=parsedArgs.flags["--json"],scopeFlag=parsedArgs.flags["--scope"]?.trim()||void 0,projectFlag=parsedArgs.flags["--project"],openFlag2=parsedArgs.flags["--open"],viewFlag=parsedArgs.flags["--view"];if(telemetry2.trackCliArgumentId(id2,isTraceId?"traceId":"requestId"),telemetry2.trackCliFlagJson(json),telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliFlagOpen(openFlag2),telemetry2.trackCliOptionView(viewFlag),json&&openFlag2){let msg="`--json` and `--open` cannot be used together.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),1}if(viewFlag&&!openFlag2){let msg="`--view` can only be used with `--open`.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),1}let view;if(viewFlag!==void 0){if(!isView(viewFlag)){let msg=`\`--view\` must be one of: ${VIEW_OPTIONS.join(", ")}. Received: ${viewFlag}`;return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),1}view=viewFlag}if(!id2)return output_manager_default.print(help(getSubcommand4,{parent:tracesCommand,columns:client.stderr.columns})),2;if(identifiers.length>1){let msg="Provide one trace ID or request ID.";return client.nonInteractive&&writeAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.fatal(msg),2}let target=isTraceId?{traceId:id2.toLowerCase()}:{requestId:id2},teamId,projectId,linkedProject;if(linkedProject=await getLinkedProject(client),linkedProject.status==="error")if(scopeFlag&&projectFlag)linkedProject={status:"not_linked",org:null,project:null};else return linkedProject.exitCode;let scope;try{scope=await resolveScope({client,flags:{scope:scopeFlag,project:projectFlag},linkedProject})}catch(err){return printError(err),1}if("message"in scope)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:scope.reason,message:scope.message}),output_manager_default.error(scope.message),1;teamId=scope.teamId,projectId=scope.projectId,output_manager_default.spinner("Fetching trace\u2026");let trace3,partial;try{({trace:trace3,partial}=await fetchTrace({client,teamId,projectId,...target}))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}output_manager_default.stopSpinner();let rootRequestId=resolveRootSpan(trace3)?.attributes?.["vercel.request_id"],requestId=target.requestId??(typeof rootRequestId=="string"&&rootRequestId.trim()!==""?rootRequestId:void 0);if(partial&&output_manager_default.warn("Trace is incomplete because it exceeded the span limit."),openFlag2){if(!linkedProject){let msg="Unable to resolve project link for the dashboard URL.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:msg}),output_manager_default.error(msg),1}let resolved=await resolveDashboardScope({client,scopeFlag,projectName:scope.projectName,linkedProject});if("error"in resolved)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:resolved.reason,message:resolved.error}),output_manager_default.error(resolved.error),1;let url=buildDashboardUrl({teamSlug:resolved.teamSlug,projectName:resolved.projectName,traceId:trace3.traceId,view});return output_manager_default.log(`Opening ${url} in your browser...`),await(0,import_open20.default)(url),0}if(json)return client.stdout.write(`${JSON.stringify(trace3,null,2)}
1433
+ `),0;client.stdout.write(renderMarkdown(trace3,{requestId}));try{let resolved=await resolveDashboardScope({client,scopeFlag,projectName:scope.projectName,linkedProject});if("error"in resolved)output_manager_default.warn(resolved.error);else{let url=buildDashboardUrl({...resolved,traceId:trace3.traceId,view});output_manager_default.log(`View trace: ${url}`)}}catch(err){output_manager_default.print(`${import_chalk314.default.yellow("!")} Failed to resolve the dashboard URL. Use --open to retry.
1434
+ `),output_manager_default.debug(String(err))}return output_manager_default.log("Run with --json for full trace data."),0}var import_chalk315=__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_chalk315.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.
1434
1435
  `);return}client.stdout.write(`${table([columns.map(column=>column.header),...spans.map(span=>columns.map(column=>column.format(span)))])}
1435
1436
  `)}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)}
1436
- `);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_CONFIG65={get: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_CONFIG65),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-6AXT6WNO.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)):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:
1437
+ `);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_CONFIG65={get: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_CONFIG65),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-T3WHONFJ.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)):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:
1437
1438
  ${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:
1438
1439
  ${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),1}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),1;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"),1;if(enableBinary&&disableBinary)return output_manager_default.error("Cannot use --enable-binary and --disable-binary together"),1;if(bypassMinReleaseAge&&disableMinReleaseAgeBypass)return output_manager_default.error("Can't use --bypass-min-release-age and --disable-min-release-age-bypass together"),1;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."),1;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)}
1439
1440
  `)}else output_manager_default.print(`Current version: ${pkg_default.version}
@@ -1441,7 +1442,7 @@ Learn more: ${import_chalk312.default.cyan("https://vercel.com/docs/cli/about-te
1441
1442
  `),updateCommand&&output_manager_default.print(`Upgrade command: ${updateCommand}
1442
1443
  `),output_manager_default.print(`Automatic updates: ${isAutoUpdateEnabled(client.config)?"Enabled":"Disabled"}
1443
1444
  `),requestedPreference&&output_manager_default.print(`Would ${requestedPreference.enabled?"enable":"disable"} ${requestedPreference.label}. No settings changed.
1444
- `);return 0}if(disableMinReleaseAgeBypass)return setMinReleaseAgeBypass(client,!1),output_manager_default.success("Minimum release-age bypass disabled."),0;if(enableBinary||disableBinary){if(disableBinary&&isNativeBinaryInstall())return output_manager_default.fatal("Can't use `--disable-binary` from the native CLI.\nThis flag only opts the Node.js CLI out of launching the native binary. Install the Node.js CLI with `npm i -g vercel`."),1;let enabled=!!enableBinary;return setUseNativeBinary(client,enabled),output_manager_default.success(`Native Vercel CLI binary ${enabled?"enabled":"disabled"}.`),0}if(enableAuto||disableAuto){let enabled=!!enableAuto;return setAutoUpdate(client,enabled),output_manager_default.success(`Automatic CLI updates ${enabled?"enabled":"disabled"}.`),0}return installerManaged?installProductionRelease({version:target,skipIfCurrent:!target}):executeUpgrade(target,client,bypassMinReleaseAge,!!target)}var import_chalk317=__toESM(require_source(),1);async function status5(client){let context=await getVersionContext();if(output_manager_default.print(`Version: ${context.version}
1445
+ `);return 0}if(disableMinReleaseAgeBypass)return setMinReleaseAgeBypass(client,!1),output_manager_default.success("Minimum release-age bypass disabled."),0;if(enableBinary||disableBinary){if(disableBinary&&isNativeBinaryInstall())return output_manager_default.fatal("Can't use `--disable-binary` from the native CLI.\nThis flag only opts the Node.js CLI out of launching the native binary. Install the Node.js CLI with `npm i -g vercel`."),1;let enabled=!!enableBinary;return setUseNativeBinary(client,enabled),output_manager_default.success(`Native Vercel CLI binary ${enabled?"enabled":"disabled"}.`),0}if(enableAuto||disableAuto){let enabled=!!enableAuto;return setAutoUpdate(client,enabled),output_manager_default.success(`Automatic CLI updates ${enabled?"enabled":"disabled"}.`),0}return installerManaged?installProductionRelease({version:target,skipIfCurrent:!target}):executeUpgrade(target,client,bypassMinReleaseAge,!!target)}var import_chalk318=__toESM(require_source(),1);async function status5(client){let context=await getVersionContext();if(output_manager_default.print(`Version: ${context.version}
1445
1446
  `),output_manager_default.print(`Runtime: ${describeRuntime(context)}
1446
1447
  `),output_manager_default.print(`Managed by: ${describeManager(context)}
1447
1448
  `),context.manager==="installer"){if(output_manager_default.print(`Active version: ${context.activeVersion??context.version}
@@ -1452,55 +1453,55 @@ Learn more: ${import_chalk312.default.cyan("https://vercel.com/docs/cli/about-te
1452
1453
  `):output_manager_default.print(`${context.upgradeError.message}
1453
1454
  `),output_manager_default.print(`Tip: the recommended way to manage the Vercel CLI is the installer: ${CURL_INSTALL_COMMAND}
1454
1455
  `),output_manager_default.print(`Automatic updates: ${isAutoUpdateEnabled(client.config)?"Enabled":"Disabled"}
1455
- `);return 0}var import_chalk315=__toESM(require_source(),1);var DEFAULT_COUNT=20;async function list29(){output_manager_default.spinner("Fetching available versions\u2026",0);let versions2,currentVersion;try{[versions2,{version:currentVersion}]=await Promise.all([listAvailableVersions(packageName),getVersionContext()])}catch(error){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to list versions: ${error instanceof Error?error.message:String(error)}`),1}if(output_manager_default.stopSpinner(),versions2.length===0)return output_manager_default.log("No versions found"),0;let shown=versions2.slice(0,DEFAULT_COUNT);for(let version2 of shown){let current=version2===currentVersion;output_manager_default.print(current?`${import_chalk315.default.cyan(version2)} ${import_chalk315.default.dim("(current)")}
1456
+ `);return 0}var import_chalk316=__toESM(require_source(),1);var DEFAULT_COUNT=20;async function list29(){output_manager_default.spinner("Fetching available versions\u2026",0);let versions2,currentVersion;try{[versions2,{version:currentVersion}]=await Promise.all([listAvailableVersions(packageName),getVersionContext()])}catch(error){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to list versions: ${error instanceof Error?error.message:String(error)}`),1}if(output_manager_default.stopSpinner(),versions2.length===0)return output_manager_default.log("No versions found"),0;let shown=versions2.slice(0,DEFAULT_COUNT);for(let version2 of shown){let current=version2===currentVersion;output_manager_default.print(current?`${import_chalk316.default.cyan(version2)} ${import_chalk316.default.dim("(current)")}
1456
1457
  `:`${version2}
1457
- `)}return versions2.length>shown.length&&output_manager_default.print(import_chalk315.default.dim(`\u2026 and ${versions2.length-shown.length} more
1458
- `)),0}var import_chalk316=__toESM(require_source(),1);async function installed(){let context=await getVersionContext();if(context.manager!=="installer"){let manager=context.packageManager===void 0?"an unsupported package-manager installation":context.packageManagerAssumed?`${context.packageManager} (assumed)`:context.packageManager;return output_manager_default.print(`${context.version} ${import_chalk316.default.dim("(current)")}
1459
- `),output_manager_default.log(`This CLI is managed by ${manager}, so only the current version is available. The recommended way to manage CLI versions is the installer: ${CURL_INSTALL_COMMAND}`),0}let slots=await listNativeTrackSlots(context.installRoot);if(slots.length===0)return output_manager_default.log("No slot-managed versions found"),0;for(let installed2 of slots){let active=installed2.track===context.track&&installed2.slot===context.slot,build=installed2.pr?`PR #${installed2.pr}${installed2.buildSha?` (${installed2.buildSha.slice(0,12)})`:""}`:`v${installed2.version}`;output_manager_default.print(`${installed2.track}/${installed2.slot} ${build}${active?` ${import_chalk316.default.dim("(active)")}`:""}
1458
+ `)}return versions2.length>shown.length&&output_manager_default.print(import_chalk316.default.dim(`\u2026 and ${versions2.length-shown.length} more
1459
+ `)),0}var import_chalk317=__toESM(require_source(),1);async function installed(){let context=await getVersionContext();if(context.manager!=="installer"){let manager=context.packageManager===void 0?"an unsupported package-manager installation":context.packageManagerAssumed?`${context.packageManager} (assumed)`:context.packageManager;return output_manager_default.print(`${context.version} ${import_chalk317.default.dim("(current)")}
1460
+ `),output_manager_default.log(`This CLI is managed by ${manager}, so only the current version is available. The recommended way to manage CLI versions is the installer: ${CURL_INSTALL_COMMAND}`),0}let slots=await listNativeTrackSlots(context.installRoot);if(slots.length===0)return output_manager_default.log("No slot-managed versions found"),0;for(let installed2 of slots){let active=installed2.track===context.track&&installed2.slot===context.slot,build=installed2.pr?`PR #${installed2.pr}${installed2.buildSha?` (${installed2.buildSha.slice(0,12)})`:""}`:`v${installed2.version}`;output_manager_default.print(`${installed2.track}/${installed2.slot} ${build}${active?` ${import_chalk317.default.dim("(active)")}`:""}
1460
1461
  `)}return 0}var import_semver3=__toESM(require_semver(),1);function printInstallerOnlyError(context,version2){if(output_manager_default.error("Switching versions is only supported for installer-managed CLIs."),output_manager_default.log(`Install the CLI with the installer first: ${CURL_INSTALL_COMMAND}`),version2&&context.manager==="package-manager"){let manager=context.packageManagerAssumed?`${context.packageManager} (assumed)`:context.packageManager;output_manager_default.log(`Or install this version with ${manager}: ${getPackageManagerInstallCommand(context,version2)}`)}}async function use(args){let target=args[0];if(!target)return output_manager_default.error(`Missing version. Usage: ${getCommandName("version use <version>")}`),1;let context=await getVersionContext();if(context.manager==="package-manager"&&context.upgradeCommand===void 0)return output_manager_default.fatal(context.upgradeError.message),1;if(target==="latest")return context.canSwitchVersions?installProductionRelease({currentVersion:context.version,track:context.track}):(printInstallerOnlyError(context),1);let pr=parsePrTarget(target);if(pr!==void 0){if(!context.canSwitchVersions)return printInstallerOnlyError(context),1;try{let{updated,buildSha,slot}=await installAndActivatePrBinary(pr);return output_manager_default.stopSpinner(),updated?output_manager_default.success(`Activated the Vercel CLI build for PR #${pr} (${buildSha.slice(0,12)}) on pr/${slot}.`):output_manager_default.log(`The latest build for PR #${pr} (${buildSha.slice(0,12)}) is active on pr/${slot}.`),output_manager_default.log("PR builds change on every push \u2014 re-run this command to pick up new builds."),output_manager_default.log(`Return to a release build with ${getCommandName("version use latest")}.`),0}catch(error){return output_manager_default.stopSpinner(),output_manager_default.error(error instanceof Error?error.message:String(error)),1}}let version2=import_semver3.default.valid(import_semver3.default.coerce(target)?.version??target)?import_semver3.default.coerce(target)?.version??target:void 0;return!version2||!import_semver3.default.valid(version2)?(output_manager_default.error(`Invalid version: "${target}"`),1):context.canSwitchVersions?installProductionRelease({version:version2,currentVersion:context.version,track:context.track}):(printInstallerOnlyError(context,version2),1)}async function autoupdate(client,args){let action=args[0];if(!action||action==="status"){let enabled=(await getVersionContext()).manager==="installer"?isNativeAutoUpdateEnabled(client.config):isAutoUpdateEnabled(client.config);return output_manager_default.print(`Automatic updates are ${enabled?"enabled":"disabled"}
1461
1462
  `),0}if(action==="enable"||action==="disable"){let enabled=action==="enable";return setAutoUpdate(client,enabled),output_manager_default.success(`Automatic CLI updates ${enabled?"enabled":"disabled"}.`),0}return output_manager_default.error(`Invalid argument "${action}". Usage: ${getCommandName("version autoupdate [enable|disable|status]")}`),1}var import_semver4=__toESM(require_semver(),1);import{performance}from"node:perf_hooks";var VersionTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInstalled(actual){this.trackCliSubcommand({subcommand:"installed",value:actual})}trackCliSubcommandUse(actual){this.trackCliSubcommand({subcommand:"use",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}trackCliSubcommandAutoupdate(actual){this.trackCliSubcommand({subcommand:"autoupdate",value:actual})}trackNativeUpdate(event){this.trackCommandOutput({key:"native-update",value:JSON.stringify(event)})}};var NATIVE_UPDATE_CHILD_TIMEOUT_MS=2*60*1e3;async function check3(client,{timeoutMs=NATIVE_UPDATE_CHILD_TIMEOUT_MS}={}){let context=await getVersionContext();if(context.manager!=="installer")return isNativeUpdateChild()?0:(output_manager_default.fatal("Native update checks require an installer-managed CLI."),1);if(isNativeUpdateChild()){let cachedVersion=process.env[NATIVE_UPDATE_VERSION_ENV],source=cachedVersion?"cached":"discovery",controller=new AbortController,timeout=setTimeout(()=>controller.abort(),timeoutMs),startedAt=performance.now(),discoveryMs,stagingMs,outcome="failure";try{let version2=cachedVersion;if(!version2){await cacheNativeUpdateDiscoveryAttempt();let discoveryStartedAt=performance.now();try{version2=await resolveLatestNativeVersion({signal:controller.signal})}finally{discoveryMs=Math.round(performance.now()-discoveryStartedAt)}await cacheNativeUpdateVersion(version2),controller.signal.throwIfAborted()}let selectProduction=process.env[NATIVE_UPDATE_SELECT_PRODUCTION_ENV]==="1";controller.signal.throwIfAborted();let stagingStartedAt=performance.now();try{await stageProductionUpdate(version2,selectProduction,{signal:controller.signal})}finally{stagingMs=Math.round(performance.now()-stagingStartedAt)}return await markNativeUpdateStaged(version2,{selectedProduction:selectProduction}),controller.signal.aborted?(outcome="timeout",1):(outcome="success",0)}catch{if(controller.signal.aborted&&(outcome="timeout"),!cachedVersion)try{await restoreNativeUpdateAfterDiscoveryFailure()}catch{}return 1}finally{clearTimeout(timeout),new VersionTelemetryClient({opts:{store:client.telemetryEventStore}}).trackNativeUpdate({outcome,source,totalMs:Math.round(performance.now()-startedAt),discoveryMs,stagingMs})}}try{output_manager_default.spinner("Resolving latest native version\u2026",0);let latest=await resolveLatestNativeVersion();return output_manager_default.stopSpinner(),output_manager_default.print(`Latest production version: ${latest}
1462
1463
  `),context.track==="production"&&context.activeVersion&&import_semver4.default.valid(context.activeVersion)&&import_semver4.default.gte(context.activeVersion,latest)?(await cacheNativeUpdateVersion(latest),await markNativeUpdateStaged(latest,{selectedProduction:!0}),output_manager_default.print(`Production is already up to date.
1463
1464
  `),0):(await cacheNativeUpdateVersion(latest,{selectProduction:!0}),spawnNativeUpdateChild(latest,!0),output_manager_default.print(`Production update started in the background.
1464
- `),0)}catch(error){return output_manager_default.stopSpinner(),output_manager_default.fatal(`Failed to check for updates: ${error instanceof Error?error.message:String(error)}`),1}}var COMMAND_CONFIG66={list:getCommandAliases(listSubcommand27),installed:getCommandAliases(installedSubcommand),use:getCommandAliases(useSubcommand),update:getCommandAliases(updateSubcommand11),check:getCommandAliases(checkSubcommand3),autoupdate:getCommandAliases(autoupdateSubcommand)};async function version(client){let telemetry2=new VersionTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(versionCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArguments.args.slice(1),COMMAND_CONFIG66),needHelp=parsedArguments.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:versionCommand}))}if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("version",subcommand),output_manager_default.print(help(versionCommand,{columns:client.stderr.columns})),2;switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(listSubcommand27),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list29());case"installed":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(installedSubcommand),2):(telemetry2.trackCliSubcommandInstalled(subcommandOriginal),installed());case"use":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(useSubcommand),2):(telemetry2.trackCliSubcommandUse(subcommandOriginal),use(args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(updateSubcommand11),2):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),use(["latest"]));case"check":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(checkSubcommand3),2):(isNativeUpdateChild()||telemetry2.trackCliSubcommandCheck(subcommandOriginal),check3(client));case"autoupdate":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(autoupdateSubcommand),2):(telemetry2.trackCliSubcommandAutoupdate(subcommandOriginal),autoupdate(client,args));default:return parsedArguments.args.length>1?(output_manager_default.print(`${import_chalk317.default.red("Error")}: Invalid subcommand. See help instructions for usage:
1465
- `),output_manager_default.print(help(versionCommand,{columns:client.stderr.columns})),2):status5(client)}}var import_chalk322=__toESM(require_source(),1);var UsageTelemetryClient=class extends TelemetryClient{trackCliOptionFrom(from){from&&this.trackCliOption({option:"from",value:this.redactedValue})}trackCliOptionTo(to){to&&this.trackCliOption({option:"to",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionBreakdown(breakdown){breakdown&&this.trackCliOption({option:"breakdown",value:breakdown})}trackCliOptionGroupBy(groupBy){groupBy&&this.trackCliOption({option:"group-by",value:groupBy})}};var import_error_utils25=__toESM(require_dist(),1);import{DateTime}from"luxon";var LA_TIMEZONE="America/Los_Angeles";function toISOOrThrow(dt){if(!dt.isValid)throw new Error(`Invalid DateTime: ${dt.invalidReason}`);let iso=dt.toISO();if(!iso)throw new Error("Failed to convert DateTime to ISO");return iso}function getDefaultFromDateTime(){return DateTime.now().setZone(LA_TIMEZONE).startOf("month")}function getDefaultToDateTime(){return DateTime.utc()}function getDefaultFromDate(){let dt=getDefaultFromDateTime();return toISOOrThrow(dt.toUTC())}function getDefaultToDate(){let dt=getDefaultToDateTime();return toISOOrThrow(dt.toUTC())}function parseBillingDate(dateStr,isEndDate=!1){if(dateStr.includes("T")){if(!DateTime.fromISO(dateStr).isValid)throw new Error(`Invalid date: "${dateStr}". Expected ISO 8601 format (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss)`);return dateStr}let laDateTime=DateTime.fromISO(dateStr,{zone:LA_TIMEZONE}).startOf("day");if(!laDateTime.isValid)throw new Error(`Invalid date: "${dateStr}". Expected ISO 8601 format (YYYY-MM-DD)`);let finalDateTime=isEndDate?laDateTime.plus({days:1}):laDateTime;return toISOOrThrow(finalDateTime.toUTC())}function getISOWeekNumber(dateStr){let date=new Date(dateStr);date.setUTCDate(date.getUTCDate()+4-(date.getUTCDay()||7));let yearStart=new Date(Date.UTC(date.getUTCFullYear(),0,1));return Math.ceil(((date.getTime()-yearStart.getTime())/864e5+1)/7)}function getISOWeekYear(dateStr){let date=new Date(dateStr);return date.setUTCDate(date.getUTCDate()+4-(date.getUTCDay()||7)),date.getUTCFullYear()}function getPeriodKey(chargePeriodStart,breakdownPeriod){if(!chargePeriodStart)return"Unknown";switch(breakdownPeriod){case"daily":return chargePeriodStart.substring(0,10);case"weekly":{let weekYear=getISOWeekYear(chargePeriodStart),weekNum=getISOWeekNumber(chargePeriodStart);return`${weekYear}-W${weekNum.toString().padStart(2,"0")}`}case"monthly":return chargePeriodStart.substring(0,7);default:return chargePeriodStart.substring(0,10)}}var VALID_BREAKDOWN_PERIODS=["daily","weekly","monthly"];function isValidBreakdownPeriod(value){return value!==void 0&&VALID_BREAKDOWN_PERIODS.includes(value)}var VALID_GROUP_BY_DIMENSIONS=["project","region"];function isValidGroupByDimension(value){return value!==void 0&&VALID_GROUP_BY_DIMENSIONS.includes(value)}var import_chalk319=__toESM(require_source(),1);function formatUsageAmount(amount,unit){if(unit==="managed_infrastructure_units")return formatUsageQuantity(amount,"MIUs",{showSmallValues:!0});let formattedAmount=amount.toFixed(2);return amount!==0&&Number(formattedAmount)===0?amount>0?"<$0.01":">-$0.01":`$${formattedAmount}`}function formatUsageQuantity(quantity,unit="",options={}){let displayUnit=quantity===1&&options.singularUnit?options.singularUnit:unit;if(options.unitKind==="digitalStorage")return formatStorageQuantity(quantity,unit,options.showSmallValues);let formatter=new Intl.NumberFormat("en-US",{maximumFractionDigits:2,notation:options.compact&&Math.abs(quantity)>=1e3?"compact":"standard"}),formattedQuantity=formatter.format(quantity),roundsToZero=formatter.format(Math.abs(quantity))===formatter.format(0),displayQuantity=options.showSmallValues&&quantity!==0&&roundsToZero?quantity>0?`<${formatter.format(.01)}`:`>${formatter.format(-.01)}`:formattedQuantity;return displayUnit?`${displayQuantity} ${displayUnit}`:displayQuantity}function formatStorageQuantity(quantity,unit,showSmallValues=!1){let units=["byte","kilobyte","megabyte","gigabyte","terabyte"],symbols=["B","KB","MB","GB","TB"],startIndex=units.indexOf(unit.toLowerCase());if(startIndex===-1)return formatUsageQuantity(quantity,unit,{showSmallValues});let value=quantity,unitIndex=startIndex;for(;Math.abs(value)>=1e3&&unitIndex<symbols.length-1;)value/=1e3,unitIndex++;return formatUsageQuantity(value,symbols[unitIndex],{showSmallValues})}var import_chalk318=__toESM(require_source(),1);import{DateTime as DateTime2}from"luxon";function formatServiceName(name,service){return service.included?`${name} (Flat Rate CDN)`:name}function formatServiceCost(service,costUnit){return service.included?"Included":formatUsageAmount(service.cost,costUnit)}function isEmptyService(service){return(service.category==="subscription"||service.quantity===0)&&service.cost===0}function visibleServices(services){return[...services.values()].filter(service=>!isEmptyService(service)).map(service=>[service.name,service])}function outputUsageHeader(data,title6,elapsedSuffix){let{log}=output_manager_default;log(`${title6} for ${data.contextType} ${import_chalk318.default.bold(data.contextName)} ${elapsedSuffix}`),log(""),data.usingDefaults?log(`${import_chalk318.default.gray("Billing cycle:")} ${formatRange(data.fromDisplay,data.toDisplay)}`):log(`${import_chalk318.default.gray("Period:")} ${formatRange(data.fromDisplay,data.toDisplay)}`),log(import_chalk318.default.gray(`Accrued through ${formatDate4(data.usageThrough)} in ${data.costUnit==="managed_infrastructure_units"?"MIUs":"USD"}, before credits and discounts.`)),log("")}function outputHiddenServicesHint(hiddenCount){hiddenCount<=0||output_manager_default.log(import_chalk318.default.gray(`${hiddenCount} ${hiddenCount===1?"service":"services"} with no usage hidden. Add --json to include ${hiddenCount===1?"it":"them"}.`))}function formatRange(from,to){let start=parseDate(from),end=parseDate(to);if(!start||!end)return`${from} to ${to}`;let sameYear=start.year===end.year;return`${start.toFormat(sameYear?"LLL d":"LLL d, yyyy")}\u2013${end.toFormat("LLL d, yyyy")}`}function formatDate4(value){return parseDate(value)?.toFormat("LLL d, yyyy")??value}function parseDate(value){let date=DateTime2.fromISO(value,{zone:"utc"});return date.isValid?date:null}function outputAggregated({data,startTime}){let{print,log}=output_manager_default;if(outputUsageHeader(data,"Usage",elapsed(Date.now()-startTime)),data.creditBalance){log(import_chalk319.default.bold("Current credit balance")),data.creditBalance.cadence&&log(` ${import_chalk319.default.gray("Cadence")} ${formatCadence(data.creditBalance.cadence)}`),log(` ${import_chalk319.default.gray("Used")} ${formatCredit(data.creditBalance.used,data.creditBalance.currency)} of ${formatCredit(data.creditBalance.allocated,data.creditBalance.currency)}`),log(` ${import_chalk319.default.gray("Remaining")} ${formatCredit(data.creditBalance.remaining,data.creditBalance.currency)}`);let progress=data.creditBalance.allocated>0?data.creditBalance.used/data.creditBalance.allocated*100:0;log(` ${import_chalk319.default.gray("Progress")} ${Math.round(progress)}%`),log("")}let allServices=[...data.services.entries()],sortedServices=visibleServices(data.services).sort((a,b)=>b[1].cost-a[1].cost);if(sortedServices.length===0){log("No usage data found for this period."),outputHiddenServicesHint(allServices.length);return}let usage2=sortedServices.filter(([,service])=>service.category==="usage"),subscriptions=sortedServices.filter(([,service])=>service.category==="subscription");usage2.length>0&&(log(import_chalk319.default.bold("Infrastructure")),printTable(print,usage2,"Infrastructure subtotal",data.costUnit),log("")),subscriptions.length>0&&(log(import_chalk319.default.bold("Subscription licenses")),printTable(print,subscriptions,"Subscriptions subtotal",data.costUnit),log("")),printCostSummary(print,usage2,subscriptions,data.costUnit),outputHiddenServicesHint(allServices.length-sortedServices.length)}function formatCadence(cadence){return cadence.split("_").map(word=>word[0].toUpperCase()+word.slice(1)).join(" ")}function formatCredit(amount,currency){return formatUsageAmount(amount,currency)}function printCostSummary(print,usage2,subscriptions,costUnit){let subscriptionCost=sumCost(subscriptions),infrastructureCost=sumCost(usage2),rows=[["Subscriptions",formatUsageAmount(subscriptionCost,costUnit)],["Infrastructure usage",formatUsageAmount(infrastructureCost,costUnit)],[import_chalk319.default.bold("Estimated total"),import_chalk319.default.bold(formatUsageAmount(subscriptionCost+infrastructureCost,costUnit))]],tablePrint=table(rows,{hsep:4,align:["l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1466
- `)}function sumCost(services){return services.reduce((total,[,service])=>total+service.cost,0)}function printTable(print,services,subtotalLabel,costUnit){let headers=["Service","Usage","Cost"],rows=services.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:service.category==="usage",singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,costUnit)]),subtotal=services.reduce((total,[,service])=>total+service.cost,0);rows.push([import_chalk319.default.bold(subtotalLabel),"",import_chalk319.default.bold(formatUsageAmount(subtotal,costUnit))]);let tablePrint=table([headers.map(header=>import_chalk319.default.bold(import_chalk319.default.cyan(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`
1465
+ `),0)}catch(error){return output_manager_default.stopSpinner(),output_manager_default.fatal(`Failed to check for updates: ${error instanceof Error?error.message:String(error)}`),1}}var COMMAND_CONFIG66={list:getCommandAliases(listSubcommand27),installed:getCommandAliases(installedSubcommand),use:getCommandAliases(useSubcommand),update:getCommandAliases(updateSubcommand11),check:getCommandAliases(checkSubcommand3),autoupdate:getCommandAliases(autoupdateSubcommand)};async function version(client){let telemetry2=new VersionTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(versionCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArguments.args.slice(1),COMMAND_CONFIG66),needHelp=parsedArguments.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:versionCommand}))}if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("version",subcommand),output_manager_default.print(help(versionCommand,{columns:client.stderr.columns})),2;switch(subcommand){case"list":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(listSubcommand27),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list29());case"installed":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(installedSubcommand),2):(telemetry2.trackCliSubcommandInstalled(subcommandOriginal),installed());case"use":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(useSubcommand),2):(telemetry2.trackCliSubcommandUse(subcommandOriginal),use(args));case"update":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(updateSubcommand11),2):(telemetry2.trackCliSubcommandUpdate(subcommandOriginal),use(["latest"]));case"check":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(checkSubcommand3),2):(isNativeUpdateChild()||telemetry2.trackCliSubcommandCheck(subcommandOriginal),check3(client));case"autoupdate":return needHelp?(telemetry2.trackCliFlagHelp("version",subcommandOriginal),printHelp(autoupdateSubcommand),2):(telemetry2.trackCliSubcommandAutoupdate(subcommandOriginal),autoupdate(client,args));default:return parsedArguments.args.length>1?(output_manager_default.print(`${import_chalk318.default.red("Error")}: Invalid subcommand. See help instructions for usage:
1466
+ `),output_manager_default.print(help(versionCommand,{columns:client.stderr.columns})),2):status5(client)}}var import_chalk323=__toESM(require_source(),1);var UsageTelemetryClient=class extends TelemetryClient{trackCliOptionFrom(from){from&&this.trackCliOption({option:"from",value:this.redactedValue})}trackCliOptionTo(to){to&&this.trackCliOption({option:"to",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionBreakdown(breakdown){breakdown&&this.trackCliOption({option:"breakdown",value:breakdown})}trackCliOptionGroupBy(groupBy){groupBy&&this.trackCliOption({option:"group-by",value:groupBy})}};var import_error_utils25=__toESM(require_dist(),1);import{DateTime}from"luxon";var LA_TIMEZONE="America/Los_Angeles";function toISOOrThrow(dt){if(!dt.isValid)throw new Error(`Invalid DateTime: ${dt.invalidReason}`);let iso=dt.toISO();if(!iso)throw new Error("Failed to convert DateTime to ISO");return iso}function getDefaultFromDateTime(){return DateTime.now().setZone(LA_TIMEZONE).startOf("month")}function getDefaultToDateTime(){return DateTime.utc()}function getDefaultFromDate(){let dt=getDefaultFromDateTime();return toISOOrThrow(dt.toUTC())}function getDefaultToDate(){let dt=getDefaultToDateTime();return toISOOrThrow(dt.toUTC())}function parseBillingDate(dateStr,isEndDate=!1){if(dateStr.includes("T")){if(!DateTime.fromISO(dateStr).isValid)throw new Error(`Invalid date: "${dateStr}". Expected ISO 8601 format (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss)`);return dateStr}let laDateTime=DateTime.fromISO(dateStr,{zone:LA_TIMEZONE}).startOf("day");if(!laDateTime.isValid)throw new Error(`Invalid date: "${dateStr}". Expected ISO 8601 format (YYYY-MM-DD)`);let finalDateTime=isEndDate?laDateTime.plus({days:1}):laDateTime;return toISOOrThrow(finalDateTime.toUTC())}function getISOWeekNumber(dateStr){let date=new Date(dateStr);date.setUTCDate(date.getUTCDate()+4-(date.getUTCDay()||7));let yearStart=new Date(Date.UTC(date.getUTCFullYear(),0,1));return Math.ceil(((date.getTime()-yearStart.getTime())/864e5+1)/7)}function getISOWeekYear(dateStr){let date=new Date(dateStr);return date.setUTCDate(date.getUTCDate()+4-(date.getUTCDay()||7)),date.getUTCFullYear()}function getPeriodKey(chargePeriodStart,breakdownPeriod){if(!chargePeriodStart)return"Unknown";switch(breakdownPeriod){case"daily":return chargePeriodStart.substring(0,10);case"weekly":{let weekYear=getISOWeekYear(chargePeriodStart),weekNum=getISOWeekNumber(chargePeriodStart);return`${weekYear}-W${weekNum.toString().padStart(2,"0")}`}case"monthly":return chargePeriodStart.substring(0,7);default:return chargePeriodStart.substring(0,10)}}var VALID_BREAKDOWN_PERIODS=["daily","weekly","monthly"];function isValidBreakdownPeriod(value){return value!==void 0&&VALID_BREAKDOWN_PERIODS.includes(value)}var VALID_GROUP_BY_DIMENSIONS=["project","region"];function isValidGroupByDimension(value){return value!==void 0&&VALID_GROUP_BY_DIMENSIONS.includes(value)}var import_chalk320=__toESM(require_source(),1);function formatUsageAmount(amount,unit){if(unit==="managed_infrastructure_units")return formatUsageQuantity(amount,"MIUs",{showSmallValues:!0});let formattedAmount=amount.toFixed(2);return amount!==0&&Number(formattedAmount)===0?amount>0?"<$0.01":">-$0.01":`$${formattedAmount}`}function formatUsageQuantity(quantity,unit="",options={}){let displayUnit=quantity===1&&options.singularUnit?options.singularUnit:unit;if(options.unitKind==="digitalStorage")return formatStorageQuantity(quantity,unit,options.showSmallValues);let formatter=new Intl.NumberFormat("en-US",{maximumFractionDigits:2,notation:options.compact&&Math.abs(quantity)>=1e3?"compact":"standard"}),formattedQuantity=formatter.format(quantity),roundsToZero=formatter.format(Math.abs(quantity))===formatter.format(0),displayQuantity=options.showSmallValues&&quantity!==0&&roundsToZero?quantity>0?`<${formatter.format(.01)}`:`>${formatter.format(-.01)}`:formattedQuantity;return displayUnit?`${displayQuantity} ${displayUnit}`:displayQuantity}function formatStorageQuantity(quantity,unit,showSmallValues=!1){let units=["byte","kilobyte","megabyte","gigabyte","terabyte"],symbols=["B","KB","MB","GB","TB"],startIndex=units.indexOf(unit.toLowerCase());if(startIndex===-1)return formatUsageQuantity(quantity,unit,{showSmallValues});let value=quantity,unitIndex=startIndex;for(;Math.abs(value)>=1e3&&unitIndex<symbols.length-1;)value/=1e3,unitIndex++;return formatUsageQuantity(value,symbols[unitIndex],{showSmallValues})}var import_chalk319=__toESM(require_source(),1);import{DateTime as DateTime2}from"luxon";function formatServiceName(name,service){return service.included?`${name} (Flat Rate CDN)`:name}function formatServiceCost(service,costUnit){return service.included?"Included":formatUsageAmount(service.cost,costUnit)}function isEmptyService(service){return(service.category==="subscription"||service.quantity===0)&&service.cost===0}function visibleServices(services){return[...services.values()].filter(service=>!isEmptyService(service)).map(service=>[service.name,service])}function outputUsageHeader(data,title6,elapsedSuffix){let{log}=output_manager_default;log(`${title6} for ${data.contextType} ${import_chalk319.default.bold(data.contextName)} ${elapsedSuffix}`),log(""),data.usingDefaults?log(`${import_chalk319.default.gray("Billing cycle:")} ${formatRange(data.fromDisplay,data.toDisplay)}`):log(`${import_chalk319.default.gray("Period:")} ${formatRange(data.fromDisplay,data.toDisplay)}`),log(import_chalk319.default.gray(`Accrued through ${formatDate4(data.usageThrough)} in ${data.costUnit==="managed_infrastructure_units"?"MIUs":"USD"}, before credits and discounts.`)),log("")}function outputHiddenServicesHint(hiddenCount){hiddenCount<=0||output_manager_default.log(import_chalk319.default.gray(`${hiddenCount} ${hiddenCount===1?"service":"services"} with no usage hidden. Add --json to include ${hiddenCount===1?"it":"them"}.`))}function formatRange(from,to){let start=parseDate(from),end=parseDate(to);if(!start||!end)return`${from} to ${to}`;let sameYear=start.year===end.year;return`${start.toFormat(sameYear?"LLL d":"LLL d, yyyy")}\u2013${end.toFormat("LLL d, yyyy")}`}function formatDate4(value){return parseDate(value)?.toFormat("LLL d, yyyy")??value}function parseDate(value){let date=DateTime2.fromISO(value,{zone:"utc"});return date.isValid?date:null}function outputAggregated({data,startTime}){let{print,log}=output_manager_default;if(outputUsageHeader(data,"Usage",elapsed(Date.now()-startTime)),data.creditBalance){log(import_chalk320.default.bold("Current credit balance")),data.creditBalance.cadence&&log(` ${import_chalk320.default.gray("Cadence")} ${formatCadence(data.creditBalance.cadence)}`),log(` ${import_chalk320.default.gray("Used")} ${formatCredit(data.creditBalance.used,data.creditBalance.currency)} of ${formatCredit(data.creditBalance.allocated,data.creditBalance.currency)}`),log(` ${import_chalk320.default.gray("Remaining")} ${formatCredit(data.creditBalance.remaining,data.creditBalance.currency)}`);let progress=data.creditBalance.allocated>0?data.creditBalance.used/data.creditBalance.allocated*100:0;log(` ${import_chalk320.default.gray("Progress")} ${Math.round(progress)}%`),log("")}let allServices=[...data.services.entries()],sortedServices=visibleServices(data.services).sort((a,b)=>b[1].cost-a[1].cost);if(sortedServices.length===0){log("No usage data found for this period."),outputHiddenServicesHint(allServices.length);return}let usage2=sortedServices.filter(([,service])=>service.category==="usage"),subscriptions=sortedServices.filter(([,service])=>service.category==="subscription");usage2.length>0&&(log(import_chalk320.default.bold("Infrastructure")),printTable(print,usage2,"Infrastructure subtotal",data.costUnit),log("")),subscriptions.length>0&&(log(import_chalk320.default.bold("Subscription licenses")),printTable(print,subscriptions,"Subscriptions subtotal",data.costUnit),log("")),printCostSummary(print,usage2,subscriptions,data.costUnit),outputHiddenServicesHint(allServices.length-sortedServices.length)}function formatCadence(cadence){return cadence.split("_").map(word=>word[0].toUpperCase()+word.slice(1)).join(" ")}function formatCredit(amount,currency){return formatUsageAmount(amount,currency)}function printCostSummary(print,usage2,subscriptions,costUnit){let subscriptionCost=sumCost(subscriptions),infrastructureCost=sumCost(usage2),rows=[["Subscriptions",formatUsageAmount(subscriptionCost,costUnit)],["Infrastructure usage",formatUsageAmount(infrastructureCost,costUnit)],[import_chalk320.default.bold("Estimated total"),import_chalk320.default.bold(formatUsageAmount(subscriptionCost+infrastructureCost,costUnit))]],tablePrint=table(rows,{hsep:4,align:["l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1467
+ `)}function sumCost(services){return services.reduce((total,[,service])=>total+service.cost,0)}function printTable(print,services,subtotalLabel,costUnit){let headers=["Service","Usage","Cost"],rows=services.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:service.category==="usage",singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,costUnit)]),subtotal=services.reduce((total,[,service])=>total+service.cost,0);rows.push([import_chalk320.default.bold(subtotalLabel),"",import_chalk320.default.bold(formatUsageAmount(subtotal,costUnit))]);let tablePrint=table([headers.map(header=>import_chalk320.default.bold(import_chalk320.default.cyan(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`
1467
1468
  ${tablePrint}
1468
- `)}var import_chalk320=__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_chalk320.default.bold(import_chalk320.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_chalk320.default.bold(import_chalk320.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1469
- `)}outputHiddenServicesHint(hiddenCount)}var import_chalk321=__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_chalk321.default.bold(import_chalk321.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_chalk321.default.bold(import_chalk321.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1470
- `)}log(""),log(`${import_chalk321.default.gray("Estimated total:")} ${import_chalk321.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)}
1471
- `)}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}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}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),1;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(!!fromFlag!=!!toFlag)return error("Both --from and --to must be specified or neither for the current billing cycle"),1;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),1;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(", ")}`),1;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),1;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_utils25.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!fromFlag&&!toFlag,fromDate,toDate;try{fromDate=fromFlag?parseBillingDate(fromFlag,!1):billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate(),toDate=toFlag?parseBillingDate(toFlag,!0):billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()}catch(err){return error(err.message),1}let fromDisplay=fromFlag??extractDatePortion(fromDate),toDisplay=toFlag??extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk322.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})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",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_CONFIG67={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),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG67),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),2;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand14),2;case"add":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(addSubcommand13),2;case"config":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(configSubcommand),2;case"rm":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(removeSubcommand16),2;case"login":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(loginSubcommand),2;case"build":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(buildSubcommand),2;case"push":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(pushSubcommand),2;case"tag":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(tagsLsSubcommand),2):nested==="inspect"||nested==="get"?(printHelp(tagsInspectSubcommand),2):(printHelp(tagsAggregateCommand),2)}case"image":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(imageLsSubcommand),2):nested==="inspect"||nested==="get"?(printHelp(imageInspectSubcommand),2):nested==="rm"||nested==="remove"||nested==="delete"?(printHelp(imageRmSubcommand),2):(printHelp(imageAggregateCommand),2)}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),2):hasAction(PERMISSIONS_ACTIONS.add)?(printPermissionsActionHelp2(permissionsAddSubcommand),2):hasAction(PERMISSIONS_ACTIONS.rm)?(printPermissionsActionHelp2(permissionsRmSubcommand),2):hasAction(PERMISSIONS_ACTIONS.clear)?(printPermissionsActionHelp2(permissionsClearSubcommand),2):(printHelp(permissionsAggregateCommand),2)}default:return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}switch(subcommand){case"ls":return telemetry2.trackCliSubcommandLs(subcommandOriginal),(await import("./chunks/ls-43NFH2L6.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-EHEMDPJD.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandAdd(subcommandOriginal),(await import("./chunks/add-XNYC3JIL.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-EDC5XGQX.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-WEMHKTUL.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-ZAAIOSQ4.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-ZBS6SOT7.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-LBPCQFBD.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-BTMFM3XQ.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-PY2GZYQD.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-EYOTCJGO.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG67)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms42=__toESM(require_ms(),1),import_chalk323=__toESM(require_source(),1),import_pluralize25=__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),1}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),1;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk323.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 get <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1472
- `)}else output_manager_default.log(`${(0,import_pluralize25.default)("Webhook",webhooks.length,!0)} found under ${import_chalk323.default.bold(contextName)} ${import_chalk323.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
1473
-
1474
- `));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms42.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_chalk323.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk324=__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),1}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 get <id>")}]},1),output_manager_default.error(`${getCommandName("webhooks get <id>")} expects one argument`),1;telemetry2.trackCliArgumentId(webhookId),telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk324.default.cyan(`${getCommandName("webhooks get <id>")}`)}`),1;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk324.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)}
1475
- `)}else{output_manager_default.log(`Webhook ${webhookId} found under ${import_chalk324.default.bold(contextName)} ${import_chalk324.default.gray(getStamp())}`),output_manager_default.print(`
1476
- `),output_manager_default.print(import_chalk324.default.bold(` General
1477
-
1478
- `)),output_manager_default.print(` ${import_chalk324.default.cyan("ID")} ${webhook.id}
1479
- `),output_manager_default.print(` ${import_chalk324.default.cyan("URL")} ${webhook.url}
1480
- `),output_manager_default.print(` ${import_chalk324.default.cyan("Created At")} ${formatDate(webhook.createdAt)}
1481
- `),output_manager_default.print(` ${import_chalk324.default.cyan("Updated At")} ${formatDate(webhook.updatedAt)}
1469
+ `)}var import_chalk321=__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_chalk321.default.bold(import_chalk321.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_chalk321.default.bold(import_chalk321.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1470
+ `)}outputHiddenServicesHint(hiddenCount)}var import_chalk322=__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_chalk322.default.bold(import_chalk322.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_chalk322.default.bold(import_chalk322.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
1471
+ `)}log(""),log(`${import_chalk322.default.gray("Estimated total:")} ${import_chalk322.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)}
1472
+ `)}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}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}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),1;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(!!fromFlag!=!!toFlag)return error("Both --from and --to must be specified or neither for the current billing cycle"),1;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),1;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(", ")}`),1;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),1;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_utils25.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!fromFlag&&!toFlag,fromDate,toDate;try{fromDate=fromFlag?parseBillingDate(fromFlag,!1):billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate(),toDate=toFlag?parseBillingDate(toFlag,!0):billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()}catch(err){return error(err.message),1}let fromDisplay=fromFlag??extractDatePortion(fromDate),toDisplay=toFlag??extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk323.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_CONFIG67={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),1}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG67),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),2;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand14),2;case"add":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(addSubcommand13),2;case"config":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(configSubcommand),2;case"rm":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(removeSubcommand16),2;case"login":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(loginSubcommand),2;case"build":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(buildSubcommand),2;case"push":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(pushSubcommand),2;case"tag":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(tagsLsSubcommand),2):nested==="inspect"||nested==="get"?(printHelp(tagsInspectSubcommand),2):(printHelp(tagsAggregateCommand),2)}case"image":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(imageLsSubcommand),2):nested==="inspect"||nested==="get"?(printHelp(imageInspectSubcommand),2):nested==="rm"||nested==="remove"||nested==="delete"?(printHelp(imageRmSubcommand),2):(printHelp(imageAggregateCommand),2)}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),2):hasAction(PERMISSIONS_ACTIONS.add)?(printPermissionsActionHelp2(permissionsAddSubcommand),2):hasAction(PERMISSIONS_ACTIONS.rm)?(printPermissionsActionHelp2(permissionsRmSubcommand),2):hasAction(PERMISSIONS_ACTIONS.clear)?(printPermissionsActionHelp2(permissionsClearSubcommand),2):(printHelp(permissionsAggregateCommand),2)}default:return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}switch(subcommand){case"ls":return telemetry2.trackCliSubcommandLs(subcommandOriginal),(await import("./chunks/ls-6EDJUUDW.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-KYFVYFWX.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandCreate(subcommandOriginal),(await import("./chunks/add-VLVURKGS.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-G2A6KPPM.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-CYYVIF2U.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-YEDMPXUF.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-MR7MUWBQ.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-COILRLCW.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-DVGQQZNC.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-SQIUEBFK.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-IWUBXZBZ.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG67)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms42=__toESM(require_ms(),1),import_chalk324=__toESM(require_source(),1),import_pluralize25=__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),1}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),1;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk324.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 get <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1473
+ `)}else output_manager_default.log(`${(0,import_pluralize25.default)("Webhook",webhooks.length,!0)} found under ${import_chalk324.default.bold(contextName)} ${import_chalk324.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
1474
+
1475
+ `));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms42.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_chalk324.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk325=__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),1}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 get <id>")}]},1),output_manager_default.error(`${getCommandName("webhooks get <id>")} expects one argument`),1;telemetry2.trackCliArgumentId(webhookId),telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk325.default.cyan(`${getCommandName("webhooks get <id>")}`)}`),1;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk325.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)}
1476
+ `)}else{output_manager_default.log(`Webhook ${webhookId} found under ${import_chalk325.default.bold(contextName)} ${import_chalk325.default.gray(getStamp())}`),output_manager_default.print(`
1477
+ `),output_manager_default.print(import_chalk325.default.bold(` General
1478
+
1479
+ `)),output_manager_default.print(` ${import_chalk325.default.cyan("ID")} ${webhook.id}
1480
+ `),output_manager_default.print(` ${import_chalk325.default.cyan("URL")} ${webhook.url}
1481
+ `),output_manager_default.print(` ${import_chalk325.default.cyan("Created At")} ${formatDate(webhook.createdAt)}
1482
+ `),output_manager_default.print(` ${import_chalk325.default.cyan("Updated At")} ${formatDate(webhook.updatedAt)}
1482
1483
  `),output_manager_default.print(`
1483
- `),output_manager_default.print(import_chalk324.default.bold(` Events
1484
+ `),output_manager_default.print(import_chalk325.default.bold(` Events
1484
1485
 
1485
1486
  `));for(let event of webhook.events)output_manager_default.print(` - ${event}
1486
1487
  `);if(webhook.projectIds&&webhook.projectIds.length>0)if(output_manager_default.print(`
1487
- `),output_manager_default.print(import_chalk324.default.bold(` Projects
1488
+ `),output_manager_default.print(import_chalk325.default.bold(` Projects
1488
1489
 
1489
1490
  `)),webhook.projectsMetadata&&webhook.projectsMetadata.length>0)for(let project of webhook.projectsMetadata)output_manager_default.print(` - ${project.name} (${project.id})
1490
1491
  `);else for(let projectId of webhook.projectIds)output_manager_default.print(` - ${projectId}
1491
1492
  `);output_manager_default.print(`
1492
- `)}return 0}var import_chalk325=__toESM(require_source(),1);async function createWebhook(client,payload){return await client.fetch("/v1/webhooks",{method:"POST",body:payload})}var WebhooksCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentUrl(url){url&&this.trackCliArgument({arg:"url",value:this.redactedValue})}trackCliOptionEvent(events){events&&events.length>0&&this.trackCliOption({option:"event",value:String(events.length)})}trackCliOptionProject(projects2){projects2&&projects2.length>0&&this.trackCliOption({option:"project",value:String(projects2.length)})}};var cachedEvents=null;async function getWebhookEvents(){if(cachedEvents)return cachedEvents;let cache=new OpenApiCache;if(!await cache.load())return output_manager_default.debug("Failed to load OpenAPI spec for webhook events"),[];let createWebhookEndpoint=cache.getEndpoints().find(e2=>e2.path==="/v1/webhooks"&&e2.method==="POST");if(!createWebhookEndpoint)return output_manager_default.debug("Could not find POST /v1/webhooks endpoint in OpenAPI spec"),[];let eventsField=cache.getBodyFields(createWebhookEndpoint).find(f=>f.name==="events");return eventsField?.enumValues?(cachedEvents=eventsField.enumValues.filter(v=>typeof v=="string"),cachedEvents):(output_manager_default.debug("Could not find events enum in webhook endpoint"),[])}async function validateWebhookEvents(events){let validEvents=await getWebhookEvents();if(validEvents.length===0)return[];let validSet=new Set(validEvents);return events.filter(e2=>!validSet.has(e2))}var WEBHOOKS_EVENTS_DOCS_URL="https://vercel.com/docs/webhooks/webhooks-api";async function create8(client,argv){let telemetry2=new WebhooksCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand9.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[url]=args;if(url)try{let urlObj=new URL(url);if(!["http:","https:"].includes(urlObj.protocol))return output_manager_default.error("Webhook URL must use http or https protocol"),1}catch{return output_manager_default.error(`Invalid URL: ${url}`),1}else{if(client.nonInteractive){let argv2=client.argv.slice(2),subcommandParts=argv2.slice(0,2),rest=argv2.slice(2),subcommandWithPlaceholder=`${subcommandParts.join(" ")} <url>${rest.length?` ${rest.join(" ")}`:""}`;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_URL,message:"Webhook URL is required. Provide URL as the first argument.",next:[{command:getCommandNamePlain(subcommandWithPlaceholder)}]},1)}url=await client.input.text({message:"Webhook URL:",validate:val=>{if(!val)return"URL is required";try{let urlObj=new URL(val);if(!["http:","https:"].includes(urlObj.protocol))return"Webhook URL must use http or https protocol"}catch{return"Invalid URL"}return!0}})}let projectIds=opts["--project"],eventFlags=opts["--event"],events;if(!eventFlags||eventFlags.length===0){client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_EVENTS,message:"At least one event is required. Use --event <event> (can be repeated).",next:[{command:getCommandNamePlain("webhooks create <url> --event <event>")}]},1);let availableEvents=await getWebhookEvents()??[];if(availableEvents.length===0)return output_manager_default.error("Could not fetch available webhook events. Please specify events using --event flags."),1;events=await client.input.checkbox({message:"Select events:",choices:availableEvents.map(event=>({name:event,value:event})),validate:selected=>selected.length===0?"At least one event is required":!0})}else{let invalidEvents=await validateWebhookEvents(eventFlags);if(invalidEvents.length>0){if(client.nonInteractive){let suggested=buildCreateCommandWithEventPlaceholder(client.argv,url);return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}. Use a valid event name (e.g. deployment.created).`,hint:`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`,next:[{command:suggested,when:"use a valid --event value"}]},1),1}return output_manager_default.error(`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}`),1}events=eventFlags}telemetry2.trackCliArgumentUrl(url),telemetry2.trackCliOptionEvent(events),telemetry2.trackCliOptionProject(projectIds);let contextName=await getContextName(client),createStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Creating webhook under ${import_chalk325.default.bold(contextName)}`);try{let webhook=await createWebhook(client,{url,events,projectIds});if(client.nonInteractive){let json={status:AGENT_STATUS.OK,webhook:{id:webhook.id,url:webhook.url,events:webhook.events,...webhook.projectIds?.length?{projectIds:webhook.projectIds}:{}},message:`Webhook ${webhook.id} created.`,next:[{command:getCommandNamePlain(`webhooks get ${webhook.id}`),when:"Inspect the webhook"}]};return webhook.secret&&(json.secret=webhook.secret),client.stdout.write(`${JSON.stringify(json,null,2)}
1493
- `),0}return output_manager_default.stopSpinner(),output_manager_default.success(`Webhook created: ${import_chalk325.default.bold(webhook.id)} ${createStamp()}`),output_manager_default.print(`
1494
- `),output_manager_default.print(import_chalk325.default.bold(` Webhook Details
1495
-
1496
- `)),output_manager_default.print(` ${import_chalk325.default.cyan("ID".padEnd(10))}${webhook.id}
1497
- `),output_manager_default.print(` ${import_chalk325.default.cyan("URL".padEnd(10))}${webhook.url}
1498
- `),output_manager_default.print(` ${import_chalk325.default.cyan("Events".padEnd(10))}${webhook.events.join(", ")}
1499
- `),webhook.projectIds&&webhook.projectIds.length>0&&output_manager_default.print(` ${import_chalk325.default.cyan("Projects".padEnd(10))}${webhook.projectIds.join(", ")}
1493
+ `)}return 0}var import_chalk326=__toESM(require_source(),1);async function createWebhook(client,payload){return await client.fetch("/v1/webhooks",{method:"POST",body:payload})}var WebhooksCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentUrl(url){url&&this.trackCliArgument({arg:"url",value:this.redactedValue})}trackCliOptionEvent(events){events&&events.length>0&&this.trackCliOption({option:"event",value:String(events.length)})}trackCliOptionProject(projects2){projects2&&projects2.length>0&&this.trackCliOption({option:"project",value:String(projects2.length)})}};var cachedEvents=null;async function getWebhookEvents(){if(cachedEvents)return cachedEvents;let cache=new OpenApiCache;if(!await cache.load())return output_manager_default.debug("Failed to load OpenAPI spec for webhook events"),[];let createWebhookEndpoint=cache.getEndpoints().find(e2=>e2.path==="/v1/webhooks"&&e2.method==="POST");if(!createWebhookEndpoint)return output_manager_default.debug("Could not find POST /v1/webhooks endpoint in OpenAPI spec"),[];let eventsField=cache.getBodyFields(createWebhookEndpoint).find(f=>f.name==="events");return eventsField?.enumValues?(cachedEvents=eventsField.enumValues.filter(v=>typeof v=="string"),cachedEvents):(output_manager_default.debug("Could not find events enum in webhook endpoint"),[])}async function validateWebhookEvents(events){let validEvents=await getWebhookEvents();if(validEvents.length===0)return[];let validSet=new Set(validEvents);return events.filter(e2=>!validSet.has(e2))}var WEBHOOKS_EVENTS_DOCS_URL="https://vercel.com/docs/webhooks/webhooks-api";async function create8(client,argv){let telemetry2=new WebhooksCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand9.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[url]=args;if(url)try{let urlObj=new URL(url);if(!["http:","https:"].includes(urlObj.protocol))return output_manager_default.error("Webhook URL must use http or https protocol"),1}catch{return output_manager_default.error(`Invalid URL: ${url}`),1}else{if(client.nonInteractive){let argv2=client.argv.slice(2),subcommandParts=argv2.slice(0,2),rest=argv2.slice(2),subcommandWithPlaceholder=`${subcommandParts.join(" ")} <url>${rest.length?` ${rest.join(" ")}`:""}`;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_URL,message:"Webhook URL is required. Provide URL as the first argument.",next:[{command:getCommandNamePlain(subcommandWithPlaceholder)}]},1)}url=await client.input.text({message:"Webhook URL:",validate:val=>{if(!val)return"URL is required";try{let urlObj=new URL(val);if(!["http:","https:"].includes(urlObj.protocol))return"Webhook URL must use http or https protocol"}catch{return"Invalid URL"}return!0}})}let projectIds=opts["--project"],eventFlags=opts["--event"],events;if(!eventFlags||eventFlags.length===0){client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_EVENTS,message:"At least one event is required. Use --event <event> (can be repeated).",next:[{command:getCommandNamePlain("webhooks create <url> --event <event>")}]},1);let availableEvents=await getWebhookEvents()??[];if(availableEvents.length===0)return output_manager_default.error("Could not fetch available webhook events. Please specify events using --event flags."),1;events=await client.input.checkbox({message:"Select events:",choices:availableEvents.map(event=>({name:event,value:event})),validate:selected=>selected.length===0?"At least one event is required":!0})}else{let invalidEvents=await validateWebhookEvents(eventFlags);if(invalidEvents.length>0){if(client.nonInteractive){let suggested=buildCreateCommandWithEventPlaceholder(client.argv,url);return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}. Use a valid event name (e.g. deployment.created).`,hint:`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`,next:[{command:suggested,when:"use a valid --event value"}]},1),1}return output_manager_default.error(`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}`),1}events=eventFlags}telemetry2.trackCliArgumentUrl(url),telemetry2.trackCliOptionEvent(events),telemetry2.trackCliOptionProject(projectIds);let contextName=await getContextName(client),createStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Creating webhook under ${import_chalk326.default.bold(contextName)}`);try{let webhook=await createWebhook(client,{url,events,projectIds});if(client.nonInteractive){let json={status:AGENT_STATUS.OK,webhook:{id:webhook.id,url:webhook.url,events:webhook.events,...webhook.projectIds?.length?{projectIds:webhook.projectIds}:{}},message:`Webhook ${webhook.id} created.`,next:[{command:getCommandNamePlain(`webhooks get ${webhook.id}`),when:"Inspect the webhook"}]};return webhook.secret&&(json.secret=webhook.secret),client.stdout.write(`${JSON.stringify(json,null,2)}
1494
+ `),0}return output_manager_default.stopSpinner(),output_manager_default.success(`Webhook created: ${import_chalk326.default.bold(webhook.id)} ${createStamp()}`),output_manager_default.print(`
1495
+ `),output_manager_default.print(import_chalk326.default.bold(` Webhook Details
1496
+
1497
+ `)),output_manager_default.print(` ${import_chalk326.default.cyan("ID".padEnd(10))}${webhook.id}
1498
+ `),output_manager_default.print(` ${import_chalk326.default.cyan("URL".padEnd(10))}${webhook.url}
1499
+ `),output_manager_default.print(` ${import_chalk326.default.cyan("Events".padEnd(10))}${webhook.events.join(", ")}
1500
+ `),webhook.projectIds&&webhook.projectIds.length>0&&output_manager_default.print(` ${import_chalk326.default.cyan("Projects".padEnd(10))}${webhook.projectIds.join(", ")}
1500
1501
  `),output_manager_default.print(`
1501
- `),output_manager_default.warn(`Save this secret - it will not be shown again: ${import_chalk325.default.bold(webhook.secret)}`),output_manager_default.print(`
1502
- `),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)){if(client.nonInteractive){let reason=err.code==="invalid_url"?AGENT_REASON.INVALID_URL:err.code==="invalid_event"?AGENT_REASON.INVALID_EVENT:AGENT_REASON.API_ERROR,suggested=reason===AGENT_REASON.INVALID_EVENT?buildCreateCommandWithEventPlaceholder(client.argv,url):void 0;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:err.message,hint:reason===AGENT_REASON.INVALID_EVENT?`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`:void 0,next:suggested!==void 0?[{command:suggested,when:"use a valid --event value"}]:void 0},1),1}return err.code==="invalid_url"?(output_manager_default.error(`Invalid webhook URL: ${url}`),1):err.code==="invalid_event"?(output_manager_default.error("Invalid event type. Please check the event names."),1):(output_manager_default.error(err.message),1)}throw err}}function buildCreateCommandWithEventPlaceholder(fullArgv,url){let argv=fullArgv.slice(2),out=["webhooks","create",url],i=3,hadEvent=!1;for(;i<argv.length;){if(argv[i]==="--event"||argv[i]==="-e"){hadEvent=!0,i+=2;continue}out.push(argv[i]),i++}return hadEvent&&out.push("--event","<event>"),getCommandNamePlain(out.join(" "))}var import_chalk326=__toESM(require_source(),1);async function deleteWebhook(client,webhookId){await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`,{method:"DELETE"})}var WebhooksRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id2){id2&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};function webhookCommandWithGlobalFlags(baseSubcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${baseSubcommand} ${globalFlags.join(" ")}`:baseSubcommand;return getCommandNamePlain(full)}async function rm12(client,argv){let telemetry2=new WebhooksRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand18.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[webhookId]=args;if(telemetry2.trackCliArgumentId(webhookId),telemetry2.trackCliFlagYes(opts["--yes"]),!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)},{command:webhookCommandWithGlobalFlags("webhooks rm <id> --yes",client.argv)}]},1),output_manager_default.error(`${getCommandName("webhooks rm <id>")} expects one argument`),1;let skipConfirmation=opts["--yes"]||!1;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Removing a webhook requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1);let contextName=await getContextName(client);if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk326.default.cyan(`${getCommandName("webhooks rm <id>")}`)}`),1;client.nonInteractive||output_manager_default.spinner(`Fetching webhook ${webhookId}`);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:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},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(output_manager_default.stopSpinner(),!skipConfirmation&&!await client.input.confirm(`Are you sure you want to remove webhook ${param(webhookId)} (${webhook.url})?`,!1))return client.nonInteractive||output_manager_default.log("Canceled"),0;let removeStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Removing webhook under ${import_chalk326.default.bold(contextName)}`);try{return await deleteWebhook(client,webhookId),output_manager_default.stopSpinner(),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:"ok",webhook:{id:webhookId,url:webhook.url},message:`Webhook ${webhookId} removed.`},null,2)}
1503
- `),0):(output_manager_default.success(`Webhook ${import_chalk326.default.bold(webhookId)} removed ${removeStamp()}`),0)}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:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),1;throw err}}var WebhooksTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandGet(actual){this.trackCliSubcommand({subcommand:"get",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG68={create:["create","add"],get:["get","inspect"],ls:["ls","list"],rm:["rm","remove","delete"]};async function main36(client){let parsedArgs,flagsSpecification=getFlagsSpecification(webhooksCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),1}let telemetry2=new WebhooksTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG68),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("webhooks"),output_manager_default.print(help(webhooksCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:webhooksCommand,columns:client.stderr.columns})),2}switch(subcommand){case"create":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(createSubcommand9)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create8(client,args));case"get":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand6)):(telemetry2.trackCliSubcommandGet(subcommandOriginal),get6(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand18)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm12(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand30)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls11(client,args))}}var import_chalk327=__toESM(require_source(),1);var WhoamiTelemetryClient=class extends TelemetryClient{};async function whoami(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(whoamiCommand.options),telemetry2=new WhoamiTelemetryClient({opts:{store:client.telemetryEventStore}});try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),1}if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("whoami"),output_manager_default.print(help(whoamiCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),!client.authConfig.token)return asJson?client.stdout.write(`${JSON.stringify({loggedIn:!1},null,2)}
1502
+ `),output_manager_default.warn(`Save this secret - it will not be shown again: ${import_chalk326.default.bold(webhook.secret)}`),output_manager_default.print(`
1503
+ `),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)){if(client.nonInteractive){let reason=err.code==="invalid_url"?AGENT_REASON.INVALID_URL:err.code==="invalid_event"?AGENT_REASON.INVALID_EVENT:AGENT_REASON.API_ERROR,suggested=reason===AGENT_REASON.INVALID_EVENT?buildCreateCommandWithEventPlaceholder(client.argv,url):void 0;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:err.message,hint:reason===AGENT_REASON.INVALID_EVENT?`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`:void 0,next:suggested!==void 0?[{command:suggested,when:"use a valid --event value"}]:void 0},1),1}return err.code==="invalid_url"?(output_manager_default.error(`Invalid webhook URL: ${url}`),1):err.code==="invalid_event"?(output_manager_default.error("Invalid event type. Please check the event names."),1):(output_manager_default.error(err.message),1)}throw err}}function buildCreateCommandWithEventPlaceholder(fullArgv,url){let argv=fullArgv.slice(2),out=["webhooks","create",url],i=3,hadEvent=!1;for(;i<argv.length;){if(argv[i]==="--event"||argv[i]==="-e"){hadEvent=!0,i+=2;continue}out.push(argv[i]),i++}return hadEvent&&out.push("--event","<event>"),getCommandNamePlain(out.join(" "))}var import_chalk327=__toESM(require_source(),1);async function deleteWebhook(client,webhookId){await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`,{method:"DELETE"})}var WebhooksRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id2){id2&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};function webhookCommandWithGlobalFlags(baseSubcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${baseSubcommand} ${globalFlags.join(" ")}`:baseSubcommand;return getCommandNamePlain(full)}async function rm12(client,argv){let telemetry2=new WebhooksRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand18.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args,flags:opts}=parsedArgs,[webhookId]=args;if(telemetry2.trackCliArgumentId(webhookId),telemetry2.trackCliFlagYes(opts["--yes"]),!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)},{command:webhookCommandWithGlobalFlags("webhooks rm <id> --yes",client.argv)}]},1),output_manager_default.error(`${getCommandName("webhooks rm <id>")} expects one argument`),1;let skipConfirmation=opts["--yes"]||!1;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Removing a webhook requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1);let contextName=await getContextName(client);if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk327.default.cyan(`${getCommandName("webhooks rm <id>")}`)}`),1;client.nonInteractive||output_manager_default.spinner(`Fetching webhook ${webhookId}`);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:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},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(output_manager_default.stopSpinner(),!skipConfirmation&&!await client.input.confirm(`Are you sure you want to remove webhook ${param(webhookId)} (${webhook.url})?`,!1))return client.nonInteractive||output_manager_default.log("Canceled"),0;let removeStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Removing webhook under ${import_chalk327.default.bold(contextName)}`);try{return await deleteWebhook(client,webhookId),output_manager_default.stopSpinner(),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:"ok",webhook:{id:webhookId,url:webhook.url},message:`Webhook ${webhookId} removed.`},null,2)}
1504
+ `),0):(output_manager_default.success(`Webhook ${import_chalk327.default.bold(webhookId)} removed ${removeStamp()}`),0)}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:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),1;throw err}}var WebhooksTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandGet(actual){this.trackCliSubcommand({subcommand:"get",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG68={create:["create","add"],get:["get","inspect"],ls:["ls","list"],rm:["rm","remove","delete"]};async function main36(client){let parsedArgs,flagsSpecification=getFlagsSpecification(webhooksCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),1}let telemetry2=new WebhooksTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG68),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry2.trackCliFlagHelp("webhooks"),output_manager_default.print(help(webhooksCommand,{columns:client.stderr.columns})),2;function printHelp(command2){return output_manager_default.print(help(command2,{parent:webhooksCommand,columns:client.stderr.columns})),2}switch(subcommand){case"create":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(createSubcommand9)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create8(client,args));case"get":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand6)):(telemetry2.trackCliSubcommandGet(subcommandOriginal),get6(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand18)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm12(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand30)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls11(client,args))}}var import_chalk328=__toESM(require_source(),1);var WhoamiTelemetryClient=class extends TelemetryClient{};async function whoami(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(whoamiCommand.options),telemetry2=new WhoamiTelemetryClient({opts:{store:client.telemetryEventStore}});try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),1}if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("whoami"),output_manager_default.print(help(whoamiCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),!client.authConfig.token)return asJson?client.stdout.write(`${JSON.stringify({loggedIn:!1},null,2)}
1504
1505
  `):(output_manager_default.log("Logged out."),output_manager_default.log(`Run ${getCommandName("deploy --temporary")} to create a temporary deployment you can claim later, or ${getCommandName("login")} to log in.`)),1;let scope=await getScope(client,{resolveLocalScope:!0}),{user,team,app,globalTeam}=scope,plan=(team?team.billing?.plan:user?.billing?.plan)??null,hasLocalOverride=!scope.explicitScopeProvided&&((team?.id??null)!==(globalTeam?.id??null)||scope.scopeMismatch);if(asJson){let jsonOutput={team:team?{id:team.id,slug:team.slug,name:team.name,plan}:null,plan};user&&(jsonOutput.username=user.username,jsonOutput.email=user.email,jsonOutput.name=user.name),app&&(jsonOutput.app=app),hasLocalOverride&&(jsonOutput.localOverride=!0,jsonOutput.globalTeam=globalTeam?{id:globalTeam.id,slug:globalTeam.slug,name:globalTeam.name}:null),client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
1505
- `)}else if(client.stdout.isTTY){if(output_manager_default.log(`Logged in as ${import_chalk327.default.bold(formatUsername(scope))}`),team?output_manager_default.log(`Active team: ${import_chalk327.default.bold(team.slug)}${team.name&&team.name!==team.slug?` (${team.name})`:""}`):output_manager_default.log(`Active team: ${import_chalk327.default.bold("Personal Account")}`),plan&&output_manager_default.log(`Active team plan: ${import_chalk327.default.bold(formatBillingPlan(plan))}`),hasLocalOverride){let globalLabel=globalTeam?globalTeam.slug:"Personal Account",localLabel=team?team.slug:"Personal Account";output_manager_default.log(`${import_chalk327.default.yellow("Local override:")} scope is set to ${import_chalk327.default.bold(localLabel)} by the linked project in this directory (globally selected: ${import_chalk327.default.bold(globalLabel)}).`)}}else client.stdout.write(`${formatUsername(scope)}
1506
+ `)}else if(client.stdout.isTTY){if(output_manager_default.log(`Logged in as ${import_chalk328.default.bold(formatUsername(scope))}`),team?output_manager_default.log(`Active team: ${import_chalk328.default.bold(team.slug)}${team.name&&team.name!==team.slug?` (${team.name})`:""}`):output_manager_default.log(`Active team: ${import_chalk328.default.bold("Personal Account")}`),plan&&output_manager_default.log(`Active team plan: ${import_chalk328.default.bold(formatBillingPlan(plan))}`),hasLocalOverride){let globalLabel=globalTeam?globalTeam.slug:"Personal Account",localLabel=team?team.slug:"Personal Account";output_manager_default.log(`${import_chalk328.default.yellow("Local override:")} scope is set to ${import_chalk328.default.bold(localLabel)} by the linked project in this directory (globally selected: ${import_chalk328.default.bold(globalLabel)}).`)}}else client.stdout.write(`${formatUsername(scope)}
1506
1507
  `);return 0}function formatUsername(scope){if(scope.user)return scope.user.username;if(scope.app)return scope.app.id;throw new Error("Could not format principal identity")}function formatBillingPlan(plan){return plan.toLowerCase()==="oss"?"OSS":plan.charAt(0).toUpperCase()+plan.slice(1)}export{activity,agent,agentRuns,main2 as aiGateway,alerts,alias,api,bisect,main3 as blob,budget,builders,main4 as buy,main5 as cache,main7 as certs,changelog,main6 as ci,comments,connex,contract,main8 as crons,curl,main9 as deployHooks,dns,main10 as domains,experiments,main19 as firewall,main21 as flags,main22 as git,main20 as globalConfig,guidance,httpstat,main23 as init,inspect14 as inspect,install,main25 as integration,main24 as integrationResource,main26 as kms,login,logout2 as logout,logs2 as logs,main27 as mcp,metrics,main28 as microfrontends,openCommandHandler as open,main29 as project,promote_default as promote,main as pull,redeploy,main30 as redirects,remove13 as remove,rollback_default as rollback,rollingRelease,main31 as routes,sandbox,main32 as schedules,security,setup,signup,skills,main33 as storage,main34 as target,teams,telemetry,main35 as tokens,traces,upgrade,usage,vcr,version,main36 as webhooks,whoami};