vercel 59.18.0 → 59.19.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.
- package/dist/chunks/add-EM223ILV.js +8 -0
- package/dist/chunks/{add-PMMNU7RN.js → add-G5SYPCB4.js} +1 -1
- package/dist/chunks/add-SKKI525V.js +8 -0
- package/dist/chunks/build-JEZ2ELHZ.js +7 -0
- package/dist/chunks/{chunk-FOUWMNT7.js → chunk-327GP3PO.js} +1 -1
- package/dist/chunks/{chunk-WTXJ4X2D.js → chunk-33FG2PIV.js} +1 -1
- package/dist/chunks/chunk-4P66SQRS.js +9 -0
- package/dist/chunks/{chunk-7VWHD7WQ.js → chunk-556CXJRE.js} +1 -1
- package/dist/chunks/{chunk-IG7TNQGL.js → chunk-5XK67SSI.js} +1 -1
- package/dist/chunks/{chunk-SJ6ZELKN.js → chunk-5ZIZD5ZG.js} +1 -1
- package/dist/chunks/{chunk-JNFC2ASC.js → chunk-6RHRDUSK.js} +1 -1
- package/dist/chunks/{chunk-HUI32UNA.js → chunk-AGDWVTJV.js} +4 -4
- package/dist/chunks/{chunk-66K6BTX2.js → chunk-AJAO4Q3T.js} +1 -1
- package/dist/chunks/{chunk-WUMV6WRR.js → chunk-B7XCF45C.js} +1 -1
- package/dist/chunks/{chunk-Y7SVAW54.js → chunk-BW24TEUN.js} +1 -1
- package/dist/chunks/{chunk-FZIRRUBO.js → chunk-CQPIWP7K.js} +1 -1
- package/dist/chunks/{chunk-KCSMPBFZ.js → chunk-CWTXZPUV.js} +1 -1
- package/dist/chunks/{chunk-254TC5HX.js → chunk-E4CRGS56.js} +1 -1
- package/dist/chunks/chunk-F5HAX74T.js +18 -0
- package/dist/chunks/{chunk-2NOOW6ZP.js → chunk-FBVWXFCP.js} +1 -1
- package/dist/chunks/{chunk-22NPN6VB.js → chunk-FCC3LYIB.js} +1 -1
- package/dist/chunks/{chunk-MOPFNLFK.js → chunk-FNYAHJIZ.js} +1 -1
- package/dist/chunks/{chunk-QVINTB7T.js → chunk-FUK2JEKI.js} +1 -1
- package/dist/chunks/{chunk-HQEAROJN.js → chunk-GCHDJ44X.js} +1 -1
- package/dist/chunks/chunk-GI6G3FJJ.js +19 -0
- package/dist/chunks/{chunk-WSNDO7JA.js → chunk-GTK7TBLW.js} +1 -1
- package/dist/chunks/{chunk-YCFYVPFP.js → chunk-HBF4YJR2.js} +1 -1
- package/dist/chunks/{chunk-EEKVUD55.js → chunk-HKKKVW7W.js} +1 -1
- package/dist/chunks/{chunk-QTSRDWKO.js → chunk-IERVS47L.js} +1 -1
- package/dist/chunks/{chunk-LX5GOY7N.js → chunk-IH2HZFLM.js} +1 -1
- package/dist/chunks/{chunk-DD5EEWWR.js → chunk-IX4MMEGJ.js} +3 -3
- package/dist/chunks/{chunk-ZQGW6A7G.js → chunk-JB45UWGT.js} +1 -1
- package/dist/chunks/{chunk-HFDQ3P7T.js → chunk-KU32YRCG.js} +1 -1
- package/dist/chunks/{chunk-YNINVUX2.js → chunk-LZTGSYL3.js} +1 -1
- package/dist/chunks/{chunk-CJ3LL5E7.js → chunk-MBHVWCFE.js} +1 -1
- package/dist/chunks/{chunk-Q2TOOW5N.js → chunk-MIGWUMB3.js} +1 -1
- package/dist/chunks/{chunk-BDCZFSP2.js → chunk-NLQNFWX2.js} +1 -1
- package/dist/chunks/{chunk-H7S7TVBZ.js → chunk-OROPHBHW.js} +1 -1
- package/dist/chunks/{chunk-YWDSQTGK.js → chunk-OWEH7BYO.js} +1 -1
- package/dist/chunks/{chunk-KACMQTK7.js → chunk-OXH3RM6U.js} +1 -1
- package/dist/chunks/{chunk-SECZRAWX.js → chunk-PIKD5KTH.js} +1 -1
- package/dist/chunks/{chunk-4A5YIRNE.js → chunk-PNRWNSM2.js} +1 -1
- package/dist/chunks/{chunk-QDE5CFRC.js → chunk-Q2Z6EXCT.js} +1 -1
- package/dist/chunks/{chunk-46NPQBNU.js → chunk-RIQFJ2MY.js} +3 -3
- package/dist/chunks/{chunk-72ZDPBW5.js → chunk-SPPD6HZ7.js} +1 -1
- package/dist/chunks/{chunk-2YBNGUYY.js → chunk-TEFZFCIF.js} +1 -1
- package/dist/chunks/{chunk-WKZ6JSGZ.js → chunk-TKBORMUF.js} +1 -1
- package/dist/chunks/{chunk-YYH7OWMO.js → chunk-VDYU5GXV.js} +1 -1
- package/dist/chunks/{chunk-CRNMRUJK.js → chunk-VRBSHDYH.js} +1 -1
- package/dist/chunks/chunk-WR5OOWD6.js +10 -0
- package/dist/chunks/{chunk-SA2SQV6P.js → chunk-XKNCIFFB.js} +1 -1
- package/dist/chunks/{chunk-RCHRY3CN.js → chunk-XM3JW6AL.js} +1 -1
- package/dist/chunks/{chunk-SQ5VXZP6.js → chunk-XPTHZQSQ.js} +1 -1
- package/dist/chunks/chunk-XPV22OOJ.js +9 -0
- package/dist/chunks/{chunk-FEV4CIBN.js → chunk-Z2LUKMI6.js} +1 -1
- package/dist/chunks/{chunk-FM2ODCMZ.js → chunk-ZOI3EEL3.js} +1 -1
- package/dist/chunks/{chunk-HUHUQXHY.js → chunk-ZRS5X7M2.js} +1 -1
- package/dist/chunks/clear-D6L6DOJX.js +8 -0
- package/dist/chunks/{compile-vercel-config-7Z4U2GXV.js → compile-vercel-config-HTWCKOXQ.js} +1 -1
- package/dist/chunks/{config-S2ZQRGUM.js → config-3PKXC765.js} +1 -1
- package/dist/chunks/config-UC3QD67B.js +8 -0
- package/dist/chunks/{connect-git-provider-WOJ5VGWD.js → connect-git-provider-LSTDI4TC.js} +1 -1
- package/dist/chunks/{constants-G4UYVLOF.js → constants-NCE2LWSS.js} +1 -1
- package/dist/chunks/delete-6QE6SZFG.js +9 -0
- package/dist/chunks/delete-KIBUBKS5.js +10 -0
- package/dist/chunks/{detect-services-OYKTY23L.js → detect-services-HCM5D7CD.js} +1 -1
- package/dist/chunks/disable-2SIGN57F.js +7 -0
- package/dist/chunks/discard-SU4KZRF4.js +14 -0
- package/dist/chunks/edit-UPPFWMDP.js +8 -0
- package/dist/chunks/edit-XSC7KTWU.js +9 -0
- package/dist/chunks/enable-ON2Z35WD.js +7 -0
- package/dist/chunks/{export-WJ5AOD5D.js → export-4WCA27XL.js} +1 -1
- package/dist/chunks/future-LU77KNDL.js +7 -0
- package/dist/chunks/{generate-cert-for-deploy-MLBCRZP7.js → generate-cert-for-deploy-UFWA55HF.js} +1 -1
- package/dist/chunks/image-OUAKVKKW.js +7 -0
- package/dist/chunks/{import-builders-XBF4XRUV.js → import-builders-GAOM5PLP.js} +1 -1
- package/dist/chunks/inspect-2U2ZS6BV.js +9 -0
- package/dist/chunks/{inspect-5UD3BTCK.js → inspect-CPKV2YRR.js} +1 -1
- package/dist/chunks/inspect-HSMBKUSW.js +13 -0
- package/dist/chunks/{inspect-ZEQB7B56.js → inspect-N3RXYOHT.js} +1 -1
- package/dist/chunks/{inspect-37P6UWRK.js → inspect-VVRA6JZQ.js} +1 -1
- package/dist/chunks/list-A7WJ266A.js +11 -0
- package/dist/chunks/{list-D4WFKHXH.js → list-EPOTOCMN.js} +1 -1
- package/dist/chunks/{list-BCNACV7V.js → list-XGP6PIS5.js} +1 -1
- package/dist/chunks/login-7ALV7XD4.js +9 -0
- package/dist/chunks/{login-YBF2T6BO.js → login-YQ7QPK4A.js} +1 -1
- package/dist/chunks/{logs-3ULFZW4S.js → logs-4WPTTXCS.js} +1 -1
- package/dist/chunks/{ls-M4AAACDP.js → ls-62NGKVG2.js} +1 -1
- package/dist/chunks/{ls-KOJYZ2MR.js → ls-FOS2BGO3.js} +1 -1
- package/dist/chunks/{ls-SQLHYCYD.js → ls-FUXVU2FM.js} +1 -1
- package/dist/chunks/{ls-AOXH6ROK.js → ls-L5IRHEBU.js} +1 -1
- package/dist/chunks/{ls-6P2SJGIV.js → ls-OGLSDDB5.js} +1 -1
- package/dist/chunks/{ls-454PHZ45.js → ls-UDE66BQH.js} +1 -1
- package/dist/chunks/{ls-A2FWZ3NF.js → ls-WLDQKOJX.js} +1 -1
- package/dist/chunks/{mutate-VRGKUIKY.js → mutate-TA3QMCKY.js} +1 -1
- package/dist/chunks/notifications-4XNZKXKP.js +7 -0
- package/dist/chunks/open-G2NKF4KL.js +7 -0
- package/dist/chunks/{openapi-V5CKADGX.js → openapi-YEDROCHV.js} +1 -1
- package/dist/chunks/permissions-35SS45VZ.js +7 -0
- package/dist/chunks/{prompt-missing-credentials-BTUGE7QE.js → prompt-missing-credentials-YVS4S7X2.js} +1 -1
- package/dist/chunks/{publish-2UPLM3TI.js → publish-LSRQFUBZ.js} +1 -1
- package/dist/chunks/pull-BOJ3ZTIE.js +7 -0
- package/dist/chunks/{purchase-domain-if-available-IMVQLQ5H.js → purchase-domain-if-available-KEMVAHHF.js} +1 -1
- package/dist/chunks/push-FLK45IKR.js +7 -0
- package/dist/chunks/{query-UFFZMZWM.js → query-XP27OAHW.js} +1 -1
- package/dist/chunks/reauthenticate-APC7ZYFC.js +7 -0
- package/dist/chunks/reorder-F22Q63TM.js +10 -0
- package/dist/chunks/reply-CPWRB47S.js +9 -0
- package/dist/chunks/resolve-L7Y4FLIS.js +12 -0
- package/dist/chunks/{restore-Y4Z3F6HQ.js → restore-FOQ5TF47.js} +1 -1
- package/dist/chunks/{rm-OPYE65YL.js → rm-7CH7JXQR.js} +1 -1
- package/dist/chunks/rm-IBIBN3TV.js +8 -0
- package/dist/chunks/rm-OQL6ZGQM.js +8 -0
- package/dist/chunks/rm-PWMT2FES.js +8 -0
- package/dist/chunks/{rm-SUIELRWK.js → rm-QTAD3MMN.js} +1 -1
- package/dist/chunks/routes-ZD7XUKLY.js +1 -1
- package/dist/chunks/{rule-inspect-NUSKPGGY.js → rule-inspect-SGVM6FEZ.js} +1 -1
- package/dist/chunks/rules-MMAVDLJB.js +7 -0
- package/dist/chunks/{schema-MAANM5RD.js → schema-B74HJNER.js} +1 -1
- package/dist/chunks/{schema-HISMGDPE.js → schema-JYYQBTCL.js} +1 -1
- package/dist/chunks/select-org-5OUQKTNI.js +7 -0
- package/dist/chunks/{set-FVZSBB5K.js → set-6MRJYM56.js} +1 -1
- package/dist/chunks/setup-and-link-M6GYPEQY.js +7 -0
- package/dist/chunks/tags-SWK66ZCK.js +7 -0
- package/dist/chunks/{types-6SBDA4SL.js → types-BTHJ46LC.js} +1 -1
- package/dist/chunks/{update-R536DPNI.js → update-UVXYG3Q7.js} +1 -1
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/deploy/index.js +6 -6
- package/dist/commands/dev/index.js +2 -2
- package/dist/commands/env/index.js +1 -1
- package/dist/commands/link/index.js +1 -1
- package/dist/commands/list/index.js +1 -1
- package/dist/commands-bulk.js +25 -22
- package/dist/index.js +3 -3
- package/dist/version.mjs +1 -1
- package/package.json +14 -14
- package/dist/chunks/add-G2FG4MZK.js +0 -8
- package/dist/chunks/add-JYMUUDWF.js +0 -8
- package/dist/chunks/build-IVYHMLHB.js +0 -7
- package/dist/chunks/chunk-AL5JWXZE.js +0 -9
- package/dist/chunks/chunk-CBWDIZAF.js +0 -19
- package/dist/chunks/chunk-I7QY6ROQ.js +0 -9
- package/dist/chunks/chunk-KNQ3Y22G.js +0 -10
- package/dist/chunks/chunk-QE5VDLPY.js +0 -18
- package/dist/chunks/clear-QWLAXTZ2.js +0 -8
- package/dist/chunks/config-DWUI22HZ.js +0 -8
- package/dist/chunks/delete-DKXWEXSY.js +0 -9
- package/dist/chunks/delete-LJFDZG3J.js +0 -10
- package/dist/chunks/disable-5ZNYIRQ6.js +0 -7
- package/dist/chunks/discard-VGPXMVDP.js +0 -14
- package/dist/chunks/edit-OAUR6VZN.js +0 -9
- package/dist/chunks/edit-PZJIUQUQ.js +0 -8
- package/dist/chunks/enable-XHKXM6ZO.js +0 -7
- package/dist/chunks/future-CFQTZYLF.js +0 -7
- package/dist/chunks/image-O62TT3WT.js +0 -7
- package/dist/chunks/inspect-JNAVK3W2.js +0 -9
- package/dist/chunks/inspect-PTE3AJIM.js +0 -13
- package/dist/chunks/list-NFRKB6ZN.js +0 -11
- package/dist/chunks/login-IN4CKJYT.js +0 -9
- package/dist/chunks/notifications-EWKMY3H6.js +0 -7
- package/dist/chunks/open-WLDHUEDQ.js +0 -7
- package/dist/chunks/permissions-6GBDJTT6.js +0 -7
- package/dist/chunks/pull-Y5CUBUU7.js +0 -7
- package/dist/chunks/push-CAAKZO2C.js +0 -7
- package/dist/chunks/reauthenticate-BUEUJA3T.js +0 -7
- package/dist/chunks/reorder-YMD7BWAB.js +0 -10
- package/dist/chunks/reply-3KG3AZCJ.js +0 -9
- package/dist/chunks/resolve-JBH2ULOU.js +0 -12
- package/dist/chunks/rm-G2VITZWG.js +0 -8
- package/dist/chunks/rm-RG2M3HCR.js +0 -8
- package/dist/chunks/rm-S2XKAZ2G.js +0 -8
- package/dist/chunks/rules-HRB2B2DX.js +0 -7
- package/dist/chunks/select-org-EMVG2OX2.js +0 -7
- package/dist/chunks/setup-and-link-V2VNR6UN.js +0 -7
- package/dist/chunks/tags-GH3U4E6I.js +0 -7
package/dist/commands-bulk.js
CHANGED
|
@@ -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{resolveScope}from"./chunks/chunk-JNFC2ASC.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-SJ6ZELKN.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-QDE5CFRC.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-RVJ2E3BM.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-FOUWMNT7.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-HQEAROJN.js";import{canPrompt}from"./chunks/chunk-XD2LZRBS.js";import{collectBuildLogs,displayBuildLogs,displayRuntimeLogs}from"./chunks/chunk-66K6BTX2.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-22NPN6VB.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-HFDQ3P7T.js";import"./chunks/chunk-IVSSTHB6.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-6PFC3KWQ.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{require_format}from"./chunks/chunk-WRILLB46.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-ZVFZIWBV.js";import{api,tryOpenApiFallback}from"./chunks/chunk-4A5YIRNE.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-YWDSQTGK.js";import{applyEdits,init_main,modify,parse,printParseErrorCode}from"./chunks/chunk-UXTHEQVJ.js";import{selectOrg}from"./chunks/chunk-LX5GOY7N.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{CURL_INSTALL_COMMAND,NATIVE_UPDATE_SELECT_PRODUCTION_ENV,NATIVE_UPDATE_VERSION_ENV,box,cacheNativeUpdateDiscoveryAttempt,cacheNativeUpdateVersion,did_you_mean_default,executeNativeSelfUpdate,executeUpgrade,handleCommandTypo,installAndActivatePrBinary,installAndActivateProductionVersion,isAutoUpdateEnabled,isCurlInstall,isNativeAutoUpdateEnabled,isNativeUpdateChild,listAvailableVersions,listNativeTrackSlots,markNativeUpdateStaged,parsePrTarget,pinPackageVersion,readNativeInstallState,require_tar_fs,resolveLatestNativeVersion,restoreNativeUpdateAfterDiscoveryFailure,setAutoUpdate,setMinReleaseAgeBypass,spawnNativeUpdateChild,stageProductionUpdate}from"./chunks/chunk-46NPQBNU.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-SA2SQV6P.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-RCHRY3CN.js";import{Now,isDeploying,printDeploymentStatus}from"./chunks/chunk-QE5VDLPY.js";import{require_jsonlines}from"./chunks/chunk-YYH7OWMO.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-QTSRDWKO.js";import"./chunks/chunk-2H77IRPI.js";import"./chunks/chunk-OHDEHZLX.js";import"./chunks/chunk-M2W3HKV3.js";import"./chunks/chunk-PHW54NU5.js";import"./chunks/chunk-U56NHYAH.js";import{persistAuthConfig,readLocalConfig,writeToConfigFile}from"./chunks/chunk-DD5EEWWR.js";import"./chunks/chunk-TRTEXGVN.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-T52FMXWC.js";import"./chunks/chunk-J3U3L45Y.js";import{getGlobalPathConfig}from"./chunks/chunk-KACMQTK7.js";import"./chunks/chunk-FM2ODCMZ.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{isGuidanceEnabled}from"./chunks/chunk-EGG7SPNM.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ZXE4XYIV.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-GGZODU6S.js";import{validateLsArgs}from"./chunks/chunk-TCS3FDID.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import"./chunks/chunk-P2O5DOYE.js";import{getSubcommand as getSubcommand6}from"./chunks/chunk-ETV3C2CV.js";import{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,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buildersCommand,buyCommand,buySubcommand,cacheCommand,categoriesSubcommand,certsCommand,changelogCommand,checkSubcommand,checkSubcommand2,checkSubcommand3,checksAddFlags,checksRemoveFlags,checksSubcommand,claimSubcommand,codingAgentsSubcommand,completeSubcommand,configureSubcommand,connectSubcommand,connectSubcommand2,connectSubcommand3,connexCommand,contactsAddSubcommand,contactsSubcommand,contractCommand,copySubcommand,createGroupSubcommand,createStoreSubcommand,createSubcommand,createSubcommand2,createSubcommand3,createSubcommand4,createSubcommand5,createSubcommand6,createSubcommand7 as createSubcommand8,createThresholdSubcommand,creditsSubcommand,cronsCommand,curlCommand,dangerouslyDeleteSubcommand,decideSubcommand,delSubcommand,deleteGroupSubcommand,deleteStoreSubcommand,deleteSubcommand as deleteSubcommand2,deleteSubcommand2 as deleteSubcommand4,deployHooksCommand,detachSubcommand,diagnoseSubcommand,diffSubcommand,disableSubcommand,disableSubcommand2,disableSubcommand3 as disableSubcommand4,discardSubcommand,disconnectSubcommand,disconnectSubcommand2,disconnectSubcommand3,discoverSubcommand,dnsCommand,domainSubcommand,domainsCommand,emptyStoreSubcommand,enableSubcommand,enableSubcommand2,enableSubcommand3 as enableSubcommand4,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,experimentsCommand,fetchSubcommand,findForeignCreateFlags,findOverlappingConnections,firewallCommand,flagsCommand,flushSubcommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getConnections,getFlagAttributeType,getStorageProvider,getStorageStore,getStorageStores,getStoreInfoSubcommand,getSubcommand,getSubcommand2,getSubcommand3 as getSubcommand4,getSubcommand4 as getSubcommand5,gitCommand,globalConfigCommand,guidanceCommand,guideSubcommand,httpstatCommand,importKeySubcommand,importSubcommand,importSubcommand2,initCommand,inspectCommand,inspectGroupSubcommand,inspectSubcommand,inspectSubcommand2,inspectSubcommand3 as inspectSubcommand5,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,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 listSubcommand20,listSubcommand18 as listSubcommand21,listSubcommand19 as listSubcommand22,listSubcommand2,listSubcommand20 as listSubcommand23,listSubcommand21 as listSubcommand25,listSubcommand22 as listSubcommand26,listSubcommand23 as listSubcommand27,listSubcommand3 as listSubcommand4,listSubcommand4 as listSubcommand5,listSubcommand5 as listSubcommand7,listSubcommand6 as listSubcommand8,listSubcommand7 as listSubcommand9,listSubcommand8 as listSubcommand10,listSubcommand9 as listSubcommand11,listVersionsSubcommand,loadStoreDetails,logoutCommand,mcpCommand,membersAddFlags,membersRemoveFlags,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,removeSubcommand2,removeSubcommand3,removeSubcommand4,removeSubcommand5,removeSubcommand6,removeSubcommand7,removeSubcommand8,removeSubcommand9,renameSubcommand,renewSubcommand,requestSubcommand,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,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,searchSubcommand,searchSubcommand2,securityCommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setRampSubcommand,setSubcommand,setSubcommand2,setupSubcommand,signedTokenSubcommand,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,updateSubcommand2,updateSubcommand3,updateSubcommand4,updateSubcommand5,updateSubcommand6,updateSubcommand7,updateSubcommand8,updateSubcommand9,upgradeCommand,uploadSubcommand,usageCommand,useSubcommand,useTargetingSubcommand,verifySubcommand,versionCommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand,webAnalyticsSubcommand,webhooksCommand,whoamiCommand}from"./chunks/chunk-I7QY6ROQ.js";import{createSubcommand as createSubcommand7,getSubcommand as getSubcommand3,tracesCommand}from"./chunks/chunk-M5AV545M.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand13,listSubcommand as listSubcommand24,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-65JYSI26.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-YMVDWVMO.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-O7G3CZ42.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-N3N5UHIL.js";import{tracesConfigCommand}from"./chunks/chunk-IVWPQYIH.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-WUZD4KBL.js";import{addSubcommand as addSubcommand10,deleteSubcommand as deleteSubcommand3,disableSubcommand as disableSubcommand3,discardSubcommand as discardSubcommand2,editSubcommand as editSubcommand2,enableSubcommand as enableSubcommand3,exportSubcommand,inspectSubcommand as inspectSubcommand12,listSubcommand as listSubcommand19,listVersionsSubcommand as listVersionsSubcommand2,publishSubcommand as publishSubcommand2,reorderSubcommand,restoreSubcommand as restoreSubcommand2,routesCommand}from"./chunks/chunk-3QHJYVCY.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand4,listSubcommand as listSubcommand6,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-NBVY237X.js";import{logsCommand}from"./chunks/chunk-MEAY2K5Z.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-EQ52F4LH.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-EIXOJUNN.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-OAKO6LVS.js";import"./chunks/chunk-CVKB54WW.js";import"./chunks/chunk-JKTQV2QJ.js";import"./chunks/chunk-JEIMW3CO.js";import"./chunks/chunk-ZKYS7EAB.js";import{dump,load,main}from"./chunks/chunk-Q2TOOW5N.js";import{require_fast_deep_equal}from"./chunks/chunk-4MZK6JT6.js";import{require_dist2}from"./chunks/chunk-LASMHNUP.js";import{require_semver}from"./chunks/chunk-KKS7XWEX.js";import{readJSONFile}from"./chunks/chunk-WTXJ4X2D.js";import{require_dist as require_dist3}from"./chunks/chunk-72ZDPBW5.js";import"./chunks/chunk-K2RAW5DI.js";import"./chunks/chunk-QVINTB7T.js";import"./chunks/chunk-NNP5NITU.js";import"./chunks/chunk-GHM7V3GG.js";import"./chunks/chunk-L3JDEHCQ.js";import{VERCEL_CONFIG_EXTENSIONS}from"./chunks/chunk-QR7QPUFN.js";import{autoInstallVercelPlugin}from"./chunks/chunk-XQWBEAKZ.js";import{require_execa}from"./chunks/chunk-7O3KGTQ3.js";import{stamp_default}from"./chunks/chunk-XPXOV5UO.js";import"./chunks/chunk-2I64AYHG.js";import"./chunks/chunk-SOJCELXH.js";import{elapsed}from"./chunks/chunk-JZRMH5UA.js";import{require_ms}from"./chunks/chunk-QTKJC2O5.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-ZQGW6A7G.js";import{resolveProjectContext}from"./chunks/chunk-WUMV6WRR.js";import"./chunks/chunk-KCSMPBFZ.js";import{require_open}from"./chunks/chunk-ULLWCOYC.js";import{require_frameworks}from"./chunks/chunk-KK4AJES5.js";import"./chunks/chunk-N6CNMMSZ.js";import{getTeams}from"./chunks/chunk-Y7SVAW54.js";import{ensureLink}from"./chunks/chunk-MOPFNLFK.js";import"./chunks/chunk-H7S7TVBZ.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS}from"./chunks/chunk-ENBTTYJR.js";import"./chunks/chunk-U6TAKLJ6.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-JDQP267R.js";import{param}from"./chunks/chunk-SXUEGVWB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-DLKR2CG6.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-XV6SDZIO.js";import{table}from"./chunks/chunk-6TAQ6OWD.js";import"./chunks/chunk-7NYQ7CTP.js";import{getDeployment,toHost}from"./chunks/chunk-254TC5HX.js";import{mapCertError}from"./chunks/chunk-YNINVUX2.js";import"./chunks/chunk-WPS6JZF6.js";import{detectExplicitScope,getScope}from"./chunks/chunk-CJ3LL5E7.js";import{TelemetryClient}from"./chunks/chunk-W2XUH2WW.js";import"./chunks/chunk-RCTYVKM5.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-5XJNPXQK.js";import{printError}from"./chunks/chunk-AL5JWXZE.js";import{parseArguments}from"./chunks/chunk-HUHUQXHY.js";import{fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-7T6TL3GQ.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-HUI32UNA.js";import"./chunks/chunk-F2ZWW2IO.js";import"./chunks/chunk-B4ATVYZW.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import"./chunks/chunk-BRK4OB4B.js";import{require_strip_ansi}from"./chunks/chunk-OSCCYU74.js";import{argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,exitWithNonInteractiveError,mentionsObservabilityPlus,observabilityPlusPurchaseFix,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,quoteArg,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-KNQ3Y22G.js";import{arg_common_default,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,stripSensitiveAuthArgs}from"./chunks/chunk-JAJW3P42.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-4VGOAPFY.js";import{getUser}from"./chunks/chunk-WSNDO7JA.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,LinkRequiredError,NoAliasInConfig,NowError,ProjectNotFound,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnexpectedDomainTransferError,UnsupportedTLD,UserAborted,code,isAPIError,require_bytes}from"./chunks/chunk-CBWDIZAF.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-RTRCTYW6.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{resolveScope}from"./chunks/chunk-6RHRDUSK.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-5ZIZD5ZG.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-Q2Z6EXCT.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-RVJ2E3BM.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-327GP3PO.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-GCHDJ44X.js";import{canPrompt}from"./chunks/chunk-XD2LZRBS.js";import{collectBuildLogs,displayBuildLogs,displayRuntimeLogs}from"./chunks/chunk-AJAO4Q3T.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-FCC3LYIB.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-KU32YRCG.js";import"./chunks/chunk-IVSSTHB6.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-6PFC3KWQ.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{require_format}from"./chunks/chunk-WRILLB46.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-ZVFZIWBV.js";import{api,tryOpenApiFallback}from"./chunks/chunk-PNRWNSM2.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-OWEH7BYO.js";import{applyEdits,init_main,modify,parse,printParseErrorCode}from"./chunks/chunk-UXTHEQVJ.js";import{selectOrg}from"./chunks/chunk-IH2HZFLM.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{CURL_INSTALL_COMMAND,NATIVE_UPDATE_SELECT_PRODUCTION_ENV,NATIVE_UPDATE_VERSION_ENV,box,cacheNativeUpdateDiscoveryAttempt,cacheNativeUpdateVersion,did_you_mean_default,executeNativeSelfUpdate,executeUpgrade,handleCommandTypo,installAndActivatePrBinary,installAndActivateProductionVersion,isAutoUpdateEnabled,isCurlInstall,isNativeAutoUpdateEnabled,isNativeUpdateChild,listAvailableVersions,listNativeTrackSlots,markNativeUpdateStaged,parsePrTarget,pinPackageVersion,readNativeInstallState,require_tar_fs,resolveLatestNativeVersion,restoreNativeUpdateAfterDiscoveryFailure,setAutoUpdate,setMinReleaseAgeBypass,spawnNativeUpdateChild,stageProductionUpdate}from"./chunks/chunk-RIQFJ2MY.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-XKNCIFFB.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-XM3JW6AL.js";import{Now,isDeploying,printDeploymentStatus}from"./chunks/chunk-F5HAX74T.js";import{require_jsonlines}from"./chunks/chunk-VDYU5GXV.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-IERVS47L.js";import"./chunks/chunk-2H77IRPI.js";import"./chunks/chunk-OHDEHZLX.js";import"./chunks/chunk-M2W3HKV3.js";import"./chunks/chunk-PHW54NU5.js";import"./chunks/chunk-U56NHYAH.js";import{persistAuthConfig,readLocalConfig,writeToConfigFile}from"./chunks/chunk-IX4MMEGJ.js";import"./chunks/chunk-TRTEXGVN.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-T52FMXWC.js";import"./chunks/chunk-J3U3L45Y.js";import{getGlobalPathConfig}from"./chunks/chunk-OXH3RM6U.js";import"./chunks/chunk-ZOI3EEL3.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{isGuidanceEnabled}from"./chunks/chunk-EGG7SPNM.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ZXE4XYIV.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-GGZODU6S.js";import{validateLsArgs}from"./chunks/chunk-TCS3FDID.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import"./chunks/chunk-P2O5DOYE.js";import{getSubcommand as getSubcommand6}from"./chunks/chunk-ETV3C2CV.js";import{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,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buildersCommand,buyCommand,buySubcommand,cacheCommand,categoriesSubcommand,certsCommand,changelogCommand,checkSubcommand,checkSubcommand2,checkSubcommand3,checksAddFlags,checksRemoveFlags,checksSubcommand,claimSubcommand,codingAgentsSubcommand,completeSubcommand,configureSubcommand,connectSubcommand,connectSubcommand2,connectSubcommand3,connexCommand,contactsAddSubcommand,contactsSubcommand,contractCommand,copySubcommand,createGroupSubcommand,createStoreSubcommand,createSubcommand,createSubcommand2,createSubcommand3,createSubcommand4,createSubcommand5,createSubcommand6,createSubcommand7 as createSubcommand8,createThresholdSubcommand,creditsSubcommand,cronsCommand,curlCommand,dangerouslyDeleteSubcommand,decideSubcommand,delSubcommand,deleteGroupSubcommand,deleteStoreSubcommand,deleteSubcommand as deleteSubcommand2,deleteSubcommand2 as deleteSubcommand4,deployHooksCommand,detachSubcommand,diagnoseSubcommand,diffSubcommand,disableSubcommand,disableSubcommand2,disableSubcommand3 as disableSubcommand4,discardSubcommand,disconnectSubcommand,disconnectSubcommand2,disconnectSubcommand3,discoverSubcommand,dnsCommand,domainSubcommand,domainsCommand,emptyStoreSubcommand,enableSubcommand,enableSubcommand2,enableSubcommand3 as enableSubcommand4,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,experimentsCommand,fetchSubcommand,findForeignCreateFlags,findOverlappingConnections,firewallCommand,flagsCommand,flushSubcommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getConnections,getFlagAttributeType,getStorageProvider,getStorageStore,getStorageStores,getStoreInfoSubcommand,getSubcommand,getSubcommand2,getSubcommand3 as getSubcommand4,getSubcommand4 as getSubcommand5,gitCommand,globalConfigCommand,guidanceCommand,guideSubcommand,httpstatCommand,importKeySubcommand,importSubcommand,importSubcommand2,initCommand,inspectCommand,inspectGroupSubcommand,inspectSubcommand,inspectSubcommand2,inspectSubcommand3 as inspectSubcommand5,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,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 listSubcommand20,listSubcommand18 as listSubcommand21,listSubcommand19 as listSubcommand22,listSubcommand2,listSubcommand20 as listSubcommand23,listSubcommand21 as listSubcommand25,listSubcommand22 as listSubcommand26,listSubcommand23 as listSubcommand27,listSubcommand3 as listSubcommand4,listSubcommand4 as listSubcommand5,listSubcommand5 as listSubcommand7,listSubcommand6 as listSubcommand8,listSubcommand7 as listSubcommand9,listSubcommand8 as listSubcommand10,listSubcommand9 as listSubcommand11,listVersionsSubcommand,loadStoreDetails,logoutCommand,mcpCommand,membersAddFlags,membersRemoveFlags,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,removeSubcommand2,removeSubcommand3,removeSubcommand4,removeSubcommand5,removeSubcommand6,removeSubcommand7,removeSubcommand8,removeSubcommand9,renameSubcommand,renewSubcommand,requestSubcommand,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,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,searchSubcommand,searchSubcommand2,securityCommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setRampSubcommand,setSubcommand,setSubcommand2,setupSubcommand,signedTokenSubcommand,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,updateSubcommand2,updateSubcommand3,updateSubcommand4,updateSubcommand5,updateSubcommand6,updateSubcommand7,updateSubcommand8,updateSubcommand9,upgradeCommand,uploadSubcommand,usageCommand,useSubcommand,useTargetingSubcommand,verifySubcommand,versionCommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand,webAnalyticsSubcommand,webhooksCommand,whoamiCommand}from"./chunks/chunk-XPV22OOJ.js";import{createSubcommand as createSubcommand7,getSubcommand as getSubcommand3,tracesCommand}from"./chunks/chunk-M5AV545M.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand13,listSubcommand as listSubcommand24,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-65JYSI26.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-YMVDWVMO.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-O7G3CZ42.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-N3N5UHIL.js";import{tracesConfigCommand}from"./chunks/chunk-IVWPQYIH.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-WUZD4KBL.js";import{addSubcommand as addSubcommand10,deleteSubcommand as deleteSubcommand3,disableSubcommand as disableSubcommand3,discardSubcommand as discardSubcommand2,editSubcommand as editSubcommand2,enableSubcommand as enableSubcommand3,exportSubcommand,inspectSubcommand as inspectSubcommand12,listSubcommand as listSubcommand19,listVersionsSubcommand as listVersionsSubcommand2,publishSubcommand as publishSubcommand2,reorderSubcommand,restoreSubcommand as restoreSubcommand2,routesCommand}from"./chunks/chunk-3QHJYVCY.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand4,listSubcommand as listSubcommand6,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-NBVY237X.js";import{logsCommand}from"./chunks/chunk-MEAY2K5Z.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-EQ52F4LH.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-EIXOJUNN.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-OAKO6LVS.js";import"./chunks/chunk-CVKB54WW.js";import"./chunks/chunk-JKTQV2QJ.js";import"./chunks/chunk-JEIMW3CO.js";import"./chunks/chunk-ZKYS7EAB.js";import{dump,load,main}from"./chunks/chunk-MIGWUMB3.js";import{require_fast_deep_equal}from"./chunks/chunk-4MZK6JT6.js";import{require_dist2}from"./chunks/chunk-LASMHNUP.js";import{require_semver}from"./chunks/chunk-KKS7XWEX.js";import{readJSONFile}from"./chunks/chunk-33FG2PIV.js";import{require_dist as require_dist3}from"./chunks/chunk-SPPD6HZ7.js";import"./chunks/chunk-K2RAW5DI.js";import"./chunks/chunk-FUK2JEKI.js";import"./chunks/chunk-NNP5NITU.js";import"./chunks/chunk-GHM7V3GG.js";import"./chunks/chunk-L3JDEHCQ.js";import{VERCEL_CONFIG_EXTENSIONS}from"./chunks/chunk-QR7QPUFN.js";import{autoInstallVercelPlugin}from"./chunks/chunk-XQWBEAKZ.js";import{require_execa}from"./chunks/chunk-7O3KGTQ3.js";import{stamp_default}from"./chunks/chunk-XPXOV5UO.js";import"./chunks/chunk-2I64AYHG.js";import"./chunks/chunk-SOJCELXH.js";import{elapsed}from"./chunks/chunk-JZRMH5UA.js";import{require_ms}from"./chunks/chunk-QTKJC2O5.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-JB45UWGT.js";import{resolveProjectContext}from"./chunks/chunk-B7XCF45C.js";import"./chunks/chunk-CWTXZPUV.js";import{require_open}from"./chunks/chunk-ULLWCOYC.js";import{require_frameworks}from"./chunks/chunk-KK4AJES5.js";import"./chunks/chunk-N6CNMMSZ.js";import{getTeams}from"./chunks/chunk-BW24TEUN.js";import{ensureLink}from"./chunks/chunk-FNYAHJIZ.js";import"./chunks/chunk-OROPHBHW.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS}from"./chunks/chunk-ENBTTYJR.js";import"./chunks/chunk-U6TAKLJ6.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-JDQP267R.js";import{param}from"./chunks/chunk-SXUEGVWB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-DLKR2CG6.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-XV6SDZIO.js";import{table}from"./chunks/chunk-6TAQ6OWD.js";import"./chunks/chunk-7NYQ7CTP.js";import{getDeployment,toHost}from"./chunks/chunk-E4CRGS56.js";import{mapCertError}from"./chunks/chunk-LZTGSYL3.js";import"./chunks/chunk-WPS6JZF6.js";import{detectExplicitScope,getScope}from"./chunks/chunk-MBHVWCFE.js";import{TelemetryClient}from"./chunks/chunk-W2XUH2WW.js";import"./chunks/chunk-RCTYVKM5.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-5XJNPXQK.js";import{printError}from"./chunks/chunk-4P66SQRS.js";import{parseArguments}from"./chunks/chunk-ZRS5X7M2.js";import{fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-7T6TL3GQ.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-AGDWVTJV.js";import"./chunks/chunk-F2ZWW2IO.js";import"./chunks/chunk-B4ATVYZW.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import{require_strip_ansi}from"./chunks/chunk-OSCCYU74.js";import{argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,exitWithNonInteractiveError,getErrorRecovery,mentionsObservabilityPlus,observabilityPlusPurchaseFix,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,quoteArg,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-WR5OOWD6.js";import{arg_common_default,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,stripSensitiveAuthArgs}from"./chunks/chunk-JAJW3P42.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-4VGOAPFY.js";import{getUser}from"./chunks/chunk-GTK7TBLW.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-GI6G3FJJ.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-RTRCTYW6.js";import{require_dist}from"./chunks/chunk-QGIQK47P.js";import"./chunks/chunk-BRK4OB4B.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
|
|
|
@@ -33,7 +33,7 @@ ${BEST_PRACTICES_END}
|
|
|
33
33
|
`)?`
|
|
34
34
|
`:`
|
|
35
35
|
|
|
36
|
-
`;await writeFile(filePath,existing+separator+BEST_PRACTICES_CONTENT,"utf-8"),output_manager_default.stopSpinner(),output_manager_default.success(`Appended Vercel best practices to ${import_chalk.default.bold(targetFile)}`)}else await writeFile(filePath,BEST_PRACTICES_CONTENT,"utf-8"),output_manager_default.stopSpinner(),output_manager_default.success(`Created ${import_chalk.default.bold(targetFile)} with Vercel best practices`)}catch(error){return output_manager_default.stopSpinner(),printError(error),1}return output_manager_default.log(import_chalk.default.dim("Run vercel deploy to ship your project")),0}async function agent(client){let parsedArgs,flagsSpecification=getFlagsSpecification(agentCommand.options),telemetry2=new AgentTelemetryClient({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("agent"),output_manager_default.print(help(agentCommand,{columns:client.stderr.columns})),2;let subcommand=parsedArgs.args[1];if(telemetry2.trackCliArgumentInit(subcommand),!subcommand||subcommand==="init"){let yes=parsedArgs.flags["--yes"]??!1;telemetry2.trackCliFlagYes(yes);try{return await agentInit(client,yes)}catch(error){return printError(error),1}}return output_manager_default.error(`Unknown subcommand: ${subcommand}`),output_manager_default.print(help(agentCommand,{columns:client.stderr.columns})),1}var AgentRunsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandTrace(actual){this.trackCliSubcommand({subcommand:"trace",value:actual})}trackCliSubcommandProjects(actual){this.trackCliSubcommand({subcommand:"projects",value:actual})}};var import_chalk3=__toESM(require_source(),1);var AGENT_RUNS_API_BASE="https://vercel.com/api/observability/agent-runs",DEFAULT_TRACE_MAX_FIELD_LENGTH=8e3,MAX_TRACE_FIELD_LENGTH=5e4;function getAgentRunsApiBase(){return process.env.VERCEL_AGENT_RUNS_API_URL||AGENT_RUNS_API_BASE}function buildAgentRunsUrl(query){let url=new URL(getAgentRunsApiBase());if(url.searchParams.set("teamSlug",query.teamId),query.view==="team"?url.searchParams.set("view","team"):query.projectId&&url.searchParams.set("project",query.projectId),url.searchParams.set("environment",query.environment||"production"),query.since){let from=parseTimeFlag(query.since),to=query.until?parseTimeFlag(query.until):new Date;url.searchParams.set("from",String(Math.floor(from.getTime()/1e3))),url.searchParams.set("to",String(Math.floor(to.getTime()/1e3)))}return typeof query.page=="number"&&url.searchParams.set("page",String(Math.max(1,Math.floor(query.page)))),typeof query.pageSize=="number"&&url.searchParams.set("pageSize",String(Math.max(1,Math.floor(query.pageSize)))),query.search&&url.searchParams.set("search",query.search),query.runId&&url.searchParams.set("runId",query.runId),query.trace&&url.searchParams.set("trace","1"),url.href}async function fetchAgentRuns(client,query){return client.fetch(buildAgentRunsUrl(query),{useCurrentTeam:!1})}var MISSING_PROJECT_SCOPE_MESSAGE="No linked project found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team> and --project <name>.",MISSING_TEAM_SCOPE_MESSAGE="No team scope found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team>.";async function resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject}){let flagScope=scopeFlag?.trim()||void 0,flagProject=projectFlag?.trim()||void 0;if(flagScope&&(flagProject||!requireProject))return{ok:!0,teamId:flagScope,projectId:flagProject,contextName:flagProject?`${flagScope}/${flagProject}`:flagScope};let linkedProject=await getLinkedProject(client);if(linkedProject.status==="error")return{ok:!1,exitCode:linkedProject.exitCode};if(linkedProject.status==="linked"){let{org,project}=linkedProject;if(flagScope&&flagScope!==org.id&&flagScope!==org.slug)return{ok:!1,exitCode:invalidArguments(client,`\`--scope ${flagScope}\` doesn't match the linked project's team. Pass \`--project <name>\` to query a project in that team.`)};let teamName=flagScope??org.slug,projectName=requireProject?flagProject??project.name:flagProject;return{ok:!0,teamId:flagScope??org.id,projectId:requireProject?flagProject??project.id:flagProject,contextName:projectName?`${teamName}/${projectName}`:teamName}}let message=requireProject?MISSING_PROJECT_SCOPE_MESSAGE:MISSING_TEAM_SCOPE_MESSAGE;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message}),output_manager_default.error(message),{ok:!1,exitCode:1}}function normalizeApiErrorText(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function handleAgentRunsApiError(client,err){if(isAPIError(err)){let reason=err.status===403?"forbidden":err.status===401?"not_authorized":err.status===404?AGENT_REASON.NOT_FOUND:err.status===429?"rate_limited":AGENT_REASON.API_ERROR;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:normalizeApiErrorText(err.serverMessage||err.message)})}else outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)});printError(err)}function invalidArguments(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),1}function normalizeTraceMaxFieldLength(value){return typeof value!="number"||!Number.isFinite(value)?DEFAULT_TRACE_MAX_FIELD_LENGTH:Math.min(Math.max(Math.floor(value),0),MAX_TRACE_FIELD_LENGTH)}function truncateLargeStrings(value,maxLength){return maxLength===0?value:typeof value=="string"?value.length<=maxLength?value:`${value.slice(0,maxLength)}... [truncated ${value.length-maxLength} chars]`:Array.isArray(value)?value.map(item=>truncateLargeStrings(item,maxLength)):value&&typeof value=="object"?Object.fromEntries(Object.entries(value).map(([key,entry2])=>[key,truncateLargeStrings(entry2,maxLength)])):value}var import_chalk2=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib2(),1);function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function asArray(value){return Array.isArray(value)?value.filter(isRecord):[]}function readString(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="string"&&value.length>0)return value}}function readNumber(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value}}function readRecord(record,...keys){if(record)for(let key of keys){let value=record[key];if(isRecord(value))return value}}function readTimestampMs(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value;if(typeof value=="string"&&value.length>0){let parsed=Date.parse(value);if(!Number.isNaN(parsed))return parsed}}}var PLACEHOLDER="-";function runId(run3){return readString(run3,"id","runId")??PLACEHOLDER}function formatRunStatus(run3){let status6=readString(run3,"status","state");if(!status6)return PLACEHOLDER;let label=(0,import_title.default)(status6.replace(/[_-]+/g," ")),CIRCLE="\u25CF ";switch(status6.toLowerCase()){case"completed":case"succeeded":case"success":case"ready":return import_chalk2.default.green(CIRCLE)+label;case"error":case"errored":case"failed":case"timed out":case"timed_out":return import_chalk2.default.red(CIRCLE)+label;case"running":case"in progress":case"in_progress":case"pending":case"queued":case"started":return import_chalk2.default.yellow(CIRCLE)+label;case"canceled":case"cancelled":return import_chalk2.default.gray(label);default:return label}}function runModel(run3){return readString(run3,"model")??PLACEHOLDER}function runTrigger(run3){return readString(run3,"trigger")??readString(readRecord(run3,"trigger"),"label","type","name")??PLACEHOLDER}function runTitle(run3){return readString(run3,"title","name")}function runStartedAtMs(run3){return readTimestampMs(run3,"createdAt","startedAt","startTime")}function runDurationMs(run3){let explicit=readNumber(run3,"durationMs","duration");if(explicit!==void 0)return explicit;let start=readTimestampMs(run3,"startedAt","createdAt","startTime"),end=readTimestampMs(run3,"endedAt","completedAt","endTime");if(start!==void 0&&end!==void 0&&end>=start)return end-start}function runTotalTokens(run3){let usage2=readRecord(run3,"usage")??run3,total=readNumber(usage2,"totalTokens","total");if(total!==void 0)return total;let input=readNumber(usage2,"inputTokens","promptTokens","input"),output=readNumber(usage2,"outputTokens","completionTokens","output");if(input!==void 0||output!==void 0)return(input??0)+(output??0)}function formatAge(timestampMs){if(timestampMs===void 0)return PLACEHOLDER;let delta=Date.now()-timestampMs;return delta<1e3?"just now":`${(0,import_ms.default)(delta)} ago`}function formatTimestamp(timestampMs){return timestampMs===void 0?PLACEHOLDER:new Date(timestampMs).toISOString()}function formatDurationMs(value){return value===void 0?PLACEHOLDER:value<1e3?`${Math.round(value)}ms`:value<6e4?`${(value/1e3).toFixed(1)}s`:(0,import_ms.default)(Math.round(value))}function formatCount(value){return value===void 0?PLACEHOLDER:value<1e4?String(value):value<1e6?`${(value/1e3).toFixed(1)}k`:`${(value/1e6).toFixed(1)}m`}var AgentRunsQueryTelemetryClient=class extends TelemetryClient{trackCliOptionEnvironment(value){value&&this.trackCliOption({option:"environment",value:["production","preview"].includes(value)?value:this.redactedValue})}trackCliOptionSince(value){value&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(value){value&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionProject(value){value&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagJson(value){value&&this.trackCliFlag("json")}};var AgentRunsListTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliOptionSearch(value){value&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionNext(value){typeof value=="number"&&this.trackCliOption({option:"next",value:String(value)})}trackCliOptionPage(value){typeof value=="number"&&this.trackCliOption({option:"page",value:String(value)})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:String(value)})}};async function list2(client){let telemetry2=new AgentRunsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--search":search2,"--next":next,"--page":legacyPage,"--limit":limit,"--json":json,"--scope":scopeFlag}=parsedArgs.flags,page=next??legacyPage;if(telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliOptionSearch(search2),telemetry2.trackCliOptionNext(next),telemetry2.trackCliOptionPage(legacyPage),telemetry2.trackCliOptionLimit(limit),telemetry2.trackCliFlagJson(json),until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching Agent Runs in ${import_chalk3.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,page,pageSize:limit,search:search2})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
36
|
+
`;await writeFile(filePath,existing+separator+BEST_PRACTICES_CONTENT,"utf-8"),output_manager_default.stopSpinner(),output_manager_default.success(`Appended Vercel best practices to ${import_chalk.default.bold(targetFile)}`)}else await writeFile(filePath,BEST_PRACTICES_CONTENT,"utf-8"),output_manager_default.stopSpinner(),output_manager_default.success(`Created ${import_chalk.default.bold(targetFile)} with Vercel best practices`)}catch(error){return output_manager_default.stopSpinner(),printError(error),1}return output_manager_default.log(import_chalk.default.dim("Run vercel deploy to ship your project")),0}async function agent(client){let parsedArgs,flagsSpecification=getFlagsSpecification(agentCommand.options),telemetry2=new AgentTelemetryClient({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("agent"),output_manager_default.print(help(agentCommand,{columns:client.stderr.columns})),2;let subcommand=parsedArgs.args[1];if(telemetry2.trackCliArgumentInit(subcommand),!subcommand||subcommand==="init"){let yes=parsedArgs.flags["--yes"]??!1;telemetry2.trackCliFlagYes(yes);try{return await agentInit(client,yes)}catch(error){return printError(error),1}}return output_manager_default.error(`Unknown subcommand: ${subcommand}`),output_manager_default.print(help(agentCommand,{columns:client.stderr.columns})),1}var AgentRunsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandTrace(actual){this.trackCliSubcommand({subcommand:"trace",value:actual})}trackCliSubcommandProjects(actual){this.trackCliSubcommand({subcommand:"projects",value:actual})}};var import_chalk3=__toESM(require_source(),1);var AGENT_RUNS_API_BASE="https://vercel.com/api/observability/agent-runs",DEFAULT_TRACE_MAX_FIELD_LENGTH=8e3,MAX_TRACE_FIELD_LENGTH=5e4;function getAgentRunsApiBase(){return process.env.VERCEL_AGENT_RUNS_API_URL||AGENT_RUNS_API_BASE}function buildAgentRunsUrl(query){let url=new URL(getAgentRunsApiBase());if(url.searchParams.set("teamSlug",query.teamId),query.view==="team"?url.searchParams.set("view","team"):query.projectId&&url.searchParams.set("project",query.projectId),url.searchParams.set("environment",query.environment||"production"),query.since){let from=parseTimeFlag(query.since),to=query.until?parseTimeFlag(query.until):new Date;url.searchParams.set("from",String(Math.floor(from.getTime()/1e3))),url.searchParams.set("to",String(Math.floor(to.getTime()/1e3)))}return typeof query.page=="number"&&url.searchParams.set("page",String(Math.max(1,Math.floor(query.page)))),typeof query.pageSize=="number"&&url.searchParams.set("pageSize",String(Math.max(1,Math.floor(query.pageSize)))),query.search&&url.searchParams.set("search",query.search),query.runId&&url.searchParams.set("runId",query.runId),query.trace&&url.searchParams.set("trace","1"),query.traceStreamId&&url.searchParams.set("traceStreamId",query.traceStreamId),query.traceAfterCursor&&url.searchParams.set("traceAfterCursor",query.traceAfterCursor),typeof query.traceBeforeChunk=="number"&&url.searchParams.set("traceBeforeChunk",String(query.traceBeforeChunk)),url.href}async function fetchAgentRuns(client,query){return client.fetch(buildAgentRunsUrl(query),{useCurrentTeam:!1})}var MISSING_PROJECT_SCOPE_MESSAGE="No linked project found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team> and --project <name>.",MISSING_TEAM_SCOPE_MESSAGE="No team scope found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team>.";async function resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject}){let flagScope=scopeFlag?.trim()||void 0,flagProject=projectFlag?.trim()||void 0;if(flagScope&&(flagProject||!requireProject))return{ok:!0,teamId:flagScope,projectId:flagProject,contextName:flagProject?`${flagScope}/${flagProject}`:flagScope};let linkedProject=await getLinkedProject(client);if(linkedProject.status==="error")return{ok:!1,exitCode:linkedProject.exitCode};if(linkedProject.status==="linked"){let{org,project}=linkedProject;if(flagScope&&flagScope!==org.id&&flagScope!==org.slug)return{ok:!1,exitCode:invalidArguments(client,`\`--scope ${flagScope}\` doesn't match the linked project's team. Pass \`--project <name>\` to query a project in that team.`)};let teamName=flagScope??org.slug,projectName=requireProject?flagProject??project.name:flagProject;return{ok:!0,teamId:flagScope??org.id,projectId:requireProject?flagProject??project.id:flagProject,contextName:projectName?`${teamName}/${projectName}`:teamName}}let message=requireProject?MISSING_PROJECT_SCOPE_MESSAGE:MISSING_TEAM_SCOPE_MESSAGE;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message}),output_manager_default.error(message),{ok:!1,exitCode:1}}function normalizeApiErrorText(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function handleAgentRunsApiError(client,err){if(isAPIError(err)){let reason=err.status===403?"forbidden":err.status===401?"not_authorized":err.status===404?AGENT_REASON.NOT_FOUND:err.status===429?"rate_limited":AGENT_REASON.API_ERROR;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:normalizeApiErrorText(err.serverMessage||err.message)})}else outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)});printError(err)}function invalidArguments(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),1}function normalizeTraceMaxFieldLength(value){return typeof value!="number"||!Number.isFinite(value)?DEFAULT_TRACE_MAX_FIELD_LENGTH:Math.min(Math.max(Math.floor(value),0),MAX_TRACE_FIELD_LENGTH)}function truncateLargeStrings(value,maxLength){return maxLength===0?value:typeof value=="string"?value.length<=maxLength?value:`${value.slice(0,maxLength)}... [truncated ${value.length-maxLength} chars]`:Array.isArray(value)?value.map(item=>truncateLargeStrings(item,maxLength)):value&&typeof value=="object"?Object.fromEntries(Object.entries(value).map(([key,entry2])=>[key,truncateLargeStrings(entry2,maxLength)])):value}var import_chalk2=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib2(),1);function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function asArray(value){return Array.isArray(value)?value.filter(isRecord):[]}function readString(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="string"&&value.length>0)return value}}function readNumber(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value}}function readRecord(record,...keys){if(record)for(let key of keys){let value=record[key];if(isRecord(value))return value}}function readTimestampMs(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value;if(typeof value=="string"&&value.length>0){let parsed=Date.parse(value);if(!Number.isNaN(parsed))return parsed}}}var PLACEHOLDER="-";function runId(run3){return readString(run3,"id","runId")??PLACEHOLDER}function formatRunStatus(run3){let status6=readString(run3,"status","state");if(!status6)return PLACEHOLDER;let label=(0,import_title.default)(status6.replace(/[_-]+/g," ")),CIRCLE="\u25CF ";switch(status6.toLowerCase()){case"completed":case"succeeded":case"success":case"ready":return import_chalk2.default.green(CIRCLE)+label;case"error":case"errored":case"failed":case"timed out":case"timed_out":return import_chalk2.default.red(CIRCLE)+label;case"running":case"in progress":case"in_progress":case"pending":case"queued":case"started":return import_chalk2.default.yellow(CIRCLE)+label;case"canceled":case"cancelled":return import_chalk2.default.gray(label);default:return label}}function runModel(run3){return readString(run3,"model")??PLACEHOLDER}function runTrigger(run3){return readString(run3,"trigger")??readString(readRecord(run3,"trigger"),"label","type","name")??PLACEHOLDER}function runTitle(run3){return readString(run3,"title","name")}function runStartedAtMs(run3){return readTimestampMs(run3,"createdAt","startedAt","startTime")}function runDurationMs(run3){let explicit=readNumber(run3,"durationMs","duration");if(explicit!==void 0)return explicit;let start=readTimestampMs(run3,"startedAt","createdAt","startTime"),end=readTimestampMs(run3,"endedAt","completedAt","endTime");if(start!==void 0&&end!==void 0&&end>=start)return end-start}function runTotalTokens(run3){let usage2=readRecord(run3,"usage")??run3,total=readNumber(usage2,"totalTokens","total");if(total!==void 0)return total;let input=readNumber(usage2,"inputTokens","promptTokens","input"),output=readNumber(usage2,"outputTokens","completionTokens","output");if(input!==void 0||output!==void 0)return(input??0)+(output??0)}function formatAge(timestampMs){if(timestampMs===void 0)return PLACEHOLDER;let delta=Date.now()-timestampMs;return delta<1e3?"just now":`${(0,import_ms.default)(delta)} ago`}function formatTimestamp(timestampMs){return timestampMs===void 0?PLACEHOLDER:new Date(timestampMs).toISOString()}function formatDurationMs(value){return value===void 0?PLACEHOLDER:value<1e3?`${Math.round(value)}ms`:value<6e4?`${(value/1e3).toFixed(1)}s`:(0,import_ms.default)(Math.round(value))}function formatCount(value){return value===void 0?PLACEHOLDER:value<1e4?String(value):value<1e6?`${(value/1e3).toFixed(1)}k`:`${(value/1e6).toFixed(1)}m`}var AgentRunsQueryTelemetryClient=class extends TelemetryClient{trackCliOptionEnvironment(value){value&&this.trackCliOption({option:"environment",value:["production","preview"].includes(value)?value:this.redactedValue})}trackCliOptionSince(value){value&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(value){value&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionProject(value){value&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagJson(value){value&&this.trackCliFlag("json")}};var AgentRunsListTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliOptionSearch(value){value&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionNext(value){typeof value=="number"&&this.trackCliOption({option:"next",value:String(value)})}trackCliOptionPage(value){typeof value=="number"&&this.trackCliOption({option:"page",value:String(value)})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:String(value)})}};async function list2(client){let telemetry2=new AgentRunsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--search":search2,"--next":next,"--page":legacyPage,"--limit":limit,"--json":json,"--scope":scopeFlag}=parsedArgs.flags,page=next??legacyPage;if(telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliOptionSearch(search2),telemetry2.trackCliOptionNext(next),telemetry2.trackCliOptionPage(legacyPage),telemetry2.trackCliOptionLimit(limit),telemetry2.trackCliFlagJson(json),until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching Agent Runs in ${import_chalk3.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,page,pageSize:limit,search:search2})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
37
37
|
`),0;let runList2=asArray(data.runs);if(runList2.length===0)return search2||since?output_manager_default.log("No Agent Runs match the current filters."):output_manager_default.log("No Agent Runs found."),0;output_manager_default.log(`Agent Runs under ${import_chalk3.default.bold(scope.contextName)} ${fetchStamp()}`);let rows=[["Run ID","Status","Trigger","Model","Tokens","Duration","Age"].map(header=>import_chalk3.default.bold(import_chalk3.default.cyan(header))),...runList2.map(run3=>[import_chalk3.default.bold(runId(run3)),formatRunStatus(run3),runTrigger(run3),runModel(run3),formatCount(runTotalTokens(run3)),import_chalk3.default.gray(formatDurationMs(runDurationMs(run3))),import_chalk3.default.gray(formatAge(runStartedAtMs(run3)))])];client.stdout.write(`
|
|
38
38
|
${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
39
39
|
|
|
@@ -43,17 +43,19 @@ ${table(subagentRows,{hsep:3})}`)}return`${sections.join(`
|
|
|
43
43
|
|
|
44
44
|
`)}
|
|
45
45
|
`}async function inspect(client){let telemetry2=new AgentInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===inspectSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry2.trackCliArgumentRunId(runIdArg),telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(inspectSubcommand,{parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
46
|
-
`),0;let run3=isRecord(data.run)?data.run:data;return client.stdout.write(renderDetail(run3)),output_manager_default.log(`Run with ${cmd("--json")} for full run data.`),0}var AgentTraceTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliArgumentRunId(value){value&&this.trackCliArgument({arg:"runId",value:this.redactedValue})}trackCliOptionMaxFieldLength(value){typeof value=="number"&&this.trackCliOption({option:"max-field-length",value:String(value)})}};var INLINE_VALUE_MAX_LEN=2e3;function toDisplayString(value){if(value!=null){if(typeof value=="string")return value;try{return JSON.stringify(value)}catch{return String(value)}}}function pushBlock(lines,label,value){let text3=toDisplayString(value);text3&&lines.push(`- **${label}:** ${ellipsis(text3.trim(),INLINE_VALUE_MAX_LEN)}`)}function renderTurn(turn,index){let lines=[`## Turn ${index+1}`],messages=asArray(turn.messages);for(let message of messages){let role=readString(message,"role","type")??"message";pushBlock(lines,role,message.content??message.text),pushBlock(lines,`${role} reasoning`,message.reasoning)}pushBlock(lines,"reasoning",turn.reasoning);let toolCalls=asArray(turn.toolCalls??turn.tool_calls);for(let toolCall of toolCalls){let name=readString(toolCall,"name","toolName","tool")??"<unnamed tool>";lines.push(`- **tool call:** \`${name}\``);let input=toDisplayString(toolCall.input??toolCall.args??toolCall.arguments);input&&lines.push(` - input: ${ellipsis(input.trim(),INLINE_VALUE_MAX_LEN)}`);let outputValue=toDisplayString(toolCall.output??toolCall.result);outputValue&&lines.push(` - output: ${ellipsis(outputValue.trim(),INLINE_VALUE_MAX_LEN)}`)}return lines.join(`
|
|
47
|
-
`)}function resolveTurns(trace3){let direct=asArray(trace3.turns);if(direct.length>0)return direct;let framework=readString(trace3,"framework");if(framework){let nested=asArray(readRecord(trace3,framework)?.turns);if(nested.length>0)return nested}for(let value of Object.values(trace3))if(isRecord(value)){let nested=asArray(value.turns);if(nested.length>0)return nested}return[]}function
|
|
46
|
+
`),0;let run3=isRecord(data.run)?data.run:data;return client.stdout.write(renderDetail(run3)),output_manager_default.log(`Run with ${cmd("--json")} for full run data.`),0}var AgentTraceTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliArgumentRunId(value){value&&this.trackCliArgument({arg:"runId",value:this.redactedValue})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionPrevious(value){value&&this.trackCliOption({option:"previous",value:this.redactedValue})}trackCliOptionMaxFieldLength(value){typeof value=="number"&&this.trackCliOption({option:"max-field-length",value:String(value)})}};var INLINE_VALUE_MAX_LEN=2e3;function toDisplayString(value){if(value!=null){if(typeof value=="string")return value;try{return JSON.stringify(value)}catch{return String(value)}}}function pushBlock(lines,label,value){let text3=toDisplayString(value);text3&&lines.push(`- **${label}:** ${ellipsis(text3.trim(),INLINE_VALUE_MAX_LEN)}`)}function renderTurn(turn,index){let lines=[`## Turn ${index+1}`],messages=asArray(turn.messages);for(let message of messages){let role=readString(message,"role","type")??"message";pushBlock(lines,role,message.content??message.text),pushBlock(lines,`${role} reasoning`,message.reasoning)}pushBlock(lines,"reasoning",turn.reasoning);let toolCalls=asArray(turn.toolCalls??turn.tool_calls);for(let toolCall of toolCalls){let name=readString(toolCall,"name","toolName","tool")??"<unnamed tool>";lines.push(`- **tool call:** \`${name}\``);let input=toDisplayString(toolCall.input??toolCall.args??toolCall.arguments);input&&lines.push(` - input: ${ellipsis(input.trim(),INLINE_VALUE_MAX_LEN)}`);let outputValue=toDisplayString(toolCall.output??toolCall.result);outputValue&&lines.push(` - output: ${ellipsis(outputValue.trim(),INLINE_VALUE_MAX_LEN)}`)}return lines.join(`
|
|
47
|
+
`)}function resolveTurns(trace3){let direct=asArray(trace3.turns);if(direct.length>0)return direct;let framework=readString(trace3,"framework");if(framework){let nested=asArray(readRecord(trace3,framework)?.turns);if(nested.length>0)return nested}for(let value of Object.values(trace3))if(isRecord(value)){let nested=asArray(value.turns);if(nested.length>0)return nested}return[]}var MAX_CONTINUATION_LENGTH=4096;function readTracePage(data){if(!isRecord(data))return;let trace3=readRecord(data,"trace")??data,framework=readString(trace3,"framework"),payload=(framework?readRecord(trace3,framework):void 0)??readRecord(trace3,"eve");if(!payload)return;let earlier=readRecord(payload,"earlier"),later=readRecord(payload,"later"),earlierStreamId=readString(earlier,"streamId"),beforeChunk=readNumber(earlier,"beforeChunk"),laterStreamId=readString(later,"streamId"),cursor2=readString(later,"cursor"),droppedSide=readString(readRecord(payload,"truncated"),"droppedSide");return{...droppedSide==="oldest"||droppedSide==="newest"?{droppedSide}:{},...earlierStreamId&&beforeChunk!==void 0&&Number.isSafeInteger(beforeChunk)&&beforeChunk>0?{earlier:{streamId:earlierStreamId,beforeChunk}}:{},...laterStreamId&&cursor2?{later:{streamId:laterStreamId,cursor:cursor2}}:{}}}function quoteCommandArgument(value,placeholder){return/[\x00-\x1F\x7F]/.test(value)?placeholder:/^[A-Za-z0-9_./:=@%+,-]+$/.test(value)?value:`'${value.replaceAll("'",`'"'"'`)}'`}function encodeTraceContinuation(continuation){return Buffer.from(JSON.stringify(continuation),"utf8").toString("base64url")}function parseTraceContinuation(value){if(!(value.length===0||value.length>MAX_CONTINUATION_LENGTH||!/^[A-Za-z0-9_-]+$/.test(value)))try{let decoded=JSON.parse(Buffer.from(value,"base64url").toString("utf8"));if(!isRecord(decoded)||decoded.version!==1||decoded.direction!=="earlier"&&decoded.direction!=="later"||typeof decoded.streamId!="string"||decoded.streamId.length===0)return;if(decoded.direction==="earlier"&&typeof decoded.beforeChunk=="number"&&Number.isSafeInteger(decoded.beforeChunk)&&decoded.beforeChunk>0&&decoded.cursor===void 0||decoded.direction==="later"&&typeof decoded.cursor=="string"&&decoded.cursor.length>0&&decoded.beforeChunk===void 0)return decoded}catch{return}}function buildTracePageCommand({runId:runId2,continuation,globalFlags,project,environment,since,until,maxFieldLength}){let args=["vercel",...globalFlags.map(flag=>quoteCommandArgument(flag,"<value>")),"agent-runs","trace",quoteCommandArgument(runId2,"<runId>")],optionalArgs=[["--project",project],["--environment",environment],["--since",since],["--until",until],["--max-field-length",maxFieldLength]];for(let[flag,value]of optionalArgs)value!==void 0&&args.push(flag,quoteCommandArgument(String(value),"<value>"));return args.push(continuation.direction==="later"?"--next":"--previous",encodeTraceContinuation(continuation)),args.join(" ")}function logTracePagination(tracePage,{runId:runId2,globalFlags,project,environment,since,until,maxFieldLength}){tracePage?.droppedSide&&output_manager_default.log(`Trace coverage is incomplete: ${tracePage.droppedSide} activity was not returned in this page.`),tracePage?.earlier&&(output_manager_default.log("Older activity is available. Run:"),output_manager_default.print(` ${buildTracePageCommand({runId:runId2,continuation:{version:1,direction:"earlier",...tracePage.earlier},globalFlags,project,environment,since,until,maxFieldLength})}
|
|
48
|
+
`)),tracePage?.later&&(output_manager_default.log("Newer activity is available. Run:"),output_manager_default.print(` ${buildTracePageCommand({runId:runId2,continuation:{version:1,direction:"later",...tracePage.later},globalFlags,project,environment,since,until,maxFieldLength})}
|
|
49
|
+
`))}function renderTrace(data,runIdArg){let trace3=readRecord(data,"trace")??data,turns=resolveTurns(trace3);return turns.length===0?void 0:`${[`# Agent Run ${runIdArg}`,`- **Turns:** ${turns.length}`,...turns.map((turn,index)=>renderTurn(turn,index))].join(`
|
|
48
50
|
|
|
49
51
|
`)}
|
|
50
|
-
`}async function trace(client){let telemetry2=new AgentTraceTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(traceSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===traceSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--max-field-length":maxFieldLengthFlag,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry2.trackCliArgumentRunId(runIdArg),telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliOptionMaxFieldLength(maxFieldLengthFlag),telemetry2.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(traceSubcommand,{parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");if(maxFieldLengthFlag!==void 0&&(!Number.isFinite(maxFieldLengthFlag)||maxFieldLengthFlag<0))return invalidArguments(client,"`--max-field-length` must be a non-negative number.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run trace\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg,trace:!0})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}output_manager_default.stopSpinner();let maxFieldLength=normalizeTraceMaxFieldLength(maxFieldLengthFlag),bounded=truncateLargeStrings(data,maxFieldLength);if(json)return client.stdout.write(`${JSON.stringify(bounded,null,2)}
|
|
51
|
-
`),0;let rendered=isRecord(bounded)?renderTrace(bounded,runIdArg):void 0;return rendered?(client.stdout.write(rendered),output_manager_default.log("Run with --json for
|
|
52
|
-
`),0)}var import_chalk5=__toESM(require_source(),1);var AgentProjectsTelemetryClient=class extends AgentRunsQueryTelemetryClient{};async function projects(client){let telemetry2=new AgentProjectsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(projectsSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{"--environment":environment,"--since":since,"--until":until,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliFlagJson(json),until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag:void 0,requireProject:!1});if(!scope.ok)return scope.exitCode;let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching projects with Agent Runs in ${import_chalk5.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,view:"team",environment,since,until})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
52
|
+
`}async function trace(client){let telemetry2=new AgentTraceTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(traceSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===traceSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--next":nextCursor,"--previous":previousCursor,"--max-field-length":maxFieldLengthFlag,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry2.trackCliArgumentRunId(runIdArg),telemetry2.trackCliOptionProject(projectFlag),telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliOptionNext(nextCursor),telemetry2.trackCliOptionPrevious(previousCursor),telemetry2.trackCliOptionMaxFieldLength(maxFieldLengthFlag),telemetry2.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(traceSubcommand,{parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");if(maxFieldLengthFlag!==void 0&&(!Number.isFinite(maxFieldLengthFlag)||maxFieldLengthFlag<0))return invalidArguments(client,"`--max-field-length` must be a non-negative number.");if(nextCursor!==void 0&&previousCursor!==void 0)return invalidArguments(client,"`--next` and `--previous` cannot be used together.");let continuationValue=nextCursor??previousCursor,continuation=continuationValue!==void 0?parseTraceContinuation(continuationValue):void 0,expectedDirection=nextCursor!==void 0?"later":"earlier";if(continuationValue!==void 0&&continuation?.direction!==expectedDirection){let flag=nextCursor!==void 0?"--next":"--previous";return invalidArguments(client,`Invalid or expired \`${flag}\` cursor. Omit \`${flag}\` to restart the trace.`)}let tracePageQuery=continuation?.direction==="later"?{traceStreamId:continuation.streamId,traceAfterCursor:continuation.cursor}:continuation?.direction==="earlier"?{traceStreamId:continuation.streamId,traceBeforeChunk:continuation.beforeChunk}:void 0,scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run trace\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg,trace:!0,...tracePageQuery})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}output_manager_default.stopSpinner();let maxFieldLength=normalizeTraceMaxFieldLength(maxFieldLengthFlag),bounded=truncateLargeStrings(data,maxFieldLength);if(json)return client.stdout.write(`${JSON.stringify(bounded,null,2)}
|
|
53
|
+
`),0;let rendered=isRecord(bounded)?renderTrace(bounded,runIdArg):void 0,tracePage=readTracePage(data),traceCommandContext={runId:runIdArg,globalFlags:getGlobalFlagsFromArgs(client.argv.slice(2)),project:projectFlag,environment,since,until,maxFieldLength:maxFieldLengthFlag};return rendered?(client.stdout.write(rendered),logTracePagination(tracePage,traceCommandContext),output_manager_default.log("Run with --json for raw trace data."),0):(client.stdout.write(`${JSON.stringify(bounded,null,2)}
|
|
54
|
+
`),logTracePagination(tracePage,traceCommandContext),0)}var import_chalk5=__toESM(require_source(),1);var AgentProjectsTelemetryClient=class extends AgentRunsQueryTelemetryClient{};async function projects(client){let telemetry2=new AgentProjectsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(projectsSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let{"--environment":environment,"--since":since,"--until":until,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry2.trackCliOptionEnvironment(environment),telemetry2.trackCliOptionSince(since),telemetry2.trackCliOptionUntil(until),telemetry2.trackCliFlagJson(json),until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag:void 0,requireProject:!1});if(!scope.ok)return scope.exitCode;let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching projects with Agent Runs in ${import_chalk5.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,view:"team",environment,since,until})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
53
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(`
|
|
54
56
|
${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
55
57
|
|
|
56
|
-
`),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}=getSubcommand6(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}=getSubcommand6(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-6SBDA4SL.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-D4WFKHXH.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(budget){budget!==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 budget=limitFlag??budgetFlag;if(budget!==void 0&&budget<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,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}=getSubcommand6(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}=getSubcommand6(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-BTHJ46LC.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-EPOTOCMN.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(budget){budget!==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 budget=limitFlag??budgetFlag;if(budget!==void 0&&budget<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,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}
|
|
57
59
|
`),output_manager_default.success(`API key ${import_chalk6.default.bold(result.apiKey.name)} (${result.apiKey.id}) created ${createStamp()}`),output_manager_default.log(budget!==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.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}){let lsStamp=stamp_default();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.message),1;throw err}return output_manager_default.stopSpinner(),asJson?(client.stdout.write(`${JSON.stringify(toJSON(data),null,2)}
|
|
58
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&¶ms.set("projectId",opts.projectId),opts.userId&¶ms.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," ")}
|
|
59
61
|
|
|
@@ -173,7 +175,7 @@ ${preserved.join(`
|
|
|
173
175
|
`),printLicense(),0}function printLicense(){output_manager_default.log(import_chalk25.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_CONFIG9={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}=getSubcommand6(subArgs,COMMAND_CONFIG9),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_CONFIG9)),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})}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_CONFIG10={"api-keys":getCommandAliases(apiKeysSubcommand),budgets:getCommandAliases(budgetsSubcommand),rules:getCommandAliases(rulesSubcommand),"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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG10),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"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 builtInBody={type:"built-in",name:"Production server errors",triggers:{mode:"selected",items:[{type:"error_anomaly",filter:"statusGroup:5xx AND route:/api/*"}]},matchMinimumSeverityLevel:"high"};function getRulesAddBodyExamplesHelp(){return["Scope",""," Provide ruleScope in the body or use a scope flag, not both."," --project maps to one included project."," --all maps to every project in the team.","","Built-in body (rule.json)","",indent_default(JSON.stringify(builtInBody,null,2),2),""," vercel alerts rules add --project my-app --body ./rule.json","","Authoring reference",""," vercel alerts rules schema --type built-in",""].join(`
|
|
174
176
|
`)}function getRulesUpdateBodyExamplesHelp(){return["Update body",""," Include only the fields to change. type is optional and inferred from the stored rule."," Use --project or --all to change scope with or without --body."," Do not combine a ruleScope field in the body with --project or --all."," --all moves the rule to team-wide scope.","","Partial body (patch.json)","",indent_default(JSON.stringify({name:"Critical production errors",matchMinimumSeverityLevel:"critical"},null,2),2),""," vercel alerts rules update ar_abc123 --body ./patch.json"," vercel alerts rules update ar_abc123 --project my-app","","Authoring reference",""," vercel alerts rules schema --type built-in",""].join(`
|
|
175
177
|
`)}var COMMAND_CONFIG11={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("-")?{...getSubcommand6([],COMMAND_CONFIG11),rawSubcommandArgs:rawArgsAfterCommand}:{...getSubcommand6(parsedArgs.slice(1),COMMAND_CONFIG11),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"],rulesHelpParent={...rulesAggregateCommand,name:`${alertsCommand.name} ${rulesAggregateCommand.name}`},notificationsHelpParent={...rulesNotificationsAggregateCommand,name:`${rulesHelpParent.name} ${rulesNotificationsAggregateCommand.name}`};function printHelp(command2,parent=alertsCommand,extra){let helpOutput=help(command2,{parent,columns:client.stderr.columns});output_manager_default.print(extra?`${helpOutput}
|
|
176
|
-
${extra}`:helpOutput)}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,rulesHelpParent),0;if(nested==="schema")return printHelp(rulesSchemaSubcommand,rulesHelpParent),0;if(nested==="add"||nested==="create")return printHelp(rulesAddSubcommand2,rulesHelpParent,getRulesAddBodyExamplesHelp()),0;if(nested==="inspect"||nested==="get")return printHelp(rulesInspectSubcommand,rulesHelpParent),0;if(nested==="rm"||nested==="remove"||nested==="delete")return printHelp(rulesRmSubcommand,rulesHelpParent),0;if(nested==="update"||nested==="patch")return printHelp(rulesUpdateSubcommand,rulesHelpParent,getRulesUpdateBodyExamplesHelp()),0;if(nested==="notifications"){let notificationAction=args[1];return notificationAction==="ls"||notificationAction==="list"||notificationAction?.startsWith("ar_")?(printHelp(rulesNotificationsLsSubcommand,notificationsHelpParent),0):notificationAction==="link"?(printHelp(rulesNotificationsLinkSubcommand,notificationsHelpParent),0):notificationAction==="unlink"?(printHelp(rulesNotificationsUnlinkSubcommand,notificationsHelpParent),0):(printHelp(rulesNotificationsAggregateCommand,rulesHelpParent),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-
|
|
178
|
+
${extra}`:helpOutput)}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,rulesHelpParent),0;if(nested==="schema")return printHelp(rulesSchemaSubcommand,rulesHelpParent),0;if(nested==="add"||nested==="create")return printHelp(rulesAddSubcommand2,rulesHelpParent,getRulesAddBodyExamplesHelp()),0;if(nested==="inspect"||nested==="get")return printHelp(rulesInspectSubcommand,rulesHelpParent),0;if(nested==="rm"||nested==="remove"||nested==="delete")return printHelp(rulesRmSubcommand,rulesHelpParent),0;if(nested==="update"||nested==="patch")return printHelp(rulesUpdateSubcommand,rulesHelpParent,getRulesUpdateBodyExamplesHelp()),0;if(nested==="notifications"){let notificationAction=args[1];return notificationAction==="ls"||notificationAction==="list"||notificationAction?.startsWith("ar_")?(printHelp(rulesNotificationsLsSubcommand,notificationsHelpParent),0):notificationAction==="link"?(printHelp(rulesNotificationsLinkSubcommand,notificationsHelpParent),0):notificationAction==="unlink"?(printHelp(rulesNotificationsUnlinkSubcommand,notificationsHelpParent),0):(printHelp(rulesNotificationsAggregateCommand,rulesHelpParent),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-HSMBKUSW.js")).default;return inspectFn(client,rawSubcommandArgs)}case"rules":{telemetry2.trackCliSubcommandRules(getRulesTelemetryAction(args));let rulesFn=(await import("./chunks/rules-MMAVDLJB.js")).default;return rulesFn(client,rawSubcommandArgs)}default:{telemetry2.trackCliSubcommandLs(subcommandOriginal);let listFn=(await import("./chunks/list-XGP6PIS5.js")).default;return listFn(client,telemetry2)}}}var import_chalk26=__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 getScope(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_chalk26.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)}
|
|
177
179
|
`)}else if(output_manager_default.log(`aliases found under ${import_chalk26.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_chalk26.default.gray(header)),...aliases2.map(a=>[a.deployment?.url?a.deployment.url:import_chalk26.default.gray("\u2013"),a.alias,(0,import_ms2.default)(Date.now()-a.createdAt)])],{align:["l","l","r"],hsep:4}).replace(/^/gm," ")}
|
|
178
180
|
|
|
179
181
|
`}var import_chalk27=__toESM(require_source(),1),import_ms3=__toESM(require_ms(),1);async function removeAliasById(client,id){return client.fetch(`/now/aliases/${id}`,{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 getScope(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_chalk27.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_chalk27.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_chalk27.default.bold(alias2.alias)} removed ${removeStamp()}`),0)}async function confirmAliasRemove(client,alias2){let srcUrl=alias2.deployment?import_chalk27.default.underline(alias2.deployment.url):null,tbl=table([[...srcUrl?[srcUrl]:[],import_chalk27.default.underline(alias2.alias),import_chalk27.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}
|
|
@@ -234,7 +236,7 @@ validUntil=${result.validUntil} (${new Date(result.validUntil).toISOString()})
|
|
|
234
236
|
|
|
235
237
|
`)}
|
|
236
238
|
`)}async function fetchEntries(query,limit){let url=new URL(query?`${CHANGELOG_API_URL}/search`:CHANGELOG_API_URL);url.searchParams.set("limit",String(limit)),query?url.searchParams.set("q",query):url.searchParams.set("include","content");try{let response=await fetch2(url,{headers:{accept:"application/json","user-agent":ua_default}});if(!response.ok){response.status===429?output_manager_default.error("Too many changelog requests. Try again shortly."):output_manager_default.error("Failed to fetch changelog entries.");return}let data=await response.json();if(!data||typeof data!="object")throw new Error("Invalid changelog response");let items=data.items;if(!Array.isArray(items)||!items.every(isChangelogItem))throw new Error("Invalid changelog response");return items}catch{output_manager_default.error("Failed to fetch changelog entries. Check your connection and try again.");return}}function printCommandHelp(client,command2){output_manager_default.print(help(command2,{columns:client.stderr.columns,parent:command2===changelogCommand?void 0:changelogCommand}))}async function changelog(client){let telemetry2=new ChangelogTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(changelogCommand.options),rawArgs=client.argv.slice(2).filter(arg=>arg!=="--changelog"),parsedArgs;try{parsedArgs=parseArguments(rawArgs,flagsSpecification)}catch(err){return printError(err),1}let commandOffset=parsedArgs.args[0]===changelogCommand.name?1:0,{subcommand,args,subcommandOriginal}=getSubcommand6(parsedArgs.args.slice(commandOffset),COMMAND_CONFIG17);if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp(changelogCommand.name,subcommand==="search"?subcommandOriginal:void 0),printCommandHelp(client,subcommand==="search"?searchSubcommand:changelogCommand),0;if(!subcommand&&args.length>0)return output_manager_default.error(`Unknown changelog command: ${args[0]}`),printCommandHelp(client,changelogCommand),1;let limit=parsedArgs.flags["--limit"]??DEFAULT_LIMIT;if(!Number.isInteger(limit)||limit<1||limit>MAX_LIMIT)return output_manager_default.error(`--limit must be between 1 and ${MAX_LIMIT}.`),1;telemetry2.trackCliOptionLimit(parsedArgs.flags["--limit"]),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]);let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let jsonOutput=formatResult.jsonOutput,query;if(subcommand==="search"&&(telemetry2.trackCliSubcommandSearch(subcommandOriginal),query=args.join(" ").trim(),!query))return output_manager_default.error("Search query is required."),printCommandHelp(client,searchSubcommand),1;jsonOutput||output_manager_default.spinner(query?"Searching the changelog\u2026":"Fetching the changelog\u2026");let items=await fetchEntries(query,limit);return jsonOutput||output_manager_default.stopSpinner(),items?jsonOutput?(client.stdout.write(`${JSON.stringify({items},null,2)}
|
|
237
|
-
`),0):items.length===0?(output_manager_default.log(query?"No changelog entries match the query.":"No changelog entries found."),0):(printEntries(items),0):1}var 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_CONFIG18={list:getCommandAliases(listSubcommand6),inspect:getCommandAliases(inspectSubcommand4),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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG18),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(inspectSubcommand4)?0:(telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-JNAVK3W2.js")).default(client,telemetry2));case"open":return handleHelp(openSubcommand)?0:(telemetry2.trackCliSubcommandOpen(subcommandOriginal),(await import("./chunks/open-WLDHUEDQ.js")).default(client,telemetry2));case"reply":return handleHelp(replySubcommand)?0:(telemetry2.trackCliSubcommandReply(subcommandOriginal),(await import("./chunks/reply-3KG3AZCJ.js")).default(client,telemetry2));case"resolve":return handleHelp(resolveSubcommand)?0:(telemetry2.trackCliSubcommandResolve(subcommandOriginal),(await import("./chunks/resolve-JBH2ULOU.js")).default(client,telemetry2,!0));case"reopen":return handleHelp(reopenSubcommand)?0:(telemetry2.trackCliSubcommandReopen(subcommandOriginal),(await import("./chunks/resolve-JBH2ULOU.js")).default(client,telemetry2,!1));case"edit":return handleHelp(editSubcommand)?0:(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-OAUR6VZN.js")).default(client,telemetry2));case"delete":return handleHelp(deleteSubcommand)?0:(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-DKXWEXSY.js")).default(client,telemetry2));default:{if(needHelp)return telemetry2.trackCliFlagHelp("comments",subcommandOriginal),subcommandOriginal!=="default"?printSubcommandHelp(listSubcommand6):output_manager_default.print(help(commentsCommand,{columns:client.stderr.columns})),0;telemetry2.trackCliSubcommandList(subcommandOriginal);let defaultInvocation=subcommandOriginal==="default";return(await import("./chunks/list-NFRKB6ZN.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 readFile5}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}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 readFile4,stat as stat4}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 stat4(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 readFile4(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_chalk45=__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_chalk45.default.cyan(url)}):output_manager_default.link(text3,url)).replace(/\*\*([^*]+)\*\*/g,(_match,text3)=>import_chalk45.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_chalk45.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_chalk45.default.cyan(CONNEX_REDIRECT_URI)} as a redirect URI in that app.`),method.docUrl&&method.docUrl!==registerUrl&&lines.push(`Docs: ${import_chalk45.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_chalk45.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?`
|
|
239
|
+
`),0):items.length===0?(output_manager_default.log(query?"No changelog entries match the query.":"No changelog entries found."),0):(printEntries(items),0):1}var 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_CONFIG18={list:getCommandAliases(listSubcommand6),inspect:getCommandAliases(inspectSubcommand4),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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG18),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(inspectSubcommand4)?0:(telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-2U2ZS6BV.js")).default(client,telemetry2));case"open":return handleHelp(openSubcommand)?0:(telemetry2.trackCliSubcommandOpen(subcommandOriginal),(await import("./chunks/open-G2NKF4KL.js")).default(client,telemetry2));case"reply":return handleHelp(replySubcommand)?0:(telemetry2.trackCliSubcommandReply(subcommandOriginal),(await import("./chunks/reply-CPWRB47S.js")).default(client,telemetry2));case"resolve":return handleHelp(resolveSubcommand)?0:(telemetry2.trackCliSubcommandResolve(subcommandOriginal),(await import("./chunks/resolve-L7Y4FLIS.js")).default(client,telemetry2,!0));case"reopen":return handleHelp(reopenSubcommand)?0:(telemetry2.trackCliSubcommandReopen(subcommandOriginal),(await import("./chunks/resolve-L7Y4FLIS.js")).default(client,telemetry2,!1));case"edit":return handleHelp(editSubcommand)?0:(telemetry2.trackCliSubcommandEdit(subcommandOriginal),(await import("./chunks/edit-XSC7KTWU.js")).default(client,telemetry2));case"delete":return handleHelp(deleteSubcommand)?0:(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-6QE6SZFG.js")).default(client,telemetry2));default:{if(needHelp)return telemetry2.trackCliFlagHelp("comments",subcommandOriginal),subcommandOriginal!=="default"?printSubcommandHelp(listSubcommand6):output_manager_default.print(help(commentsCommand,{columns:client.stderr.columns})),0;telemetry2.trackCliSubcommandList(subcommandOriginal);let defaultInvocation=subcommandOriginal==="default";return(await import("./chunks/list-A7WJ266A.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 readFile5}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}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 readFile4,stat as stat4}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 stat4(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 readFile4(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_chalk45=__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_chalk45.default.cyan(url)}):output_manager_default.link(text3,url)).replace(/\*\*([^*]+)\*\*/g,(_match,text3)=>import_chalk45.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_chalk45.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_chalk45.default.cyan(CONNEX_REDIRECT_URI)} as a redirect URI in that app.`),method.docUrl&&method.docUrl!==registerUrl&&lines.push(`Docs: ${import_chalk45.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_chalk45.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?`
|
|
238
240
|
|
|
239
241
|
Expected --data schema for connection method "${method.connectionMethod}":
|
|
240
242
|
${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_chalk45.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(`
|
|
@@ -329,7 +331,8 @@ ${import_chalk69.default.dim("Anyone with the URL can trigger a deployment. Stor
|
|
|
329
331
|
`),output_manager_default.print(` Then import it to Vercel DNS by using:
|
|
330
332
|
`),output_manager_default.print(` ${getCommandName(`dns import ${domainName} <zonefile>`)}
|
|
331
333
|
|
|
332
|
-
`),0)}var import_chalk86=__toESM(require_source(),1);var import_chalk85=__toESM(require_source(),1);function formatNSTable(intendedNameservers,currentNameservers,{extraSpace=""}={}){let sortedIntended=intendedNameservers.sort(),sortedCurrent=currentNameservers.sort(),maxLength=Math.max(intendedNameservers.length,currentNameservers.length),rows=[];for(let i=0;i<maxLength;i++)rows.push([sortedIntended[i]||import_chalk85.default.gray("-"),sortedCurrent[i]||import_chalk85.default.gray("-"),sortedIntended[i]===sortedCurrent[i]?import_chalk85.default.green(chars_default.tick):import_chalk85.default.red(chars_default.cross)]);return table([[import_chalk85.default.gray("Intended Nameservers"),import_chalk85.default.gray("Current Nameservers"),""],...rows],{hsep:4}).replace(/^(.*)/gm,`${extraSpace}$1`)}var PROJECT_FETCH_BATCH_SIZE=10;async function getDomainAssignmentsByProject(client,domainName){let domainsByProjectId=new Map;for await(let chunk of client.fetchPaginated(`/v1/domains/${encodeURIComponent(domainName)}/project-domains`))for(let projectDomain of chunk.projectDomains){let domains2=domainsByProjectId.get(projectDomain.projectId)??[];domains2.push(projectDomain.name),domainsByProjectId.set(projectDomain.projectId,domains2)}return domainsByProjectId}async function countProjectsForDomain(client,domainName){try{return(await getDomainAssignmentsByProject(client,domainName)).size}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}async function findProjectsForDomain(client,domainName){try{let assignments=Array.from(await getDomainAssignmentsByProject(client,domainName)),result=[];for(let i=0;i<assignments.length;i+=PROJECT_FETCH_BATCH_SIZE){let batch=await Promise.all(assignments.slice(i,i+PROJECT_FETCH_BATCH_SIZE).map(async([projectId,domains2])=>{try{return{project:await client.fetch(`/v9/projects/${encodeURIComponent(projectId)}`),domains:domains2}}catch(err){if(isAPIError(err)&&err.status<500)return null;throw err}}));for(let entry2 of batch)entry2&&result.push(entry2)}return result}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}function getDomainRegistrar(domain2){return domain2.boughtAt?"Vercel":typeof domain2.orderedAt=="number"&&!domain2.boughtAt?"Purchase in Process":"Third Party"}var DomainsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(name){name&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}};async function inspect5(client,argv){let telemetry2=new DomainsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error,client),1}let{args}=parsedArgs,[domainName]=args,inspectStamp=stamp_default();if(!domainName)return output_manager_default.error(`${getCommandName("domains inspect <domain>")} expects one argument`),1;if(telemetry2.trackCliArgumentDomain(domainName),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk86.default.cyan(`${getCommandName("domains inspect <domain>")}`)}`),1;output_manager_default.debug("Fetching domain info");let{contextName}=await getScope(client);output_manager_default.spinner(`Fetching Domain ${domainName} under ${import_chalk86.default.bold(contextName)}`);let information=await fetchInformation({client,contextName,domainName});if(typeof information=="number")return information;let{domain:domain2,projects:projects2,renewalPrice,domainConfig}=information;if(output_manager_default.
|
|
334
|
+
`),0)}var import_chalk86=__toESM(require_source(),1);var import_chalk85=__toESM(require_source(),1);function formatNSTable(intendedNameservers,currentNameservers,{extraSpace=""}={}){let sortedIntended=intendedNameservers.sort(),sortedCurrent=currentNameservers.sort(),maxLength=Math.max(intendedNameservers.length,currentNameservers.length),rows=[];for(let i=0;i<maxLength;i++)rows.push([sortedIntended[i]||import_chalk85.default.gray("-"),sortedCurrent[i]||import_chalk85.default.gray("-"),sortedIntended[i]===sortedCurrent[i]?import_chalk85.default.green(chars_default.tick):import_chalk85.default.red(chars_default.cross)]);return table([[import_chalk85.default.gray("Intended Nameservers"),import_chalk85.default.gray("Current Nameservers"),""],...rows],{hsep:4}).replace(/^(.*)/gm,`${extraSpace}$1`)}var PROJECT_FETCH_BATCH_SIZE=10;async function getDomainAssignmentsByProject(client,domainName){let domainsByProjectId=new Map;for await(let chunk of client.fetchPaginated(`/v1/domains/${encodeURIComponent(domainName)}/project-domains`))for(let projectDomain of chunk.projectDomains){let domains2=domainsByProjectId.get(projectDomain.projectId)??[];domains2.push(projectDomain.name),domainsByProjectId.set(projectDomain.projectId,domains2)}return domainsByProjectId}async function countProjectsForDomain(client,domainName){try{return(await getDomainAssignmentsByProject(client,domainName)).size}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}async function findProjectsForDomain(client,domainName){try{let assignments=Array.from(await getDomainAssignmentsByProject(client,domainName)),result=[];for(let i=0;i<assignments.length;i+=PROJECT_FETCH_BATCH_SIZE){let batch=await Promise.all(assignments.slice(i,i+PROJECT_FETCH_BATCH_SIZE).map(async([projectId,domains2])=>{try{return{project:await client.fetch(`/v9/projects/${encodeURIComponent(projectId)}`),domains:domains2}}catch(err){if(isAPIError(err)&&err.status<500)return null;throw err}}));for(let entry2 of batch)entry2&&result.push(entry2)}return result}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}function getDomainRegistrar(domain2){return domain2.boughtAt?"Vercel":typeof domain2.orderedAt=="number"&&!domain2.boughtAt?"Purchase in Process":"Third Party"}var DomainsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(name){name&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect5(client,argv){let telemetry2=new DomainsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error,client),1}let{args,flags}=parsedArgs,[domainName]=args;telemetry2.trackCliOptionFormat(flags["--format"]),telemetry2.trackCliFlagJson(flags["--json"]);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,inspectStamp=stamp_default();if(!domainName)return output_manager_default.error(`${getCommandName("domains inspect <domain>")} expects one argument`),1;if(telemetry2.trackCliArgumentDomain(domainName),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk86.default.cyan(`${getCommandName("domains inspect <domain>")}`)}`),1;output_manager_default.debug("Fetching domain info");let{contextName}=await getScope(client);output_manager_default.spinner(`Fetching Domain ${domainName} under ${import_chalk86.default.bold(contextName)}`);let information=await fetchInformation({client,contextName,domainName});if(typeof information=="number")return information;let{domain:domain2,projects:projects2,renewalPrice,domainConfig}=information;if(asJson)return output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({domain:{name:domain2.name,registrar:getDomainRegistrar(domain2),expiresAt:domain2.expiresAt,creator:domain2.creator.username,createdAt:domain2.createdAt,edgeNetwork:!0,renewalPrice:domain2.boughtAt&&renewalPrice?renewalPrice:null},nameservers:{intended:domain2.intendedNameservers,current:domain2.nameservers},projects:projects2.map(({project,domains:domains2})=>({name:project.name,domains:domains2})),configuration:{misconfigured:domainConfig.misconfigured??null}},null,2)}
|
|
335
|
+
`),0;if(output_manager_default.log(`Domain ${domainName} found under ${import_chalk86.default.bold(contextName)} ${import_chalk86.default.gray(inspectStamp())}`),output_manager_default.print(`
|
|
333
336
|
`),output_manager_default.print(import_chalk86.default.bold(` General
|
|
334
337
|
|
|
335
338
|
`)),output_manager_default.print(` ${import_chalk86.default.cyan("Name")} ${domain2.name}
|
|
@@ -834,7 +837,7 @@ ${matches.map(m=>`- ${m.slug}: ${m.description}`).join(`
|
|
|
834
837
|
`)}return 1}let claimed=result.resource;if(asJson){let json={resource:{id:claimed.id,name:claimed.name},claimUrl,status:"claimed"};return client.stdout.write(`${JSON.stringify(json,null,2)}
|
|
835
838
|
`),0}return output_manager_default.success(`Claimed ${import_chalk197.default.bold(claimed.name)}.`),0}function buildSSOLink(team,configurationId,resourceExternalId){let url=new URL("/api/marketplace/sso","https://vercel.com");return url.searchParams.set("teamId",team.id),url.searchParams.set("integrationConfigurationId",configurationId),resourceExternalId&&url.searchParams.set("resource_id",resourceExternalId),url.href}var COLORS=["gray","red","rose","yellow","amber","green","lime","emerald","blue","cyan","purple","violet","fuchsia","orange","pink","indigo","teal","sky","aero","alizarin","almond","amethyst","apricot","aqua","aquamarine","aureolin","beige","bisque","bistre","bole","bronze","byzantine","byzantium","camel","canary","carmine","celeste","cerise","cerulean","champagne","charcoal","chestnut","cinereous","cinnabar","citrine","citron","claret","cobalt","coffee","copper","coquelicot","coral","cordovan","crimson","cyclamen","erin","fulvous"],NOUNS=["apple","ball","car","dog","elephant","flower","garden","house","island","jacket","kite","lamp","mountain","notebook","ocean","park","queen","river","school","tree","umbrella","village","window","xylophone","yacht","zebra","book","chair","door","grass","anchor","arrow","basket","battery","bell","blanket","branch","bridge","brush","bucket","button","cable","candle","canvas","castle","cave","clock","cloud","coin","compass","crystal","curtain","cushion","desert","diamond","drawer","drum","engine","envelope","feather","fence","ferry","field","flame","flask","forest","fountain","globe","harbor","helmet","horizon","kettle","ladder","lantern","leaf","lens","lever","lighthouse","magnet","marble","mirror","nest","paddle","pebble","pendant","pillar","pillow","planet","plank","pocket","prism","ribbon","ridge","saddle","sail"];function randomElement(arr){return arr[Math.floor(arr.length*Math.random())]}function generateRandomNameSuffix(){return`${randomElement(COLORS)}-${randomElement(NOUNS)}`}function generateDefaultResourceName(productSlug,maxLength=128){let suffix=generateRandomNameSuffix(),fullName=`${productSlug}-${suffix}`;return fullName.length<=maxLength?fullName:fullName.slice(0,maxLength).replace(/-+$/,"")}var DEFAULT_VALIDATION_RULE={minLength:1,maxLength:128,pattern:/^[a-zA-Z0-9_-]*$/,patternErrorMessage:"Resource name can only contain letters, numbers, underscores, and hyphens"},VALIDATION_RULES={"aws-dsql":{minLength:1,maxLength:128,pattern:/^[a-zA-Z0-9_-]*$/,patternErrorMessage:"Resource name can only contain letters, numbers, underscores, and hyphens"},"aws-apg":{minLength:1,maxLength:50,pattern:/^[a-zA-Z][a-zA-Z0-9-]*$/,patternErrorMessage:"Resource name must start with a letter and can only contain letters, numbers, and hyphens",customValidation:name=>{if(name.endsWith("-"))return"Resource name cannot end with a hyphen";if(name.includes("--"))return"Resource name cannot contain consecutive hyphens"}},"aws-dynamodb":{minLength:3,maxLength:128,pattern:/^[a-zA-Z0-9_-]*$/,patternErrorMessage:"Resource name can only contain letters, numbers, underscores, and hyphens"}};function getValidationRuleForProduct(productSlug){return productSlug?VALIDATION_RULES[productSlug.toLowerCase()]??DEFAULT_VALIDATION_RULE:DEFAULT_VALIDATION_RULE}function validateResourceName(name,productSlug){let rule=getValidationRuleForProduct(productSlug);if(!name||name.trim().length===0)return"Resource name cannot be empty";if(name.length<rule.minLength)return`Resource name must be at least ${rule.minLength} character${rule.minLength===1?"":"s"}`;if(name.length>rule.maxLength)return`Resource name cannot exceed ${rule.maxLength} characters`;if(!rule.pattern.test(name))return rule.patternErrorMessage;if(rule.customValidation){let customError=rule.customValidation(name);if(customError)return customError}}function resolveResourceName(productSlug,resourceNameArg){let rule=getValidationRuleForProduct(productSlug),isAutoGenerated=resourceNameArg===void 0,resourceName=resourceNameArg??generateDefaultResourceName(productSlug,rule.maxLength),validationError=validateResourceName(resourceName,productSlug);return validationError?{error:isAutoGenerated?`${validationError}. Use --name to provide a valid resource name.`:validationError}:{resourceName}}var IntegrationAddTelemetryClient=class extends TelemetryClient{trackCliArgumentIntegration(v,known){v&&this.trackCliArgument({arg:"integration",value:known?v:this.redactedValue})}trackCliOptionName(v){v&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionMetadata(v){v?.length&&this.trackCliOption({option:"metadata",value:this.redactedValue})}trackCliOptionPlan(v){v&&this.trackCliOption({option:"plan",value:this.redactedValue})}trackCliFlagNoConnect(v){v&&this.trackCliFlag("no-connect")}trackCliFlagNoEnvPull(v){v&&this.trackCliFlag("no-env-pull")}trackCliOptionEnvironment(v){v?.length&&this.trackCliOption({option:"environment",value:this.redactedValue})}trackCliOptionInstallationId(v){v&&this.trackCliOption({option:"installation-id",value:this.redactedValue})}trackMarketplaceEvent(event,props){this.trackCommandOutput({key:event,value:JSON.stringify(props)})}trackCliOptionPrefix(v){v&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliFlagClaim(v){v&&this.trackCliFlag("claim")}trackCliFlagNoClaim(v){v&&this.trackCliFlag("no-claim")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var import_chalk198=__toESM(require_source(),1);function isHiddenOnCreate(prop){return prop["ui:hidden"]===!0||prop["ui:hidden"]==="create"}function getAllOptionValues(prop){let raw=prop["ui:options"];if(!raw)return;let values=raw.map(opt=>typeof opt=="string"?opt:opt.value);return values.length>0?values:void 0}function getVisibleOptions(prop){let raw=prop["ui:options"];if(!raw)return;let options=[];for(let opt of raw)typeof opt=="string"?opt&&options.push(opt):!opt.hidden&&opt.value&&options.push(opt.value);return options.length>0?options:void 0}function generateExample(key,prop){if(prop.type==="boolean")return`-m ${key}=true`;if(prop.type==="array"){let options2=getVisibleOptions(prop);return options2&&options2.length>=2?`-m "${key}=${options2[0]},${options2[1]}"`:options2&&options2.length===1?`-m "${key}=${options2[0]}"`:prop.items?.type==="number"?prop.default!==void 0?`-m ${key}=${prop.default}`:`-m ${key}=N,N`:`-m "${key}=value1,value2"`}if(prop.type==="number")return prop.default!==void 0?`-m ${key}=${prop.default}`:prop.minimum!==void 0?`-m ${key}=${prop.minimum}`:`-m ${key}=N`;let options=getVisibleOptions(prop);return options&&options.length>0?`-m ${key}=${options[0]}`:`-m ${key}=<value>`}function isServerHandledRegion(prop){let control=prop["ui:control"];return control==="vercel-region"||control==="multi-vercel-region"}function formatMetadataSchemaHelp(schema,integrationName,productSlug){let lines=[];lines.push("");let header=productSlug?` Metadata options for "${integrationName}/${productSlug}":`:` Metadata options for "${integrationName}":`;lines.push(import_chalk198.default.bold(header)),lines.push("");let required=new Set(schema.required??[]),entries=Object.entries(schema.properties);if(entries.length===0)return lines.push(" No metadata options available."),lines.join(`
|
|
836
839
|
`);for(let[key,prop]of entries){if(isHiddenOnCreate(prop))continue;let requiredSuffix=required.has(key)&&!isServerHandledRegion(prop)?import_chalk198.default.red(" (required)"):"",typeHint=prop.type==="boolean"?import_chalk198.default.dim(" (true/false)"):prop.type==="array"?import_chalk198.default.dim(" (comma-separated)"):"";lines.push(` ${import_chalk198.default.cyan(key)}${requiredSuffix}${typeHint}`),prop.description&&lines.push(` ${prop.description}`);let visibleOptions=getVisibleOptions(prop);if(visibleOptions&&lines.push(` Options: ${visibleOptions.join(", ")}`),prop.minimum!==void 0||prop.maximum!==void 0){let range=[];prop.minimum!==void 0&&range.push(`min: ${prop.minimum}`),prop.maximum!==void 0&&range.push(`max: ${prop.maximum}`),lines.push(` Range: ${range.join(", ")}`)}prop.default!==void 0&&lines.push(` Default: ${prop.default}`);let example=generateExample(key,prop);example&&lines.push(` Example: ${import_chalk198.default.dim(example)}`),lines.push("")}return lines.join(`
|
|
837
|
-
`)}function mergeMetadataSchemas(productSchema,integrationSchema){if(!(!productSchema&&!integrationSchema))return integrationSchema?productSchema?{type:"object",properties:{...integrationSchema.properties,...productSchema.properties},required:[...new Set([...integrationSchema.required??[],...productSchema.required??[]])]}:integrationSchema:productSchema}function parseMetadataFlags(rawMetadata,schema){let metadata={},errors=[];if(!rawMetadata?.length)return{metadata,errors};for(let item of rawMetadata){let eqIndex=item.indexOf("=");if(eqIndex===-1){errors.push(`Invalid metadata format: "${item}". Expected KEY=VALUE`);continue}let key=item.slice(0,eqIndex).trim(),value=item.slice(eqIndex+1).trim(),propSchema=schema.properties[key];if(!propSchema){errors.push(`Unknown metadata key: "${key}"`);continue}if(propSchema.type==="boolean")value==="true"?metadata[key]=!0:value==="false"?metadata[key]=!1:errors.push(`Metadata "${key}" must be "true" or "false", got: "${value}"`);else if(propSchema.type==="number"){if(value===""){errors.push(`Metadata "${key}" must be a number, got: ""`);continue}let num=Number(value);if(Number.isNaN(num)||!Number.isFinite(num)){errors.push(`Metadata "${key}" must be a number, got: "${value}"`);continue}if(propSchema.minimum!==void 0&&num<propSchema.minimum){errors.push(`Metadata "${key}" must be >= ${propSchema.minimum}`);continue}if(propSchema.maximum!==void 0&&num>propSchema.maximum){errors.push(`Metadata "${key}" must be <= ${propSchema.maximum}`);continue}metadata[key]=num}else if(propSchema.type==="array"){let items=value.split(",").map(v=>v.trim()).filter(v=>v.length>0);if(propSchema.items?.type==="number"){let nums=[],hasError=!1;for(let item2 of items){if(item2===""){errors.push(`Metadata "${key}" contains invalid number: ""`),hasError=!0;break}let num=Number(item2);if(Number.isNaN(num)||!Number.isFinite(num)){errors.push(`Metadata "${key}" contains invalid number: "${item2}"`),hasError=!0;break}if(propSchema.minimum!==void 0&&num<propSchema.minimum){errors.push(`Metadata "${key}" contains number ${num} below minimum ${propSchema.minimum}`),hasError=!0;break}if(propSchema.maximum!==void 0&&num>propSchema.maximum){errors.push(`Metadata "${key}" contains number ${num} above maximum ${propSchema.maximum}`),hasError=!0;break}nums.push(num)}hasError||(metadata[key]=nums)}else{let validValues=getAllOptionValues(propSchema);if(validValues){let prevErrorCount=errors.length;for(let item2 of items)validValues.includes(item2)||errors.push(`Metadata "${key}" contains invalid value: "${item2}". Must be one of: ${validValues.join(", ")}`);if(errors.length>prevErrorCount)continue}metadata[key]=items}}else{let validValues=getAllOptionValues(propSchema);if(validValues&&!validValues.includes(value)){errors.push(`Metadata "${key}" must be one of: ${validValues.join(", ")}`);continue}metadata[key]=value}}return{metadata,errors}}function validateRequiredMetadata(metadata,schema){let errors=[],required=schema.required??[];for(let key of required){let propSchema=schema.properties[key];propSchema&&isHiddenOnCreate(propSchema)||propSchema&&isServerHandledRegion(propSchema)||metadata[key]===void 0&&propSchema?.default===void 0&&errors.push(`Required metadata missing: "${key}"`)}return errors}function validateAndPrintRequiredMetadata(metadata,schema){let errors=validateRequiredMetadata(metadata,schema);for(let error of errors)output_manager_default.error(error);return errors.length===0}async function addAutoProvision(client,integrationSlugOrQuery,resourceNameArg,options={}){let commandName=options.commandName??"integration add",telemetry2=new IntegrationAddTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry2.trackCliOptionName(resourceNameArg),telemetry2.trackCliOptionMetadata(options.metadata),telemetry2.trackCliFlagNoConnect(options.noConnect),telemetry2.trackCliFlagNoEnvPull(options.noEnvPull),telemetry2.trackCliOptionPlan(options.billingPlanId),telemetry2.trackCliOptionInstallationId(options.installationId),telemetry2.trackCliOptionEnvironment(options.environments),telemetry2.trackCliOptionPrefix(options.prefix),telemetry2.trackCliOptionFormat(options.asJson?"json":void 0);let{contextName,team}=await getScope(client);if(!team)return output_manager_default.error("Team not found"),1;client.config.currentTeam=team.id;let integration=await resolveAndFetchIntegration(client,integrationSlugOrQuery,telemetry2);if(!integration)return 1;if(integration.productSlug&&!options.productSlug&&(options.productSlug=integration.productSlug),!integration.products?.length)return output_manager_default.error(`Integration "${integration.slug}" is not a Marketplace integration`),1;if(!options.productSlug&&integration.products.length>1&&!client.stdin.isTTY){let choices=integration.products.map(p=>` ${integration.slug}/${p.slug}`).join(`
|
|
840
|
+
`)}function mergeMetadataSchemas(productSchema,integrationSchema){if(!(!productSchema&&!integrationSchema))return integrationSchema?productSchema?{type:"object",properties:{...integrationSchema.properties,...productSchema.properties},required:[...new Set([...integrationSchema.required??[],...productSchema.required??[]])]}:integrationSchema:productSchema}function parseMetadataFlags(rawMetadata,schema){let metadata={},errors=[];if(!rawMetadata?.length)return{metadata,errors};for(let item of rawMetadata){let eqIndex=item.indexOf("=");if(eqIndex===-1){errors.push(`Invalid metadata format: "${item}". Expected KEY=VALUE`);continue}let key=item.slice(0,eqIndex).trim(),value=item.slice(eqIndex+1).trim(),propSchema=schema.properties[key];if(!propSchema){errors.push(`Unknown metadata key: "${key}"`);continue}if(propSchema.type==="boolean")value==="true"?metadata[key]=!0:value==="false"?metadata[key]=!1:errors.push(`Metadata "${key}" must be "true" or "false", got: "${value}"`);else if(propSchema.type==="number"){if(value===""){errors.push(`Metadata "${key}" must be a number, got: ""`);continue}let num=Number(value);if(Number.isNaN(num)||!Number.isFinite(num)){errors.push(`Metadata "${key}" must be a number, got: "${value}"`);continue}if(propSchema.minimum!==void 0&&num<propSchema.minimum){errors.push(`Metadata "${key}" must be >= ${propSchema.minimum}`);continue}if(propSchema.maximum!==void 0&&num>propSchema.maximum){errors.push(`Metadata "${key}" must be <= ${propSchema.maximum}`);continue}metadata[key]=num}else if(propSchema.type==="array"){let items=value.split(",").map(v=>v.trim()).filter(v=>v.length>0);if(propSchema.items?.type==="number"){let nums=[],hasError=!1;for(let item2 of items){if(item2===""){errors.push(`Metadata "${key}" contains invalid number: ""`),hasError=!0;break}let num=Number(item2);if(Number.isNaN(num)||!Number.isFinite(num)){errors.push(`Metadata "${key}" contains invalid number: "${item2}"`),hasError=!0;break}if(propSchema.minimum!==void 0&&num<propSchema.minimum){errors.push(`Metadata "${key}" contains number ${num} below minimum ${propSchema.minimum}`),hasError=!0;break}if(propSchema.maximum!==void 0&&num>propSchema.maximum){errors.push(`Metadata "${key}" contains number ${num} above maximum ${propSchema.maximum}`),hasError=!0;break}nums.push(num)}hasError||(metadata[key]=nums)}else{let validValues=getAllOptionValues(propSchema);if(validValues){let prevErrorCount=errors.length;for(let item2 of items)validValues.includes(item2)||errors.push(`Metadata "${key}" contains invalid value: "${item2}". Must be one of: ${validValues.join(", ")}`);if(errors.length>prevErrorCount)continue}metadata[key]=items}}else{let validValues=getAllOptionValues(propSchema);if(validValues&&!validValues.includes(value)){errors.push(`Metadata "${key}" must be one of: ${validValues.join(", ")}`);continue}metadata[key]=value}}return{metadata,errors}}function validateRequiredMetadata(metadata,schema){let errors=[],required=schema.required??[];for(let key of required){let propSchema=schema.properties[key];propSchema&&isHiddenOnCreate(propSchema)||propSchema&&isServerHandledRegion(propSchema)||metadata[key]===void 0&&propSchema?.default===void 0&&errors.push(`Required metadata missing: "${key}"`)}return errors}function validateAndPrintRequiredMetadata(metadata,schema){let errors=validateRequiredMetadata(metadata,schema);for(let error of errors)output_manager_default.error(error);return errors.length===0}async function resolveProjectEnvironments(client,project,requestedEnvironments){let seenInputs=new Set;for(let input of requestedEnvironments){if(seenInputs.has(input))return{valid:!1,error:`Duplicate environment selection: "${input}" was specified more than once. Specify each environment only once.`};seenInputs.add(input)}let validation=validateEnvironments(requestedEnvironments),customEnvironmentInputs=validation.valid?[]:validation.invalid,customEnvironments=project&&customEnvironmentInputs.length>0?await getCustomEnvironments(client,project.id):[],customEnvironmentByInput=new Map;for(let environment of customEnvironments)customEnvironmentByInput.set(environment.slug,environment.id),customEnvironmentByInput.set(environment.id,environment.id);let invalid=[],resolved=[];for(let input of requestedEnvironments){let value=validateEnvironments([input]).valid?input:customEnvironmentByInput.get(input);value===void 0?invalid.push(input):resolved.push({input,value})}if(invalid.length>0){let projectGuidance=project?`, or a Custom Environment slug or ID from project ${project.name}`:". Custom Environment slugs and IDs require a linked project";return{valid:!1,error:`Invalid environment value: ${invalid.map(environment=>`"${environment}"`).join(", ")}. Must be one of: ${VALID_ENVIRONMENTS.join(", ")}${projectGuidance}.`}}let firstInputByEnvironment=new Map;for(let environment of resolved){let firstInput=firstInputByEnvironment.get(environment.value);if(firstInput!==void 0)return{valid:!1,error:`Duplicate environment selection: "${firstInput}" and "${environment.input}" refer to the same environment. Specify each environment only once.`};firstInputByEnvironment.set(environment.value,environment.input)}return{valid:!0,environments:resolved.map(environment=>environment.value)}}async function addAutoProvision(client,integrationSlugOrQuery,resourceNameArg,options={}){let commandName=options.commandName??"integration add",telemetry2=new IntegrationAddTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry2.trackCliOptionName(resourceNameArg),telemetry2.trackCliOptionMetadata(options.metadata),telemetry2.trackCliFlagNoConnect(options.noConnect),telemetry2.trackCliFlagNoEnvPull(options.noEnvPull),telemetry2.trackCliOptionPlan(options.billingPlanId),telemetry2.trackCliOptionInstallationId(options.installationId),telemetry2.trackCliOptionEnvironment(options.environments),telemetry2.trackCliOptionPrefix(options.prefix),telemetry2.trackCliOptionFormat(options.asJson?"json":void 0);let{contextName,team}=await getScope(client);if(!team)return output_manager_default.error("Team not found"),1;if(client.config.currentTeam=team.id,options.environments?.length){let project;if(!validateEnvironments(options.environments).valid){let linkedProject=await getLinkedProject(client);if(linkedProject.status==="error")return linkedProject.exitCode;project=linkedProject.status==="linked"?linkedProject.project:void 0}let environmentResult=await resolveProjectEnvironments(client,project,options.environments);if(!environmentResult.valid)return output_manager_default.error(environmentResult.error),1;options.environments=environmentResult.environments}let integration=await resolveAndFetchIntegration(client,integrationSlugOrQuery,telemetry2);if(!integration)return 1;if(integration.productSlug&&!options.productSlug&&(options.productSlug=integration.productSlug),!integration.products?.length)return output_manager_default.error(`Integration "${integration.slug}" is not a Marketplace integration`),1;if(!options.productSlug&&integration.products.length>1&&!client.stdin.isTTY){let choices=integration.products.map(p=>` ${integration.slug}/${p.slug}`).join(`
|
|
838
841
|
`);return output_manager_default.error(`Integration "${integration.slug}" has multiple products. Specify one with:
|
|
839
842
|
|
|
840
843
|
${choices}
|
|
@@ -845,14 +848,14 @@ ${installationsList2}
|
|
|
845
848
|
|
|
846
849
|
Re-run with --installation-id to select one, e.g.:
|
|
847
850
|
vercel ${commandName} ${slug} --installation-id ${result.installations[0].id}`),1}if(result.kind!=="provisioned"){let fallback=result;telemetry2.trackMarketplaceEvent("marketplace_install_flow_web_fallback",{...baseProps,reason:fallback.reason??fallback.kind,auto_provision_result_kind:fallback.kind,auto_provision_result_reason:fallback.reason,auto_provision_error_message:fallback.error_message}),output_manager_default.debug(`Fallback required - kind: ${fallback.kind}`),output_manager_default.debug(`Fallback URL from API: ${fallback.url}`);let projectLink=await getLinkedProjectField(client,options.noConnect,"name");if(projectLink.exitCode!==void 0)return projectLink.exitCode;let missingRequired=(mergedParsingSchema.required??[]).filter(key=>{if(key in metadata||key in installationMetadata)return!1;let prop=mergedParsingSchema.properties[key];return prop&&!isServerHandledRegion(prop)});if(missingRequired.length>0){let examples=missingRequired.map(key=>{let prop=mergedParsingSchema.properties[key],exampleVal=(prop?getVisibleOptions(prop):void 0)?.[0]??"<value>";return`-m ${key}=${exampleVal}`});return output_manager_default.error(`Missing required metadata: ${missingRequired.join(", ")}.`),output_manager_default.log(` Provide ${examples.join(" ")} to provision directly from the CLI.`),output_manager_default.log(` Run \`vercel ${commandName} ${integration.slug} --help\` for all metadata options.`),1}output_manager_default.log("Additional setup required. Opening browser...");let url=new URL(fallback.url);return url.searchParams.set("defaultResourceName",resourceName),url.searchParams.set("source","cli"),Object.keys(metadata).length>0&&url.searchParams.set("metadata",JSON.stringify(metadata)),Object.keys(installationMetadata).length>0&&url.searchParams.set("installationMetadata",JSON.stringify(installationMetadata)),projectLink.value&&url.searchParams.set("projectSlug",projectLink.value),options.billingPlanId&&url.searchParams.set("planId",options.billingPlanId),options.environments?.length&&url.searchParams.set("environment",options.environments.join(",")),output_manager_default.debug(`Opening URL: ${url.href}`),(0,import_open14.default)(url.href).catch(err=>output_manager_default.debug(`Failed to open browser: ${err}`)),1}let provisioned=result;telemetry2.trackMarketplaceEvent("marketplace_checkout_provisioning_completed",{...baseProps,resource_id:provisioned.resource.id}),output_manager_default.debug(`Provisioned resource: ${JSON.stringify(provisioned.resource,null,2)}`),output_manager_default.debug(`Installation: ${JSON.stringify(provisioned.installation,null,2)}`),output_manager_default.debug(`Billing plan: ${JSON.stringify(provisioned.billingPlan,null,2)}`),output_manager_default.success(`${product.name} successfully provisioned: ${import_chalk199.default.bold(resourceName)}`);let isSandbox=provisioned.resource.ownership==="sandbox";if(isSandbox&&!options.noClaim)if(telemetry2.trackCliFlagClaim(options.claim),telemetry2.trackCliFlagNoClaim(options.noClaim),options.claim||client.stdin.isTTY&&!options.asJson){let runClaim=!!options.claim;if(!runClaim&&client.stdin.isTTY&&(runClaim=await client.input.confirm(`${import_chalk199.default.bold(resourceName)} is a sandbox resource. Claim it now?`,!0)),runClaim)try{let targetResource=(await getResources(client)).find(r=>r.id===provisioned.resource.id);targetResource?await runClaimForResource(client,targetResource,{suppressActionRequired:!0}):output_manager_default.warn(`Could not locate the newly provisioned resource. Run \`${packageName} integration resource claim ${resourceName}\` to claim it.`)}catch(error){output_manager_default.warn(`Failed to start claim flow: ${error.message}. Run \`${packageName} integration resource claim ${resourceName}\` to retry.`)}}else output_manager_default.log(`Sandbox resource \u2014 claim it with: ${import_chalk199.default.cyan(`vercel integration resource claim ${resourceName}`)}`);else isSandbox&&options.noClaim&&(telemetry2.trackCliFlagNoClaim(options.noClaim),output_manager_default.log(`Sandbox resource \u2014 claim it later with: ${import_chalk199.default.cyan(`vercel integration resource claim ${resourceName}`)}`));let guideCommand=`vercel integration guide ${integration.products.length>1?`${integration.slug}/${product.slug}`:integration.slug}`;output_manager_default.log(indent_default(`Guide: Run ${import_chalk199.default.cyan(`\`${guideCommand}\``)} for getting started guides and code snippets`,4));let setupResult=await postProvisionSetup(client,resourceName,provisioned.resource.id,contextName,{...options,integrationSlug:integration.slug,installationId:provisioned.installation.id,onProjectConnected:projectId=>{telemetry2.trackMarketplaceEvent("marketplace_project_connected",{...baseProps,project_id:projectId,resource_id:provisioned.resource.id})},onProjectConnectFailed:(projectId,error)=>{telemetry2.trackMarketplaceEvent("marketplace_project_connect_failed",{...baseProps,project_id:projectId,resource_id:provisioned.resource.id,error_message:error.message})}}),skills2=resolveProductSkills(product),failedSkills=[];if(skills2.length){options.asJson||output_manager_default.spinner(`Installing agent skills for ${product.name}...`);let skillsTelemetryMetadata=JSON.stringify({origin:"vercel-cli",flow:"integration-install",integration:integration.slug,product:product.slug});for(let skill of skills2){let args=["--yes","skills","add",skill.repoUrl,...skill.skill?["--skill",skill.skill]:[],"--yes","--metadata",skillsTelemetryMetadata],result2=await(0,import_execa2.default)("npx",args,{cwd:client.cwd,stdio:"pipe",reject:!1});result2.exitCode!==0&&(failedSkills.push(skill),output_manager_default.debug(`skills add failed: ${result2.stderr}`),options.asJson||output_manager_default.warn(`Failed to install ${skill.skill??skill.repoUrl}. Run it manually: ${import_chalk199.default.cyan(skill.command)}`))}let installed2=skills2.length-failedSkills.length;if(installed2>0&&!options.asJson){let marketplaceUrl=integration.products.length>1?`https://vercel.com/marketplace/${integration.slug}/${product.slug}`:`https://vercel.com/marketplace/${integration.slug}`;output_manager_default.log(`Installed ${installed2} agent skill${installed2===1?"":"s"} for ${import_chalk199.default.bold(product.name)}`),output_manager_default.log(indent_default(`Learn more: ${output_manager_default.link(marketplaceUrl,marketplaceUrl,{fallback:!1})}`,2))}}if(options.asJson){let warnings=[];setupResult.connectError&&warnings.push(`Failed to connect to project: ${setupResult.connectError}`),setupResult.connected&&!setupResult.envPulled&&!options.noEnvPull&&warnings.push(ENV_PULL_FAILED_MESSAGE);for(let skill of failedSkills)warnings.push(`Failed to install ${skill.skill??skill.repoUrl}. Run it manually: ${skill.command}`);let jsonOutput={resource:{id:provisioned.resource.id,name:provisioned.resource.name,status:provisioned.resource.status,externalResourceId:provisioned.resource.externalResourceId,...provisioned.resource.ownership&&{ownership:provisioned.resource.ownership}},integration:{id:provisioned.integration.id,slug:provisioned.integration.slug,name:provisioned.integration.name},product:{id:provisioned.product.id,slug:provisioned.product.slug,name:provisioned.product.name},installation:{id:provisioned.installation.id},billingPlan:provisioned.billingPlan?{id:provisioned.billingPlan.id,name:provisioned.billingPlan.name,type:provisioned.billingPlan.type}:null,dashboardUrl:setupResult.dashboardUrl,ssoUrl:{integration:buildSSOLink(team,provisioned.installation.id),resource:buildSSOLink(team,provisioned.installation.id,provisioned.resource.externalResourceId)},project:setupResult.project??null,connected:setupResult.connected,connectError:setupResult.connectError??null,environments:setupResult.environments,envPulled:setupResult.envPulled,guideCommand,skills:skills2.map(skill=>({...skill,installed:!failedSkills.includes(skill)})),warnings};return client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
848
|
-
`),setupResult.connectError?0:setupResult.exitCode}return setupResult.exitCode}async function add9(client,args,flags,commandName){let resourceNameArg=flags["--name"],metadataFlags=flags["--metadata"],billingPlanId=flags["--plan"],prefix=flags["--prefix"];if(prefix!==void 0&&!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(prefix))return output_manager_default.error("Invalid --prefix value. It must start with a letter and contain only letters, digits, and underscores."),1;let installationId=flags["--installation-id"],formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(args.length>1)return output_manager_default.error("Cannot install more than one integration at a time"),1;let rawArg=args[0];if(!rawArg){let message="You must pass an integration slug";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message,hint:`Example: \`${packageName} integration add <integration-slug>\`. Run \`${packageName} integration discover\` to find slugs.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration discover",packageName,{prependGlobalFlags:!0}),when:"List available marketplace integrations and slugs"},{command:buildCommandWithGlobalFlags(client.argv,"integration add neon",packageName,{prependGlobalFlags:!0}),when:"Install after replacing neon with a slug from discover"}]},1),output_manager_default.error(message),1}let integrationSlug,productSlug,slashIndex=rawArg.indexOf("/");if(slashIndex!==-1){if(integrationSlug=rawArg.substring(0,slashIndex),productSlug=rawArg.substring(slashIndex+1),!integrationSlug||!productSlug)return output_manager_default.error("Invalid format. Expected: <integration-name>/<product-slug>"),1}else integrationSlug=rawArg;let environments=flags["--environment"]
|
|
851
|
+
`),setupResult.connectError?0:setupResult.exitCode}return setupResult.exitCode}async function add9(client,args,flags,commandName){let resourceNameArg=flags["--name"],metadataFlags=flags["--metadata"],billingPlanId=flags["--plan"],prefix=flags["--prefix"];if(prefix!==void 0&&!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(prefix))return output_manager_default.error("Invalid --prefix value. It must start with a letter and contain only letters, digits, and underscores."),1;let installationId=flags["--installation-id"],formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(args.length>1)return output_manager_default.error("Cannot install more than one integration at a time"),1;let rawArg=args[0];if(!rawArg){let message="You must pass an integration slug";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message,hint:`Example: \`${packageName} integration add <integration-slug>\`. Run \`${packageName} integration discover\` to find slugs.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration discover",packageName,{prependGlobalFlags:!0}),when:"List available marketplace integrations and slugs"},{command:buildCommandWithGlobalFlags(client.argv,"integration add neon",packageName,{prependGlobalFlags:!0}),when:"Install after replacing neon with a slug from discover"}]},1),output_manager_default.error(message),1}let integrationSlug,productSlug,slashIndex=rawArg.indexOf("/");if(slashIndex!==-1){if(integrationSlug=rawArg.substring(0,slashIndex),productSlug=rawArg.substring(slashIndex+1),!integrationSlug||!productSlug)return output_manager_default.error("Invalid format. Expected: <integration-name>/<product-slug>"),1}else integrationSlug=rawArg;let environments=flags["--environment"],claimFlag=flags["--claim"],noClaimFlag=flags["--no-claim"];return claimFlag&&noClaimFlag?(output_manager_default.error("Cannot use both --claim and --no-claim."),1):await addAutoProvision(client,integrationSlug,resourceNameArg,{productSlug,metadata:metadataFlags,billingPlanId,installationId,noConnect:flags["--no-connect"],noEnvPull:flags["--no-env-pull"],environments,prefix,commandName,asJson,claim:claimFlag,noClaim:noClaimFlag})}var import_chalk200=__toESM(require_source(),1);function formatProductHelp(integrationSlug,products,commandName="integration add"){let lines=[];lines.push(""),lines.push(` ${import_chalk200.default.dim("Available products for")} "${import_chalk200.default.bold(integrationSlug)}"${import_chalk200.default.dim(":")}`),lines.push("");let maxSlugLen=Math.max(...products.map(p=>p.slug.length));for(let product of products){let paddedSlug=product.slug.padEnd(maxSlugLen);lines.push(` ${import_chalk200.default.cyan(paddedSlug)} ${product.name}`)}return lines.push(""),lines.push(` ${import_chalk200.default.dim("Usage:")}`),lines.push(""),lines.push(` ${import_chalk200.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug}/<product-slug>`)}`),lines.push(""),lines.join(`
|
|
849
852
|
`)}var import_chalk201=__toESM(require_source(),1);function formatBillingPlansHelp(productName,plans){let enabledPlans=plans.filter(p=>!p.disabled);if(enabledPlans.length===0)return"";let lines=[];lines.push(""),lines.push(` ${import_chalk201.default.dim("Available billing plans for")} "${import_chalk201.default.bold(productName)}"${import_chalk201.default.dim(":")}`),lines.push("");let maxIdLen=Math.max(...enabledPlans.map(p=>p.id.length));for(let plan of enabledPlans){let paddedId=plan.id.padEnd(maxIdLen),cost=plan.cost?import_chalk201.default.dim(` (${plan.cost})`):"";lines.push(` ${import_chalk201.default.cyan(paddedId)} ${plan.name}${cost}`)}return lines.push(""),lines.push(` ${import_chalk201.default.dim("Usage:")}`),lines.push(""),lines.push(` ${import_chalk201.default.cyan(`--plan ${enabledPlans[0].id}`)}`),lines.push(""),lines.join(`
|
|
850
853
|
`)}var import_chalk202=__toESM(require_source(),1);function formatDynamicExamples(integrationSlug,products,commandName="integration add"){let lines=[];if(lines.push(""),lines.push(` ${import_chalk202.default.dim("Examples:")}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install ${integrationSlug}`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug}`)}`),products.length>1){let firstProduct=products[0];lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install a specific product`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug}/${firstProduct.slug}`)}`)}lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install with a custom resource name`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --name my-resource`)}`);let metadataExample=buildMetadataExample(integrationSlug,products,commandName);return metadataExample&&(lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install with metadata`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${metadataExample}`)}`)),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install with a specific billing plan`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --plan pro`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install and connect to specific environments only`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} -e production -e preview`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install without connecting to the current project`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --no-connect`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install without pulling environment variables`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --no-env-pull`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install with a prefix for environment variable names`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --prefix NEON2_`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Output as JSON`),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --json`)}`),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --format json`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Install using a specific installation`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --installation-id <id>`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Claim a sandbox resource immediately after provisioning`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --claim`)}`),lines.push(""),lines.push(` ${import_chalk202.default.dim("-")} Skip the offer to claim a sandbox resource`),lines.push(""),lines.push(` ${import_chalk202.default.cyan(`$ ${packageName} ${commandName} ${integrationSlug} --no-claim`)}`),lines.push(""),lines.join(`
|
|
851
854
|
`)}function buildMetadataExample(integrationSlug,products,commandName){for(let product of products){let schema=product.metadataSchema;if(!schema)continue;let flags=[];for(let[key,prop]of Object.entries(schema.properties))if(!isHiddenOnCreate(prop)){if(prop.type==="boolean")flags.push(`-m ${key}=true`);else if(prop.type==="array"){let visible=getVisibleOptions(prop);visible&&visible.length>0&&flags.push(`-m "${key}=${visible.slice(0,2).join(",")}"`)}else{let visible=getVisibleOptions(prop);visible&&visible.length>0&&flags.push(`-m ${key}=${visible[0]}`)}if(flags.length>=2)break}if(flags.length>0){let slug=products.length>1?`${integrationSlug}/${product.slug}`:integrationSlug;return`${packageName} ${commandName} ${slug} ${flags.join(" ")}`}}}async function fetchBillingPlans(client,integration,product,metadata){let searchParams=new URLSearchParams;return searchParams.set("metadata",JSON.stringify(metadata)),client.fetch(`/v1/integrations/integration/${integration.id}/products/${product.id}/plans?${searchParams}`,{json:!0})}async function printAddDynamicHelp(client,rawArg,baseCommand,printHelp,commandName){if(!rawArg)return!1;let integrationSlug=rawArg.split("/")[0],productSlug=rawArg.includes("/")?rawArg.split("/")[1]:void 0;try{let integration=await fetchIntegration(client,integrationSlug),products=integration.products??[];printHelp({...baseCommand,examples:[]}),output_manager_default.print(formatDynamicExamples(integrationSlug,products,commandName)),products.length>1&&output_manager_default.print(formatProductHelp(integrationSlug,products,commandName));for(let product of products){let mergedSchema=mergeMetadataSchemas(product.metadataSchema,integration.metadataSchema);if(mergedSchema){let metadataProductSlug=products.length>1?product.slug:void 0;output_manager_default.print(formatMetadataSchemaHelp(mergedSchema,integrationSlug,metadataProductSlug))}}let productsToShow=productSlug?products.filter(p=>p.slug===productSlug):products;for(let product of productsToShow)try{let{plans}=await fetchBillingPlans(client,integration,product,{});output_manager_default.print(formatBillingPlansHelp(product.name,plans))}catch(err){output_manager_default.debug(`Failed to fetch billing plans for ${product.slug}: ${err}`)}return!0}catch(err){return output_manager_default.debug(`Failed to fetch integration for dynamic help: ${err}`),!1}}var InstallTelemetryClient=class extends TelemetryClient{};async function install(client){let flagsSpecification=getFlagsSpecification(addSubcommand6.options),parsed;try{parsed=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),1}let{args,flags}=parsed,telemetry2=new InstallTelemetryClient({opts:{store:client.telemetryEventStore}});return flags["--help"]?(telemetry2.trackCliFlagHelp("install"),await printAddDynamicHelp(client,args[1],installCommand,c=>output_manager_default.print(help(c,{columns:client.stderr.columns})),"install")||output_manager_default.print(help(installCommand,{columns:client.stderr.columns})),0):add9(client,args.slice(1),flags,"install")}var IntegrationTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandAcceptTerms(actual){this.trackCliSubcommand({subcommand:"accept-terms",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInstallations(actual){this.trackCliSubcommand({subcommand:"installations",value:actual})}trackCliSubcommandDiscover(actual){this.trackCliSubcommand({subcommand:"discover",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandBalance(actual){this.trackCliSubcommand({subcommand:"balance",value:actual})}trackCliSubcommandCategories(actual){this.trackCliSubcommand({subcommand:"categories",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandGuide(actual){this.trackCliSubcommand({subcommand:"guide",value:actual})}trackCliSubcommandResource(actual){this.trackCliSubcommand({subcommand:"resource",value:actual})}};var import_chalk203=__toESM(require_source(),1);async function fetchInstallationPrepaymentInfo(client,installationId){return await client.fetch(`/v1/integrations/installations/${installationId}/billing/balance`,{json:!0})}async function getBalanceInformation(client,installationId){output_manager_default.spinner("Retrieving balance info\u2026",500);try{let prepaymentInfo=await fetchInstallationPrepaymentInfo(client,installationId);if(output_manager_default.stopSpinner(),!prepaymentInfo){output_manager_default.error("No balance information found for this integration");return}return prepaymentInfo}catch(error){output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch balance info: ${error.message}`);return}}async function fetchMarketplaceIntegrations(client,slug){let searchParams=new URLSearchParams;return searchParams.set("view","account"),searchParams.set("installationType","marketplace"),searchParams.set("integrationIdOrSlug",slug),await client.fetch(`/v2/integrations/configurations?${searchParams}`,{json:!0})}async function getFirstConfiguration(client,integrationSlug){let configurations=await fetchMarketplaceIntegrations(client,integrationSlug);return configurations.length>0?configurations[0]:void 0}var IntegrationBalanceTelemetryClient=class extends TelemetryClient{trackCliArgumentIntegration(v,known){v&&this.trackCliArgument({arg:"name",value:known?v:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function balance(client){let telemetry2=new IntegrationBalanceTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(balanceSubcommand.options);try{parsedArguments=parseArguments(client.argv.slice(3),flagsSpecification)}catch(error){return printError(error),1}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),parsedArguments.args.length>2)return output_manager_default.error("Cannot specify more than one integration at a time"),1;let integrationSlug=parsedArguments.args[1];if(!integrationSlug)return output_manager_default.error("You must pass an integration slug"),1;let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;client.config.currentTeam=team.id;let installation=await getBalanceInstallationId(client,integrationSlug,telemetry2);if(installation===void 0)return 1;let installationId=installation.id,resources=await getResourcesForInstallation(client,installationId);if(resources===void 0)return 1;let prepaymentInfo=await getBalanceInformation(client,installationId);if(prepaymentInfo===void 0)return 1;if(asJson){output_manager_default.stopSpinner();let jsonData=buildJsonOutput(prepaymentInfo,resources,integrationSlug);return client.stdout.write(`${JSON.stringify(jsonData,null,2)}
|
|
852
|
-
`),0}return outputBalanceInformation(prepaymentInfo,resources,integrationSlug),0}async function getBalanceInstallationId(client,integrationSlug,telemetry2){let knownIntegrationSlug=!1;output_manager_default.spinner("Retrieving installation\u2026",500);try{let installation=await getFirstConfiguration(client,integrationSlug);if(!installation){output_manager_default.stopSpinner(),output_manager_default.error("No installations found for this integration");return}return knownIntegrationSlug=!0,installation}catch(error){output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch installations: ${error.message}`);return}finally{telemetry2.trackCliArgumentIntegration(integrationSlug,knownIntegrationSlug)}}async function getResourcesForInstallation(client,installationId){output_manager_default.spinner("Retrieving resources\u2026",500);try{let resources=(await getResources(client)).filter(resource=>resource.product?.integrationConfigurationId===installationId);return output_manager_default.stopSpinner(),resources}catch(error){output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch resources: ${error.message}`);return}}function buildJsonOutput(prepaymentInfo,resources,integrationSlug){let balances=prepaymentInfo.balances.map(balance2=>({resourceName:balance2.resourceId?resources.find(r=>r.externalResourceId===balance2.resourceId)?.name??balance2.resourceId:"installation",resourceId:balance2.resourceId??null,amountInCents:balance2.currencyValueInCents,amount:formattedCurrency(balance2.currencyValueInCents)})),thresholds=prepaymentInfo.thresholds.map(threshold=>({resourceName:threshold.resourceId?resources.find(r=>r.externalResourceId===threshold.resourceId)?.name??threshold.resourceId:"installation",resourceId:threshold.resourceId??null,minimumAmountInCents:threshold.minimumAmountInCents,minimumAmount:formattedCurrency(threshold.minimumAmountInCents),purchaseAmountInCents:threshold.purchaseAmountInCents,purchaseAmount:formattedCurrency(threshold.purchaseAmountInCents)}));return{integration:integrationSlug,balances,thresholds}}function outputBalanceInformation(prepaymentInfo,resources,integrationSlug){let hasBalances=prepaymentInfo.balances.length>0,hasThresholds=prepaymentInfo.thresholds.length>0;if(hasBalances||output_manager_default.log("No balances found for this integration"),hasThresholds||output_manager_default.log("No thresholds found for this integration"),!hasBalances&&!hasThresholds)return 0;let mappings={};for(let balance2 of prepaymentInfo.balances){let resourceName=balance2.resourceId?resources.find(r=>r.externalResourceId===balance2.resourceId)?.name??balance2.resourceId:"installation";mappings[balance2.resourceId??"installation"]={balance:balance2,resourceName}}for(let threshold of prepaymentInfo.thresholds){let mapping=mappings[threshold.resourceId??"installation"];if(mapping)mapping.threshold=threshold;else{let resourceName=threshold.resourceId?resources.find(r=>r.externalResourceId===threshold.resourceId)?.name??threshold.resourceId:"installation";mappings[threshold.resourceId??"installation"]={threshold,resourceName}}}output_manager_default.log(`${import_chalk203.default.bold(`Balances and thresholds for ${integrationSlug}`)}:`);for(let key in mappings){let mapping=mappings[key],name=mapping.resourceName,balance2=mapping.balance,threshold=mapping.threshold;output_manager_default.log(`\u25CF ${name}`),balance2&&output_manager_default.log(` Balance: ${formattedCurrency(balance2.currencyValueInCents)}`),threshold&&output_manager_default.log(` Threshold: Spend ${formattedCurrency(threshold.purchaseAmountInCents)} if balance goes below ${formattedCurrency(threshold.minimumAmountInCents)}`)}}function formattedCurrency(amountInCents){return Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}).format(amountInCents/100)}var IntegrationResourceTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreateThreshold(actual){this.trackCliSubcommand({subcommand:"create-threshold",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}trackCliSubcommandClaim(actual){this.trackCliSubcommand({subcommand:"claim",value:actual})}trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}};var import_chalk204=__toESM(require_source(),1);var IntegrationResourceConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliArgumentProject(v){v&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliOptionEnvironment(v){v?.length&&this.trackCliOption({option:"environment",value:this.redactedValue})}trackCliOptionPrefix(v){v&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function connect2(client,argv){let telemetry2=new IntegrationResourceConnectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(connectSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"],prefix=parsedArguments.flags["--prefix"],environmentsFlag=parsedArguments.flags["--environment"];if(telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetry2.trackCliFlagYes(skipConfirmation),telemetry2.trackCliOptionPrefix(prefix),telemetry2.trackCliOptionEnvironment(environmentsFlag),asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),1;if(parsedArguments.args.length<1)return output_manager_default.error("You must specify a resource. See `--help` for details."),1;if(parsedArguments.args.length>2)return output_manager_default.error("Too many arguments. Usage: `vercel integration resource connect <resource> [project]`."),1;if(prefix!==void 0&&!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(prefix))return output_manager_default.error("Invalid --prefix value. It must start with a letter and contain only letters, digits, and underscores."),1;let environments;if(environmentsFlag?.length){let envValidation=validateEnvironments(environmentsFlag);if(!envValidation.valid)return output_manager_default.error(`Invalid environment value: ${envValidation.invalid.map(e2=>`"${e2}"`).join(", ")}. Must be one of: ${VALID_ENVIRONMENTS.join(", ")}`),1;environments=environmentsFlag}else environments=[...VALID_ENVIRONMENTS];let resourceName=parsedArguments.args[0],specifiedProject=parsedArguments.args[1];telemetry2.trackCliArgumentResource(resourceName),telemetry2.trackCliArgumentProject(specifiedProject);let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;client.config.currentTeam=team.id,output_manager_default.spinner("Retrieving resource\u2026",500);let targetedResource=(await getResources(client)).find(resource=>resource.name===resourceName);if(output_manager_default.stopSpinner(),!targetedResource)return output_manager_default.error(`No resource ${import_chalk204.default.bold(resourceName)} found.`),1;let projectName=specifiedProject;if(!projectName&&(projectName=await getLinkedProject(client).then(result=>{if(result.status==="linked")return result.project.name}),!projectName))return output_manager_default.error("No project linked. Either use `vc link` to link a project, or specify the project name."),1;if(targetedResource.projectsMetadata?.find(p=>p.name===projectName))return output_manager_default.error(`Project ${import_chalk204.default.bold(projectName)} is already connected to resource ${import_chalk204.default.bold(targetedResource.name)}.`),output_manager_default.log(`To change environments or env var prefix, disconnect first: \`vercel integration resource disconnect ${targetedResource.name} ${projectName}\``),1;output_manager_default.spinner("Resolving project\u2026",500);let project=await getProjectByNameOrId(client,projectName);if(output_manager_default.stopSpinner(),project instanceof ProjectNotFound)return output_manager_default.error(`No project ${import_chalk204.default.bold(projectName)} found.`),1;if(!skipConfirmation&&client.nonInteractive)return outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Connecting a resource requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1),output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&(output_manager_default.log(`The resource ${import_chalk204.default.bold(targetedResource.name)} will be connected to project ${import_chalk204.default.bold(projectName)} (environments: ${environments.join(", ")}).`),!await client.input.confirm(`${import_chalk204.default.cyan("Connect?")}`,!0)))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Connecting resource\u2026",500),await connectResourceToProject(client,project.id,targetedResource.id,environments,prefix!==void 0?{envVarPrefix:prefix}:void 0)}catch(error){if(output_manager_default.stopSpinner(),isAPIError(error)&&error.status===400){let conflict=error.serverMessage?.match(/existing environment variable with name ([A-Za-z_][A-Za-z0-9_]*)/);if(conflict){let varName=conflict[1],envRmCmd=environments.length===1?`vercel env rm ${varName} ${environments[0]}`:`vercel env rm ${varName}`;return output_manager_default.error(`Cannot connect: env var ${import_chalk204.default.bold(varName)} already exists on project ${import_chalk204.default.bold(projectName)} in one of the target environments (${environments.join(", ")}).`),prefix===void 0?output_manager_default.log(`Re-run with \`--prefix <PREFIX>_\` to namespace the new variables, or remove the existing one with \`${envRmCmd}\`.`):output_manager_default.log(`Prefix \`${prefix}\` did not avoid the collision. Try a different prefix or run \`${envRmCmd}\`.`),1}}return output_manager_default.error(`A problem occurred while connecting: ${error.message}`),1}return asJson?(output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({resource:targetedResource.name,connected:!0,project:projectName,environments},null,2)}
|
|
855
|
+
`),0}return outputBalanceInformation(prepaymentInfo,resources,integrationSlug),0}async function getBalanceInstallationId(client,integrationSlug,telemetry2){let knownIntegrationSlug=!1;output_manager_default.spinner("Retrieving installation\u2026",500);try{let installation=await getFirstConfiguration(client,integrationSlug);if(!installation){output_manager_default.stopSpinner(),output_manager_default.error("No installations found for this integration");return}return knownIntegrationSlug=!0,installation}catch(error){output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch installations: ${error.message}`);return}finally{telemetry2.trackCliArgumentIntegration(integrationSlug,knownIntegrationSlug)}}async function getResourcesForInstallation(client,installationId){output_manager_default.spinner("Retrieving resources\u2026",500);try{let resources=(await getResources(client)).filter(resource=>resource.product?.integrationConfigurationId===installationId);return output_manager_default.stopSpinner(),resources}catch(error){output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch resources: ${error.message}`);return}}function buildJsonOutput(prepaymentInfo,resources,integrationSlug){let balances=prepaymentInfo.balances.map(balance2=>({resourceName:balance2.resourceId?resources.find(r=>r.externalResourceId===balance2.resourceId)?.name??balance2.resourceId:"installation",resourceId:balance2.resourceId??null,amountInCents:balance2.currencyValueInCents,amount:formattedCurrency(balance2.currencyValueInCents)})),thresholds=prepaymentInfo.thresholds.map(threshold=>({resourceName:threshold.resourceId?resources.find(r=>r.externalResourceId===threshold.resourceId)?.name??threshold.resourceId:"installation",resourceId:threshold.resourceId??null,minimumAmountInCents:threshold.minimumAmountInCents,minimumAmount:formattedCurrency(threshold.minimumAmountInCents),purchaseAmountInCents:threshold.purchaseAmountInCents,purchaseAmount:formattedCurrency(threshold.purchaseAmountInCents)}));return{integration:integrationSlug,balances,thresholds}}function outputBalanceInformation(prepaymentInfo,resources,integrationSlug){let hasBalances=prepaymentInfo.balances.length>0,hasThresholds=prepaymentInfo.thresholds.length>0;if(hasBalances||output_manager_default.log("No balances found for this integration"),hasThresholds||output_manager_default.log("No thresholds found for this integration"),!hasBalances&&!hasThresholds)return 0;let mappings={};for(let balance2 of prepaymentInfo.balances){let resourceName=balance2.resourceId?resources.find(r=>r.externalResourceId===balance2.resourceId)?.name??balance2.resourceId:"installation";mappings[balance2.resourceId??"installation"]={balance:balance2,resourceName}}for(let threshold of prepaymentInfo.thresholds){let mapping=mappings[threshold.resourceId??"installation"];if(mapping)mapping.threshold=threshold;else{let resourceName=threshold.resourceId?resources.find(r=>r.externalResourceId===threshold.resourceId)?.name??threshold.resourceId:"installation";mappings[threshold.resourceId??"installation"]={threshold,resourceName}}}output_manager_default.log(`${import_chalk203.default.bold(`Balances and thresholds for ${integrationSlug}`)}:`);for(let key in mappings){let mapping=mappings[key],name=mapping.resourceName,balance2=mapping.balance,threshold=mapping.threshold;output_manager_default.log(`\u25CF ${name}`),balance2&&output_manager_default.log(` Balance: ${formattedCurrency(balance2.currencyValueInCents)}`),threshold&&output_manager_default.log(` Threshold: Spend ${formattedCurrency(threshold.purchaseAmountInCents)} if balance goes below ${formattedCurrency(threshold.minimumAmountInCents)}`)}}function formattedCurrency(amountInCents){return Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}).format(amountInCents/100)}var IntegrationResourceTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreateThreshold(actual){this.trackCliSubcommand({subcommand:"create-threshold",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}trackCliSubcommandClaim(actual){this.trackCliSubcommand({subcommand:"claim",value:actual})}trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}};var import_chalk204=__toESM(require_source(),1);var IntegrationResourceConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliArgumentProject(v){v&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliOptionEnvironment(v){v?.length&&this.trackCliOption({option:"environment",value:this.redactedValue})}trackCliOptionPrefix(v){v&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function connect2(client,argv){let telemetry2=new IntegrationResourceConnectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(connectSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"],prefix=parsedArguments.flags["--prefix"],environmentsFlag=parsedArguments.flags["--environment"];if(telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetry2.trackCliFlagYes(skipConfirmation),telemetry2.trackCliOptionPrefix(prefix),telemetry2.trackCliOptionEnvironment(environmentsFlag),asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),1;if(parsedArguments.args.length<1)return output_manager_default.error("You must specify a resource. See `--help` for details."),1;if(parsedArguments.args.length>2)return output_manager_default.error("Too many arguments. Usage: `vercel integration resource connect <resource> [project]`."),1;if(prefix!==void 0&&!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(prefix))return output_manager_default.error("Invalid --prefix value. It must start with a letter and contain only letters, digits, and underscores."),1;let environments=environmentsFlag?.length?environmentsFlag:[...VALID_ENVIRONMENTS],resourceName=parsedArguments.args[0],specifiedProject=parsedArguments.args[1];telemetry2.trackCliArgumentResource(resourceName),telemetry2.trackCliArgumentProject(specifiedProject);let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;client.config.currentTeam=team.id,output_manager_default.spinner("Retrieving resource\u2026",500);let targetedResource=(await getResources(client)).find(resource=>resource.name===resourceName);if(output_manager_default.stopSpinner(),!targetedResource)return output_manager_default.error(`No resource ${import_chalk204.default.bold(resourceName)} found.`),1;let projectName=specifiedProject;if(!projectName&&(projectName=await getLinkedProject(client).then(result=>{if(result.status==="linked")return result.project.name}),!projectName))return output_manager_default.error("No project linked. Either use `vc link` to link a project, or specify the project name."),1;if(targetedResource.projectsMetadata?.find(p=>p.name===projectName))return output_manager_default.error(`Project ${import_chalk204.default.bold(projectName)} is already connected to resource ${import_chalk204.default.bold(targetedResource.name)}.`),output_manager_default.log(`To change environments or env var prefix, disconnect first: \`vercel integration resource disconnect ${targetedResource.name} ${projectName}\``),1;output_manager_default.spinner("Resolving project\u2026",500);let project=await getProjectByNameOrId(client,projectName);if(output_manager_default.stopSpinner(),project instanceof ProjectNotFound)return output_manager_default.error(`No project ${import_chalk204.default.bold(projectName)} found.`),1;let environmentResult=await resolveProjectEnvironments(client,project,environments);if(!environmentResult.valid)return output_manager_default.fatal(environmentResult.error),1;let connectionEnvironments=environmentResult.environments;if(!skipConfirmation&&client.nonInteractive)return outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Connecting a resource requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1),output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&(output_manager_default.log(`The resource ${import_chalk204.default.bold(targetedResource.name)} will be connected to project ${import_chalk204.default.bold(projectName)} (environments: ${environments.join(", ")}).`),!await client.input.confirm(`${import_chalk204.default.cyan("Connect?")}`,!0)))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Connecting resource\u2026",500),await connectResourceToProject(client,project.id,targetedResource.id,connectionEnvironments,prefix!==void 0?{envVarPrefix:prefix}:void 0)}catch(error){if(output_manager_default.stopSpinner(),isAPIError(error)&&error.status===400){let conflict=error.serverMessage?.match(/existing environment variable with name ([A-Za-z_][A-Za-z0-9_]*)/);if(conflict){let varName=conflict[1],envRmCmd=environments.length===1?`vercel env rm ${varName} ${environments[0]}`:`vercel env rm ${varName}`;return output_manager_default.error(`Cannot connect: env var ${import_chalk204.default.bold(varName)} already exists on project ${import_chalk204.default.bold(projectName)} in one of the target environments (${environments.join(", ")}).`),prefix===void 0?output_manager_default.log(`Re-run with \`--prefix <PREFIX>_\` to namespace the new variables, or remove the existing one with \`${envRmCmd}\`.`):output_manager_default.log(`Prefix \`${prefix}\` did not avoid the collision. Try a different prefix or run \`${envRmCmd}\`.`),1}}return output_manager_default.error(`A problem occurred while connecting: ${error.message}`),1}return asJson?(output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({resource:targetedResource.name,connected:!0,project:projectName,environments},null,2)}
|
|
853
856
|
`),0):(output_manager_default.success(`Connected ${import_chalk204.default.bold(targetedResource.name)} to ${import_chalk204.default.bold(projectName)} (${environments.join(", ")})`),0)}var import_chalk205=__toESM(require_source(),1);var IntegrationResourceCreateThresholdTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliArgumentMinimum(v){v&&this.trackCliArgument({arg:"minimum",value:this.redactedValue})}trackCliArgumentSpend(v){v&&this.trackCliArgument({arg:"spend",value:this.redactedValue})}trackCliArgumentLimit(v){v&&this.trackCliArgument({arg:"limit",value:this.redactedValue})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}};async function updateThreshold(client,installationId,resourceId,billingPlanId,minimumAmountInCents,purchaseAmountInCents,maximumAmountPerPeriodInCents,metadata){return await client.fetch(`/v1/integrations/installations/${installationId}/resources/${resourceId}/billing/threshold`,{method:"POST",json:!0,body:{billingPlanId,minimumAmountInCents,purchaseAmountInCents,maximumAmountPerPeriodInCents,metadata:JSON.stringify(metadata)}})}async function updateInstallationThreshold(client,installationId,billingPlanId,minimumAmountInCents,purchaseAmountInCents,maximumAmountPerPeriodInCents,metadata){await client.fetch(`/v1/integrations/installations/${installationId}/billing/threshold/batch`,{method:"POST",json:!1,headers:{"content-type":"application/json; charset=utf-8"},body:JSON.stringify([{billingPlanId,minimumAmountInCents,purchaseAmountInCents,maximumAmountPerPeriodInCents,metadata:JSON.stringify(metadata)}])})}async function createThreshold(client,argv){let telemetry2=new IntegrationResourceCreateThresholdTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(createThresholdSubcommand.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let args;try{args=parseCreateThresholdArguments(parsedArguments.args,telemetry2)}catch(error){return output_manager_default.error(error.message),1}let skipConfirmWithYes=parsedArguments.flags["--yes"];telemetry2.trackCliFlagYes(skipConfirmWithYes);let{resourceName,minimum,spend,limit}=args,{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;client.config.currentTeam=team.id,output_manager_default.spinner("Retrieving resource\u2026",500);let targetedResource=(await getResources(client)).find(resource=>resource.name===resourceName);if(output_manager_default.stopSpinner(),!targetedResource)return output_manager_default.error(`The resource ${import_chalk205.default.bold(resourceName)} was not found.`),1;if(!targetedResource.product?.integrationConfigurationId)return output_manager_default.error(`The resource ${import_chalk205.default.bold(resourceName)} does not have an integration configuration.`),1;if(targetedResource.billingPlan?.type!=="prepayment")return output_manager_default.error(`The resource ${import_chalk205.default.bold(resourceName)} is not a prepayment-based resource.`),1;let minimumSpend=parseFloat(targetedResource.billingPlan.minimumAmount??"0.50")*100;if(minimumSpend>spend)return output_manager_default.error(`The spend amount $${spend/100} is below your billing plan's minimum amount of $${minimumSpend/100}.`),1;let maximumSpend=parseFloat(targetedResource.billingPlan.maximumAmount??"1000000")*100;if(targetedResource.billingPlan.maximumAmount!==void 0&&maximumSpend<spend)return output_manager_default.error(`The spend amount $${spend/100} is above your billing plan's maximum amount of $${maximumSpend/100}.`),1;let prepaymentInfo=await getBalanceInformation(client,targetedResource.product.integrationConfigurationId);return prepaymentInfo===void 0?1:targetedResource.billingPlan.scope!=="resource"?(output_manager_default.log(`The resource ${import_chalk205.default.bold(resourceName)} uses an installation-level balance.`),await updateThresholdForInstallation({client,resource:targetedResource,prepaymentInfo,minimum,spend,limit,skipConfirmWithYes:!!skipConfirmWithYes})):await updateThresholdForResource({client,resource:targetedResource,prepaymentInfo,minimum,spend,limit,skipConfirmWithYes:!!skipConfirmWithYes})}function parseCreateThresholdArguments(passedArgs,telemetry2){if(passedArgs.length<4)throw new Error("Missing arguments. See `--help` for details.");if(passedArgs.length>4)throw new Error("Too many arguments. See `--help` for details.");let args=passedArgs.slice(0,4);telemetry2.trackCliArgumentResource(args[0]),telemetry2.trackCliArgumentMinimum(args[1]),telemetry2.trackCliArgumentSpend(args[2]),telemetry2.trackCliArgumentLimit(args[3]);let resourceName=args[0],minimum=Math.round(Number.parseFloat(args[1])*100),spend=Math.round(Number.parseFloat(args[2])*100),limit=Math.round(Number.parseFloat(args[3])*100);if(isNaN(minimum))throw new Error('Minimum is an invalid number format. Minimum must be a positive number (ex. "5.75")');if(isNaN(spend))throw new Error('Spend is an invalid number format. Spend must be a positive number (ex. "10.99").');if(isNaN(limit))throw new Error('Limit is an invalid number format. Limit must be a positive number (ex. "1000").');if(minimum<0)throw new Error("Minimum cannot be negative.");if(spend<0)throw new Error("Spend cannot be negative.");if(limit<0)throw new Error("Limit cannot be negative.");if(minimum>spend)throw new Error("Minimum cannot be greater than spend.");if(minimum>limit)throw new Error("Minimum cannot be greater than limit.");if(limit<spend)throw new Error("Limit cannot be less than spend.");return{resourceName,minimum,spend,limit}}async function updateThresholdForResource(props){let existingThreshold=props.prepaymentInfo.thresholds.find(threshold=>threshold.resourceId===props.resource.externalResourceId),existingBalance=props.prepaymentInfo.balances.find(balance2=>balance2.resourceId===props.resource.externalResourceId);return handleUpdateThreshold({client:props.client,resource:props.resource,minimum:props.minimum,spend:props.spend,limit:props.limit,existingThreshold,existingBalance,skipConfirmWithYes:props.skipConfirmWithYes,isInstallationLevel:!1})}async function updateThresholdForInstallation(props){let existingThreshold=props.prepaymentInfo.thresholds.find(threshold=>threshold.resourceId===void 0),existingBalance=props.prepaymentInfo.balances.find(balance2=>balance2.resourceId===void 0);return handleUpdateThreshold({client:props.client,resource:props.resource,minimum:props.minimum,spend:props.spend,limit:props.limit,existingThreshold,existingBalance,skipConfirmWithYes:props.skipConfirmWithYes,isInstallationLevel:!0})}async function handleUpdateThreshold(props){if(props.resource.billingPlan?.type!=="prepayment")return output_manager_default.log(`The resource ${import_chalk205.default.bold(props.resource.name)} is not a prepayment-based resource.`),0;if(!props.resource.product?.integrationConfigurationId)return output_manager_default.log(`The resource ${import_chalk205.default.bold(props.resource.name)} does not have an integration configuration.`),0;if(!props.skipConfirmWithYes&&!props.client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;let entityTextReference=props.isInstallationLevel?`installation ${import_chalk205.default.bold(props.resource.product?.name)}`:`resource ${import_chalk205.default.bold(props.resource.name)}`;if(props.existingThreshold&&!(props.skipConfirmWithYes||await props.client.input.confirm(`The ${entityTextReference} already has a threshold. (minimum: $${props.existingThreshold.minimumAmountInCents/100}, spend: $${props.existingThreshold.purchaseAmountInCents/100}, limit: ${props.existingThreshold.maximumAmountPerPeriodInCents?`$${props.existingThreshold.maximumAmountPerPeriodInCents/100}`:"none set"}). Do you want to overwrite it?`,!0)))return output_manager_default.log("Aborting\u2026"),0;if(props.existingBalance&&props.existingBalance.currencyValueInCents<props.minimum&&!(props.skipConfirmWithYes||await props.client.input.confirm(`The minimum threshold is higher than the current balance of $${props.existingBalance.currencyValueInCents/100}. Are you sure?`,!0)))return output_manager_default.log("Aborting\u2026"),0;if(!(props.skipConfirmWithYes||await props.client.input.confirm(`Are you sure you want to create a threshold for the ${entityTextReference} with minimum $${props.minimum/100}, spend $${props.spend/100}, and limit $${props.limit/100}?`,!0)))return output_manager_default.log("Aborting\u2026"),0;let metadata=JSON.parse(props.existingThreshold?.metadata??"{}");return output_manager_default.spinner("Creating threshold\u2026",500),props.isInstallationLevel?await updateInstallationThreshold(props.client,props.resource.product.integrationConfigurationId,props.resource.billingPlan.id,props.minimum,props.spend,props.limit,metadata):await updateThreshold(props.client,props.resource.product.integrationConfigurationId,props.resource.id,props.resource.billingPlan.id,props.minimum,props.spend,props.limit,metadata),output_manager_default.stopSpinner(),output_manager_default.success(`Threshold for ${entityTextReference} created successfully.`),0}var import_chalk206=__toESM(require_source(),1);async function disconnectResourceFromProject(client,resource,connection){return client.fetch(`/v1/storage/stores/${resource.id}/connections/${connection.id}`,{json:!0,method:"DELETE"})}async function disconnectResourceFromAllProjects(client,resource){return client.fetch(`/v1/storage/stores/${resource.id}/connections`,{json:!0,method:"DELETE"})}var IntegrationResourceDisconnectTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliArgumentProject(v){v&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var CancelledError=class extends Error{},FailedError=class extends Error{};async function disconnect2(client,argv){let telemetry2=new IntegrationResourceDisconnectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(disconnectSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"];if(telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),1;let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;if(client.config.currentTeam=team.id,parsedArguments.args.length<1)return output_manager_default.error("You must specify a resource. See `--help` for details."),1;if(parsedArguments.args.length>2)return output_manager_default.error("Cannot specify more than one project at a time. Use `--all` to disconnect the specified resource from all projects."),1;let shouldDisconnectAll=parsedArguments.flags["--all"],isProjectSpecified=parsedArguments.args.length===2;if(isProjectSpecified&&shouldDisconnectAll)return output_manager_default.error("Cannot specify a project while using the `--all` flag."),1;let resourceName=parsedArguments.args[0],specifiedProject;isProjectSpecified&&(specifiedProject=parsedArguments.args[1]),telemetry2.trackCliArgumentResource(resourceName),telemetry2.trackCliArgumentProject(specifiedProject),telemetry2.trackCliFlagYes(skipConfirmation),telemetry2.trackCliFlagAll(shouldDisconnectAll),output_manager_default.spinner("Retrieving resource\u2026",500);let targetedResource=(await getResources(client)).find(resource=>resource.name===resourceName);if(output_manager_default.stopSpinner(),!targetedResource)return output_manager_default.error(`No resource ${import_chalk206.default.bold(resourceName)} found.`),1;if(parsedArguments.flags["--all"]){try{await handleDisconnectAllProjects(client,targetedResource,!!parsedArguments.flags["--yes"],asJson)}catch(error){if(error instanceof CancelledError)return output_manager_default.log(error.message),0;if(error instanceof FailedError)return output_manager_default.error(error.message),1;throw error}if(asJson){let projects2=targetedResource.projectsMetadata?.map(project=>project.name)??[];client.stdout.write(`${JSON.stringify({resource:targetedResource.name,disconnected:!0,projects:projects2},null,2)}
|
|
854
|
-
`)}return 0}return!specifiedProject&&(specifiedProject=await getLinkedProject(client).then(result=>{if(result.status==="linked")return result.project.name}),!specifiedProject)?(output_manager_default.error("No project linked. Either use `vc link` to link a project, or specify the project name."),1):await handleDisconnectProject(client,targetedResource,specifiedProject,skipConfirmation,asJson)}async function handleDisconnectProject(client,resource,projectName,skipConfirmation,asJson){let project=resource.projectsMetadata?.find(project2=>projectName===project2.name);if(!project)return output_manager_default.error(`Project ${import_chalk206.default.bold(projectName)} is not connected to resource ${import_chalk206.default.bold(resource.name)}.`),output_manager_default.log("Run `vercel integration list` to see which projects are connected to each resource."),1;if(!skipConfirmation&&client.nonInteractive)return outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Disconnecting a resource requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1),output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!await confirmDisconnectProject(client,resource,project))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Disconnecting resource\u2026",500)
|
|
855
|
-
`),0
|
|
857
|
+
`)}return 0}return!specifiedProject&&(specifiedProject=await getLinkedProject(client).then(result=>{if(result.status==="linked")return result.project.name}),!specifiedProject)?(output_manager_default.error("No project linked. Either use `vc link` to link a project, or specify the project name."),1):await handleDisconnectProject(client,targetedResource,specifiedProject,skipConfirmation,asJson)}async function handleDisconnectProject(client,resource,projectName,skipConfirmation,asJson){let project=resource.projectsMetadata?.find(project2=>projectName===project2.name);if(!project)return output_manager_default.error(`Project ${import_chalk206.default.bold(projectName)} is not connected to resource ${import_chalk206.default.bold(resource.name)}.`),output_manager_default.log("Run `vercel integration list` to see which projects are connected to each resource."),1;let projectConnections=resource.projectsMetadata.filter(connection=>connection.projectId===project.projectId);if(!skipConfirmation&&client.nonInteractive)return outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Disconnecting a resource requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1),output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!await confirmDisconnectProject(client,resource,project,projectConnections.length))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Disconnecting resource\u2026",500);for(let connection of projectConnections)await disconnectResourceFromProject(client,resource,connection)}catch(error){return output_manager_default.error(`A problem occurred while disconnecting: ${error.message}`),1}if(asJson)return output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({resource:resource.name,disconnected:!0,projects:[projectName]},null,2)}
|
|
858
|
+
`),0;let connectionCount=projectConnections.length;return output_manager_default.success(connectionCount===1?`Disconnected ${import_chalk206.default.bold(project.name)} from ${import_chalk206.default.bold(resource.name)}`:`Disconnected all ${connectionCount} connections for ${import_chalk206.default.bold(project.name)} from ${import_chalk206.default.bold(resource.name)}`),0}async function handleDisconnectAllProjects(client,resource,skipConfirmation,asJson=!1){if(resource.projectsMetadata?.length===0){output_manager_default.log(`${import_chalk206.default.bold(resource.name)} has no projects to disconnect.`);return}if(!skipConfirmation&&client.nonInteractive)throw outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Disconnecting all projects requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1),new FailedError("Confirmation required. Use `--yes` to skip the confirmation prompt.");if(!skipConfirmation&&!client.stdin.isTTY)throw new FailedError("Confirmation required. Use `--yes` to skip the confirmation prompt.");if(!skipConfirmation&&!await confirmDisconnectAllProjects(client,resource))throw new CancelledError("Canceled");try{output_manager_default.spinner("Disconnecting projects from resource\u2026",500),await disconnectResourceFromAllProjects(client,resource),asJson?output_manager_default.stopSpinner():output_manager_default.success(`Disconnected all projects from ${import_chalk206.default.bold(resource.name)}`)}catch(error){throw new FailedError(`A problem occurred while disconnecting all projects: ${error.message}`)}}async function confirmDisconnectProject(client,resource,project,connectionCount){return output_manager_default.log(connectionCount===1?`The resource ${import_chalk206.default.bold(resource.name)} will be disconnected from project ${import_chalk206.default.bold(project.name)}.`:`All ${connectionCount} connections between resource ${import_chalk206.default.bold(resource.name)} and project ${import_chalk206.default.bold(project.name)} will be disconnected.`),client.input.confirm(`${import_chalk206.default.red("Are you sure?")}`,!1)}async function confirmDisconnectAllProjects(client,resource){if(output_manager_default.log("The following projects will be disconnected:"),!resource.projectsMetadata)return!1;for(let project of resource.projectsMetadata)output_manager_default.print(` ${project.name}
|
|
856
859
|
`);return client.input.confirm(import_chalk206.default.red("Are you sure?"),!1)}var import_chalk208=__toESM(require_source(),1),import_title5=__toESM(require_lib2(),1);var import_chalk207=__toESM(require_source(),1),import_title4=__toESM(require_lib2(),1);function resourceStatus(status6,isSandbox=!1){let CIRCLE="\u25CF ",statusTitleCase=(0,import_title4.default)(status6),sandboxTag=isSandbox?` ${import_chalk207.default.yellow("[SANDBOX]")}`:"";switch(status6){case"initializing":return import_chalk207.default.yellow(CIRCLE)+statusTitleCase+sandboxTag;case"error":return import_chalk207.default.red(CIRCLE)+statusTitleCase+sandboxTag;case"available":return import_chalk207.default.green(CIRCLE)+statusTitleCase+sandboxTag;case"suspended":return import_chalk207.default.white(CIRCLE)+statusTitleCase+sandboxTag;case"limits-exceeded-suspended":return`${import_chalk207.default.white(CIRCLE)}Limits exceeded${sandboxTag}`;default:return import_chalk207.default.gray(statusTitleCase)+sandboxTag}}function resourceDashboardUrl(orgSlug,resourceId){return`https://vercel.com/${orgSlug}/~/stores/integration/${resourceId}`}function resourceLink(orgSlug,resource){if(resource.name)return output_manager_default.link(resource.name,resourceDashboardUrl(orgSlug,resource.id),{fallback:()=>resource.name??"\u2013",color:!1})}var IntegrationResourceInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect12(client,argv){let telemetry2=new IntegrationResourceInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(inspectSubcommand9.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput;if(telemetry2.trackCliOptionFormat(parsedArguments.flags["--format"]),parsedArguments.args.length>1)return output_manager_default.error("Too many arguments. Usage: `vercel integration resource inspect <resource>`."),1;let resourceName=parsedArguments.args[0];if(telemetry2.trackCliArgumentResource(resourceName),!resourceName)return output_manager_default.error("You must specify a resource. See `--help` for details."),1;let{contextName,team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;client.config.currentTeam=team.id,output_manager_default.spinner("Retrieving resource\u2026",500);let resources;try{resources=await getResources(client)}catch(error){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch resources: ${error.message}`),1}let listed=resources.find(resource2=>resource2.type==="integration"&&resource2.name===resourceName);if(!listed)return output_manager_default.stopSpinner(),output_manager_default.error(`No resource ${import_chalk208.default.bold(resourceName)} found.`),1;let resource;try{let live=await getResource(client,listed.id);resource={...listed,...live}}catch(error){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch live status for ${import_chalk208.default.bold(resourceName)}: ${error.message}`),1}output_manager_default.stopSpinner();let isSandbox=isSandboxResource(resource),dashboardUrl=resourceDashboardUrl(contextName,resource.id);if(asJson){let json={resource:{id:resource.id,name:resource.name,status:resource.status??null,ownership:resource.ownership??null,product:resource.product?.name??null,integration:resource.product?.slug??null,installationId:resource.product?.integrationConfigurationId??null,projects:resource.projectsMetadata?.map(project=>({id:project.projectId,name:project.name,environments:project.environments}))??[],billingPlan:resource.billingPlan?{id:resource.billingPlan.id,name:resource.billingPlan.name,type:resource.billingPlan.type,scope:resource.billingPlan.scope}:null,dashboard:dashboardUrl,...isSandbox?{claim_status:"sandbox"}:{}}};return client.stdout.write(`${JSON.stringify(json,null,2)}
|
|
857
860
|
`),0}if(output_manager_default.log(`Resource ${import_chalk208.default.bold(resource.name)} in ${import_chalk208.default.bold(contextName)}:`),output_manager_default.print(`
|
|
858
861
|
`),printAlignedLabel("Status",resourceStatus(resource.status??"\u2013",isSandbox)),resource.ownership&&printAlignedLabel("Ownership",(0,import_title5.default)(resource.ownership)),resource.product?.name){let productSlug=resource.product.slug?import_chalk208.default.gray(` (${resource.product.slug})`):"";printAlignedLabel("Product",`${resource.product.name}${productSlug}`)}let integration=integrationLink(resource,team);if(integration&&printAlignedLabel("Integration",integration),resource.billingPlan){let{name,type,scope}=resource.billingPlan,meta=[type,scope].filter(Boolean).join(" \xB7 ");printAlignedLabel("Plan",meta?`${name} \xB7 ${meta}`:name)}printAlignedLabel("Resource ID",import_chalk208.default.gray(resource.id)),printAlignedLabel("Dashboard",output_manager_default.link(dashboardUrl,dashboardUrl,{fallback:!1}));let projects2=resource.projectsMetadata??[];if(output_manager_default.print(`
|
|
@@ -1012,7 +1015,7 @@ Starting setup...
|
|
|
1012
1015
|
`),output_manager_default.print("\u2500".repeat(50)+`
|
|
1013
1016
|
`),summary.forEach(line2=>output_manager_default.print(`${line2}
|
|
1014
1017
|
`)),output_manager_default.print(`\u2728 Setup complete! Restart your clients if needed.
|
|
1015
|
-
`),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 main26(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_CONFIG48={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}=getSubcommand6(subArgs,COMMAND_CONFIG48),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-
|
|
1018
|
+
`),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 main26(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_CONFIG48={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}=getSubcommand6(subArgs,COMMAND_CONFIG48),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-B74HJNER.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-XP27OAHW.js")).default;return queryFn(client,telemetry2)}}}var import_chalk230=__toESM(require_source(),1);import{join as join37}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"],link2=await ensureLink("microfrontends",client,client.cwd,{autoConfirm});if(typeof link2=="number")return link2;let{project,org,repoRoot}=link2,currentDirectory;repoRoot?currentDirectory=join37(repoRoot,project.rootDirectory||""):currentDirectory=client.cwd,client.config.currentTeam=org.type==="team"?org.id:void 0;let{contextName}=await getScope(client);output_manager_default.spinner(`Fetching microfrontends configuration in ${import_chalk230.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=join37(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_chalk230.default.bold(humanizePath(join37(currentDirectory,VERCEL_DIR,VERCEL_DIR_MICROFRONTENDS)))} ${import_chalk230.default.gray(microfrontendsStamp())}`,emoji("success"))}
|
|
1016
1019
|
`),0}catch(error){return output_manager_default.stopSpinner(),printError(error),1}}var import_chalk231=__toESM(require_source(),1);import{writeFile as writeFile8}from"fs/promises";import{existsSync as existsSync3}from"fs";import{join as join38}from"path";async function ensureMicrofrontendsContext(client,options){let link2=await ensureLink("microfrontends",client,client.cwd,{autoConfirm:options?.autoConfirm});if(typeof link2=="number")return link2;let{project,org,repoRoot}=link2;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_chalk231.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_chalk231.default.bold("Billing")),output_manager_default.log(` ${import_chalk231.default.bold("Team:")} ${teamSlug}`),output_manager_default.log(` ${import_chalk231.default.bold("Adding:")} ${newProjectCount} microfrontends project${newProjectCount>1?"s":""}`);let projectFee;if(totalAfter<=freeProjects)projectFee=import_chalk231.default.green("Free")+` (first ${freeProjects} included)`;else if(existingMfeProjectCount>=freeProjects)projectFee=import_chalk231.default.yellow(`$250.00/month x ${newProjectCount}`)+` project${newProjectCount>1?"s":""}`;else{let freeRemaining=freeProjects-existingMfeProjectCount,paidProjects=newProjectCount-freeRemaining;projectFee=import_chalk231.default.green(`${freeRemaining} free`)+", "+import_chalk231.default.yellow(`$250.00/month x ${paidProjects}`)}if(output_manager_default.log(` ${import_chalk231.default.bold("Project fee:")} ${projectFee}`),output_manager_default.log(` ${import_chalk231.default.bold("Request fee:")} ${import_chalk231.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_chalk231.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_chalk231.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_chalk231.default.gray(createStamp())}`),output_manager_default.log(`View microfrontends group: ${output_manager_default.link(settingsUrl,settingsUrl,{fallback:!1})}`);let link2=await getLinkedProject(client,{cwd:client.cwd}),linkedProject=link2.status==="linked"?link2.project:void 0;if(linkedProject&&linkedProject.id===defaultApp.id){let repoRoot=link2.status==="linked"?link2.repoRoot:void 0,projectDir=repoRoot?join38(repoRoot,linkedProject.rootDirectory||""):client.cwd,configPath=join38(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_chalk231.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_chalk231.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 writeFile8(configPath,config+`
|
|
1017
1020
|
`,"utf-8"),output_manager_default.success(`Created ${import_chalk231.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_chalk231.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_chalk232=__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_chalk232.default.bold(project.name)} to a microfrontends group on ${import_chalk232.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_chalk232.default.bold("Billing")),output_manager_default.log(` ${import_chalk232.default.bold("Team:")} ${teamSlug}`);let projectFee;if(totalAfter<=freeProjects?projectFee=import_chalk232.default.green("Free")+` (first ${freeProjects} included)`:existingMfeProjectCount>=freeProjects?projectFee=import_chalk232.default.yellow("$250.00/month"):projectFee=import_chalk232.default.yellow("$250.00/month")+` (${freeProjects} free projects used)`,output_manager_default.log(` ${import_chalk232.default.bold("Project fee:")} ${projectFee}`),output_manager_default.log(` ${import_chalk232.default.bold("Request fee:")} ${import_chalk232.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_chalk232.default.bold(teamSlug)}'s bill. Request fees still apply for microfrontends routed requests.`):output_manager_default.log(`By proceeding, ${import_chalk232.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_chalk232.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_chalk233=__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_chalk233.default.bold(project.name)} from microfrontends group ${import_chalk233.default.bold(projectGroup.group.name)} on ${import_chalk233.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_chalk233.default.gray(removeStamp())}`),isReferencedInConfig&&output_manager_default.log(`Remember to remove "${project.name}" from your microfrontends.json configuration.`),0}var import_chalk234=__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 link2=await getLinkedProject(client,{cwd:client.cwd}),linkedProject=link2.status==="linked"?link2.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_chalk234.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_chalk234.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_chalk234.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_chalk234.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_chalk234.default.gray(deleteStamp())}`),0}import{existsSync as existsSync4}from"fs";import{join as join39}from"path";var import_chalk235=__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)}
|
|
1018
1021
|
`),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_chalk235.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 link2=await getLinkedProject(client,{cwd:client.cwd});return link2.status!=="linked"?{repoRoot:null,linkedProjectId:null,linkedRepoOrg:null,linkedRepoName:null}:{repoRoot:link2.repoRoot??null,linkedProjectId:link2.project.id,linkedRepoOrg:link2.project.link?.org??null,linkedRepoName:link2.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=join39(localRepoContext.repoRoot,rootDirectory||""),packageJsonPath=join39(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=join39(localRepoContext.repoRoot,defaultProject.git.rootDirectory||""),configuredName=configuredConfigFileName??null;if(configuredName){let configuredPath=join39(projectDir,configuredName);if(existsSync4(configuredPath))return configuredPath}let jsonPath=join39(projectDir,"microfrontends.json"),jsoncPath=join39(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_CONFIG49={"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 main27(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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG49),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_CONFIG49)),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"],link2=await ensureLink("open",client,client.cwd,{autoConfirm});if(typeof link2=="number")return link2;if(link2.status!=="linked"||!link2.org||!link2.project)return client.nonInteractive||(output_manager_default.error("This command requires a linked project. Please run:"),output_manager_default.print(` vercel link
|
|
@@ -1229,7 +1232,7 @@ ${import_chalk266.default.gray("No changes detected from current production vers
|
|
|
1229
1232
|
`),output_manager_default.print(` ${import_chalk273.default.gray("ID:")} ${route.id}
|
|
1230
1233
|
`),output_manager_default.print(`
|
|
1231
1234
|
${import_chalk273.default.bold("Staging version:")} ${version2.id}
|
|
1232
|
-
`),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_CONFIG53={list:getCommandAliases(listSubcommand19),"list-versions":getCommandAliases(listVersionsSubcommand2),inspect:getCommandAliases(inspectSubcommand12),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 main30(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}=getSubcommand6(subArgs,COMMAND_CONFIG53),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(listSubcommand19),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list21(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(inspectSubcommand12),2):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect15(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-
|
|
1235
|
+
`),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_CONFIG53={list:getCommandAliases(listSubcommand19),"list-versions":getCommandAliases(listVersionsSubcommand2),inspect:getCommandAliases(inspectSubcommand12),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 main30(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}=getSubcommand6(subArgs,COMMAND_CONFIG53),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(listSubcommand19),2):(telemetry2.trackCliSubcommandList(subcommandOriginal),list21(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(inspectSubcommand12),2):(telemetry2.trackCliSubcommandInspect(subcommandOriginal),inspect15(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-UPPFWMDP.js")).default(client,args));case"delete":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(deleteSubcommand3),2):(telemetry2.trackCliSubcommandDelete(subcommandOriginal),(await import("./chunks/delete-KIBUBKS5.js")).default(client,args));case"enable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(enableSubcommand3),2):(telemetry2.trackCliSubcommandEnable(subcommandOriginal),(await import("./chunks/enable-ON2Z35WD.js")).default(client,args));case"disable":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(disableSubcommand3),2):(telemetry2.trackCliSubcommandDisable(subcommandOriginal),(await import("./chunks/disable-2SIGN57F.js")).default(client,args));case"reorder":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(reorderSubcommand),2):(telemetry2.trackCliSubcommandReorder(subcommandOriginal),(await import("./chunks/reorder-F22Q63TM.js")).default(client,args));case"export":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(exportSubcommand),2):(telemetry2.trackCliSubcommandExport(subcommandOriginal),(await import("./chunks/export-4WCA27XL.js")).default(client,args));case"publish":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(publishSubcommand2),2):(telemetry2.trackCliSubcommandPublish(subcommandOriginal),(await import("./chunks/publish-LSRQFUBZ.js")).default(client,args));case"restore":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(restoreSubcommand2),2):(telemetry2.trackCliSubcommandRestore(subcommandOriginal),(await import("./chunks/restore-FOQ5TF47.js")).default(client,args));case"discard-staging":return needHelp?(telemetry2.trackCliFlagHelp("routes",subcommandOriginal),printHelp(discardSubcommand2),2):(telemetry2.trackCliSubcommandDiscardStaging(subcommandOriginal),(await import("./chunks/discard-SU4KZRF4.js")).default(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG53)),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.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 SecurityTelemetryClient=class extends TelemetryClient{trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}};var import_chalk274=__toESM(require_source(),1);var SecurityCheckTelemetryClient=class extends TelemetryClient{trackCliArgumentCheck(checks2){checks2.length>0&&this.trackCliArgument({arg:"check",value:checks2.join(",")})}trackCliFlagFindings(findings){findings&&this.trackCliFlag("findings")}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var SECURITY_CHECKS=[{slug:"members-no-mfa",description:"Team members without multi-factor authentication",risk:"high"},{slug:"members-too-many-owners",description:"Team owners to review",risk:"high"},{slug:"pats-no-expiration",description:"PATs that never expire",risk:"high"},{slug:"env-vars-creds-instead-of-oidc",description:"Long-lived credentials where OIDC is available",risk:"high"},{slug:"depl-no-git-fork-protection",description:"Projects without Git fork deploy prevention",risk:"high"},{slug:"proj-no-preview-depl-protection",description:"Projects without preview deployment protection",risk:"high"},{slug:"env-vars-non-sensitive",description:"Environment variables not marked Sensitive",risk:"medium"},{slug:"env-vars-non-sensitive-stale",description:"Environment variables older than 90 days",risk:"medium"},{slug:"env-vars-exposed-web-app-fwk",description:"Environment variables exposed via web application framework",risk:"medium"}];function isKnownCheck(slug){return SECURITY_CHECKS.some(check4=>check4.slug===slug)}async function check2(client,argv){let telemetry2=new SecurityCheckTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(checkSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),1}let{args:checks2,flags:opts}=parsedArgs,unknown=checks2.filter(slug=>!isKnownCheck(slug));if(unknown.length>0){let message=`Unknown check${unknown.length===1?"":"s"}: ${unknown.join(", ")}. Valid slugs: ${SECURITY_CHECKS.map(check4=>check4.slug).join(", ")}`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"security check <slug>"),when:"Re-run with a valid check slug (replace placeholder)"},{command:buildCommandWithGlobalFlags(client.argv,"security check --help"),when:"See all flags and examples"}]}),output_manager_default.error(`Unknown check${unknown.length===1?"":"s"}: ${unknown.join(", ")}. Valid slugs:
|
|
1233
1236
|
${SECURITY_CHECKS.map(check4=>check4.slug).join(`
|
|
1234
1237
|
`)}`),1}let limit=opts["--limit"];if(limit!==void 0&&(!Number.isInteger(limit)||limit<1))return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:"`--limit` must be a positive integer.",next:[{command:buildCommandWithGlobalFlags(client.argv,"security check --limit <N>"),when:"Re-run with a positive integer (replace placeholder)"}]}),output_manager_default.error("`--limit` must be a positive integer."),1;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||client.nonInteractive;telemetry2.trackCliArgumentCheck(checks2),telemetry2.trackCliOptionFormat(opts["--format"]),telemetry2.trackCliFlagFindings(opts["--findings"]),telemetry2.trackCliOptionLimit(limit),telemetry2.trackCliOptionProject(opts["--project"]),telemetry2.trackCliFlagJson(opts["--json"]);let{team,contextName}=await getScope(client);if(!team)return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_SCOPE,message:"Security checks require a team scope. Run `vercel switch` to select a team.",next:[{command:buildCommandWithGlobalFlags(client.argv,"whoami"),when:"See current user and team"},{command:buildCommandWithGlobalFlags(client.argv,"teams switch"),when:"Switch to a team"}]}),output_manager_default.error(`Security checks require a team scope. Run ${getCommandName("switch")} to select a team.`),1;let params=new URLSearchParams({teamId:team.id,maxSamples:String(limit??100)});for(let slug of checks2)params.append("facets",slug);let project=opts["--project"];project&¶ms.set("projectIdOrName",project);let dashStamp=stamp_default();output_manager_default.spinner(checks2.length>0?"Computing security checks\u2026":"Computing security report\u2026");let data;try{data=await client.fetch(`/dashboard/security-dashboard?${params}`)}catch(error){output_manager_default.stopSpinner();let status6=isAPIError(error)?error.status:void 0;return outputAgentError(client,{status:"error",reason:status6===401||status6===403?"not_authorized":status6===429?"rate_limited":AGENT_REASON.API_ERROR,message:isAPIError(error)&&error.serverMessage||"The security report request failed.",next:[{command:buildCommandWithGlobalFlags(client.argv,"whoami"),when:"Verify the authenticated user and team"}]}),printError(error),1}if(output_manager_default.stopSpinner(),asJson)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
1235
1238
|
`),0;let rows=SECURITY_CHECKS.filter(check4=>checks2.length===0||checks2.includes(check4.slug)).map(check4=>({check:check4,posture:data.report[check4.slug]})),counts={failing:0,passing:0,muted:0,unavailable:0};for(let{posture}of rows)counts[statusOf(posture)]++;let summary=[`${rows.length} ${rows.length===1?"check":"checks"}`,counts.failing>0&&import_chalk274.default.red(`${counts.failing} failing`),counts.muted>0&&import_chalk274.default.yellow(`${counts.muted} muted`),counts.unavailable>0&&import_chalk274.default.gray(`${counts.unavailable} unavailable`),counts.passing>0&&import_chalk274.default.green(`${counts.passing} passing`)].filter(Boolean).join(" \xB7 ");if(output_manager_default.log(`${summary} under ${import_chalk274.default.bold(contextName)} ${import_chalk274.default.gray(dashStamp())}`),output_manager_default.print(formatSummaryTable(rows).replace(/^(.*)/gm," $1")),output_manager_default.print(`
|
|
@@ -1306,7 +1309,7 @@ Learn more: ${import_chalk294.default.cyan("https://vercel.com/docs/cli/about-te
|
|
|
1306
1309
|
`)}function renderTree(analysis){let lines=["## Span tree",""];if(analysis.treeOrder.length===0&&analysis.orphanOrder.length===0)return lines.push("_No spans._"),lines.join(`
|
|
1307
1310
|
`);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(`
|
|
1308
1311
|
`)}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 get4(client,telemetry2){let parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand3.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),1}let positional=parsedArgs.args.slice(1),requestId=positional[0]===getSubcommand3.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(getSubcommand3,{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)}
|
|
1309
|
-
`),0):(client.stdout.write(renderMarkdown(trace3,{requestId})),output_manager_default.log("Run with --json for full trace data."),0)}var COMMAND_CONFIG60={get:getCommandAliases(getSubcommand3),create:getCommandAliases(createSubcommand7),config:getCommandAliases(tracesConfigCommand)},SUBCOMMAND_METADATA={[getSubcommand3.name]:getSubcommand3,[createSubcommand7.name]:createSubcommand7};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 printError(err),1}let{subcommand,subcommandOriginal,args}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG60),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-
|
|
1312
|
+
`),0):(client.stdout.write(renderMarkdown(trace3,{requestId})),output_manager_default.log("Run with --json for full trace data."),0)}var COMMAND_CONFIG60={get:getCommandAliases(getSubcommand3),create:getCommandAliases(createSubcommand7),config:getCommandAliases(tracesConfigCommand)},SUBCOMMAND_METADATA={[getSubcommand3.name]:getSubcommand3,[createSubcommand7.name]:createSubcommand7};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 printError(err),1}let{subcommand,subcommandOriginal,args}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG60),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-3PKXC765.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})),2}if(subcommand===createSubcommand7.name){let args2=client.argv.slice(4);return runCurl(client,{forceTrace:!0,args:args2})}return get4(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){client.config={...client.config,useNativeBinary:enabled},writeToConfigFile(client.config)}var import_semver=__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_semver.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;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?void 0:await getUpdateCommand(),updateCommand=detectedUpdateCommand&&target&&target!=="latest"?pinPackageVersion(detectedUpdateCommand.split(" "),target).join(" "):detectedUpdateCommand,global=await isGlobal();if(asJson){let jsonOutput={currentVersion:pkg_default.version,installationType:global?"global":"local",...updateCommand&&{upgradeCommand:updateCommand},autoUpdatesEnabled:isAutoUpdateEnabled(client.config),...requestedPreference&&{requestedSettings:{[requestedPreference.name]:requestedPreference.enabled}}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
1310
1313
|
`)}else output_manager_default.print(`Current version: ${pkg_default.version}
|
|
1311
1314
|
`),output_manager_default.print(`Installation type: ${global?"global":"local"}
|
|
1312
1315
|
`),updateCommand&&output_manager_default.print(`Upgrade command: ${updateCommand}
|
|
@@ -1342,7 +1345,7 @@ ${tablePrint}
|
|
|
1342
1345
|
`),log(`${import_chalk299.default.gray("Amount due:")} ${import_chalk299.default.bold(formatCurrency(data.grandTotals.billedCost))}`)}var import_chalk300=__toESM(require_source(),1);function getPeriodLabel(period){switch(period){case"daily":return"Daily";case"weekly":return"Weekly";case"monthly":return"Monthly";default:return"Period"}}function outputBreakdown({data,breakdownPeriod,startTime}){let{print,log}=output_manager_default,periodLabel=getPeriodLabel(breakdownPeriod);log(`${periodLabel} Usage for ${import_chalk300.default.bold(data.contextName)} ${elapsed(Date.now()-startTime)}`),log("");let periodSuffix=data.usingDefaults?" (current month)":"";if(log(`${import_chalk300.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`),log(`${import_chalk300.default.gray("Charges processed:")} ${data.chargeCount}`),log(`${import_chalk300.default.gray("Pricing unit:")} ${data.pricingUnit}`),log(""),[...data.services.entries()].sort((a,b)=>b[1].billedCost-a[1].billedCost).length===0){log("No usage data found for this period.");return}let quantityHeader=data.pricingUnit==="USD"?"Usage (USD)":data.pricingUnit,sortedPeriods=[...data.periodUsage.keys()].sort();for(let periodKey of sortedPeriods){let periodData=data.periodUsage.get(periodKey),sortedPeriodServices=[...periodData.services.entries()].sort((a,b)=>b[1].billedCost-a[1].billedCost);log(`${import_chalk300.default.bold(import_chalk300.default.cyan(periodKey))} (Total: ${formatQuantity(periodData.totalPricingQuantity,data.pricingUnit)}, ${formatCurrency(periodData.totalBilledCost)})`);let headers=["Service",quantityHeader,"Billed Cost"],rows=sortedPeriodServices.map(([name,svc])=>[name,formatQuantity(svc.pricingQuantity,svc.pricingUnit),formatCurrency(svc.billedCost)]),tablePrint=table([headers.map(h=>import_chalk300.default.bold(import_chalk300.default.gray(h))),...rows],{hsep:4,align:["l","r","r"]}).replace(/^/gm," ");print(`${tablePrint}
|
|
1343
1346
|
`)}}var import_chalk301=__toESM(require_source(),1);function getDimensionLabel(dimension){switch(dimension){case"project":return"Project";case"region":return"Region";default:return"Group"}}function outputGroupBy({data,groupByDimension,startTime}){let{print,log}=output_manager_default,dimensionLabel=getDimensionLabel(groupByDimension);log(`Usage by ${dimensionLabel} for ${import_chalk301.default.bold(data.contextName)} ${elapsed(Date.now()-startTime)}`),log("");let periodSuffix=data.usingDefaults?" (current month)":"";log(`${import_chalk301.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`),log(`${import_chalk301.default.gray("Charges processed:")} ${data.chargeCount}`),log(`${import_chalk301.default.gray("Pricing unit:")} ${data.pricingUnit}`),log("");let sortedGroups=[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalBilledCost-a[1].totalBilledCost);if(sortedGroups.length===0){log("No usage data found for this period.");return}let quantityHeader=data.pricingUnit==="USD"?"Usage (USD)":data.pricingUnit;for(let[groupName,groupData]of sortedGroups){log(`${import_chalk301.default.bold(import_chalk301.default.cyan(groupName))} (Total: ${formatQuantity(groupData.totalPricingQuantity,data.pricingUnit)}, ${formatCurrency(groupData.totalBilledCost)})`);let sortedServices=[...groupData.services.entries()].sort((a,b)=>b[1].billedCost-a[1].billedCost),headers=["Service",quantityHeader,"Billed Cost"],rows=sortedServices.map(([name,svc])=>[name,formatQuantity(svc.pricingQuantity,svc.pricingUnit),formatCurrency(svc.billedCost)]),tablePrint=table([headers.map(h=>import_chalk301.default.bold(import_chalk301.default.gray(h))),...rows],{hsep:4,align:["l","r","r"]}).replace(/^/gm," ");print(`${tablePrint}
|
|
1344
1347
|
`)}log(""),log(`${import_chalk301.default.gray("Amount due:")} ${import_chalk301.default.bold(formatCurrency(data.grandTotals.billedCost))}`)}function outputJson9(client,{data,fromDate,toDate,breakdownPeriod,groupByDimension}){let sortedServices=[...data.services.entries()].sort((a,b)=>b[1].billedCost-a[1].billedCost),sortedPeriods=[...data.periodUsage.keys()].sort(),jsonOutput={period:{from:fromDate,to:toDate},context:data.contextName,pricingUnit:data.pricingUnit};if(breakdownPeriod&&(jsonOutput.breakdown={period:breakdownPeriod,data:sortedPeriods.map(periodKey=>{let periodData=data.periodUsage.get(periodKey),sortedPeriodServices=[...periodData.services.entries()].sort((a,b)=>b[1].billedCost-a[1].billedCost);return{periodKey,services:sortedPeriodServices.map(([name,svc])=>({name,pricingQuantity:svc.pricingQuantity,pricingUnit:svc.pricingUnit,effectiveCost:svc.effectiveCost,billedCost:svc.billedCost})),totals:{pricingQuantity:periodData.totalPricingQuantity,effectiveCost:periodData.totalEffectiveCost,billedCost:periodData.totalBilledCost}}})}),groupByDimension){let sortedGroups=[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalBilledCost-a[1].totalBilledCost);jsonOutput.groupBy={dimension:groupByDimension,data:sortedGroups.map(([groupName,groupData])=>{let sortedGroupServices=[...groupData.services.entries()].sort((a,b)=>b[1].billedCost-a[1].billedCost);return{name:groupName,services:sortedGroupServices.map(([name,svc])=>({name,pricingQuantity:svc.pricingQuantity,pricingUnit:svc.pricingUnit,effectiveCost:svc.effectiveCost,billedCost:svc.billedCost})),totals:{pricingQuantity:groupData.totalPricingQuantity,effectiveCost:groupData.totalEffectiveCost,billedCost:groupData.totalBilledCost}}})}}jsonOutput.services=sortedServices.map(([name,svc])=>({name,pricingQuantity:svc.pricingQuantity,pricingUnit:svc.pricingUnit,effectiveCost:svc.effectiveCost,billedCost:svc.billedCost})),jsonOutput.totals={pricingQuantity:data.grandTotals.pricingQuantity,effectiveCost:data.grandTotals.effectiveCost,billedCost:data.grandTotals.billedCost},jsonOutput.chargeCount=data.chargeCount,client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
1345
|
-
`)}async function usage(client){let{print,error,debug,spinner}=output_manager_default,parsedArgs=null,flagsSpecification=getFlagsSpecification(usageCommand.options);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 month"),1;let usingDefaults=!fromFlag&&!toFlag,fromDate,toDate;try{fromDate=fromFlag?parseBillingDate(fromFlag,!1):getDefaultFromDate(),toDate=toFlag?parseBillingDate(toFlag,!0):getDefaultToDate()}catch(err){return error(err.message),1}let fromDisplay=fromFlag??getDefaultFromDateDisplay(),toDisplay=toFlag??getDefaultToDateDisplay(),breakdownFlag=parsedArgs.flags["--breakdown"],breakdownPeriod;if(breakdownFlag){if(!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),1;breakdownPeriod=breakdownFlag}let groupByFlag=parsedArgs.flags["--group-by"],groupByDimension;if(groupByFlag){if(!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),1;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),fromFlag&&debug(`Date conversion: ${fromFlag} -> ${fromDate}`),toFlag&&debug(`Date conversion: ${toFlag} (end of day) -> ${toDate}`);let contextName,teamId;try{let scope=await getScope(client);contextName=scope.contextName,teamId=scope.team?.id}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 start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk302.default.bold(contextName)}`),debug(`Fetching charges from ${fromDate} to ${toDate}`);let query=new URLSearchParams({from:fromDate,to:toDate});teamId&&query.set("teamId",teamId);try{let response=await client.fetch(`/v1/billing/charges?${query}`,{json:!1,useCurrentTeam:!1});if(!response.ok){let errorText=await response.text();return error(`Failed to fetch usage data: ${response.status} ${errorText}`),1}let usageData=await processCharges(response,breakdownPeriod,groupByDimension,contextName,fromDisplay,toDisplay,usingDefaults);return 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 output_manager_default.prettyError(err),1}}function getGroupKey(charge,dimension){return dimension==="project"?charge.Tags?.ProjectName||charge.Tags?.ProjectId||"(unattributed)":charge.RegionName||charge.RegionId||"(global)"}async function processCharges(response,breakdownPeriod,groupByDimension,contextName,fromDisplay,toDisplay,usingDefaults){let services=new Map,periodUsage=new Map,groupByUsage=new Map,grandPricingQuantity=0,grandEffective=0,grandBilled=0,chargeCount=0,pricingUnit="MIUs";return await new Promise((resolve13,reject)=>{let readable=toNodeReadable(response.body),stream=readable.pipe(import_jsonlines.default.parse());stream.on("data",charge=>{chargeCount++,chargeCount===1&&charge.PricingUnit&&(pricingUnit=charge.PricingUnit);let serviceName=charge.ServiceName||"Unknown",quantity=charge.PricingQuantity||0,effective=charge.EffectiveCost||0,billed=charge.BilledCost||0;grandPricingQuantity+=quantity,grandEffective+=effective,grandBilled+=billed;let existing=services.get(serviceName)||{pricingQuantity:0,effectiveCost:0,billedCost:0,pricingUnit:charge.PricingUnit||pricingUnit};if(services.set(serviceName,{pricingQuantity:existing.pricingQuantity+quantity,effectiveCost:existing.effectiveCost+effective,billedCost:existing.billedCost+billed,pricingUnit:existing.pricingUnit}),breakdownPeriod){let periodKey=getPeriodKey(charge.ChargePeriodStart,breakdownPeriod);periodUsage.has(periodKey)||periodUsage.set(periodKey,{services:new Map,totalPricingQuantity:0,totalEffectiveCost:0,totalBilledCost:0});let periodData=periodUsage.get(periodKey);periodData.totalPricingQuantity+=quantity,periodData.totalEffectiveCost+=effective,periodData.totalBilledCost+=billed;let periodService=periodData.services.get(serviceName)||{pricingQuantity:0,effectiveCost:0,billedCost:0,pricingUnit:charge.PricingUnit||pricingUnit};periodData.services.set(serviceName,{pricingQuantity:periodService.pricingQuantity+quantity,effectiveCost:periodService.effectiveCost+effective,billedCost:periodService.billedCost+billed,pricingUnit:periodService.pricingUnit})}if(groupByDimension){let groupKey=getGroupKey(charge,groupByDimension);groupByUsage.has(groupKey)||groupByUsage.set(groupKey,{services:new Map,totalPricingQuantity:0,totalEffectiveCost:0,totalBilledCost:0});let groupData=groupByUsage.get(groupKey);groupData.totalPricingQuantity+=quantity,groupData.totalEffectiveCost+=effective,groupData.totalBilledCost+=billed;let groupService=groupData.services.get(serviceName)||{pricingQuantity:0,effectiveCost:0,billedCost:0,pricingUnit:charge.PricingUnit||pricingUnit};groupData.services.set(serviceName,{pricingQuantity:groupService.pricingQuantity+quantity,effectiveCost:groupService.effectiveCost+effective,billedCost:groupService.billedCost+billed,pricingUnit:groupService.pricingUnit})}}),stream.on("end",resolve13),stream.on("error",reject),readable.on("error",reject)}),{contextName,fromDisplay,toDisplay,usingDefaults,pricingUnit,chargeCount,services,periodUsage,groupByUsage,grandTotals:{pricingQuantity:grandPricingQuantity,effectiveCost:grandEffective,billedCost:grandBilled}}}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_CONFIG62={ls:getCommandAliases(listSubcommand24),inspect:getCommandAliases(inspectSubcommand13),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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG62),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(listSubcommand24),2;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand13),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-KOJYZ2MR.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-37P6UWRK.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandAdd(subcommandOriginal),(await import("./chunks/add-JYMUUDWF.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-DWUI22HZ.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-RG2M3HCR.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-IN4CKJYT.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-IVYHMLHB.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-CAAKZO2C.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-GH3U4E6I.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-O62TT3WT.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-6GBDJTT6.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG62)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms38=__toESM(require_ms(),1),import_chalk303=__toESM(require_source(),1),import_pluralize22=__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 ls10(client,argv){let telemetry2=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand27.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 getScope(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk303.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)}
|
|
1348
|
+
`)}async function usage(client){let{print,error,debug,spinner}=output_manager_default,parsedArgs=null,flagsSpecification=getFlagsSpecification(usageCommand.options);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 month"),1;let usingDefaults=!fromFlag&&!toFlag,fromDate,toDate;try{fromDate=fromFlag?parseBillingDate(fromFlag,!1):getDefaultFromDate(),toDate=toFlag?parseBillingDate(toFlag,!0):getDefaultToDate()}catch(err){return error(err.message),1}let fromDisplay=fromFlag??getDefaultFromDateDisplay(),toDisplay=toFlag??getDefaultToDateDisplay(),breakdownFlag=parsedArgs.flags["--breakdown"],breakdownPeriod;if(breakdownFlag){if(!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),1;breakdownPeriod=breakdownFlag}let groupByFlag=parsedArgs.flags["--group-by"],groupByDimension;if(groupByFlag){if(!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),1;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),fromFlag&&debug(`Date conversion: ${fromFlag} -> ${fromDate}`),toFlag&&debug(`Date conversion: ${toFlag} (end of day) -> ${toDate}`);let contextName,teamId;try{let scope=await getScope(client);contextName=scope.contextName,teamId=scope.team?.id}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 start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk302.default.bold(contextName)}`),debug(`Fetching charges from ${fromDate} to ${toDate}`);let query=new URLSearchParams({from:fromDate,to:toDate});teamId&&query.set("teamId",teamId);try{let response=await client.fetch(`/v1/billing/charges?${query}`,{json:!1,useCurrentTeam:!1});if(!response.ok){let errorText=await response.text();return error(`Failed to fetch usage data: ${response.status} ${errorText}`),1}let usageData=await processCharges(response,breakdownPeriod,groupByDimension,contextName,fromDisplay,toDisplay,usingDefaults);return 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 getGroupKey(charge,dimension){return dimension==="project"?charge.Tags?.ProjectName||charge.Tags?.ProjectId||"(unattributed)":charge.RegionName||charge.RegionId||"(global)"}async function processCharges(response,breakdownPeriod,groupByDimension,contextName,fromDisplay,toDisplay,usingDefaults){let services=new Map,periodUsage=new Map,groupByUsage=new Map,grandPricingQuantity=0,grandEffective=0,grandBilled=0,chargeCount=0,pricingUnit="MIUs";return await new Promise((resolve13,reject)=>{let readable=toNodeReadable(response.body),stream=readable.pipe(import_jsonlines.default.parse());stream.on("data",charge=>{chargeCount++,chargeCount===1&&charge.PricingUnit&&(pricingUnit=charge.PricingUnit);let serviceName=charge.ServiceName||"Unknown",quantity=charge.PricingQuantity||0,effective=charge.EffectiveCost||0,billed=charge.BilledCost||0;grandPricingQuantity+=quantity,grandEffective+=effective,grandBilled+=billed;let existing=services.get(serviceName)||{pricingQuantity:0,effectiveCost:0,billedCost:0,pricingUnit:charge.PricingUnit||pricingUnit};if(services.set(serviceName,{pricingQuantity:existing.pricingQuantity+quantity,effectiveCost:existing.effectiveCost+effective,billedCost:existing.billedCost+billed,pricingUnit:existing.pricingUnit}),breakdownPeriod){let periodKey=getPeriodKey(charge.ChargePeriodStart,breakdownPeriod);periodUsage.has(periodKey)||periodUsage.set(periodKey,{services:new Map,totalPricingQuantity:0,totalEffectiveCost:0,totalBilledCost:0});let periodData=periodUsage.get(periodKey);periodData.totalPricingQuantity+=quantity,periodData.totalEffectiveCost+=effective,periodData.totalBilledCost+=billed;let periodService=periodData.services.get(serviceName)||{pricingQuantity:0,effectiveCost:0,billedCost:0,pricingUnit:charge.PricingUnit||pricingUnit};periodData.services.set(serviceName,{pricingQuantity:periodService.pricingQuantity+quantity,effectiveCost:periodService.effectiveCost+effective,billedCost:periodService.billedCost+billed,pricingUnit:periodService.pricingUnit})}if(groupByDimension){let groupKey=getGroupKey(charge,groupByDimension);groupByUsage.has(groupKey)||groupByUsage.set(groupKey,{services:new Map,totalPricingQuantity:0,totalEffectiveCost:0,totalBilledCost:0});let groupData=groupByUsage.get(groupKey);groupData.totalPricingQuantity+=quantity,groupData.totalEffectiveCost+=effective,groupData.totalBilledCost+=billed;let groupService=groupData.services.get(serviceName)||{pricingQuantity:0,effectiveCost:0,billedCost:0,pricingUnit:charge.PricingUnit||pricingUnit};groupData.services.set(serviceName,{pricingQuantity:groupService.pricingQuantity+quantity,effectiveCost:groupService.effectiveCost+effective,billedCost:groupService.billedCost+billed,pricingUnit:groupService.pricingUnit})}}),stream.on("end",resolve13),stream.on("error",reject),readable.on("error",reject)}),{contextName,fromDisplay,toDisplay,usingDefaults,pricingUnit,chargeCount,services,periodUsage,groupByUsage,grandTotals:{pricingQuantity:grandPricingQuantity,effectiveCost:grandEffective,billedCost:grandBilled}}}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_CONFIG62={ls:getCommandAliases(listSubcommand24),inspect:getCommandAliases(inspectSubcommand13),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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG62),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(listSubcommand24),2;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand13),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-FOS2BGO3.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-VVRA6JZQ.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandAdd(subcommandOriginal),(await import("./chunks/add-EM223ILV.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-UC3QD67B.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-OQL6ZGQM.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-7ALV7XD4.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-JEZ2ELHZ.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-FLK45IKR.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-SWK66ZCK.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-OUAKVKKW.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-35SS45VZ.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG62)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms38=__toESM(require_ms(),1),import_chalk303=__toESM(require_source(),1),import_pluralize22=__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 ls10(client,argv){let telemetry2=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand27.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 getScope(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk303.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)}
|
|
1346
1349
|
`)}else output_manager_default.log(`${(0,import_pluralize22.default)("Webhook",webhooks.length,!0)} found under ${import_chalk303.default.bold(contextName)} ${import_chalk303.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
|
|
1347
1350
|
|
|
1348
1351
|
`));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms38.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_chalk303.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk304=__toESM(require_source(),1);async function getWebhook(client,webhookId){return await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`)}var WebhooksGetTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function get5(client,argv){let telemetry2=new WebhooksGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand5.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_chalk304.default.cyan(`${getCommandName("webhooks get <id>")}`)}`),1;output_manager_default.debug("Fetching webhook info");let{contextName}=await getScope(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk304.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)}
|
|
@@ -1374,7 +1377,7 @@ ${tablePrint}
|
|
|
1374
1377
|
`),output_manager_default.print(`
|
|
1375
1378
|
`),output_manager_default.warn(`Save this secret - it will not be shown again: ${import_chalk305.default.bold(webhook.secret)}`),output_manager_default.print(`
|
|
1376
1379
|
`),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_chalk306=__toESM(require_source(),1);async function deleteWebhook(client,webhookId){await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`,{method:"DELETE"})}var WebhooksRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&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 rm11(client,argv){let telemetry2=new WebhooksRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand17.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 getScope(client);if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk306.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_chalk306.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)}
|
|
1377
|
-
`),0):(output_manager_default.success(`Webhook ${import_chalk306.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_CONFIG63={create:["create","add"],get:["get","inspect"],ls:["ls","list"],rm:["rm","remove","delete"]};async function main34(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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG63),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(createSubcommand8)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create6(client,args));case"get":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand5)):(telemetry2.trackCliSubcommandGet(subcommandOriginal),get5(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand17)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm11(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand27)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls10(client,args))}}var import_chalk307=__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)}
|
|
1378
|
-
`):
|
|
1380
|
+
`),0):(output_manager_default.success(`Webhook ${import_chalk306.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_CONFIG63={create:["create","add"],get:["get","inspect"],ls:["ls","list"],rm:["rm","remove","delete"]};async function main34(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}=getSubcommand6(parsedArgs.args.slice(1),COMMAND_CONFIG63),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(createSubcommand8)):(telemetry2.trackCliSubcommandCreate(subcommandOriginal),create6(client,args));case"get":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand5)):(telemetry2.trackCliSubcommandGet(subcommandOriginal),get5(client,args));case"rm":return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand17)):(telemetry2.trackCliSubcommandRemove(subcommandOriginal),rm11(client,args));default:return needHelp?(telemetry2.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand27)):(telemetry2.trackCliSubcommandList(subcommandOriginal),ls10(client,args))}}var import_chalk307=__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){let message=new InvalidToken().message;return asJson||shouldEmitNonInteractiveCommandError(client)?client.stdout.write(`${JSON.stringify({loggedIn:!1,status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.LOGIN_REQUIRED,message,...getErrorRecovery({reason:AGENT_REASON.LOGIN_REQUIRED},client)},null,2)}
|
|
1381
|
+
`):output_manager_default.fatal(message),1}let scope;try{scope=await getScope(client,{resolveLocalScope:!0})}catch(error){return isAPIError(error)&&error.status===403&&client.user&&(error.serverMessage="Your login is valid, but you can't access the selected team."),printError(error,client,{json:asJson}),1}let{user,team,app,globalTeam}=scope,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}:null};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)}
|
|
1379
1382
|
`)}else if(client.stdout.isTTY){if(output_manager_default.log(`Logged in as ${import_chalk307.default.bold(formatUsername(scope))}`),team?output_manager_default.log(`Active team: ${import_chalk307.default.bold(team.slug)}${team.name&&team.name!==team.slug?` (${team.name})`:""}`):output_manager_default.log(`Active team: ${import_chalk307.default.bold("Personal Account")}`),hasLocalOverride){let globalLabel=globalTeam?globalTeam.slug:"Personal Account",localLabel=team?team.slug:"Personal Account";output_manager_default.log(`${import_chalk307.default.yellow("Local override:")} scope is set to ${import_chalk307.default.bold(localLabel)} by the linked project in this directory (globally selected: ${import_chalk307.default.bold(globalLabel)}).`)}}else client.stdout.write(`${formatUsername(scope)}
|
|
1380
1383
|
`);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")}export{activity,agent,agentRuns,main2 as aiGateway,alerts,alias,api,bisect,main3 as blob,builders,main4 as buy,main5 as cache,main6 as certs,changelog,comments,connex,contract,main7 as crons,curl,main8 as deployHooks,dns,main9 as domains,experiments,main18 as firewall,main20 as flags,main21 as git,main19 as globalConfig,guidance,httpstat,main22 as init,inspect11 as inspect,install,main24 as integration,main23 as integrationResource,main25 as kms,login,logout2 as logout,logs,main26 as mcp,metrics,main27 as microfrontends,openCommandHandler as open,main28 as project,promote_default as promote,main as pull,redeploy,main29 as redirects,remove11 as remove,rollback_default as rollback,rollingRelease,main30 as routes,sandbox,security,skills,main31 as storage,main32 as target,teams,telemetry,main33 as tokens,traces,upgrade,usage,vcr,version,main34 as webhooks,whoami};
|