@vercel/cli-support 65.9.0 → 65.10.0-snapshot-b8e5bb846796
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-4VXTYDC7.js +8 -0
- package/dist/chunks/add-K3ZHVAYL.js +8 -0
- package/dist/chunks/add-M26FXXGH.js +8 -0
- package/dist/chunks/build-ESY72OCS.js +7 -0
- package/dist/chunks/chunk-2AMO2VMV.js +68 -0
- package/dist/chunks/{chunk-U6KJOCXX.js → chunk-2DHDKWYN.js} +1 -1
- package/dist/chunks/chunk-2VBFQZ72.js +7 -0
- package/dist/chunks/{chunk-BZNRYQ6U.js → chunk-37LESFVW.js} +1 -1
- package/dist/chunks/{chunk-CMHL66LK.js → chunk-3F5BOG4A.js} +1 -1
- package/dist/chunks/{chunk-ZCXKEZS4.js → chunk-3HC4F32I.js} +1 -1
- package/dist/chunks/{chunk-VZKQP67Q.js → chunk-4FV4I3KH.js} +1 -1
- package/dist/chunks/{chunk-R5ZLTWKB.js → chunk-4LGAV2WN.js} +1 -1
- package/dist/chunks/{chunk-DUJAQS7I.js → chunk-4MPQZWQV.js} +1 -1
- package/dist/chunks/{chunk-7WY7ASKE.js → chunk-56UH6NQ3.js} +1 -1
- package/dist/chunks/{chunk-QQA2OMXJ.js → chunk-5KE67O45.js} +1 -1
- package/dist/chunks/chunk-6EQWP4LZ.js +10 -0
- package/dist/chunks/{chunk-USYEDO7R.js → chunk-6SJHJBJH.js} +1 -1
- package/dist/chunks/{chunk-TRZDIAX3.js → chunk-77LSSWXL.js} +1 -1
- package/dist/chunks/{chunk-DASHFOKO.js → chunk-7DA25VTX.js} +1 -1
- package/dist/chunks/chunk-7DP4DHQW.js +7 -0
- package/dist/chunks/{chunk-ZERZX6BZ.js → chunk-7JY4LSW4.js} +2 -2
- package/dist/chunks/{chunk-EW62WSXG.js → chunk-7NNA4VRN.js} +1 -1
- package/dist/chunks/{chunk-EXLKCL5I.js → chunk-7VICILSF.js} +1 -1
- package/dist/chunks/{chunk-4XJVEKTD.js → chunk-7XRM7NEF.js} +1 -1
- package/dist/chunks/chunk-A5D7MVRH.js +7 -0
- package/dist/chunks/{chunk-EVH5524J.js → chunk-A5NC6IDR.js} +1 -1
- package/dist/chunks/{chunk-EDOTKQ7L.js → chunk-ADQRYOJK.js} +1 -1
- package/dist/chunks/{chunk-D2JHIOVH.js → chunk-AEYIIPUZ.js} +1 -1
- package/dist/chunks/{chunk-GHEGWXH2.js → chunk-ANCWFEOM.js} +1 -1
- package/dist/chunks/{chunk-IFCMWIRB.js → chunk-APM4DYNZ.js} +1 -1
- package/dist/chunks/chunk-BB3N7F4F.js +7 -0
- package/dist/chunks/{chunk-7ULVGK67.js → chunk-BB5UMZMF.js} +1 -1
- package/dist/chunks/{chunk-4Z3APEBF.js → chunk-BJXLR2RE.js} +1 -1
- package/dist/chunks/{chunk-Y6WXTTZS.js → chunk-BPRGAX62.js} +1 -1
- package/dist/chunks/{chunk-43P35KUA.js → chunk-BQVKEPOO.js} +1 -1
- package/dist/chunks/{chunk-MXURT5TX.js → chunk-BRKI6NTF.js} +1 -1
- package/dist/chunks/{chunk-G6HUSV7F.js → chunk-BZV2S4H6.js} +1 -1
- package/dist/chunks/chunk-C4N4LKPM.js +7 -0
- package/dist/chunks/{chunk-WFOJ2LEA.js → chunk-CCMABJKN.js} +1 -1
- package/dist/chunks/chunk-CFYTFXX6.js +7 -0
- package/dist/chunks/chunk-CKTLP5GX.js +7 -0
- package/dist/chunks/{chunk-OZPBJWYU.js → chunk-CSOIXUCL.js} +7 -7
- package/dist/chunks/{chunk-GCPPL24C.js → chunk-CUBRYWA2.js} +1 -1
- package/dist/chunks/{chunk-M73W4XNR.js → chunk-CZOD25BC.js} +1 -1
- package/dist/chunks/{chunk-UIJYRI3G.js → chunk-DBPN2VGJ.js} +1 -1
- package/dist/chunks/{chunk-XBWISZCG.js → chunk-EJ34DLV4.js} +1 -1
- package/dist/chunks/{chunk-T5TOBY4D.js → chunk-EJZNJN4N.js} +1 -1
- package/dist/chunks/{chunk-TMXIVQ45.js → chunk-F2LNGJOZ.js} +1 -1
- package/dist/chunks/{chunk-G3LWP5CH.js → chunk-FAVZ6WVS.js} +1 -1
- package/dist/chunks/{chunk-5K4UTJSY.js → chunk-FHGWXXAS.js} +1 -1
- package/dist/chunks/{chunk-2DODPQ5J.js → chunk-FI2N3SE5.js} +1 -1
- package/dist/chunks/{chunk-D4ZEJM3T.js → chunk-FI5O4WHD.js} +1 -1
- package/dist/chunks/chunk-FTACGWII.js +14 -0
- package/dist/chunks/chunk-FUYVYZWT.js +7 -0
- package/dist/chunks/{chunk-FWTBSC7Z.js → chunk-FY4ORPZH.js} +1 -1
- package/dist/chunks/{chunk-VBKFCR5W.js → chunk-G5T6UQAL.js} +1 -1
- package/dist/chunks/chunk-G7H33IKQ.js +10 -0
- package/dist/chunks/{chunk-33U57CNE.js → chunk-GKALP6QD.js} +1 -1
- package/dist/chunks/{chunk-DUPAU76G.js → chunk-HJ45TAM4.js} +1 -1
- package/dist/chunks/{chunk-E5CN62HO.js → chunk-I6TWYNZF.js} +1 -1
- package/dist/chunks/{chunk-JOXGYP5S.js → chunk-JVNIDSP5.js} +1 -1
- package/dist/chunks/chunk-K6T65WB2.js +7 -0
- package/dist/chunks/chunk-KCJ7RU5I.js +10 -0
- package/dist/chunks/{chunk-TCB4XM23.js → chunk-L3YSOZTP.js} +1 -1
- package/dist/chunks/chunk-LNVODBR2.js +8 -0
- package/dist/chunks/{chunk-32AS5X7G.js → chunk-MUNGQJGO.js} +1 -1
- package/dist/chunks/{chunk-SNCQOAFU.js → chunk-MWEC2PBL.js} +1 -1
- package/dist/chunks/{chunk-UZTDRGCW.js → chunk-NAEY6HG5.js} +1 -1
- package/dist/chunks/{chunk-GN5IAG3M.js → chunk-NGHFFOD2.js} +1 -1
- package/dist/chunks/{chunk-4BZ3DNGM.js → chunk-NLKM5LR5.js} +1 -1
- package/dist/chunks/{chunk-UOQGI6CL.js → chunk-NNGNQNGM.js} +1 -1
- package/dist/chunks/{chunk-7PGGP2QT.js → chunk-NT5ITDTD.js} +1 -1
- package/dist/chunks/{chunk-NEUQZYBL.js → chunk-PMEYNJU2.js} +1 -1
- package/dist/chunks/{chunk-BWS3ZOHJ.js → chunk-Q4GX2UTG.js} +1 -1
- package/dist/chunks/{chunk-4SJU5QSD.js → chunk-QBEIKXKY.js} +1 -1
- package/dist/chunks/{chunk-CBVVVYUP.js → chunk-QCIIUQV3.js} +1 -1
- package/dist/chunks/{chunk-UVE5COCG.js → chunk-QR2Y6RI6.js} +1 -1
- package/dist/chunks/chunk-QSMWJAN7.js +7 -0
- package/dist/chunks/{chunk-GCXUSXB4.js → chunk-QVMU7ZKQ.js} +1 -1
- package/dist/chunks/{chunk-ZGKJLJ47.js → chunk-R2P4PNRQ.js} +1 -1
- package/dist/chunks/{chunk-Y5YXAXK3.js → chunk-R3D4M5RE.js} +1 -1
- package/dist/chunks/{chunk-QJAIUZVZ.js → chunk-ROOOBR3O.js} +5 -5
- package/dist/chunks/{chunk-H34SGIVS.js → chunk-S5JBQCBA.js} +1 -1
- package/dist/chunks/{chunk-PBX7RJ2K.js → chunk-SAIROH4Y.js} +1 -1
- package/dist/chunks/{chunk-2JNDJISE.js → chunk-SIN64EHW.js} +1 -1
- package/dist/chunks/{chunk-QBOY2CXL.js → chunk-SODZSOOL.js} +1 -1
- package/dist/chunks/{chunk-KV2DYFUG.js → chunk-T7HE23VK.js} +1 -1
- package/dist/chunks/{chunk-2JXQWOK5.js → chunk-TKJUKKR6.js} +1 -1
- package/dist/chunks/{chunk-2H4DUZJZ.js → chunk-TL4ZLZ2Q.js} +1 -1
- package/dist/chunks/{chunk-WGWGDC3N.js → chunk-TRYRN6OD.js} +1 -1
- package/dist/chunks/chunk-UWJ3UPS5.js +11 -0
- package/dist/chunks/{chunk-6RCFEJZK.js → chunk-UXRXHNSX.js} +1 -1
- package/dist/chunks/chunk-V32V4SXB.js +7 -0
- package/dist/chunks/{chunk-ECQKK4JU.js → chunk-VD2FK6OF.js} +1 -1
- package/dist/chunks/{chunk-QKWJN6OE.js → chunk-VDKY5KRE.js} +1 -1
- package/dist/chunks/chunk-VPUYTI5E.js +25 -0
- package/dist/chunks/{chunk-EBBDSEEU.js → chunk-VS3S5CU4.js} +1 -1
- package/dist/chunks/{chunk-JMAXX2I6.js → chunk-VU4PHRVP.js} +1 -1
- package/dist/chunks/{chunk-ZBZPCKTW.js → chunk-W5GHMAHP.js} +1 -1
- package/dist/chunks/{chunk-QY5RG6BB.js → chunk-WYFRVK6K.js} +1 -1
- package/dist/chunks/{chunk-BRETAWE7.js → chunk-XEXOSJIU.js} +1 -1
- package/dist/chunks/{chunk-5M3WBT3N.js → chunk-XXEGRTU6.js} +1 -1
- package/dist/chunks/{chunk-4OTI552J.js → chunk-Y45SSWNH.js} +1 -1
- package/dist/chunks/{chunk-WKYFWE37.js → chunk-YO6SJCZP.js} +1 -1
- package/dist/chunks/{chunk-TGPYWWX3.js → chunk-Z57NF2SA.js} +1 -1
- package/dist/chunks/chunk-ZUI5EMXD.js +11 -0
- package/dist/chunks/clear-56POXUP7.js +8 -0
- package/dist/chunks/{compile-vercel-config-DRTOWZK6.js → compile-vercel-config-ZO4Q4DSX.js} +1 -1
- package/dist/chunks/{config-MNRKCDQA.js → config-3BJHSDR3.js} +1 -1
- package/dist/chunks/config-BQPB2VFM.js +8 -0
- package/dist/chunks/delete-2IZGMSOT.js +9 -0
- package/dist/chunks/delete-32N2EHLH.js +10 -0
- package/dist/chunks/{detect-services-GXKWIX52.js → detect-services-JFILAIAL.js} +1 -1
- package/dist/chunks/disable-U2L3EAT3.js +7 -0
- package/dist/chunks/discard-LCQCHKT3.js +14 -0
- package/dist/chunks/edit-7UYV2SKA.js +8 -0
- package/dist/chunks/edit-IE6MRAGU.js +9 -0
- package/dist/chunks/enable-TRHJ4KBM.js +7 -0
- package/dist/chunks/{export-N5F7EY7B.js → export-FCEURR7W.js} +1 -1
- package/dist/chunks/future-MJBIKCOK.js +7 -0
- package/dist/chunks/generate-cert-for-deploy-CFEVTFEH.js +7 -0
- package/dist/chunks/image-47MBJMHO.js +7 -0
- package/dist/chunks/{import-builders-OAGJKQNW.js → import-builders-2DIXZXHK.js} +1 -1
- package/dist/chunks/inspect-BEBHGVAE.js +13 -0
- package/dist/chunks/{inspect-UDUI3ETL.js → inspect-C6XCE3L6.js} +1 -1
- package/dist/chunks/{inspect-35WHAXL2.js → inspect-FZJIVQKV.js} +1 -1
- package/dist/chunks/{inspect-GX34WQGR.js → inspect-KHEUFRVD.js} +1 -1
- package/dist/chunks/inspect-VHDOPOMX.js +9 -0
- package/dist/chunks/{list-BINT67HQ.js → list-IU7VXCG3.js} +1 -1
- package/dist/chunks/{list-VVND632B.js → list-ULHYVEMI.js} +1 -1
- package/dist/chunks/list-VRPHMTAV.js +12 -0
- package/dist/chunks/login-333JR3X5.js +7 -0
- package/dist/chunks/login-N3AJJ2TI.js +9 -0
- package/dist/chunks/logs-QCK5IEZ6.js +7 -0
- package/dist/chunks/{ls-6HYUGM62.js → ls-324AYCJH.js} +1 -1
- package/dist/chunks/{ls-YT3MWU4U.js → ls-7PMEAWRR.js} +1 -1
- package/dist/chunks/{ls-2MJY6EKD.js → ls-EKSX4DUZ.js} +1 -1
- package/dist/chunks/ls-K27L6SBM.js +11 -0
- package/dist/chunks/ls-Q6XVCKO3.js +8 -0
- package/dist/chunks/{ls-7OZ5TSNW.js → ls-S6RG3GU3.js} +1 -1
- package/dist/chunks/{ls-HTNWWU45.js → ls-WSX4L6GY.js} +1 -1
- package/dist/chunks/mutate-VQBALKRN.js +9 -0
- package/dist/chunks/{native-self-update-75UJCHGZ.js → native-self-update-7OAY4AVR.js} +1 -1
- package/dist/chunks/notifications-OQQ3ELSK.js +7 -0
- package/dist/chunks/open-ULGKVY4O.js +7 -0
- package/dist/chunks/{openapi-KYC6JIXI.js → openapi-YAZA3237.js} +1 -1
- package/dist/chunks/permissions-FCZAXNBP.js +7 -0
- package/dist/chunks/{plugin-offer-URT5JNEU.js → plugin-offer-REA2ZSBW.js} +1 -1
- package/dist/chunks/prompt-missing-credentials-AENJOWAN.js +7 -0
- package/dist/chunks/{publish-LH5CIXCP.js → publish-LUVUXRPN.js} +1 -1
- package/dist/chunks/pull-734D2SIQ.js +7 -0
- package/dist/chunks/purchase-domain-if-available-J32OZAAB.js +7 -0
- package/dist/chunks/push-7N63IRGS.js +7 -0
- package/dist/chunks/{query-POTX2HYL.js → query-ZRFRACJR.js} +1 -1
- package/dist/chunks/reauthenticate-A5TEIS2T.js +7 -0
- package/dist/chunks/reorder-A2GYXTE5.js +10 -0
- package/dist/chunks/reply-VRPDRYSF.js +9 -0
- package/dist/chunks/resolve-5IVOTHCA.js +12 -0
- package/dist/chunks/resolve-agent-team-U7H6YKBF.js +7 -0
- package/dist/chunks/{restore-L3T5KOG7.js → restore-2UIAA4WJ.js} +1 -1
- package/dist/chunks/rm-2VW3MMXV.js +8 -0
- package/dist/chunks/rm-KVDVCRHH.js +8 -0
- package/dist/chunks/rm-QLWZ7DR3.js +8 -0
- package/dist/chunks/rm-QTZDIV5M.js +8 -0
- package/dist/chunks/rm-RNC3IRNA.js +8 -0
- package/dist/chunks/{routes-S75L7Z7A.js → routes-4WGST7VN.js} +1 -1
- package/dist/chunks/rule-inspect-B6R3WIIR.js +8 -0
- package/dist/chunks/{schema-P4T4GQBF.js → schema-HIEZSFBL.js} +1 -1
- package/dist/chunks/{schema-TOVLKRPJ.js → schema-RP3BSWFK.js} +1 -1
- package/dist/chunks/select-org-A2QMWNDE.js +7 -0
- package/dist/chunks/set-VV3OH6P6.js +7 -0
- package/dist/chunks/setup-and-link-F5DSGQMW.js +7 -0
- package/dist/chunks/{skills-DZYJV7BE.js → skills-X5TPVYXW.js} +1 -1
- package/dist/chunks/{statuspage-45LJ2XYT.js → statuspage-KHTMA4WL.js} +1 -1
- package/dist/chunks/tags-KDAQZ5W2.js +7 -0
- package/dist/chunks/{types-YA6BOCRV.js → types-SENK43U4.js} +1 -1
- package/dist/chunks/{update-YSAO36V7.js → update-VT4MVVJF.js} +1 -1
- package/dist/chunks/zod-Y3ZBY67C.js +7 -0
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/deploy/index.js +30 -23
- 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/project/index.js +7 -7
- package/dist/commands-account.js +18 -3
- package/dist/commands-ai.js +2 -2
- package/dist/commands-blob.js +1 -1
- package/dist/commands-core.js +6 -6
- package/dist/commands-deployments.js +1 -1
- package/dist/commands-flags.js +7 -9
- package/dist/commands-integrations.js +1 -1
- package/dist/commands-observability.js +5 -5
- package/dist/commands-routing.js +2 -2
- package/dist/help.js +1 -1
- package/dist/index.js +4 -4
- package/dist/internal-build-worker.js +1 -1
- package/dist/internal-build.js +1 -1
- package/dist/launcher-errors.js +11 -0
- package/dist/native-download.js +1 -1
- package/dist/package.json +26 -26
- package/dist/vc.js +355 -86
- package/dist/version.mjs +1 -1
- package/package.json +19 -19
- package/dist/chunks/add-6YFDZCAK.js +0 -8
- package/dist/chunks/add-QDZPCCUD.js +0 -8
- package/dist/chunks/add-Z24IIQDY.js +0 -8
- package/dist/chunks/build-HLU4YO37.js +0 -7
- package/dist/chunks/chunk-2CSCY66I.js +0 -11
- package/dist/chunks/chunk-2NABMKFV.js +0 -29
- package/dist/chunks/chunk-2TRNHR72.js +0 -7
- package/dist/chunks/chunk-32NXYHYC.js +0 -10
- package/dist/chunks/chunk-4CQKN5TW.js +0 -10
- package/dist/chunks/chunk-7DM3IJ7L.js +0 -10
- package/dist/chunks/chunk-AUCTNGW2.js +0 -7
- package/dist/chunks/chunk-C6525MLX.js +0 -10
- package/dist/chunks/chunk-CGTD4QFC.js +0 -7
- package/dist/chunks/chunk-DSNIVABS.js +0 -7
- package/dist/chunks/chunk-F53OKXYI.js +0 -7
- package/dist/chunks/chunk-K5YO4UD7.js +0 -7
- package/dist/chunks/chunk-NAU6URTI.js +0 -25
- package/dist/chunks/chunk-NNIQPNGP.js +0 -7
- package/dist/chunks/chunk-NTUDWWSL.js +0 -14
- package/dist/chunks/chunk-RZY54T7B.js +0 -7
- package/dist/chunks/chunk-SR2SHYJA.js +0 -7
- package/dist/chunks/chunk-WGVIQTOI.js +0 -8
- package/dist/chunks/chunk-YPPDRKVC.js +0 -7
- package/dist/chunks/clear-RU72IUXU.js +0 -8
- package/dist/chunks/config-PIFTR3UF.js +0 -8
- package/dist/chunks/delete-47BF6SIO.js +0 -9
- package/dist/chunks/delete-QNSKEIGO.js +0 -10
- package/dist/chunks/disable-SBFW3F7B.js +0 -7
- package/dist/chunks/discard-DUZR3OWZ.js +0 -14
- package/dist/chunks/edit-6BQ7FZC4.js +0 -8
- package/dist/chunks/edit-WO7FLNW2.js +0 -9
- package/dist/chunks/enable-OK4MR3Z6.js +0 -7
- package/dist/chunks/future-5AQIYILU.js +0 -7
- package/dist/chunks/generate-cert-for-deploy-7ERAHVOV.js +0 -7
- package/dist/chunks/image-IRC2NJVA.js +0 -7
- package/dist/chunks/inspect-5FKOSDTK.js +0 -13
- package/dist/chunks/inspect-ACNGICEF.js +0 -9
- package/dist/chunks/list-TRFGY6WP.js +0 -12
- package/dist/chunks/login-MYVTOBRG.js +0 -9
- package/dist/chunks/login-SOZ5ME3D.js +0 -7
- package/dist/chunks/logs-EMAGPMIZ.js +0 -7
- package/dist/chunks/ls-KU35N6DP.js +0 -8
- package/dist/chunks/ls-WFC636QK.js +0 -11
- package/dist/chunks/mutate-JVDDZLVE.js +0 -9
- package/dist/chunks/notifications-CXDBNBHU.js +0 -7
- package/dist/chunks/open-3CD5ZNKU.js +0 -7
- package/dist/chunks/permissions-PNBST4WN.js +0 -7
- package/dist/chunks/prompt-missing-credentials-Q5JCRP3R.js +0 -7
- package/dist/chunks/pull-XLZXPTLS.js +0 -7
- package/dist/chunks/purchase-domain-if-available-PDJGZ6MY.js +0 -7
- package/dist/chunks/push-XB57XK6H.js +0 -7
- package/dist/chunks/reauthenticate-CRI4D2BQ.js +0 -7
- package/dist/chunks/reorder-KUQ5EQBV.js +0 -10
- package/dist/chunks/reply-LO76EKEE.js +0 -9
- package/dist/chunks/resolve-KZJYJJLA.js +0 -12
- package/dist/chunks/resolve-agent-team-N7QMB7UO.js +0 -7
- package/dist/chunks/rm-7UKXTIZW.js +0 -8
- package/dist/chunks/rm-AKKEQN32.js +0 -8
- package/dist/chunks/rm-ELC57ULY.js +0 -8
- package/dist/chunks/rm-K7XEZ7TY.js +0 -8
- package/dist/chunks/rm-MOYCAXNO.js +0 -8
- package/dist/chunks/rule-inspect-ZCS4EBKR.js +0 -8
- package/dist/chunks/select-org-6NEM7F25.js +0 -7
- package/dist/chunks/set-NXFB6JXG.js +0 -7
- package/dist/chunks/setup-and-link-L67MMSUD.js +0 -7
- package/dist/chunks/tags-5AV6WAOF.js +0 -7
- package/dist/chunks/zod-2C2SXNIK.js +0 -7
package/dist/commands-account.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{createCertForCns,extractDomain,isWildcardAlias,setupDomain}from"./chunks/chunk-EXLKCL5I.js";import"./chunks/chunk-IFCMWIRB.js";import{joinWords}from"./chunks/chunk-4VFYJU37.js";import{api,tryOpenApiFallback}from"./chunks/chunk-G6HUSV7F.js";import"./chunks/chunk-GHAY4PSD.js";import{list_item_default}from"./chunks/chunk-BTI5TG6Q.js";import{collectList,decodeListCursor,sliceList}from"./chunks/chunk-D4ZEJM3T.js";import{getTeamBillingUrl}from"./chunks/chunk-XR6QY7RR.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-UNASHUWQ.js";import"./chunks/chunk-4ELZOAQH.js";import"./chunks/chunk-JUAHDOL6.js";import"./chunks/chunk-UI2H2EIM.js";import"./chunks/chunk-UUDE44NV.js";import{ellipsis}from"./chunks/chunk-AKOYIH3A.js";import{box}from"./chunks/chunk-LM3YPF3K.js";import{did_you_mean_default}from"./chunks/chunk-DWZBL4NK.js";import{OpenApiCache,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-QBOY2CXL.js";import{email}from"./chunks/chunk-6IDNVZZR.js";import{isValidName}from"./chunks/chunk-PADL3C6Z.js";import{writeJsonError}from"./chunks/chunk-CBVVVYUP.js";import{handleValidationError,outputError,parseTimeFlag,validateOptionalIntegerRange,validateTimeBound,validateTimeOrder}from"./chunks/chunk-AX3V7N44.js";import{getProtectionForDeploymentAlias,getProtectionForProductionDomain,readEnabledProtection}from"./chunks/chunk-O4CQRV2G.js";import"./chunks/chunk-VT6RIZJH.js";import"./chunks/chunk-TOTTVS5P.js";import{ensureLink}from"./chunks/chunk-7DM3IJ7L.js";import{getDeployment,toHost}from"./chunks/chunk-VU3RBRDH.js";import{mapCertError}from"./chunks/chunk-4VF5BZJP.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-EBBDSEEU.js";import{require_tar_fs}from"./chunks/chunk-KRPY5FHJ.js";import{NO_RETRY,TEAM_BUDGET,budgetAmountDollars,budgetPauses,budgetStatePayload,buy,canPromptForCharge,deleteCertById,findBudget,formatUsd,formatUsdWhole,getDomains,getProjectDomain,getTeamMemberByIdentifier,getTeamSpend,getWebhook,hasPauseThreshold,isDomainExternal,listBudgetAlerts,listBudgets,pausePercentsOutside100,percentUsed,removeAliasById,removeBudget,removeReceipt,setBudget,setSavedReceipt,spendDollars,spendPayload,teamMemberLabel,thresholdsForSet,toBudgetState}from"./chunks/chunk-UVE5COCG.js";import{require_cjs}from"./chunks/chunk-WFOJ2LEA.js";import"./chunks/chunk-5M3WBT3N.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-43P35KUA.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import"./chunks/chunk-PFD7LETF.js";import{DEFAULT_LIST_LIMIT,MAX_LIST_LIMIT,getNextPageCommand,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-NEUQZYBL.js";import{validateLsArgs}from"./chunks/chunk-BT5C6MCY.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-2RXUQ72I.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-K5YO4UD7.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand as getSubcommand3}from"./chunks/chunk-ETV3C2CV.js";import{printUnknownCommand}from"./chunks/chunk-4CQKN5TW.js";import{getTeams}from"./chunks/chunk-Y6WXTTZS.js";import{CREDIT_TYPE_LABELS,INVOICE_STATUSES,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,addSubcommand10 as addSubcommand4,addSubcommand11 as addSubcommand5,addSubcommand2 as addSubcommand,addSubcommand4 as addSubcommand2,addSubcommand5 as addSubcommand3,addonSubcommand,agentRunsCommand,alertsListSubcommand2 as alertsListSubcommand,alertsSubcommand2 as alertsSubcommand,aliasCommand,backupsSubcommand,bisectCommand,budgetCommand,buyCommand,certsCommand,connectSubcommand,createSubcommand10 as createSubcommand2,createSubcommand7 as createSubcommand,creditsSubcommand,disconnectSubcommand,dnsCommand,domainSubcommand,getCommandAliases,getSubcommand,getSubcommand5 as getSubcommand2,gitCommand,globalConfigCommand,importSubcommand,initCommand,inspectSubcommand,inspectSubcommand12 as inspectSubcommand3,inspectSubcommand14 as inspectSubcommand4,inspectSubcommand6 as inspectSubcommand2,inviteSubcommand,invoicesDownloadSubcommand,invoicesInspectSubcommand,invoicesListSubcommand,invoicesSubcommand,isCustomEnvironmentAddonAlias,issueSubcommand,itemsSubcommand,listSubcommand,listSubcommand11 as listSubcommand4,listSubcommand15 as listSubcommand5,listSubcommand18 as listSubcommand6,listSubcommand24 as listSubcommand7,listSubcommand25 as listSubcommand8,listSubcommand28 as listSubcommand9,listSubcommand29 as listSubcommand10,listSubcommand3 as listSubcommand2,listSubcommand5 as listSubcommand3,membersInviteSubcommand,membersRemoveSubcommand,membersSubcommand2 as membersSubcommand,organizationsCommand,proSubcommand,projectsSubcommand,removeSubcommand15 as removeSubcommand5,removeSubcommand16 as removeSubcommand6,removeSubcommand17 as removeSubcommand7,removeSubcommand2 as removeSubcommand,removeSubcommand4 as removeSubcommand2,removeSubcommand7 as removeSubcommand3,removeSubcommand9 as removeSubcommand4,requestSubcommand,setSubcommand,setSubcommand3 as setSubcommand2,ssoSubcommand,switchSubcommand,teamsAddSubcommand,teamsCommand,teamsCreateSubcommand,teamsListSubcommand,teamsSubcommand,tokensCommand,tokensSubcommand,traceSubcommand,updateSubcommand2 as updateSubcommand,updateSubcommand6 as updateSubcommand2,updateSubcommand9 as updateSubcommand3,webhooksCommand}from"./chunks/chunk-NTUDWWSL.js";import"./chunks/chunk-M73W4XNR.js";import"./chunks/chunk-32AS5X7G.js";import"./chunks/chunk-ZBZPCKTW.js";import"./chunks/chunk-TRZDIAX3.js";import"./chunks/chunk-GHEGWXH2.js";import"./chunks/chunk-GCXUSXB4.js";import"./chunks/chunk-2H4DUZJZ.js";import"./chunks/chunk-ECQKK4JU.js";import"./chunks/chunk-JOXGYP5S.js";import"./chunks/chunk-7ULVGK67.js";import"./chunks/chunk-4BZ3DNGM.js";import"./chunks/chunk-R5ZLTWKB.js";import"./chunks/chunk-T5TOBY4D.js";import"./chunks/chunk-H34SGIVS.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-G3LWP5CH.js";import"./chunks/chunk-QQA2OMXJ.js";import"./chunks/chunk-KV2DYFUG.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-GCPPL24C.js";import{printError}from"./chunks/chunk-BWS3ZOHJ.js";import{help}from"./chunks/chunk-33U57CNE.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getContextName,getScope}from"./chunks/chunk-DSNIVABS.js";import{TelemetryClient}from"./chunks/chunk-NAU6URTI.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,exitWithNonInteractiveError,getErrorRecovery,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-32NXYHYC.js";import"./chunks/chunk-FWTBSC7Z.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getUser,getVercelDirectory,humanizePath,parseGitConfig,pluckRemoteUrls,require_pluralize,writeToConfigFile}from"./chunks/chunk-OZPBJWYU.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-64UCX5JM.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-7WY7ASKE.js";import"./chunks/chunk-4NTBYNFR.js";import{isArgumentError,parseArguments,takeCommand}from"./chunks/chunk-CGTD4QFC.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-4SAVH3H7.js";import{AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainNotAvailable,DomainNotFound,DomainPaymentError,DomainPermissionDenied,DomainPriceChanged,DomainPurchasePending,DomainPurchaseRefundFailed,DomainPurchaseRefunded,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,NoAliasInConfig,NowError,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnsupportedTLD,UserAborted,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getSameSubcommandSuggestionFlags,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-YPPDRKVC.js";import{chars_default}from"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import{fetch,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";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_chalk2=__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 resolveAgentRunsWindow(since,until){if(!since)return;let from=parseTimeFlag(since),to=until?parseTimeFlag(until):new Date;return{from:Math.floor(from.getTime()/1e3),to:Math.floor(to.getTime()/1e3)}}function buildAgentRunsUrl(query){let url=new URL(getAgentRunsApiBase());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");let window=query.window??resolveAgentRunsWindow(query.since,query.until);return window&&(url.searchParams.set("from",String(window.from)),url.searchParams.set("to",String(window.to))),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.cursor&&url.searchParams.set("cursor",query.cursor),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),2}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,entry])=>[key,truncateLargeStrings(entry,maxLength)])):value}import{createHash}from"node:crypto";var import_chalk=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib(),1);function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function quoteCommandArgument(value,placeholder){return/[\x00-\x1F\x7F]/.test(value)?placeholder:/^[A-Za-z0-9_./:=@%+,-]+$/.test(value)?value:`'${value.replaceAll("'",`'"'"'`)}'`}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(run){return readString(run,"id","runId")??PLACEHOLDER}function formatRunStatus(run){let status=readString(run,"status","state");if(!status)return PLACEHOLDER;let label=(0,import_title.default)(status.replace(/[_-]+/g," ")),CIRCLE="\u25CF ";switch(status.toLowerCase()){case"completed":case"succeeded":case"success":case"ready":return import_chalk.default.green(CIRCLE)+label;case"error":case"errored":case"failed":case"timed out":case"timed_out":return import_chalk.default.red(CIRCLE)+label;case"running":case"in progress":case"in_progress":case"pending":case"queued":case"started":return import_chalk.default.yellow(CIRCLE)+label;case"canceled":case"cancelled":return import_chalk.default.gray(label);default:return label}}function runModel(run){return readString(run,"model")??PLACEHOLDER}function runTrigger(run){return readString(run,"trigger")??readString(readRecord(run,"trigger"),"label","type","name")??PLACEHOLDER}function runTitle(run){return readString(run,"title","name")}function runStartedAtMs(run){return readTimestampMs(run,"createdAt","startedAt","startTime")}function runDurationMs(run){let explicit=readNumber(run,"durationMs","duration");if(explicit!==void 0)return explicit;let start=readTimestampMs(run,"startedAt","createdAt","startTime"),end=readTimestampMs(run,"endedAt","completedAt","endTime");if(start!==void 0&&end!==void 0&&end>=start)return end-start}function runTotalTokens(run){let usage=readRecord(run,"usage")??run,total=readNumber(usage,"totalTokens","total");if(total!==void 0)return total;let input=readNumber(usage,"inputTokens","promptTokens","input"),output=readNumber(usage,"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 MAX_TOKEN_LENGTH=8192,MAX_SOURCE_OFFSET=1e4,OTEL_CURSOR_PATTERN=/^[A-Za-z0-9_-]{1,4096}$/,SOURCE_CURSOR_PATTERN=/^[0-9a-z]+\.[0-9a-z]+(\.[0-9a-z]+\.[0-9a-z]+(\.[A-Za-z0-9_-]{1,4096})?)?$/,FILTERS_LENGTH=22;function isSourceOffset(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>=0&&value<=MAX_SOURCE_OFFSET}function isEpoch(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>0}function isWindow(value){if(!isRecord(value))return!1;let{from,to}=value;return isEpoch(from)&&isEpoch(to)&&from<to}function encodeAgentRunsSourceCursor(offsets){if(!offsets)return;let{otel,workflow,otelCursor}=offsets;if(!isSourceOffset(otel)||!isSourceOffset(workflow))return;let parts=[otel.toString(36),workflow.toString(36)],range=offsets.otelRange;if(range!==void 0){if(!isWindow(range))return;parts.push(range.from.toString(36),range.to.toString(36))}if(otelCursor!==void 0){if(range===void 0||typeof otelCursor!="string"||!OTEL_CURSOR_PATTERN.test(otelCursor))return;parts.push(otelCursor)}return parts.join(".")}function getAgentRunsListFilters({teamId,projectId,environment,search}){return createHash("sha256").update(JSON.stringify([teamId,projectId??null,environment||"production",search||null])).digest("base64url").slice(0,FILTERS_LENGTH)}function encodeAgentRunsListContinuation(continuation){return Buffer.from(JSON.stringify(continuation),"utf8").toString("base64url")}function parseAgentRunsListContinuation(value){if(value.length===0||value.length>MAX_TOKEN_LENGTH||!/^[A-Za-z0-9_-]+$/.test(value))return;let decoded;try{decoded=JSON.parse(Buffer.from(value,"base64url").toString("utf8"))}catch{return}if(!(!isRecord(decoded)||decoded.version!==1||typeof decoded.cursor!="string"||!SOURCE_CURSOR_PATTERN.test(decoded.cursor)||typeof decoded.page!="number"||!Number.isSafeInteger(decoded.page)||decoded.page<2||typeof decoded.filters!="string"||decoded.filters.length!==FILTERS_LENGTH||!isWindow(decoded.window)))return{version:1,cursor:decoded.cursor,page:decoded.page,window:{from:decoded.window.from,to:decoded.window.to},filters:decoded.filters}}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{trackCliOptionQuery(value){value&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(value){value&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionNext(value){value!==void 0&&this.trackCliOption({option:"next",value:/^\d+$/.test(value)?value:this.redactedValue})}trackCliOptionPage(value){typeof value=="number"&&this.trackCliOption({option:"page",value:String(value)})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:String(value)})}};var DEFAULT_LIST_WINDOW_SECONDS=12*60*60;function getDefaultListWindow(){let to=Math.floor(Date.now()/1e3);return{from:to-DEFAULT_LIST_WINDOW_SECONDS,to}}function buildListPageCommand({argv,window,next}){let args=argv.slice(2),delimiter=args.indexOf("--"),own=delimiter===-1?args:args.slice(0,delimiter),passthrough=delimiter===-1?[]:args.slice(delimiter),kept=argv.slice(0,2);for(let i=0;i<own.length;i++){let arg=own[i],name=normalizeFlagName(arg);if(name==="--since"||name==="--until"){arg.includes("=")||i++;continue}kept.push(arg)}return window&&kept.push("--since",new Date(window.from*1e3).toISOString(),"--until",new Date(window.to*1e3).toISOString()),getNextPageCommand([...kept,...passthrough],next,["--page"])}function printNextPage(command){output_manager_default.print(`
|
|
7
|
+
import{createCertForCns,extractDomain,isWildcardAlias,setupDomain}from"./chunks/chunk-7VICILSF.js";import"./chunks/chunk-APM4DYNZ.js";import{joinWords}from"./chunks/chunk-4VFYJU37.js";import{api,tryOpenApiFallback}from"./chunks/chunk-BZV2S4H6.js";import"./chunks/chunk-GHAY4PSD.js";import{NO_RETRY,TEAM_BUDGET,budgetAmountDollars,budgetPauses,budgetStatePayload,buy,canPromptForCharge,deleteCertById,findBudget,formatUsd,formatUsdWhole,getDomains,getProjectDomain,getTeamMemberByIdentifier,getTeamSpend,getWebhook,hasPauseThreshold,isDomainExternal,listBudgetAlerts,listBudgets,pausePercentsOutside100,percentUsed,removeAliasById,removeBudget,removeReceipt,setBudget,setSavedReceipt,spendDollars,spendPayload,teamMemberLabel,thresholdsForSet,toBudgetState}from"./chunks/chunk-QR2Y6RI6.js";import{require_cjs}from"./chunks/chunk-CCMABJKN.js";import"./chunks/chunk-XXEGRTU6.js";import{list_item_default}from"./chunks/chunk-BTI5TG6Q.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{collectList,decodeListCursor,sliceList}from"./chunks/chunk-FI5O4WHD.js";import{ellipsis}from"./chunks/chunk-AKOYIH3A.js";import{external_exports}from"./chunks/chunk-2AMO2VMV.js";import{getTeamBillingUrl}from"./chunks/chunk-XR6QY7RR.js";import{getAliases}from"./chunks/chunk-BQVKEPOO.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-UNASHUWQ.js";import"./chunks/chunk-4ELZOAQH.js";import"./chunks/chunk-JUAHDOL6.js";import"./chunks/chunk-UI2H2EIM.js";import"./chunks/chunk-UUDE44NV.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import{box}from"./chunks/chunk-LM3YPF3K.js";import{did_you_mean_default}from"./chunks/chunk-DWZBL4NK.js";import{OpenApiCache,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-SODZSOOL.js";import{email}from"./chunks/chunk-6IDNVZZR.js";import{isValidName}from"./chunks/chunk-PADL3C6Z.js";import{validateLsArgs}from"./chunks/chunk-BT5C6MCY.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import"./chunks/chunk-PFD7LETF.js";import{writeJsonError}from"./chunks/chunk-QCIIUQV3.js";import"./chunks/chunk-TOTTVS5P.js";import{formatTable}from"./chunks/chunk-2RXUQ72I.js";import{handleValidationError,outputError,parseTimeFlag,validateOptionalIntegerRange,validateTimeBound,validateTimeOrder}from"./chunks/chunk-AX3V7N44.js";import{DEFAULT_LIST_LIMIT,MAX_LIST_LIMIT,getNextPageCommand,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-PMEYNJU2.js";import{getProtectionForDeploymentAlias,getProtectionForProductionDomain,readEnabledProtection}from"./chunks/chunk-O4CQRV2G.js";import"./chunks/chunk-VT6RIZJH.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{ensureLink}from"./chunks/chunk-KCJ7RU5I.js";import{getDeployment,toHost}from"./chunks/chunk-VU3RBRDH.js";import{mapCertError}from"./chunks/chunk-4VF5BZJP.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-VS3S5CU4.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-V32V4SXB.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand as getSubcommand3}from"./chunks/chunk-ETV3C2CV.js";import{printUnknownCommand}from"./chunks/chunk-G7H33IKQ.js";import{getTeams}from"./chunks/chunk-BPRGAX62.js";import{CREDIT_TYPE_LABELS,INVOICE_STATUSES,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,addSubcommand10 as addSubcommand4,addSubcommand11 as addSubcommand5,addSubcommand2 as addSubcommand,addSubcommand4 as addSubcommand2,addSubcommand5 as addSubcommand3,addonSubcommand,agentRunsCommand,alertsListSubcommand2 as alertsListSubcommand,alertsSubcommand2 as alertsSubcommand,aliasCommand,backupsSubcommand,bisectCommand,budgetCommand,buyCommand,certsCommand,connectSubcommand,createSubcommand10 as createSubcommand2,createSubcommand7 as createSubcommand,creditsSubcommand,disconnectSubcommand,dnsCommand,domainSubcommand,getCommandAliases,getSubcommand,getSubcommand5 as getSubcommand2,gitCommand,globalConfigCommand,importSubcommand,initCommand,inspectSubcommand,inspectSubcommand12 as inspectSubcommand3,inspectSubcommand14 as inspectSubcommand4,inspectSubcommand6 as inspectSubcommand2,inviteSubcommand,invoicesDownloadSubcommand,invoicesInspectSubcommand,invoicesListSubcommand,invoicesSubcommand,invoicesUpcomingSubcommand,isCustomEnvironmentAddonAlias,issueSubcommand,itemsSubcommand,listSubcommand,listSubcommand11 as listSubcommand4,listSubcommand15 as listSubcommand5,listSubcommand18 as listSubcommand6,listSubcommand24 as listSubcommand7,listSubcommand25 as listSubcommand8,listSubcommand28 as listSubcommand9,listSubcommand29 as listSubcommand10,listSubcommand3 as listSubcommand2,listSubcommand5 as listSubcommand3,membersInviteSubcommand,membersRemoveSubcommand,membersSubcommand2 as membersSubcommand,organizationsCommand,proSubcommand,projectsSubcommand,removeSubcommand15 as removeSubcommand5,removeSubcommand16 as removeSubcommand6,removeSubcommand17 as removeSubcommand7,removeSubcommand2 as removeSubcommand,removeSubcommand4 as removeSubcommand2,removeSubcommand7 as removeSubcommand3,removeSubcommand9 as removeSubcommand4,requestSubcommand,setSubcommand,setSubcommand3 as setSubcommand2,ssoSubcommand,switchSubcommand,teamsAddSubcommand,teamsCommand,teamsCreateSubcommand,teamsListSubcommand,teamsSubcommand,tokensCommand,tokensSubcommand,traceSubcommand,updateSubcommand2 as updateSubcommand,updateSubcommand6 as updateSubcommand2,updateSubcommand9 as updateSubcommand3,webhooksCommand}from"./chunks/chunk-FTACGWII.js";import"./chunks/chunk-CZOD25BC.js";import"./chunks/chunk-77LSSWXL.js";import"./chunks/chunk-MUNGQJGO.js";import"./chunks/chunk-W5GHMAHP.js";import"./chunks/chunk-ANCWFEOM.js";import"./chunks/chunk-QVMU7ZKQ.js";import"./chunks/chunk-TL4ZLZ2Q.js";import"./chunks/chunk-VD2FK6OF.js";import"./chunks/chunk-JVNIDSP5.js";import"./chunks/chunk-NLKM5LR5.js";import"./chunks/chunk-BB5UMZMF.js";import"./chunks/chunk-4LGAV2WN.js";import"./chunks/chunk-EJZNJN4N.js";import"./chunks/chunk-S5JBQCBA.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-FAVZ6WVS.js";import"./chunks/chunk-5KE67O45.js";import"./chunks/chunk-T7HE23VK.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-CUBRYWA2.js";import{printError}from"./chunks/chunk-Q4GX2UTG.js";import{help,remoteText}from"./chunks/chunk-GKALP6QD.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getContextName,getScope}from"./chunks/chunk-7DP4DHQW.js";import{TelemetryClient}from"./chunks/chunk-VPUYTI5E.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{buildCommandWithGlobalFlags,buildCommandWithYes,exitWithNonInteractiveError,getErrorRecovery,openUrlInBrowserCommand,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-ZUI5EMXD.js";import"./chunks/chunk-FY4ORPZH.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getUser,getVercelDirectory,humanizePath,parseGitConfig,pluckRemoteUrls,require_pluralize,writeToConfigFile}from"./chunks/chunk-CSOIXUCL.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-64UCX5JM.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-56UH6NQ3.js";import"./chunks/chunk-4NTBYNFR.js";import{isArgumentError,parseArguments,takeCommand}from"./chunks/chunk-C4N4LKPM.js";import{getTeamByIdOrSlug}from"./chunks/chunk-2VBFQZ72.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-4SAVH3H7.js";import{AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainNotAvailable,DomainNotFound,DomainPaymentError,DomainPermissionDenied,DomainPriceChanged,DomainPurchasePending,DomainPurchaseRefundFailed,DomainPurchaseRefunded,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,NoAliasInConfig,NowError,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnsupportedTLD,UserAborted,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getSameSubcommandSuggestionFlags,jsonOption,normalizeFlagName,quoteArg,stripSensitiveAuthArgs}from"./chunks/chunk-CKTLP5GX.js";import{chars_default}from"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import{require_tar_fs}from"./chunks/chunk-KRPY5FHJ.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import{fetch,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,getExitCodeForReason}from"./chunks/chunk-CFYTFXX6.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";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_chalk2=__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 resolveAgentRunsWindow(since,until){if(!since)return;let from=parseTimeFlag(since),to=until?parseTimeFlag(until):new Date;return{from:Math.floor(from.getTime()/1e3),to:Math.floor(to.getTime()/1e3)}}function buildAgentRunsUrl(query){let url=new URL(getAgentRunsApiBase());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");let window=query.window??resolveAgentRunsWindow(query.since,query.until);return window&&(url.searchParams.set("from",String(window.from)),url.searchParams.set("to",String(window.to))),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.cursor&&url.searchParams.set("cursor",query.cursor),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),2}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,entry])=>[key,truncateLargeStrings(entry,maxLength)])):value}import{createHash}from"node:crypto";var import_chalk=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib(),1);function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function quoteCommandArgument(value,placeholder){return/[\x00-\x1F\x7F]/.test(value)?placeholder:/^[A-Za-z0-9_./:=@%+,-]+$/.test(value)?value:`'${value.replaceAll("'",`'"'"'`)}'`}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(run){return readString(run,"id","runId")??PLACEHOLDER}function formatRunStatus(run){let status=readString(run,"status","state");if(!status)return PLACEHOLDER;let label=(0,import_title.default)(status.replace(/[_-]+/g," ")),CIRCLE="\u25CF ";switch(status.toLowerCase()){case"completed":case"succeeded":case"success":case"ready":return import_chalk.default.green(CIRCLE)+label;case"error":case"errored":case"failed":case"timed out":case"timed_out":return import_chalk.default.red(CIRCLE)+label;case"running":case"in progress":case"in_progress":case"pending":case"queued":case"started":return import_chalk.default.yellow(CIRCLE)+label;case"canceled":case"cancelled":return import_chalk.default.gray(label);default:return label}}function runModel(run){return readString(run,"model")??PLACEHOLDER}function runTrigger(run){return readString(run,"trigger")??readString(readRecord(run,"trigger"),"label","type","name")??PLACEHOLDER}function runTitle(run){return readString(run,"title","name")}function runStartedAtMs(run){return readTimestampMs(run,"createdAt","startedAt","startTime")}function runDurationMs(run){let explicit=readNumber(run,"durationMs","duration");if(explicit!==void 0)return explicit;let start=readTimestampMs(run,"startedAt","createdAt","startTime"),end=readTimestampMs(run,"endedAt","completedAt","endTime");if(start!==void 0&&end!==void 0&&end>=start)return end-start}function runTotalTokens(run){let usage=readRecord(run,"usage")??run,total=readNumber(usage,"totalTokens","total");if(total!==void 0)return total;let input=readNumber(usage,"inputTokens","promptTokens","input"),output=readNumber(usage,"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 MAX_TOKEN_LENGTH=8192,MAX_SOURCE_OFFSET=1e4,OTEL_CURSOR_PATTERN=/^[A-Za-z0-9_-]{1,4096}$/,SOURCE_CURSOR_PATTERN=/^[0-9a-z]+\.[0-9a-z]+(\.[0-9a-z]+\.[0-9a-z]+(\.[A-Za-z0-9_-]{1,4096})?)?$/,FILTERS_LENGTH=22;function isSourceOffset(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>=0&&value<=MAX_SOURCE_OFFSET}function isEpoch(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>0}function isWindow(value){if(!isRecord(value))return!1;let{from,to}=value;return isEpoch(from)&&isEpoch(to)&&from<to}function encodeAgentRunsSourceCursor(offsets){if(!offsets)return;let{otel,workflow,otelCursor}=offsets;if(!isSourceOffset(otel)||!isSourceOffset(workflow))return;let parts=[otel.toString(36),workflow.toString(36)],range=offsets.otelRange;if(range!==void 0){if(!isWindow(range))return;parts.push(range.from.toString(36),range.to.toString(36))}if(otelCursor!==void 0){if(range===void 0||typeof otelCursor!="string"||!OTEL_CURSOR_PATTERN.test(otelCursor))return;parts.push(otelCursor)}return parts.join(".")}function getAgentRunsListFilters({teamId,projectId,environment,search}){return createHash("sha256").update(JSON.stringify([teamId,projectId??null,environment||"production",search||null])).digest("base64url").slice(0,FILTERS_LENGTH)}function encodeAgentRunsListContinuation(continuation){return Buffer.from(JSON.stringify(continuation),"utf8").toString("base64url")}function parseAgentRunsListContinuation(value){if(value.length===0||value.length>MAX_TOKEN_LENGTH||!/^[A-Za-z0-9_-]+$/.test(value))return;let decoded;try{decoded=JSON.parse(Buffer.from(value,"base64url").toString("utf8"))}catch{return}if(!(!isRecord(decoded)||decoded.version!==1||typeof decoded.cursor!="string"||!SOURCE_CURSOR_PATTERN.test(decoded.cursor)||typeof decoded.page!="number"||!Number.isSafeInteger(decoded.page)||decoded.page<2||typeof decoded.filters!="string"||decoded.filters.length!==FILTERS_LENGTH||!isWindow(decoded.window)))return{version:1,cursor:decoded.cursor,page:decoded.page,window:{from:decoded.window.from,to:decoded.window.to},filters:decoded.filters}}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{trackCliOptionQuery(value){value&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(value){value&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionNext(value){value!==void 0&&this.trackCliOption({option:"next",value:/^\d+$/.test(value)?value:this.redactedValue})}trackCliOptionPage(value){typeof value=="number"&&this.trackCliOption({option:"page",value:String(value)})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:String(value)})}};var DEFAULT_LIST_WINDOW_SECONDS=12*60*60;function getDefaultListWindow(){let to=Math.floor(Date.now()/1e3);return{from:to-DEFAULT_LIST_WINDOW_SECONDS,to}}function buildListPageCommand({argv,window,next}){let args=argv.slice(2),delimiter=args.indexOf("--"),own=delimiter===-1?args:args.slice(0,delimiter),passthrough=delimiter===-1?[]:args.slice(delimiter),kept=argv.slice(0,2);for(let i=0;i<own.length;i++){let arg=own[i],name=normalizeFlagName(arg);if(name==="--since"||name==="--until"){arg.includes("=")||i++;continue}kept.push(arg)}return window&&kept.push("--since",new Date(window.from*1e3).toISOString(),"--until",new Date(window.to*1e3).toISOString()),getNextPageCommand([...kept,...passthrough],next,["--page"])}function printNextPage(command){output_manager_default.print(`
|
|
8
8
|
`),printNextPageCommand(command)}async function list2(client){let telemetry=new AgentRunsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--query":queryFlag,"--search":searchFlag,"--next":next,"--page":legacyPage,"--limit":limit,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;legacyPage!==void 0&&warnDeprecatedOption(client.argv,"--page","--next"),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliOptionQuery(queryFlag),telemetry.trackCliOptionSearch(searchFlag),telemetry.trackCliOptionNext(next),telemetry.trackCliOptionPage(legacyPage),telemetry.trackCliOptionLimit(limit),telemetry.trackCliFlagJson(json);let query=getRenamedOption(parsedArgs.flags,"--query","--search",{json});if("error"in query)return reportRenamedOptionError(client,query.error,{json});let search=query.value;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");if(next!==void 0&&legacyPage!==void 0)return invalidArguments(client,"`--next` and `--page` cannot be used together.");let legacyNext=next!==void 0&&/^\d+$/.test(next)?Number(next):void 0,continuation;if(next!==void 0&&legacyNext===void 0&&(continuation=parseAgentRunsListContinuation(next),!continuation))return invalidArguments(client,"Invalid or expired `--next` cursor. Omit `--next` to start from the first page.");let page=continuation?.page??legacyNext??legacyPage,requestedWindow;try{requestedWindow=resolveAgentRunsWindow(since,until)}catch(err){return handleAgentRunsApiError(client,err),1}let window=requestedWindow??getDefaultListWindow();if(continuation){if(requestedWindow&&(requestedWindow.from!==continuation.window.from||requestedWindow.to!==continuation.window.to))return invalidArguments(client,"`--since` and `--until` must match the time range of the `--next` cursor. Omit them to continue the same list.");window=continuation.window}let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;let filters=getAgentRunsListFilters({teamId:scope.teamId,projectId:scope.projectId,environment,search});if(continuation&&continuation.filters!==filters)return invalidArguments(client,"The `--next` cursor belongs to a different list. Use the same scope, project, environment, and search, or omit `--next` to start from the first page.");let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching Agent Runs in ${import_chalk2.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,window,page,pageSize:limit,search,cursor:continuation?.cursor})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}output_manager_default.stopSpinner();let pageInfo=readRecord(data,"pageInfo"),cursorPaged=typeof pageInfo?.hasMore=="boolean"||pageInfo?.nextOffsets!==void 0;if(cursorPaged&&!continuation&&(page??1)>1)return invalidArguments(client,"Page numbers cannot continue this Agent Runs list. Use the `--next` cursor from the previous page (`pagination.next` with `--json`).");let nextToken=null;if(cursorPaged&&pageInfo?.hasMore===!0){let nextOffsets=readRecord(pageInfo,"nextOffsets"),cursor=encodeAgentRunsSourceCursor(nextOffsets);cursor&&(nextToken=encodeAgentRunsListContinuation({version:1,cursor,page:(page??1)+1,window,filters}))}if(json){let payload=cursorPaged?{...data,pagination:{next:nextToken}}:data;return client.stdout.write(`${JSON.stringify(withWarnings(payload,[query.warning]),null,2)}
|
|
9
9
|
`),0}let pageCommand={argv:renameOptionInArgs(client.argv,"--search","--query")},runList=asArray(data.runs);if(runList.length===0)return nextToken?(output_manager_default.log("No Agent Runs on this page."),printNextPage(buildListPageCommand({...pageCommand,next:nextToken}))):search||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_chalk2.default.bold(scope.contextName)} ${fetchStamp()}`);let rows=[["Run ID","Status","Trigger","Model","Tokens","Duration","Age"].map(header=>import_chalk2.default.bold(import_chalk2.default.cyan(header))),...runList.map(run=>[import_chalk2.default.bold(runId(run)),formatRunStatus(run),runTrigger(run),runModel(run),formatCount(runTotalTokens(run)),import_chalk2.default.gray(formatDurationMs(runDurationMs(run))),import_chalk2.default.gray(formatAge(runStartedAtMs(run)))])];client.stdout.write(`
|
|
10
10
|
${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
@@ -48,7 +48,7 @@ ${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
|
48
48
|
`)),1}return error}var AliasSetTelemetryClient=class extends TelemetryClient{trackCliFlagDebug(flag){flag&&this.trackCliFlag("debug")}trackCliOptionLocalConfig(localConfig){localConfig&&this.trackCliOption({option:"local-config",value:this.redactedValue})}trackCliArgumentDeployment(idOrUrl){idOrUrl&&this.trackCliArgument({arg:"id-or-url",value:this.redactedValue})}trackCliArgumentAlias(customDomain){customDomain&&this.trackCliArgument({arg:"custom-domain",value:this.redactedValue})}};async function set(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,setStamp=stamp_default(),{localConfig}=client,telemetryClient=new AliasSetTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliFlagDebug(opts["--debug"]),telemetryClient.trackCliOptionLocalConfig(opts["--local-config"]);let{contextName,user}=await getScope(client);if(args.length>2)return output_manager_default.error(`${getCommandName("alias <deployment> <target>")} accepts at most two arguments`),1;if(args.length>=1&&!isValidName(args[0]))return output_manager_default.error(`The provided argument "${args[0]}" is not a valid ID or URL`),2;if(args.length>=2&&!isValidName(args[1]))return output_manager_default.error(`The provided argument "${args[1]}" is not a valid domain`),2;if(args.length===0)return output_manager_default.error(`To ship to production, optionally configure your domains (${link_default("https://vercel.link/domain-configuration")}) and run ${getCommandName("--prod")}.`),1;if(args.length===1){let[aliasTarget2]=args;telemetryClient.trackCliArgumentAlias(aliasTarget2);let deployment=handleCertError(await getDeploymentForAlias(client,opts["--local-config"],user,contextName,localConfig));if(deployment===1)return deployment;if(deployment instanceof Error)return output_manager_default.error(deployment.message),1;if(!deployment)return output_manager_default.error("Couldn't find a deployment to alias. Please provide one as an argument."),1;let targets=getTargetsForAlias(args,localConfig);if(targets instanceof Error)return output_manager_default.prettyError(targets),1;for(let target of targets){output_manager_default.log(`Assigning alias ${target} to deployment ${deployment.url}`);let record2=await assignAlias(client,deployment.id,target,contextName),handleResult2=handleSetupDomainError(handleCreateAliasError(record2));if(handleResult2===1)return 1;output_manager_default.success(`${import_chalk10.default.bold(`${isWildcardAlias(target)?"":"https://"}${handleResult2.alias}`)} now points to https://${deployment.url} ${setStamp()}`),isWildcardAlias(target)||await warnIfDeploymentOnlyAlias(client,deployment,target)}return 0}let[idOrUrl,aliasTarget]=args;telemetryClient.trackCliArgumentDeployment(idOrUrl),telemetryClient.trackCliArgumentAlias(aliasTarget),output_manager_default.log(`Assigning alias ${aliasTarget} to ${idOrUrl}`);let isWildcard=isWildcardAlias(aliasTarget),idOrUrlForRequest=idOrUrl.includes(".")?toHost(idOrUrl):idOrUrl,aliasHost=toHost(aliasTarget),deploymentLookup=!isWildcard&&aliasHost.includes(".")?getDeployment(client,contextName,idOrUrlForRequest).catch(err=>(output_manager_default.debug(`Could not load deployment ${idOrUrlForRequest}: ${err}`),null)):null,record=await assignAlias(client,idOrUrlForRequest,aliasTarget,contextName),handleResult=handleSetupDomainError(handleCreateAliasError(record));if(handleResult===1)return 1;let prefix=isWildcard?"":"https://";return output_manager_default.success(`${import_chalk10.default.bold(`${prefix}${handleResult.alias}`)} now points to ${idOrUrl} ${setStamp()}`),deploymentLookup&&await warnIfDeploymentOnlyAlias(client,await deploymentLookup,aliasHost),0}function handleSetupDomainError(error){return error instanceof DomainPermissionDenied?(output_manager_default.error(`You don't have permissions over domain ${import_chalk10.default.underline(error.meta.domain)} under ${import_chalk10.default.bold(error.meta.context)}.`),1):error instanceof UserAborted?(output_manager_default.error("User canceled."),1):error instanceof DomainNotFound?(output_manager_default.error("You should buy the domain before aliasing."),1):error instanceof UnsupportedTLD?(output_manager_default.error(`The TLD for domain name ${error.meta.domain} is not supported.`),1):error instanceof InvalidDomain?(output_manager_default.error(`The domain ${error.meta.domain} used for the alias is not valid.`),1):error instanceof DomainNotAvailable?(output_manager_default.error(`The domain ${error.meta.domain} is not available to be purchased.`),1):error instanceof UnexpectedDomainPurchaseError?(output_manager_default.error("There was an unexpected error while purchasing the domain."),1):error instanceof DomainAlreadyExists?(output_manager_default.error(`The domain ${error.meta.domain} exists for a different account.`),1):error instanceof DomainPurchasePending?(output_manager_default.error(`The domain ${error.meta.domain} is processing and will be available once the order is completed.`),output_manager_default.print(` An email will be sent upon completion so you can alias to your new domain.
|
|
49
49
|
`),1):error instanceof SourceNotFound?(output_manager_default.error("You can't purchase the domain you're aliasing to since you have no valid payment method."),output_manager_default.print(` Please add a valid payment method and retry.
|
|
50
50
|
`),1):error instanceof DomainPaymentError?(output_manager_default.error("You can't purchase the domain you're aliasing to since your card was declined."),output_manager_default.print(` Please add a valid payment method and retry.
|
|
51
|
-
`),1):error instanceof TLDNotSupportedViaCLI?(output_manager_default.error(`The TLD for domain name ${error.meta.domain} is not supported via the CLI. Use the REST API or the dashboard to purchase.`),1):error instanceof DomainPurchaseRefundFailed||error instanceof DomainPurchaseRefunded||error instanceof DomainChargeOutcomeUnknown||error instanceof DomainPriceChanged?(output_manager_default.error(error.message),1):error}function handleCreateAliasError(errorOrResult){let error=handleCertError(errorOrResult);return error===1?error:error instanceof AliasInUse?(output_manager_default.error(`The alias ${import_chalk10.default.dim(error.meta.alias)} is a deployment URL or it's in use by a different team.`),1):error instanceof DeploymentNotFound?(output_manager_default.error(`Failed to find ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof InvalidAlias?(output_manager_default.error("Invalid alias. Please confirm that the alias you provided is a valid hostname. Note: For `vercel.app`, only sub and sub-sub domains are supported."),1):error instanceof DeploymentPermissionDenied?(output_manager_default.error(`No permission to access ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof CertMissing?(output_manager_default.error(`There is no certificate for the domain ${error.meta.domain} and it could not be created.`),output_manager_default.log(`Please generate a new certificate manually with ${getCommandName(`certs issue ${error.meta.domain}`)}`),1):error instanceof InvalidDomain?(output_manager_default.error(`The domain ${error.meta.domain} used for the alias is not valid.`),1):error instanceof DomainPermissionDenied||error instanceof DeploymentFailedAliasImpossible||error instanceof InvalidDeploymentId?(output_manager_default.error(error.message),1):error instanceof DeploymentNotReady?(output_manager_default.error(error.message),1):error}function getTargetsForAlias(args,{alias:alias2}={}){return args.length?[args[args.length-1]].map(target=>target.indexOf(".")!==-1?toHost(target):target).filter(x=>!!x&&typeof x=="string"):alias2?typeof alias2!="string"&&!Array.isArray(alias2)?new InvalidAliasInConfig(alias2):typeof alias2=="string"?[alias2]:alias2:new NoAliasInConfig}var AliasTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}};var COMMAND_CONFIG2={ls:getCommandAliases(listSubcommand2),rm:getCommandAliases(removeSubcommand),set:getCommandAliases(setSubcommand)};async function alias(client){let telemetry=new AliasTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(aliasCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}parsedArguments.args[0]==="ln"&&warnDeprecatedSubcommand(client,"ln","alias");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArguments.args.slice(1),COMMAND_CONFIG2),needHelp=parsedArguments.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("alias"),output_manager_default.print(help(aliasCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:aliasCommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(listSubcommand2),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(removeSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args))}}var BillingTelemetryClient=class extends TelemetryClient{constructor(){super(...arguments);this.sub=subcommand=>value=>this.trackSubcommand(subcommand,value);this.option=option=>value=>this.trackRedactedCliOption(option,value);this.flag=flag=>value=>{value&&this.trackCliFlag(flag)};this.trackCliSubcommandInvoices=this.sub("invoices");this.trackCliSubcommandList=this.sub("list");this.trackCliSubcommandInspect=this.sub("inspect");this.trackCliSubcommandDownload=this.sub("download");this.trackCliOptionNext=this.option("next");this.trackCliOptionOutput=this.option("output");this.trackCliFlagJson=this.flag("json")}trackSubcommand(subcommand,value){this.trackCliSubcommand({subcommand,value})}trackCliArgumentInvoice(value){this.trackCliArgument({arg:"invoice",value:value&&this.redactedValue})}trackCliOptionStatus(value){this.trackRedactedCliOption("status",value?.join(","))}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:String(value)})}trackOptions(flags){this.trackCliOptionStatus(flags["--status"]),this.trackCliOptionLimit(flags["--limit"]),this.trackCliOptionNext(flags["--next"]),this.trackCliOptionOutput(flags["--output"]),this.trackCliFlagJson(flags["--json"])}};var import_chalk11=__toESM(require_source(),1),import_error_utils=__toESM(require_dist(),1);var INVOICE_ID_PATTERN=/^inv_[A-Za-z0-9_-]+$/;function isJsonOutput(client){return wantsMachineReadableOutput("billing",client.argv)}function invoicesCommand(client,command){return withGlobalFlags(client,`billing invoices ${command}`)}function parse3(client,argv,options,usage){let parsed;try{let spec=getFlagsSpecification(options);parsed=parseArguments(argv,spec)}catch(err){return reportError(client,err,2)}let telemetry=new BillingTelemetryClient({opts:{store:client.telemetryEventStore}});return telemetry.trackOptions(parsed.flags),{...parsed,asJson:isJsonOutput(client),telemetry}}function invoiceIdArg(client,args,usage){let[invoiceId]=args;return invoiceId?args.length>1||!INVOICE_ID_PATTERN.test(invoiceId)?usageError(client,"Expected one invoice ID that starts with inv_, from vercel billing invoices list.",usage):invoiceId:failure(client,AGENT_REASON.MISSING_ARGUMENTS,"An invoice ID is required.",{command:"list",when:"Find the invoice ID"},2)}async function resolveOwner(client){try{let{contextName,team}=await getScope(client);return{contextName,teamId:team?.id}}catch(err){if((0,import_error_utils.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return reportError(client,err);throw err}}function ownerQuery(teamId){let query=new URLSearchParams;return teamId&&query.set("teamId",teamId),query}function fetchInvoicesPage(client,teamId,opts){let query=ownerQuery(teamId);for(let status of opts.statuses)query.append("status",status);return query.set("limit",String(opts.limit)),opts.cursor&&query.set("cursor",opts.cursor),client.fetch(`/v1/invoices?${query}`,{useCurrentTeam:!1})}function fetchInvoice(client,teamId,invoiceId){return client.fetch(`/v1/invoices/${encodeURIComponent(invoiceId)}?${ownerQuery(teamId)}`,{useCurrentTeam:!1})}function toInvoiceJson({pdfDownloadUrl:_pdfDownloadUrl,hostedUrl:_hostedUrl,...invoice}){return invoice}function formatInvoiceStatus(invoice){return Number(invoice.postPaymentCreditAmount)>0?"Refunded":(invoice.status==="open"||invoice.status==="uncollectible")&&invoice.dueDate!==null&&Date.now()>Date.parse(invoice.dueDate)?"Overdue":`${invoice.status.charAt(0).toUpperCase()}${invoice.status.slice(1)}`}function formatAmount(amount,currency){let value=Number(amount);return currency.toLowerCase()!=="usd"?`${value.toFixed(2)} ${currency.toUpperCase()}`:`${value<0?"-":""}$${Math.abs(value).toFixed(2)}`}function formatDate2(date){return date?new Date(date).toISOString().slice(0,10):"-"}function formatTable2(headers,rows){return table([headers.map(header=>import_chalk11.default.dim(header)),...rows],{hsep:3}).split(`
|
|
51
|
+
`),1):error instanceof TLDNotSupportedViaCLI?(output_manager_default.error(`The TLD for domain name ${error.meta.domain} is not supported via the CLI. Use the REST API or the dashboard to purchase.`),1):error instanceof DomainPurchaseRefundFailed||error instanceof DomainPurchaseRefunded||error instanceof DomainChargeOutcomeUnknown||error instanceof DomainPriceChanged?(output_manager_default.error(error.message),1):error}function handleCreateAliasError(errorOrResult){let error=handleCertError(errorOrResult);return error===1?error:error instanceof AliasInUse?(output_manager_default.error(`The alias ${import_chalk10.default.dim(error.meta.alias)} is a deployment URL or it's in use by a different team.`),1):error instanceof DeploymentNotFound?(output_manager_default.error(`Failed to find ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof InvalidAlias?(output_manager_default.error("Invalid alias. Please confirm that the alias you provided is a valid hostname. Note: For `vercel.app`, only sub and sub-sub domains are supported."),1):error instanceof DeploymentPermissionDenied?(output_manager_default.error(`No permission to access ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof CertMissing?(output_manager_default.error(`There is no certificate for the domain ${error.meta.domain} and it could not be created.`),output_manager_default.log(`Please generate a new certificate manually with ${getCommandName(`certs issue ${error.meta.domain}`)}`),1):error instanceof InvalidDomain?(output_manager_default.error(`The domain ${error.meta.domain} used for the alias is not valid.`),1):error instanceof DomainPermissionDenied||error instanceof DeploymentFailedAliasImpossible||error instanceof InvalidDeploymentId?(output_manager_default.error(error.message),1):error instanceof DeploymentNotReady?(output_manager_default.error(error.message),1):error}function getTargetsForAlias(args,{alias:alias2}={}){return args.length?[args[args.length-1]].map(target=>target.indexOf(".")!==-1?toHost(target):target).filter(x=>!!x&&typeof x=="string"):alias2?typeof alias2!="string"&&!Array.isArray(alias2)?new InvalidAliasInConfig(alias2):typeof alias2=="string"?[alias2]:alias2:new NoAliasInConfig}var AliasTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}};var COMMAND_CONFIG2={ls:getCommandAliases(listSubcommand2),rm:getCommandAliases(removeSubcommand),set:getCommandAliases(setSubcommand)};async function alias(client){let telemetry=new AliasTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(aliasCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}parsedArguments.args[0]==="ln"&&warnDeprecatedSubcommand(client,"ln","alias");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArguments.args.slice(1),COMMAND_CONFIG2),needHelp=parsedArguments.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("alias"),output_manager_default.print(help(aliasCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:aliasCommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(listSubcommand2),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(removeSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args))}}var BillingTelemetryClient=class extends TelemetryClient{constructor(){super(...arguments);this.sub=subcommand=>value=>this.trackSubcommand(subcommand,value);this.option=option=>value=>this.trackRedactedCliOption(option,value);this.flag=flag=>value=>{value&&this.trackCliFlag(flag)};this.trackCliSubcommandInvoices=this.sub("invoices");this.trackCliSubcommandList=this.sub("list");this.trackCliSubcommandInspect=this.sub("inspect");this.trackCliSubcommandUpcoming=this.sub("upcoming");this.trackCliSubcommandDownload=this.sub("download");this.trackCliOptionNext=this.option("next");this.trackCliOptionOutput=this.option("output");this.trackCliFlagJson=this.flag("json")}trackSubcommand(subcommand,value){this.trackCliSubcommand({subcommand,value})}trackCliArgumentInvoice(value){this.trackCliArgument({arg:"invoice",value:value&&this.redactedValue})}trackCliOptionStatus(value){this.trackRedactedCliOption("status",value?.join(","))}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:String(value)})}trackOptions(flags){this.trackCliOptionStatus(flags["--status"]),this.trackCliOptionLimit(flags["--limit"]),this.trackCliOptionNext(flags["--next"]),this.trackCliOptionOutput(flags["--output"]),this.trackCliFlagJson(flags["--json"])}};var import_chalk11=__toESM(require_source(),1),import_error_utils=__toESM(require_dist(),1);var INVOICE_ID_PATTERN=/^inv_[A-Za-z0-9_-]+$/;function isJsonOutput(client){return wantsMachineReadableOutput("billing",client.argv)}function invoicesCommand(client,command){return withGlobalFlags(client,`billing invoices ${command}`)}function parse3(client,argv,options,usage){let parsed;try{let spec=getFlagsSpecification(options);parsed=parseArguments(argv,spec)}catch(err){return reportError(client,err,2)}let telemetry=new BillingTelemetryClient({opts:{store:client.telemetryEventStore}});return telemetry.trackOptions(parsed.flags),{...parsed,asJson:isJsonOutput(client),telemetry}}function invoiceIdArg(client,args,usage){let[invoiceId]=args;return invoiceId?args.length>1||!INVOICE_ID_PATTERN.test(invoiceId)?usageError(client,"Expected one invoice ID that starts with inv_, from vercel billing invoices list.",usage):invoiceId:failure(client,AGENT_REASON.MISSING_ARGUMENTS,"An invoice ID is required.",{command:"list",when:"Find the invoice ID"},2)}async function resolveOwner(client){try{let{contextName,team}=await getScope(client);return{contextName,teamId:team?.id}}catch(err){if((0,import_error_utils.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return reportError(client,err);throw err}}function ownerQuery(teamId){let query=new URLSearchParams;return teamId&&query.set("teamId",teamId),query}function fetchInvoicesPage(client,teamId,opts){let query=ownerQuery(teamId);for(let status of opts.statuses)query.append("status",status);return query.set("limit",String(opts.limit)),opts.cursor&&query.set("cursor",opts.cursor),client.fetch(`/v1/invoices?${query}`,{useCurrentTeam:!1})}function fetchInvoice(client,teamId,invoiceId){return client.fetch(`/v1/invoices/${encodeURIComponent(invoiceId)}?${ownerQuery(teamId)}`,{useCurrentTeam:!1})}function fetchUpcomingInvoices(client,teamId){return client.fetch(`/v1/invoices/upcoming?${ownerQuery(teamId)}`,{useCurrentTeam:!1})}function toInvoiceJson({pdfDownloadUrl:_pdfDownloadUrl,hostedUrl:_hostedUrl,...invoice}){return invoice}function reportUpcomingInvoiceError(client,err){if(isAPIError(err)){if(err.status===401)return failure(client,AGENT_REASON.LOGIN_REQUIRED,"Can't show upcoming invoices. Your login is missing or expired.",{command:"upcoming",when:"Log in with vercel login, then retry"});if(err.status===404&&err.code==="no_active_subscriptions")return failure(client,AGENT_REASON.NOT_FOUND,"Can't show upcoming invoices. This team has no active paid subscription.",{command:"list",when:"List past invoices"});if(err.status===403||err.status===404)return failure(client,AGENT_REASON.PERMISSION_DENIED,"Can't show upcoming invoices. Your account doesn't have access to them.",{command:"upcoming --scope <TEAM>",when:"Ask a team owner for access, or choose another team"});if(err.status===429)return failure(client,AGENT_REASON.RATE_LIMITED,"Too many requests to the Vercel API.",{command:"upcoming",when:getErrorRecovery(err,client).hint??"Wait before retrying"})}return reportError(client,err)}function formatInvoiceStatus(invoice){return Number(invoice.postPaymentCreditAmount)>0?"Refunded":(invoice.status==="open"||invoice.status==="uncollectible")&&invoice.dueDate!==null&&Date.now()>Date.parse(invoice.dueDate)?"Overdue":`${invoice.status.charAt(0).toUpperCase()}${invoice.status.slice(1)}`}function formatAmount(amount,currency){let value=Number(amount);return currency.toLowerCase()!=="usd"?`${value.toFixed(2)} ${currency.toUpperCase()}`:`${value<0?"-":""}$${Math.abs(value).toFixed(2)}`}function formatDate2(date){return date?new Date(date).toISOString().slice(0,10):"-"}function formatTable2(headers,rows){return table([headers.map(header=>import_chalk11.default.dim(header)),...rows],{hsep:3}).split(`
|
|
52
52
|
`).map(line=>` ${line}`.trimEnd()).join(`
|
|
53
53
|
`)}function failure(client,reason,message,next,exitCode=1){let command=invoicesCommand(client,next.command);return output_manager_default.stopSpinner(),isJsonOutput(client)?writeJsonError(client,{status:AGENT_STATUS.ERROR,reason,message,next:[{...next,command}]},exitCode):(output_manager_default.fatal(message),output_manager_default.print(`
|
|
54
54
|
${next.when}:
|
|
@@ -69,7 +69,22 @@ ${formatTable2(headers,rows)}
|
|
|
69
69
|
${cmd(download2)}
|
|
70
70
|
`)}return 0}var import_error_utils2=__toESM(require_dist(),1);import{randomUUID}from"node:crypto";import{constants}from"node:fs";import{copyFile,link,lstat,rm as rm2,writeFile}from"node:fs/promises";import{basename,dirname,join,relative,resolve}from"node:path";var SAFE_FILENAME=/^[A-Za-z0-9._-]+$/;async function download(client,argv){let{name:usage,options}=invoicesDownloadSubcommand,parsed=parse3(client,argv,options,usage);if(typeof parsed=="number")return parsed;let{args,flags,asJson,telemetry}=parsed,invoiceId=invoiceIdArg(client,args,usage);if(typeof invoiceId=="number")return invoiceId;telemetry.trackCliArgumentInvoice(invoiceId);let outputFlag=flags["--output"],toStdout=outputFlag==="-";if(outputFlag==="")return usageError(client,"--output must be a file path.",usage);if(toStdout&&asJson)return usageError(client,"Can't use --json with --output -.",usage);if(outputFlag&&!toStdout&&await exists(client,outputFlag))return fileExists(client,invoiceId,outputFlag);let owner=await resolveOwner(client);if(typeof owner=="number")return owner;let invoice;try{asJson||output_manager_default.spinner(`Fetching invoice ${invoiceId}`),invoice=await fetchInvoice(client,owner.teamId,invoiceId)}catch(err){return reportInvoiceError(client,err,invoiceId,owner.contextName)}if(!invoice.pdfDownloadUrl)return failure(client,AGENT_REASON.CONFLICT,`Can't download invoice ${invoiceId}. It has no PDF until it's finalized.`,{command:`inspect ${invoiceId}`,when:"See the invoice"});let invoiceNumber=invoice.invoiceNumber,defaultFilename=invoiceNumber&&SAFE_FILENAME.test(invoiceNumber)?`${invoiceNumber}.pdf`:`${invoiceId}.pdf`,destination=outputFlag??defaultFilename;if(!toStdout&&!outputFlag&&await exists(client,destination))return fileExists(client,invoiceId,destination);let pdf;try{asJson||output_manager_default.spinner(`Downloading invoice ${invoiceId}`);let response=await fetch(invoice.pdfDownloadUrl);if(!response.ok)throw await response.body?.cancel().catch(()=>{}),new Error(`The PDF request returned ${response.status}.`);pdf=new Uint8Array(await response.arrayBuffer()),output_manager_default.stopSpinner()}catch{return failure(client,AGENT_REASON.API_ERROR,`Failed to download the PDF for invoice ${invoiceId}.`,{command:`download ${invoiceId}`,when:"Download it again"})}if(toStdout)return client.stdout.write(pdf),0;let path3=resolve(client.cwd,destination),temporaryPath=join(dirname(path3),`.${basename(path3)}.${randomUUID()}.tmp`);try{await writeFile(temporaryPath,pdf,{flag:"wx"}),await link(temporaryPath,path3).catch(err=>{if((0,import_error_utils2.isErrnoException)(err)&&err.code==="EEXIST")throw err;return copyFile(temporaryPath,path3,constants.COPYFILE_EXCL)})}catch(err){return(0,import_error_utils2.isErrnoException)(err)&&err.code==="EEXIST"?fileExists(client,invoiceId,destination):reportError(client,err)}finally{await rm2(temporaryPath,{force:!0}).catch(()=>{})}let displayPath=relative(client.cwd,path3)||path3;if(asJson){let result={invoice:{id:invoice.id,invoiceNumber},file:{path:path3,size:pdf.byteLength},outcome:"downloaded"};return client.stdout.write(`${JSON.stringify(result,null,2)}
|
|
71
71
|
`),0}return printAlignedLabel("Downloaded",displayPath,{gutter:"\u2713"}),client.stdout.isTTY||client.stdout.write(`${path3}
|
|
72
|
-
`),0}async function exists(client,path3){try{return await lstat(resolve(client.cwd,path3)),!0}catch{return!1}}function fileExists(client,invoiceId,path3){return failure(client,AGENT_REASON.CONFLICT,`Can't download invoice ${invoiceId}. ${path3} already exists.`,{command:`download ${invoiceId} --output <PATH>`,when:"Choose another file"})}
|
|
72
|
+
`),0}async function exists(client,path3){try{return await lstat(resolve(client.cwd,path3)),!0}catch{return!1}}function fileExists(client,invoiceId,path3){return failure(client,AGENT_REASON.CONFLICT,`Can't download invoice ${invoiceId}. ${path3} already exists.`,{command:`download ${invoiceId} --output <PATH>`,when:"Choose another file"})}async function upcoming(client,argv){let{name:usage,options}=invoicesUpcomingSubcommand,parsed=parse3(client,argv,options,usage);if(typeof parsed=="number")return parsed;if(parsed.args.length>0)return usageError(client,"Can't show upcoming invoices with positional arguments.",usage);let owner=await resolveOwner(client);if(typeof owner=="number")return owner;if(!owner.teamId)return failure(client,AGENT_REASON.MISSING_SCOPE,"Can't show upcoming invoices without a team.",{command:"upcoming --scope <TEAM>",when:"Choose a team"},2);let invoices;try{parsed.asJson||output_manager_default.spinner("Fetching upcoming invoices"),{data:invoices}=await fetchUpcomingInvoices(client,owner.teamId),output_manager_default.stopSpinner()}catch(err){return reportUpcomingInvoiceError(client,err)}if(parsed.asJson)return client.stdout.write(`${JSON.stringify({invoices:invoices.map(invoice=>toInvoiceJson(invoice)),pagination:{next:null}},null,2)}
|
|
73
|
+
`),0;if(output_manager_default.print(`${formatAlignedLabel("Team",remoteText(owner.contextName))}
|
|
74
|
+
|
|
75
|
+
`),invoices.length===0)return output_manager_default.print(` No upcoming invoices for this team.
|
|
76
|
+
`),0;for(let invoice of invoices){let amount=value=>remoteText(formatAmount(value,invoice.currency)),rows=[["Invoice","Upcoming"],["Scheduled",invoice.issuedAt&&formatDate2(invoice.issuedAt)],["Subtotal",amount(invoice.subtotal)],["Tax",invoice.tax&&amount(invoice.tax)],["Estimated Total",amount(invoice.total)]];if(client.stdout.write(`${rows.flatMap(([label,value])=>value===null?[]:[formatAlignedLabel(label,value)]).join(`
|
|
77
|
+
`)}
|
|
78
|
+
|
|
79
|
+
`),invoice.lineItems.length>0){let items=invoice.lineItems.slice(0,5).map(item=>[remoteText(item.title||item.description),`${formatDate2(item.periodStart)} to ${formatDate2(item.periodEnd)}`,item.quantity.toLocaleString("en-US",{maximumFractionDigits:6}),amount(item.amount)]);if(client.stdout.write(`${formatTable2(["Item","Period","Quantity","Amount"],items)}
|
|
80
|
+
|
|
81
|
+
`),invoice.lineItems.length>5){let remaining=invoice.lineItems.length-5;output_manager_default.print(` and ${remaining} more line ${remaining===1?"item":"items"}.
|
|
82
|
+
|
|
83
|
+
Read all line items:
|
|
84
|
+
${cmd(invoicesCommand(client,"upcoming --json"))}
|
|
85
|
+
|
|
86
|
+
`)}}}return output_manager_default.print(` Amounts are estimates and may change until the end of the billing period.
|
|
87
|
+
`),0}var INVOICES=[[invoicesListSubcommand,list3],[invoicesInspectSubcommand,inspect2],[invoicesUpcomingSubcommand,upcoming],[invoicesDownloadSubcommand,download]],ROOT=[[invoicesSubcommand,(client,argv)=>route(client,argv,INVOICES,["billing","invoices"])]],routingFlags=getFlagsSpecification(INVOICES.flatMap(([command])=>command.options));async function billing(client){try{let group=takeCommand(client.argv.slice(2),routingFlags);return await route(client,group.args,ROOT,["billing"])}catch(err){return reportError(client,err,isArgumentError(err)?2:1)}}async function route(client,argv,routes,path3){let config=Object.fromEntries(routes.map(([command2])=>[command2.name,getCommandAliases(command2)])),selected=takeCommand(argv,routingFlags),{subcommand,subcommandOriginal}=getSubcommand3(selected.command?[selected.command]:[],config);if(!subcommand&&selected.command&&!selected.command.startsWith("-")){let message=`Unknown command ${selected.command} for ${getCommandNamePlain(path3.join(" "))}.`;if(isJsonOutput(client)){let command2=withGlobalFlags(client,`${path3.join(" ")} --help`);return writeJsonError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.UNKNOWN_COMMAND,message,next:[{command:command2,when:"See all commands"}]},2)}return printUnknownCommand(client,selected.command,path3),2}let[command,run]=routes.find(([command2])=>command2.name===subcommand)??routes[0];return new BillingTelemetryClient({opts:{store:client.telemetryEventStore}}).trackSubcommand(command.name,subcommandOriginal),run(client,subcommand?selected.args:argv)}var import_open=__toESM(require_open(),1),import_execa=__toESM(require_execa(),1),import_pluralize=__toESM(require_pluralize(),1),import_chalk12=__toESM(require_source(),1);import{resolve as resolve2}from"path";import{URLSearchParams as URLSearchParams2,parse as parse4}from"url";function hasScheme(url){return url.startsWith("http://")||url.startsWith("https://")}function normalizeURL(url){return hasScheme(url)?url:`https://${url}`}var BisectTelemetryClient=class extends TelemetryClient{trackCliOptionGood(good){good&&this.trackCliOption({option:"good",value:this.redactedValue})}trackCliOptionBad(bad){bad&&this.trackCliOption({option:"bad",value:this.redactedValue})}trackCliOptionPath(path3){path3&&this.trackCliOption({option:"path",value:this.redactedValue})}trackCliOptionRun(run){run&&this.trackCliOption({option:"run",value:this.redactedValue})}trackCliFlagOpen(open4){open4&&this.trackCliFlag("open")}};async function bisect(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(bisectCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new BisectTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("bisect"),output_manager_default.print(help(bisectCommand,{stream:client.stderr,columns:client.stderr.columns})),0;telemetry.trackCliOptionGood(parsedArgs.flags["--good"]),telemetry.trackCliOptionBad(parsedArgs.flags["--bad"]),telemetry.trackCliOptionPath(parsedArgs.flags["--path"]),telemetry.trackCliOptionRun(parsedArgs.flags["--run"]),telemetry.trackCliFlagOpen(parsedArgs.flags["--open"]);let scope=await getScope(client),{contextName}=scope,bad=parsedArgs.flags["--bad"]||await client.input.text({message:"Specify a URL where the bug occurs:",validate:val=>val?!0:"A URL must be provided"}),good=parsedArgs.flags["--good"]||await client.input.text({message:"Specify a URL where the bug does not occur:",validate:val=>val?!0:"A URL must be provided"}),subpath=parsedArgs.flags["--path"]||"",run=parsedArgs.flags["--run"]||"",openEnabled=parsedArgs.flags["--open"]||!1;run&&(run=resolve2(run)),bad=normalizeURL(bad);let parsed=parse4(bad);if(!parsed.hostname)return output_manager_default.error("Invalid input: no hostname provided"),1;if(bad=parsed.hostname,typeof parsed.path=="string"&&parsed.path!=="/"&&(subpath&&subpath!==parsed.path?output_manager_default.note(`Ignoring subpath ${import_chalk12.default.bold(parsed.path)} in favor of \`--path\` argument ${import_chalk12.default.bold(subpath)}`):subpath=parsed.path),good=normalizeURL(good),parsed=parse4(good),!parsed.hostname)return output_manager_default.error("Invalid input: no hostname provided"),1;good=parsed.hostname,typeof parsed.path=="string"&&parsed.path!=="/"&&subpath&&subpath!==parsed.path&&output_manager_default.note(`Ignoring subpath ${import_chalk12.default.bold(parsed.path)} which does not match ${import_chalk12.default.bold(subpath)}`),subpath||(subpath=await client.input.text({message:"Specify the URL subpath where the bug occurs:",validate:val=>val?!0:"A subpath must be provided"})),output_manager_default.spinner("Retrieving deployments\u2026");let badDeployment=await getDeployment(client,contextName,bad).catch(err=>err);if(badDeployment){if(badDeployment instanceof Error)return badDeployment.message+=` when requesting bad deployment "${normalizeURL(bad)}"`,output_manager_default.prettyError(badDeployment),1;bad=badDeployment.url}else return output_manager_default.error(`Failed to retrieve ${import_chalk12.default.bold("bad")} Deployment: ${bad}`),1;let goodDeployment=await getDeployment(client,contextName,good).catch(err=>err);if(goodDeployment){if(goodDeployment instanceof Error)return goodDeployment.message+=` when requesting good deployment "${normalizeURL(good)}"`,output_manager_default.prettyError(goodDeployment),1;good=goodDeployment.url}else return output_manager_default.error(`Failed to retrieve ${import_chalk12.default.bold("good")} Deployment: ${good}`),1;let{projectId}=badDeployment;if(projectId!==goodDeployment.projectId)return output_manager_default.error("Good and Bad deployments must be from the same Project"),1;if(badDeployment.url===goodDeployment.url)return output_manager_default.error("Good and Bad deployments must be different"),1;if(badDeployment.createdAt<goodDeployment.createdAt)return output_manager_default.error("Good deployment must be older than the Bad deployment"),1;if(badDeployment.target!==goodDeployment.target)return output_manager_default.error(`Bad deployment target "${badDeployment.target||"preview"}" does not match good deployment target "${goodDeployment.target||"preview"}"`),1;let deployments=[],query=new URLSearchParams2;query.set("projectId",projectId),badDeployment.target&&query.set("target",badDeployment.target),query.set("state","READY"),query.set("until",String(badDeployment.createdAt+1));for await(let chunk of client.fetchPaginated(`/v6/deployments?${query}`,{accountId:badDeployment.ownerId})){let newDeployments=chunk.deployments,hasGood=!1;for(let i=0;i<newDeployments.length;i++)if(newDeployments[i].url===good){newDeployments=newDeployments.slice(0,i),hasGood=!0;break}if(deployments=deployments.concat(newDeployments),hasGood)break}if(!deployments.length)return output_manager_default.error("Cannot bisect because this project does not have any deployments"),1;let lastBad=deployments.shift();for(;deployments.length>0;){output_manager_default.print(`
|
|
73
88
|
`);let middleIndex=Math.floor(deployments.length/2),deployment=deployments[middleIndex],rem=(0,import_pluralize.default)("deployment",deployments.length,!0),steps=Math.floor(Math.log2(deployments.length)),pSteps=(0,import_pluralize.default)("step",steps,!0);output_manager_default.log(import_chalk12.default.magenta(`${import_chalk12.default.bold("Bisecting:")} ${rem} left to test after this (roughly ${pSteps})`),import_chalk12.default.magenta);let testUrl=`https://${deployment.url}${subpath}`;output_manager_default.log(`${import_chalk12.default.bold("Deployment URL:")} ${link_default(testUrl)}`),output_manager_default.log(`${import_chalk12.default.bold("Date:")} ${formatDate(deployment.createdAt)}`);let commit2=getCommit(deployment);if(commit2){let shortSha=commit2.sha.substring(0,7),firstLine=commit2.message?.split(`
|
|
74
89
|
`)[0];output_manager_default.log(`${import_chalk12.default.bold("Commit:")} [${shortSha}] ${firstLine}`)}let action;if(run){let proc=await(0,import_execa.default)(run,[testUrl],{stdio:"inherit",reject:!1,env:{...process.env,HOST:deployment.url,URL:testUrl}});if(proc instanceof Error&&typeof proc.exitCode!="number")return output_manager_default.prettyError(proc),1;let{exitCode}=proc,color;exitCode===0?(color=import_chalk12.default.green,action="good"):exitCode===125?(action="skip",color=import_chalk12.default.grey):(action="bad",color=import_chalk12.default.red),output_manager_default.log(`Run script returned exit code ${import_chalk12.default.bold(String(exitCode))}: ${color(action)}`)}else openEnabled&&await(0,import_open.default)(testUrl),action=await client.input.expand({message:"Select an action:",choices:[{key:"g",name:"Good",value:"good"},{key:"b",name:"Bad",value:"bad"},{key:"s",name:"Skip",value:"skip"}]});action==="good"?deployments=deployments.slice(0,middleIndex):action==="bad"?(lastBad=deployment,deployments=deployments.slice(middleIndex+1)):action==="skip"&&deployments.splice(middleIndex,1)}output_manager_default.print(`
|
|
75
90
|
`);let result=[import_chalk12.default.bold(`The first bad deployment is: ${link_default(`https://${lastBad.url}`)}`),"",` ${import_chalk12.default.bold("Date:")} ${formatDate(lastBad.createdAt)}`],commit=getCommit(lastBad);if(commit){let shortSha=commit.sha.substring(0,7),firstLine=commit.message?.split(`
|
package/dist/commands-ai.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{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,backupFile,claudeCode,codex,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,readFileOrNull,resolveGatewayBaseUrl,setupCodexPlugin,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-U6KJOCXX.js";import{selectOrg}from"./chunks/chunk-UOQGI6CL.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{init_main,parse as parse2}from"./chunks/chunk-J24BABG4.js";import{init_dist,parse,stringify}from"./chunks/chunk-U4Z2MMOF.js";import{require_async_sema}from"./chunks/chunk-NZ2TFADV.js";import{CHECKBOX_INSTRUCTIONS}from"./chunks/chunk-OFDTADPQ.js";import{readOnOffOption}from"./chunks/chunk-E7DYXF6G.js";import{amountMatchesPrice,buy,canPromptForCharge,chargeFailureReason,deleteCertById,formatAmountArg,formatTerm,formatUsd,getDomains,getProjectDomain,getProjectDomainByName,getTeamMemberByIdentifier,getTeamMembersByIds,isDomainExternal,parseAmount,printChargeRecovery,refuseUnnamedTeam,removeAliasById,reportChargeFailure,reportPriceChanged,reportUnknownOutcome,reportUsageError,teamMemberLabel,verifyProjectDomain,writeChargeAction}from"./chunks/chunk-UVE5COCG.js";import{addDomain,getDomainByName,require_cjs}from"./chunks/chunk-WFOJ2LEA.js";import{getDomainPrice,getDomainStatus,getOrderOutcome,pollForOrder}from"./chunks/chunk-5M3WBT3N.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-43P35KUA.js";import{InvalidNextError,getPaginationOpts}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-HRR57QNP.js";import"./chunks/chunk-PFD7LETF.js";import{DEFAULT_LIST_LIMIT,PaginationError,fetchAllPages,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-NEUQZYBL.js";import{validateLsArgs}from"./chunks/chunk-BT5C6MCY.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-2RXUQ72I.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-K5YO4UD7.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{tokensAfterCommand}from"./chunks/chunk-4CQKN5TW.js";import{getTeams}from"./chunks/chunk-Y6WXTTZS.js";import{addSubcommand,aiGatewayCommand,apiKeysSubcommand,autoRenewSubcommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buySubcommand,checkSubcommand,codingAgentsSubcommand,createSubcommand,domainsCommand,getCommandAliases,inspectSubcommand2 as inspectSubcommand,inspectSubcommand3 as inspectSubcommand2,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listSubcommand2 as listSubcommand,listSubcommand4 as listSubcommand2,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,priceSubcommand,removeSubcommand,removeSubcommand3 as removeSubcommand2,renewSubcommand,rulesAddSubcommand,rulesEditSubcommand,rulesListSubcommand,rulesRemoveSubcommand,rulesSubcommand,searchSubcommand,setupSubcommand,transferInSubcommand,verifySubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand}from"./chunks/chunk-NTUDWWSL.js";import"./chunks/chunk-M73W4XNR.js";import"./chunks/chunk-32AS5X7G.js";import"./chunks/chunk-ZBZPCKTW.js";import{gatewaySubcommand,pluginSubcommand,setupCommand,skillsSubcommand}from"./chunks/chunk-TRZDIAX3.js";import"./chunks/chunk-GHEGWXH2.js";import"./chunks/chunk-GCXUSXB4.js";import"./chunks/chunk-2H4DUZJZ.js";import"./chunks/chunk-ECQKK4JU.js";import"./chunks/chunk-JOXGYP5S.js";import"./chunks/chunk-7ULVGK67.js";import"./chunks/chunk-4BZ3DNGM.js";import"./chunks/chunk-R5ZLTWKB.js";import"./chunks/chunk-T5TOBY4D.js";import"./chunks/chunk-H34SGIVS.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-G3LWP5CH.js";import"./chunks/chunk-QQA2OMXJ.js";import"./chunks/chunk-KV2DYFUG.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-GCPPL24C.js";import{printError}from"./chunks/chunk-BWS3ZOHJ.js";import{help}from"./chunks/chunk-33U57CNE.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getContextName,getScope}from"./chunks/chunk-DSNIVABS.js";import{TelemetryClient}from"./chunks/chunk-NAU6URTI.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-32NXYHYC.js";import"./chunks/chunk-FWTBSC7Z.js";import{getLinkedProject,getProjectByNameOrId,getUser,require_pluralize}from"./chunks/chunk-OZPBJWYU.js";import{ALIGNED_LABEL_WIDTH,printAlignedLabel}from"./chunks/chunk-64UCX5JM.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-7WY7ASKE.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments,parseWithShortFlag}from"./chunks/chunk-CGTD4QFC.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-4SAVH3H7.js";import{APIError,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainRemovalConflict,InvalidDomain,InvalidMoveDestination,ProjectNotFound,UnexpectedDomainTransferError,UnsupportedTLD,code,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{getCommandName,getCommandNamePlain,packageName}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{output_manager_default}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{getFlagsSpecification,stripSensitiveAuthArgs}from"./chunks/chunk-YPPDRKVC.js";import{chars_default}from"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);var MAX_PAGE_SIZE=100,MAX_SEARCH_QUERY_CHARS=256;async function listApiKeysPage(client,opts={}){let query=new URLSearchParams({purpose:"ai-gateway"});opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("until",opts.next),opts.search&&query.set("search",opts.search);let{apiKeys:apiKeys2,pagination}=await client.fetch(`/v1/api-keys?${query.toString()}`,{method:"GET"});return{items:apiKeys2??[],next:pagination?.next??null}}async function listAllApiKeys(client,opts={}){return fetchAllPages(next=>listApiKeysPage(client,{...opts,limit:MAX_PAGE_SIZE,next}))}async function getApiKey(client,apiKeyId){let{apiKey}=await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"GET"});return apiKey}async function updateApiKeyQuota(client,apiKeyId,input){return client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}/quota`,{method:"PATCH",body:input})}function describeApiKeyLookupError(identifier,resolved){switch(resolved.error){case"ambiguous":return`Multiple API keys named "${identifier}" (${resolved.count}). Use the key id instead.`;case"incomplete":return`Could not search every API key for "${identifier}": ${resolved.message} Use the key id instead.`;default:return`API key not found: ${identifier}`}}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let search2=identifier.length<=MAX_SEARCH_QUERY_CHARS?identifier:void 0,keys;try{keys=await listAllApiKeys(client,{search:search2})}catch(err){if(err instanceof PaginationError)return{error:"incomplete",message:err.message};throw err}let matches=keys.filter(key=>key.name===identifier);return matches.length===1?{apiKey:matches[0]}:matches.length>1?{error:"ambiguous",count:matches.length}:{error:"not_found"}}async function deleteApiKey(client,apiKeyId){await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"DELETE"})}async function createApiKey(client,payload){return await client.fetch("/v1/api-keys",{method:"POST",body:{purpose:"ai-gateway",...payload}})}var AiGatewayApiKeysCreateTelemetryClient=class extends TelemetryClient{trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",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")}trackCliFlagTokenPass(tokenPass2){tokenPass2&&this.trackCliFlag("token-pass")}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(token=>token.trim()).filter(token=>token.length>0);for(let token of tokens){let num=Number(token);if(!Number.isInteger(num)||!VALID_ALERT_THRESHOLDS.includes(num))return{valid:!1,invalid:token};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 telemetry=new AiGatewayApiKeysCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,name=opts["--name"],amountFlag=opts["--amount"],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"],tokenPass2=opts["--token-pass"];if(telemetry.trackCliOptionName(name),telemetry.trackCliOptionAmount(amountFlag),telemetry.trackCliOptionBudget(budgetFlag),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagIncludeByok(includeByok),telemetry.trackCliOptionAlertThresholds(alertThresholdsInput),telemetry.trackCliOptionExpiration(expiration),telemetry.trackCliFlagZdrExempt(zdrExempt),telemetry.trackCliFlagBypassAllSettings(bypassAll),telemetry.trackCliFlagTokenPass(tokenPass2),tokenPass2&&(zdrExempt||bypassAll)){let message="Cannot combine --token-pass with --zdr-exempt or --bypass-all-settings. Remove the exemption options to create a Token Pass key.";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --token-pass")}]},2),output_manager_default.error(message),2}if(budgetFlag!==void 0&&limitFlag!==void 0){let message="Pass only one of --limit or --budget. (Both are deprecated; use --amount.)";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --amount 500")}]},2),output_manager_default.error(message),2}let amount=getRenamedOption(opts,"--amount",budgetFlag!==void 0?"--budget":"--limit");if("error"in amount)return reportRenamedOptionError(client,amount.error);let budget=amount.value;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 --amount 500")}]},2),output_manager_default.error(message),2}if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod)){let message=`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_REFRESH_PERIOD,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --refresh-period monthly")}]},2),output_manager_default.error(message),2}let alertThresholds;if(alertThresholdsInput!==void 0){let result=parseAlertThresholds(alertThresholdsInput);if(!result.valid){let message=`Invalid alert threshold "${result.invalid}". Must be a comma-separated subset of: ${VALID_ALERT_THRESHOLDS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ALERT_THRESHOLDS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --alert-thresholds 50,75,100")}]},2),output_manager_default.error(message),2}alertThresholds=result.values}if(expiration!==void 0&&!isValidExpiry(expiration)){let message=`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_EXPIRATION,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --expiration 90d")}]},2),output_manager_default.error(message),2}let expiresAt=expiration!==void 0?presetToExpiresAt(expiration):void 0,aiGatewayQuota=buildQuota({budget,refreshPeriod,includeByok,alertThresholds});if(!await client.resolveCurrentTeam()){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={...tokenPass2&&{tokenPass:!0},...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}
|
|
7
|
+
import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,backupFile,claudeCode,codex,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,readFileOrNull,resolveGatewayBaseUrl,setupCodexPlugin,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-2DHDKWYN.js";import{CHECKBOX_INSTRUCTIONS}from"./chunks/chunk-OFDTADPQ.js";import{selectOrg}from"./chunks/chunk-NNGNQNGM.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{init_main,parse as parse2}from"./chunks/chunk-J24BABG4.js";import{init_dist,parse,stringify}from"./chunks/chunk-U4Z2MMOF.js";import{require_async_sema}from"./chunks/chunk-NZ2TFADV.js";import{readOnOffOption}from"./chunks/chunk-E7DYXF6G.js";import{amountMatchesPrice,buy,canPromptForCharge,chargeFailureReason,deleteCertById,formatAmountArg,formatTerm,formatUsd,getDomains,getProjectDomain,getProjectDomainByName,getTeamMemberByIdentifier,getTeamMembersByIds,isDomainExternal,parseAmount,printChargeRecovery,refuseUnnamedTeam,removeAliasById,reportChargeFailure,reportPriceChanged,reportUnknownOutcome,reportUsageError,teamMemberLabel,verifyProjectDomain,writeChargeAction}from"./chunks/chunk-QR2Y6RI6.js";import{addDomain,getDomainByName,require_cjs}from"./chunks/chunk-CCMABJKN.js";import{getDomainPrice,getDomainStatus,getOrderOutcome,pollForOrder}from"./chunks/chunk-XXEGRTU6.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{external_exports}from"./chunks/chunk-2AMO2VMV.js";import{getAliases}from"./chunks/chunk-BQVKEPOO.js";import{InvalidNextError,getPaginationOpts}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import{validateLsArgs}from"./chunks/chunk-BT5C6MCY.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-HRR57QNP.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import"./chunks/chunk-PFD7LETF.js";import{formatTable}from"./chunks/chunk-2RXUQ72I.js";import{DEFAULT_LIST_LIMIT,PaginationError,fetchAllPages,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-PMEYNJU2.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-V32V4SXB.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{tokensAfterCommand}from"./chunks/chunk-G7H33IKQ.js";import{getTeams}from"./chunks/chunk-BPRGAX62.js";import{addSubcommand,aiGatewayCommand,apiKeysSubcommand,autoRenewSubcommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buySubcommand,checkSubcommand,codingAgentsSubcommand,createSubcommand,domainsCommand,getCommandAliases,inspectSubcommand2 as inspectSubcommand,inspectSubcommand3 as inspectSubcommand2,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listSubcommand2 as listSubcommand,listSubcommand4 as listSubcommand2,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,priceSubcommand,removeSubcommand,removeSubcommand3 as removeSubcommand2,renewSubcommand,rulesAddSubcommand,rulesEditSubcommand,rulesListSubcommand,rulesRemoveSubcommand,rulesSubcommand,searchSubcommand,setupSubcommand,transferInSubcommand,verifySubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand}from"./chunks/chunk-FTACGWII.js";import"./chunks/chunk-CZOD25BC.js";import{gatewaySubcommand,pluginSubcommand,setupCommand,skillsSubcommand}from"./chunks/chunk-77LSSWXL.js";import"./chunks/chunk-MUNGQJGO.js";import"./chunks/chunk-W5GHMAHP.js";import"./chunks/chunk-ANCWFEOM.js";import"./chunks/chunk-QVMU7ZKQ.js";import"./chunks/chunk-TL4ZLZ2Q.js";import"./chunks/chunk-VD2FK6OF.js";import"./chunks/chunk-JVNIDSP5.js";import"./chunks/chunk-NLKM5LR5.js";import"./chunks/chunk-BB5UMZMF.js";import"./chunks/chunk-4LGAV2WN.js";import"./chunks/chunk-EJZNJN4N.js";import"./chunks/chunk-S5JBQCBA.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-FAVZ6WVS.js";import"./chunks/chunk-5KE67O45.js";import"./chunks/chunk-T7HE23VK.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-CUBRYWA2.js";import{printError}from"./chunks/chunk-Q4GX2UTG.js";import{help}from"./chunks/chunk-GKALP6QD.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getContextName,getScope}from"./chunks/chunk-7DP4DHQW.js";import{TelemetryClient}from"./chunks/chunk-VPUYTI5E.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{buildCommandWithGlobalFlags,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-ZUI5EMXD.js";import"./chunks/chunk-FY4ORPZH.js";import{getLinkedProject,getProjectByNameOrId,getUser,require_pluralize}from"./chunks/chunk-CSOIXUCL.js";import{ALIGNED_LABEL_WIDTH,printAlignedLabel}from"./chunks/chunk-64UCX5JM.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-56UH6NQ3.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments,parseWithShortFlag}from"./chunks/chunk-C4N4LKPM.js";import{getTeamByIdOrSlug}from"./chunks/chunk-2VBFQZ72.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-4SAVH3H7.js";import{APIError,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainRemovalConflict,InvalidDomain,InvalidMoveDestination,ProjectNotFound,UnexpectedDomainTransferError,UnsupportedTLD,code,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{getCommandName,getCommandNamePlain,packageName}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{output_manager_default}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{getFlagsSpecification,quoteArg,stripSensitiveAuthArgs}from"./chunks/chunk-CKTLP5GX.js";import{chars_default}from"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,getExitCodeForReason}from"./chunks/chunk-CFYTFXX6.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);var MAX_PAGE_SIZE=100,MAX_SEARCH_QUERY_CHARS=256;async function listApiKeysPage(client,opts={}){let query=new URLSearchParams({purpose:"ai-gateway"});opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("until",opts.next),opts.search&&query.set("search",opts.search);let{apiKeys:apiKeys2,pagination}=await client.fetch(`/v1/api-keys?${query.toString()}`,{method:"GET"});return{items:apiKeys2??[],next:pagination?.next??null}}async function listAllApiKeys(client,opts={}){return fetchAllPages(next=>listApiKeysPage(client,{...opts,limit:MAX_PAGE_SIZE,next}))}async function getApiKey(client,apiKeyId){let{apiKey}=await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"GET"});return apiKey}async function updateApiKeyQuota(client,apiKeyId,input){return client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}/quota`,{method:"PATCH",body:input})}function describeApiKeyLookupError(identifier,resolved){switch(resolved.error){case"ambiguous":return`Multiple API keys named "${identifier}" (${resolved.count}). Use the key id instead.`;case"incomplete":return`Could not search every API key for "${identifier}": ${resolved.message} Use the key id instead.`;default:return`API key not found: ${identifier}`}}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let search2=identifier.length<=MAX_SEARCH_QUERY_CHARS?identifier:void 0,keys;try{keys=await listAllApiKeys(client,{search:search2})}catch(err){if(err instanceof PaginationError)return{error:"incomplete",message:err.message};throw err}let matches=keys.filter(key=>key.name===identifier);return matches.length===1?{apiKey:matches[0]}:matches.length>1?{error:"ambiguous",count:matches.length}:{error:"not_found"}}async function deleteApiKey(client,apiKeyId){await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"DELETE"})}async function createApiKey(client,payload){return await client.fetch("/v1/api-keys",{method:"POST",body:{purpose:"ai-gateway",...payload}})}var AiGatewayApiKeysCreateTelemetryClient=class extends TelemetryClient{trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",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")}trackCliFlagTokenPass(tokenPass2){tokenPass2&&this.trackCliFlag("token-pass")}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(token=>token.trim()).filter(token=>token.length>0);for(let token of tokens){let num=Number(token);if(!Number.isInteger(num)||!VALID_ALERT_THRESHOLDS.includes(num))return{valid:!1,invalid:token};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 telemetry=new AiGatewayApiKeysCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,name=opts["--name"],amountFlag=opts["--amount"],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"],tokenPass2=opts["--token-pass"];if(telemetry.trackCliOptionName(name),telemetry.trackCliOptionAmount(amountFlag),telemetry.trackCliOptionBudget(budgetFlag),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagIncludeByok(includeByok),telemetry.trackCliOptionAlertThresholds(alertThresholdsInput),telemetry.trackCliOptionExpiration(expiration),telemetry.trackCliFlagZdrExempt(zdrExempt),telemetry.trackCliFlagBypassAllSettings(bypassAll),telemetry.trackCliFlagTokenPass(tokenPass2),tokenPass2&&(zdrExempt||bypassAll)){let message="Cannot combine --token-pass with --zdr-exempt or --bypass-all-settings. Remove the exemption options to create a Token Pass key.";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --token-pass")}]},2),output_manager_default.error(message),2}if(budgetFlag!==void 0&&limitFlag!==void 0){let message="Pass only one of --limit or --budget. (Both are deprecated; use --amount.)";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --amount 500")}]},2),output_manager_default.error(message),2}let amount=getRenamedOption(opts,"--amount",budgetFlag!==void 0?"--budget":"--limit");if("error"in amount)return reportRenamedOptionError(client,amount.error);let budget=amount.value;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 --amount 500")}]},2),output_manager_default.error(message),2}if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod)){let message=`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_REFRESH_PERIOD,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --refresh-period monthly")}]},2),output_manager_default.error(message),2}let alertThresholds;if(alertThresholdsInput!==void 0){let result=parseAlertThresholds(alertThresholdsInput);if(!result.valid){let message=`Invalid alert threshold "${result.invalid}". Must be a comma-separated subset of: ${VALID_ALERT_THRESHOLDS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ALERT_THRESHOLDS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --alert-thresholds 50,75,100")}]},2),output_manager_default.error(message),2}alertThresholds=result.values}if(expiration!==void 0&&!isValidExpiry(expiration)){let message=`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_EXPIRATION,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --expiration 90d")}]},2),output_manager_default.error(message),2}let expiresAt=expiration!==void 0?presetToExpiresAt(expiration):void 0,aiGatewayQuota=buildQuota({budget,refreshPeriod,includeByok,alertThresholds});if(!await client.resolveCurrentTeam()){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={...tokenPass2&&{tokenPass:!0},...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}
|
|
8
8
|
`),output_manager_default.success(`API key ${import_chalk.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")}.`),client.isAgent&&output_manager_default.log(`Prefer OIDC over long-lived API keys: code on Vercel can authenticate to AI Gateway with VERCEL_OIDC_TOKEN, and local development can get one with ${getCommandName("link")} and ${getCommandName("env pull")}. Revoke this key with ${getCommandName(`ai-gateway api-keys revoke ${result.apiKey.id} --yes`)} if you don't need it.`),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var import_chalk2=__toESM(require_source(),1);var import_async_sema=__toESM(require_async_sema(),1);var DIRECTORY_KEY_SORTS=["createdAt:desc","createdAt:asc","lastActiveAt:desc","lastActiveAt:asc","name:asc","name:desc","expiresAt:asc","expiresAt:desc"],DIRECTORY_KEY_STATES=["active","expired","deleted","purged","any"],MAX_DIRECTORY_RESOLVE_IDS=100,FETCH_OPTS={retry:{retries:0},bailOn429:!0},DIRECTORY_KILL_SWITCH="VERCEL_AI_GATEWAY_DIRECTORY";function isDirectoryEnabledByEnv(env=process.env){let value=env[DIRECTORY_KILL_SWITCH]?.trim().toLowerCase();return value!=="0"&&value!=="false"}async function listDirectoryKeysPage(client,opts={}){let query=new URLSearchParams,search2=opts.search?.trim();search2&&query.set("search",search2),opts.createdBy&&query.set("createdBy",opts.createdBy),opts.accessPolicyId&&query.set("accessPolicyId",opts.accessPolicyId),opts.state&&query.set("state",opts.state),opts.sort&&query.set("sort",opts.sort),opts.cursor&&query.set("cursor",opts.cursor),opts.limit!==void 0&&query.set("limit",String(opts.limit));let qs=query.toString(),page=await client.fetch(`/ai-gateway/directory/keys${qs?`?${qs}`:""}`,{method:"GET",...FETCH_OPTS});return{items:page.data??[],next:page.cursor??null}}function chunk(items,size){let chunks=[];for(let i=0;i<items.length;i+=size)chunks.push(items.slice(i,i+size));return chunks}var BATCH_CONCURRENCY=4;async function mapConcurrent(items,fn){let sema=new import_async_sema.default(BATCH_CONCURRENCY);return Promise.all(items.map(async item=>{await sema.acquire();try{return await fn(item)}finally{sema.release()}}))}async function resolveDirectoryIdentities(client,input){let keyChunks=chunk([...new Set(input.keyIds??[])],MAX_DIRECTORY_RESOLVE_IDS),userChunks=chunk([...new Set(input.userIds??[])],MAX_DIRECTORY_RESOLVE_IDS),requests=Math.max(keyChunks.length,userChunks.length),bodies=Array.from({length:requests},(_,i)=>{let body={};return keyChunks[i]?.length&&(body.keyIds=keyChunks[i]),userChunks[i]?.length&&(body.userIds=userChunks[i]),body}),pages=await mapConcurrent(bodies,body=>client.fetch("/ai-gateway/directory/identities/resolve",{method:"POST",body,...FETCH_OPTS})),keys=new Map,users=new Map;return pages.forEach((res,i)=>{for(let key of res.data?.keys??[])keys.set(key.keyId,key);if(Array.isArray(res.data?.users))for(let user of res.data.users)users?.set(user.uid,user);else bodies[i].userIds&&(users=null)}),{keys,users}}async function resolveDirectoryKeyQuotas(client,keyIds){let pages=await mapConcurrent(chunk([...new Set(keyIds)],MAX_DIRECTORY_RESOLVE_IDS),ids=>client.fetch("/ai-gateway/directory/keys/quotas",{method:"POST",body:{keyIds:ids},...FETCH_OPTS})),quotas=new Map;for(let res of pages)for(let quota of res.data?.quotas??[])quotas.set(quota.apiKeyId,quota);return quotas}function isDirectoryUnavailable(err){return isAPIError(err)&&(err.status===429||err.status>=500)}function isDirectoryCursor(cursor2){try{let parsed=JSON.parse(Buffer.from(cursor2,"base64url").toString());return typeof parsed=="object"&&parsed!==null&&parsed.v===1&&typeof parsed.fp=="string"&&Array.isArray(parsed.sa)}catch{return!1}}function toApiKey(key,quota){let apiKey={id:key.keyId,name:key.name,partialKey:key.suffix??"",teamId:key.teamId,purpose:"ai-gateway",projectId:key.projectId??null,expiresAt:key.expiresAt??null,activeAt:key.lastActiveAt??key.createdAt,createdAt:key.createdAt,createdBy:key.createdBy??"",leakedAt:key.leakedAt??null,leakedUrl:null,createdByAppId:key.attribution?.createdByAppId??null};if(quota){let{apiKeyId:_apiKeyId,...rest}=quota;apiKey.quota=rest}return apiKey}async function ensureTeam(client){if(await client.resolveCurrentTeam())return!0;if(client.nonInteractive||client.isAgent||!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway \u2026` or run `vercel switch` first."),!1;let org=await selectOrg(client,"Which team?");return org.type==="team"?(client.config.currentTeam=org.id,!0):(output_manager_default.error("AI Gateway resources are managed per team. Switch to a team scope and try again."),!1)}var AiGatewayApiKeysListTelemetryClient=class extends TelemetryClient{trackCliOptionQuery(query){query&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(search2){search2&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionCreator(creator){creator&&this.trackCliOption({option:"creator",value:creator==="me"?"me":this.redactedValue})}trackCliOptionState(state){state&&this.trackCliOption({option:"state",value:state})}trackCliOptionSort(sort){sort&&this.trackCliOption({option:"sort",value:sort})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function renderResource(client,{asJson,spinnerText,fetch,toJSON,isEmpty,emptyMessage:emptyMessage2,header,renderTable:renderTable2,notFoundMessage,next}){let lsStamp=stamp_default(),json=asJson||client.nonInteractive;client.nonInteractive||output_manager_default.spinner(spinnerText);let data;try{data=await fetch()}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.status===404&¬FoundMessage?notFoundMessage:err.message),1;if(err instanceof PaginationError)return output_manager_default.error(err.message),1;throw err}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(toJSON(data),null,2)}
|
|
9
9
|
`),0;if(isEmpty(data)){let nextCursor=next?.(data)??null;return nextCursor?(output_manager_default.log("No results on this page."),printNextPageHint(client,nextCursor),0):(output_manager_default.log(emptyMessage2),0)}return output_manager_default.log(`${header(data)} ${lsStamp()}`),client.stdout.write(renderTable2(data)),next&&printNextPageHint(client,next(data)),0}var BUDGET_SCOPE_TYPES=["team","project","user","api-key"];function parseBudgetScope(args,opts={}){let[scopeArg,...rest]=args;if(!scopeArg)return{error:`Expected a scope. Specify ${BUDGET_SCOPE_TYPES.join(" or ")}.`};if(!BUDGET_SCOPE_TYPES.includes(scopeArg))return{error:`Unknown scope "${scopeArg}". Expected one of: ${BUDGET_SCOPE_TYPES.join(", ")}.`};if(scopeArg==="team")return opts.isDefault?{error:"The team scope does not support --default. Set the team budget directly."}:rest.length>0?{error:`The team scope does not take a name (got "${rest[0]}").`}:{scope:{scopeType:"team"}};let[name,...extra]=rest;if(opts.isDefault)return name?{error:`The ${scopeArg} scope takes either a name or --default, not both.`}:{scope:{scopeType:scopeArg,isDefault:!0}};if(!name){let required={project:"a project name or id",user:"a user email, username, or id","api-key":"an API key name or id"}[scopeArg];return{error:`The ${scopeArg} scope requires ${required}. Pass --default for the per-${scopeArg} default budget.`}}return extra.length>0?{error:`Unexpected argument "${extra[0]}".`}:{scope:{scopeType:scopeArg,name}}}var PERIOD_PHRASE={daily:"a day",weekly:"a week",monthly:"a month",none:"total"};function formatBudgetCap(limitAmount,refreshPeriod){return`$${limitAmount} ${PERIOD_PHRASE[refreshPeriod]}`}async function listBudgets(client,scopeType){let query=scopeType?`?scopeType=${scopeType}`:"",{budgets:budgets2}=await client.fetch(`/ai-gateway/budgets/list${query}`,{method:"GET"});return budgets2??[]}async function listBudgetsPage(client,opts){let query=new URLSearchParams;opts.scopeType&&query.set("scopeType",opts.scopeType),query.set("limit",String(opts.limit)),opts.next&&query.set("cursor",opts.next),opts.includeDefaultCovered!==void 0&&query.set("includeDefaultCovered",String(opts.includeDefaultCovered));let{budgets:budgets2,nextCursor,defaultCoveredCounts}=await client.fetch(`/ai-gateway/budgets/list?${query.toString()}`,{method:"GET"});return{items:budgets2??[],next:nextCursor??null,defaultCoveredCounts:defaultCoveredCounts??{}}}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"})}var STATE_FLAG_VALUES=DIRECTORY_KEY_STATES.filter(s=>s!=="purged"),SORT_FIELDS=["createdAt","lastActiveAt","name","expiresAt"],DEFAULT_STATE="active",DEFAULT_SORT="lastActiveAt:desc";async function list(client,argv){let telemetry=new AiGatewayApiKeysListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,queryFlag=opts["--query"],searchFlag=opts["--search"],search2=queryFlag??searchFlag,creator=opts["--creator"],stateFlag=opts["--state"],sortFlag=opts["--sort"],limitFlag=opts["--limit"],next=opts["--next"];telemetry.trackCliOptionQuery(queryFlag),telemetry.trackCliOptionSearch(searchFlag),telemetry.trackCliOptionCreator(creator),telemetry.trackCliOptionState(stateFlag),telemetry.trackCliOptionSort(sortFlag),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionNext(next),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(queryFlag!==void 0&&searchFlag!==void 0&&queryFlag!==searchFlag)return usageError(client,"Pass only one of --query or --search.");if(search2!==void 0&&search2.trim().length===0)return usageError(client,"The --query option requires some text.");if(search2&&search2.length>MAX_SEARCH_QUERY_CHARS)return usageError(client,`The --query option must be at most ${MAX_SEARCH_QUERY_CHARS} characters.`);if(stateFlag!==void 0&&!STATE_FLAG_VALUES.includes(stateFlag))return usageError(client,`The --state option must be one of: ${STATE_FLAG_VALUES.join(", ")}.`);let sort=sortFlag===void 0?void 0:parseSortFlag(sortFlag);if(sortFlag!==void 0&&!sort)return usageError(client,`The --sort option must be one of ${SORT_FIELDS.join(", ")}, optionally followed by :asc or :desc.`);if(creator!==void 0&&creator.trim().length===0)return usageError(client,"The --creator option requires a team member.");let limit;try{limit=parseListLimit(limitFlag)}catch(err){return output_manager_default.error(err.message),1}if(!await ensureTeam(client))return 1;let keyDefault;if(!formatResult.jsonOutput)try{keyDefault=(await listScopeBudgetDefaults(client)).find(d=>d.scopeType==="api-key"&&d.active!==!1)}catch{}let directoryOnly=creator!==void 0||stateFlag!==void 0||sortFlag!==void 0||next!==void 0&&isDirectoryCursor(next),legacyOnly=!isDirectoryEnabledByEnv()||next!==void 0&&!isDirectoryCursor(next);if(directoryOnly&&legacyOnly){let message;return isDirectoryEnabledByEnv()?message="The --next cursor does not belong to this query. Rerun without --next to start from the first page.":next!==void 0&&isDirectoryCursor(next)?message=`The --next cursor came from the AI Gateway key directory, which ${DIRECTORY_KILL_SWITCH} disables in this environment. Rerun without --next to start from the first page.`:message=`The --creator, --state, and --sort options need the AI Gateway key directory, which ${DIRECTORY_KILL_SWITCH} disables in this environment.`,usageError(client,message)}let createdBy;if(creator!==void 0)try{createdBy=await resolveCreator(client,creator.trim())}catch(err){if(err instanceof UnknownCreatorError)return usageError(client,err.message);if(isAPIError(err))return output_manager_default.error(`Could not look up team member "${creator}": ${err.message}`),1;throw err}let legacyPage=async()=>({...await listApiKeysPage(client,{limit,next,search:search2}),metadataKnown:!0}),fetch=async()=>{if(legacyOnly)return legacyPage();try{return await fetchDirectoryPage(client,{search:search2,createdBy,state:stateFlag??DEFAULT_STATE,sort:sort??DEFAULT_SORT,cursor:next,limit})}catch(err){if(!isDirectoryUnavailable(err))throw err;if(output_manager_default.debug(`AI Gateway key directory unavailable: ${err instanceof Error?err.message:String(err)}`),directoryOnly)throw new DirectoryUnavailableError;return legacyPage()}};try{return await renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching API keys",fetch,toJSON:page=>({apiKeys:page.items,pagination:{next:page.next}}),isEmpty:page=>page.items.length===0,emptyMessage:emptyMessage({next,search:search2,creator,stateFlag}),header:()=>"API keys",renderTable:page=>printApiKeysTable(page.items,keyDefault,page.metadataKnown),next:page=>page.next})}catch(err){if(err instanceof DirectoryUnavailableError)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message:err.message,next:[{command:getCommandNamePlain("ai-gateway api-keys list")}]},1),output_manager_default.error(err.message),1;throw err}}var DirectoryUnavailableError=class extends Error{constructor(){super("The AI Gateway key directory is temporarily unavailable, so --creator, --state, --sort, and directory cursors cannot be served. Retry shortly, or list without those options."),this.name="DirectoryUnavailableError"}};function usageError(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys list")}]},2),output_manager_default.error(message),2}function parseSortFlag(value){if(DIRECTORY_KEY_SORTS.includes(value))return value;if(SORT_FIELDS.includes(value))return`${value}:${value==="name"?"asc":"desc"}`}var UnknownCreatorError=class extends Error{constructor(identifier){super(`No team member matches "${identifier}".`),this.name="UnknownCreatorError"}};async function resolveCreator(client,identifier){if(identifier==="me")return(await getUser(client)).id;let member=await getTeamMemberByIdentifier(client,client.config.currentTeam,identifier);if(member)return member.uid;if(identifier.includes("@"))throw new UnknownCreatorError(identifier);return output_manager_default.debug(`No team member matches "${identifier}"; using it as a user id.`),identifier}async function fetchDirectoryPage(client,opts){let page=await listDirectoryKeysPage(client,opts),liveIds=page.items.filter(key=>key.state==="active").map(key=>key.keyId),quotas=new Map;if(liveIds.length>0)try{quotas=await resolveDirectoryKeyQuotas(client,liveIds)}catch(err){output_manager_default.debug(`Skipping AI Gateway key budgets in list output: ${err instanceof Error?err.message:String(err)}`)}return{items:page.items.map(key=>toApiKey(key,quotas.get(key.keyId))),next:page.next,metadataKnown:!1}}function emptyMessage({next,search:search2,creator,stateFlag}){return next?"No more API keys.":search2||creator||stateFlag?"No API keys match these filters.":`No API keys found. Create one with ${getCommandName("ai-gateway api-keys create")}.`}function printApiKeysTable(apiKeys2,keyDefault,metadataKnown){return`${table([["id","name","key","token pass","budget","spend","refresh","created"].map(header=>import_chalk2.default.gray(header)),...apiKeys2.map(apiKey=>[apiKey.id,apiKey.name||import_chalk2.default.gray("\u2013"),apiKey.partialKey?`\u2026${apiKey.partialKey}`:import_chalk2.default.gray("\u2013"),metadataKnown?apiKey.metadata?.tokenPass?"yes":"no":import_chalk2.default.gray("\u2013"),apiKey.quota?`$${apiKey.quota.limitAmount}`:keyDefault?`$${keyDefault.limitAmount} ${import_chalk2.default.gray("(default)")}`:import_chalk2.default.gray("\u2013"),apiKey.quota?`$${apiKey.quota.currentSpend}`:import_chalk2.default.gray("\u2013"),apiKey.quota?.refreshPeriod??keyDefault?.refreshPeriod??import_chalk2.default.gray("\u2013"),apiKey.createdAt?new Date(apiKey.createdAt).toLocaleDateString():import_chalk2.default.gray("\u2013")])],{align:["l","l","l","l","l","l","l","l"],hsep:4}).replace(/^/gm," ")}
|
|
10
10
|
|
|
@@ -189,7 +189,7 @@ ${indent(nameservers.join(`
|
|
|
189
189
|
`).map(line=>` ${line}`).join(`
|
|
190
190
|
`)}function renderStructuredOutput(diagnosis){let{facts}=diagnosis,{config}=facts,dnsMethods=getDnsMethods(diagnosis),domainConnectMethod=dnsMethods.find(method=>method.kind==="domain-connect"),domainConnect=domainConnectMethod?.kind==="domain-connect"?domainConnectMethod.configuration:null,canRecommendDns=diagnosis.configurationStatus!=="scope-resolution-required"&&diagnosis.configurationStatus!=="project-attachment-recommended"&&facts.ownership!=="platform-managed",payload={status:diagnosis.ok?AGENT_STATUS.OK:AGENT_STATUS.ACTION_REQUIRED,...diagnosis.details,...diagnosis.next.length?{next:diagnosis.next}:{},...domainConnect?{domainConnect}:{},domain:facts.domainName,domainStatus:diagnosis.status,configurationStatus:diagnosis.configurationStatus,ok:diagnosis.ok,issues:diagnosis.issues,misconfigured:config.misconfigured,configuredBy:config.configuredBy,serviceType:config.serviceType,ipStatus:config.ipStatus??null,dnssecEnabled:config.dnssecEnabled??null,acceptedChallenges:config.acceptedChallenges??[],current:{nameservers:config.nameservers??[],cnames:config.cnames??[],aValues:config.aValues??[]},recommended:{ipv4:canRecommendDns?config.recommendedIPv4??[]:[],cname:canRecommendDns?config.recommendedCNAME??[]:[],records:diagnosis.recommendedDnsRecords,nameservers:getRecommendedNameservers(dnsMethods)},conflicts:diagnosis.steps.flatMap(step=>step.kind==="remove-conflict"?[step.conflict]:[]),domainOwnership:facts.ownership,project:serializeProject(facts.project)};return`${JSON.stringify(payload,null,2)}
|
|
191
191
|
`}function renderStructuredError(error){return`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:error.reason,error:error.code,message:error.message,...error.next?.length?{next:error.next}:{}},null,2)}
|
|
192
|
-
`}function getDnsMethods(diagnosis){let step=diagnosis.steps.find(candidate=>candidate.kind==="configure-dns");return step?.kind==="configure-dns"?step.methods:[]}function getRecommendedNameservers(methods){let method=methods.find(candidate=>candidate.kind==="nameservers");return method?.kind==="nameservers"?method.nameservers:[]}function serializeProject(project){return project.kind==="none"?null:project.kind==="attached"?{idOrName:project.label,attached:!0,verified:project.domain.verified,verification:project.domain.verification??[],verificationError:project.verificationError?{code:project.verificationError.code||"verification_failed",message:project.verificationError.serverMessage||project.verificationError.message}:null}:{idOrName:project.idOrName,attached:!1}}async function verify(client,argv){let telemetry=new DomainsVerifyTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(verifySubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:errorMessage(error),next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify --help"),when:"See valid arguments and options"}]})}let{args,flags}=parsedArgs,[domainName]=args;if(!domainName||args.length!==1)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.MISSING_ARGUMENTS,code:"missing_arguments",message:"A single domain is required.",next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"),when:"Replace <domain> with the domain to check"}],humanMessage:`${getCommandName("domains verify <domain>")} expects one argument`});let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:formatResult.error,next:[{command:buildCommandWithGlobalFlags(client.argv,`domains verify ${shellQuoteCommandArg(domainName)} --json`),when:"Retry with the supported JSON format"}]});telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliFlagStrict(flags["--strict"]),telemetry.trackCliOptionFormat(flags["--format"]);let options={domainName,project:flags["--project"],strict:!!flags["--strict"],outputMode:getOutputMode(client,formatResult.jsonOutput)};try{return await run(client,options)}catch(error){return output_manager_default.stopSpinner(),isStructuredOutput(options.outputMode)?writeCommandError(client,options.outputMode,{reason:AGENT_REASON.API_ERROR,code:"api_error",message:errorMessage(error),next:[{command:buildVerifyCommand(client,options),when:"Retry the domain check"}]}):(output_manager_default.prettyError(error),1)}}async function run(client,options){let elapsed=stamp_default();options.outputMode==="human"&&output_manager_default.spinner(`Checking DNS configuration for ${options.domainName}`);let acquisition=await acquireVerificationFacts(client,options);if(output_manager_default.stopSpinner(),!acquisition.ok)return writeCommandError(client,options.outputMode,commandErrorForAcquisition(client,options,acquisition.error));let diagnosis=diagnoseDomain(acquisition.facts,buildDiagnosisCommands(client,options));return isStructuredOutput(options.outputMode)?client.stdout.write(renderStructuredOutput(diagnosis)):writeHumanOutput(renderHumanOutput(diagnosis,elapsed())),diagnosis.exitCode}function getOutputMode(client,jsonOutput){return jsonOutput?"json":shouldEmitNonInteractiveCommandError(client)?"non-interactive":"human"}function isStructuredOutput(mode){return mode!=="human"}function buildDiagnosisCommands(client,options){return{teamsList:buildTeamsListCommand(client),verify:scopeOverride=>buildVerifyCommand(client,options,scopeOverride),attachProject:projectIdOrName=>{let projectArgument=projectIdOrName==="<project>"?projectIdOrName:shellQuoteCommandArg(projectIdOrName);return buildCommandWithGlobalFlags(client.argv,`domains add ${shellQuoteCommandArg(options.domainName)} ${projectArgument}`)},openUrl:openUrlInBrowserCommand}}function commandErrorForAcquisition(client,options,error){let next=error.kind==="permission-denied"?[{command:buildTeamsListCommand(client),when:"List teams to find the scope that owns the project"},{command:buildVerifyCommand(client,options,"<team>"),when:"Replace <team> with the owning team and retry"}]:[{command:error.kind==="invalid-domain"?buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"):buildVerifyCommand(client,options),when:error.kind==="invalid-domain"?"Replace <domain> with a valid domain name":"Retry the domain check"}];return{reason:reasonForAcquisitionError(error),code:error.code,message:error.message,next}}function reasonForAcquisitionError(error){return error.kind==="invalid-domain"?AGENT_REASON.INVALID_DOMAIN:error.kind==="permission-denied"?AGENT_REASON.PERMISSION_DENIED:error.kind==="timeout"?"timeout":error.kind==="unexpected-dns-response"?"unexpected_dns_response":AGENT_REASON.API_ERROR}function buildVerifyCommand(client,options,scopeOverride){let parts=["domains","verify",shellQuoteCommandArg(options.domainName)];return options.project&&parts.push("--project",shellQuoteCommandArg(options.project)),options.strict&&parts.push("--strict"),options.outputMode==="json"&&parts.push("--json"),scopeOverride&&parts.push("--scope",scopeOverride),buildCommandWithGlobalFlags(client.argv,parts.join(" "),packageName,scopeOverride?{excludeFlags:["--scope","--team","-S","-T"]}:void 0)}function buildTeamsListCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams ls",packageName,{excludeFlags:["--scope","--team","-S","-T"]})}function shellQuoteCommandArg(value){return/^[a-zA-Z0-9_./:@%+,=-]+$/.test(value)?value:`"${value.replace(/(["\\$`])/g,"\\$1")}"`}function writeCommandError(client,outputMode,error){return output_manager_default.stopSpinner(),isStructuredOutput(outputMode)?client.stdout.write(renderStructuredError(error)):output_manager_default.error(error.humanMessage??error.message),getExitCodeForReason(error.reason)}function writeHumanOutput(result){result.lead.kind==="success"?output_manager_default.success(result.lead.message):output_manager_default.log(result.lead.message);for(let section of result.sections)output_manager_default.print(section)}function errorMessage(error){return error instanceof Error?error.message:String(error)}var DomainsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandMove(actual){this.trackCliSubcommand({subcommand:"move",value:actual})}trackCliSubcommandBuy(actual){this.trackCliSubcommand({subcommand:"buy",value:actual})}trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}trackCliSubcommandPrice(actual){this.trackCliSubcommand({subcommand:"price",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandTransferIn(actual){this.trackCliSubcommand({subcommand:"transfer-in",value:actual})}trackCliSubcommandRenew(actual){this.trackCliSubcommand({subcommand:"renew",value:actual})}trackCliSubcommandAutoRenew(actual){this.trackCliSubcommand({subcommand:"auto-renew",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandVerify(actual){this.trackCliSubcommand({subcommand:"verify",value:actual})}};var COMMAND_CONFIG10={add:["add"],buy:["buy"],check:["check"],inspect:["inspect"],ls:["ls","list"],move:["move"],price:["price"],search:["search"],rm:["rm","remove"],transferIn:["transfer-in"],renew:["renew"],autoRenew:["auto-renew"],verify:["verify"]};async function main2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(domainsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),2}let telemetry=new DomainsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG10),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("domains"),output_manager_default.print(help(domainsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:domainsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(addSubcommand)):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(inspectSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect4(client,args));case"move":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(moveSubcommand)):(telemetry.trackCliSubcommandMove(subcommandOriginal),move(client,args));case"buy":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(buySubcommand)):(telemetry.trackCliSubcommandBuy(subcommandOriginal),buy(client,args));case"check":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(checkSubcommand)):(telemetry.trackCliSubcommandCheck(subcommandOriginal),check(client,args));case"price":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(priceSubcommand)):(telemetry.trackCliSubcommandPrice(subcommandOriginal),price(client,args));case"search":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(searchSubcommand)):(telemetry.trackCliSubcommandSearch(subcommandOriginal),search(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(removeSubcommand2)):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"transferIn":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(transferInSubcommand)):(telemetry.trackCliSubcommandTransferIn(subcommandOriginal),transferIn(client,args));case"renew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(renewSubcommand)):(telemetry.trackCliSubcommandRenew(subcommandOriginal),renew(client,args));case"autoRenew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(autoRenewSubcommand)):(telemetry.trackCliSubcommandAutoRenew(subcommandOriginal),autoRenew(client,args));case"verify":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(verifySubcommand)):(telemetry.trackCliSubcommandVerify(subcommandOriginal),verify(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(listSubcommand2)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args))}}var import_chalk41=__toESM(require_source(),1);import{homedir as homedir2}from"node:os";var import_execa=__toESM(require_execa(),1);init_main();import{isAbsolute as isAbsolute6,join as join29}from"node:path";var PLUGIN_SOURCE="github:vercel/vercel-plugin",PLUGIN_ID="vercel-plugin";async function openCodeMajorVersion(){try{let{stdout}=await(0,import_execa.default)("opencode",["--version"],{stdin:"ignore",timeout:1e4}),match=/(\d+)\.\d+\.\d+/.exec(stdout);return match?Number(match[1]):void 0}catch{return}}function selectsPlugin(selector){return selector==="*"||(selector.endsWith(".*")?PLUGIN_ID.startsWith(selector.slice(0,-1)):selector===PLUGIN_ID)}async function pluginConfigState(home){let xdg=process.env.XDG_CONFIG_HOME,dir=process.env.OPENCODE_CONFIG_DIR||join29(xdg&&isAbsolute6(xdg)?xdg:join29(home,".config"),"opencode"),state={status:"missing"};for(let file of["opencode.json","opencode.jsonc"]){let path=join29(dir,file),text=await readFileOrNull(path);if(!text)continue;let errors=[],config=parse2(text,errors,{allowTrailingComma:!0});if(errors.length>0||!Array.isArray(config?.plugins))continue;let plugins=config.plugins;for(let entry2 of plugins){if(typeof entry2=="string"&&entry2.startsWith("-")){state.status!=="missing"&&selectsPlugin(entry2.slice(1))&&(state={status:"disabled",rule:entry2,file:path});continue}let target=typeof entry2=="string"?entry2:entry2?.package;(target===PLUGIN_SOURCE||state.status!=="missing"&&target&&selectsPlugin(target))&&(state={status:"enabled"})}}return state}async function setupOpenCodePlugin(client,opts){let majorVersion=await openCodeMajorVersion();if(majorVersion===void 0)return{status:"not_detected",message:"OpenCode was not detected on this machine."};if(majorVersion<2)return{status:"unsupported",message:"The Vercel plugin needs OpenCode 2. Upgrade OpenCode, then re-run `vercel setup plugin --agent opencode`."};let state=await pluginConfigState(opts.home);if(state.status==="disabled")return{status:"disabled",message:`The Vercel plugin is disabled by "${state.rule}" in ${state.file}. Remove that entry or add "${PLUGIN_ID}" after it to enable the plugin.`};if(state.status==="enabled")return{status:"up_to_date",message:"Vercel plugin for OpenCode is installed."};if(opts.dryRun)return{status:"dry_run",action:"install",message:"Setup would install the Vercel plugin for OpenCode."};if(!opts.yes){if(!opts.canPrompt)return{status:"confirmation_required",message:"Re-run with --yes to install the Vercel plugin for OpenCode."};if(printAlignedLabel("Plugin",`Vercel for OpenCode (${PLUGIN_SOURCE})`),!await client.input.confirm("Install this plugin?",!0))return{status:"declined",message:"Skipped the Vercel plugin for OpenCode."}}output_manager_default.spinner("Installing the Vercel plugin for OpenCode\u2026");try{await(0,import_execa.default)("opencode",["plugin","add",PLUGIN_SOURCE],{stdin:"ignore",timeout:12e4})}catch{return{status:"failed",message:`Failed to install the Vercel plugin for OpenCode. Run \`opencode plugin add ${PLUGIN_SOURCE}\` to finish setup.`}}finally{output_manager_default.stopSpinner()}return{status:"installed",message:"Installed the Vercel plugin for OpenCode. Restart OpenCode, then run /mcps to sign in to the Vercel MCP server."}}var SetupTelemetryClient=class extends TelemetryClient{trackCliSubcommandPlugin(actual){this.trackCliSubcommand({subcommand:"plugin",value:actual})}trackCliSubcommandGateway(actual){this.trackCliSubcommand({subcommand:"gateway",value:actual})}trackCliSubcommandSkills(actual){this.trackCliSubcommand({subcommand:"skills",value:actual})}trackCliOptionAgent(agents){for(let agent of agents??[])this.trackCliOption({option:"agent",value:agent})}trackCliFlagPlugin(v){v&&this.trackCliFlag("plugin")}trackCliFlagGateway(v){v&&this.trackCliFlag("gateway")}trackCliFlagDryRun(v){v&&this.trackCliFlag("dry-run")}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliOptionKey(v){v!==void 0&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliFlagReconfigure(v){v&&this.trackCliFlag("reconfigure")}trackCliFlagNoSessionMigration(v){v&&this.trackCliFlag("no-session-migration")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}};var COMMAND_CONFIG11={plugin:getCommandAliases(pluginSubcommand),gateway:getCommandAliases(gatewaySubcommand),skills:getCommandAliases(skillsSubcommand)},STEP_LABELS={plugin:"Vercel plugin",gateway:"AI Gateway"};async function setup(client){let machine=shouldEmitNonInteractiveCommandError(client),telemetry=new SetupTelemetryClient({opts:{store:client.telemetryEventStore}}),routingArgs;try{routingArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(setupCommand.options),{permissive:!0})}catch(error){return printError(error),2}let{subcommand,subcommandOriginal}=getSubcommand(routingArgs.args.slice(1),COMMAND_CONFIG11);if(subcommand==="skills"){if(routingArgs.flags["--help"])return telemetry.trackCliFlagHelp("setup",subcommandOriginal),output_manager_default.print(help(skillsSubcommand,{stream:client.stderr,parent:setupCommand,columns:client.stderr.columns})),0;telemetry.trackCliSubcommandSkills(subcommandOriginal);let{default:setupSkills}=await import("./chunks/skills-DZYJV7BE.js");return setupSkills(client)}let stepSubcommand=subcommand==="plugin"||subcommand==="gateway"?subcommand:void 0,command=stepSubcommand==="plugin"?pluginSubcommand:stepSubcommand==="gateway"?gatewaySubcommand:setupCommand,parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(command.options))}catch(error){return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,`Invalid setup arguments. Run vercel setup${stepSubcommand?` ${stepSubcommand}`:""} --help for usage.`),printError(error),2}let flags=parsedArgs.flags;if(flags["--help"])return telemetry.trackCliFlagHelp("setup",stepSubcommand?subcommandOriginal:void 0),output_manager_default.print(help(command,{stream:client.stderr,parent:stepSubcommand?setupCommand:void 0,columns:client.stderr.columns})),0;if(parsedArgs.args.length>(stepSubcommand?2:1)){let message="The setup command does not accept positional arguments. Use vercel setup plugin, gateway, or skills to run one step.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}flags["--plugin"]&&warnDeprecatedSubcommand(client,"setup --plugin","setup plugin"),flags["--gateway"]&&warnDeprecatedSubcommand(client,"setup --gateway","setup gateway");let onlyPlugin=stepSubcommand==="plugin"||!!flags["--plugin"],onlyGateway=stepSubcommand==="gateway"||!!flags["--gateway"],dryRun=flags["--dry-run"],yes=flags["--yes"],agents=flags["--agent"]?[...new Set(flags["--agent"].map(agent=>agent.toLowerCase()))]:void 0;if(agents?.some(agent=>!getAgentById(agent)||onlyPlugin&&!onlyGateway&&!["claude-code","codex","opencode"].includes(agent))){let message=onlyPlugin&&!onlyGateway?"Plugin setup supports --agent claude-code, --agent codex, and --agent opencode.":"Unknown coding agent. Run vercel ai-gateway setup --help for supported agents.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}stepSubcommand==="plugin"?telemetry.trackCliSubcommandPlugin(subcommandOriginal):stepSubcommand==="gateway"&&telemetry.trackCliSubcommandGateway(subcommandOriginal),telemetry.trackCliOptionAgent(agents),telemetry.trackCliFlagPlugin(flags["--plugin"]),telemetry.trackCliFlagGateway(flags["--gateway"]),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagYes(yes),telemetry.trackCliFlagAll(flags["--all"]),telemetry.trackCliOptionKey(flags["--key"]),telemetry.trackCliFlagReconfigure(flags["--reconfigure"]),telemetry.trackCliFlagNoSessionMigration(flags["--no-session-migration"]);let steps=[];(onlyPlugin||!onlyGateway)&&steps.push("plugin"),(onlyGateway||!onlyPlugin)&&steps.push("gateway");let canPrompt2=!!client.stdin.isTTY&&!machine,home=homedir2(),outcomes=new Map;try{for(let step of steps){output_manager_default.print(`
|
|
192
|
+
`}function getDnsMethods(diagnosis){let step=diagnosis.steps.find(candidate=>candidate.kind==="configure-dns");return step?.kind==="configure-dns"?step.methods:[]}function getRecommendedNameservers(methods){let method=methods.find(candidate=>candidate.kind==="nameservers");return method?.kind==="nameservers"?method.nameservers:[]}function serializeProject(project){return project.kind==="none"?null:project.kind==="attached"?{idOrName:project.label,attached:!0,verified:project.domain.verified,verification:project.domain.verification??[],verificationError:project.verificationError?{code:project.verificationError.code||"verification_failed",message:project.verificationError.serverMessage||project.verificationError.message}:null}:{idOrName:project.idOrName,attached:!1}}async function verify(client,argv){let telemetry=new DomainsVerifyTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(verifySubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:errorMessage(error),next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify --help"),when:"See valid arguments and options"}]})}let{args,flags}=parsedArgs,[domainName]=args;if(!domainName||args.length!==1)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.MISSING_ARGUMENTS,code:"missing_arguments",message:"A single domain is required.",next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"),when:"Replace <domain> with the domain to check"}],humanMessage:`${getCommandName("domains verify <domain>")} expects one argument`});let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:formatResult.error,next:[{command:buildCommandWithGlobalFlags(client.argv,`domains verify ${shellQuoteCommandArg(domainName)} --json`),when:"Retry with the supported JSON format"}]});telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliFlagStrict(flags["--strict"]),telemetry.trackCliOptionFormat(flags["--format"]);let options={domainName,project:flags["--project"],strict:!!flags["--strict"],outputMode:getOutputMode(client,formatResult.jsonOutput)};try{return await run(client,options)}catch(error){return output_manager_default.stopSpinner(),isStructuredOutput(options.outputMode)?writeCommandError(client,options.outputMode,{reason:AGENT_REASON.API_ERROR,code:"api_error",message:errorMessage(error),next:[{command:buildVerifyCommand(client,options),when:"Retry the domain check"}]}):(output_manager_default.prettyError(error),1)}}async function run(client,options){let elapsed=stamp_default();options.outputMode==="human"&&output_manager_default.spinner(`Checking DNS configuration for ${options.domainName}`);let acquisition=await acquireVerificationFacts(client,options);if(output_manager_default.stopSpinner(),!acquisition.ok)return writeCommandError(client,options.outputMode,commandErrorForAcquisition(client,options,acquisition.error));let diagnosis=diagnoseDomain(acquisition.facts,buildDiagnosisCommands(client,options));return isStructuredOutput(options.outputMode)?client.stdout.write(renderStructuredOutput(diagnosis)):writeHumanOutput(renderHumanOutput(diagnosis,elapsed())),diagnosis.exitCode}function getOutputMode(client,jsonOutput){return jsonOutput?"json":shouldEmitNonInteractiveCommandError(client)?"non-interactive":"human"}function isStructuredOutput(mode){return mode!=="human"}function buildDiagnosisCommands(client,options){return{teamsList:buildTeamsListCommand(client),verify:scopeOverride=>buildVerifyCommand(client,options,scopeOverride),attachProject:projectIdOrName=>{let projectArgument=projectIdOrName==="<project>"?projectIdOrName:shellQuoteCommandArg(projectIdOrName);return buildCommandWithGlobalFlags(client.argv,`domains add ${shellQuoteCommandArg(options.domainName)} ${projectArgument}`)},openUrl:openUrlInBrowserCommand}}function commandErrorForAcquisition(client,options,error){let next=error.kind==="permission-denied"?[{command:buildTeamsListCommand(client),when:"List teams to find the scope that owns the project"},{command:buildVerifyCommand(client,options,"<team>"),when:"Replace <team> with the owning team and retry"}]:[{command:error.kind==="invalid-domain"?buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"):buildVerifyCommand(client,options),when:error.kind==="invalid-domain"?"Replace <domain> with a valid domain name":"Retry the domain check"}];return{reason:reasonForAcquisitionError(error),code:error.code,message:error.message,next}}function reasonForAcquisitionError(error){return error.kind==="invalid-domain"?AGENT_REASON.INVALID_DOMAIN:error.kind==="permission-denied"?AGENT_REASON.PERMISSION_DENIED:error.kind==="timeout"?"timeout":error.kind==="unexpected-dns-response"?"unexpected_dns_response":AGENT_REASON.API_ERROR}function buildVerifyCommand(client,options,scopeOverride){let parts=["domains","verify",shellQuoteCommandArg(options.domainName)];return options.project&&parts.push("--project",shellQuoteCommandArg(options.project)),options.strict&&parts.push("--strict"),options.outputMode==="json"&&parts.push("--json"),scopeOverride&&parts.push("--scope",scopeOverride),buildCommandWithGlobalFlags(client.argv,parts.join(" "),packageName,scopeOverride?{excludeFlags:["--scope","--team","-S","-T"]}:void 0)}function buildTeamsListCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams ls",packageName,{excludeFlags:["--scope","--team","-S","-T"]})}function shellQuoteCommandArg(value){return/^[a-zA-Z0-9_./:@%+,=-]+$/.test(value)?value:`"${value.replace(/(["\\$`])/g,"\\$1")}"`}function writeCommandError(client,outputMode,error){return output_manager_default.stopSpinner(),isStructuredOutput(outputMode)?client.stdout.write(renderStructuredError(error)):output_manager_default.error(error.humanMessage??error.message),getExitCodeForReason(error.reason)}function writeHumanOutput(result){result.lead.kind==="success"?output_manager_default.success(result.lead.message):output_manager_default.log(result.lead.message);for(let section of result.sections)output_manager_default.print(section)}function errorMessage(error){return error instanceof Error?error.message:String(error)}var DomainsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandMove(actual){this.trackCliSubcommand({subcommand:"move",value:actual})}trackCliSubcommandBuy(actual){this.trackCliSubcommand({subcommand:"buy",value:actual})}trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}trackCliSubcommandPrice(actual){this.trackCliSubcommand({subcommand:"price",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandTransferIn(actual){this.trackCliSubcommand({subcommand:"transfer-in",value:actual})}trackCliSubcommandRenew(actual){this.trackCliSubcommand({subcommand:"renew",value:actual})}trackCliSubcommandAutoRenew(actual){this.trackCliSubcommand({subcommand:"auto-renew",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandVerify(actual){this.trackCliSubcommand({subcommand:"verify",value:actual})}};var COMMAND_CONFIG10={add:["add"],buy:["buy"],check:["check"],inspect:["inspect"],ls:["ls","list"],move:["move"],price:["price"],search:["search"],rm:["rm","remove"],transferIn:["transfer-in"],renew:["renew"],autoRenew:["auto-renew"],verify:["verify"]};async function main2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(domainsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),2}let telemetry=new DomainsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG10),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("domains"),output_manager_default.print(help(domainsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:domainsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(addSubcommand)):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(inspectSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect4(client,args));case"move":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(moveSubcommand)):(telemetry.trackCliSubcommandMove(subcommandOriginal),move(client,args));case"buy":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(buySubcommand)):(telemetry.trackCliSubcommandBuy(subcommandOriginal),buy(client,args));case"check":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(checkSubcommand)):(telemetry.trackCliSubcommandCheck(subcommandOriginal),check(client,args));case"price":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(priceSubcommand)):(telemetry.trackCliSubcommandPrice(subcommandOriginal),price(client,args));case"search":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(searchSubcommand)):(telemetry.trackCliSubcommandSearch(subcommandOriginal),search(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(removeSubcommand2)):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"transferIn":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(transferInSubcommand)):(telemetry.trackCliSubcommandTransferIn(subcommandOriginal),transferIn(client,args));case"renew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(renewSubcommand)):(telemetry.trackCliSubcommandRenew(subcommandOriginal),renew(client,args));case"autoRenew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(autoRenewSubcommand)):(telemetry.trackCliSubcommandAutoRenew(subcommandOriginal),autoRenew(client,args));case"verify":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(verifySubcommand)):(telemetry.trackCliSubcommandVerify(subcommandOriginal),verify(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(listSubcommand2)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args))}}var import_chalk41=__toESM(require_source(),1);import{homedir as homedir2}from"node:os";var import_execa=__toESM(require_execa(),1);init_main();import{isAbsolute as isAbsolute6,join as join29}from"node:path";var PLUGIN_SOURCE="github:vercel/vercel-plugin",PLUGIN_ID="vercel-plugin";async function openCodeMajorVersion(){try{let{stdout}=await(0,import_execa.default)("opencode",["--version"],{stdin:"ignore",timeout:1e4}),match=/(\d+)\.\d+\.\d+/.exec(stdout);return match?Number(match[1]):void 0}catch{return}}function selectsPlugin(selector){return selector==="*"||(selector.endsWith(".*")?PLUGIN_ID.startsWith(selector.slice(0,-1)):selector===PLUGIN_ID)}async function pluginConfigState(home){let xdg=process.env.XDG_CONFIG_HOME,dir=process.env.OPENCODE_CONFIG_DIR||join29(xdg&&isAbsolute6(xdg)?xdg:join29(home,".config"),"opencode"),state={status:"missing"};for(let file of["opencode.json","opencode.jsonc"]){let path=join29(dir,file),text=await readFileOrNull(path);if(!text)continue;let errors=[],config=parse2(text,errors,{allowTrailingComma:!0});if(errors.length>0||!Array.isArray(config?.plugins))continue;let plugins=config.plugins;for(let entry2 of plugins){if(typeof entry2=="string"&&entry2.startsWith("-")){state.status!=="missing"&&selectsPlugin(entry2.slice(1))&&(state={status:"disabled",rule:entry2,file:path});continue}let target=typeof entry2=="string"?entry2:entry2?.package;(target===PLUGIN_SOURCE||state.status!=="missing"&&target&&selectsPlugin(target))&&(state={status:"enabled"})}}return state}async function setupOpenCodePlugin(client,opts){let majorVersion=await openCodeMajorVersion();if(majorVersion===void 0)return{status:"not_detected",message:"OpenCode was not detected on this machine."};if(majorVersion<2)return{status:"unsupported",message:"The Vercel plugin needs OpenCode 2. Upgrade OpenCode, then re-run `vercel setup plugin --agent opencode`."};let state=await pluginConfigState(opts.home);if(state.status==="disabled")return{status:"disabled",message:`The Vercel plugin is disabled by "${state.rule}" in ${state.file}. Remove that entry or add "${PLUGIN_ID}" after it to enable the plugin.`};if(state.status==="enabled")return{status:"up_to_date",message:"Vercel plugin for OpenCode is installed."};if(opts.dryRun)return{status:"dry_run",action:"install",message:"Setup would install the Vercel plugin for OpenCode."};if(!opts.yes){if(!opts.canPrompt)return{status:"confirmation_required",message:"Re-run with --yes to install the Vercel plugin for OpenCode."};if(printAlignedLabel("Plugin",`Vercel for OpenCode (${PLUGIN_SOURCE})`),!await client.input.confirm("Install this plugin?",!0))return{status:"declined",message:"Skipped the Vercel plugin for OpenCode."}}output_manager_default.spinner("Installing the Vercel plugin for OpenCode\u2026");try{await(0,import_execa.default)("opencode",["plugin","add",PLUGIN_SOURCE],{stdin:"ignore",timeout:12e4})}catch{return{status:"failed",message:`Failed to install the Vercel plugin for OpenCode. Run \`opencode plugin add ${PLUGIN_SOURCE}\` to finish setup.`}}finally{output_manager_default.stopSpinner()}return{status:"installed",message:"Installed the Vercel plugin for OpenCode. Restart OpenCode, then run /mcps to sign in to the Vercel MCP server."}}var SetupTelemetryClient=class extends TelemetryClient{trackCliSubcommandPlugin(actual){this.trackCliSubcommand({subcommand:"plugin",value:actual})}trackCliSubcommandGateway(actual){this.trackCliSubcommand({subcommand:"gateway",value:actual})}trackCliSubcommandSkills(actual){this.trackCliSubcommand({subcommand:"skills",value:actual})}trackCliOptionAgent(agents){for(let agent of agents??[])this.trackCliOption({option:"agent",value:agent})}trackCliFlagPlugin(v){v&&this.trackCliFlag("plugin")}trackCliFlagGateway(v){v&&this.trackCliFlag("gateway")}trackCliFlagDryRun(v){v&&this.trackCliFlag("dry-run")}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliOptionKey(v){v!==void 0&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliFlagReconfigure(v){v&&this.trackCliFlag("reconfigure")}trackCliFlagNoSessionMigration(v){v&&this.trackCliFlag("no-session-migration")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}};var COMMAND_CONFIG11={plugin:getCommandAliases(pluginSubcommand),gateway:getCommandAliases(gatewaySubcommand),skills:getCommandAliases(skillsSubcommand)},STEP_LABELS={plugin:"Vercel plugin",gateway:"AI Gateway"};async function setup(client){let machine=shouldEmitNonInteractiveCommandError(client),telemetry=new SetupTelemetryClient({opts:{store:client.telemetryEventStore}}),routingArgs;try{routingArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(setupCommand.options),{permissive:!0})}catch(error){return printError(error),2}let{subcommand,subcommandOriginal}=getSubcommand(routingArgs.args.slice(1),COMMAND_CONFIG11);if(subcommand==="skills"){if(routingArgs.flags["--help"])return telemetry.trackCliFlagHelp("setup",subcommandOriginal),output_manager_default.print(help(skillsSubcommand,{stream:client.stderr,parent:setupCommand,columns:client.stderr.columns})),0;telemetry.trackCliSubcommandSkills(subcommandOriginal);let{default:setupSkills}=await import("./chunks/skills-X5TPVYXW.js");return setupSkills(client)}let stepSubcommand=subcommand==="plugin"||subcommand==="gateway"?subcommand:void 0,command=stepSubcommand==="plugin"?pluginSubcommand:stepSubcommand==="gateway"?gatewaySubcommand:setupCommand,parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(command.options))}catch(error){return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,`Invalid setup arguments. Run vercel setup${stepSubcommand?` ${stepSubcommand}`:""} --help for usage.`),printError(error),2}let flags=parsedArgs.flags;if(flags["--help"])return telemetry.trackCliFlagHelp("setup",stepSubcommand?subcommandOriginal:void 0),output_manager_default.print(help(command,{stream:client.stderr,parent:stepSubcommand?setupCommand:void 0,columns:client.stderr.columns})),0;if(parsedArgs.args.length>(stepSubcommand?2:1)){let message="The setup command does not accept positional arguments. Use vercel setup plugin, gateway, or skills to run one step.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}flags["--plugin"]&&warnDeprecatedSubcommand(client,"setup --plugin","setup plugin"),flags["--gateway"]&&warnDeprecatedSubcommand(client,"setup --gateway","setup gateway");let onlyPlugin=stepSubcommand==="plugin"||!!flags["--plugin"],onlyGateway=stepSubcommand==="gateway"||!!flags["--gateway"],dryRun=flags["--dry-run"],yes=flags["--yes"],agents=flags["--agent"]?[...new Set(flags["--agent"].map(agent=>agent.toLowerCase()))]:void 0;if(agents?.some(agent=>!getAgentById(agent)||onlyPlugin&&!onlyGateway&&!["claude-code","codex","opencode"].includes(agent))){let message=onlyPlugin&&!onlyGateway?"Plugin setup supports --agent claude-code, --agent codex, and --agent opencode.":"Unknown coding agent. Run vercel ai-gateway setup --help for supported agents.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}stepSubcommand==="plugin"?telemetry.trackCliSubcommandPlugin(subcommandOriginal):stepSubcommand==="gateway"&&telemetry.trackCliSubcommandGateway(subcommandOriginal),telemetry.trackCliOptionAgent(agents),telemetry.trackCliFlagPlugin(flags["--plugin"]),telemetry.trackCliFlagGateway(flags["--gateway"]),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagYes(yes),telemetry.trackCliFlagAll(flags["--all"]),telemetry.trackCliOptionKey(flags["--key"]),telemetry.trackCliFlagReconfigure(flags["--reconfigure"]),telemetry.trackCliFlagNoSessionMigration(flags["--no-session-migration"]);let steps=[];(onlyPlugin||!onlyGateway)&&steps.push("plugin"),(onlyGateway||!onlyPlugin)&&steps.push("gateway");let canPrompt2=!!client.stdin.isTTY&&!machine,home=homedir2(),outcomes=new Map;try{for(let step of steps){output_manager_default.print(`
|
|
193
193
|
${import_chalk41.default.bold(` ${STEP_LABELS[step]}`)}
|
|
194
194
|
`);let outcome=step==="plugin"?await runPluginStep(client,{yes:!!yes,dryRun:!!dryRun,canPrompt:canPrompt2,home,machine,onlyStep:steps.length===1,agents}):await runGatewayStep(client,{yes:!!yes,dryRun:!!dryRun,agents,all:!!flags["--all"],key:flags["--key"],reconfigure:!!flags["--reconfigure"],noSessionMigration:!!flags["--no-session-migration"]});if(outcomes.set(step,outcome),machine&&!outcome.ok)break}}catch(error){return output_manager_default.stopSpinner(),machine&&writeSetupError(client,"setup_failed","Failed to complete setup."),printError(error),1}let failed=[...outcomes.values()].some(o=>!o.ok),complete=[...outcomes.values()].every(o=>o.complete),gutter=failed?import_chalk41.default.red("\u2717"):complete?import_chalk41.default.green("\u2713"):" ",heading=complete?dryRun?"Dry run complete":"Setup complete":"Setup incomplete";output_manager_default.print(`
|
|
195
195
|
${gutter} ${import_chalk41.default.bold(heading)}
|