@vercel/cli-support 65.4.0 → 65.5.0-snapshot-8a613d8ad85d
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/README.md +22 -0
- package/dist/chunks/add-6UOKR26K.js +8 -0
- package/dist/chunks/add-GULZ6EGJ.js +8 -0
- package/dist/chunks/add-RPAOJH5O.js +8 -0
- package/dist/chunks/build-MLAKPRSC.js +7 -0
- package/dist/chunks/{chunk-ADLBLGT3.js → chunk-26QK3I2S.js} +1 -1
- package/dist/chunks/chunk-2BKALEOP.js +7 -0
- package/dist/chunks/chunk-2FHZYQPY.js +7 -0
- package/dist/chunks/{chunk-TIPQQ4TG.js → chunk-2QIJEHNE.js} +1 -1
- package/dist/chunks/{chunk-JP33AIDQ.js → chunk-36NK2Z3C.js} +1 -1
- package/dist/chunks/{chunk-D6REP5QQ.js → chunk-3E364MJE.js} +1 -1
- package/dist/chunks/{chunk-EEUJLJEJ.js → chunk-3H36RI7C.js} +1 -1
- package/dist/chunks/{chunk-JUSR7V2L.js → chunk-3NG2EYQ5.js} +1 -1
- package/dist/chunks/{chunk-AYUUSAB7.js → chunk-4G7ZQONX.js} +1 -1
- package/dist/chunks/{chunk-SYFG2RM6.js → chunk-4HJGSSSZ.js} +1 -1
- package/dist/chunks/{chunk-CWM2F235.js → chunk-55H6G46X.js} +1 -1
- package/dist/chunks/{chunk-6TXEVQA4.js → chunk-5CZNUB7Y.js} +1 -1
- package/dist/chunks/{chunk-ZN6CQWVP.js → chunk-5EMSOR2P.js} +1 -1
- package/dist/chunks/{chunk-NAX6IARA.js → chunk-5K426HWC.js} +1 -1
- package/dist/chunks/{chunk-773GOZIR.js → chunk-5SIC5273.js} +1 -1
- package/dist/chunks/chunk-5WYPJ2T5.js +25 -0
- package/dist/chunks/{chunk-MBEKRUTQ.js → chunk-6IATT2ID.js} +2 -2
- package/dist/chunks/{chunk-KPQLUGFI.js → chunk-6WMO5G45.js} +3 -3
- package/dist/chunks/{chunk-6OVX3PWM.js → chunk-75JI2SZX.js} +1 -1
- package/dist/chunks/{chunk-ECEDD646.js → chunk-7G4PQR6J.js} +1 -1
- package/dist/chunks/chunk-7SAEZ4NC.js +7 -0
- package/dist/chunks/{chunk-363SJ4TN.js → chunk-7VTPAXDC.js} +1 -1
- package/dist/chunks/chunk-A2UZ2O7H.js +7 -0
- package/dist/chunks/{chunk-3LIKVGFT.js → chunk-A3RU52F4.js} +1 -1
- package/dist/chunks/{chunk-CC6FLKIP.js → chunk-AIRQFG5A.js} +1 -1
- package/dist/chunks/{chunk-IOZ3I765.js → chunk-AOC6XXOO.js} +1 -1
- package/dist/chunks/{chunk-EISD3RG7.js → chunk-ARQMFBV4.js} +1 -1
- package/dist/chunks/{chunk-UHBMX3OK.js → chunk-AUY363W7.js} +1 -1
- package/dist/chunks/chunk-BGWS5R5R.js +9 -0
- package/dist/chunks/chunk-C6IITJ5S.js +7 -0
- package/dist/chunks/{chunk-OHEOYFBU.js → chunk-CLVEFWEX.js} +1 -1
- package/dist/chunks/{chunk-KGBIRIFF.js → chunk-CU2FTX57.js} +1 -1
- package/dist/chunks/{chunk-YHULP2KK.js → chunk-CWO4HMKU.js} +1 -1
- package/dist/chunks/{chunk-EU2GBIPC.js → chunk-CZINAGH6.js} +1 -1
- package/dist/chunks/{chunk-QIVX6SCR.js → chunk-DAUAVRFC.js} +1 -1
- package/dist/chunks/{chunk-GA277JFB.js → chunk-DPM33VFZ.js} +1 -1
- package/dist/chunks/{chunk-Q5ODLDCU.js → chunk-DSY2S2YT.js} +1 -1
- package/dist/chunks/{chunk-XP3FT56R.js → chunk-DWOJP4ST.js} +3 -3
- package/dist/chunks/chunk-ED3VA7D4.js +7 -0
- package/dist/chunks/{chunk-GG5RME4X.js → chunk-EE2FTI3R.js} +1 -1
- package/dist/chunks/{chunk-QVZAAMGQ.js → chunk-EFEQQXRU.js} +1 -1
- package/dist/chunks/{chunk-DKJL2KV7.js → chunk-EPO7P734.js} +1 -1
- package/dist/chunks/{chunk-7QAGSRCU.js → chunk-EQT2VHL2.js} +1 -1
- package/dist/chunks/chunk-ETEVOJQJ.js +8 -0
- package/dist/chunks/chunk-EWP5WICJ.js +10 -0
- package/dist/chunks/chunk-F22QLVTX.js +7 -0
- package/dist/chunks/{chunk-XC46OAAT.js → chunk-FAEC4BER.js} +1 -1
- package/dist/chunks/{chunk-LSQREJXO.js → chunk-FAELJM4F.js} +1 -1
- package/dist/chunks/{chunk-7R6TRRG5.js → chunk-FNA4MIOH.js} +1 -1
- package/dist/chunks/{chunk-L3JYCXVB.js → chunk-GFD6UAAO.js} +2 -2
- package/dist/chunks/{chunk-U2OBPULW.js → chunk-GP55VEOQ.js} +1 -1
- package/dist/chunks/{chunk-FSPPKNKN.js → chunk-GVPVWHFK.js} +1 -1
- package/dist/chunks/{chunk-527GBU3K.js → chunk-HMWDOAWO.js} +1 -1
- package/dist/chunks/{chunk-7L2K4OKM.js → chunk-HVDGNAPM.js} +1 -1
- package/dist/chunks/{chunk-QVHXFHBV.js → chunk-I2WEQWCA.js} +1 -1
- package/dist/chunks/{chunk-JRPNHWA3.js → chunk-IC3THLYP.js} +1 -1
- package/dist/chunks/{chunk-IQKGQ2Y2.js → chunk-J6L5MDTX.js} +1 -1
- package/dist/chunks/{chunk-YMZ6WBKB.js → chunk-JCGEXU7T.js} +3 -3
- package/dist/chunks/{chunk-7L5QUDUR.js → chunk-JGMJP4T3.js} +1 -1
- package/dist/chunks/{chunk-ZQBSAMFL.js → chunk-JHNLBVO2.js} +1 -1
- package/dist/chunks/{chunk-HTXDC7E2.js → chunk-JMLKK7RL.js} +2 -2
- package/dist/chunks/{chunk-T6243EDS.js → chunk-JSAY52FE.js} +1 -1
- package/dist/chunks/{chunk-C7FQMC6D.js → chunk-JWUXHL35.js} +1 -1
- package/dist/chunks/{chunk-KQCROPL3.js → chunk-JXAEI2GJ.js} +1 -1
- package/dist/chunks/{chunk-VNIKIQVE.js → chunk-KHADRPBJ.js} +1 -1
- package/dist/chunks/{chunk-GCZVIDNG.js → chunk-KWKEBKUR.js} +1 -1
- package/dist/chunks/chunk-KY7LDQRX.js +7 -0
- package/dist/chunks/{chunk-YEZJNXQX.js → chunk-L4XLDN6T.js} +1 -1
- package/dist/chunks/{chunk-EGNR2DEI.js → chunk-LOO42IMZ.js} +1 -1
- package/dist/chunks/{chunk-CBVKB3DT.js → chunk-LT5UZRMK.js} +1 -1
- package/dist/chunks/{chunk-FUX6LKNP.js → chunk-LUX4PBJL.js} +1 -1
- package/dist/chunks/chunk-M7LUSXMG.js +7 -0
- package/dist/chunks/{chunk-ANMDN3EG.js → chunk-MFW6IJIK.js} +1 -1
- package/dist/chunks/{chunk-UGNIIDHR.js → chunk-MLGQ233X.js} +1 -1
- package/dist/chunks/chunk-MY4MONOH.js +7 -0
- package/dist/chunks/{chunk-N6JBQMOF.js → chunk-MZQEDXOH.js} +1 -1
- package/dist/chunks/chunk-N5CXIFE2.js +7 -0
- package/dist/chunks/{chunk-LQVSU5HR.js → chunk-NM44RWS6.js} +1 -1
- package/dist/chunks/{chunk-FHU2O7ZJ.js → chunk-NVNE3W7S.js} +1 -1
- package/dist/chunks/chunk-NZPGWZLV.js +9 -0
- package/dist/chunks/{chunk-462YCCJZ.js → chunk-O7COT3YB.js} +1 -1
- package/dist/chunks/{chunk-KY335KWI.js → chunk-ODAV7Z2H.js} +1 -1
- package/dist/chunks/{chunk-HCRD3JFL.js → chunk-OKNDHNH6.js} +1 -1
- package/dist/chunks/{chunk-Q4KTAQB3.js → chunk-OQX4YVGU.js} +1 -1
- package/dist/chunks/chunk-ORJBK5FT.js +9 -0
- package/dist/chunks/{chunk-5KUUMQ3M.js → chunk-OTYF3ZZW.js} +1 -1
- package/dist/chunks/{chunk-FGFLTLEA.js → chunk-P6ZTEDX2.js} +1 -1
- package/dist/chunks/{chunk-O72YDZKD.js → chunk-PHHZ6J7Q.js} +1 -1
- package/dist/chunks/{chunk-RMZTB2IU.js → chunk-PRFIFS3Q.js} +1 -1
- package/dist/chunks/{chunk-R2XHJDAP.js → chunk-QDPYU6KS.js} +1 -1
- package/dist/chunks/{chunk-JLEJB6KM.js → chunk-QHM6OK76.js} +1 -1
- package/dist/chunks/{chunk-CR3NBTHV.js → chunk-QNL22LAW.js} +1 -1
- package/dist/chunks/{chunk-5V53NA6C.js → chunk-QUSEBFDO.js} +1 -1
- package/dist/chunks/{chunk-DQ2SVW4R.js → chunk-R3BEQTZZ.js} +1 -1
- package/dist/chunks/{chunk-BUJITHGZ.js → chunk-RCUDI7OF.js} +1 -1
- package/dist/chunks/{chunk-Y5ZMKL7E.js → chunk-RMW2FDXS.js} +1 -1
- package/dist/chunks/{chunk-KRPY5FHJ.js → chunk-RQVIMYKN.js} +1 -1
- package/dist/chunks/chunk-RWPQOJTT.js +22 -0
- package/dist/chunks/{chunk-2TUVL6WE.js → chunk-SDOPVIKJ.js} +1 -1
- package/dist/chunks/{chunk-3XW7N4W3.js → chunk-SKSOCUDZ.js} +1 -1
- package/dist/chunks/chunk-SLDWAIO3.js +18 -0
- package/dist/chunks/{chunk-JWCEHQQF.js → chunk-SW3JRXUW.js} +1 -1
- package/dist/chunks/{chunk-M2NXKZKX.js → chunk-TGOGYSBO.js} +1 -1
- package/dist/chunks/chunk-TZT3VYZ3.js +7 -0
- package/dist/chunks/{chunk-F6EBOT64.js → chunk-UJQ6PBRF.js} +1 -1
- package/dist/chunks/{chunk-BVGGTBYE.js → chunk-UWMPVTXG.js} +1 -1
- package/dist/chunks/{chunk-R6BEOVTU.js → chunk-VAWZZK3Y.js} +1 -1
- package/dist/chunks/{chunk-4N6LMERQ.js → chunk-VLYVVC3P.js} +11 -11
- package/dist/chunks/{chunk-HSFKISDH.js → chunk-VQ755MPP.js} +1 -1
- package/dist/chunks/{chunk-QB7F3UAP.js → chunk-VUQWLLNI.js} +1 -1
- package/dist/chunks/chunk-VWHIWUGJ.js +7 -0
- package/dist/chunks/chunk-WDUHDLUA.js +14 -0
- package/dist/chunks/{chunk-K5U47EVH.js → chunk-WICRM2JL.js} +1 -1
- package/dist/chunks/{chunk-KJA2GKPT.js → chunk-WSVYZKI6.js} +1 -1
- package/dist/chunks/{chunk-N2FLYCCO.js → chunk-XAU3KTPX.js} +1 -1
- package/dist/chunks/chunk-XCKUJZUG.js +10 -0
- package/dist/chunks/{chunk-WDXW6A4H.js → chunk-XE24Y6NM.js} +2 -2
- package/dist/chunks/{chunk-RW3X523R.js → chunk-XSQVCDSD.js} +1 -1
- package/dist/chunks/{chunk-KW6GSQXV.js → chunk-XTKGBVSF.js} +1 -1
- package/dist/chunks/{chunk-2K3ISCQ6.js → chunk-YALEYPMP.js} +1 -1
- package/dist/chunks/chunk-YCJHUYBJ.js +19 -0
- package/dist/chunks/{chunk-TEYREL44.js → chunk-YIRSRF6D.js} +1 -1
- package/dist/chunks/chunk-YQDOADMG.js +10 -0
- package/dist/chunks/{chunk-PFPJLIFF.js → chunk-YT3QAZQF.js} +1 -1
- package/dist/chunks/{chunk-R2BUF6Z7.js → chunk-ZQUVDDPB.js} +1 -1
- package/dist/chunks/{chunk-XVDRGWXM.js → chunk-ZUNQHI5Y.js} +1 -1
- package/dist/chunks/{chunk-KQCFC2JL.js → chunk-ZUYPTLVO.js} +1 -1
- package/dist/chunks/clear-UZWOOGOH.js +8 -0
- package/dist/chunks/compile-vercel-config-2RQDL3RD.js +7 -0
- package/dist/chunks/config-C76IGJ6B.js +8 -0
- package/dist/chunks/config-RMJWRS7O.js +7 -0
- package/dist/chunks/{connect-git-provider-FS5Q2HO4.js → connect-git-provider-IQ7N2NPY.js} +1 -1
- package/dist/chunks/delete-2WBR5JQW.js +9 -0
- package/dist/chunks/delete-OKOBDL7Z.js +10 -0
- package/dist/chunks/{detect-projects-OD4JEAW2.js → detect-projects-XPB3R7VS.js} +1 -1
- package/dist/chunks/detect-services-DRHV22O5.js +7 -0
- package/dist/chunks/disable-DFEABU2Z.js +7 -0
- package/dist/chunks/discard-KGBEMNFT.js +14 -0
- package/dist/chunks/edit-5XIRLUKG.js +9 -0
- package/dist/chunks/edit-PJIDMKUS.js +8 -0
- package/dist/chunks/enable-UDWDPFOI.js +7 -0
- package/dist/chunks/{exec-OZSY46V6.js → exec-PX4GTZNE.js} +1 -1
- package/dist/chunks/{export-EPLYZF2Q.js → export-W75EA6EQ.js} +1 -1
- package/dist/chunks/future-PHSAEQIE.js +7 -0
- package/dist/chunks/generate-cert-for-deploy-C67VL5Z6.js +7 -0
- package/dist/chunks/image-U5CV2PRP.js +7 -0
- package/dist/chunks/import-builders-PHIIX7HW.js +7 -0
- package/dist/chunks/inspect-AU3MX7E2.js +13 -0
- package/dist/chunks/{inspect-CZ7WXYE5.js → inspect-DQQI3PM7.js} +1 -1
- package/dist/chunks/inspect-LJK7I6RZ.js +9 -0
- package/dist/chunks/{inspect-T2AIREYK.js → inspect-RNWLPR7I.js} +1 -1
- package/dist/chunks/{inspect-HFDGZNWC.js → inspect-WHPWW4BI.js} +1 -1
- package/dist/chunks/list-JV26NNYL.js +16 -0
- package/dist/chunks/{list-ON4YTQRN.js → list-QNRFVMMQ.js} +1 -1
- package/dist/chunks/list-YF4FXWUZ.js +12 -0
- package/dist/chunks/login-A4KNOUNA.js +9 -0
- package/dist/chunks/login-COGE7JQU.js +7 -0
- package/dist/chunks/logs-KMQATUYR.js +7 -0
- package/dist/chunks/{ls-FK5XEJEU.js → ls-DTFLHFOW.js} +1 -1
- package/dist/chunks/{ls-A7K4XDQB.js → ls-FOKMPVIB.js} +1 -1
- package/dist/chunks/ls-HMYU2ZGA.js +11 -0
- package/dist/chunks/{ls-2HUJHVLA.js → ls-IHF33MQP.js} +1 -1
- package/dist/chunks/{ls-QGUKJJY5.js → ls-QD54I4S7.js} +1 -1
- package/dist/chunks/{ls-3DVM5HLK.js → ls-RNRMYD3V.js} +1 -1
- package/dist/chunks/ls-ZQLCDIQJ.js +8 -0
- package/dist/chunks/mutate-RMIFQOF6.js +9 -0
- package/dist/chunks/notifications-BFBNV2HY.js +7 -0
- package/dist/chunks/open-L6HEXHAI.js +7 -0
- package/dist/chunks/openapi-6JKCOR7K.js +7 -0
- package/dist/chunks/permissions-UYGTYRKA.js +7 -0
- package/dist/chunks/{plugin-offer-TEGYA3TA.js → plugin-offer-NBHRXMNR.js} +1 -1
- package/dist/chunks/prompt-missing-credentials-2IYIF2JI.js +7 -0
- package/dist/chunks/publish-T2VSTPG4.js +15 -0
- package/dist/chunks/pull-4GL47Z2S.js +7 -0
- package/dist/chunks/purchase-domain-if-available-BHFBD3LW.js +7 -0
- package/dist/chunks/push-CQPIDVTL.js +7 -0
- package/dist/chunks/{query-FXXLX6UB.js → query-HN45ORIB.js} +1 -1
- package/dist/chunks/reauthenticate-FTHGAWK3.js +7 -0
- package/dist/chunks/reorder-7BD5JZKQ.js +10 -0
- package/dist/chunks/reply-2INQJ5KM.js +9 -0
- package/dist/chunks/resolve-DHAJC3I7.js +12 -0
- package/dist/chunks/resolve-agent-team-KGYPHN5F.js +7 -0
- package/dist/chunks/restore-OQKNWEFQ.js +16 -0
- package/dist/chunks/rm-CTP4UZH7.js +8 -0
- package/dist/chunks/rm-GFHEXQQW.js +8 -0
- package/dist/chunks/rm-OG3OXA6H.js +8 -0
- package/dist/chunks/rm-PFZYHXEN.js +8 -0
- package/dist/chunks/rm-XAW3WJ3I.js +8 -0
- package/dist/chunks/{routes-PKTWMDWQ.js → routes-XKEWEA3P.js} +1 -1
- package/dist/chunks/rule-inspect-MKQE5IVJ.js +8 -0
- package/dist/chunks/{schema-ZWE5MNMG.js → schema-TFN5PSYE.js} +2 -2
- package/dist/chunks/schema-XFER2RCF.js +14 -0
- package/dist/chunks/select-org-PFTR6HQZ.js +7 -0
- package/dist/chunks/set-KWOZNGRL.js +7 -0
- package/dist/chunks/setup-and-link-BRYK42L7.js +7 -0
- package/dist/chunks/{skills-RKIGVVNM.js → skills-2MOFBKIE.js} +1 -1
- package/dist/chunks/tags-BHZUQTOQ.js +7 -0
- package/dist/chunks/{types-YM7TMHXW.js → types-IWO5QLAV.js} +1 -1
- package/dist/chunks/{update-BGDQ5TXO.js → update-LP7ZZUFZ.js} +1 -1
- package/dist/commands/build/index.js +2 -2
- package/dist/commands/deploy/index.js +8 -8
- package/dist/commands/dev/index.js +6 -6
- package/dist/commands/env/index.js +3 -3
- package/dist/commands/link/index.js +2 -2
- package/dist/commands/list/index.js +1 -1
- package/dist/commands/project/index.js +4 -4
- package/dist/commands-account.js +18 -18
- package/dist/commands-ai.js +12 -12
- package/dist/commands-blob.js +7 -7
- package/dist/commands-core.js +23 -23
- package/dist/commands-deployments.js +3 -3
- package/dist/commands-flags.js +29 -29
- package/dist/commands-integrations.js +98 -83
- package/dist/commands-observability.js +4 -4
- package/dist/commands-routing.js +23 -23
- package/dist/help.js +1 -1
- package/dist/index.js +7 -7
- package/dist/internal-build.js +2 -2
- package/dist/native-download.js +7 -0
- package/dist/package.json +27 -26
- package/dist/root-help-commands.mjs +1 -1
- package/dist/vc.js +172 -17
- package/dist/version.mjs +1 -1
- package/package.json +20 -19
- package/dist/chunks/add-7NS6HIWC.js +0 -8
- package/dist/chunks/add-NMYFDVXW.js +0 -8
- package/dist/chunks/add-PMJ5BECU.js +0 -8
- package/dist/chunks/build-BCY6HQJG.js +0 -7
- package/dist/chunks/chunk-5IWFRZQT.js +0 -10
- package/dist/chunks/chunk-6I6QJHCY.js +0 -7
- package/dist/chunks/chunk-6VH56CX2.js +0 -19
- package/dist/chunks/chunk-6YXIWZ3X.js +0 -25
- package/dist/chunks/chunk-7E3WREH5.js +0 -7
- package/dist/chunks/chunk-EAXMWCOL.js +0 -63
- package/dist/chunks/chunk-EKZTFGDX.js +0 -7
- package/dist/chunks/chunk-FLHO75XC.js +0 -8
- package/dist/chunks/chunk-GYVJIIYL.js +0 -7
- package/dist/chunks/chunk-JLE7K4SY.js +0 -9
- package/dist/chunks/chunk-KCKYPLIH.js +0 -7
- package/dist/chunks/chunk-LOBA3E72.js +0 -7
- package/dist/chunks/chunk-LW4N3CW6.js +0 -9
- package/dist/chunks/chunk-NGKO2OOU.js +0 -8
- package/dist/chunks/chunk-NW7WWUCQ.js +0 -9
- package/dist/chunks/chunk-O4WNSKQR.js +0 -15
- package/dist/chunks/chunk-OZCQTXI4.js +0 -7
- package/dist/chunks/chunk-QVXS234E.js +0 -7
- package/dist/chunks/chunk-SLGUYM42.js +0 -10
- package/dist/chunks/chunk-TAISZMA2.js +0 -7
- package/dist/chunks/chunk-WEH6XC4Y.js +0 -22
- package/dist/chunks/chunk-WVHCBDTB.js +0 -7
- package/dist/chunks/clear-FKVWDCVA.js +0 -8
- package/dist/chunks/compile-vercel-config-GWAJE44R.js +0 -7
- package/dist/chunks/config-5WVLG5SE.js +0 -8
- package/dist/chunks/config-RMOHN5YT.js +0 -7
- package/dist/chunks/delete-5WMB4WFR.js +0 -9
- package/dist/chunks/delete-EM4JZPFA.js +0 -10
- package/dist/chunks/detect-services-BSJGB4RM.js +0 -7
- package/dist/chunks/disable-QOM7UHQC.js +0 -7
- package/dist/chunks/discard-L5ZH7P5B.js +0 -14
- package/dist/chunks/edit-F3VJGCG2.js +0 -9
- package/dist/chunks/edit-TM7YCWBU.js +0 -8
- package/dist/chunks/enable-72C3QX34.js +0 -7
- package/dist/chunks/future-V77DRMQG.js +0 -7
- package/dist/chunks/generate-cert-for-deploy-Y3YHBMPU.js +0 -7
- package/dist/chunks/image-CVXEXU5R.js +0 -7
- package/dist/chunks/import-builders-PGRKJOOE.js +0 -7
- package/dist/chunks/inspect-BTRNXRJT.js +0 -9
- package/dist/chunks/inspect-FGDVWAQP.js +0 -13
- package/dist/chunks/list-CKRRHAOE.js +0 -12
- package/dist/chunks/list-FLREMGJR.js +0 -16
- package/dist/chunks/login-55LJ5ZA6.js +0 -9
- package/dist/chunks/login-DQRZSD4Z.js +0 -7
- package/dist/chunks/logs-2HQXWOHM.js +0 -7
- package/dist/chunks/ls-4B3QYHCI.js +0 -8
- package/dist/chunks/ls-VTKHPDWS.js +0 -11
- package/dist/chunks/mutate-7ADZBCZM.js +0 -9
- package/dist/chunks/notifications-XZJXE2K4.js +0 -7
- package/dist/chunks/open-EE5IZQD7.js +0 -7
- package/dist/chunks/openapi-QBX62ZXC.js +0 -7
- package/dist/chunks/permissions-VYJ4LL5R.js +0 -7
- package/dist/chunks/prompt-missing-credentials-VP6OVCFM.js +0 -7
- package/dist/chunks/publish-2HEK5UMJ.js +0 -15
- package/dist/chunks/pull-WRTTSY7J.js +0 -7
- package/dist/chunks/purchase-domain-if-available-6S3NLTUI.js +0 -7
- package/dist/chunks/push-L3QRGGLC.js +0 -7
- package/dist/chunks/reauthenticate-IXQDC4UZ.js +0 -7
- package/dist/chunks/reorder-B4OXSYCI.js +0 -10
- package/dist/chunks/reply-F637K6XH.js +0 -9
- package/dist/chunks/resolve-E3F6NYQZ.js +0 -12
- package/dist/chunks/resolve-agent-team-EIPCH766.js +0 -7
- package/dist/chunks/restore-Q25KRZPH.js +0 -16
- package/dist/chunks/rm-FWD2NUGX.js +0 -8
- package/dist/chunks/rm-JMQ4QKCC.js +0 -8
- package/dist/chunks/rm-PPG7P3GN.js +0 -8
- package/dist/chunks/rm-SH3DYKNS.js +0 -8
- package/dist/chunks/rm-UEBLKFVC.js +0 -8
- package/dist/chunks/rule-inspect-LKQA5I4V.js +0 -8
- package/dist/chunks/schema-FBV42W7N.js +0 -14
- package/dist/chunks/select-org-WMB752Z6.js +0 -7
- package/dist/chunks/set-UTYIPOLC.js +0 -7
- package/dist/chunks/setup-and-link-ZLY5XQW5.js +0 -7
- package/dist/chunks/tags-UCLZ5UMX.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-5V53NA6C.js";import"./chunks/chunk-AYUUSAB7.js";import{joinWords}from"./chunks/chunk-4VFYJU37.js";import{api,tryOpenApiFallback}from"./chunks/chunk-KPQLUGFI.js";import"./chunks/chunk-GHAY4PSD.js";import{collectList,decodeListCursor,sliceList}from"./chunks/chunk-EGNR2DEI.js";import{getTeamBillingUrl}from"./chunks/chunk-XR6QY7RR.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-IQKGQ2Y2.js";import"./chunks/chunk-EAUDC24V.js";import"./chunks/chunk-RRDNKB2X.js";import"./chunks/chunk-MVGTMPMI.js";import"./chunks/chunk-SACGQMVQ.js";import{ellipsis}from"./chunks/chunk-F4KY2TOK.js";import{box}from"./chunks/chunk-RLKS5G6C.js";import{did_you_mean_default}from"./chunks/chunk-DWZBL4NK.js";import{OpenApiCache,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-363SJ4TN.js";import{email}from"./chunks/chunk-6IDNVZZR.js";import{handleValidationError,outputError,parseTimeFlag,validateOptionalIntegerRange,validateTimeBound,validateTimeOrder}from"./chunks/chunk-RW3X523R.js";import"./chunks/chunk-ID663OJ7.js";import{isValidName}from"./chunks/chunk-PADL3C6Z.js";import{require_tar_fs}from"./chunks/chunk-KRPY5FHJ.js";import"./chunks/chunk-D6REP5QQ.js";import{NO_RETRY,TEAM_BUDGET,budgetAmountDollars,budgetPauses,budgetStatePayload,buy,canPromptForCharge,deleteCertById,findBudget,formatUsd,formatUsdWhole,getDomains,getTeamMemberByIdentifier,getTeamSpend,getWebhook,hasPauseThreshold,isDomainExternal,listBudgetAlerts,listBudgets,pausePercentsOutside100,percentUsed,removeAliasById,removeBudget,removeReceipt,setBudget,setSavedReceipt,spendDollars,spendPayload,teamMemberLabel,thresholdsForSet,toBudgetState}from"./chunks/chunk-TIPQQ4TG.js";import{require_cjs}from"./chunks/chunk-U2OBPULW.js";import"./chunks/chunk-IOZ3I765.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-2K3ISCQ6.js";import{require_execa}from"./chunks/chunk-BUJITHGZ.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"./chunks/chunk-C6GY2G73.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import{formatTable}from"./chunks/chunk-LSQREJXO.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import"./chunks/chunk-Q7D7RGXM.js";import"./chunks/chunk-FBYA6LLM.js";import{list_item_default}from"./chunks/chunk-BTI5TG6Q.js";import{ensureLink}from"./chunks/chunk-HTXDC7E2.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-2TUVL6WE.js";import{getDeployment,toHost}from"./chunks/chunk-R6BEOVTU.js";import{mapCertError}from"./chunks/chunk-HCRD3JFL.js";import"./chunks/chunk-7EJQLVWX.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import"./chunks/chunk-GD7AV7BO.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{MAX_LIST_LIMIT,getNextPageCommand,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-VNIKIQVE.js";import"./chunks/chunk-PFD7LETF.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-T6243EDS.js";import{getSubcommand as getSubcommand3}from"./chunks/chunk-ETV3C2CV.js";import{validateLsArgs}from"./chunks/chunk-KW6GSQXV.js";import{getTeams}from"./chunks/chunk-FGFLTLEA.js";import"./chunks/chunk-SCV7XEEO.js";import{CREDIT_TYPE_LABELS,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,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-O4WNSKQR.js";import"./chunks/chunk-6I6QJHCY.js";import"./chunks/chunk-EKZTFGDX.js";import"./chunks/chunk-462YCCJZ.js";import"./chunks/chunk-WVHCBDTB.js";import"./chunks/chunk-TAISZMA2.js";import"./chunks/chunk-527GBU3K.js";import"./chunks/chunk-CR3NBTHV.js";import"./chunks/chunk-BVGGTBYE.js";import"./chunks/chunk-6TXEVQA4.js";import"./chunks/chunk-5KUUMQ3M.js";import"./chunks/chunk-UHBMX3OK.js";import"./chunks/chunk-EEUJLJEJ.js";import"./chunks/chunk-NW7WWUCQ.js";import"./chunks/chunk-F6EBOT64.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-LOBA3E72.js";import"./chunks/chunk-7R6TRRG5.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-OZCQTXI4.js";import"./chunks/chunk-FSPPKNKN.js";import{help}from"./chunks/chunk-FLHO75XC.js";import{table}from"./chunks/chunk-773GOZIR.js";import{printError}from"./chunks/chunk-HSFKISDH.js";import"./chunks/chunk-67GZ5REA.js";import"./chunks/chunk-BS32OUOC.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{TelemetryClient}from"./chunks/chunk-6YXIWZ3X.js";import"./chunks/chunk-PUKYAALC.js";import{getContextName,getScope}from"./chunks/chunk-K5U47EVH.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,exitWithNonInteractiveError,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-WDXW6A4H.js";import"./chunks/chunk-DKJL2KV7.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getUser,getVercelDirectory,humanizePath,parseGitConfig,pluckRemoteUrls,require_pluralize,writeToConfigFile}from"./chunks/chunk-4N6LMERQ.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-ADLBLGT3.js";import"./chunks/chunk-CWM2F235.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments}from"./chunks/chunk-KCKYPLIH.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getSameSubcommandSuggestionFlags,jsonOption,normalizeFlagName,stripSensitiveAuthArgs,validateJsonOutput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-QVXS234E.js";import{toNodeReadable}from"./chunks/chunk-FUX6LKNP.js";import"./chunks/chunk-OPORM35X.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-6VH56CX2.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-JESNVRVR.js";import{chars_default,emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-XP3FT56R.js";import"./chunks/chunk-BLUPZPAS.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BRQUZ5NC.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-QUSEBFDO.js";import"./chunks/chunk-4G7ZQONX.js";import{joinWords}from"./chunks/chunk-4VFYJU37.js";import{api,tryOpenApiFallback}from"./chunks/chunk-6WMO5G45.js";import"./chunks/chunk-GHAY4PSD.js";import{list_item_default}from"./chunks/chunk-BTI5TG6Q.js";import{collectList,decodeListCursor,sliceList}from"./chunks/chunk-LOO42IMZ.js";import{getTeamBillingUrl}from"./chunks/chunk-XR6QY7RR.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-J6L5MDTX.js";import"./chunks/chunk-EAUDC24V.js";import"./chunks/chunk-RRDNKB2X.js";import"./chunks/chunk-MVGTMPMI.js";import"./chunks/chunk-SACGQMVQ.js";import{ellipsis}from"./chunks/chunk-F4KY2TOK.js";import{box}from"./chunks/chunk-RLKS5G6C.js";import{did_you_mean_default}from"./chunks/chunk-DWZBL4NK.js";import{OpenApiCache,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-7VTPAXDC.js";import{email}from"./chunks/chunk-6IDNVZZR.js";import{isValidName}from"./chunks/chunk-PADL3C6Z.js";import{handleValidationError,outputError,parseTimeFlag,validateOptionalIntegerRange,validateTimeBound,validateTimeOrder}from"./chunks/chunk-XSQVCDSD.js";import"./chunks/chunk-ID663OJ7.js";import{ensureLink}from"./chunks/chunk-JMLKK7RL.js";import{getDeployment,toHost}from"./chunks/chunk-VAWZZK3Y.js";import{mapCertError}from"./chunks/chunk-OKNDHNH6.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-SDOPVIKJ.js";import{require_tar_fs}from"./chunks/chunk-RQVIMYKN.js";import"./chunks/chunk-3E364MJE.js";import"./chunks/chunk-7EJQLVWX.js";import{NO_RETRY,TEAM_BUDGET,budgetAmountDollars,budgetPauses,budgetStatePayload,buy,canPromptForCharge,deleteCertById,findBudget,formatUsd,formatUsdWhole,getDomains,getTeamMemberByIdentifier,getTeamSpend,getWebhook,hasPauseThreshold,isDomainExternal,listBudgetAlerts,listBudgets,pausePercentsOutside100,percentUsed,removeAliasById,removeBudget,removeReceipt,setBudget,setSavedReceipt,spendDollars,spendPayload,teamMemberLabel,thresholdsForSet,toBudgetState}from"./chunks/chunk-2QIJEHNE.js";import{require_cjs}from"./chunks/chunk-GP55VEOQ.js";import"./chunks/chunk-AOC6XXOO.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-YALEYPMP.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{MAX_LIST_LIMIT,getNextPageCommand,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-KHADRPBJ.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{validateLsArgs}from"./chunks/chunk-XTKGBVSF.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-FAELJM4F.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-5SIC5273.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-JSAY52FE.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand as getSubcommand3}from"./chunks/chunk-ETV3C2CV.js";import{getTeams}from"./chunks/chunk-P6ZTEDX2.js";import{CREDIT_TYPE_LABELS,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,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-WDUHDLUA.js";import"./chunks/chunk-O7COT3YB.js";import"./chunks/chunk-2FHZYQPY.js";import"./chunks/chunk-M7LUSXMG.js";import"./chunks/chunk-C6IITJ5S.js";import"./chunks/chunk-TZT3VYZ3.js";import"./chunks/chunk-HMWDOAWO.js";import"./chunks/chunk-QNL22LAW.js";import"./chunks/chunk-UWMPVTXG.js";import"./chunks/chunk-5CZNUB7Y.js";import"./chunks/chunk-AUY363W7.js";import"./chunks/chunk-OTYF3ZZW.js";import"./chunks/chunk-3H36RI7C.js";import"./chunks/chunk-BGWS5R5R.js";import"./chunks/chunk-UJQ6PBRF.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-GVPVWHFK.js";import"./chunks/chunk-N5CXIFE2.js";import"./chunks/chunk-FNA4MIOH.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-VWHIWUGJ.js";import{printError}from"./chunks/chunk-VQ755MPP.js";import{help}from"./chunks/chunk-SLDWAIO3.js";import"./chunks/chunk-67GZ5REA.js";import"./chunks/chunk-BS32OUOC.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{TelemetryClient}from"./chunks/chunk-5WYPJ2T5.js";import"./chunks/chunk-2EYYB6YN.js";import{getContextName,getScope}from"./chunks/chunk-WICRM2JL.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,exitWithNonInteractiveError,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-XE24Y6NM.js";import"./chunks/chunk-EPO7P734.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getUser,getVercelDirectory,humanizePath,parseGitConfig,pluckRemoteUrls,require_pluralize,writeToConfigFile}from"./chunks/chunk-VLYVVC3P.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-26QK3I2S.js";import"./chunks/chunk-55H6G46X.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments}from"./chunks/chunk-F22QLVTX.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-7SAEZ4NC.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.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-YCJHUYBJ.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-JESNVRVR.js";import{emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-DWOJP4ST.js";import"./chunks/chunk-BLUPZPAS.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-PUKYAALC.js";import{formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getSameSubcommandSuggestionFlags,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-A2UZ2O7H.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-BRQUZ5NC.js";import"./chunks/chunk-FBYA6LLM.js";import"./chunks/chunk-SCV7XEEO.js";import{toNodeReadable}from"./chunks/chunk-MY4MONOH.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," ")}
|
|
@@ -14,20 +14,20 @@ ${table(eventRows,{hsep:3})}`)}let subagents=asArray(run.subagents??run.subAgent
|
|
|
14
14
|
${table(subagentRows,{hsep:3})}`)}return`${sections.join(`
|
|
15
15
|
|
|
16
16
|
`)}
|
|
17
|
-
`}async function inspect(client){let telemetry=new AgentInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===inspectSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry.trackCliArgumentRunId(runIdArg),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(inspectSubcommand,{parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
17
|
+
`}async function inspect(client){let telemetry=new AgentInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===inspectSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry.trackCliArgumentRunId(runIdArg),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(inspectSubcommand,{stream:client.stderr,parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
18
18
|
`),0;let run=isRecord(data.run)?data.run:data;return client.stdout.write(renderDetail(run)),output_manager_default.log(`Run with ${cmd("--json")} for full run data.`),0}var AgentTraceTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliArgumentRunId(value){value&&this.trackCliArgument({arg:"runId",value:this.redactedValue})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionPrevious(value){value&&this.trackCliOption({option:"previous",value:this.redactedValue})}trackCliOptionMaxFieldLength(value){typeof value=="number"&&this.trackCliOption({option:"max-field-length",value:String(value)})}};var INLINE_VALUE_MAX_LEN=2e3;function toDisplayString(value){if(value!=null){if(typeof value=="string")return value;try{return JSON.stringify(value)}catch{return String(value)}}}function pushBlock(lines,label,value){let text=toDisplayString(value);text&&lines.push(`- **${label}:** ${ellipsis(text.trim(),INLINE_VALUE_MAX_LEN)}`)}function renderTurn(turn,index){let lines=[`## Turn ${index+1}`],messages=asArray(turn.messages);for(let message of messages){let role=readString(message,"role","type")??"message";pushBlock(lines,role,message.content??message.text),pushBlock(lines,`${role} reasoning`,message.reasoning)}pushBlock(lines,"reasoning",turn.reasoning);let toolCalls=asArray(turn.toolCalls??turn.tool_calls);for(let toolCall of toolCalls){let name=readString(toolCall,"name","toolName","tool")??"<unnamed tool>";lines.push(`- **tool call:** \`${name}\``);let input=toDisplayString(toolCall.input??toolCall.args??toolCall.arguments);input&&lines.push(` - input: ${ellipsis(input.trim(),INLINE_VALUE_MAX_LEN)}`);let outputValue=toDisplayString(toolCall.output??toolCall.result);outputValue&&lines.push(` - output: ${ellipsis(outputValue.trim(),INLINE_VALUE_MAX_LEN)}`)}return lines.join(`
|
|
19
19
|
`)}function resolveTurns(trace2){let direct=asArray(trace2.turns);if(direct.length>0)return direct;let framework=readString(trace2,"framework");if(framework){let nested=asArray(readRecord(trace2,framework)?.turns);if(nested.length>0)return nested}for(let value of Object.values(trace2))if(isRecord(value)){let nested=asArray(value.turns);if(nested.length>0)return nested}return[]}var MAX_CONTINUATION_LENGTH=4096;function readTracePage(data){if(!isRecord(data))return;let trace2=readRecord(data,"trace")??data,framework=readString(trace2,"framework"),payload=(framework?readRecord(trace2,framework):void 0)??readRecord(trace2,"eve");if(!payload)return;let earlier=readRecord(payload,"earlier"),later=readRecord(payload,"later"),earlierStreamId=readString(earlier,"streamId"),beforeChunk=readNumber(earlier,"beforeChunk"),laterStreamId=readString(later,"streamId"),cursor=readString(later,"cursor"),droppedSide=readString(readRecord(payload,"truncated"),"droppedSide");return{...droppedSide==="oldest"||droppedSide==="newest"?{droppedSide}:{},...earlierStreamId&&beforeChunk!==void 0&&Number.isSafeInteger(beforeChunk)&&beforeChunk>0?{earlier:{streamId:earlierStreamId,beforeChunk}}:{},...laterStreamId&&cursor?{later:{streamId:laterStreamId,cursor}}:{}}}function encodeTraceContinuation(continuation){return Buffer.from(JSON.stringify(continuation),"utf8").toString("base64url")}function parseTraceContinuation(value){if(!(value.length===0||value.length>MAX_CONTINUATION_LENGTH||!/^[A-Za-z0-9_-]+$/.test(value)))try{let decoded=JSON.parse(Buffer.from(value,"base64url").toString("utf8"));if(!isRecord(decoded)||decoded.version!==1||decoded.direction!=="earlier"&&decoded.direction!=="later"||typeof decoded.streamId!="string"||decoded.streamId.length===0)return;if(decoded.direction==="earlier"&&typeof decoded.beforeChunk=="number"&&Number.isSafeInteger(decoded.beforeChunk)&&decoded.beforeChunk>0&&decoded.cursor===void 0||decoded.direction==="later"&&typeof decoded.cursor=="string"&&decoded.cursor.length>0&&decoded.beforeChunk===void 0)return decoded}catch{return}}function buildTracePageCommand({runId:runId2,continuation,globalFlags,project,environment,since,until,maxFieldLength}){let args=["vercel",...globalFlags.map(flag=>quoteCommandArgument(flag,"<value>")),"agent-runs","trace",quoteCommandArgument(runId2,"<runId>")],optionalArgs=[["--project",project],["--environment",environment],["--since",since],["--until",until],["--max-field-length",maxFieldLength]];for(let[flag,value]of optionalArgs)value!==void 0&&args.push(flag,quoteCommandArgument(String(value),"<value>"));return args.push(continuation.direction==="later"?"--next":"--previous",encodeTraceContinuation(continuation)),args.join(" ")}function getTracePagination(tracePage){if(!(!tracePage?.earlier&&!tracePage?.later))return{next:tracePage.later?encodeTraceContinuation({version:1,direction:"later",...tracePage.later}):null,previous:tracePage.earlier?encodeTraceContinuation({version:1,direction:"earlier",...tracePage.earlier}):null}}function logTracePagination(tracePage,{runId:runId2,globalFlags,project,environment,since,until,maxFieldLength}){tracePage?.droppedSide&&output_manager_default.log(`Trace coverage is incomplete: ${tracePage.droppedSide} activity was not returned in this page.`),tracePage?.earlier&&(output_manager_default.print(`
|
|
20
20
|
`),printNextPageCommand(buildTracePageCommand({runId:runId2,continuation:{version:1,direction:"earlier",...tracePage.earlier},globalFlags,project,environment,since,until,maxFieldLength}),"Previous page")),tracePage?.later&&(output_manager_default.print(`
|
|
21
21
|
`),printNextPageCommand(buildTracePageCommand({runId:runId2,continuation:{version:1,direction:"later",...tracePage.later},globalFlags,project,environment,since,until,maxFieldLength})))}function renderTrace(data,runIdArg){let trace2=readRecord(data,"trace")??data,turns=resolveTurns(trace2);return turns.length===0?void 0:`${[`# Agent Run ${runIdArg}`,`- **Turns:** ${turns.length}`,...turns.map((turn,index)=>renderTurn(turn,index))].join(`
|
|
22
22
|
|
|
23
23
|
`)}
|
|
24
|
-
`}async function trace(client){let telemetry=new AgentTraceTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(traceSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===traceSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--next":nextCursor,"--previous":previousCursor,"--max-field-length":maxFieldLengthFlag,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry.trackCliArgumentRunId(runIdArg),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliOptionNext(nextCursor),telemetry.trackCliOptionPrevious(previousCursor),telemetry.trackCliOptionMaxFieldLength(maxFieldLengthFlag),telemetry.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(traceSubcommand,{parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");if(maxFieldLengthFlag!==void 0&&(!Number.isFinite(maxFieldLengthFlag)||maxFieldLengthFlag<0))return invalidArguments(client,"`--max-field-length` must be a non-negative number.");if(nextCursor!==void 0&&previousCursor!==void 0)return invalidArguments(client,"`--next` and `--previous` cannot be used together.");let continuationValue=nextCursor??previousCursor,continuation=continuationValue!==void 0?parseTraceContinuation(continuationValue):void 0,expectedDirection=nextCursor!==void 0?"later":"earlier";if(continuationValue!==void 0&&continuation?.direction!==expectedDirection){let flag=nextCursor!==void 0?"--next":"--previous";return invalidArguments(client,`Invalid or expired \`${flag}\` cursor. Omit \`${flag}\` to restart the trace.`)}let tracePageQuery=continuation?.direction==="later"?{traceStreamId:continuation.streamId,traceAfterCursor:continuation.cursor}:continuation?.direction==="earlier"?{traceStreamId:continuation.streamId,traceBeforeChunk:continuation.beforeChunk}:void 0,scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run trace\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg,trace:!0,...tracePageQuery})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}output_manager_default.stopSpinner();let maxFieldLength=normalizeTraceMaxFieldLength(maxFieldLengthFlag),bounded=truncateLargeStrings(data,maxFieldLength),tracePage=readTracePage(data),pagination=getTracePagination(tracePage);if(json){let jsonPayload=pagination&&isRecord(bounded)?{...bounded,pagination}:bounded;return client.stdout.write(`${JSON.stringify(jsonPayload,null,2)}
|
|
24
|
+
`}async function trace(client){let telemetry=new AgentTraceTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(traceSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let positional=parsedArgs.args.slice(1),runIdArg=positional[0]===traceSubcommand.name?positional[1]:positional[0],{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--next":nextCursor,"--previous":previousCursor,"--max-field-length":maxFieldLengthFlag,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry.trackCliArgumentRunId(runIdArg),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliOptionNext(nextCursor),telemetry.trackCliOptionPrevious(previousCursor),telemetry.trackCliOptionMaxFieldLength(maxFieldLengthFlag),telemetry.trackCliFlagJson(json),!runIdArg)return output_manager_default.print(help(traceSubcommand,{stream:client.stderr,parent:agentRunsCommand,columns:client.stderr.columns})),2;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");if(maxFieldLengthFlag!==void 0&&(!Number.isFinite(maxFieldLengthFlag)||maxFieldLengthFlag<0))return invalidArguments(client,"`--max-field-length` must be a non-negative number.");if(nextCursor!==void 0&&previousCursor!==void 0)return invalidArguments(client,"`--next` and `--previous` cannot be used together.");let continuationValue=nextCursor??previousCursor,continuation=continuationValue!==void 0?parseTraceContinuation(continuationValue):void 0,expectedDirection=nextCursor!==void 0?"later":"earlier";if(continuationValue!==void 0&&continuation?.direction!==expectedDirection){let flag=nextCursor!==void 0?"--next":"--previous";return invalidArguments(client,`Invalid or expired \`${flag}\` cursor. Omit \`${flag}\` to restart the trace.`)}let tracePageQuery=continuation?.direction==="later"?{traceStreamId:continuation.streamId,traceAfterCursor:continuation.cursor}:continuation?.direction==="earlier"?{traceStreamId:continuation.streamId,traceBeforeChunk:continuation.beforeChunk}:void 0,scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;output_manager_default.spinner("Fetching Agent Run trace\u2026");let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,since,until,runId:runIdArg,trace:!0,...tracePageQuery})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}output_manager_default.stopSpinner();let maxFieldLength=normalizeTraceMaxFieldLength(maxFieldLengthFlag),bounded=truncateLargeStrings(data,maxFieldLength),tracePage=readTracePage(data),pagination=getTracePagination(tracePage);if(json){let jsonPayload=pagination&&isRecord(bounded)?{...bounded,pagination}:bounded;return client.stdout.write(`${JSON.stringify(jsonPayload,null,2)}
|
|
25
25
|
`),0}let rendered=isRecord(bounded)?renderTrace(bounded,runIdArg):void 0,traceCommandContext={runId:runIdArg,globalFlags:getGlobalFlagsFromArgs(client.argv.slice(2)),project:projectFlag,environment,since,until,maxFieldLength:maxFieldLengthFlag};return rendered?(client.stdout.write(rendered),logTracePagination(tracePage,traceCommandContext),output_manager_default.log("Run with --json for raw trace data."),0):(client.stdout.write(`${JSON.stringify(bounded,null,2)}
|
|
26
26
|
`),logTracePagination(tracePage,traceCommandContext),0)}var import_chalk4=__toESM(require_source(),1);var AgentProjectsTelemetryClient=class extends AgentRunsQueryTelemetryClient{};async function projects(client){let telemetry=new AgentProjectsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(projectsSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let{"--environment":environment,"--since":since,"--until":until,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;if(telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliFlagJson(json),until&&!since)return invalidArguments(client,"`--until` requires `--since`.");let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag:void 0,requireProject:!1});if(!scope.ok)return scope.exitCode;let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching projects with Agent Runs in ${import_chalk4.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,view:"team",environment,since,until})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
27
27
|
`),0;let projectList=asArray(data.projects??data.items);if(projectList.length===0)return output_manager_default.log("No projects with Agent Runs activity found."),0;output_manager_default.log(`Projects with Agent Runs under ${import_chalk4.default.bold(scope.contextName)} ${fetchStamp()}`);let rows=[["Project","Runs","Avg Duration"].map(header=>import_chalk4.default.bold(import_chalk4.default.cyan(header))),...projectList.map(project=>[import_chalk4.default.bold(readString(project,"projectName","name","project","projectId","id")??"-"),formatCount(readNumber(project,"runs","runCount","totalRuns")),import_chalk4.default.gray(formatDurationMs(readNumber(project,"avgDurationMs","averageDurationMs","avgDuration")))])];return client.stdout.write(`
|
|
28
28
|
${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
29
29
|
|
|
30
|
-
`),output_manager_default.log(`Run ${cmd("vercel agent-runs list --project <name>")} to list its Agent Runs.`),0}var COMMAND_CONFIG={list:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),trace:getCommandAliases(traceSubcommand),projects:getCommandAliases(projectsSubcommand)};async function agentRuns(client){let telemetry=new AgentRunsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(agentRunsCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand3(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];function printHelp(command){output_manager_default.print(help(command,{parent:agentRunsCommand,columns:client.stderr.columns}))}if(!subcommand){let unknown=subArgs.find(arg=>!arg.startsWith("-"));return unknown?(output_manager_default.error(`Unknown subcommand: ${unknown}`),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2):(needHelp&&telemetry.trackCliFlagHelp("agent-runs"),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),0)}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(listSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),await list2(client));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),await inspect(client));case"trace":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(traceSubcommand),0):(telemetry.trackCliSubcommandTrace(subcommandOriginal),await trace(client));case"projects":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(projectsSubcommand),0):(telemetry.trackCliSubcommandProjects(subcommandOriginal),await projects(client));default:return output_manager_default.error(`Unknown subcommand: ${subcommandOriginal}`),output_manager_default.print(help(agentRunsCommand,{columns:client.stderr.columns})),2}}var import_chalk5=__toESM(require_source(),1),import_ms2=__toESM(require_ms(),1);var AliasListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,validationResult=validateLsArgs({commandName:"alias ls",args});if(validationResult!==0)return validationResult;let contextName=await getContextName(client),telemetryClient=new AliasListTelemetryClient({opts:{store:client.telemetryEventStore}}),paginationOptions,formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;try{paginationOptions=getPaginationOpts(opts);let[,limit]=paginationOptions;telemetryClient.trackCliOptionNext(opts["--next"]),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionFormat(opts["--format"])}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}let lsStamp=stamp_default();output_manager_default.spinner(`Fetching aliases under ${import_chalk5.default.bold(contextName)}`);let{aliases,pagination}=await getAliases(client,void 0,...paginationOptions);if(asJson){output_manager_default.stopSpinner();let jsonOutput={aliases:aliases.map(a=>({alias:a.alias,deploymentId:a.deploymentId,url:a.deployment?.url??null,createdAt:a.createdAt})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
30
|
+
`),output_manager_default.log(`Run ${cmd("vercel agent-runs list --project <name>")} to list its Agent Runs.`),0}var COMMAND_CONFIG={list:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),trace:getCommandAliases(traceSubcommand),projects:getCommandAliases(projectsSubcommand)};async function agentRuns(client){let telemetry=new AgentRunsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(agentRunsCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let subArgs=parsedArgs.args.slice(1),{subcommand,subcommandOriginal}=getSubcommand3(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:agentRunsCommand,columns:client.stderr.columns}))}if(!subcommand){let unknown=subArgs.find(arg=>!arg.startsWith("-"));return unknown?(output_manager_default.error(`Unknown subcommand: ${unknown}`),output_manager_default.print(help(agentRunsCommand,{stream:client.stderr,columns:client.stderr.columns})),2):(needHelp&&telemetry.trackCliFlagHelp("agent-runs"),output_manager_default.print(help(agentRunsCommand,{stream:client.stderr,columns:client.stderr.columns})),0)}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(listSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),await list2(client));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),await inspect(client));case"trace":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(traceSubcommand),0):(telemetry.trackCliSubcommandTrace(subcommandOriginal),await trace(client));case"projects":return needHelp?(telemetry.trackCliFlagHelp("agent-runs",subcommandOriginal),printHelp(projectsSubcommand),0):(telemetry.trackCliSubcommandProjects(subcommandOriginal),await projects(client));default:return output_manager_default.error(`Unknown subcommand: ${subcommandOriginal}`),output_manager_default.print(help(agentRunsCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk5=__toESM(require_source(),1),import_ms2=__toESM(require_ms(),1);var AliasListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,validationResult=validateLsArgs({commandName:"alias ls",args});if(validationResult!==0)return validationResult;let contextName=await getContextName(client),telemetryClient=new AliasListTelemetryClient({opts:{store:client.telemetryEventStore}}),paginationOptions,formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;try{paginationOptions=getPaginationOpts(opts);let[,limit]=paginationOptions;telemetryClient.trackCliOptionNext(opts["--next"]),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionFormat(opts["--format"])}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}let lsStamp=stamp_default();output_manager_default.spinner(`Fetching aliases under ${import_chalk5.default.bold(contextName)}`);let{aliases,pagination}=await getAliases(client,void 0,...paginationOptions);if(asJson){output_manager_default.stopSpinner();let jsonOutput={aliases:aliases.map(a=>({alias:a.alias,deploymentId:a.deploymentId,url:a.deployment?.url??null,createdAt:a.createdAt})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
31
31
|
`)}else if(output_manager_default.log(`aliases found under ${import_chalk5.default.bold(contextName)} ${lsStamp()}`),client.stdout.write(printAliasTable(aliases)),pagination.next){let flags=getCommandFlags(opts,["_","--next","--format"]);printNextPageCommand(getCommandNamePlain(`alias ls${flags} --next ${pagination.next}`))}return 0}function printAliasTable(aliases){return`${table([["source","url","age"].map(header=>import_chalk5.default.gray(header)),...aliases.map(a=>[a.deployment?.url?a.deployment.url:import_chalk5.default.gray("\u2013"),a.alias,(0,import_ms2.default)(Date.now()-a.createdAt)])],{align:["l","l","r"],hsep:4}).replace(/^/gm," ")}
|
|
32
32
|
|
|
33
33
|
`}var import_chalk6=__toESM(require_source(),1),import_ms3=__toESM(require_ms(),1);async function findAliasByAliasOrId(client,aliasOrId){return client.fetch(`/now/aliases/${encodeURIComponent(getSafeAlias(aliasOrId))}`)}function getSafeAlias(alias2){return alias2.replace(/^https:\/\//i,"").replace(/^\.+/,"").replace(/\.+$/,"").toLowerCase()}var AliasRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentAlias(alias2){alias2&&this.trackCliArgument({arg:"alias",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(removeSubcommand.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,contextName=await getContextName(client),telemetryClient=new AliasRemoveTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliFlagYes(opts["--yes"]);let[aliasOrId]=args;if(telemetryClient.trackCliArgumentAlias(aliasOrId),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk6.default.cyan(`${getCommandName("alias remove <alias>")}`)}`),2;if(!aliasOrId)return output_manager_default.error(`${getCommandName("alias remove <alias>")} expects one argument`),2;if(!isValidName(aliasOrId))return output_manager_default.error(`The provided argument "${aliasOrId}" is not a valid alias`),2;let alias2=await findAliasByAliasOrId(client,aliasOrId);if(!alias2)return output_manager_default.error(`Alias not found by "${aliasOrId}" under ${import_chalk6.default.bold(contextName)}`),output_manager_default.log(`Run ${getCommandName("alias ls")} to see your aliases.`),1;let removeStamp=stamp_default();return!opts["--yes"]&&!await confirmAliasRemove(client,alias2)?(output_manager_default.log("Canceled"),0):(await removeAliasById(client,alias2.uid),output_manager_default.success(`Alias ${import_chalk6.default.bold(alias2.alias)} removed ${removeStamp()}`),0)}async function confirmAliasRemove(client,alias2){let srcUrl=alias2.deployment?import_chalk6.default.underline(alias2.deployment.url):null,tbl=table([[...srcUrl?[srcUrl]:[],import_chalk6.default.underline(alias2.alias),import_chalk6.default.gray(`${(0,import_ms3.default)(Date.now()-alias2.createdAt)} ago`)]],{hsep:4});return output_manager_default.log("The following alias will be removed permanently"),output_manager_default.print(` ${tbl}
|
|
@@ -44,7 +44,7 @@ ${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
|
44
44
|
`)),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()}`)}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,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()}`),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.
|
|
45
45
|
`),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.
|
|
46
46
|
`),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.
|
|
47
|
-
`),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,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{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 import_open=__toESM(require_open(),1),import_execa=__toESM(require_execa(),1),import_pluralize=__toESM(require_pluralize(),1),import_chalk11=__toESM(require_source(),1);import{resolve}from"path";import{URLSearchParams as URLSearchParams2,parse as parse3}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,{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=resolve(run)),bad=normalizeURL(bad);let parsed=parse3(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_chalk11.default.bold(parsed.path)} in favor of \`--path\` argument ${import_chalk11.default.bold(subpath)}`):subpath=parsed.path),good=normalizeURL(good),parsed=parse3(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_chalk11.default.bold(parsed.path)} which does not match ${import_chalk11.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_chalk11.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_chalk11.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(`
|
|
47
|
+
`),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 import_open=__toESM(require_open(),1),import_execa=__toESM(require_execa(),1),import_pluralize=__toESM(require_pluralize(),1),import_chalk11=__toESM(require_source(),1);import{resolve}from"path";import{URLSearchParams as URLSearchParams2,parse as parse3}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=resolve(run)),bad=normalizeURL(bad);let parsed=parse3(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_chalk11.default.bold(parsed.path)} in favor of \`--path\` argument ${import_chalk11.default.bold(subpath)}`):subpath=parsed.path),good=normalizeURL(good),parsed=parse3(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_chalk11.default.bold(parsed.path)} which does not match ${import_chalk11.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_chalk11.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_chalk11.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(`
|
|
48
48
|
`);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_chalk11.default.magenta(`${import_chalk11.default.bold("Bisecting:")} ${rem} left to test after this (roughly ${pSteps})`),import_chalk11.default.magenta);let testUrl=`https://${deployment.url}${subpath}`;output_manager_default.log(`${import_chalk11.default.bold("Deployment URL:")} ${link_default(testUrl)}`),output_manager_default.log(`${import_chalk11.default.bold("Date:")} ${formatDate(deployment.createdAt)}`);let commit2=getCommit(deployment);if(commit2){let shortSha=commit2.sha.substring(0,7),firstLine=commit2.message?.split(`
|
|
49
49
|
`)[0];output_manager_default.log(`${import_chalk11.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_chalk11.default.green,action="good"):exitCode===125?(action="skip",color=import_chalk11.default.grey):(action="bad",color=import_chalk11.default.red),output_manager_default.log(`Run script returned exit code ${import_chalk11.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(`
|
|
50
50
|
`);let result=[import_chalk11.default.bold(`The first bad deployment is: ${link_default(`https://${lastBad.url}`)}`),"",` ${import_chalk11.default.bold("Date:")} ${formatDate(lastBad.createdAt)}`],commit=getCommit(lastBad);if(commit){let shortSha=commit.sha.substring(0,7),firstLine=commit.message?.split(`
|
|
@@ -61,11 +61,11 @@ ${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
|
61
61
|
`):output_manager_default.log(`No budget to remove on team ${team.slug}.`),0;let amountLabel=formatUsdWhole(budgetAmountDollars(target));if(!yes){if(!client.stdin.isTTY||client.nonInteractive)return output_manager_default.error("To remove in non-interactive mode, re-run with --yes."),2;if(!await client.input.confirm(`Remove the ${amountLabel} budget on team ${team.slug}?`,!1))return output_manager_default.log("Canceled."),0}output_manager_default.spinner(`Removing budget on team ${team.slug}\u2026`);try{await removeBudget(client,target.id)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}return output_manager_default.stopSpinner(),asJson?(client.stdout.write(`${JSON.stringify(removeReceipt({team,alreadyAbsent:!1,disabled:target.id,scope:selector.scope}),null,2)}
|
|
62
62
|
`),0):(output_manager_default.success(`Removed the ${amountLabel} budget on team ${team.slug}.`),0)}var BudgetInspectTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect2(client,argv){let telemetry=new BudgetInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let team=await resolveBudgetTeam(client);if(!team)return 2;let selector=TEAM_BUDGET;output_manager_default.spinner("Fetching spend\u2026");let spend,state,recentAlerts=null;try{let[budget2,teamSpend]=await Promise.all([findBudget(client,selector),getTeamSpend(client,team.id,selector,{retry:NO_RETRY}).catch(()=>null)]);spend=teamSpend,budget2&&([state,recentAlerts]=await Promise.all([toBudgetState(client,budget2,selector),fetchRecentAlerts(client,selector,budget2.id)]))}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}output_manager_default.stopSpinner();let spent=spendDollars(spend);if(asJson)return client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,spend:spendPayload(spent,state?.amount??null),budget:state?budgetStatePayload(state):null,recentAlerts},null,2)}
|
|
63
63
|
`),0;if(!state){let spentLine=spent===null?"":` Current spend is ${formatUsd(spent)}.`;return output_manager_default.log(`No budget set on team ${team.slug}.${spentLine} Create one with ${scopedBudgetCommand(client,team,"budgets set --amount <dollars>")}.`),0}return warnUnavailableWebhooks([state]),client.stdout.write(printBudgetsTable([state],()=>spent)),recentAlerts===null?0:recentAlerts.length===0?(output_manager_default.log("No alerts on this budget yet."),0):(output_manager_default.log("Recent alerts"),client.stdout.write(printBudgetAlertsTable(recentAlerts)),0)}var RECENT_ALERTS_LIMIT=3;async function fetchRecentAlerts(client,selector,budgetId){try{return(await listBudgetAlerts(client,selector,{budgetId,limit:RECENT_ALERTS_LIMIT},{retry:NO_RETRY})).data}catch(err){return output_manager_default.debug(`Could not load recent budget alerts: ${err}`),null}}var import_pluralize2=__toESM(require_pluralize(),1);function encodeBudgetAlertsCursor(value){return Buffer.from(JSON.stringify({c:value.cursor,t:value.teamId,s:value.since,u:value.until})).toString("base64url")}function decodeBudgetAlertsCursor(value){if(value===void 0)return{valid:!0,value:void 0};let invalid={valid:!1,code:"INVALID_NEXT",message:INVALID_NEXT_MESSAGE},raw;try{raw=JSON.parse(Buffer.from(value,"base64url").toString("utf8"))}catch{return invalid}if(typeof raw!="object"||raw===null)return invalid;let{c,t,s,u}=raw;return typeof c!="string"||typeof t!="string"||!isOptionalMs(s)||!isOptionalMs(u)?invalid:{valid:!0,value:{cursor:c,teamId:t,since:s,until:u}}}function isOptionalMs(value){return value===void 0||Number.isFinite(value)}var BudgetAlertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function alerts(client,argv){let telemetry=new BudgetAlertsTelemetryClient({opts:{store:client.telemetryEventStore}}),action=getSubcommand3(argv,{list:getCommandAliases(alertsListSubcommand)});action.subcommand==="list"&&telemetry.trackCliSubcommandList(action.subcommandOriginal);let parsedArgs,flagsSpecification=getFlagsSpecification(alertsSubcommand.options);try{parsedArgs=parseArguments(action.args,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets alerts"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionSince(opts["--since"]),telemetry.trackCliOptionUntil(opts["--until"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let nextResult=decodeBudgetAlertsCursor(opts["--next"]);if(!nextResult.valid)return handleValidationError(nextResult,asJson,client);let cursor=nextResult.value,warnings=[],limit=opts["--limit"];if(typeof limit=="number"&&Number.isInteger(limit)&&limit>MAX_LIST_LIMIT){let message=`--limit ${limit} is above the maximum of ${MAX_LIST_LIMIT}. Using ${MAX_LIST_LIMIT}.`;warnings.push({reason:AGENT_REASON.LIMIT_CLAMPED,message}),asJson||output_manager_default.warning(message),limit=MAX_LIST_LIMIT}let limitResult=validateOptionalIntegerRange(limit,{flag:"--limit",min:1,max:MAX_LIST_LIMIT});if(!limitResult.valid)return handleValidationError(limitResult,asJson,client);let sinceResult=validateTimeBound(opts["--since"]);if(!sinceResult.valid)return handleValidationError(sinceResult,asJson,client);let untilResult=validateTimeBound(opts["--until"]);if(!untilResult.valid)return handleValidationError(untilResult,asJson,client);let order=validateTimeOrder(sinceResult.value,untilResult.value);if(!order.valid)return handleValidationError(order,asJson,client);let team=await resolveBudgetTeam(client);if(!team)return 2;if(cursor&&cursor.teamId!==team.id)return outputError(client,asJson,"INVALID_NEXT",`This --next cursor is from another team, not ${team.slug}. Use the --scope it was printed with.`);let since=cursor?cursor.since:sinceResult.value?.getTime(),until=cursor?cursor.until:untilResult.value?.getTime();output_manager_default.spinner("Fetching budget alerts\u2026");let selector=TEAM_BUDGET,page;try{page=await listBudgetAlerts(client,selector,{since,until,limit:limitResult.value,cursor:cursor?.cursor})}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return err.code==="invalid_cursor"?outputError(client,asJson,"INVALID_NEXT",INVALID_NEXT_MESSAGE):outputError(client,asJson,err.code||"API_ERROR",err.message);throw err}output_manager_default.stopSpinner();let next=page.nextCursor?encodeBudgetAlertsCursor({cursor:page.nextCursor,teamId:team.id,since,until}):null;if(asJson)return client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,alerts:page.data,pagination:{next},...warnings.length>0?{warnings}:{}},null,2)}
|
|
64
|
-
`),0;let where=`on team ${team.slug}`;return page.data.length===0?(output_manager_default.log(cursor?`No more budget alerts ${where}.`:`No budget alerts found ${where}.`),0):(output_manager_default.log(`${(0,import_pluralize2.default)("budget alert",page.data.length,!0)} ${where}`),client.stdout.write(printBudgetAlertsTable(page.data)),next&&printNextPageCommand(getNextPageCommand(client.argv,next,WINDOW_FLAGS)),0)}var WINDOW_FLAGS=["--since","-s","--until","-u"];var COMMAND_CONFIG3={inspect:getCommandAliases(inspectSubcommand4),list:getCommandAliases(listSubcommand9),set:getCommandAliases(setSubcommand2),remove:getCommandAliases(removeSubcommand6),alerts:getCommandAliases(alertsSubcommand)},ADVERTISED_COMMAND_CONFIG=COMMAND_CONFIG3;async function budget(client){let parsedArgs,flagsSpecification=getFlagsSpecification(budgetCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BudgetTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG3),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:budgetCommand,columns:client.stderr.columns}))}switch(subcommand){case"inspect":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(inspectSubcommand4),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="overview"&&warnDeprecatedSubcommand(client,"budgets overview","budgets inspect"),inspect2(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(listSubcommand9),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(setSubcommand2),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),subcommandOriginal==="update"&&warnDeprecatedSubcommand(client,"budgets update","budgets set"),set2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(removeSubcommand6),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),(subcommandOriginal==="delete"||subcommandOriginal==="disable")&&warnDeprecatedSubcommand(client,`budgets ${subcommandOriginal}`,"budgets remove"),remove(client,args));case"alerts":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(alertsSubcommand),0):(telemetry.trackCliSubcommandAlerts(subcommandOriginal),alerts(client,args));default:{let unknown=args[0];return unknown&&!unknown.startsWith("-")?(output_manager_default.error(getInvalidSubcommand(ADVERTISED_COMMAND_CONFIG)),output_manager_default.print(help(budgetCommand,{columns:client.stderr.columns})),2):needHelp?(telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{columns:client.stderr.columns})),0):list3(client,args)}}}var import_chalk13=__toESM(require_source(),1);async function createPurchase(client,item){return client.fetch("/v1/billing/buy?source=cli",{method:"POST",body:{item}})}var import_open2=__toESM(require_open(),1),import_error_utils=__toESM(require_dist(),1);function tryOpenBillingPage(teamSlug,openBrowser){if(!openBrowser)return;let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard";(0,import_open2.default)(billingUrl).catch(err=>{output_manager_default.debug(`Failed to open browser: ${err}`)})}function handlePurchaseError(err,teamSlug,opts){let openBrowser=opts?.openBrowser??!1;if(isAPIError(err)){if(err.code==="invalid_plan_iteration")return output_manager_default.error("Your team must be on the Flex plan to purchase add-ons."),1;if(err.code==="missing_subscription")return output_manager_default.error("Your team does not have an active subscription. Please contact support."),1;if(err.code==="missing_stripe_customer"){let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard",dashboardHint=teamSlug?` Please add one: ${output_manager_default.link(billingUrl,billingUrl)}`:` Please add one in the ${output_manager_default.link("Vercel dashboard",billingUrl)}.`;return output_manager_default.error(`Your team does not have a payment method on file.${dashboardHint}`),tryOpenBillingPage(teamSlug,openBrowser),1}if(err.code==="invalid_v0_subscription"){let pricingUrl="https://v0.app/pricing";return output_manager_default.error(`Your team must have a paid v0 plan to purchase v0 credits. Upgrade at ${output_manager_default.link(pricingUrl,pricingUrl)}`),1}if(err.code==="invalid_plan")return output_manager_default.error("Your team's current plan does not support this purchase."),1;if(err.code==="already_on_plan")return output_manager_default.error("Your team already has an active subscription for this plan."),1;if(err.code==="invalid_status")return output_manager_default.error("Your team is not in a state that allows plan changes. Please contact support."),1;if(err.code==="forbidden")return output_manager_default.error("You do not have permission to make purchases for this team. Please contact your account administrator."),1;if(err.code==="purchase_create_failed"||err.code==="purchase_confirm_failed"||err.code==="purchase_complete_failed"||err.code==="purchase_create_hosted_failed")return err.status===402?(output_manager_default.error("Payment failed. Please check that your team has a valid payment method on file."),tryOpenBillingPage(teamSlug,openBrowser),1):(output_manager_default.error("An error occurred while processing your purchase. Please try again later."),output_manager_default.debug(`Error code: ${err.code}`),1);if(err.status===402||err.code==="payment_failed")return output_manager_default.error("Payment failed. Please check the payment method on file for your team."),tryOpenBillingPage(teamSlug,openBrowser),1}return output_manager_default.error("An unexpected error occurred while completing your purchase. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils.errorToString)(err)}`),1}var MAX_CREDIT_PURCHASE_AMOUNT=1e3;async function credits(client,argv){let flagsSpecification=getFlagsSpecification(creditsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{args}=parsedArgs,[creditType,amountStr]=args;if(!creditType)return output_manager_default.error(`Missing credit type. Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;if(!SUPPORTED_CREDIT_TYPES.includes(creditType))return output_manager_default.error(`Invalid credit type "${creditType}". Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),1;if(!amountStr)return output_manager_default.error("Missing amount. Please specify the amount in dollars."),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;let amount=Number(amountStr);if(!Number.isInteger(amount))return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a whole number (in dollars).`),2;if(amount<=0)return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a positive amount in dollars.`),2;if(amount>MAX_CREDIT_PURCHASE_AMOUNT)return output_manager_default.error(`Amount cannot exceed $${MAX_CREDIT_PURCHASE_AMOUNT.toLocaleString()} per purchase via CLI.`),1;let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;let typedCreditType=creditType,label=CREDIT_TYPE_LABELS[typedCreditType];if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Purchase ${import_chalk13.default.bold(`$${amount}`)} of ${label} credits for team ${import_chalk13.default.bold(contextName)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"credits",creditType:typedCreditType,amount});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({creditType:typedCreditType,amount,team:contextName,purchaseIntent:result.purchaseIntent},null,2)}
|
|
64
|
+
`),0;let where=`on team ${team.slug}`;return page.data.length===0?(output_manager_default.log(cursor?`No more budget alerts ${where}.`:`No budget alerts found ${where}.`),0):(output_manager_default.log(`${(0,import_pluralize2.default)("budget alert",page.data.length,!0)} ${where}`),client.stdout.write(printBudgetAlertsTable(page.data)),next&&printNextPageCommand(getNextPageCommand(client.argv,next,WINDOW_FLAGS)),0)}var WINDOW_FLAGS=["--since","-s","--until","-u"];var COMMAND_CONFIG3={inspect:getCommandAliases(inspectSubcommand4),list:getCommandAliases(listSubcommand9),set:getCommandAliases(setSubcommand2),remove:getCommandAliases(removeSubcommand6),alerts:getCommandAliases(alertsSubcommand)},ADVERTISED_COMMAND_CONFIG=COMMAND_CONFIG3;async function budget(client){let parsedArgs,flagsSpecification=getFlagsSpecification(budgetCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BudgetTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG3),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:budgetCommand,columns:client.stderr.columns}))}switch(subcommand){case"inspect":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(inspectSubcommand4),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="overview"&&warnDeprecatedSubcommand(client,"budgets overview","budgets inspect"),inspect2(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(listSubcommand9),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(setSubcommand2),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),subcommandOriginal==="update"&&warnDeprecatedSubcommand(client,"budgets update","budgets set"),set2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(removeSubcommand6),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),(subcommandOriginal==="delete"||subcommandOriginal==="disable")&&warnDeprecatedSubcommand(client,`budgets ${subcommandOriginal}`,"budgets remove"),remove(client,args));case"alerts":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(alertsSubcommand),0):(telemetry.trackCliSubcommandAlerts(subcommandOriginal),alerts(client,args));default:{let unknown=args[0];return unknown&&!unknown.startsWith("-")?(output_manager_default.error(getInvalidSubcommand(ADVERTISED_COMMAND_CONFIG)),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),2):needHelp?(telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),0):list3(client,args)}}}var import_chalk13=__toESM(require_source(),1);async function createPurchase(client,item){return client.fetch("/v1/billing/buy?source=cli",{method:"POST",body:{item}})}var import_open2=__toESM(require_open(),1),import_error_utils=__toESM(require_dist(),1);function tryOpenBillingPage(teamSlug,openBrowser){if(!openBrowser)return;let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard";(0,import_open2.default)(billingUrl).catch(err=>{output_manager_default.debug(`Failed to open browser: ${err}`)})}function handlePurchaseError(err,teamSlug,opts){let openBrowser=opts?.openBrowser??!1;if(isAPIError(err)){if(err.code==="invalid_plan_iteration")return output_manager_default.error("Your team must be on the Flex plan to purchase add-ons."),1;if(err.code==="missing_subscription")return output_manager_default.error("Your team does not have an active subscription. Please contact support."),1;if(err.code==="missing_stripe_customer"){let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard",dashboardHint=teamSlug?` Please add one: ${output_manager_default.link(billingUrl,billingUrl)}`:` Please add one in the ${output_manager_default.link("Vercel dashboard",billingUrl)}.`;return output_manager_default.error(`Your team does not have a payment method on file.${dashboardHint}`),tryOpenBillingPage(teamSlug,openBrowser),1}if(err.code==="invalid_v0_subscription"){let pricingUrl="https://v0.app/pricing";return output_manager_default.error(`Your team must have a paid v0 plan to purchase v0 credits. Upgrade at ${output_manager_default.link(pricingUrl,pricingUrl)}`),1}if(err.code==="invalid_plan")return output_manager_default.error("Your team's current plan does not support this purchase."),1;if(err.code==="already_on_plan")return output_manager_default.error("Your team already has an active subscription for this plan."),1;if(err.code==="invalid_status")return output_manager_default.error("Your team is not in a state that allows plan changes. Please contact support."),1;if(err.code==="forbidden")return output_manager_default.error("You do not have permission to make purchases for this team. Please contact your account administrator."),1;if(err.code==="purchase_create_failed"||err.code==="purchase_confirm_failed"||err.code==="purchase_complete_failed"||err.code==="purchase_create_hosted_failed")return err.status===402?(output_manager_default.error("Payment failed. Please check that your team has a valid payment method on file."),tryOpenBillingPage(teamSlug,openBrowser),1):(output_manager_default.error("An error occurred while processing your purchase. Please try again later."),output_manager_default.debug(`Error code: ${err.code}`),1);if(err.status===402||err.code==="payment_failed")return output_manager_default.error("Payment failed. Please check the payment method on file for your team."),tryOpenBillingPage(teamSlug,openBrowser),1}return output_manager_default.error("An unexpected error occurred while completing your purchase. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils.errorToString)(err)}`),1}var MAX_CREDIT_PURCHASE_AMOUNT=1e3;async function credits(client,argv){let flagsSpecification=getFlagsSpecification(creditsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{args}=parsedArgs,[creditType,amountStr]=args;if(!creditType)return output_manager_default.error(`Missing credit type. Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;if(!SUPPORTED_CREDIT_TYPES.includes(creditType))return output_manager_default.error(`Invalid credit type "${creditType}". Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),1;if(!amountStr)return output_manager_default.error("Missing amount. Please specify the amount in dollars."),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;let amount=Number(amountStr);if(!Number.isInteger(amount))return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a whole number (in dollars).`),2;if(amount<=0)return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a positive amount in dollars.`),2;if(amount>MAX_CREDIT_PURCHASE_AMOUNT)return output_manager_default.error(`Amount cannot exceed $${MAX_CREDIT_PURCHASE_AMOUNT.toLocaleString()} per purchase via CLI.`),1;let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;let typedCreditType=creditType,label=CREDIT_TYPE_LABELS[typedCreditType];if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Purchase ${import_chalk13.default.bold(`$${amount}`)} of ${label} credits for team ${import_chalk13.default.bold(contextName)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"credits",creditType:typedCreditType,amount});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({creditType:typedCreditType,amount,team:contextName,purchaseIntent:result.purchaseIntent},null,2)}
|
|
65
65
|
`):(output_manager_default.success(`Purchased ${import_chalk13.default.bold(`$${amount}`)} of ${label} credits for ${import_chalk13.default.bold(contextName)} ${purchaseStamp()}`),result.purchaseIntent&&output_manager_default.debug(`Purchase intent: ${result.purchaseIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}var import_chalk14=__toESM(require_source(),1);var import_error_utils2=__toESM(require_dist(),1);function handleCustomEnvironmentPurchaseError(err){if(isAPIError(err)){if(err.code==="upgrade_required")return output_manager_default.error("Custom environment purchases require an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")} or visit ${output_manager_default.link("vercel.com/pricing","https://vercel.com/pricing")}.`),1;if(err.code==="custom_environments_not_available_to_purchase")return output_manager_default.error(err.serverMessage||"Custom environments are not available to purchase on this team."),1;if(err.code==="custom_environments_in_use")return output_manager_default.error(err.serverMessage||"This project is using more custom environments than the requested capacity allows."),1;if(err.code==="bad_request"&&err.serverMessage)return output_manager_default.error(err.serverMessage),1;if(err.code==="forbidden")return output_manager_default.error(err.serverMessage||"You do not have permission to update custom environment capacity for this project."),1}return output_manager_default.error("An error occurred while updating custom environment capacity. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils2.errorToString)(err)}`),1}async function purchaseCustomEnvironmentCapacity(client,{packs,yes,projectName,commandName}){let{cwd}=client,link=await ensureLink(commandName,client,cwd,{autoConfirm:yes,projectName,failIfNotFound:!!projectName});if(typeof link=="number")return link;let projectId=link.project.id,projectNameResolved=link.project.name;output_manager_default.spinner("Fetching custom environment settings");let settings;try{settings=await client.fetch(`/v1/projects/custom-environments/settings?projectId=${encodeURIComponent(projectId)}`,{accountId:link.org.id})}catch(err){return output_manager_default.stopSpinner(),handleCustomEnvironmentPurchaseError(err)}output_manager_default.stopSpinner();let{packSize}=settings,purchasedPacks=settings.purchasedAmount/packSize,minPacks=settings.minPurchasedAmount/packSize,maxPacks=settings.maxPurchasedAmount/packSize;if(packs<minPacks||packs>maxPacks){let minEnvironments=minPacks*packSize,maxEnvironments=maxPacks*packSize;return output_manager_default.error(`Packs must be between ${minPacks} and ${maxPacks} for this project (${minEnvironments}-${maxEnvironments} purchased environments).`),2}if(packs===purchasedPacks)return output_manager_default.log(`Project ${import_chalk14.default.bold(projectNameResolved)} already has ${import_chalk14.default.bold(packs)} custom environment pack${packs===1?"":"s"} purchased.`),0;let purchasedAmount=packs*packSize,isIncreasing=packs>purchasedPacks;if(!yes){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`${isIncreasing?"Purchase":"Reduce to"} ${import_chalk14.default.bold(packs)} custom environment pack${packs===1?"":"s"} (${purchasedAmount} environments) for project ${import_chalk14.default.bold(projectNameResolved)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Updating custom environment capacity");try{let result=await client.fetch(`/v1/projects/custom-environments/settings?projectId=${encodeURIComponent(projectId)}`,{method:"POST",body:{purchasedAmount},accountId:link.org.id});return output_manager_default.stopSpinner(),output_manager_default.success(`Updated custom environment capacity for ${import_chalk14.default.bold(projectNameResolved)} to ${import_chalk14.default.bold(packs)} pack${packs===1?"":"s"} (${result.purchasedAmount} environments) ${purchaseStamp()}`),0}catch(err){return output_manager_default.stopSpinner(),handleCustomEnvironmentPurchaseError(err)}}function validateCustomEnvironmentPacks(packsStr){if(!packsStr)return{error:"Missing packs. Specify the number of custom environment packs to purchase.",usage:`Example: ${getCommandName(`buy addon custom-environment ${2}`)} \u2014 each pack adds ${5} environments.`};let packs=Number(packsStr);return Number.isInteger(packs)?packs<0?{error:`Invalid packs "${packsStr}". Please specify a non-negative number.`}:{packs}:{error:`Invalid packs "${packsStr}". Please specify a whole number.`}}var OBSERVABILITY_PLUS_ADDON_ALIASES=new Set(["observability","observabilityplus","observability-plus","observability_plus"]);function isObservabilityPlusAddonAlias(name){return OBSERVABILITY_PLUS_ADDON_ALIASES.has(name.toLowerCase())}var import_error_utils3=__toESM(require_dist(),1);var OBSERVABILITY_PLUS_PRODUCT_ALIAS="observabilityPlus";async function purchaseObservabilityPlus(client,{yes,asJson}){let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("Observability Plus requires a team. Use --scope to specify one."),1;if(team.billing?.plan==="hobby")return output_manager_default.error("Observability Plus requires an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")}.`),1;let currentConfiguration;asJson||output_manager_default.spinner("Checking Observability Plus status");try{currentConfiguration=await client.fetch("/v1/observability/manage/configuration")}catch(err){return output_manager_default.stopSpinner(),output_manager_default.error("Failed to check Observability Plus status."),output_manager_default.debug(`Server response: ${(0,import_error_utils3.errorToString)(err)}`),1}if(output_manager_default.stopSpinner(),currentConfiguration.observabilityPlus.subscribed)return asJson?client.stdout.write(`${JSON.stringify({productAlias:OBSERVABILITY_PLUS_PRODUCT_ALIAS,quantity:1,team:contextName,teamEnabled:currentConfiguration.observabilityPlus.enabled},null,2)}
|
|
66
66
|
`):(printAlignedLabel("Status","Already enabled"),printAlignedLabel("Team",contextName)),0;if(!yes&&(!client.stdin.isTTY||client.nonInteractive))return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if((!asJson||!yes)&&(printAlignedLabel("Add-on","Observability Plus"),printAlignedLabel("Team",contextName),printAlignedLabel("Usage","Billed as accrued")),!yes&&!await client.input.confirm("Enable this add-on?",!1))return 0;asJson||output_manager_default.spinner("Enabling Observability Plus");try{let result=await client.fetch("/v1/observability/manage/configuration",{method:"PATCH",body:{teamEnabled:!0}});return output_manager_default.stopSpinner(),result.teamEnabled?(asJson?client.stdout.write(`${JSON.stringify({productAlias:OBSERVABILITY_PLUS_PRODUCT_ALIAS,quantity:1,team:contextName,teamEnabled:result.teamEnabled},null,2)}
|
|
67
67
|
`):(printAlignedLabel("Enabled","Observability Plus",{gutter:"\u2713"}),printAlignedLabel("Team",contextName)),0):(output_manager_default.error("The API did not confirm Observability Plus access for this team. Check the team billing settings before retrying."),1)}catch(err){return output_manager_default.stopSpinner(),handleObservabilityPlusPurchaseError(err,contextName)}}function handleObservabilityPlusPurchaseError(err,teamSlug){if(isAPIError(err)){if(err.code==="forbidden")return output_manager_default.error("Only team owners can purchase Observability Plus. Ask a team owner."),1;if(err.code==="invalid_plan_status")return output_manager_default.error("Observability Plus can't be enabled while this team's subscription is in its current state."),output_manager_default.log(`Review the team billing settings: ${output_manager_default.link(getTeamBillingUrl(teamSlug),getTeamBillingUrl(teamSlug))}`),1;if(err.code==="invalid_product"||err.code==="invalid_price")return output_manager_default.error("Observability Plus isn't available for this team's current plan."),output_manager_default.log(`Review the team billing settings: ${output_manager_default.link(getTeamBillingUrl(teamSlug),getTeamBillingUrl(teamSlug))}`),1}return output_manager_default.error("Failed to enable Observability Plus."),output_manager_default.debug(`Server response: ${(0,import_error_utils3.errorToString)(err)}`),1}async function addon(client,argv){let flagsSpecification=getFlagsSpecification(addonSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,[addonName,quantityStr]=args;if(addonName&&isCustomEnvironmentAddonAlias(addonName)){let packsResult=validateCustomEnvironmentPacks(quantityStr);if("error"in packsResult)return output_manager_default.error(packsResult.error),packsResult.usage&&output_manager_default.log(packsResult.usage),1;let project=flags["--project"];return purchaseCustomEnvironmentCapacity(client,{packs:packsResult.packs,yes:!!flags["--yes"],projectName:typeof project=="string"?project:void 0,commandName:"buy"})}if(addonName&&isObservabilityPlusAddonAlias(addonName)){if(flags["--project"]!==void 0)return output_manager_default.error("--project isn't supported for Observability Plus because it is enabled for a team. Use --scope <team> to select the team."),1;if(quantityStr!==void 0)return output_manager_default.error(`Observability Plus does not accept a quantity. Run ${getCommandName("buy addon observability-plus")} without one.`),1;let formatResult=validateJsonOutput(parsedArgs.flags);return formatResult.valid?purchaseObservabilityPlus(client,{yes:!!flags["--yes"],asJson:formatResult.jsonOutput}):(output_manager_default.error(formatResult.error),2)}return addonName?(output_manager_default.error(`Invalid addon "${addonName}". Supported addons: ${SUPPORTED_ADDON_NAMES.join(", ")}.`),1):(output_manager_default.error(`Missing addon name. Supported addons: ${SUPPORTED_ADDON_NAMES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy addon --help")} for usage.`),2)}var import_chalk15=__toESM(require_source(),1);async function pro(client,argv){let flagsSpecification=getFlagsSpecification(proSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Upgrade team ${import_chalk15.default.bold(contextName)} to Vercel Pro?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"subscription",planSlug:"pro"});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({team:contextName,subscriptionIntent:result.subscriptionIntent},null,2)}
|
|
68
|
-
`):(output_manager_default.success(`Upgraded ${import_chalk15.default.bold(contextName)} to Vercel Pro ${purchaseStamp()}`),result.subscriptionIntent&&output_manager_default.debug(`Subscription intent: ${result.subscriptionIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}async function domain(client,argv){return buy(client,argv)}var BuyTelemetryClient=class extends TelemetryClient{trackCliSubcommandCredits(actual){this.trackCliSubcommand({subcommand:"credits",value:actual})}trackCliSubcommandAddon(actual){this.trackCliSubcommand({subcommand:"addon",value:actual})}trackCliSubcommandPro(actual){this.trackCliSubcommand({subcommand:"pro",value:actual})}trackCliSubcommandDomain(actual){this.trackCliSubcommand({subcommand:"domain",value:actual})}};var COMMAND_CONFIG4={credits:getCommandAliases(creditsSubcommand),addon:getCommandAliases(addonSubcommand),pro:getCommandAliases(proSubcommand),domain:getCommandAliases(domainSubcommand)};async function main(client){let parsedArgs,flagsSpecification=getFlagsSpecification(buyCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BuyTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG4),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("buy"),output_manager_default.print(help(buyCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:buyCommand,columns:client.stderr.columns})),0}if(!subcommand)return output_manager_default.print(help(buyCommand,{columns:client.stderr.columns})),2;switch(subcommand){case"credits":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(creditsSubcommand)):(telemetry.trackCliSubcommandCredits(subcommandOriginal),credits(client,args));case"addon":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(addonSubcommand)):(telemetry.trackCliSubcommandAddon(subcommandOriginal),subcommandOriginal!=="addon"&&warnDeprecatedSubcommand(client,`buy ${subcommandOriginal}`,"buy addon"),addon(client,args));case"pro":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(proSubcommand)):(telemetry.trackCliSubcommandPro(subcommandOriginal),pro(client,args));case"domain":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(domainSubcommand)):(telemetry.trackCliSubcommandDomain(subcommandOriginal),domain(client,args));default:return output_manager_default.error(`Unknown subcommand: ${subcommand}`),output_manager_default.print(help(buyCommand,{columns:client.stderr.columns})),2}}var import_chalk16=__toESM(require_source(),1);var import_error_utils4=__toESM(require_dist(),1);import{readFileSync}from"fs";import{resolve as resolve2}from"path";async function createCertFromFile(client,keyPath,certPath,caPath){output_manager_default.spinner("Adding your custom certificate");try{let cert=readFileSync(resolve2(certPath),"utf8"),key=readFileSync(resolve2(keyPath),"utf8"),ca=readFileSync(resolve2(caPath),"utf8");return await client.fetch("/v3/certs",{method:"PUT",body:{ca,cert,key}})}catch(err){if((0,import_error_utils4.isErrnoException)(err)&&err.code==="ENOENT")return new Error(`The specified file "${err.path}" doesn't exist.`);if(isAPIError(err)&&err.status<500)return err;throw err}}var CertsAddTelemetryClient=class extends TelemetryClient{trackCliFlagOverwrite(v){v&&this.trackCliFlag("overwrite")}trackCliOptionCrt(v){v&&this.trackCliOption({option:"crt",value:this.redactedValue})}trackCliOptionKey(v){v&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionCa(v){v&&this.trackCliOption({option:"ca",value:this.redactedValue})}};async function add(client,argv){let{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,cert,{"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsAddTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath){if(args.length!==0||!crtPath||!keyPath||!caPath)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk16.default.cyan(`${getCommandName("certs add --crt <domain.crt> --key <domain.key> --ca <ca.crt>")}`)}
|
|
68
|
+
`):(output_manager_default.success(`Upgraded ${import_chalk15.default.bold(contextName)} to Vercel Pro ${purchaseStamp()}`),result.subscriptionIntent&&output_manager_default.debug(`Subscription intent: ${result.subscriptionIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}async function domain(client,argv){return buy(client,argv)}var BuyTelemetryClient=class extends TelemetryClient{trackCliSubcommandCredits(actual){this.trackCliSubcommand({subcommand:"credits",value:actual})}trackCliSubcommandAddon(actual){this.trackCliSubcommand({subcommand:"addon",value:actual})}trackCliSubcommandPro(actual){this.trackCliSubcommand({subcommand:"pro",value:actual})}trackCliSubcommandDomain(actual){this.trackCliSubcommand({subcommand:"domain",value:actual})}};var COMMAND_CONFIG4={credits:getCommandAliases(creditsSubcommand),addon:getCommandAliases(addonSubcommand),pro:getCommandAliases(proSubcommand),domain:getCommandAliases(domainSubcommand)};async function main(client){let parsedArgs,flagsSpecification=getFlagsSpecification(buyCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BuyTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG4),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("buy"),output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:buyCommand,columns:client.stderr.columns})),0}if(!subcommand)return output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),2;switch(subcommand){case"credits":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(creditsSubcommand)):(telemetry.trackCliSubcommandCredits(subcommandOriginal),credits(client,args));case"addon":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(addonSubcommand)):(telemetry.trackCliSubcommandAddon(subcommandOriginal),subcommandOriginal!=="addon"&&warnDeprecatedSubcommand(client,`buy ${subcommandOriginal}`,"buy addon"),addon(client,args));case"pro":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(proSubcommand)):(telemetry.trackCliSubcommandPro(subcommandOriginal),pro(client,args));case"domain":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(domainSubcommand)):(telemetry.trackCliSubcommandDomain(subcommandOriginal),domain(client,args));default:return output_manager_default.error(`Unknown subcommand: ${subcommand}`),output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk16=__toESM(require_source(),1);var import_error_utils4=__toESM(require_dist(),1);import{readFileSync}from"fs";import{resolve as resolve2}from"path";async function createCertFromFile(client,keyPath,certPath,caPath){output_manager_default.spinner("Adding your custom certificate");try{let cert=readFileSync(resolve2(certPath),"utf8"),key=readFileSync(resolve2(keyPath),"utf8"),ca=readFileSync(resolve2(caPath),"utf8");return await client.fetch("/v3/certs",{method:"PUT",body:{ca,cert,key}})}catch(err){if((0,import_error_utils4.isErrnoException)(err)&&err.code==="ENOENT")return new Error(`The specified file "${err.path}" doesn't exist.`);if(isAPIError(err)&&err.status<500)return err;throw err}}var CertsAddTelemetryClient=class extends TelemetryClient{trackCliFlagOverwrite(v){v&&this.trackCliFlag("overwrite")}trackCliOptionCrt(v){v&&this.trackCliOption({option:"crt",value:this.redactedValue})}trackCliOptionKey(v){v&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionCa(v){v&&this.trackCliOption({option:"ca",value:this.redactedValue})}};async function add(client,argv){let{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,cert,{"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsAddTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath){if(args.length!==0||!crtPath||!keyPath||!caPath)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk16.default.cyan(`${getCommandName("certs add --crt <domain.crt> --key <domain.key> --ca <ca.crt>")}`)}
|
|
69
69
|
`),1;cert=await createCertFromFile(client,keyPath,crtPath,caPath)}else{if(output_manager_default.warn(`${import_chalk16.default.cyan(getCommandName("certs add"))} will be soon deprecated. Please use ${import_chalk16.default.cyan(getCommandName("certs issue <cn> <cns>"))} instead`),args.length<1)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk16.default.cyan(getCommandName("certs add <cn>[, <cn>]"))}
|
|
70
70
|
`),2;let cns=args.reduce((res,item)=>res.concat(item.split(",")),[]);output_manager_default.spinner(`Generating a certificate for ${import_chalk16.default.bold(cns.join(", "))}`);let contextName=await getContextName(client);cert=await createCertForCns(client,cns,contextName),output_manager_default.stopSpinner()}return cert instanceof Error?(output_manager_default.error(cert.message),1):(output_manager_default.success(`Certificate entry for ${import_chalk16.default.bold(cert.cns.join(", "))} created ${addStamp()}`),0)}var add_default=add;var import_chalk19=__toESM(require_source(),1),import_tldts3=__toESM(require_cjs(),1);var import_chalk17=__toESM(require_source(),1);async function startCertOrder(client,cns,context){output_manager_default.spinner(`Issuing a certificate for ${import_chalk17.default.bold(cns.join(", "))}`);try{return await client.fetch("/v3/certs",{method:"PATCH",body:{op:"finalizeOrder",domains:cns}})}catch(err){if(isAPIError(err)){if(err.code==="cert_order_not_found")return new CertOrderNotFound(cns);let mappedError=mapCertError(err,cns);if(mappedError)return mappedError}throw err}}function getCnsFromArgs(args){return args.reduce((res,item)=>[...res,...item.split(",")],[]).filter(i=>i)}var import_chalk18=__toESM(require_source(),1);async function startCertOrder2(client,cns,contextName){return output_manager_default.spinner(`Starting certificate issuance for ${import_chalk18.default.bold(cns.join(", "))} under ${import_chalk18.default.bold(contextName)}`),await client.fetch("/v3/certs",{method:"PATCH",body:{op:"startOrder",domains:cns}})}var CertsIssueTelemetryClient=class extends CertsAddTelemetryClient{trackCliArgumentCn(value){value&&this.trackCliArgument({arg:"cn",value:this.redactedValue})}trackCliFlagChallengeOnly(v){v&&this.trackCliFlag("challenge-only")}};async function issue(client,argv){let cert,{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(issueSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,{"--challenge-only":challengeOnly,"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsIssueTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagChallengeOnly(challengeOnly),telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath)return args.length!==0||!crtPath||!keyPath||!caPath?(output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk19.default.cyan(getCommandName("certs issue --crt <domain.crt> --key <domain.key> --ca <ca.crt>"))}
|
|
71
71
|
`),1):(cert=await createCertFromFile(client,keyPath,crtPath,caPath),cert instanceof Error?(output_manager_default.error(cert.message),1):(output_manager_default.success(`Certificate entry for ${import_chalk19.default.bold(cert.cns.join(", "))} created ${addStamp()}`),0));if(args.length<1)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk19.default.cyan(getCommandName("certs issue <cn>[, <cn>]"))}
|
|
@@ -84,14 +84,14 @@ ${table(rows,{hsep:3}).replace(/^/gm," ")}
|
|
|
84
84
|
`),0}let contextName=await getContextName(client);if(output_manager_default.log(`${certs.length>0?"Certificates":"No certificates"} found under ${import_chalk20.default.bold(contextName)} ${lsStamp()}`),certs.length>0&&client.stdout.write(formatCertsTable(certs)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.print(`
|
|
85
85
|
`),printNextPageCommand(getCommandNamePlain(`certs ls${flags} --next ${pagination.next}`))}return 0}function formatCertsTable(certsList){return`${table([formatCertsTableHead(),...formatCertsTableBody(certsList)],{align:["l","l","r","c","r"],hsep:2}).replace(/^(.*)/gm," $1")}
|
|
86
86
|
`}function formatCertsTableHead(){return[import_chalk20.default.dim("id"),import_chalk20.default.dim("cns"),import_chalk20.default.dim("expiration"),import_chalk20.default.dim("renew"),import_chalk20.default.dim("age")]}function formatCertsTableBody(certsList){let now=new Date;return certsList.reduce((result,cert)=>result.concat(formatCert(now,cert)),[])}function formatCert(time,cert){return cert.cns.map((cn,idx)=>idx===0?formatCertFirstCn(time,cert,cn,cert.cns.length>1):formatCertNonFirstCn(cn,cert.cns.length>1))}function formatCertNonFirstCn(cn,multiple){return["",formatCertCn(cn,multiple),"","",""]}function formatCertCn(cn,multiple){return multiple?`${import_chalk20.default.gray("-")} ${import_chalk20.default.bold(cn)}`:import_chalk20.default.bold(cn)}function formatCertFirstCn(time,cert,cn,multiple){return[cert.uid,formatCertCn(cn,multiple),formatExpirationDate(new Date(cert.expiration)),cert.autoRenew?"yes":"no",import_chalk20.default.gray((0,import_ms5.default)(time.getTime()-new Date(cert.created).getTime()))]}function formatExpirationDate(date){let diff=date.getTime()-Date.now();return diff<0?import_chalk20.default.gray(`${(0,import_ms5.default)(-diff)} ago`):import_chalk20.default.gray(`in ${(0,import_ms5.default)(diff)}`)}var ls_default=ls2;var import_chalk21=__toESM(require_source(),1),import_ms6=__toESM(require_ms(),1),import_pluralize3=__toESM(require_pluralize(),1);async function getCertById(client,id){try{return await client.fetch(`/v6/certs/${id}`)}catch(err){if(isAPIError(err)&&err.code==="cert_not_found")return new CertNotFound(id);throw err}}import{stringify}from"querystring";async function getCustomCertsForDomain(client,context,domain2){try{let{certs}=await client.fetch(`/v5/certs?${stringify({domain:domain2,custom:!0})}`);return certs}catch(err){if(isAPIError(err)&&err.code==="forbidden")return new CertsPermissionDenied(context,domain2);throw err}}var CertsRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}};async function rm2(client,argv){let rmStamp=stamp_default(),{telemetryEventStore}=client,telemetry=new CertsRemoveTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args}=parsedArgs,id=args[0];if(telemetry.trackCliArgumentId(id),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk21.default.cyan(`${getCommandName("certs delete <id or cn>")}`)}`),2;let contextName=await getContextName(client),certs=await getCertsToDelete(client,contextName,id);return certs instanceof CertsPermissionDenied?(output_manager_default.error(`You don't have access to ${param(id)}'s certs under ${contextName}.`),1):certs.length===0?(id.includes(".")?output_manager_default.error(`No custom certificates found for "${id}" under ${import_chalk21.default.bold(contextName)}`):output_manager_default.error(`No certificates found by id "${id}" under ${import_chalk21.default.bold(contextName)}`),1):(await readConfirmation(client,"The following certificates will be deleted permanently",certs)&&(await Promise.all(certs.map(cert=>deleteCertById(client,cert.uid))),output_manager_default.success(`${import_chalk21.default.bold((0,import_pluralize3.default)("Certificate",certs.length,!0))} deleted ${rmStamp()}`)),0)}async function getCertsToDelete(client,contextName,id){let cert=await getCertById(client,id);if(cert instanceof CertNotFound){let certs=await getCustomCertsForDomain(client,contextName,id);return certs instanceof CertsPermissionDenied,certs}return[cert]}function readConfirmation(client,msg,certs){return new Promise(resolve4=>{output_manager_default.log(msg),output_manager_default.print(`${table(certs.map(formatCertRow),{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
|
|
87
|
-
`),output_manager_default.print(`${import_chalk21.default.bold.red("> Are you sure?")} ${import_chalk21.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve4(d.toString().trim().toLowerCase()==="y")}).resume()})}function formatCertRow(cert){return[cert.uid,import_chalk21.default.bold(cert.cns?cert.cns.join(", "):"\u2013"),...cert.created?[import_chalk21.default.gray(`${(0,import_ms6.default)(Date.now()-new Date(cert.created).getTime())} ago`)]:[]]}var rm_default=rm2;var CertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandIssue(actual){this.trackCliSubcommand({subcommand:"issue",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG5={add:getCommandAliases(addSubcommand),issue:getCommandAliases(issueSubcommand),ls:getCommandAliases(listSubcommand3),delete:getCommandAliases(removeSubcommand2)};async function main2(client){let{telemetryEventStore}=client,telemetry=new CertsTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(certsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG5),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("certs",subcommand),output_manager_default.print(help(certsCommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:certsCommand,columns:client.stderr.columns}))}switch(subcommand){case"issue":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(issueSubcommand),0):(telemetry.trackCliSubcommandIssue(subcommandOriginal),issue(client,args));case"ls":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(listSubcommand3),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls_default(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(removeSubcommand2),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"certs remove","certs delete"),rm_default(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(addSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add_default(client,args));default:return output_manager_default.error("Please specify a valid subcommand: ls | issue | delete"),output_manager_default.print(help(certsCommand,{columns:client.stderr.columns})),2}}var import_chalk23=__toESM(require_source(),1);async function addDNSRecord(client,domain2,recordData){try{return await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{body:recordData,method:"POST"})}catch(err){if(isAPIError(err)){if(err.status===400&&err.code==="invalid_type")return new DNSInvalidType(recordData.type);if(err.status===400&&err.message.includes("port"))return new DNSInvalidPort;if(err.status===400)return err;if(err.status===403)return new DNSPermissionDenied(domain2);if(err.status===404)return new DomainNotFound(domain2);if(err.status===409){let{oldId=""}=err;return new DNSConflictingRecord(oldId)}}throw err}}function parseAddArgs(args){if(!args||args.length<1)return null;let[domain2,...rest]=args;if(domain2&&rest.length===0)return{domain:domain2,data:null};let name=args[1]==="@"?"":args[1].toString(),type=args[2],value=args[3];return domain2&&typeof name=="string"&&type?type==="MX"&&args.length===5?{domain:domain2,data:{name,type,value,mxPriority:Number(args[4])}}:type==="SRV"&&args.length===7?{domain:domain2,data:{name,type,srv:{priority:Number(value),weight:Number(args[4]),port:Number(args[5]),target:args[6]}}}:args.length===4?{domain:domain2,data:{name,type,value}}:null:null}var import_chalk22=__toESM(require_source(),1);var RECORD_TYPES=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"];async function getDNSData(client,data){if(data)return data;try{let possibleTypes=new Set(RECORD_TYPES),type=(await client.input.text({message:`- Record type (${RECORD_TYPES.join(", ")}): `,validate:v=>!!(v&&possibleTypes.has(v.trim().toUpperCase()))})).trim().toUpperCase(),name=await getRecordName(client,type);if(type==="SRV"){let priority=await getNumber(client,`- ${type} priority: `),weight=await getNumber(client,`- ${type} weight: `),port=await getNumber(client,`- ${type} port: `),target=await getTrimmedString(client,`- ${type} target: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(`${priority}`)} ${import_chalk22.default.cyan(`${weight}`)} ${import_chalk22.default.cyan(`${port}`)} ${import_chalk22.default.cyan(target)}.`),await verifyData(client)?{name,type,srv:{priority,weight,port,target}}:null}if(type==="MX"){let mxPriority=await getNumber(client,`- ${type} priority: `),value2=await getTrimmedString(client,`- ${type} host: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(`${mxPriority}`)} ${import_chalk22.default.cyan(value2)}`),await verifyData(client)?{name,type,value:value2,mxPriority}:null}let value=await getTrimmedString(client,`- ${type} value: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(value)}`),await verifyData(client)?{name,type,value}:null}catch{return null}}async function verifyData(client){return client.input.confirm("Is this correct?",!1)}async function getRecordName(client,type){let input=await client.input.text({message:`- ${type} name: `});return input==="@"?"":input}async function getNumber(client,label){return Number(await client.input.text({message:label,validate:v=>!!(v&&Number(v))}))}async function getTrimmedString(client,label){return(await client.input.text({message:label,validate:v=>!!(v&&v.trim().length>0)})).trim()}var ALLOWED_RECORD_TYPES=["A","AAAA","ALIAS","CNAME","TXT","MX","SRV"],DnsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES.includes(type)?type:this.redactedValue;this.trackCliArgument({arg:"type",value:allowedType})}}trackCliArgumentValues(values){values?.length&&this.trackCliArgument({arg:"values",value:this.redactedValue})}};async function add2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,parsedParams=parseAddArgs(args);if(!parsedParams){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to add a DNS record (see dns --help for MX/SRV forms)"}]},2)}return output_manager_default.error(`Invalid number of arguments. See: ${import_chalk23.default.cyan(`${getCommandName("dns --help")}`)} for usage.`),2}let addStamp=stamp_default(),{domain:domain2,data:argData}=parsedParams,valueArgs=args.slice(3);if(client.nonInteractive&&!argData){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:"In non-interactive mode full record details are required. Run: "+cmd2,next:[{command:cmd2,when:"to add a DNS record (replace placeholders)"},{command:withGlobalFlags(client,"dns --help"),when:"for usage and examples"}]},2),2}let telemetryClient=new DnsAddTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliArgumentDomain(domain2),telemetryClient.trackCliArgumentName(parsedParams.data?.name),telemetryClient.trackCliArgumentType(parsedParams.data?.type),telemetryClient.trackCliArgumentValues(valueArgs);let data=await getDNSData(client,argData);if(!data)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INCOMPLETE_RECORD,message:"Record details could not be determined non-interactively. Provide full arguments for dns add.",next:[{command:withGlobalFlags(client,"dns --help")}]},1),output_manager_default.log("Canceled"),1;let contextName=await getContextName(client),record=await addDNSRecord(client,domain2,data);return record instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),1):record instanceof DNSPermissionDenied?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PERMISSION_DENIED,message:`You don't have permissions to add records to domain ${domain2} under ${contextName}.`},1),output_manager_default.error(`You don't have permissions to add records to domain ${domain2} under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),1):record instanceof DNSInvalidPort?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_PORT,message:"Invalid <port> parameter. A number was expected."},2),output_manager_default.error(`Invalid <port> parameter. A number was expected ${import_chalk23.default.gray(addStamp())}`),2):record instanceof DNSInvalidType?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DNS_TYPE,message:`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT.`},2),output_manager_default.error(`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT ${import_chalk23.default.gray(addStamp())}`),2):record instanceof Error?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_ADD_FAILED,message:record.message},1),output_manager_default.error(record.message),1):(output_manager_default.success(`DNS record for domain ${import_chalk23.default.bold(domain2)} ${import_chalk23.default.gray(`(${record.uid})`)} created under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),0)}var import_chalk25=__toESM(require_source(),1);var import_chalk24=__toESM(require_source(),1);import{readFileSync as readFileSync2}from"fs";import{resolve as resolve3}from"path";async function importZonefile(client,contextName,domain2,zonefilePath){output_manager_default.spinner(`Importing Zone file for domain ${domain2} under ${import_chalk24.default.bold(contextName)}`);let zonefile=readFileSync2(resolve3(zonefilePath),"utf8");try{let res=await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{headers:{"Content-Type":"text/dns"},body:zonefile,method:"PUT",json:!1}),{recordIds}=await res.json();return recordIds}catch(err){if(isAPIError(err)){if(err.code==="not_found")return new DomainNotFound(domain2,contextName);if(err.code==="invalid_domain")return new InvalidDomain(domain2)}throw err}}var DnsImportTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentZonefile(path3){path3&&this.trackCliArgument({arg:"zoneFilePath",value:this.redactedValue})}};async function importZone(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(importSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,{telemetryEventStore}=client,contextName=await getContextName(client),telemetry=new DnsImportTelemetryClient({opts:{store:telemetryEventStore}});if(args.length!==2){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns import <domain> <zonefile>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to import a zone file"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk25.default.cyan(`${getCommandName("dns import <domain> <zonefile>")}`)}`),2}let addStamp=stamp_default(),[domain2,zonefilePath]=args;telemetry.trackCliArgumentDomain(domain2),telemetry.trackCliArgumentZonefile(zonefilePath);let recordIds=await importZonefile(client,contextName,domain2,zonefilePath);return recordIds instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk25.default.bold(contextName)} ${import_chalk25.default.gray(addStamp())}`),1):recordIds instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DOMAIN,message:`The domain ${domain2} doesn't match the one found in the zone file.`},1),output_manager_default.error(`The domain ${domain2} doesn't match with the one found in the Zone file ${import_chalk25.default.gray(addStamp())}`),1):(output_manager_default.success(`${recordIds.length} DNS records for domain ${import_chalk25.default.bold(domain2)} created under ${import_chalk25.default.bold(contextName)} ${import_chalk25.default.gray(addStamp())}`),0)}var import_chalk26=__toESM(require_source(),1);async function getDNSRecordById(client,id){return client.fetch(`/v5/domains/records/${id}`)}function handleDNSRecordError(err){if(isAPIError(err))switch(err.status){case 404:return output_manager_default.error("DNS record not found"),1;case 403:return output_manager_default.error("You don't have permission to access this DNS record."),1;case 400:return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}var DnsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect3(client,argv){let telemetry=new DnsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk26.default.cyan(`${getCommandName("dns inspect <id>")}`)}`),2;let[recordId]=args;telemetry.trackCliArgumentId(recordId);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),record;try{record=await getDNSRecordById(client,recordId)}catch(err){return handleDNSRecordError(err)}return record?asJson?(client.stdout.write(`${JSON.stringify(record,null,2)}
|
|
87
|
+
`),output_manager_default.print(`${import_chalk21.default.bold.red("> Are you sure?")} ${import_chalk21.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve4(d.toString().trim().toLowerCase()==="y")}).resume()})}function formatCertRow(cert){return[cert.uid,import_chalk21.default.bold(cert.cns?cert.cns.join(", "):"\u2013"),...cert.created?[import_chalk21.default.gray(`${(0,import_ms6.default)(Date.now()-new Date(cert.created).getTime())} ago`)]:[]]}var rm_default=rm2;var CertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandIssue(actual){this.trackCliSubcommand({subcommand:"issue",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG5={add:getCommandAliases(addSubcommand),issue:getCommandAliases(issueSubcommand),ls:getCommandAliases(listSubcommand3),delete:getCommandAliases(removeSubcommand2)};async function main2(client){let{telemetryEventStore}=client,telemetry=new CertsTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(certsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG5),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("certs",subcommand),output_manager_default.print(help(certsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:certsCommand,columns:client.stderr.columns}))}switch(subcommand){case"issue":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(issueSubcommand),0):(telemetry.trackCliSubcommandIssue(subcommandOriginal),issue(client,args));case"ls":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(listSubcommand3),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls_default(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(removeSubcommand2),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"certs remove","certs delete"),rm_default(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(addSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add_default(client,args));default:return output_manager_default.error("Please specify a valid subcommand: ls | issue | delete"),output_manager_default.print(help(certsCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk23=__toESM(require_source(),1);async function addDNSRecord(client,domain2,recordData){try{return await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{body:recordData,method:"POST"})}catch(err){if(isAPIError(err)){if(err.status===400&&err.code==="invalid_type")return new DNSInvalidType(recordData.type);if(err.status===400&&err.message.includes("port"))return new DNSInvalidPort;if(err.status===400)return err;if(err.status===403)return new DNSPermissionDenied(domain2);if(err.status===404)return new DomainNotFound(domain2);if(err.status===409){let{oldId=""}=err;return new DNSConflictingRecord(oldId)}}throw err}}function parseAddArgs(args){if(!args||args.length<1)return null;let[domain2,...rest]=args;if(domain2&&rest.length===0)return{domain:domain2,data:null};let name=args[1]==="@"?"":args[1].toString(),type=args[2],value=args[3];return domain2&&typeof name=="string"&&type?type==="MX"&&args.length===5?{domain:domain2,data:{name,type,value,mxPriority:Number(args[4])}}:type==="SRV"&&args.length===7?{domain:domain2,data:{name,type,srv:{priority:Number(value),weight:Number(args[4]),port:Number(args[5]),target:args[6]}}}:args.length===4?{domain:domain2,data:{name,type,value}}:null:null}var import_chalk22=__toESM(require_source(),1);var RECORD_TYPES=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"];async function getDNSData(client,data){if(data)return data;try{let possibleTypes=new Set(RECORD_TYPES),type=(await client.input.text({message:`- Record type (${RECORD_TYPES.join(", ")}): `,validate:v=>!!(v&&possibleTypes.has(v.trim().toUpperCase()))})).trim().toUpperCase(),name=await getRecordName(client,type);if(type==="SRV"){let priority=await getNumber(client,`- ${type} priority: `),weight=await getNumber(client,`- ${type} weight: `),port=await getNumber(client,`- ${type} port: `),target=await getTrimmedString(client,`- ${type} target: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(`${priority}`)} ${import_chalk22.default.cyan(`${weight}`)} ${import_chalk22.default.cyan(`${port}`)} ${import_chalk22.default.cyan(target)}.`),await verifyData(client)?{name,type,srv:{priority,weight,port,target}}:null}if(type==="MX"){let mxPriority=await getNumber(client,`- ${type} priority: `),value2=await getTrimmedString(client,`- ${type} host: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(`${mxPriority}`)} ${import_chalk22.default.cyan(value2)}`),await verifyData(client)?{name,type,value:value2,mxPriority}:null}let value=await getTrimmedString(client,`- ${type} value: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(value)}`),await verifyData(client)?{name,type,value}:null}catch{return null}}async function verifyData(client){return client.input.confirm("Is this correct?",!1)}async function getRecordName(client,type){let input=await client.input.text({message:`- ${type} name: `});return input==="@"?"":input}async function getNumber(client,label){return Number(await client.input.text({message:label,validate:v=>!!(v&&Number(v))}))}async function getTrimmedString(client,label){return(await client.input.text({message:label,validate:v=>!!(v&&v.trim().length>0)})).trim()}var ALLOWED_RECORD_TYPES=["A","AAAA","ALIAS","CNAME","TXT","MX","SRV"],DnsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES.includes(type)?type:this.redactedValue;this.trackCliArgument({arg:"type",value:allowedType})}}trackCliArgumentValues(values){values?.length&&this.trackCliArgument({arg:"values",value:this.redactedValue})}};async function add2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,parsedParams=parseAddArgs(args);if(!parsedParams){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to add a DNS record (see dns --help for MX/SRV forms)"}]},2)}return output_manager_default.error(`Invalid number of arguments. See: ${import_chalk23.default.cyan(`${getCommandName("dns --help")}`)} for usage.`),2}let addStamp=stamp_default(),{domain:domain2,data:argData}=parsedParams,valueArgs=args.slice(3);if(client.nonInteractive&&!argData){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:"In non-interactive mode full record details are required. Run: "+cmd2,next:[{command:cmd2,when:"to add a DNS record (replace placeholders)"},{command:withGlobalFlags(client,"dns --help"),when:"for usage and examples"}]},2),2}let telemetryClient=new DnsAddTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliArgumentDomain(domain2),telemetryClient.trackCliArgumentName(parsedParams.data?.name),telemetryClient.trackCliArgumentType(parsedParams.data?.type),telemetryClient.trackCliArgumentValues(valueArgs);let data=await getDNSData(client,argData);if(!data)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INCOMPLETE_RECORD,message:"Record details could not be determined non-interactively. Provide full arguments for dns add.",next:[{command:withGlobalFlags(client,"dns --help")}]},1),output_manager_default.log("Canceled"),1;let contextName=await getContextName(client),record=await addDNSRecord(client,domain2,data);return record instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),1):record instanceof DNSPermissionDenied?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PERMISSION_DENIED,message:`You don't have permissions to add records to domain ${domain2} under ${contextName}.`},1),output_manager_default.error(`You don't have permissions to add records to domain ${domain2} under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),1):record instanceof DNSInvalidPort?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_PORT,message:"Invalid <port> parameter. A number was expected."},2),output_manager_default.error(`Invalid <port> parameter. A number was expected ${import_chalk23.default.gray(addStamp())}`),2):record instanceof DNSInvalidType?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DNS_TYPE,message:`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT.`},2),output_manager_default.error(`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT ${import_chalk23.default.gray(addStamp())}`),2):record instanceof Error?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_ADD_FAILED,message:record.message},1),output_manager_default.error(record.message),1):(output_manager_default.success(`DNS record for domain ${import_chalk23.default.bold(domain2)} ${import_chalk23.default.gray(`(${record.uid})`)} created under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),0)}var import_chalk25=__toESM(require_source(),1);var import_chalk24=__toESM(require_source(),1);import{readFileSync as readFileSync2}from"fs";import{resolve as resolve3}from"path";async function importZonefile(client,contextName,domain2,zonefilePath){output_manager_default.spinner(`Importing Zone file for domain ${domain2} under ${import_chalk24.default.bold(contextName)}`);let zonefile=readFileSync2(resolve3(zonefilePath),"utf8");try{let res=await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{headers:{"Content-Type":"text/dns"},body:zonefile,method:"PUT",json:!1}),{recordIds}=await res.json();return recordIds}catch(err){if(isAPIError(err)){if(err.code==="not_found")return new DomainNotFound(domain2,contextName);if(err.code==="invalid_domain")return new InvalidDomain(domain2)}throw err}}var DnsImportTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentZonefile(path3){path3&&this.trackCliArgument({arg:"zoneFilePath",value:this.redactedValue})}};async function importZone(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(importSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,{telemetryEventStore}=client,contextName=await getContextName(client),telemetry=new DnsImportTelemetryClient({opts:{store:telemetryEventStore}});if(args.length!==2){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns import <domain> <zonefile>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to import a zone file"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk25.default.cyan(`${getCommandName("dns import <domain> <zonefile>")}`)}`),2}let addStamp=stamp_default(),[domain2,zonefilePath]=args;telemetry.trackCliArgumentDomain(domain2),telemetry.trackCliArgumentZonefile(zonefilePath);let recordIds=await importZonefile(client,contextName,domain2,zonefilePath);return recordIds instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk25.default.bold(contextName)} ${import_chalk25.default.gray(addStamp())}`),1):recordIds instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DOMAIN,message:`The domain ${domain2} doesn't match the one found in the zone file.`},1),output_manager_default.error(`The domain ${domain2} doesn't match with the one found in the Zone file ${import_chalk25.default.gray(addStamp())}`),1):(output_manager_default.success(`${recordIds.length} DNS records for domain ${import_chalk25.default.bold(domain2)} created under ${import_chalk25.default.bold(contextName)} ${import_chalk25.default.gray(addStamp())}`),0)}var import_chalk26=__toESM(require_source(),1);async function getDNSRecordById(client,id){return client.fetch(`/v5/domains/records/${id}`)}function handleDNSRecordError(err){if(isAPIError(err))switch(err.status){case 404:return output_manager_default.error("DNS record not found"),1;case 403:return output_manager_default.error("You don't have permission to access this DNS record."),1;case 400:return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}var DnsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect3(client,argv){let telemetry=new DnsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk26.default.cyan(`${getCommandName("dns inspect <id>")}`)}`),2;let[recordId]=args;telemetry.trackCliArgumentId(recordId);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),record;try{record=await getDNSRecordById(client,recordId)}catch(err){return handleDNSRecordError(err)}return record?asJson?(client.stdout.write(`${JSON.stringify(record,null,2)}
|
|
88
88
|
`),0):(output_manager_default.log(`DNS record ${import_chalk26.default.bold(record.id)} of domain ${import_chalk26.default.bold(record.domain)} under ${import_chalk26.default.bold(contextName)}`),client.stdout.write(formatRecordDetails(record)),0):(output_manager_default.error("DNS record not found"),1)}function formatRecordDetails(record){let rows=[["ID",record.id],["Name",record.name||"@"],["Domain",record.domain],["Type",record.type],["Value",record.value]],priority=record.priority??record.mxPriority;return priority!==void 0&&rows.push(["Priority",`${priority}`]),record.ttl!==void 0&&rows.push(["TTL",`${record.ttl}`]),record.comment&&rows.push(["Comment",record.comment]),rows.push(["Creator",record.creator]),rows.push(["Created",formatDate(record.createdAt)]),record.updatedAt&&rows.push(["Updated",formatDate(record.updatedAt)]),`${table(rows,{align:["l","l"],hsep:2}).replace(/^(.*)/gm," $1")}
|
|
89
89
|
`}var import_chalk28=__toESM(require_source(),1),import_ms7=__toESM(require_ms(),1);async function getDomainDNSRecords(client,domain2,apiVersion=3,nextTimestamp,limit=20){output_manager_default.debug(`Fetching for DNS records of domain ${domain2}`);try{let url=`/v${apiVersion}/domains/${encodeURIComponent(domain2)}/records?limit=${limit}`;return nextTimestamp&&(url+=`&until=${nextTimestamp}`),await client.fetch(url)}catch(err){if(isAPIError(err)&&err.code==="not_found")return new DomainNotFound(domain2);throw err}}var import_chalk27=__toESM(require_source(),1);async function getDNSRecords(client,contextName,next){let{domainNames,pagination}=await getDomainNames(client,contextName,next);return{records:(await Promise.all(domainNames.map(createGetDomainRecords(client)))).map(item=>item instanceof DomainNotFound?[]:item).reduce(getAddDomainName(domainNames),[]),pagination}}function createGetDomainRecords(client){return async domainName=>{let data=await getDomainDNSRecords(client,domainName);return data instanceof DomainNotFound?[]:data.records}}function getAddDomainName(domainNames){return(prev,item,idx)=>[...prev,{domainName:domainNames[idx],records:item}]}async function getDomainNames(client,contextName,next){output_manager_default.spinner(`Fetching domains under ${import_chalk27.default.bold(contextName)}`);let{domains:domains2,pagination}=await getDomains(client,next);return{domainNames:domains2.map(domain2=>domain2.name),pagination}}var DnsLsTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs;if(client.nonInteractive&&args.length>1){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls <domain> ${flags.join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to list DNS records (optional single domain)"}]},2),2}let validationResult=validateLsArgs({commandName:"dns ls <domain>",args,maxArgs:1,exitCode:1});if(validationResult!==0)return validationResult;let{telemetryEventStore}=client,telemetry=new DnsLsTelemetryClient({opts:{store:telemetryEventStore}}),[domainName]=args;telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),lsStamp=stamp_default(),paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}if(domainName){let data=await getDomainDNSRecords(client,domainName,5,...paginationOptions);if(data instanceof DomainNotFound){if(client.nonInteractive){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls ${flags.join(" ")}`.trim());outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domainName} can't be found under ${contextName}.`,next:[{command:cmd2,when:"to list available DNS records"}]},1)}return output_manager_default.error(`The domain ${domainName} can't be found under ${import_chalk28.default.bold(contextName)} ${import_chalk28.default.gray(lsStamp())}`),1}let{records,pagination:pagination2}=data,dnsRecords2=[{domainName,records}];if(asJson)return outputDnsRecordsJson(client,dnsRecords2,pagination2),0;if(output_manager_default.log(`${records.length>0?"Records":"No records"} found under ${import_chalk28.default.bold(contextName)} ${import_chalk28.default.gray(lsStamp())}`),client.stdout.write(getDNSRecordsTable(dnsRecords2)),pagination2?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.print(`
|
|
90
90
|
`),printNextPageCommand(getCommandNamePlain(`dns ls ${domainName}${flags} --next ${pagination2.next}`))}return 0}let{records:dnsRecords,pagination}=await getDNSRecords(client,contextName,...paginationOptions);if(asJson)return outputDnsRecordsJson(client,dnsRecords,pagination),0;let nRecords=dnsRecords.reduce((p,r)=>r.records.length+p,0);if(output_manager_default.log(`${nRecords>0?"Records":"No records"} found under ${import_chalk28.default.bold(contextName)} ${import_chalk28.default.gray(lsStamp())}`),output_manager_default.log(getDNSRecordsTable(dnsRecords)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);printNextPageCommand(getCommandNamePlain(`dns ls${flags} --next ${pagination.next}`))}return 0}function getDNSRecordsTable(dnsRecords){return formatTable(["","id","name","type","value","created"],["l","r","l","l","l","l"],dnsRecords.map(({domainName,records})=>({name:import_chalk28.default.bold(domainName),rows:records.map(getDNSRecordRow)})))}function getDNSRecordRow(record){let isSystemRecord=record.creator==="system",createdAt=`${(0,import_ms7.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`,priority=record.mxPriority||record.priority||null;return["",isSystemRecord?"":record.id,record.name,record.type,priority?`${priority} ${record.value}`:record.value,import_chalk28.default.gray(isSystemRecord?"default":createdAt)]}function outputDnsRecordsJson(client,records,pagination){output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({records,pagination},null,2)}
|
|
91
91
|
`)}var import_chalk29=__toESM(require_source(),1),import_ms8=__toESM(require_ms(),1);async function deleteDNSRecordById(client,domain2,recordId){return client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records/${recordId}`,{method:"DELETE"})}var DnsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"recordId",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs,{telemetryEventStore}=client,telemetry=new DnsRmTelemetryClient({opts:{store:telemetryEventStore}});await getScope(client);let[recordId]=args;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns remove <id> --yes");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to remove a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk29.default.cyan(`${getCommandName("dns remove <id>")}`)}`),2}telemetry.trackCliArgumentId(recordId),telemetry.trackCliFlagYes(flags["--yes"]);let record=await getDNSRecordById(client,recordId);if(!record)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_RECORD_NOT_FOUND,message:"DNS record not found.",next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records and ids"}]},1),output_manager_default.error("DNS record not found"),1;let{domain:domainName}=record,skipConfirmation=flags["--yes"];if(client.nonInteractive&&!skipConfirmation)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"In non-interactive mode --yes is required to remove a DNS record.",next:[{command:buildCommandWithYes(client.argv),when:"to confirm removal"}]},1),1;if(!(skipConfirmation||await readConfirmation2(client,"The following record will be removed permanently",domainName,record)))return output_manager_default.error("User canceled."),0;let rmStamp=stamp_default();return await deleteDNSRecordById(client,domainName,record.id),output_manager_default.success(`Record ${import_chalk29.default.gray(`${record.id}`)} removed ${import_chalk29.default.gray(rmStamp())}`),0}function readConfirmation2(client,msg,domainName,record){return new Promise(resolve4=>{output_manager_default.log(msg),output_manager_default.print(`${table([getDeleteTableRow(domainName,record)],{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
|
|
92
92
|
`),output_manager_default.print(`${import_chalk29.default.bold.red("> Are you sure?")} ${import_chalk29.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve4(d.toString().trim().toLowerCase()==="y")}).resume()})}function getDeleteTableRow(domainName,record){let recordName=`${record.name.length>0?`${record.name}.`:""}${domainName}`;return[record.id,import_chalk29.default.bold(`${recordName} ${record.type} ${record.value} ${record.mxPriority||""}`),import_chalk29.default.gray(`${(0,import_ms8.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`)]}var import_chalk30=__toESM(require_source(),1);async function updateDNSRecord(client,recordId,data){return client.fetch(`/v1/domains/records/${encodeURIComponent(recordId)}`,{method:"PATCH",body:data})}var ALLOWED_RECORD_TYPES2=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"],DnsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionName(name){name!==void 0&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES2.includes(type)?type:this.redactedValue;this.trackCliOption({option:"type",value:allowedType})}}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionTtl(ttl){ttl!==void 0&&this.trackCliOption({option:"ttl",value:this.redactedValue})}trackCliOptionMxPriority(mxPriority){mxPriority!==void 0&&this.trackCliOption({option:"mx-priority",value:this.redactedValue})}trackCliOptionSrvPriority(srvPriority){srvPriority!==void 0&&this.trackCliOption({option:"srv-priority",value:this.redactedValue})}trackCliOptionSrvWeight(srvWeight){srvWeight!==void 0&&this.trackCliOption({option:"srv-weight",value:this.redactedValue})}trackCliOptionSrvPort(srvPort){srvPort!==void 0&&this.trackCliOption({option:"srv-port",value:this.redactedValue})}trackCliOptionSrvTarget(srvTarget){srvTarget&&this.trackCliOption({option:"srv-target",value:this.redactedValue})}trackCliOptionComment(comment){comment!==void 0&&this.trackCliOption({option:"comment",value:this.redactedValue})}};var SRV_FLAGS=["--srv-priority","--srv-weight","--srv-port","--srv-target"];async function update(client,argv){let telemetry=new DnsUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk30.default.cyan(`${getCommandName("dns update <id> [options]")}`)}`),2}let[recordId]=args;telemetry.trackCliArgumentId(recordId),telemetry.trackCliOptionName(flags["--name"]),telemetry.trackCliOptionType(flags["--type"]),telemetry.trackCliOptionValue(flags["--value"]),telemetry.trackCliOptionTtl(flags["--ttl"]),telemetry.trackCliOptionMxPriority(flags["--mx-priority"]),telemetry.trackCliOptionSrvPriority(flags["--srv-priority"]),telemetry.trackCliOptionSrvWeight(flags["--srv-weight"]),telemetry.trackCliOptionSrvPort(flags["--srv-port"]),telemetry.trackCliOptionSrvTarget(flags["--srv-target"]),telemetry.trackCliOptionComment(flags["--comment"]);let numericFlags=["--ttl","--mx-priority","--srv-priority","--srv-weight","--srv-port"];for(let flagName of numericFlags){let value=flags[flagName];if(value!==void 0&&Number.isNaN(value))return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The ${flagName} option must be a number.`},2),output_manager_default.error(`The ${flagName} option must be a number.`),2}let data={},name=flags["--name"];name!==void 0&&(data.name=name==="@"?"":name),flags["--type"]!==void 0&&(data.type=flags["--type"]),flags["--value"]!==void 0&&(data.value=flags["--value"]),flags["--ttl"]!==void 0&&(data.ttl=flags["--ttl"]),flags["--mx-priority"]!==void 0&&(data.mxPriority=flags["--mx-priority"]),flags["--comment"]!==void 0&&(data.comment=flags["--comment"]);let srvFlagsProvided=SRV_FLAGS.filter(flagName=>flags[flagName]!==void 0);if(srvFlagsProvided.length>0){if(srvFlagsProvided.length!==SRV_FLAGS.length)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`},2),output_manager_default.error(`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`),2;data.srv={priority:flags["--srv-priority"],weight:flags["--srv-weight"],port:flags["--srv-port"],target:flags["--srv-target"]}}if(Object.keys(data).length===0){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.NO_CHANGES_REQUESTED,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Provide at least one field to update. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record (e.g. --value, --ttl, --comment)"},{command:withGlobalFlags(client,"dns update --help"),when:"for available options"}]},1)}return output_manager_default.error(`Provide at least one field to update. See ${import_chalk30.default.cyan(`${getCommandName("dns update --help")}`)} for available options.`),2}let changeSummary=Object.entries(data).map(([field,value])=>`${field}=${value===""?"@":value}`).join(", ");if(!canPrompt(client)){let rerun=getCommandNamePlain(stripSensitiveAuthArgs(client.argv.slice(2)).filter(arg=>arg!=="--non-interactive"&&!arg.startsWith("--non-interactive=")).join(" "));return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Updating DNS record ${recordId} (${changeSummary}) overwrites a live record. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:rerun,when:"user runs this command in an interactive terminal to confirm"}]},1),output_manager_default.error("This command must be run interactively to confirm overwriting the DNS record."),1}if(output_manager_default.print(prependEmoji(`Updating DNS record ${import_chalk30.default.gray(recordId)} will overwrite: ${import_chalk30.default.bold(changeSummary)}
|
|
93
|
-
`,emoji("warning"))),!await client.input.confirm(`Update DNS record ${recordId}?`,!1))return output_manager_default.log("Canceled"),0;let updateStamp=stamp_default(),record;try{record=await updateDNSRecord(client,recordId,data)}catch(err){if(isAPIError(err)){if(err.status===404)return output_manager_default.error("DNS record not found"),1;if(err.status===403)return output_manager_default.error("You don't have permission to access this DNS record."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}let contextName=await getContextName(client);return output_manager_default.success(`DNS record ${import_chalk30.default.gray(`${record.id}`)} of domain ${import_chalk30.default.bold(record.domain)} updated under ${import_chalk30.default.bold(contextName)} ${import_chalk30.default.gray(updateStamp())}`),0}var DnsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG6={add:getCommandAliases(addSubcommand2),import:getCommandAliases(importSubcommand),inspect:getCommandAliases(inspectSubcommand2),ls:getCommandAliases(listSubcommand4),rm:getCommandAliases(removeSubcommand3),update:getCommandAliases(updateSubcommand)};async function dns(client){let{telemetryEventStore}=client,parsedArgs,flagsSpecification=getFlagsSpecification(dnsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let telemetry=new DnsTelemetryClient({opts:{store:telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG6),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("dns",subcommand),output_manager_default.print(help(dnsCommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:dnsCommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(addSubcommand2),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"import":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(importSubcommand),0):(telemetry.trackCliSubcommandImport(subcommandOriginal),importZone(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(inspectSubcommand2),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect3(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(removeSubcommand3),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm3(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(updateSubcommand),0):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),update(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(listSubcommand4),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls3(client,args))}}var import_chalk31=__toESM(require_source(),1);import{join}from"path";var GitConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentGitUrl(name){name&&this.trackCliArgument({arg:"gitUrl",value:this.redactedValue})}trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function connect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(connectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,{cwd}=client,telemetry=new GitConnectTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]);let confirm=!!opts["--yes"];if(args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk31.default.cyan(`${getCommandName("project connect")}`)}`),2;let repoArg=args[0];telemetry.trackCliArgumentGitUrl(repoArg);let projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm:confirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{project,org}=linkedProject,gitProviderLink=project.link;client.config.currentTeam=org.type==="team"?org.id:void 0;let gitConfigPath=getGitConfigPath({cwd})??join(cwd,".git/config"),gitConfig=await parseGitConfig(gitConfigPath);if(repoArg){let parsedUrlArg=parseRepoUrl(repoArg);return parsedUrlArg?gitConfig?await connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo:parsedUrlArg}):await connectArg({client,confirm,org,project,repoInfo:parsedUrlArg}):(output_manager_default.error(`Failed to parse URL "${repoArg}". Please ensure the URL is valid.`),1)}if(!gitConfig)return output_manager_default.error(`No local Git repository found. Run ${import_chalk31.default.cyan("`git clone <url>`")} to clone a remote Git repository first.`),1;let remoteUrls=pluckRemoteUrls(gitConfig);if(!remoteUrls)return output_manager_default.error(`No remote URLs found in your Git config. Make sure you've configured a remote repo in your local Git config. Run ${import_chalk31.default.cyan("`git remote --help`")} for more details.`),1;let repoInfo=await selectAndParseRemoteUrl(client,remoteUrls);if(!repoInfo)return Object.keys(remoteUrls).length>1?0:1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});return typeof result=="number"?result:0}async function connectArg({client,confirm,org,project,repoInfo}){let{url:repoUrl}=repoInfo,parsedRepoArg=parseRepoUrl(repoUrl);if(!parsedRepoArg)return output_manager_default.error(`Failed to parse URL "${repoUrl}". Please ensure the URL is valid.`),1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:parsedRepoArg.org,project,provider:parsedRepoArg.provider,repo:parsedRepoArg.repo,repoPath:`${parsedRepoArg.org}/${parsedRepoArg.repo}`});return typeof result=="number"?result:0}async function connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo}){let remoteUrls=pluckRemoteUrls(gitConfig);if(remoteUrls){let shouldConnect=await promptConnectArg({client,yes:confirm,repoInfo,remoteUrls});if(!shouldConnect)return 1;if(shouldConnect){let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});if(typeof result=="number")return result}return 0}return await connectArg({client,confirm,org,project,repoInfo})}async function promptConnectArg({client,yes,repoInfo:repoInfoFromArg,remoteUrls}){if(Object.keys(remoteUrls).length>1)output_manager_default.log("Found multiple Git repositories in your local Git config:"),printRemoteUrls(remoteUrls);else{let url=Object.values(remoteUrls)[0],repoInfoFromGitConfig=parseRepoUrl(url);if(!repoInfoFromGitConfig)return output_manager_default.error(`Failed to parse URL "${url}". Please ensure the URL is valid.`),!1;if(JSON.stringify(repoInfoFromGitConfig)===JSON.stringify(repoInfoFromArg))return!0;output_manager_default.log(`Found a repository in your local Git Config: ${import_chalk31.default.cyan(Object.values(remoteUrls)[0])}`)}let shouldConnect=yes;if(!shouldConnect){let{url:repoUrlFromArg}=repoInfoFromArg;shouldConnect=await client.input.confirm(`Do you still want to connect ${link_default(repoUrlFromArg)}?`,!1),shouldConnect||output_manager_default.log("Canceled. Repo not connected.")}return shouldConnect}var import_chalk32=__toESM(require_source(),1);var GitDisconnectTelemetryClient=class extends TelemetryClient{trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function disconnect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(disconnectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new GitDisconnectTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]),args.length!==0)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk32.default.cyan(`${getCommandName("project disconnect")}`)}`),2;let autoConfirm=!!parsedArgs.flags["--yes"],projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{org,project}=linkedProject;if(client.config.currentTeam=org.type==="team"?org.id:void 0,project.link){let{org:linkOrg,repo}=project.link;output_manager_default.print(`Your Vercel project will no longer create deployments when you push to this repository.
|
|
94
|
-
`),autoConfirm||await client.input.confirm(`Are you sure you want to disconnect ${import_chalk32.default.cyan(`${linkOrg}/${repo}`)} from your project?`,!1)?(await disconnectGitProvider(client,org,project.id),output_manager_default.log(`Disconnected ${import_chalk32.default.cyan(`${linkOrg}/${repo}`)}.`)):output_manager_default.log("Canceled")}else return output_manager_default.error(`No Git repository connected. Run ${getCommandName("project connect")} to connect one.`),1;return 0}var GitTelemetryClient=class extends TelemetryClient{trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}};var COMMAND_CONFIG7={connect:["connect"],disconnect:["disconnect"]};async function main3(client){let parsedArgs,flagsSpecification=getFlagsSpecification(gitCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new GitTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG7);if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("git",subcommand),output_manager_default.print(help(gitCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"connect":return telemetry.trackCliSubcommandConnect(subcommandOriginal),connect(client,args);case"disconnect":return telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,args);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG7)),output_manager_default.print(help(gitCommand,{columns:client.stderr.columns})),2}}var import_chalk33=__toESM(require_source(),1);var GlobalConfigLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function listCmd(client,argv){let telemetry=new GlobalConfigLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand5.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,lsCheck=validateLsArgs({commandName:"global-config list",args,maxArgs:0,exitCode:2});if(lsCheck!==0)return lsCheck;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(flags["--format"]);let rows;try{rows=await client.fetch("/v1/global-config")}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(rows,null,2)}
|
|
93
|
+
`,emoji("warning"))),!await client.input.confirm(`Update DNS record ${recordId}?`,!1))return output_manager_default.log("Canceled"),0;let updateStamp=stamp_default(),record;try{record=await updateDNSRecord(client,recordId,data)}catch(err){if(isAPIError(err)){if(err.status===404)return output_manager_default.error("DNS record not found"),1;if(err.status===403)return output_manager_default.error("You don't have permission to access this DNS record."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}let contextName=await getContextName(client);return output_manager_default.success(`DNS record ${import_chalk30.default.gray(`${record.id}`)} of domain ${import_chalk30.default.bold(record.domain)} updated under ${import_chalk30.default.bold(contextName)} ${import_chalk30.default.gray(updateStamp())}`),0}var DnsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG6={add:getCommandAliases(addSubcommand2),import:getCommandAliases(importSubcommand),inspect:getCommandAliases(inspectSubcommand2),ls:getCommandAliases(listSubcommand4),rm:getCommandAliases(removeSubcommand3),update:getCommandAliases(updateSubcommand)};async function dns(client){let{telemetryEventStore}=client,parsedArgs,flagsSpecification=getFlagsSpecification(dnsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let telemetry=new DnsTelemetryClient({opts:{store:telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG6),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("dns",subcommand),output_manager_default.print(help(dnsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:dnsCommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(addSubcommand2),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"import":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(importSubcommand),0):(telemetry.trackCliSubcommandImport(subcommandOriginal),importZone(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(inspectSubcommand2),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect3(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(removeSubcommand3),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm3(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(updateSubcommand),0):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),update(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(listSubcommand4),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls3(client,args))}}var import_chalk31=__toESM(require_source(),1);import{join}from"path";var GitConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentGitUrl(name){name&&this.trackCliArgument({arg:"gitUrl",value:this.redactedValue})}trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function connect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(connectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,{cwd}=client,telemetry=new GitConnectTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]);let confirm=!!opts["--yes"];if(args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk31.default.cyan(`${getCommandName("project connect")}`)}`),2;let repoArg=args[0];telemetry.trackCliArgumentGitUrl(repoArg);let projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm:confirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{project,org}=linkedProject,gitProviderLink=project.link;client.config.currentTeam=org.type==="team"?org.id:void 0;let gitConfigPath=getGitConfigPath({cwd})??join(cwd,".git/config"),gitConfig=await parseGitConfig(gitConfigPath);if(repoArg){let parsedUrlArg=parseRepoUrl(repoArg);return parsedUrlArg?gitConfig?await connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo:parsedUrlArg}):await connectArg({client,confirm,org,project,repoInfo:parsedUrlArg}):(output_manager_default.error(`Failed to parse URL "${repoArg}". Please ensure the URL is valid.`),1)}if(!gitConfig)return output_manager_default.error(`No local Git repository found. Run ${import_chalk31.default.cyan("`git clone <url>`")} to clone a remote Git repository first.`),1;let remoteUrls=pluckRemoteUrls(gitConfig);if(!remoteUrls)return output_manager_default.error(`No remote URLs found in your Git config. Make sure you've configured a remote repo in your local Git config. Run ${import_chalk31.default.cyan("`git remote --help`")} for more details.`),1;let repoInfo=await selectAndParseRemoteUrl(client,remoteUrls);if(!repoInfo)return Object.keys(remoteUrls).length>1?0:1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});return typeof result=="number"?result:0}async function connectArg({client,confirm,org,project,repoInfo}){let{url:repoUrl}=repoInfo,parsedRepoArg=parseRepoUrl(repoUrl);if(!parsedRepoArg)return output_manager_default.error(`Failed to parse URL "${repoUrl}". Please ensure the URL is valid.`),1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:parsedRepoArg.org,project,provider:parsedRepoArg.provider,repo:parsedRepoArg.repo,repoPath:`${parsedRepoArg.org}/${parsedRepoArg.repo}`});return typeof result=="number"?result:0}async function connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo}){let remoteUrls=pluckRemoteUrls(gitConfig);if(remoteUrls){let shouldConnect=await promptConnectArg({client,yes:confirm,repoInfo,remoteUrls});if(!shouldConnect)return 1;if(shouldConnect){let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});if(typeof result=="number")return result}return 0}return await connectArg({client,confirm,org,project,repoInfo})}async function promptConnectArg({client,yes,repoInfo:repoInfoFromArg,remoteUrls}){if(Object.keys(remoteUrls).length>1)output_manager_default.log("Found multiple Git repositories in your local Git config:"),printRemoteUrls(remoteUrls);else{let url=Object.values(remoteUrls)[0],repoInfoFromGitConfig=parseRepoUrl(url);if(!repoInfoFromGitConfig)return output_manager_default.error(`Failed to parse URL "${url}". Please ensure the URL is valid.`),!1;if(JSON.stringify(repoInfoFromGitConfig)===JSON.stringify(repoInfoFromArg))return!0;output_manager_default.log(`Found a repository in your local Git Config: ${import_chalk31.default.cyan(Object.values(remoteUrls)[0])}`)}let shouldConnect=yes;if(!shouldConnect){let{url:repoUrlFromArg}=repoInfoFromArg;shouldConnect=await client.input.confirm(`Do you still want to connect ${link_default(repoUrlFromArg)}?`,!1),shouldConnect||output_manager_default.log("Canceled. Repo not connected.")}return shouldConnect}var import_chalk32=__toESM(require_source(),1);var GitDisconnectTelemetryClient=class extends TelemetryClient{trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function disconnect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(disconnectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new GitDisconnectTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]),args.length!==0)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk32.default.cyan(`${getCommandName("project disconnect")}`)}`),2;let autoConfirm=!!parsedArgs.flags["--yes"],projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{org,project}=linkedProject;if(client.config.currentTeam=org.type==="team"?org.id:void 0,project.link){let{org:linkOrg,repo}=project.link;output_manager_default.print(`Your Vercel project will no longer create deployments when you push to this repository.
|
|
94
|
+
`),autoConfirm||await client.input.confirm(`Are you sure you want to disconnect ${import_chalk32.default.cyan(`${linkOrg}/${repo}`)} from your project?`,!1)?(await disconnectGitProvider(client,org,project.id),output_manager_default.log(`Disconnected ${import_chalk32.default.cyan(`${linkOrg}/${repo}`)}.`)):output_manager_default.log("Canceled")}else return output_manager_default.error(`No Git repository connected. Run ${getCommandName("project connect")} to connect one.`),1;return 0}var GitTelemetryClient=class extends TelemetryClient{trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}};var COMMAND_CONFIG7={connect:["connect"],disconnect:["disconnect"]};async function main3(client){let parsedArgs,flagsSpecification=getFlagsSpecification(gitCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new GitTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG7);if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("git",subcommand),output_manager_default.print(help(gitCommand,{stream:client.stderr,columns:client.stderr.columns})),0;switch(subcommand){case"connect":return telemetry.trackCliSubcommandConnect(subcommandOriginal),connect(client,args);case"disconnect":return telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,args);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG7)),output_manager_default.print(help(gitCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk33=__toESM(require_source(),1);var GlobalConfigLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function listCmd(client,argv){let telemetry=new GlobalConfigLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand5.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,lsCheck=validateLsArgs({commandName:"global-config list",args,maxArgs:0,exitCode:2});if(lsCheck!==0)return lsCheck;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(flags["--format"]);let rows;try{rows=await client.fetch("/v1/global-config")}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(rows,null,2)}
|
|
95
95
|
`),0;let contextName=await getContextName(client);if(output_manager_default.print(`${(0,import_chalk33.gray)(`${rows.length} Global Config${rows.length===1?"":"s"} found under ${contextName} ${stamp_default()}`)}
|
|
96
96
|
`),rows.length===0)return 0;let tableRows=[["id","slug","items","size","updated"].map(h=>(0,import_chalk33.gray)(h)),...rows.map(r=>[r.id,r.slug,String(r.itemCount??""),String(r.sizeInBytes??""),r.updatedAt!=null?new Date(r.updatedAt).toISOString():""])];return client.stderr.write(`${table(tableRows,{hsep:2})}
|
|
97
97
|
`),0}var import_chalk34=__toESM(require_source(),1);var GlobalConfigAddTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(value){this.trackCliArgument({arg:"slug",value})}trackCliOptionItems(value){value&&this.trackCliOption({option:"items",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function addCmd(client,argv){let telemetry=new GlobalConfigAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(addSubcommand3.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[slug]=args;if(telemetry.trackCliArgumentSlug(slug),telemetry.trackCliOptionItems(flags["--items"]),telemetry.trackCliOptionFormat(flags["--format"]),!slug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Slug is required. Usage: `vercel global-config create <slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config create <slug>")}]},2),output_manager_default.error(`Missing slug. Usage: ${import_chalk34.default.cyan(getCommandName("global-config create <slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,items;if(flags["--items"])try{let parsed=JSON.parse(String(flags["--items"]));if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return output_manager_default.error("`--items` must be a JSON object of key \u2192 value pairs."),2;items=parsed}catch{return output_manager_default.error("`--items` must be valid JSON."),1}let created;try{created=await client.fetch("/v1/global-config",{method:"POST",body:items?{slug,items}:{slug}})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
|
|
@@ -114,8 +114,8 @@ ${created.token}
|
|
|
114
114
|
`),0):(output_manager_default.log(JSON.stringify(backup,null,2)),0)}let query=new URLSearchParams3;limit!==void 0&&query.set("limit",String(limit)),next&&query.set("next",next),query.set("metadata","true");let queryString=query.toString(),suffix=queryString?`?${queryString}`:"",response=await client.fetch(`${base}${suffix}`);if(asJson)return client.stdout.write(`${JSON.stringify(response,null,2)}
|
|
115
115
|
`),0;if(!response.backups.length)return output_manager_default.log("No backups."),0;let tableRows=[["id","last modified","items","bytes"].map(h=>(0,import_chalk40.gray)(h)),...response.backups.map(backup=>[backup.id,formatDate2(backup.lastModified),formatNumber(backup.metadata?.itemsCount),formatNumber(backup.metadata?.itemsBytes)])];if(client.stderr.write(`${table(tableRows,{hsep:2})}
|
|
116
116
|
`),response.pagination?.hasNext&&response.pagination.next){let commandFlags=getCommandFlags(flags,["--format","--next","--restore","--yes"]);output_manager_default.print(`
|
|
117
|
-
`),printNextPageCommand(getCommandNamePlain(`global-config backups ${idOrSlug}${commandFlags} --next ${response.pagination.next}`))}return 0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}function formatDate2(value){if(value===void 0)return"";let timestamp=typeof value=="number"?value:Date.parse(value);return Number.isFinite(timestamp)?new Date(timestamp).toISOString():String(value)}function formatNumber(value){return value===void 0?"":String(value)}var GlobalConfigTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandItems(actual){this.trackCliSubcommand({subcommand:"items",value:actual})}trackCliSubcommandTokens(actual){this.trackCliSubcommand({subcommand:"tokens",value:actual})}trackCliSubcommandBackups(actual){this.trackCliSubcommand({subcommand:"backups",value:actual})}};async function applyLinkedProjectTeam(client){let link=await getLinkedProject(client);if(link.status==="error")return link.exitCode;link.status==="linked"&&(client.config.currentTeam=link.org.type==="team"?link.org.id:void 0)}var COMMAND_CONFIG8={list:["list","ls"],add:["add","create"],inspect:["inspect","get"],update:["update"],delete:["delete","rm","del","remove"],items:["items"],tokens:["tokens"],backups:["backups"]};async function main4(client){let parsedArgs,flagsSpecification=getFlagsSpecification(globalConfigCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}parsedArgs.args[0]==="edge-config"&&warnDeprecatedSubcommand(client,"edge-config","global-config");let telemetry=new GlobalConfigTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("global-config"),output_manager_default.print(help(globalConfigCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:globalConfigCommand,columns:client.stderr.columns})),0}if(!needHelp){let linkExitCode=await applyLinkedProjectTeam(client);if(linkExitCode!==void 0)return linkExitCode}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(addSubcommand3)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"global-config add","global-config create"),addCmd(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(getSubcommand)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"global-config get","global-config inspect"),getCmd(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(updateSubcommand2)):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),updateCmd(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(removeSubcommand4)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"global-config remove","global-config delete"),removeCmd(client,args));case"items":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(itemsSubcommand)):(telemetry.trackCliSubcommandItems(subcommandOriginal),itemsCmd(client,args));case"tokens":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(tokensSubcommand)):(telemetry.trackCliSubcommandTokens(subcommandOriginal),tokensCmd(client,args));case"backups":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(backupsSubcommand)):(telemetry.trackCliSubcommandBackups(subcommandOriginal),backupsCmd(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(listSubcommand5)):(telemetry.trackCliSubcommandList(subcommandOriginal),listCmd(client,args))}}var import_tar_fs=__toESM(require_tar_fs(),1),import_chalk41=__toESM(require_source(),1);import fs from"node:fs";import path2 from"node:path";var EXAMPLE_API="https://examples.vercel.sh";async function init(client,opts,args,telemetry){let[name,dir]=args,force=opts["--force"],examples=await fetchExampleList(client);if(!examples)throw new Error("Could not fetch example list.");let exampleList=examples.filter(x=>x.visible).map(x=>x.name);if(!name){if(client.stdin.isTTY!==!0)return output_manager_default.print("No framework provided"),0;let chosen=await chooseFromDropdown(client,"Select example:",exampleList);return chosen?extractExample(client,chosen,dir,force):(output_manager_default.log("Canceled"),0)}if(exampleList.includes(name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force);if(examples.find(x=>!x.visible&&x.name===name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force,"v1");telemetry.trackCliArgumentExample(name,!1);let found=await guess(client,exampleList,name);return typeof found=="string"?extractExample(client,found,dir,force):(output_manager_default.log("No changes made."),0)}async function fetchExampleList(client){output_manager_default.spinner("Fetching examples");let url=`${EXAMPLE_API}/v2/list.json`,body=await client.fetch(url,{teamOptional:!0});return output_manager_default.stopSpinner(),body}async function chooseFromDropdown(client,message,exampleList){let choices=exampleList.map(name=>({name,value:name,short:name}));return list(client,{message,choices})}async function extractExample(client,name,dir,force,ver="v2"){let folder=prepareFolder(client.cwd,dir||name,force);output_manager_default.spinner(`Fetching ${name}`);let url=`${EXAMPLE_API}/${ver}/download/${name}.tar.gz`;return client.fetch(url,{json:!1,teamOptional:!0}).then(async res=>{if(output_manager_default.stopSpinner(),res.status!==200)throw new Error(`Could not get ${name}.tar.gz`);await new Promise((resolve4,reject)=>{let extractor=import_tar_fs.default.extract(folder,{ignore:(_name,header)=>header?.type!=="file"&&header?.type!=="directory"}),body=toNodeReadable(res.body);body.on("error",reject),extractor.on("error",reject),extractor.on("finish",resolve4),body.pipe(extractor)});let successLog=`Initialized "${import_chalk41.default.bold(name)}" example in ${import_chalk41.default.bold(humanizePath(folder))}.`,folderRel=path2.relative(client.cwd,folder),deployHint=folderRel===""?list_item_default(`To deploy, run ${getCommandName()}.`):list_item_default(`To deploy, ${cmd(`cd ${folderRel}`)} and run ${getCommandName()}.`);return output_manager_default.success(`${successLog}
|
|
118
|
-
${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}function prepareFolder(cwd,folder,force){let dest=path2.join(cwd,folder);if(fs.existsSync(dest)){if(!fs.lstatSync(dest).isDirectory())throw new Error(`Destination path "${import_chalk41.default.bold(folder)}" already exists and is not a directory.`);if(!force&&fs.readdirSync(dest).length!==0)throw new Error(`Destination path "${import_chalk41.default.bold(folder)}" already exists and is not an empty directory. You may use ${cmd("--force")} or ${cmd("-f")} to override it.`)}else if(dest!==cwd)try{fs.mkdirSync(dest)}catch{throw new Error(`Could not create directory "${import_chalk41.default.bold(folder)}".`)}return dest}async function guess(client,exampleList,name){let GuessError=new Error(`No example found for ${import_chalk41.default.bold(name)}, run ${getCommandName("init")} to see the list of available examples.`);if(client.stdin.isTTY!==!0)throw GuessError;let found=did_you_mean_default(name,exampleList,.7);if(typeof found=="string"){if(await client.input.confirm(`Did you mean ${import_chalk41.default.bold(found)}?`,!1))return found}else throw GuessError}var import_error_utils5=__toESM(require_dist(),1);var InitTelemetryClient=class extends TelemetryClient{trackCliArgumentExample(v,knownValue){v&&this.trackCliArgument({arg:"example",value:knownValue?v:this.redactedValue})}trackCliArgumentDir(v){v&&this.trackCliArgument({arg:"dir",value:this.redactedValue})}trackCliFlagForce(v){v&&this.trackCliFlag("force")}};var COMMAND_CONFIG9={init:["init"]};async function main5(client){let parsedArgs,flagsSpecification=getFlagsSpecification(initCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new InitTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("init"),output_manager_default.print(help(initCommand,{columns:client.stderr.columns})),0;let args=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG9).args;if(parsedArgs.args.length>3)return output_manager_default.error("Too many arguments."),2;telemetry.trackCliArgumentDir(parsedArgs.args[2]),telemetry.trackCliFlagForce(parsedArgs.flags["--force"]);try{return await init(client,parsedArgs.flags,args,telemetry)}catch(err){return output_manager_default.prettyError(err),(0,import_error_utils5.isError)(err)&&typeof err.stack=="string"&&output_manager_default.debug(err.stack),1}}var import_chalk42=__toESM(require_source(),1);var idSchema=external_exports.string().max(256).regex(/^[a-zA-Z0-9_-]+$/),slugSchema=external_exports.string().min(1).max(48).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/),nameSchema=external_exports.string().min(1).max(256).refine(value=>value.trim().length>0&&!/[\x00-\x1f\x7f]/.test(value)),billingPlanSchema=external_exports.enum(["platform","enterprise"]),ORGANIZATION_ID_PREFIX="org_",TEAM_ID_PREFIX="team_";function isPrefixedId(value,prefix){return value.startsWith(prefix)&&value.length>prefix.length&&idSchema.safeParse(value).success}var SLUG_MESSAGE="Provide --slug with 1-48 lowercase letters, numbers, or hyphens, beginning and ending with a letter or number.",NAME_MESSAGE="Provide --name with 1-256 characters and no control characters.",PLAN_MESSAGE="Use --billing-plan platform or --billing-plan enterprise.";function organizationsSuggestion(subcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${subcommand} ${globalFlags.join(" ")}`:subcommand;return getCommandNamePlain(full)}function missingArgument(client,options){let next=[];return options.suggestList&&next.push({command:organizationsSuggestion("organizations list",client.argv),when:"List organizations to find an ID"}),next.push({command:organizationsSuggestion(options.usage,client.argv)}),outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,action:AGENT_ACTION.MISSING_ARGUMENTS,reason:options.reason,message:options.message,next}),output_manager_default.error(options.message),output_manager_default.log(`Usage: ${import_chalk42.default.cyan(getCommandName(options.usage))}`),getExitCodeForReason(options.reason)}function invalidArgument(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),2}function invalidArgumentCount(client,usage){let message=`Too many arguments. Usage: ${getCommandNamePlain(usage)}`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk42.default.cyan(getCommandName(usage))}`),2}function validate(client,schema,value,options){if(value===void 0)return{status:"error",exitCode:missingArgument(client,{...options,reason:AGENT_REASON.MISSING_ARGUMENTS})};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,options.message)}}function validateOptional(client,schema,value,message){if(value===void 0)return{status:"ok",value:void 0};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,message)}}function outputFormat(client,flags){let format=validateJsonOutput(flags);return format.valid?{status:"ok",value:format.jsonOutput}:{status:"error",exitCode:invalidArgument(client,format.error)}}function noArguments(client,args,usage){return args.length?{status:"error",exitCode:invalidArgumentCount(client,usage)}:{status:"ok",value:void 0}}function unknownCommand(client,group,segment){let path3=getCommandNamePlain(group),message=segment?`Unknown command ${segment} for ${path3}.`:`Missing command for ${path3}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:segment?"unknown_command":"missing_command",message,next:[{command:`${path3} --help`,when:"See all commands"}]}),output_manager_default.error(message),output_manager_default.log(`
|
|
117
|
+
`),printNextPageCommand(getCommandNamePlain(`global-config backups ${idOrSlug}${commandFlags} --next ${response.pagination.next}`))}return 0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}function formatDate2(value){if(value===void 0)return"";let timestamp=typeof value=="number"?value:Date.parse(value);return Number.isFinite(timestamp)?new Date(timestamp).toISOString():String(value)}function formatNumber(value){return value===void 0?"":String(value)}var GlobalConfigTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandItems(actual){this.trackCliSubcommand({subcommand:"items",value:actual})}trackCliSubcommandTokens(actual){this.trackCliSubcommand({subcommand:"tokens",value:actual})}trackCliSubcommandBackups(actual){this.trackCliSubcommand({subcommand:"backups",value:actual})}};async function applyLinkedProjectTeam(client){let link=await getLinkedProject(client);if(link.status==="error")return link.exitCode;link.status==="linked"&&(client.config.currentTeam=link.org.type==="team"?link.org.id:void 0)}var COMMAND_CONFIG8={list:["list","ls"],add:["add","create"],inspect:["inspect","get"],update:["update"],delete:["delete","rm","del","remove"],items:["items"],tokens:["tokens"],backups:["backups"]};async function main4(client){let parsedArgs,flagsSpecification=getFlagsSpecification(globalConfigCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}parsedArgs.args[0]==="edge-config"&&warnDeprecatedSubcommand(client,"edge-config","global-config");let telemetry=new GlobalConfigTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("global-config"),output_manager_default.print(help(globalConfigCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:globalConfigCommand,columns:client.stderr.columns})),0}if(!needHelp){let linkExitCode=await applyLinkedProjectTeam(client);if(linkExitCode!==void 0)return linkExitCode}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(addSubcommand3)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"global-config add","global-config create"),addCmd(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(getSubcommand)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"global-config get","global-config inspect"),getCmd(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(updateSubcommand2)):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),updateCmd(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(removeSubcommand4)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"global-config remove","global-config delete"),removeCmd(client,args));case"items":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(itemsSubcommand)):(telemetry.trackCliSubcommandItems(subcommandOriginal),itemsCmd(client,args));case"tokens":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(tokensSubcommand)):(telemetry.trackCliSubcommandTokens(subcommandOriginal),tokensCmd(client,args));case"backups":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(backupsSubcommand)):(telemetry.trackCliSubcommandBackups(subcommandOriginal),backupsCmd(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(listSubcommand5)):(telemetry.trackCliSubcommandList(subcommandOriginal),listCmd(client,args))}}var import_tar_fs=__toESM(require_tar_fs(),1),import_chalk41=__toESM(require_source(),1);import fs from"node:fs";import path2 from"node:path";var EXAMPLE_API="https://examples.vercel.sh";async function init(client,opts,args,telemetry){let[name,dir]=args,force=opts["--force"],examples=await fetchExampleList(client);if(!examples)throw new Error("Could not fetch example list.");let exampleList=examples.filter(x=>x.visible).map(x=>x.name);if(!name){if(client.stdin.isTTY!==!0)return output_manager_default.print("No framework provided"),0;let chosen=await chooseFromDropdown(client,"Select example:",exampleList);return chosen?extractExample(client,chosen,dir,force):(output_manager_default.log("Canceled"),0)}if(exampleList.includes(name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force);if(examples.find(x=>!x.visible&&x.name===name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force,"v1");telemetry.trackCliArgumentExample(name,!1);let found=await guess(client,exampleList,name);return typeof found=="string"?extractExample(client,found,dir,force):(output_manager_default.log("No changes made."),0)}async function fetchExampleList(client){output_manager_default.spinner("Fetching examples");let url=`${EXAMPLE_API}/v2/list.json`,body=await client.fetch(url,{teamOptional:!0});return output_manager_default.stopSpinner(),body}async function chooseFromDropdown(client,message,exampleList){let choices=exampleList.map(name=>({name,value:name,short:name}));return list(client,{message,choices})}async function extractExample(client,name,dir,force,ver="v2"){let folder=prepareFolder(client.cwd,dir||name,force);output_manager_default.spinner(`Fetching ${name}`);let url=`${EXAMPLE_API}/${ver}/download/${name}.tar.gz`;return client.fetch(url,{json:!1,teamOptional:!0}).then(async res=>{if(output_manager_default.stopSpinner(),res.status!==200)throw new Error(`Could not get ${name}.tar.gz`);await new Promise((resolve4,reject)=>{let extractor=import_tar_fs.default.extract(folder,{ignore:(_name,header)=>header?.type!=="file"&&header?.type!=="directory"}),body=toNodeReadable(res.body);body.on("error",reject),extractor.on("error",reject),extractor.on("finish",resolve4),body.pipe(extractor)});let successLog=`Initialized "${import_chalk41.default.bold(name)}" example in ${import_chalk41.default.bold(humanizePath(folder))}.`,folderRel=path2.relative(client.cwd,folder),deployHint=folderRel===""?list_item_default(`To deploy, run ${getCommandName()}.`):list_item_default(`To deploy, ${cmd(`cd ${folderRel}`)} and run ${getCommandName()}.`);return output_manager_default.success(`${successLog}
|
|
118
|
+
${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}function prepareFolder(cwd,folder,force){let dest=path2.join(cwd,folder);if(fs.existsSync(dest)){if(!fs.lstatSync(dest).isDirectory())throw new Error(`Destination path "${import_chalk41.default.bold(folder)}" already exists and is not a directory.`);if(!force&&fs.readdirSync(dest).length!==0)throw new Error(`Destination path "${import_chalk41.default.bold(folder)}" already exists and is not an empty directory. You may use ${cmd("--force")} or ${cmd("-f")} to override it.`)}else if(dest!==cwd)try{fs.mkdirSync(dest)}catch{throw new Error(`Could not create directory "${import_chalk41.default.bold(folder)}".`)}return dest}async function guess(client,exampleList,name){let GuessError=new Error(`No example found for ${import_chalk41.default.bold(name)}, run ${getCommandName("init")} to see the list of available examples.`);if(client.stdin.isTTY!==!0)throw GuessError;let found=did_you_mean_default(name,exampleList,.7);if(typeof found=="string"){if(await client.input.confirm(`Did you mean ${import_chalk41.default.bold(found)}?`,!1))return found}else throw GuessError}var import_error_utils5=__toESM(require_dist(),1);var InitTelemetryClient=class extends TelemetryClient{trackCliArgumentExample(v,knownValue){v&&this.trackCliArgument({arg:"example",value:knownValue?v:this.redactedValue})}trackCliArgumentDir(v){v&&this.trackCliArgument({arg:"dir",value:this.redactedValue})}trackCliFlagForce(v){v&&this.trackCliFlag("force")}};var COMMAND_CONFIG9={init:["init"]};async function main5(client){let parsedArgs,flagsSpecification=getFlagsSpecification(initCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new InitTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("init"),output_manager_default.print(help(initCommand,{stream:client.stderr,columns:client.stderr.columns})),0;let args=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG9).args;if(parsedArgs.args.length>3)return output_manager_default.error("Too many arguments."),2;telemetry.trackCliArgumentDir(parsedArgs.args[2]),telemetry.trackCliFlagForce(parsedArgs.flags["--force"]);try{return await init(client,parsedArgs.flags,args,telemetry)}catch(err){return output_manager_default.prettyError(err),(0,import_error_utils5.isError)(err)&&typeof err.stack=="string"&&output_manager_default.debug(err.stack),1}}var import_chalk42=__toESM(require_source(),1);var idSchema=external_exports.string().max(256).regex(/^[a-zA-Z0-9_-]+$/),slugSchema=external_exports.string().min(1).max(48).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/),nameSchema=external_exports.string().min(1).max(256).refine(value=>value.trim().length>0&&!/[\x00-\x1f\x7f]/.test(value)),billingPlanSchema=external_exports.enum(["platform","enterprise"]),ORGANIZATION_ID_PREFIX="org_",TEAM_ID_PREFIX="team_";function isPrefixedId(value,prefix){return value.startsWith(prefix)&&value.length>prefix.length&&idSchema.safeParse(value).success}var SLUG_MESSAGE="Provide --slug with 1-48 lowercase letters, numbers, or hyphens, beginning and ending with a letter or number.",NAME_MESSAGE="Provide --name with 1-256 characters and no control characters.",PLAN_MESSAGE="Use --billing-plan platform or --billing-plan enterprise.";function organizationsSuggestion(subcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${subcommand} ${globalFlags.join(" ")}`:subcommand;return getCommandNamePlain(full)}function missingArgument(client,options){let next=[];return options.suggestList&&next.push({command:organizationsSuggestion("organizations list",client.argv),when:"List organizations to find an ID"}),next.push({command:organizationsSuggestion(options.usage,client.argv)}),outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,action:AGENT_ACTION.MISSING_ARGUMENTS,reason:options.reason,message:options.message,next}),output_manager_default.error(options.message),output_manager_default.log(`Usage: ${import_chalk42.default.cyan(getCommandName(options.usage))}`),getExitCodeForReason(options.reason)}function invalidArgument(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),2}function invalidArgumentCount(client,usage){let message=`Too many arguments. Usage: ${getCommandNamePlain(usage)}`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk42.default.cyan(getCommandName(usage))}`),2}function validate(client,schema,value,options){if(value===void 0)return{status:"error",exitCode:missingArgument(client,{...options,reason:AGENT_REASON.MISSING_ARGUMENTS})};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,options.message)}}function validateOptional(client,schema,value,message){if(value===void 0)return{status:"ok",value:void 0};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,message)}}function outputFormat(client,flags){let format=validateJsonOutput(flags);return format.valid?{status:"ok",value:format.jsonOutput}:{status:"error",exitCode:invalidArgument(client,format.error)}}function noArguments(client,args,usage){return args.length?{status:"error",exitCode:invalidArgumentCount(client,usage)}:{status:"ok",value:void 0}}function unknownCommand(client,group,segment){let path3=getCommandNamePlain(group),message=segment?`Unknown command ${segment} for ${path3}.`:`Missing command for ${path3}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:segment?"unknown_command":"missing_command",message,next:[{command:`${path3} --help`,when:"See all commands"}]}),output_manager_default.error(message),output_manager_default.log(`
|
|
119
119
|
See all commands:
|
|
120
120
|
${path3} --help`),2}function listWindow(client,flags){let limit;try{limit=parseListLimit(flags["--limit"])}catch(err){let message=err instanceof Error?err.message:String(err);return{status:"error",exitCode:invalidArgument(client,message)}}let next=flags["--next"];if(next===void 0)return{status:"ok",value:{limit,start:{offset:0}}};let start=decodeListCursor(next);return start?{status:"ok",value:{limit,start}}:{status:"error",exitCode:invalidArgument(client,"Provide --next with the cursor from the previous page.")}}var OrganizationsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandTeams(actual){this.trackCliSubcommand({subcommand:"teams",value:actual})}trackCliSubcommandTeamsAction(action,actual){this.trackCliSubcommand({subcommand:`teams:${action}`,value:actual})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliArgumentOrganizationId(id){id&&this.trackCliArgument({arg:"organization",value:this.redactedValue})}trackCliOptionSlug(slug){slug&&this.trackCliOption({option:"slug",value:this.redactedValue})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionChildTeam(team){team&&this.trackCliOption({option:"child-team",value:this.redactedValue})}trackCliOptionNext(cursor){cursor&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionBillingPlan(plan){plan&&this.trackCliOption({option:"billing-plan",value:plan==="platform"||plan==="enterprise"?plan:this.redactedValue})}};var OrganizationResponseError=class extends Error{};function handleOrganizationApiError(client,err,failed){if(!isAPIError(err)){output_manager_default.debug(`Organization request failed: ${err}`);let cause=err instanceof OrganizationResponseError?err.message:"";return report(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.${cause?` ${cause}`:""}`})}let remote=stripControlCharacters(err.serverMessage||"");if(err.status===404)return report(client,{reason:AGENT_REASON.NOT_FOUND,message:failed.notFound??`Couldn't ${failed.action}. It wasn't found.`});if(err.status===403)return report(client,{reason:AGENT_REASON.PERMISSION_DENIED,message:`You can't ${failed.action}.`,remote,action:err.action,resource:typeof err.resource=="string"?err.resource:void 0});let plan=typeof err.code=="string"&&PLAN_CAUSES[err.code];if(plan)return report(client,{reason:AGENT_REASON.PLAN_LIMIT,message:`Can't ${failed.action}. ${plan}.`,remote});if(err.status===409){let conflict=typeof err.code=="string"&&CONFLICT_CAUSES[err.code];return report(client,{reason:AGENT_REASON.CONFLICT,message:`Can't ${failed.action}. ${conflict||"It conflicts with the current state of the organization or team"}.`,remote})}return err.status===429?report(client,{reason:AGENT_REASON.RATE_LIMITED,message:"Too many requests to the Vercel API. Try again later."}):report(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.`,remote})}var CONFLICT_CAUSES={already_exists:"Another organization uses this slug",slug_conflict:"Another team uses this slug",team_already_in_organization:"The team already belongs to an organization",team_organization_transfer_in_progress:"The team is already moving to an organization"},PLAN_CAUSES={invalid_billing_plan:"The team's billing plan doesn't allow it",child_team_limit_reached:"The organization has reached its limit of enterprise child teams",team_already_enterprise:"An existing Enterprise team can't become an enterprise child team"};function stripControlCharacters(text){return text.replace(/[\u0000-\u001f\u007f-\u009f]/g," ").trim()}function report(client,failure){let payload={status:AGENT_STATUS.ERROR,reason:failure.reason,message:failure.message};return failure.remote&&(payload.data={remoteMessage:failure.remote}),failure.action&&(payload.action=failure.action),failure.resource&&(payload.resource=failure.resource),outputAgentError(client,payload,1),output_manager_default.error(failure.message),failure.remote&&output_manager_default.log(` Vercel API: ${failure.remote}`),1}var organizationSchema=external_exports.looseObject({organizationId:external_exports.string(),slug:external_exports.string(),name:external_exports.string().optional(),teamId:external_exports.string(),teamCount:external_exports.number(),createdAt:external_exports.string(),updatedAt:external_exports.string()}),teamSchema=external_exports.looseObject({organizationId:external_exports.string(),teamId:external_exports.string(),ssoMode:external_exports.string(),billingPlan:external_exports.string().optional(),createdAt:external_exports.string(),updatedAt:external_exports.string()}),teamsSchema=external_exports.object({teams:external_exports.array(teamSchema.extend({slug:external_exports.string(),name:external_exports.string().nullable(),avatar:external_exports.string().nullable()})),cursor:external_exports.string().nullable().optional()});async function request(client,path3,schema,options={}){let fetchOptions={...options,useCurrentTeam:!1};options.method&&options.method!=="GET"&&(fetchOptions.retry={retries:0},fetchOptions.bailOn429=!0);let data=await client.fetch(`/v1/organizations${path3}`,fetchOptions),result=schema.safeParse(data);if(!result.success){let paths=[...new Set(result.error.issues.map(issue2=>issue2.path.length?issue2.path.join("."):"<root>"))].slice(0,5);throw new OrganizationResponseError(`The Organizations API returned an invalid response at ${paths.join(", ")}.`)}return result.data}function listOrganizations(client){return request(client,"",external_exports.object({organizations:external_exports.array(organizationSchema)}))}function getOrganization(client,id){return request(client,`/${encodeURIComponent(id)}`,organizationSchema)}function createOrganization(client,rootTeamId,body){let query=new URLSearchParams({teamId:rootTeamId});return request(client,`?${query}`,organizationSchema,{method:"POST",body})}function updateOrganization(client,id,slug){return request(client,`/${encodeURIComponent(id)}`,organizationSchema,{method:"PATCH",body:{slug}})}function listOrganizationTeams(client,id,cursor){let query=cursor===void 0?"":`?${new URLSearchParams({cursor})}`;return request(client,`/${encodeURIComponent(id)}/teams${query}`,teamsSchema)}function addOrganizationTeam(client,id,body){return request(client,`/${encodeURIComponent(id)}/teams`,teamSchema,{method:"POST",body})}async function resolveOrganization(client,args,usage){if(args.length>1)return{status:"error",exitCode:invalidArgumentCount(client,usage)};let target=args[0];return target===void 0?fromCurrentScope(client,usage):target.startsWith(ORGANIZATION_ID_PREFIX)?isPrefixedId(target,ORGANIZATION_ID_PREFIX)?{status:"ok",value:target}:{status:"error",exitCode:invalidArgument(client,"Provide a valid organization ID.")}:slugSchema.safeParse(target).success?fromSlug(client,target):{status:"error",exitCode:invalidArgument(client,"Provide an organization ID or slug. A slug uses 1-48 lowercase letters, numbers, or hyphens.")}}async function fromSlug(client,slug){let organizations2;try{organizations2=await listOrganizations(client)}catch(err){return{status:"error",exitCode:handleOrganizationApiError(client,err,{action:`find organization ${slug}`})}}let match=organizations2.organizations.find(org=>org.slug===slug);return match?{status:"ok",value:match.organizationId}:{status:"error",exitCode:organizationNotFound(client,slug)}}async function fromCurrentScope(client,usage){let currentTeam=await resolveScopeTeam(client);if(!currentTeam)return{status:"error",exitCode:missingArgument(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide an organization ID or slug, or select an organization team with --scope.",usage,suggestList:!0})};let team;try{team=await getTeamByIdOrSlug(client,currentTeam,{useCurrentTeam:!1})}catch(err){return{status:"error",exitCode:handleOrganizationApiError(client,err,{action:`read team ${currentTeam}`,notFound:`Couldn't find team ${currentTeam}.`})}}return team.parentId?{status:"ok",value:team.parentId}:{status:"error",exitCode:invalidArgument(client,`Team ${team.slug} does not belong to an organization. Provide an organization ID or slug.`)}}async function resolveRootTeamId(client,usage){let currentTeam=await resolveScopeTeam(client);return currentTeam?{status:"ok",value:currentTeam}:{status:"error",exitCode:missingArgument(client,{reason:AGENT_REASON.MISSING_SCOPE,message:"Can't create an organization without a team. Select the root team with --scope.",usage:`--scope <team> ${usage}`})}}function resolveScopeTeam(client){return client.resolveCurrentTeam({ask:!1})}function organizationNotFound(client,slug){let message=`Couldn't find organization ${slug}.`,listCommand=getCommandNamePlain("organizations list");return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_FOUND,message,next:[{command:listCommand,when:"List your organizations"}]}),output_manager_default.error(message),output_manager_default.log(`
|
|
121
121
|
List your organizations:
|
|
@@ -145,9 +145,9 @@ ${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}fun
|
|
|
145
145
|
`),printNextPageCommand(nextCmd)}}return 0}var import_chalk45=__toESM(require_source(),1);var import_chalk44=__toESM(require_source(),1);async function inviteUserToTeam(client,teamId,email2){return await client.fetch(`/teams/${encodeURIComponent(teamId)}/members`,{method:"POST",body:{email:email2}})}var import_error_utils6=__toESM(require_dist(),1);var TeamsInviteTelemetryClient=class extends TelemetryClient{trackCliArgumentEmail(values){values&&this.trackCliArgument({arg:"email",value:this.redactedArgumentsLength(values)})}};var validateEmail=data=>email.test(data.trim())||data.length===0,domains=Array.from(new Set(["aol.com","gmail.com","google.com","yahoo.com","ymail.com","hotmail.com","live.com","outlook.com","inbox.com","mail.com","gmx.com","icloud.com"]));async function invite(client,argv,{introMsg="",noopMsg="No changes made"}={}){let{telemetryEventStore}=client,telemetry=new TeamsInviteTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inviteSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:emails}=parsedArgs;if(client.nonInteractive&&emails.length===0){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),cmd2=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode at least one email is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to invite teammates (replace <email> with a teammate email)"}]},2),2}let currentTeamId=await client.resolveCurrentTeam();output_manager_default.spinner("Fetching teams");let currentTeam=(await getTeams(client)).find(team=>team.id===currentTeamId);output_manager_default.spinner("Fetching user information");let user=await getUser(client);if(domains.push(user.email.split("@")[1]),!currentTeam){let err=`You can't run this command under ${param(user.username||user.email)}.
|
|
146
146
|
Please select a team scope using ${getCommandName("switch")} or use ${cmd("--scope")}`;if(client.nonInteractive){let switchCmd=withGlobalFlags(client,"teams switch <slug>");outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams invite. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1)}return output_manager_default.error(err),1}if(output_manager_default.log(introMsg||`Inviting team members to ${import_chalk44.default.bold(currentTeam.name)}`),telemetry.trackCliArgumentEmail(emails),emails.length>0){for(let email3 of emails)if(email.test(email3)){output_manager_default.spinner(email3);let elapsed=stamp_default(),userInfo=null;try{userInfo=(await inviteUserToTeam(client,currentTeam.id,email3)).username}catch(err){if(isAPIError(err)&&err.code==="user_not_found"){if(client.nonInteractive){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),retryCmd=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());outputAgentError(client,{status:"error",reason:"user_not_found",message:`No user exists with the email address "${email3}".`,next:[{command:retryCmd}]},1)}return output_manager_default.error(`No user exists with the email address "${email3}".`),1}throw err}output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${email3}${userInfo?` (${userInfo})`:""} ${elapsed()}`)}else output_manager_default.log(`${import_chalk44.default.red(`\u2716 ${email3}`)} ${import_chalk44.default.gray("[invalid]")}`);return 0}let inviteUserPrefix="Invite User".padEnd(14),sentEmailPrefix="Sent Email".padEnd(14),hasError=!1,email2;do{email2="";try{email2=await client.input.text({message:`- ${inviteUserPrefix}`,validate:validateEmail})}catch(err){if(!(0,import_error_utils6.isError)(err)||err.message!=="USER_ABORT")throw err}let elapsed;if(email2){elapsed=stamp_default(),output_manager_default.spinner(inviteUserPrefix+email2);try{let{username}=await inviteUserToTeam(client,currentTeam.id,email2);if(email2=`${email2}${username?` (${username})`:""} ${elapsed()}`,emails.push(email2),output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email2}`),hasError){hasError=!1,process.stderr.write(eraseLines(emails.length+2)),output_manager_default.log(introMsg||`Inviting team members to ${import_chalk44.default.bold(currentTeam.name)}`);for(let email3 of emails)output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}}catch(err){output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2)),output_manager_default.error((0,import_error_utils6.errorToString)(err)),hasError=!0;for(let email3 of emails)output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email3}`)}}}while(email2!=="");output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2));let n=emails.length;if(emails.length===0)output_manager_default.log(noopMsg);else{output_manager_default.success(`Invited ${n} teammate${n>1?"s":""}`);for(let email3 of emails)output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}return 0}async function createTeam(client,{slug},opts){let fetchOpts={method:"POST",body:{slug},useCurrentTeam:!1,bailOn429:!0};return opts?.signal&&(fetchOpts.signal=opts.signal),await client.fetch("/teams",fetchOpts)}async function patchTeam(client,teamId,payload){let body=await client.fetch(`/teams/${encodeURIComponent(teamId)}`,{method:"PATCH",body:payload,teamOptional:!0});if(body&&typeof body=="object"&&"ok"in body)throw new Error("PATCH /teams returned non-JSON response");return body}var import_error_utils7=__toESM(require_dist(),1);var validateSlug=value=>/^[a-z]+[a-z0-9_-]*$/.test(value),validateName=value=>/^[ a-zA-Z0-9_-]+$/.test(value),teamUrlPrefix="Team URL".padEnd(14)+import_chalk45.default.gray("vercel.com/"),teamNamePrefix="Team Name".padEnd(14),CREATE_TEAM_TIMEOUT_MS=3e4,TIMEOUT_HINT="The request took too long and was cancelled. The team URL may already be taken, or the server may be slow. Try a different slug (e.g. your-company-name) or try again later. Run with `--debug` to see where the request is getting stuck.";function createTeamWithTimeout(client,slug){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),CREATE_TEAM_TIMEOUT_MS);output_manager_default.debug(`Creating team with slug "${slug}" (timeout: ${CREATE_TEAM_TIMEOUT_MS/1e3}s, apiUrl: ${client.apiUrl})`);let promise=createTeam(client,{slug},{signal:controller.signal}).then(result=>(clearTimeout(timeoutId),result)).catch(err=>{throw clearTimeout(timeoutId),err});return Promise.race([promise,new Promise((_,reject)=>setTimeout(()=>reject(new Error("Request timed out.")),CREATE_TEAM_TIMEOUT_MS+500))])}function formatCreateTeamError(err,slug){let isAbort=(0,import_error_utils7.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils7.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429){let retryMs=err.retryAfterMs,retrySec=typeof retryMs=="number"&&retryMs>=0?Math.ceil(retryMs/1e3):0,formatWait=sec=>sec<60?`${sec} seconds`:sec<3600?`${sec} seconds (${Math.ceil(sec/60)} minutes)`:`${sec} seconds (${(sec/3600).toFixed(1)} hours)`;return"Rate limited (429 Too Many Requests). The Vercel API limits how often you can create teams."+(retrySec>0?` Try again in ${formatWait(retrySec)}.`:" Wait a minute or two, then try again.")+" (The API sends when the rate limit window resets, often a fixed time like the next hour or midnight UTC.) Dashboard: https://vercel.com/account."}if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (${import_chalk45.default.cyan(`vercel.com/${slug}`)}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
|
|
147
147
|
`:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils7.errorToString)(err)}function formatCreateTeamErrorPlain(err,slug){let isAbort=(0,import_error_utils7.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils7.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429)return formatCreateTeamError(err,slug);if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (vercel.com/${slug}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
|
|
148
|
-
`:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils7.errorToString)(err)}var VERCEL_ACCOUNT_BILLING_URL="https://vercel.com/account/billing";function createTeamErrorReason(err){if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase();if(msg.includes("payment"))return"payment_required";if(msg.includes("slug")||msg.includes("cannot be used"))return"slug_unavailable"}return isAPIError(err)&&err.status===429?"rate_limited":(0,import_error_utils7.isError)(err)&&(err.name==="AbortError"||err.message==="Request timed out.")?"timeout":"team_creation_failed"}async function add4(client,argv=[]){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let slugFlag=parsedArgs.flags["--slug"],nameFlag=parsedArgs.flags["--name"];if(client.nonInteractive){let missing=[];if((!slugFlag||!slugFlag.trim())&&missing.push("--slug"),(!nameFlag||!nameFlag.trim())&&missing.push("--name"),missing.length>0){let fullArgs=client.argv.slice(2),subcommandNames=[addSubcommand4.name,...addSubcommand4.aliases],addIdx=fullArgs.findIndex(arg=>subcommandNames.includes(arg)),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams create --slug <slug> --name <name> ${flagParts.join(" ")}`.trim()),requiredPlain=missing.join(" and "),verb=missing.length===1?"is":"are";outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode ${requiredPlain} ${verb} required. Run: ${cmd2}`,next:[{command:cmd2,when:"to create a team non-interactively"}]},2)}let slug2=slugFlag.trim().toLowerCase(),name2=nameFlag.trim();if(!validateSlug(slug2)){let msg=`Invalid ${param("--slug")}: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. ${param("acme")})`,msgPlain="Invalid --slug: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. acme)";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_slug",message:msgPlain,next:[{command:getCommandNamePlain("teams create --slug <slug> --name <name>")}]},2),output_manager_default.error(msg),2}if(!validateName(name2)){let msg=`Invalid ${param("--name")}: only letters, numbers, spaces, hyphens, and underscores allowed`,msgPlain="Invalid --name: only letters, numbers, spaces, hyphens, and underscores allowed";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_name",message:msgPlain},2),output_manager_default.error(msg),2}output_manager_default.spinner(teamUrlPrefix+slug2);let team2;try{team2=await createTeamWithTimeout(client,slug2)}catch(err){if(output_manager_default.stopSpinner(),client.nonInteractive){let message=formatCreateTeamErrorPlain(err,slug2),reason=createTeamErrorReason(err),next=[];reason==="payment_required"&&(message+=` Add a payment method at ${VERCEL_ACCOUNT_BILLING_URL}, then retry.`,next.push({command:openUrlInBrowserCommand(VERCEL_ACCOUNT_BILLING_URL),when:"To open the billing page in your browser"})),outputAgentError(client,{status:"error",reason,message,...next.length>0&&{next}},1)}return output_manager_default.error(formatCreateTeamError(err,slug2)),1}output_manager_default.stopSpinner(),output_manager_default.spinner(teamNamePrefix+name2);try{let res2=await patchTeam(client,team2.id,{name:name2});team2=Object.assign(team2,res2)}catch(err){return output_manager_default.stopSpinner(),client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_update_failed",message:(0,import_error_utils7.errorToString)(err)},1),output_manager_default.error((0,import_error_utils7.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.
|
|
148
|
+
`:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils7.errorToString)(err)}var VERCEL_ACCOUNT_BILLING_URL="https://vercel.com/account/billing";function createTeamErrorReason(err){if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase();if(msg.includes("payment"))return"payment_required";if(msg.includes("slug")||msg.includes("cannot be used"))return"slug_unavailable"}return isAPIError(err)&&err.status===429?"rate_limited":(0,import_error_utils7.isError)(err)&&(err.name==="AbortError"||err.message==="Request timed out.")?"timeout":"team_creation_failed"}async function add4(client,argv=[]){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let slugFlag=parsedArgs.flags["--slug"],nameFlag=parsedArgs.flags["--name"];if(client.nonInteractive){let missing=[];if((!slugFlag||!slugFlag.trim())&&missing.push("--slug"),(!nameFlag||!nameFlag.trim())&&missing.push("--name"),missing.length>0){let fullArgs=client.argv.slice(2),subcommandNames=[addSubcommand4.name,...addSubcommand4.aliases],addIdx=fullArgs.findIndex(arg=>subcommandNames.includes(arg)),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams create --slug <slug> --name <name> ${flagParts.join(" ")}`.trim()),requiredPlain=missing.join(" and "),verb=missing.length===1?"is":"are";outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode ${requiredPlain} ${verb} required. Run: ${cmd2}`,next:[{command:cmd2,when:"to create a team non-interactively"}]},2)}let slug2=slugFlag.trim().toLowerCase(),name2=nameFlag.trim();if(!validateSlug(slug2)){let msg=`Invalid ${param("--slug")}: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. ${param("acme")})`,msgPlain="Invalid --slug: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. acme)";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_slug",message:msgPlain,next:[{command:getCommandNamePlain("teams create --slug <slug> --name <name>")}]},2),output_manager_default.error(msg),2}if(!validateName(name2)){let msg=`Invalid ${param("--name")}: only letters, numbers, spaces, hyphens, and underscores allowed`,msgPlain="Invalid --name: only letters, numbers, spaces, hyphens, and underscores allowed";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_name",message:msgPlain},2),output_manager_default.error(msg),2}output_manager_default.spinner(teamUrlPrefix+slug2);let team2;try{team2=await createTeamWithTimeout(client,slug2)}catch(err){if(output_manager_default.stopSpinner(),client.nonInteractive){let message=formatCreateTeamErrorPlain(err,slug2),reason=createTeamErrorReason(err),next=[];reason==="payment_required"&&(message+=` Add a payment method at ${VERCEL_ACCOUNT_BILLING_URL}, then retry.`,next.push({command:openUrlInBrowserCommand(VERCEL_ACCOUNT_BILLING_URL),when:"To open the billing page in your browser"})),outputAgentError(client,{status:"error",reason,message,...next.length>0&&{next}},1)}return output_manager_default.error(formatCreateTeamError(err,slug2)),1}output_manager_default.stopSpinner(),output_manager_default.spinner(teamNamePrefix+name2);try{let res2=await patchTeam(client,team2.id,{name:name2});team2=Object.assign(team2,res2)}catch(err){return output_manager_default.stopSpinner(),client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_update_failed",message:(0,import_error_utils7.errorToString)(err)},1),output_manager_default.error((0,import_error_utils7.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.updateConfig({currentTeam:team2.id}),client.writeToConfigFile(),output_manager_default.success(`Team ${import_chalk45.default.bold(team2.name)} (${import_chalk45.default.cyan(`vercel.com/${slug2}`)}) created.`),0}let slug=slugFlag?.trim().toLowerCase(),team,elapsed;output_manager_default.log(`Pick a team identifier for its URL (e.g.: ${import_chalk45.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils7.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("Canceled"),0;throw err}elapsed=stamp_default(),output_manager_default.spinner(teamUrlPrefix+slug);try{team=await createTeamWithTimeout(client,slug)}catch(err){output_manager_default.stopSpinner(),output_manager_default.print(eraseLines(2)),output_manager_default.error(formatCreateTeamError(err,slug)),slug=void 0}}while(!team);output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),output_manager_default.success(`Team created ${elapsed()}`),output_manager_default.log(`${import_chalk45.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
|
|
149
149
|
`),output_manager_default.log("Pick a display name for your team");let name=nameFlag?.trim();try{name=await client.input.text({message:`- ${teamNamePrefix}`,validate:validateName,default:name})}catch(err){if((0,import_error_utils7.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("No name specified"),2;throw err}elapsed=stamp_default(),output_manager_default.spinner(teamNamePrefix+name);let res=await patchTeam(client,team.id,{name});return output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),team=Object.assign(team,res),output_manager_default.success(`Team name saved ${elapsed()}`),output_manager_default.log(`${import_chalk45.default.cyan(`${chars_default.tick} `)+teamNamePrefix+team.name}
|
|
150
|
-
`),output_manager_default.spinner("Saving"),client.config.currentTeam=team.id,client.writeToConfigFile(),output_manager_default.stopSpinner(),await invite(client,[],{introMsg:"Invite your teammates! When done, press enter on an empty field",noopMsg:`You can invite teammates later by running ${getCommandName("teams invite")}`}),0}var import_chalk46=__toESM(require_source(),1);var TeamsSwitchTelemetryClient=class extends TelemetryClient{trackCliArgumentName(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}};var updateCurrentTeam=(config,team)=>{team?config.currentTeam=team.id:delete config.currentTeam,writeToConfigFile(config)};async function warnIfStaleLinkExists(client,newOrgId){let link=null;try{link=await getLinkFromDir(getVercelDirectory(client.cwd))}catch{link=null}!link||link.orgId===newOrgId||output_manager_default.warn("This directory is linked to a project under a different team/scope. Commands like `deploy` will still use the linked project's team. Run `vc link` to re-link.")}async function change(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(switchSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:[desiredSlug]}=parsedArgs;if(client.ignoresSavedTeam){let message="Agents can't change the saved team. Pass --scope <team> to each command, or link the directory with --scope.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.AGENT_CANNOT_SWITCH,message,next:[{command:withGlobalFlags(client,"teams ls"),when:"to list teams, then ask the user which one to use"},{command:getCommandNamePlain("link --scope <team>"),when:"to set the team for this directory (replace <team> with the team the user chose)"}]}),output_manager_default.error(message),1}if(client.nonInteractive&&!desiredSlug){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}let{config,telemetryEventStore}=client;new TeamsSwitchTelemetryClient({opts:{store:telemetryEventStore}}).trackCliArgumentName(desiredSlug),output_manager_default.spinner("Fetching teams information");let[user,teams2]=await Promise.all([getUser(client),getTeams(client)]),defaultTeamId=user.version==="northstar"?user.defaultTeamId:void 0,currentTeamId=config.currentTeam||defaultTeamId,personalScopeSelected=!currentTeamId,currentTeam=currentTeamId?teams2.find(team=>team.id===currentTeamId):void 0;if(!personalScopeSelected&&!currentTeam&&output_manager_default.warn("You are no longer a member of the previously selected team. Choose another scope to continue."),!desiredSlug){let teamChoices=teams2.slice(0).sort((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(team=>{let title2=`${team.name} (${team.slug})`,selected=team.id===currentTeam?.id;return selected&&(title2+=` ${import_chalk46.default.bold("(current)")}`),team.limited&&(title2+=` ${emoji("locked")}`),{name:title2,value:team.slug,short:team.slug,selected}}),suffix=personalScopeSelected?` ${import_chalk46.default.bold("(current)")}`:"";user.limited&&(suffix+=` ${emoji("locked")}`);let choices=[...user.version==="northstar"?[]:[{separator:"Personal Account"},{name:`${user.name||user.email} (${user.username})${suffix}`,value:user.username,short:user.username,selected:personalScopeSelected}],{separator:"Teams"},...teamChoices];if(output_manager_default.stopSpinner(),client.nonInteractive){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}desiredSlug=await list(client,{message:"Switch to:",choices,eraseFinalAnswer:!0})}if(!desiredSlug)return output_manager_default.log("No changes made."),0;if(desiredSlug===user.username||desiredSlug===user.email)return user.version==="northstar"?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"personal_scope_not_allowed",message:"You cannot set your Personal Account as the scope in this account type."},1),output_manager_default.error("You cannot set your Personal Account as the scope."),1):personalScopeSelected?(output_manager_default.log("No changes made"),0):(user.limited&&await client.reauthenticate({scope:user.username,teamId:null}),updateCurrentTeam(config),output_manager_default.success(`Your account (${import_chalk46.default.bold(user.username)}) is now active!`),await warnIfStaleLinkExists(client,user.id),0);let newTeam=teams2.find(team=>team.slug===desiredSlug);if(!newTeam)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"scope_not_accessible",message:`You do not have permission to access scope "${desiredSlug}".`,next:[{command:withGlobalFlags(client,"teams list")}]},1),output_manager_default.error(`You do not have permission to access scope ${import_chalk46.default.bold(desiredSlug)}.`),1;if(newTeam.slug===currentTeam?.slug)return output_manager_default.log("No changes made"),0;if(newTeam.limited){let samlEnabled=newTeam.saml?.connection?.state==="active";await client.reauthenticate({teamId:newTeam.id,scope:newTeam.slug,enforced:samlEnabled&&newTeam.saml?.enforced===!0})}return updateCurrentTeam(config,newTeam),output_manager_default.success(`The team ${import_chalk46.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`),await warnIfStaleLinkExists(client,newTeam.id),0}function optionRoot(flagToken){return flagToken.startsWith("--")&&flagToken.includes("=")?`--${flagToken.slice(2).split("=")[0]}`:flagToken}function teamsRequestNextCommand(client){let fullArgs=client.argv.slice(2),reqIdx=fullArgs.findIndex(a=>a==="request"||a==="access-request"),afterRequest=reqIdx>=0?fullArgs.slice(reqIdx+1):[],globalParts=getGlobalFlagsFromArgs(fullArgs),subParts=getSameSubcommandSuggestionFlags(afterRequest),seen=new Set;for(let g of globalParts)seen.add(optionRoot(g));let extras=[];for(let i=0;i<subParts.length;){let a=subParts[i],root=optionRoot(a);if(seen.has(root)){i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(i+=1);continue}seen.add(root),extras.push(a),i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(extras.push(subParts[i]),i+=1)}let base=withGlobalFlags(client,"teams request [userId]");return extras.length===0?base:getCommandNamePlain(`${base} ${extras.join(" ")}`.trim())}function apiFailureReason(err){return typeof err.code=="string"&&err.code?err.code:typeof err.code=="number"&&Number.isFinite(err.code)?String(err.code):`http_${err.status}`}async function request2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(requestSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1){if(client.nonInteractive){let cmdStr=teamsRequestNextCommand(client);outputAgentError(client,{status:"error",reason:"invalid_arguments",message:"Invalid number of arguments. At most one optional userId is allowed.",next:[{command:cmdStr,when:"to check join-request status (omit userId for the current user)"}]},2)}return output_manager_default.error("Invalid number of arguments. Usage: `vercel teams request [userId]`"),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,teamId=await client.resolveCurrentTeam();if(!teamId){let switchCmd=withGlobalFlags(client,"teams switch <slug>");return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams request. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1),output_manager_default.error(`This command requires a team scope. Run ${cmd("teams switch")} first.`),1}let userId=parsedArgs.args[0],path3=userId?`/v1/teams/${encodeURIComponent(teamId)}/request/${encodeURIComponent(userId)}`:`/v1/teams/${encodeURIComponent(teamId)}/request`,data;try{data=await client.fetch(path3)}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:apiFailureReason(err),message:err.serverMessage||err.message,next:[{command:teamsRequestNextCommand(client),when:"to retry after resolving the error (same flags and optional userId)"}]},1),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
150
|
+
`),output_manager_default.spinner("Saving"),client.updateConfig({currentTeam:team.id}),client.writeToConfigFile(),output_manager_default.stopSpinner(),await invite(client,[],{introMsg:"Invite your teammates! When done, press enter on an empty field",noopMsg:`You can invite teammates later by running ${getCommandName("teams invite")}`}),0}var import_chalk46=__toESM(require_source(),1);var TeamsSwitchTelemetryClient=class extends TelemetryClient{trackCliArgumentName(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}};var updateCurrentTeam=(client,config,team)=>{client.savedTeam=team?.id,team?config.currentTeam=team.id:delete config.currentTeam,writeToConfigFile(config)};async function warnIfStaleLinkExists(client,newOrgId){let link=null;try{link=await getLinkFromDir(getVercelDirectory(client.cwd))}catch{link=null}!link||link.orgId===newOrgId||output_manager_default.warn("This directory is linked to a project under a different team/scope. Commands like `deploy` will still use the linked project's team. Run `vc link` to re-link.")}async function change(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(switchSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:[desiredSlug]}=parsedArgs;if(client.ignoresSavedTeam){let message="Agents can't change the saved team. Pass --scope <team> to each command, or link the directory with --scope.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.AGENT_CANNOT_SWITCH,message,next:[{command:withGlobalFlags(client,"teams ls"),when:"to list teams, then ask the user which one to use"},{command:getCommandNamePlain("link --scope <team>"),when:"to set the team for this directory (replace <team> with the team the user chose)"}]}),output_manager_default.error(message),1}if(client.nonInteractive&&!desiredSlug){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}let{config,telemetryEventStore}=client;new TeamsSwitchTelemetryClient({opts:{store:telemetryEventStore}}).trackCliArgumentName(desiredSlug),output_manager_default.spinner("Fetching teams information");let[user,teams2]=await Promise.all([getUser(client),getTeams(client)]),defaultTeamId=user.version==="northstar"?user.defaultTeamId:void 0,currentTeamId=config.currentTeam||defaultTeamId,personalScopeSelected=!currentTeamId,currentTeam=currentTeamId?teams2.find(team=>team.id===currentTeamId):void 0;if(!personalScopeSelected&&!currentTeam&&output_manager_default.warn("You are no longer a member of the previously selected team. Choose another scope to continue."),!desiredSlug){let teamChoices=teams2.slice(0).sort((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(team=>{let title2=`${team.name} (${team.slug})`,selected=team.id===currentTeam?.id;return selected&&(title2+=` ${import_chalk46.default.bold("(current)")}`),team.limited&&(title2+=` ${emoji("locked")}`),{name:title2,value:team.slug,short:team.slug,selected}}),suffix=personalScopeSelected?` ${import_chalk46.default.bold("(current)")}`:"";user.limited&&(suffix+=` ${emoji("locked")}`);let choices=[...user.version==="northstar"?[]:[{separator:"Personal Account"},{name:`${user.name||user.email} (${user.username})${suffix}`,value:user.username,short:user.username,selected:personalScopeSelected}],{separator:"Teams"},...teamChoices];if(output_manager_default.stopSpinner(),client.nonInteractive){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}desiredSlug=await list(client,{message:"Switch to:",choices,eraseFinalAnswer:!0})}if(!desiredSlug)return output_manager_default.log("No changes made."),0;let newTeam=teams2.find(team=>team.slug===desiredSlug);if(!newTeam&&(desiredSlug===user.username||desiredSlug===user.email))return user.version==="northstar"?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"personal_scope_not_allowed",message:"You cannot set your Personal Account as the scope in this account type."},1),output_manager_default.error("You cannot set your Personal Account as the scope."),1):personalScopeSelected?(output_manager_default.log("No changes made"),0):(user.limited&&await client.reauthenticate({scope:user.username,teamId:null}),updateCurrentTeam(client,config),output_manager_default.success(`Your account (${import_chalk46.default.bold(user.username)}) is now active!`),await warnIfStaleLinkExists(client,user.id),0);if(!newTeam)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"scope_not_accessible",message:`You do not have permission to access scope "${desiredSlug}".`,next:[{command:withGlobalFlags(client,"teams list")}]},1),output_manager_default.error(`You do not have permission to access scope ${import_chalk46.default.bold(desiredSlug)}.`),1;if(newTeam.slug===currentTeam?.slug)return output_manager_default.log("No changes made"),0;if(newTeam.limited){let samlEnabled=newTeam.saml?.connection?.state==="active";await client.reauthenticate({teamId:newTeam.id,scope:newTeam.slug,enforced:samlEnabled&&newTeam.saml?.enforced===!0})}return updateCurrentTeam(client,config,newTeam),output_manager_default.success(`The team ${import_chalk46.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`),await warnIfStaleLinkExists(client,newTeam.id),0}function optionRoot(flagToken){return flagToken.startsWith("--")&&flagToken.includes("=")?`--${flagToken.slice(2).split("=")[0]}`:flagToken}function teamsRequestNextCommand(client){let fullArgs=client.argv.slice(2),reqIdx=fullArgs.findIndex(a=>a==="request"||a==="access-request"),afterRequest=reqIdx>=0?fullArgs.slice(reqIdx+1):[],globalParts=getGlobalFlagsFromArgs(fullArgs),subParts=getSameSubcommandSuggestionFlags(afterRequest),seen=new Set;for(let g of globalParts)seen.add(optionRoot(g));let extras=[];for(let i=0;i<subParts.length;){let a=subParts[i],root=optionRoot(a);if(seen.has(root)){i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(i+=1);continue}seen.add(root),extras.push(a),i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(extras.push(subParts[i]),i+=1)}let base=withGlobalFlags(client,"teams request [userId]");return extras.length===0?base:getCommandNamePlain(`${base} ${extras.join(" ")}`.trim())}function apiFailureReason(err){return typeof err.code=="string"&&err.code?err.code:typeof err.code=="number"&&Number.isFinite(err.code)?String(err.code):`http_${err.status}`}async function request2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(requestSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1){if(client.nonInteractive){let cmdStr=teamsRequestNextCommand(client);outputAgentError(client,{status:"error",reason:"invalid_arguments",message:"Invalid number of arguments. At most one optional userId is allowed.",next:[{command:cmdStr,when:"to check join-request status (omit userId for the current user)"}]},2)}return output_manager_default.error("Invalid number of arguments. Usage: `vercel teams request [userId]`"),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,teamId=await client.resolveCurrentTeam();if(!teamId){let switchCmd=withGlobalFlags(client,"teams switch <slug>");return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams request. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1),output_manager_default.error(`This command requires a team scope. Run ${cmd("teams switch")} first.`),1}let userId=parsedArgs.args[0],path3=userId?`/v1/teams/${encodeURIComponent(teamId)}/request/${encodeURIComponent(userId)}`:`/v1/teams/${encodeURIComponent(teamId)}/request`,data;try{data=await client.fetch(path3)}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:apiFailureReason(err),message:err.serverMessage||err.message,next:[{command:teamsRequestNextCommand(client),when:"to retry after resolving the error (same options and optional userId)"}]},1),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
|
|
151
151
|
`),0):(output_manager_default.log(`Team: ${String(data.teamName??"")} (${String(data.teamSlug??"")})`),output_manager_default.log(`Confirmed: ${String(data.confirmed??"")}`),data.accessRequestedAt!=null&&output_manager_default.log(`Access requested at: ${String(data.accessRequestedAt)}`),data.joinedFrom&&typeof data.joinedFrom=="object"&&output_manager_default.log(`Joined from: ${JSON.stringify(data.joinedFrom)}`),0)}var import_chalk47=__toESM(require_source(),1);function teamMemberPreviewLabel(member){return member.username&&member.email?`${member.username} (${member.email})`:teamMemberLabel(member)}function matchesEmail(first,second){return!!(first&&second&&first.trim().toLowerCase()===second.trim().toLowerCase())}function invoiceRecipientError(invoiceRecipient,departingMember,currentInvoiceRecipient){if(!email.test(invoiceRecipient))return"Enter a valid invoice recipient email address.";if(matchesEmail(invoiceRecipient,departingMember.email)||matchesEmail(invoiceRecipient,currentInvoiceRecipient))return"Choose a different invoice recipient. That address belongs to the team member being removed."}function buildInteractiveRemoveCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams members remove <member>",void 0,{excludeFlags:["--non-interactive"]})}async function membersRemove(client,argv){let parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification([formatOption,jsonOption]))}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult;function fail(reason,message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),getExitCodeForReason(reason)):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
|
|
152
152
|
`),getExitCodeForReason(reason)):(output_manager_default.fatal(message),getExitCodeForReason(reason))}if(parsedArgs.args.length!==1)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Provide exactly 1 team member. Usage: `vercel teams members remove <member>`",{next:[{command:buildInteractiveRemoveCommand(client),when:"Remove a member from the currently scoped team"}]});let teamId=await client.resolveCurrentTeam();if(!teamId)return fail("team_scope_required","Select a team. Run `vercel teams switch <slug>` or pass `--scope`.",{next:[{command:buildCommandWithGlobalFlags(client.argv,"teams switch <slug>"),when:"Select the team containing the member"}]});let identifier=parsedArgs.args[0],team,member;try{[team,member]=await Promise.all([getTeamByIdOrSlug(client,teamId),getTeamMemberByIdentifier(client,teamId,identifier)])}catch{return fail(AGENT_REASON.API_ERROR,"Failed to resolve the team member. Try again.")}if(!member){let listCommand=buildCommandWithGlobalFlags(client.argv,"teams members");return fail(AGENT_REASON.NOT_FOUND,`Couldn't find that team member. Run \`${listCommand}\` to list current members.`,{next:[{command:listCommand,when:"List current members to find the right identifier"}]})}let label=teamMemberPreviewLabel(member),teamLabel=`${team.name} (${team.slug})`,currentInvoiceRecipient=team.billing?.email,requiresInvoiceRecipient=matchesEmail(currentInvoiceRecipient,member.email),invoiceRecipient;if(requiresInvoiceRecipient&¤tInvoiceRecipient){if(!canPrompt(client)){let actionRequired={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_REQUIREMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,userActionRequired:!0,message:"Invoices currently go to this team member. Rerun this command in an interactive terminal to choose where future invoices are sent.",hint:"Run this command in an interactive terminal to choose a new invoice recipient.",missing:["interactive_terminal"],data:{team:{id:team.id,name:team.name,slug:team.slug},member:{uid:member.uid,email:member.email,username:member.username},invoiceRecipient:currentInvoiceRecipient},next:[{command:buildInteractiveRemoveCommand(client),when:"A user reruns this command in an interactive terminal"}]};return outputActionRequired(client,actionRequired,1),client.stdout.write(`${JSON.stringify(actionRequired,null,2)}
|
|
153
153
|
`),1}output_manager_default.print(`
|
|
@@ -159,7 +159,7 @@ Please select a team scope using ${getCommandName("switch")} or use ${cmd("--sco
|
|
|
159
159
|
`),0;let rows=[["uid","Identity","Role"].map(str=>(0,import_chalk47.gray)(str)),...members2.map(member=>[member.uid,member.username||member.email||"",member.role||""])];if(client.stderr.write(`${table(rows,{hsep:3})}
|
|
160
160
|
`),pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["--next","-N"]),nextCmd=`${packageName} teams members${flags} --next ${pagination.next}`;output_manager_default.print(`
|
|
161
161
|
`),printNextPageCommand(nextCmd)}return 0}var import_chalk48=__toESM(require_source(),1);async function sso(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(ssoSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("No team context. Run `vercel switch` or use --scope."),1;try{let full=await client.fetch(`/teams/${encodeURIComponent(team.id)}`),payload={teamId:full.id,slug:full.slug,name:full.name,saml:full.saml??null};return formatResult.jsonOutput?(client.stdout.write(`${JSON.stringify(payload,null,2)}
|
|
162
|
-
`),0):(output_manager_default.log(`${import_chalk48.default.bold("Team")} ${full.name} (${import_chalk48.default.cyan(full.slug)})`),full.saml?(output_manager_default.log(`${import_chalk48.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`),full.saml.connection?.state&&output_manager_default.log(`${import_chalk48.default.cyan("Connection state:")} ${full.saml.connection.state}`)):output_manager_default.log("No SAML configuration on this team (or not visible to your token)."),0)}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`API error (${err.status})`),1;throw err}}var TeamsTelemetryClient=class extends TelemetryClient{trackCliSubcommandInvite(actual){actual&&this.trackCliSubcommand({subcommand:"invite",value:actual})}trackCliSubcommandCreate(actual){actual&&this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandSwitch(actual){actual&&this.trackCliSubcommand({subcommand:"switch",value:actual})}trackCliSubcommandList(actual){actual&&this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRequest(actual){actual&&this.trackCliSubcommand({subcommand:"request",value:actual})}trackCliSubcommandSso(actual){actual&&this.trackCliSubcommand({subcommand:"sso",value:actual})}trackCliSubcommandMembers(actual){actual&&this.trackCliSubcommand({subcommand:"members",value:actual})}};var COMMAND_CONFIG12={list:["ls","list"],switch:["switch","change"],add:["create","add"],invite:["invite"],request:["request","access-request"],sso:["sso"],members:["members","member"]};async function teams(client){let telemetry=new TeamsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(teamsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}parsedArgs.args[0]==="switch"&&parsedArgs.args.unshift("teams");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG12),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("teams",subcommand),output_manager_default.print(help(teamsCommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:teamsCommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(listSubcommand7),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list6(client,args));case"switch":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(switchSubcommand),0):(telemetry.trackCliSubcommandSwitch(subcommandOriginal),subcommandOriginal==="change"&&warnDeprecatedSubcommand(client,"teams change","teams switch"),change(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(addSubcommand4),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"teams add","teams create"),add4(client,args));case"invite":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(inviteSubcommand),0):(telemetry.trackCliSubcommandInvite(subcommandOriginal),invite(client,args));case"request":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(requestSubcommand),0):(telemetry.trackCliSubcommandRequest(subcommandOriginal),subcommandOriginal==="access-request"&&warnDeprecatedSubcommand(client,"teams access-request","teams request"),request2(client,args));case"sso":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(ssoSubcommand),0):(telemetry.trackCliSubcommandSso(subcommandOriginal),sso(client,args));case"members":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),args[0]==="invite"?(printHelp(membersInviteSubcommand),0):args[0]==="remove"||args[0]==="rm"?(printHelp(membersRemoveSubcommand),0):(printHelp(membersSubcommand),0)):(telemetry.trackCliSubcommandMembers(args[0]==="invite"?"members invite":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),members(client,args));default:{let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForTeamsCli);return fallback!==null?fallback:(output_manager_default.error("Please specify a valid subcommand: add | ls | switch | invite | request | sso | members"),output_manager_default.print(help(teamsCommand,{columns:client.stderr.columns})),2)}}}var import_chalk49=__toESM(require_source(),1);async function ls4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be between 1 and 100."),2;let next=parsedArgs.flags["--next"],params=new URLSearchParams;typeof limit=="number"&¶ms.set("limit",String(limit)),typeof next=="string"&¶ms.set("until",next);let qs=params.toString(),path3=`/v6/user/tokens${qs?`?${qs}`:""}`,result=await client.fetch(path3,{useCurrentTeam:!1}),tokens=result.tokens||[];if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
|
|
162
|
+
`),0):(output_manager_default.log(`${import_chalk48.default.bold("Team")} ${full.name} (${import_chalk48.default.cyan(full.slug)})`),full.saml?(output_manager_default.log(`${import_chalk48.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`),full.saml.connection?.state&&output_manager_default.log(`${import_chalk48.default.cyan("Connection state:")} ${full.saml.connection.state}`)):output_manager_default.log("No SAML configuration on this team (or not visible to your token)."),0)}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`API error (${err.status})`),1;throw err}}var TeamsTelemetryClient=class extends TelemetryClient{trackCliSubcommandInvite(actual){actual&&this.trackCliSubcommand({subcommand:"invite",value:actual})}trackCliSubcommandCreate(actual){actual&&this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandSwitch(actual){actual&&this.trackCliSubcommand({subcommand:"switch",value:actual})}trackCliSubcommandList(actual){actual&&this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRequest(actual){actual&&this.trackCliSubcommand({subcommand:"request",value:actual})}trackCliSubcommandSso(actual){actual&&this.trackCliSubcommand({subcommand:"sso",value:actual})}trackCliSubcommandMembers(actual){actual&&this.trackCliSubcommand({subcommand:"members",value:actual})}};var COMMAND_CONFIG12={list:["ls","list"],switch:["switch","change"],add:["create","add"],invite:["invite"],request:["request","access-request"],sso:["sso"],members:["members","member"]};async function teams(client){let telemetry=new TeamsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(teamsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}parsedArgs.args[0]==="switch"&&parsedArgs.args.unshift("teams");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG12),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("teams",subcommand),output_manager_default.print(help(teamsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:teamsCommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(listSubcommand7),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list6(client,args));case"switch":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(switchSubcommand),0):(telemetry.trackCliSubcommandSwitch(subcommandOriginal),subcommandOriginal==="change"&&warnDeprecatedSubcommand(client,"teams change","teams switch"),change(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(addSubcommand4),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"teams add","teams create"),add4(client,args));case"invite":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(inviteSubcommand),0):(telemetry.trackCliSubcommandInvite(subcommandOriginal),invite(client,args));case"request":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(requestSubcommand),0):(telemetry.trackCliSubcommandRequest(subcommandOriginal),subcommandOriginal==="access-request"&&warnDeprecatedSubcommand(client,"teams access-request","teams request"),request2(client,args));case"sso":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(ssoSubcommand),0):(telemetry.trackCliSubcommandSso(subcommandOriginal),sso(client,args));case"members":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),args[0]==="invite"?(printHelp(membersInviteSubcommand),0):args[0]==="remove"||args[0]==="rm"?(printHelp(membersRemoveSubcommand),0):(printHelp(membersSubcommand),0)):(telemetry.trackCliSubcommandMembers(args[0]==="invite"?"members invite":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),members(client,args));default:{let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForTeamsCli);return fallback!==null?fallback:(output_manager_default.error("Please specify a valid subcommand: add | ls | switch | invite | request | sso | members"),output_manager_default.print(help(teamsCommand,{stream:client.stderr,columns:client.stderr.columns})),2)}}}var import_chalk49=__toESM(require_source(),1);async function ls4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be between 1 and 100."),2;let next=parsedArgs.flags["--next"],params=new URLSearchParams;typeof limit=="number"&¶ms.set("limit",String(limit)),typeof next=="string"&¶ms.set("until",next);let qs=params.toString(),path3=`/v6/user/tokens${qs?`?${qs}`:""}`,result=await client.fetch(path3,{useCurrentTeam:!1}),tokens=result.tokens||[];if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
|
|
163
163
|
`),0;if(tokens.length===0)return output_manager_default.log("No tokens found."),0;let rows=[["id","name","type","active"].map(h=>(0,import_chalk49.gray)(h)),...tokens.map(t=>[t.id??"",t.name??"",t.type??"",t.active===void 0?"":String(t.active)])];if(client.stderr.write(`${table(rows,{hsep:2})}
|
|
164
164
|
`),result.pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["_","--next","-N"]),nextCmd=`${packageName} tokens ls${flags} --next ${quoteArg(String(result.pagination.next))}`;output_manager_default.print(`
|
|
165
165
|
`),printNextPageCommand(nextCmd)}return 0}var import_open3=__toESM(require_open(),1);import{KNOWN_AGENTS}from"@vercel/detect-agent";var VERCEL_ACCOUNT_TOKENS_URL="https://vercel.com/account/tokens",CLASSIC_TOKEN_GUIDANCE=`Creating a new token requires a classic personal access token. Sessions from "vercel login" use OAuth and cannot call the create-token API.
|
|
@@ -174,7 +174,7 @@ Common cases:
|
|
|
174
174
|
\u2022 Create a new classic token in the dashboard (Account \u2192 Settings \u2192 Tokens) with access to your personal account / full token permissions.
|
|
175
175
|
\u2022 Then set VERCEL_TOKEN or use --token with that value and run this command again.`,USER_SCOPE_AGENT_HINT=`Creating a personal token requires a classic token that includes full user account scope. Team-scoped, project-scoped, or narrow product tokens are rejected with HTTP 403. Create a classic personal access token at ${VERCEL_ACCOUNT_TOKENS_URL} with account-level access, set VERCEL_TOKEN or --token, then re-run.`;function normalizeApiMessage(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function getSanitizedRerunCommand(client){let rerunArgs=stripSensitiveAuthArgs(client.argv.slice(2));return getCommandNamePlain(rerunArgs.join(" ").trim())}function isClassicTokenRequiredForCreateError(err){if(!isAPIError(err)||err.status!==403)return!1;let raw=err.serverMessage||err.message;return normalizeApiMessage(raw)==="Only user authentication tokens can be used to create new tokens."}function isTokenUserScopeRequiredError(err){return!isAPIError(err)||err.status!==403?!1:normalizeApiMessage(err.serverMessage||err.message).startsWith('To create a token you must be authenticated to scope "')}function tokensAddRecoveryNext(client,rerun,rerunWhen){return[{command:openUrlInBrowserCommand(VERCEL_ACCOUNT_TOKENS_URL),when:"Open the Vercel dashboard to create a classic personal access token"},{command:"export VERCEL_TOKEN='<class_access_token>'",when:"Paste your classic token from the dashboard (replace <class_access_token>); on Windows use set VERCEL_TOKEN=<class_access_token> in cmd or $env:VERCEL_TOKEN in PowerShell"},{command:rerun,when:rerunWhen}]}async function openTokensDashboardInBrowser(client){let isCursorAgent=client.agentName===KNOWN_AGENTS.CURSOR||client.agentName===KNOWN_AGENTS.CURSOR_CLI;if(!(process.env.CI&&!isCursorAgent))try{(await(0,import_open3.default)(VERCEL_ACCOUNT_TOKENS_URL))?.on?.("error",()=>{})}catch{}}async function add5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand5.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs,name=args[0]?.trim();if(!name)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:'Token name is required. Example: `vercel tokens create "My token"`'},2),output_manager_default.error('Token name is required. Example: `vercel tokens create "My token"`'),2;if(args.length>1)return output_manager_default.error("Too many arguments. Pass a single token name."),2;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,projectId=parsedArgs.flags["--project"],body={name};typeof projectId=="string"&&projectId.length>0&&(body.projectId=projectId);let result;try{result=await client.fetch("/v3/user/tokens",{method:"POST",body,useCurrentTeam:!1})}catch(err){if(isClassicTokenRequiredForCreateError(err)){await openTokensDashboardInBrowser(client);let rerun=getSanitizedRerunCommand(client);return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.CLASSIC_TOKEN_REQUIRED,message:"Creating tokens requires a classic personal access token; OAuth login cannot create new tokens.",userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:CLASSIC_TOKEN_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun,"Re-run after the token is set (or use --token <class_access_token> instead of export)")},1),output_manager_default.error(CLASSIC_TOKEN_GUIDANCE),1}if(isTokenUserScopeRequiredError(err)){await openTokensDashboardInBrowser(client);let rerun=getSanitizedRerunCommand(client),apiMessage=normalizeApiMessage(isAPIError(err)?err.serverMessage||err.message:String(err));return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.TOKEN_USER_SCOPE_REQUIRED,message:apiMessage,userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:USER_SCOPE_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun,"Re-run with a classic token that has full user account scope (or pass --token <class_access_token>)")},1),output_manager_default.error(USER_SCOPE_GUIDANCE),output_manager_default.error(""),output_manager_default.error(apiMessage),1}return printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(result,null,2)}
|
|
176
176
|
`),0):(output_manager_default.success("Token created. Save the value below \u2014 it will not be shown again."),result.bearerToken&&output_manager_default.log(result.bearerToken),result.token?.id&&output_manager_default.log(`id: ${result.token.id}`),0)}async function rm4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand5.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let id=parsedArgs.args[0];if(!id)return outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Token id is required. Example: `vercel tokens revoke tok_abc123`",hint:"Run `tokens ls` to list ids, then pass the id to `tokens revoke`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"tokens ls"),when:"List personal access token ids for the current account"},{command:buildCommandWithGlobalFlags(client.argv,"tokens revoke <token_id>"),when:"Revoke a token after replacing <token_id> with an id from the list"}]},2),output_manager_default.error("Token id is required. Example: `vercel tokens revoke tok_abc123`"),2;if(parsedArgs.args.length>1)return output_manager_default.error("Too many arguments. Pass a single token id."),2;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput;if(!parsedArgs.flags["--yes"]&&!asJson)if(canPrompt(client)){if(!await client.input.confirm(`Revoke token ${id}? Anything that uses it will stop working.`,!1))return output_manager_default.log("Canceled. Nothing was changed."),130}else output_manager_default.warning("Revoking a token without a terminal will need --yes in a future major version. Add --yes to keep this working.");return await client.fetch(`/v3/user/tokens/${encodeURIComponent(id)}`,{method:"DELETE",useCurrentTeam:!1}),asJson?(client.stdout.write(`${JSON.stringify({ok:!0,id},null,2)}
|
|
177
|
-
`),0):(output_manager_default.success(`Revoked token ${id}`),0)}var TokensTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandRevoke(actual){this.trackCliSubcommand({subcommand:"revoke",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG13={add:["add","create"],revoke:getCommandAliases(removeSubcommand5),ls:["ls","list"]};async function main7(client){let parsedArgs,flagsSpecification=getFlagsSpecification(tokensCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new TokensTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG13),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("tokens"),output_manager_default.print(help(tokensCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:tokensCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(addSubcommand5)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"tokens add","tokens create"),add5(client,args));case"revoke":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(removeSubcommand5)):(telemetry.trackCliSubcommandRevoke(subcommandOriginal),subcommandOriginal!=="revoke"&&warnDeprecatedSubcommand(client,`tokens ${subcommandOriginal}`,"tokens revoke"),rm4(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(listSubcommand8)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls4(client,args))}}var import_ms9=__toESM(require_ms(),1),import_chalk50=__toESM(require_source(),1),import_pluralize4=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls5(client,argv){let telemetry=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand10.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk50.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
177
|
+
`),0):(output_manager_default.success(`Revoked token ${id}`),0)}var TokensTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandRevoke(actual){this.trackCliSubcommand({subcommand:"revoke",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG13={add:["add","create"],revoke:getCommandAliases(removeSubcommand5),ls:["ls","list"]};async function main7(client){let parsedArgs,flagsSpecification=getFlagsSpecification(tokensCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new TokensTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG13),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("tokens"),output_manager_default.print(help(tokensCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:tokensCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(addSubcommand5)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"tokens add","tokens create"),add5(client,args));case"revoke":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(removeSubcommand5)):(telemetry.trackCliSubcommandRevoke(subcommandOriginal),subcommandOriginal!=="revoke"&&warnDeprecatedSubcommand(client,`tokens ${subcommandOriginal}`,"tokens revoke"),rm4(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(listSubcommand8)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls4(client,args))}}var import_ms9=__toESM(require_ms(),1),import_chalk50=__toESM(require_source(),1),import_pluralize4=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls5(client,argv){let telemetry=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand10.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk50.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
178
178
|
`)}else output_manager_default.log(`${(0,import_pluralize4.default)("Webhook",webhooks.length,!0)} found under ${import_chalk50.default.bold(contextName)} ${import_chalk50.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
|
|
179
179
|
|
|
180
180
|
`));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms9.default)(current-webhook.createdAt):"-",eventsDisplay=webhook.events.length>2?`${webhook.events.slice(0,2).join(", ")} +${webhook.events.length-2}`:webhook.events.join(", ");return[webhook.id,webhook.url,eventsDisplay,import_chalk50.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk51=__toESM(require_source(),1);var WebhooksGetTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function get(client,argv){let telemetry=new WebhooksGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args,getStamp=stamp_default();if(!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:getCommandNamePlain("webhooks ls")},{command:getCommandNamePlain("webhooks inspect <id>")}]},2),output_manager_default.error(`${getCommandName("webhooks inspect <id>")} expects one argument`),2;telemetry.trackCliArgumentId(webhookId),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk51.default.cyan(`${getCommandName("webhooks inspect <id>")}`)}`),2;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk51.default.bold(contextName)}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:getCommandNamePlain("webhooks ls")}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(asJson){output_manager_default.stopSpinner();let jsonOutput=client.nonInteractive?{status:"ok",webhook,message:`Webhook ${webhookId} found.`,next:[{command:getCommandNamePlain(`webhooks delete ${webhookId} --yes`),when:"Delete this webhook"}]}:webhook;client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
@@ -195,7 +195,7 @@ Common cases:
|
|
|
195
195
|
`)),webhook.projectsMetadata&&webhook.projectsMetadata.length>0)for(let project of webhook.projectsMetadata)output_manager_default.print(` - ${project.name} (${project.id})
|
|
196
196
|
`);else for(let projectId of webhook.projectIds)output_manager_default.print(` - ${projectId}
|
|
197
197
|
`);output_manager_default.print(`
|
|
198
|
-
`)}return 0}var import_chalk52=__toESM(require_source(),1);async function createWebhook(client,payload){return await client.fetch("/v1/webhooks",{method:"POST",body:payload})}var WebhooksCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentUrl(url){url&&this.trackCliArgument({arg:"url",value:this.redactedValue})}trackCliOptionEvent(events){events&&events.length>0&&this.trackCliOption({option:"event",value:String(events.length)})}trackCliOptionProject(projects2){projects2&&projects2.length>0&&this.trackCliOption({option:"project",value:String(projects2.length)})}};var cachedEvents=null;async function getWebhookEvents(){if(cachedEvents)return cachedEvents;let cache=new OpenApiCache;if(!await cache.load())return output_manager_default.debug("Failed to load OpenAPI spec for webhook events"),[];let createWebhookEndpoint=cache.getEndpoints().find(e=>e.path==="/v1/webhooks"&&e.method==="POST");if(!createWebhookEndpoint)return output_manager_default.debug("Could not find POST /v1/webhooks endpoint in OpenAPI spec"),[];let eventsField=cache.getBodyFields(createWebhookEndpoint).find(f=>f.name==="events");return eventsField?.enumValues?(cachedEvents=eventsField.enumValues.filter(v=>typeof v=="string"),cachedEvents):(output_manager_default.debug("Could not find events enum in webhook endpoint"),[])}async function validateWebhookEvents(events){let validEvents=await getWebhookEvents();if(validEvents.length===0)return[];let validSet=new Set(validEvents);return events.filter(e=>!validSet.has(e))}var WEBHOOKS_EVENTS_DOCS_URL="https://vercel.com/docs/webhooks/webhooks-api";async function create3(client,argv){let telemetry=new WebhooksCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[url]=args;if(url)try{let urlObj=new URL(url);if(!["http:","https:"].includes(urlObj.protocol))return output_manager_default.error("Webhook URL must use http or https protocol"),1}catch{return output_manager_default.error(`Invalid URL: ${url}`),1}else{if(client.nonInteractive){let argv2=client.argv.slice(2),subcommandParts=argv2.slice(0,2),rest=argv2.slice(2),subcommandWithPlaceholder=`${subcommandParts.join(" ")} <url>${rest.length?` ${rest.join(" ")}`:""}`;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_URL,message:"Webhook URL is required. Provide URL as the first argument.",next:[{command:getCommandNamePlain(subcommandWithPlaceholder)}]},2)}url=await client.input.text({message:"Webhook URL:",validate:val=>{if(!val)return"URL is required";try{let urlObj=new URL(val);if(!["http:","https:"].includes(urlObj.protocol))return"Webhook URL must use http or https protocol"}catch{return"Invalid URL"}return!0}})}let projectIds=opts["--project"],eventFlags=opts["--event"],events;if(!eventFlags||eventFlags.length===0){client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_EVENTS,message:"At least one event is required. Use --event <event> (can be repeated).",next:[{command:getCommandNamePlain("webhooks create <url> --event <event>")}]},2);let availableEvents=await getWebhookEvents()??[];if(availableEvents.length===0)return output_manager_default.error("Could not fetch available webhook events. Please specify events using --event
|
|
198
|
+
`)}return 0}var import_chalk52=__toESM(require_source(),1);async function createWebhook(client,payload){return await client.fetch("/v1/webhooks",{method:"POST",body:payload})}var WebhooksCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentUrl(url){url&&this.trackCliArgument({arg:"url",value:this.redactedValue})}trackCliOptionEvent(events){events&&events.length>0&&this.trackCliOption({option:"event",value:String(events.length)})}trackCliOptionProject(projects2){projects2&&projects2.length>0&&this.trackCliOption({option:"project",value:String(projects2.length)})}};var cachedEvents=null;async function getWebhookEvents(){if(cachedEvents)return cachedEvents;let cache=new OpenApiCache;if(!await cache.load())return output_manager_default.debug("Failed to load OpenAPI spec for webhook events"),[];let createWebhookEndpoint=cache.getEndpoints().find(e=>e.path==="/v1/webhooks"&&e.method==="POST");if(!createWebhookEndpoint)return output_manager_default.debug("Could not find POST /v1/webhooks endpoint in OpenAPI spec"),[];let eventsField=cache.getBodyFields(createWebhookEndpoint).find(f=>f.name==="events");return eventsField?.enumValues?(cachedEvents=eventsField.enumValues.filter(v=>typeof v=="string"),cachedEvents):(output_manager_default.debug("Could not find events enum in webhook endpoint"),[])}async function validateWebhookEvents(events){let validEvents=await getWebhookEvents();if(validEvents.length===0)return[];let validSet=new Set(validEvents);return events.filter(e=>!validSet.has(e))}var WEBHOOKS_EVENTS_DOCS_URL="https://vercel.com/docs/webhooks/webhooks-api";async function create3(client,argv){let telemetry=new WebhooksCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[url]=args;if(url)try{let urlObj=new URL(url);if(!["http:","https:"].includes(urlObj.protocol))return output_manager_default.error("Webhook URL must use http or https protocol"),1}catch{return output_manager_default.error(`Invalid URL: ${url}`),1}else{if(client.nonInteractive){let argv2=client.argv.slice(2),subcommandParts=argv2.slice(0,2),rest=argv2.slice(2),subcommandWithPlaceholder=`${subcommandParts.join(" ")} <url>${rest.length?` ${rest.join(" ")}`:""}`;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_URL,message:"Webhook URL is required. Provide URL as the first argument.",next:[{command:getCommandNamePlain(subcommandWithPlaceholder)}]},2)}url=await client.input.text({message:"Webhook URL:",validate:val=>{if(!val)return"URL is required";try{let urlObj=new URL(val);if(!["http:","https:"].includes(urlObj.protocol))return"Webhook URL must use http or https protocol"}catch{return"Invalid URL"}return!0}})}let projectIds=opts["--project"],eventFlags=opts["--event"],events;if(!eventFlags||eventFlags.length===0){client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_EVENTS,message:"At least one event is required. Use --event <event> (can be repeated).",next:[{command:getCommandNamePlain("webhooks create <url> --event <event>")}]},2);let availableEvents=await getWebhookEvents()??[];if(availableEvents.length===0)return output_manager_default.error("Could not fetch available webhook events. Please specify events using --event options."),1;events=await client.input.checkbox({message:"Select events:",choices:availableEvents.map(event=>({name:event,value:event})),validate:selected=>selected.length===0?"At least one event is required":!0})}else{let invalidEvents=await validateWebhookEvents(eventFlags);if(invalidEvents.length>0){if(client.nonInteractive){let suggested=buildCreateCommandWithEventPlaceholder(client.argv,url);return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}. Use a valid event name (e.g. deployment.created).`,hint:`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`,next:[{command:suggested,when:"use a valid --event value"}]},2),2}return output_manager_default.error(`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}`),2}events=eventFlags}telemetry.trackCliArgumentUrl(url),telemetry.trackCliOptionEvent(events),telemetry.trackCliOptionProject(projectIds);let contextName=await getContextName(client),createStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Creating webhook under ${import_chalk52.default.bold(contextName)}`);try{let webhook=await createWebhook(client,{url,events,projectIds});if(client.nonInteractive){let json={status:AGENT_STATUS.OK,webhook:{id:webhook.id,url:webhook.url,events:webhook.events,...webhook.projectIds?.length?{projectIds:webhook.projectIds}:{}},message:`Webhook ${webhook.id} created.`,next:[{command:getCommandNamePlain(`webhooks inspect ${webhook.id}`),when:"Inspect the webhook"}]};return webhook.secret&&(json.secret=webhook.secret),client.stdout.write(`${JSON.stringify(json,null,2)}
|
|
199
199
|
`),0}return output_manager_default.stopSpinner(),output_manager_default.success(`Webhook created: ${import_chalk52.default.bold(webhook.id)} ${createStamp()}`),output_manager_default.print(`
|
|
200
200
|
`),output_manager_default.print(import_chalk52.default.bold(` Webhook Details
|
|
201
201
|
|
|
@@ -206,4 +206,4 @@ Common cases:
|
|
|
206
206
|
`),output_manager_default.print(`
|
|
207
207
|
`),output_manager_default.warn(`Save this secret - it will not be shown again: ${import_chalk52.default.bold(webhook.secret)}`),output_manager_default.print(`
|
|
208
208
|
`),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)){if(client.nonInteractive){let reason=err.code==="invalid_url"?AGENT_REASON.INVALID_URL:err.code==="invalid_event"?AGENT_REASON.INVALID_EVENT:AGENT_REASON.API_ERROR,suggested=reason===AGENT_REASON.INVALID_EVENT?buildCreateCommandWithEventPlaceholder(client.argv,url):void 0;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:err.message,hint:reason===AGENT_REASON.INVALID_EVENT?`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`:void 0,next:suggested!==void 0?[{command:suggested,when:"use a valid --event value"}]:void 0},1),1}return err.code==="invalid_url"?(output_manager_default.error(`Invalid webhook URL: ${url}`),1):err.code==="invalid_event"?(output_manager_default.error("Invalid event type. Please check the event names."),1):(output_manager_default.error(err.message),1)}throw err}}function buildCreateCommandWithEventPlaceholder(fullArgv,url){let argv=fullArgv.slice(2),out=["webhooks","create",url],i=3,hadEvent=!1;for(;i<argv.length;){if(argv[i]==="--event"||argv[i]==="-e"){hadEvent=!0,i+=2;continue}out.push(argv[i]),i++}return hadEvent&&out.push("--event","<event>"),getCommandNamePlain(out.join(" "))}var import_chalk53=__toESM(require_source(),1);async function deleteWebhook(client,webhookId){await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`,{method:"DELETE"})}var WebhooksRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};function webhookCommandWithGlobalFlags(baseSubcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${baseSubcommand} ${globalFlags.join(" ")}`:baseSubcommand;return getCommandNamePlain(full)}async function rm5(client,argv){let telemetry=new WebhooksRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand7.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args;if(telemetry.trackCliArgumentId(webhookId),telemetry.trackCliFlagYes(opts["--yes"]),!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)},{command:webhookCommandWithGlobalFlags("webhooks delete <id> --yes",client.argv)}]},2),output_manager_default.error(`${getCommandName("webhooks delete <id>")} expects one argument`),2;let skipConfirmation=opts["--yes"]||!1;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Deleting a webhook requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1);let contextName=await getContextName(client);if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk53.default.cyan(`${getCommandName("webhooks delete <id>")}`)}`),2;client.nonInteractive||output_manager_default.spinner(`Fetching webhook ${webhookId}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(output_manager_default.stopSpinner(),!skipConfirmation&&!await client.input.confirm(`Are you sure you want to delete webhook ${param(webhookId)} (${webhook.url})?`,!1))return client.nonInteractive||output_manager_default.log("Canceled"),0;let removeStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Deleting webhook under ${import_chalk53.default.bold(contextName)}`);try{return await deleteWebhook(client,webhookId),output_manager_default.stopSpinner(),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:"ok",webhook:{id:webhookId,url:webhook.url},message:`Webhook ${webhookId} deleted.`},null,2)}
|
|
209
|
-
`),0):(output_manager_default.success(`Webhook ${import_chalk53.default.bold(webhookId)} deleted ${removeStamp()}`),0)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),1;throw err}}var WebhooksTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG14={create:["create","add"],inspect:["inspect","get"],ls:["ls","list"],delete:["delete","rm","del","remove"]};async function main8(client){let parsedArgs,flagsSpecification=getFlagsSpecification(webhooksCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new WebhooksTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG14),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("webhooks"),output_manager_default.print(help(webhooksCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:webhooksCommand,columns:client.stderr.columns})),0}switch(subcommand){case"create":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(createSubcommand2)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"webhooks add","webhooks create"),create3(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"webhooks get","webhooks inspect"),get(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand7)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"webhooks remove","webhooks delete"),rm5(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand10)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls5(client,args))}}export{agentRuns,alias,api,bisect,budget,main as buy,main2 as certs,dns,main3 as git,main4 as globalConfig,main5 as init,organizations,teams,main7 as tokens,main8 as webhooks};
|
|
209
|
+
`),0):(output_manager_default.success(`Webhook ${import_chalk53.default.bold(webhookId)} deleted ${removeStamp()}`),0)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),1;throw err}}var WebhooksTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG14={create:["create","add"],inspect:["inspect","get"],ls:["ls","list"],delete:["delete","rm","del","remove"]};async function main8(client){let parsedArgs,flagsSpecification=getFlagsSpecification(webhooksCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new WebhooksTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG14),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("webhooks"),output_manager_default.print(help(webhooksCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:webhooksCommand,columns:client.stderr.columns})),0}switch(subcommand){case"create":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(createSubcommand2)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"webhooks add","webhooks create"),create3(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"webhooks get","webhooks inspect"),get(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand7)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"webhooks remove","webhooks delete"),rm5(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand10)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls5(client,args))}}export{agentRuns,alias,api,bisect,budget,main as buy,main2 as certs,dns,main3 as git,main4 as globalConfig,main5 as init,organizations,teams,main7 as tokens,main8 as webhooks};
|