@vercel/cli-support 65.10.0-snapshot-c80a43d75dc7 → 65.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{add-RFPJCD35.js → add-4MTUAI2X.js} +1 -1
- package/dist/chunks/{add-A3SN7KWS.js → add-JYLWBVVQ.js} +1 -1
- package/dist/chunks/{add-TOKTANDW.js → add-T5ERJ62Z.js} +1 -1
- package/dist/chunks/{build-25I6XOV7.js → build-OGWTTFLG.js} +1 -1
- package/dist/chunks/{chunk-SHY7P3C6.js → chunk-36XHIIUT.js} +1 -1
- package/dist/chunks/{chunk-3AX7ZZJ7.js → chunk-3PKL2PTF.js} +1 -1
- package/dist/chunks/{chunk-2HLYY3KF.js → chunk-3QFBVAHL.js} +1 -1
- package/dist/chunks/chunk-3QYXC4PH.js +11 -0
- package/dist/chunks/{chunk-BT5C6MCY.js → chunk-42J2KCDF.js} +1 -1
- package/dist/chunks/{chunk-NLKM5LR5.js → chunk-4E6BGQWR.js} +1 -1
- package/dist/chunks/{chunk-FAVZ6WVS.js → chunk-4U6ACPA4.js} +1 -1
- package/dist/chunks/{chunk-NAEY6HG5.js → chunk-4WXVKR43.js} +1 -1
- package/dist/chunks/{chunk-MKYFAYCD.js → chunk-52X4YVSG.js} +1 -1
- package/dist/chunks/{chunk-3WYSEF57.js → chunk-5IZ33FNL.js} +1 -1
- package/dist/chunks/{chunk-GPISCZ2P.js → chunk-5MPZSRYG.js} +1 -1
- package/dist/chunks/{chunk-AX3V7N44.js → chunk-5RSSGN2Q.js} +1 -1
- package/dist/chunks/{chunk-7ULLVH2G.js → chunk-5RYQH3XW.js} +1 -1
- package/dist/chunks/{chunk-KNAOHPOI.js → chunk-6NUH6ZPE.js} +6 -6
- package/dist/chunks/{chunk-EJ34DLV4.js → chunk-6RMW63GB.js} +1 -1
- package/dist/chunks/{chunk-BB5UMZMF.js → chunk-6UMVJ7RL.js} +1 -1
- package/dist/chunks/{chunk-HR462OEG.js → chunk-6YAYCEDT.js} +2 -2
- package/dist/chunks/{chunk-VYRMHE34.js → chunk-75DUL7VI.js} +1 -1
- package/dist/chunks/{chunk-TNNEKGGF.js → chunk-7LSH3MEB.js} +1 -1
- package/dist/chunks/{chunk-LQAQD5LG.js → chunk-7TR6H6NE.js} +3 -3
- package/dist/chunks/chunk-7VGBGUX7.js +7 -0
- package/dist/chunks/chunk-A3C67PNC.js +7 -0
- package/dist/chunks/{chunk-CKTLP5GX.js → chunk-AMPJ6RWT.js} +1 -1
- package/dist/chunks/{chunk-IZ4GFKGR.js → chunk-AO6AMYBF.js} +1 -1
- package/dist/chunks/chunk-AUIV7YJO.js +11 -0
- package/dist/chunks/chunk-AY523IYR.js +7 -0
- package/dist/chunks/{chunk-DBPN2VGJ.js → chunk-B4XGTAFO.js} +1 -1
- package/dist/chunks/{chunk-DRLGZXAL.js → chunk-BIRSJSAO.js} +1 -1
- package/dist/chunks/{chunk-WHUZRBYL.js → chunk-BK3TNLWO.js} +5 -5
- package/dist/chunks/chunk-BZIC36KP.js +7 -0
- package/dist/chunks/chunk-CBMWPDOL.js +8 -0
- package/dist/chunks/{chunk-G2BNLRPU.js → chunk-CHIYT3V4.js} +1 -1
- package/dist/chunks/chunk-CJ6XPDSS.js +11 -0
- package/dist/chunks/{chunk-T7HE23VK.js → chunk-CU3LNJZV.js} +1 -1
- package/dist/chunks/chunk-DIHB5BUY.js +8 -0
- package/dist/chunks/{chunk-TZ6MSTOI.js → chunk-DNLE3KPC.js} +1 -1
- package/dist/chunks/{chunk-R3D4M5RE.js → chunk-DQASZDQT.js} +1 -1
- package/dist/chunks/{chunk-TNUQME3L.js → chunk-DQNP7OQ5.js} +1 -1
- package/dist/chunks/{chunk-NGHFFOD2.js → chunk-DUCCC22H.js} +1 -1
- package/dist/chunks/{chunk-QCIIUQV3.js → chunk-E7WULWMX.js} +1 -1
- package/dist/chunks/{chunk-CZOD25BC.js → chunk-ECFLIVEE.js} +1 -1
- package/dist/chunks/{chunk-FI5O4WHD.js → chunk-ECGY67NB.js} +1 -1
- package/dist/chunks/{chunk-S5JBQCBA.js → chunk-EJN55YDV.js} +1 -1
- package/dist/chunks/{chunk-3PXE5BLH.js → chunk-ER7L7HYA.js} +1 -1
- package/dist/chunks/{chunk-7UFI6OYF.js → chunk-FOWAVQOH.js} +1 -1
- package/dist/chunks/{chunk-4JWAXIIN.js → chunk-FPREO4VS.js} +1 -1
- package/dist/chunks/{chunk-PXQAWH7E.js → chunk-FSJFWVUY.js} +1 -1
- package/dist/chunks/{chunk-Y57DK3ZN.js → chunk-FXHB7TTL.js} +1 -1
- package/dist/chunks/chunk-FYE7ILRR.js +7 -0
- package/dist/chunks/{chunk-V32V4SXB.js → chunk-GQ4CQDIL.js} +1 -1
- package/dist/chunks/{chunk-W634OFUG.js → chunk-GZLYNPNU.js} +6 -5
- package/dist/chunks/chunk-HTPNGLPH.js +7 -0
- package/dist/chunks/{chunk-W5GHMAHP.js → chunk-IHTWZEQW.js} +1 -1
- package/dist/chunks/{chunk-4LGAV2WN.js → chunk-IIGNDMLO.js} +1 -1
- package/dist/chunks/{chunk-F2LNGJOZ.js → chunk-JA6IGJ67.js} +1 -1
- package/dist/chunks/chunk-JBU72NEQ.js +7 -0
- package/dist/chunks/{chunk-U6XJYQJS.js → chunk-JLNF2QTR.js} +1 -1
- package/dist/chunks/{chunk-SODZSOOL.js → chunk-K5KVSA2A.js} +1 -1
- package/dist/chunks/{chunk-VD2FK6OF.js → chunk-K7ARJYAG.js} +1 -1
- package/dist/chunks/{chunk-5TI3ZXW3.js → chunk-KBVYN635.js} +1 -1
- package/dist/chunks/chunk-KKE55LTK.js +7 -0
- package/dist/chunks/{chunk-G5T6UQAL.js → chunk-KV3QXTRZ.js} +1 -1
- package/dist/chunks/{chunk-3F5BOG4A.js → chunk-KZLRIAAT.js} +1 -1
- package/dist/chunks/{chunk-L4QQTYUI.js → chunk-LE72YLCC.js} +2 -2
- package/dist/chunks/{chunk-HJ45TAM4.js → chunk-LIEWXPUC.js} +1 -1
- package/dist/chunks/{chunk-ANCWFEOM.js → chunk-M3R7F2N4.js} +1 -1
- package/dist/chunks/{chunk-MUNGQJGO.js → chunk-M3Z6NSC2.js} +1 -1
- package/dist/chunks/{chunk-VPUYTI5E.js → chunk-MBXLL2HF.js} +1 -1
- package/dist/chunks/{chunk-C24IKNZN.js → chunk-MKTZDEOJ.js} +1 -1
- package/dist/chunks/{chunk-VZGTL3YC.js → chunk-N5AN4JZL.js} +1 -1
- package/dist/chunks/{chunk-EJZNJN4N.js → chunk-N65H4JMJ.js} +1 -1
- package/dist/chunks/{chunk-LC4BSDDG.js → chunk-NAN5IE3B.js} +1 -1
- package/dist/chunks/{chunk-TD7AL545.js → chunk-NE6PKR2J.js} +1 -1
- package/dist/chunks/{chunk-2EFBGKRC.js → chunk-NLTZGQB2.js} +1 -1
- package/dist/chunks/{chunk-TL4ZLZ2Q.js → chunk-NMIZSQDN.js} +1 -1
- package/dist/chunks/{chunk-22UXDTCE.js → chunk-NZRBJB6T.js} +1 -1
- package/dist/chunks/chunk-OII46FDN.js +12 -0
- package/dist/chunks/{chunk-YOWMZJPA.js → chunk-OJWI6QJ3.js} +1 -1
- package/dist/chunks/{chunk-GKALP6QD.js → chunk-OYIDWI5Y.js} +1 -1
- package/dist/chunks/{chunk-QVMU7ZKQ.js → chunk-P24YBQ6H.js} +1 -1
- package/dist/chunks/{chunk-2JCJP43W.js → chunk-P6J22UJQ.js} +1 -1
- package/dist/chunks/{chunk-E7DYXF6G.js → chunk-PFZCGMJ7.js} +1 -1
- package/dist/chunks/{chunk-64UCX5JM.js → chunk-PKNEWN4W.js} +1 -1
- package/dist/chunks/{chunk-Q4GX2UTG.js → chunk-PKZK23PR.js} +1 -1
- package/dist/chunks/{chunk-56UH6NQ3.js → chunk-PL6IOUKW.js} +1 -1
- package/dist/chunks/{chunk-MBL7MWP5.js → chunk-Q2JNATRP.js} +1 -1
- package/dist/chunks/{chunk-KMPDQE4Q.js → chunk-Q46Q4Y4R.js} +1 -1
- package/dist/chunks/{chunk-NAJCRBQB.js → chunk-QXL353OB.js} +1 -1
- package/dist/chunks/{chunk-VR5ROBAO.js → chunk-RI6DJAFI.js} +1 -1
- package/dist/chunks/{chunk-2DHDKWYN.js → chunk-RIJ45N7C.js} +1 -1
- package/dist/chunks/{chunk-6AJWRPTY.js → chunk-RUBMVRT6.js} +1 -1
- package/dist/chunks/{chunk-6RUAAORO.js → chunk-S535FZTA.js} +1 -1
- package/dist/chunks/{chunk-5I7CC45F.js → chunk-SBEWZ65N.js} +1 -1
- package/dist/chunks/{chunk-GJCVOEC2.js → chunk-SDYCW5JM.js} +1 -1
- package/dist/chunks/chunk-SNGM6NSO.js +7 -0
- package/dist/chunks/chunk-SNNJRKD6.js +10 -0
- package/dist/chunks/{chunk-DX2OHM56.js → chunk-SR7BZA6N.js} +1 -1
- package/dist/chunks/{chunk-QXYCICNB.js → chunk-STKZTUGE.js} +1 -1
- package/dist/chunks/{chunk-XGOELSYA.js → chunk-SXYA7JSX.js} +1 -1
- package/dist/chunks/chunk-TILI4QBL.js +11 -0
- package/dist/chunks/{chunk-PMEYNJU2.js → chunk-TZE4CS4K.js} +1 -1
- package/dist/chunks/{chunk-BZV2S4H6.js → chunk-U2TQFAO3.js} +1 -1
- package/dist/chunks/chunk-U2ZNF6HN.js +8 -0
- package/dist/chunks/chunk-UIMJNASP.js +7 -0
- package/dist/chunks/{chunk-FQVIWQ6M.js → chunk-UQNBUXQA.js} +1 -1
- package/dist/chunks/{chunk-C4N4LKPM.js → chunk-US7YJ2RQ.js} +1 -1
- package/dist/chunks/{chunk-JVNIDSP5.js → chunk-V5TOMLK4.js} +1 -1
- package/dist/chunks/{chunk-L6CZL2IQ.js → chunk-VQSSVB6V.js} +1 -1
- package/dist/chunks/chunk-VTITZEPW.js +9 -0
- package/dist/chunks/chunk-WFS3XBAA.js +8 -0
- package/dist/chunks/{chunk-XEXOSJIU.js → chunk-WKIDCYKL.js} +1 -1
- package/dist/chunks/{chunk-UVHKXCR5.js → chunk-WKSXBH7X.js} +1 -2
- package/dist/chunks/{chunk-77LSSWXL.js → chunk-WTFD4MDT.js} +1 -1
- package/dist/chunks/{chunk-YO6SJCZP.js → chunk-WYGOYE6C.js} +1 -1
- package/dist/chunks/{chunk-UNASHUWQ.js → chunk-XFUUALZS.js} +1 -1
- package/dist/chunks/{chunk-SXEOJSZQ.js → chunk-XS3MNHFR.js} +1 -1
- package/dist/chunks/{chunk-ZGQNI22M.js → chunk-YGYUPPAL.js} +2 -2
- package/dist/chunks/{chunk-Q25FOMOX.js → chunk-YKLTNKQJ.js} +1 -1
- package/dist/chunks/{chunk-WFCGAYP5.js → chunk-YUHKH4TK.js} +1 -1
- package/dist/chunks/{chunk-D4TD2KWH.js → chunk-YZKARZ2B.js} +1 -1
- package/dist/chunks/chunk-ZCUUCYID.js +13 -0
- package/dist/chunks/{chunk-FPYHB76H.js → chunk-ZEUREQ4E.js} +1 -1
- package/dist/chunks/chunk-ZIC7VWFC.js +14 -0
- package/dist/chunks/{chunk-QGZZL6YY.js → chunk-ZPJHONCZ.js} +1 -1
- package/dist/chunks/{chunk-R2P4PNRQ.js → chunk-ZQXXESKG.js} +1 -1
- package/dist/chunks/{clear-B764MEAM.js → clear-Z5OO6URI.js} +1 -1
- package/dist/chunks/cli-embedded-Y74S252S.js +66 -0
- package/dist/chunks/{compile-vercel-config-EWCB7SIC.js → compile-vercel-config-ZKUTSDWV.js} +1 -1
- package/dist/chunks/{config-D4WY2HG4.js → config-AUTTHXQO.js} +1 -1
- package/dist/chunks/config-RJ7PLFQD.js +7 -0
- package/dist/chunks/{connect-git-provider-AWEOEEOO.js → connect-git-provider-YIX5ZOU6.js} +1 -1
- package/dist/chunks/{delete-W3GMFAKA.js → delete-QQOC63HV.js} +1 -1
- package/dist/chunks/{delete-SKYFHUWD.js → delete-WIGSOZR3.js} +1 -1
- package/dist/chunks/{detect-services-3TRRRLES.js → detect-services-J4LGLAHC.js} +1 -1
- package/dist/chunks/{disable-EBPZ2LYC.js → disable-L54VGY5A.js} +1 -1
- package/dist/chunks/{discard-SMVPENSP.js → discard-Q5UPTZR2.js} +1 -1
- package/dist/chunks/{edit-CGTNGJKY.js → edit-FRGMYBW3.js} +1 -1
- package/dist/chunks/{edit-A3M3GBGP.js → edit-QEDNQ33T.js} +1 -1
- package/dist/chunks/{enable-6A5THWDP.js → enable-TGQZWSBG.js} +1 -1
- package/dist/chunks/engine-DkdkXQEy-FDYYIXY7.js +17 -0
- package/dist/chunks/{exec-UV73J2ZB.js → exec-H3X7U4P3.js} +1 -1
- package/dist/chunks/{export-R5IUWAW5.js → export-YYQ2J5AT.js} +1 -1
- package/dist/chunks/{future-CPJUUZTU.js → future-RYEYLPCG.js} +1 -1
- package/dist/chunks/{generate-cert-for-deploy-Z3HCAR5H.js → generate-cert-for-deploy-Y4KDIFF2.js} +1 -1
- package/dist/chunks/image-PDPRURMH.js +7 -0
- package/dist/chunks/{import-builders-GPJQAMXT.js → import-builders-H54QCMQ4.js} +1 -1
- package/dist/chunks/{inspect-WC2C4MDP.js → inspect-6IBPIBIJ.js} +1 -1
- package/dist/chunks/{inspect-WWOHWQKS.js → inspect-AHHXHIIP.js} +1 -1
- package/dist/chunks/{inspect-BO2ACFEG.js → inspect-Q7FYDFL7.js} +1 -1
- package/dist/chunks/{inspect-6FEL5DYV.js → inspect-RPCDGIP3.js} +1 -1
- package/dist/chunks/{inspect-TEPB7KVC.js → inspect-SFM3NWDF.js} +1 -1
- package/dist/chunks/{list-C5GUZ35P.js → list-7WWUYCE6.js} +1 -1
- package/dist/chunks/{list-EZWZSVM4.js → list-GSVERG4S.js} +1 -1
- package/dist/chunks/{list-4KSJEP23.js → list-NXZXKKAR.js} +1 -1
- package/dist/chunks/{login-ZNCCVA4H.js → login-HEHHQO3F.js} +1 -1
- package/dist/chunks/{login-PDZT4PQR.js → login-XKLPSZNN.js} +1 -1
- package/dist/chunks/{logs-YKQMUTMG.js → logs-NJ46ZSNZ.js} +1 -1
- package/dist/chunks/{ls-3HUS6KS6.js → ls-5SKRXNSI.js} +1 -1
- package/dist/chunks/{ls-WX4BJRDV.js → ls-FOFJU2JJ.js} +1 -1
- package/dist/chunks/{ls-TASQJDLF.js → ls-ITWXAWSZ.js} +1 -1
- package/dist/chunks/{ls-LYVPEIIT.js → ls-LCUOBWY2.js} +1 -1
- package/dist/chunks/{ls-KQJYKADC.js → ls-MWGIT2YH.js} +1 -1
- package/dist/chunks/{ls-RBPRE6BF.js → ls-OY5YTZGN.js} +1 -1
- package/dist/chunks/{ls-ZP7OBTTV.js → ls-TZN53EJL.js} +1 -1
- package/dist/chunks/{mutate-5N6DMBYS.js → mutate-ZYXVL22A.js} +1 -1
- package/dist/chunks/{native-self-update-7OAY4AVR.js → native-self-update-DEVBYOH2.js} +1 -1
- package/dist/chunks/{notifications-OVFMQLHL.js → notifications-XAPB2F2T.js} +1 -1
- package/dist/chunks/{open-DOBOKUEK.js → open-WPRHI6ND.js} +1 -1
- package/dist/chunks/{openapi-YAZA3237.js → openapi-UUFKDKGC.js} +1 -1
- package/dist/chunks/{permissions-PHCOVDWK.js → permissions-FU5OET67.js} +1 -1
- package/dist/chunks/{plugin-offer-M7KJSJU6.js → plugin-offer-E5JOW442.js} +1 -1
- package/dist/chunks/{prompt-missing-credentials-RTNCHH6Y.js → prompt-missing-credentials-ZZVTEQQB.js} +1 -1
- package/dist/chunks/{publish-JIFRJNDV.js → publish-R5IV2BH2.js} +1 -1
- package/dist/chunks/pull-CQVHIIAN.js +7 -0
- package/dist/chunks/{purchase-domain-if-available-3EBONBX3.js → purchase-domain-if-available-VMWCMYC2.js} +1 -1
- package/dist/chunks/{push-ZN6CBJLJ.js → push-Y5CUOISM.js} +1 -1
- package/dist/chunks/{query-MT6ID6C7.js → query-VMKIOI3W.js} +1 -1
- package/dist/chunks/{reauthenticate-OXFB64PS.js → reauthenticate-5K7LBTOW.js} +1 -1
- package/dist/chunks/{reorder-N2L43LXD.js → reorder-W3MXHSGZ.js} +1 -1
- package/dist/chunks/{reply-WBR3XXBJ.js → reply-YH7HRIWQ.js} +1 -1
- package/dist/chunks/{resolve-NMR24Y67.js → resolve-FWVMWJTG.js} +1 -1
- package/dist/chunks/{resolve-agent-team-KRTLBC5D.js → resolve-agent-team-6L7AQUA2.js} +1 -1
- package/dist/chunks/{restore-AKAVSLAK.js → restore-I7L3EOS4.js} +1 -1
- package/dist/chunks/{rm-Q3ZXEMGI.js → rm-AWUMNWQU.js} +1 -1
- package/dist/chunks/{rm-DGMHU3CU.js → rm-HVGUK55W.js} +1 -1
- package/dist/chunks/{rm-ERBTFH3G.js → rm-M3EMCKSN.js} +1 -1
- package/dist/chunks/{rm-H2T7HB3F.js → rm-RFCTWU5R.js} +1 -1
- package/dist/chunks/{rm-TNGYCAFJ.js → rm-VREBRM5D.js} +1 -1
- package/dist/chunks/{routes-4WGST7VN.js → routes-BP54NO3Z.js} +1 -1
- package/dist/chunks/{rule-inspect-ZVHPS2PL.js → rule-inspect-SQUCRRGA.js} +1 -1
- package/dist/chunks/{schema-TSHU5NN6.js → schema-AKVIKCFT.js} +1 -1
- package/dist/chunks/{schema-YUXTIJSB.js → schema-S36QQNJP.js} +1 -1
- package/dist/chunks/{select-org-35NFUKXO.js → select-org-PRWYXAWW.js} +1 -1
- package/dist/chunks/serving-DKny38LK-UNINNTL5.js +8 -0
- package/dist/chunks/{set-PP5K4NBO.js → set-ZJAC44LV.js} +1 -1
- package/dist/chunks/{setup-and-link-ACSPPTME.js → setup-and-link-VD53JFQI.js} +1 -1
- package/dist/chunks/{skills-X5TPVYXW.js → skills-JG4MGVKX.js} +1 -1
- package/dist/chunks/{tags-6QB3FP3B.js → tags-4Y4UBA5S.js} +1 -1
- package/dist/chunks/token-3ILJZPAZ.js +7 -0
- package/dist/chunks/token-JJLQVXPI.js +7 -0
- package/dist/chunks/{token-util-JDQI37VN.js → token-util-A4BSB3KP.js} +1 -1
- package/dist/chunks/token-util-KL35LHLQ.js +7 -0
- package/dist/chunks/{types-SENK43U4.js → types-DSN6Q6HW.js} +1 -1
- package/dist/chunks/{update-QA3NLSTV.js → update-R42CXSVE.js} +1 -1
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/deploy/index.js +9 -9
- package/dist/commands/dev/index.js +2 -2
- package/dist/commands/env/index.js +12 -12
- package/dist/commands/link/index.js +4 -4
- package/dist/commands/list/index.js +1 -1
- package/dist/commands/project/index.js +8 -14
- package/dist/commands-account.js +2 -2
- package/dist/commands-ai.js +4 -4
- package/dist/commands-blob.js +7 -7
- package/dist/commands-core.js +62 -32
- package/dist/commands-deployments.js +4 -4
- package/dist/commands-flags.js +3 -3
- package/dist/commands-integrations.js +1 -1
- package/dist/commands-observability.js +2 -2
- package/dist/commands-routing.js +5 -5
- package/dist/help.js +1 -1
- package/dist/index.js +5 -5
- package/dist/internal-build.js +1 -1
- package/dist/launcher-errors.js +1 -1
- package/dist/package.json +31 -30
- package/dist/version.mjs +1 -1
- package/package.json +22 -21
- package/dist/chunks/chunk-5KE67O45.js +0 -7
- package/dist/chunks/chunk-CFYTFXX6.js +0 -7
- package/dist/chunks/chunk-CUBRYWA2.js +0 -7
- package/dist/chunks/chunk-FOQD62WW.js +0 -17
- package/dist/chunks/chunk-FTACGWII.js +0 -14
- package/dist/chunks/chunk-FY4ORPZH.js +0 -7
- package/dist/chunks/chunk-G7H33IKQ.js +0 -10
- package/dist/chunks/chunk-KWXJIVBG.js +0 -7
- package/dist/chunks/chunk-MOF4QNZH.js +0 -9
- package/dist/chunks/chunk-O4CQRV2G.js +0 -7
- package/dist/chunks/chunk-UWJ3UPS5.js +0 -11
- package/dist/chunks/chunk-ZUI5EMXD.js +0 -11
- package/dist/chunks/config-CW4JO67Q.js +0 -7
- package/dist/chunks/image-VNSN2SKE.js +0 -7
- package/dist/chunks/pull-HLJSW3W4.js +0 -7
- package/dist/chunks/token-W6P2KNI5.js +0 -7
|
@@ -4,4 +4,4 @@ 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{STANDARD_ENVIRONMENTS}from"./chunk-7YKFF6CE.js";import{require_lib}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-
|
|
7
|
+
import{STANDARD_ENVIRONMENTS}from"./chunk-7YKFF6CE.js";import{require_lib}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);var import_title=__toESM(require_lib(),1);function formatEnvironment(orgSlug,projectSlug,environment){let projectUrl=`https://vercel.com/${orgSlug}/${projectSlug}`,boldName=import_chalk.default.bold(STANDARD_ENVIRONMENTS.includes(environment.slug)?(0,import_title.default)(environment.slug):environment.slug);return output_manager_default.link(boldName,`${projectUrl}/settings/environments/${environment.slug}`,{fallback:()=>boldName,color:!1})}export{formatEnvironment};
|
|
@@ -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{applyEdits,init_main,modify,parse as parse2,printParseErrorCode}from"./chunk-J24BABG4.js";import{init_dist,parse,stringify}from"./chunk-U4Z2MMOF.js";import{require_execa}from"./chunk-RCUDI7OF.js";import{external_exports}from"./chunk-2AMO2VMV.js";import{printAlignedLabel}from"./chunk-
|
|
7
|
+
import{applyEdits,init_main,modify,parse as parse2,printParseErrorCode}from"./chunk-J24BABG4.js";import{init_dist,parse,stringify}from"./chunk-U4Z2MMOF.js";import{require_execa}from"./chunk-RCUDI7OF.js";import{external_exports}from"./chunk-2AMO2VMV.js";import{printAlignedLabel}from"./chunk-PKNEWN4W.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{__toESM}from"./chunk-BZENIQ7N.js";import{join as join2}from"node:path";init_dist();init_main();import{readFile,writeFile,mkdir,copyFile,access,chmod,lstat,stat,link,unlink}from"node:fs/promises";import{isDeepStrictEqual}from"node:util";import{dirname}from"node:path";async function pathExists(path){try{return await access(path),!0}catch{return!1}}async function isFile(path){try{return(await stat(path)).isFile()}catch{return!1}}async function isSymlink(path){try{return(await lstat(path)).isSymbolicLink()}catch{return!1}}async function readFileOrNull(path){try{return await readFile(path,"utf8")}catch(err){if(err.code==="ENOENT")return null;throw err}}function isPlainObject(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Object.getPrototypeOf(value)===Object.prototype}function deepMerge(base,patch){let out={...base};for(let[key,patchValue]of Object.entries(patch)){let baseValue=out[key];isPlainObject(baseValue)&&isPlainObject(patchValue)?out[key]=deepMerge(baseValue,patchValue):out[key]=patchValue}return out}function detectJsonFormatting(text){let eol=text.includes(`\r
|
|
8
8
|
`)?`\r
|
|
9
9
|
`:`
|
|
10
10
|
`,indent=text.match(/^([ \t]+)\S/m)?.[1];return indent?.startsWith(" ")?{eol,insertSpaces:!1,tabSize:1}:{eol,insertSpaces:!0,tabSize:indent?.length||2}}function parseJsonObjectOrNull(current,parse4=JSON.parse){if(!current||!current.trim())return null;let raw;try{raw=parse4(current)}catch(err){throw new Error(`existing file is not valid JSON (${err.message})`)}if(!isPlainObject(raw))throw new Error("existing file is not a JSON object");return raw}function mergeJson(current,patch,parse4=JSON.parse){let raw=parseJsonObjectOrNull(current,parse4);if(!current||raw===null)return`${JSON.stringify(deepMerge({},patch),null,2)}
|
|
@@ -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{formatCondition,formatTransform,isTargetTransform}from"./chunk-
|
|
7
|
+
import{formatCondition,formatTransform,isTargetTransform}from"./chunk-7LSH3MEB.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";function extractEnvVarNames(value){let names=new Set;for(let m of value.matchAll(/\$\{?([A-Z_][A-Z0-9_]*)\}?/g))names.add(m[1]);return Array.from(names)}function escapeRegex(value){return value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function referencesEnvVar(value,name){let escapedName=escapeRegex(name);return new RegExp(`\\$(?:\\{${escapedName}\\}|${escapedName}(?![A-Za-z0-9_]))`).test(value)}function referencesBracedEnvVar(value,name){return new RegExp(`\\$\\{${escapeRegex(name)}\\}`).test(value)}function collectReferencedEnvVars(values,explicitEnv=[],excludedNames=new Set){let names=new Set(explicitEnv.filter(name=>values.some(value=>referencesEnvVar(value,name))));for(let value of values)for(let name of extractEnvVarNames(value))(!excludedNames.has(name)||names.has(name)||referencesBracedEnvVar(value,name))&&names.add(name);return Array.from(names)}function collectNamedRegexCaptures(source){return new Set(Array.from(source.matchAll(/\(\?<([a-zA-Z][a-zA-Z0-9_]*)>/g),match=>match[1]))}function populateRouteEnv(route,srcSyntax="regex"){let excludedNames=srcSyntax==="regex"&&route.src?collectNamedRegexCaptures(route.src):new Set,routeValues=[...route.dest?[route.dest]:[],...Object.values(route.headers||{})],routeEnv=collectReferencedEnvVars(routeValues,route.env,excludedNames);if(route.env=routeEnv.length>0?routeEnv:void 0,route.transforms)for(let transform of route.transforms){let args=transform.args?Array.isArray(transform.args)?transform.args:[transform.args]:[],names=collectReferencedEnvVars(args,transform.env,excludedNames);transform.env=names.length>0?names:void 0}}async function generateRoute(client,projectId,input,options={}){let{teamId}=options,query=new URLSearchParams;teamId&&query.set("teamId",teamId);let queryString=query.toString(),url=`/v1/projects/${projectId}/routes/generate${queryString?`?${queryString}`:""}`;return await client.fetch(url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(input)})}function parseTransforms(values,type,op){return values.map(value=>parseTransform(value,type,op))}function parseTransform(input,type,op){if(op==="delete"){let key2=input.trim();if(!key2)throw new Error("Delete operation requires a key");return{type,op,target:{key:key2}}}let eqIndex=input.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid format: "${input}". Expected format: key=value`);let key=input.slice(0,eqIndex).trim(),args=input.slice(eqIndex+1);if(!key)throw new Error("Transform key cannot be empty");return{type,op,target:{key},args}}function collectTransforms(flags){let transforms=[];return flags.setResponseHeader&&transforms.push(...parseTransforms(flags.setResponseHeader,"response.headers","set")),flags.appendResponseHeader&&transforms.push(...parseTransforms(flags.appendResponseHeader,"response.headers","append")),flags.deleteResponseHeader&&transforms.push(...parseTransforms(flags.deleteResponseHeader,"response.headers","delete")),flags.setRequestHeader&&transforms.push(...parseTransforms(flags.setRequestHeader,"request.headers","set")),flags.appendRequestHeader&&transforms.push(...parseTransforms(flags.appendRequestHeader,"request.headers","append")),flags.deleteRequestHeader&&transforms.push(...parseTransforms(flags.deleteRequestHeader,"request.headers","delete")),flags.setRequestQuery&&transforms.push(...parseTransforms(flags.setRequestQuery,"request.query","set")),flags.appendRequestQuery&&transforms.push(...parseTransforms(flags.appendRequestQuery,"request.query","append")),flags.deleteRequestQuery&&transforms.push(...parseTransforms(flags.deleteRequestQuery,"request.query","delete")),transforms}function collectResponseHeaders(setHeaders){let headers={};for(let input of setHeaders){let eqIndex=input.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid header format: "${input}". Expected format: key=value`);let key=input.slice(0,eqIndex).trim(),value=input.slice(eqIndex+1);if(!key)throw new Error("Header key cannot be empty");headers[key]=value}return headers}var MAX_NAME_LENGTH=256,MAX_DESCRIPTION_LENGTH=1024,MAX_CONDITIONS=16,VALID_SYNTAXES=["regex","path-to-regexp","equals"],REDIRECT_STATUS_CODES=[301,302,303,307,308],VALID_ACTION_TYPES=["rewrite","redirect","set-status"],ALL_ACTION_CHOICES=[{name:"Rewrite",value:"rewrite",exclusive:!0},{name:"Redirect",value:"redirect",exclusive:!0},{name:"Set Status Code",value:"set-status",exclusive:!0},{name:"Response Headers",value:"response-headers"},{name:"Request Headers",value:"request-headers"},{name:"Request Query",value:"request-query"}];function stripQuotes(str){return str.startsWith('"')&&str.endsWith('"')&&str.length>=2||str.startsWith("'")&&str.endsWith("'")&&str.length>=2?str.slice(1,-1):str}function extractTransformFlags(flags){return{setResponseHeader:flags["--set-response-header"],appendResponseHeader:flags["--append-response-header"],deleteResponseHeader:flags["--delete-response-header"],setRequestHeader:flags["--set-request-header"],appendRequestHeader:flags["--append-request-header"],deleteRequestHeader:flags["--delete-request-header"],setRequestQuery:flags["--set-request-query"],appendRequestQuery:flags["--append-request-query"],deleteRequestQuery:flags["--delete-request-query"]}}function collectHeadersAndTransforms(transformFlags){let headers=transformFlags.setResponseHeader?collectResponseHeaders(transformFlags.setResponseHeader):{},transforms=collectTransforms({...transformFlags,setResponseHeader:void 0});return{headers,transforms}}function hasAnyTransformFlags(flags){let tf=extractTransformFlags(flags);return!!(tf.setResponseHeader||tf.appendResponseHeader||tf.deleteResponseHeader||tf.setRequestHeader||tf.appendRequestHeader||tf.deleteRequestHeader||tf.setRequestQuery||tf.appendRequestQuery||tf.deleteRequestQuery)}function validateActionFlags(action,dest,status){if(!action)return dest||status!==void 0?"--action is required when using --dest or --status. Use --action rewrite, --action redirect, or --action set-status.":null;if(!VALID_ACTION_TYPES.includes(action))return`Invalid action type: "${action}". Valid types: ${VALID_ACTION_TYPES.join(", ")}`;switch(action){case"rewrite":if(!dest)return"--action rewrite requires --dest.";if(status!==void 0)return"--action rewrite does not accept --status.";break;case"redirect":if(!dest)return"--action redirect requires --dest.";if(status===void 0)return`--action redirect requires --status (${REDIRECT_STATUS_CODES.join(", ")}).`;if(!REDIRECT_STATUS_CODES.includes(status))return`Invalid redirect status: ${status}. Must be one of: ${REDIRECT_STATUS_CODES.join(", ")}`;break;case"set-status":if(dest)return"--action set-status does not accept --dest.";if(status===void 0)return"--action set-status requires --status.";if(status<100||status>599)return"Status code must be between 100 and 599.";break}return null}async function collectActionDetails(client,actionType,flags){switch(actionType){case"rewrite":{let dest=await client.input.text({message:"Destination URL:",validate:val=>val?!0:"Destination is required"});Object.assign(flags,{"--dest":dest});break}case"redirect":{let dest=await client.input.text({message:"Destination URL:",validate:val=>val?!0:"Destination is required"}),status=await client.input.select({message:"Status code:",choices:[{name:"307 - Temporary Redirect",value:307},{name:"308 - Permanent Redirect",value:308},{name:"301 - Moved Permanently",value:301},{name:"302 - Found",value:302},{name:"303 - See Other",value:303}]});Object.assign(flags,{"--dest":dest,"--status":status});break}case"set-status":{let statusCode=await client.input.text({message:"HTTP status code:",validate:val=>{let num=parseInt(val,10);return isNaN(num)||num<100||num>599?"Status code must be between 100 and 599":!0}});Object.assign(flags,{"--status":parseInt(statusCode,10)});break}case"response-headers":{await collectInteractiveHeaders(client,"response",flags);break}case"request-headers":{await collectInteractiveHeaders(client,"request-header",flags);break}case"request-query":{await collectInteractiveHeaders(client,"request-query",flags);break}}}async function collectInteractiveConditions(client,flags){let addMore=!0;for(;addMore;){let currentHas=flags["--has"]||[],currentMissing=flags["--missing"]||[];if(currentHas.length>0||currentMissing.length>0){output_manager_default.log(`
|
|
8
8
|
Current conditions:`);for(let c of currentHas)output_manager_default.print(` has: ${c}
|
|
9
9
|
`);for(let c of currentMissing)output_manager_default.print(` does not have: ${c}
|
|
10
10
|
`);output_manager_default.print(`
|
|
@@ -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{getScope}from"./chunk-
|
|
7
|
+
import{getScope}from"./chunk-DNLE3KPC.js";import{buildCommandWithGlobalFlags,outputAgentError,shouldEmitNonInteractiveCommandError}from"./chunk-AUIV7YJO.js";import{getOrgById}from"./chunk-6NUH6ZPE.js";import{suggestCorrection}from"./chunk-US7YJ2RQ.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{AGENT_REASON,AGENT_STATUS}from"./chunk-JBU72NEQ.js";async function findSimilarProjectName(client,name,orgId){try{let{projects}=await client.fetch("/v9/projects?limit=100",{accountId:orgId});return suggestCorrection(name,projects.map(project=>project.name).filter(projectName=>/^[a-z0-9._-]+$/i.test(projectName)))}catch(err){output_manager_default.debug(`Project suggestion lookup failed: ${err}`);return}}async function printProjectNotFoundError(client,projectNameOrId,commandName,orgId,{createCommand}={}){let contextName;try{orgId?contextName=(await getOrgById(client,orgId))?.slug??orgId:contextName=(await getScope(client)).contextName}catch(err){contextName=orgId,output_manager_default.debug(`Scope lookup failed during error reporting: ${err}`)}let scopeClause=contextName?` (${contextName})`:"",headline=`Project "${projectNameOrId}" was not found in the current scope${scopeClause}.`,suggestion=createCommand?await findSimilarProjectName(client,projectNameOrId,orgId):void 0,suggestionLine=suggestion?` Did you mean ${suggestion}?`:"",createNote=createCommand?.note;if(output_manager_default.error(`${headline}${suggestionLine}
|
|
8
8
|
|
|
9
9
|
`+(createCommand?`To create it${createNote?`, ${createNote}`:""}:
|
|
10
10
|
${createCommand.command}
|
|
@@ -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{VERCEL_CONFIG_EXTENSIONS,VERCEL_DIR}from"./chunk-
|
|
7
|
+
import{VERCEL_CONFIG_EXTENSIONS,VERCEL_DIR}from"./chunk-6NUH6ZPE.js";import{ConflictingConfigFiles,DeprecatedNowJson}from"./chunk-T2FCF46I.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{require_build_utils}from"./chunk-5MDNVAE6.js";import{__commonJS,__require,__toESM}from"./chunk-BZENIQ7N.js";var require_main=__commonJS({"../../node_modules/.pnpm/dotenv@4.0.0/node_modules/dotenv/lib/main.js"(exports,module){"use strict";var fs=__require("fs");function parse(src){var obj={};return src.toString().split(`
|
|
8
8
|
`).forEach(function(line){var keyValueArr=line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);if(keyValueArr!=null){var key=keyValueArr[1],value=keyValueArr[2]?keyValueArr[2]:"",len=value?value.length:0;len>0&&value.charAt(0)==='"'&&value.charAt(len-1)==='"'&&(value=value.replace(/\\n/gm,`
|
|
9
9
|
`)),value=value.replace(/(^['"]|['"]$)/g,"").trim(),obj[key]=value}}),obj}function config(options){var path=".env",encoding="utf8";options&&(options.path&&(path=options.path),options.encoding&&(encoding=options.encoding));try{var parsedObj=parse(fs.readFileSync(path,{encoding}));return Object.keys(parsedObj).forEach(function(key){process.env[key]=process.env[key]||parsedObj[key]}),{parsed:parsedObj}}catch(e){return{error:e}}}module.exports.config=config;module.exports.load=config;module.exports.parse=parse}});var import_dotenv=__toESM(require_main(),1);import{mkdir,readFile,writeFile,unlink,access}from"fs/promises";import{join,basename}from"path";import{fork}from"child_process";async function loadEsbuild(){let nativeLoader=Reflect.get(globalThis,Symbol.for("vercel.cli.loadEsbuild"));return typeof nativeLoader=="function"?nativeLoader():import("esbuild")}var import_build_utils=__toESM(require_build_utils(),1);function toRouteFormat(item){if("src"in item)return item;let{source,destination,headers,statusCode,permanent,...rest}=item,route={src:source,...rest};return destination&&(route.dest=destination),headers&&(route.headers=Object.fromEntries(headers.map(h=>[h.key,h.value]))),statusCode!==void 0?route.status=statusCode:permanent!==void 0&&(route.status=permanent?308:307),route}function normalizeConfig(config){let normalized={...config},{rewrites,redirects,headers}=normalized,allRoutes=normalized.routes||[],hasRoutes=allRoutes.length>0,hasRewrites=(rewrites?.length??0)>0,hasRedirects=(redirects?.length??0)>0,hasHeaders=(headers?.length??0)>0;function hasRouteFormat(items){return items?.some(item=>"src"in item)??!1}if(hasRoutes&&(hasRewrites||hasRedirects||hasHeaders))return normalized;let shouldConvertRewrites=hasRewrites&&hasRouteFormat(rewrites),shouldConvertRedirects=hasRedirects&&hasRouteFormat(redirects),shouldConvertHeaders=hasHeaders&&hasRouteFormat(headers);if((shouldConvertRewrites||shouldConvertRedirects||shouldConvertHeaders)&&(hasRewrites&&!shouldConvertRewrites||hasRedirects&&!shouldConvertRedirects||hasHeaders&&!shouldConvertHeaders))throw new import_build_utils.NowBuildError({code:"INVALID_VERCEL_CONFIG",message:"Transforms (e.g., requestHeaders) require the `routes` format, which cannot be used alongside `rewrites`, `redirects`, or `headers`. Move everything into the `routes` array instead.",link:"https://vercel.com/docs/projects/project-configuration#routes"});return rewrites&&shouldConvertRewrites&&(allRoutes=[...allRoutes,...rewrites.map(toRouteFormat)],delete normalized.rewrites),redirects&&shouldConvertRedirects&&(allRoutes=[...allRoutes,...redirects.map(toRouteFormat)],delete normalized.redirects),headers&&shouldConvertHeaders&&(allRoutes=[...allRoutes,...headers.map(toRouteFormat)],delete normalized.headers),allRoutes.length>0&&(normalized.routes=allRoutes.map(toRouteFormat)),normalized}async function fileExists(filePath){try{return await access(filePath),!0}catch{return!1}}async function findAllVercelConfigFiles(workPath){let foundFiles=[];for(let ext of VERCEL_CONFIG_EXTENSIONS){let configPath=join(workPath,`vercel.${ext}`);await fileExists(configPath)&&foundFiles.push(configPath)}return foundFiles}async function findSourceVercelConfigFile(workPath){for(let ext of VERCEL_CONFIG_EXTENSIONS){let configPath=join(workPath,`vercel.${ext}`);if(await fileExists(configPath))return basename(configPath)}let tomlPath=join(workPath,"vercel.toml");return await fileExists(tomlPath)?"vercel.toml":null}async function findVercelConfigFile(workPath){let foundFiles=await findAllVercelConfigFiles(workPath);if(foundFiles.length>1)throw new ConflictingConfigFiles(foundFiles,"Multiple vercel config files found. Please use only one configuration file.","https://vercel.com/docs/projects/project-configuration");return foundFiles[0]||null}function parseConfigLoaderError(stderr){if(!stderr.trim())return"";let moduleNotFoundMatch=stderr.match(/Error \[ERR_MODULE_NOT_FOUND\]: Cannot find package '([^']+)'/);if(moduleNotFoundMatch)return`Cannot find package '${moduleNotFoundMatch[1]}'. Make sure it's installed in your project dependencies.`;let syntaxErrorMatch=stderr.match(/SyntaxError: (.+?)(?:\n|$)/);if(syntaxErrorMatch)return`Syntax error: ${syntaxErrorMatch[1]}`;let errorMatch=stderr.match(/^(?:Error|TypeError|ReferenceError): (.+?)(?:\n|$)/m);return errorMatch?errorMatch[1]:stderr.trim()}async function compileVercelConfig(workPath){let vercelJsonPath=join(workPath,"vercel.json"),nowJsonPath=join(workPath,"now.json"),vercelTomlPath=join(workPath,"vercel.toml"),hasVercelJson=await fileExists(vercelJsonPath),hasNowJson=await fileExists(nowJsonPath),hasVercelToml=await fileExists(vercelTomlPath),vercelConfigPath=await findVercelConfigFile(workPath),vercelDir=join(workPath,VERCEL_DIR),compiledConfigPath=join(vercelDir,"vercel.json");if(hasNowJson)throw new DeprecatedNowJson(nowJsonPath);let foundConfigs=[];if(hasVercelJson&&foundConfigs.push(vercelJsonPath),hasVercelToml&&foundConfigs.push(vercelTomlPath),vercelConfigPath&&foundConfigs.push(vercelConfigPath),foundConfigs.length>1)throw new ConflictingConfigFiles(foundConfigs,`Multiple config files found: ${foundConfigs.map(f=>basename(f)).join(", ")}. Please use only one configuration method.`,"https://vercel.com/docs/projects/project-configuration");if(!vercelConfigPath&&!hasVercelToml)return hasVercelJson?{configPath:vercelJsonPath,wasCompiled:!1}:await fileExists(compiledConfigPath)?{configPath:compiledConfigPath,wasCompiled:!0,sourceFile:await findSourceVercelConfigFile(workPath)??void 0}:{configPath:null,wasCompiled:!1};if(hasVercelToml)try{let{parse:tomlParse}=await import("./dist-RXYNZPEA.js"),tomlContent=await readFile(vercelTomlPath,"utf8"),config=tomlParse(tomlContent),normalizedConfig=normalizeConfig(config);return await mkdir(vercelDir,{recursive:!0}),await writeFile(compiledConfigPath,JSON.stringify(normalizedConfig,null,2),"utf-8"),output_manager_default.debug(`Compiled ${vercelTomlPath} -> ${compiledConfigPath}`),{configPath:compiledConfigPath,wasCompiled:!0,sourceFile:"vercel.toml"}}catch(error){throw new import_build_utils.NowBuildError({code:error.code??"vercel_toml_parse_failed",message:`Failed to parse vercel.toml: ${error.message}`,link:error.link??"https://vercel.com/docs/projects/project-configuration"})}let sourceConfigPath=vercelConfigPath;(0,import_dotenv.config)({path:join(workPath,".env")}),(0,import_dotenv.config)({path:join(workPath,".env.local")});let tempOutPath=join(vercelDir,"vercel-temp.mjs"),loaderPath=join(vercelDir,"vercel-loader.mjs");try{let{build}=await loadEsbuild();await mkdir(vercelDir,{recursive:!0}),await build({entryPoints:[sourceConfigPath],bundle:!0,platform:"node",format:"esm",outfile:tempOutPath,packages:"external",target:"node20",sourcemap:"inline"}),await writeFile(loaderPath,`
|
|
10
10
|
import { pathToFileURL } from 'url';
|
|
@@ -4,4 +4,4 @@ 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{getCommandName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-
|
|
7
|
+
import{getCommandName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";var OUTPUT_FORMATS=["json"];function parseOutputFormat(value){let normalized=value.toLowerCase();if(OUTPUT_FORMATS.includes(normalized))return normalized;throw new Error(`Invalid output format: "${value}". Valid formats: ${OUTPUT_FORMATS.join(", ")}`)}function getOutputFormat(flags){let formatFlag=flags["--format"],jsonFlag=flags["--json"];if(formatFlag)return parseOutputFormat(formatFlag);if(jsonFlag)return"json"}function isJsonOutput(flags){return getOutputFormat(flags)==="json"}function validateJsonOutput(flags){try{return{valid:!0,jsonOutput:isJsonOutput(flags)}}catch(err){return{valid:!1,error:err.message}}}function wantsMachineReadableOutput(subcommand,argv){if(argv.includes("--help")||argv.includes("-h"))return!1;if(subcommand==="api"||argv.includes("--json"))return!0;for(let arg of argv)if(arg.toLowerCase()==="--format=json")return!0;let formatIdx=argv.indexOf("--format");return formatIdx!==-1&&argv[formatIdx+1]?.toLowerCase()==="json"}function shouldPrintVersionBanner(subcommand,argv){return!wantsMachineReadableOutput(subcommand,argv)}function warnDeprecatedSubcommand(client,deprecated,replacement){wantsMachineReadableOutput(void 0,client.argv)||output_manager_default.warning(`${getCommandName(deprecated)} is deprecated. Use ${getCommandName(replacement)}.`)}function warnDeprecatedOption(argv,deprecated,replacement){wantsMachineReadableOutput(void 0,argv)||output_manager_default.warning(`${deprecated} is deprecated. Use ${replacement}.`)}function warnDeprecatedInput(client,deprecated,replacement){wantsMachineReadableOutput(void 0,client.argv)||output_manager_default.warning(`${deprecated} is deprecated. Use ${replacement}.`)}export{validateJsonOutput,wantsMachineReadableOutput,shouldPrintVersionBanner,warnDeprecatedSubcommand,warnDeprecatedOption,warnDeprecatedInput};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
var options={re:{type:"string",value:"id",description:"in a thread: its root's ID"},by:{type:"string",value:"handle",description:"by an author: a handle, me, or an actor ID"},mentions:{type:"string",value:"@handle",optionalValue:!0,description:"mentioning a handle, or you without one"},label:{type:"string",multiple:!0,value:"k[=v|w]",description:"with a label on the message or its thread's root"},source:{type:"string",value:"source",description:"from a source: a sync key such as slack, or board"},text:{type:"string",value:"words",description:"containing these words"},after:{type:"string",value:"id",description:"after a message or a cursor"},url:{type:"string",value:"url",description:"the board at this URL, not the one the environment points at"},scope:{type:"string",value:"team",description:"a team's board in Vercel's API, by its slug or ID"},team:{type:"string",value:"team",description:"the same as --scope",hidden:!0},as:{type:"string",value:"profile",description:"write as a profile, such as an agent's name"},avatar:{type:"string",value:"url",description:"the profile's avatar, with --as"},human:{type:"boolean",description:"write as yourself, with no profile or session"},handle:{type:"string",value:"h",description:"your handle (default: your Vercel username)"},json:{type:"boolean",description:"JSON, for programs"},help:{type:"boolean",short:"h",description:"this help, or a command's"},version:{type:"boolean",short:"v",description:"the CLI's version"},limit:{type:"string",short:"n",value:"N",description:"how many"},"idempotency-key":{type:"string",value:"key",description:"sending the same one again posts once"},sync:{type:"string",multiple:!0,value:"target",description:"sync the new thread to a target too, e.g. slack:#incidents"},"no-sync":{type:"boolean",description:"keep it on the board: sync it nowhere"},attach:{type:"string",multiple:!0,value:"file",description:"attach a file"},unset:{type:"string",multiple:!0,value:"k",description:"remove a label"},if:{type:"string",multiple:!0,value:"k=v",description:"only while the message has this label now"},"if-unset":{type:"string",multiple:!0,value:"k",description:"only while the message doesn't have this label"},"if-revision":{type:"string",value:"N",description:"only if it is still at this revision, as read --json shows it"},channel:{type:"string",value:"c",description:"in a channel"},remove:{type:"boolean",description:"take the reaction back"},all:{type:"boolean",short:"a",description:"everything, not only what most want"},timeout:{type:"string",value:"duration",description:"how long to wait (default: 30m)"},code:{type:"boolean",description:"post a code from your account instead of signing in"},"no-wait":{type:"boolean",description:"start linking, and don't wait for it to finish"},"no-open":{type:"boolean",description:"don't open the browser"},in:{type:"string",value:"duration",description:"once, this long from now, e.g. 1d"},at:{type:"string",value:"time",description:"at a time: once, or with --every, the first"},every:{type:"string",value:"duration",description:"repeating at this interval, e.g. 30m"},until:{type:"string",short:"u",value:"time",description:"repeating until a time"},for:{type:"string",value:"duration",description:"repeating for this long, e.g. 24h"},times:{type:"string",value:"N",description:"repeating this many times"},port:{type:"string",value:"N",description:"the port to listen on"},dir:{type:"string",value:"dir",description:"where the board keeps its log (default: .board/)"},"no-inspect":{type:"boolean",description:"don't start the inspector"},agent:{type:"string",value:"name",description:"the agent whose turn ended",hidden:!0}},option=(name,description,value)=>({name,...options[name],...description?{description}:{},...value?{value}:{}}),filters=["re","by","source","label","text","mentions","after"].map(name=>option(name)),globalOptions=["url","scope","team","as","avatar","human","handle","json","help","version"].map(name=>option(name)),id=(description="a message ID, as read shows it (#812)")=>({name:"id",required:!0,description}),text=(description="what it says: - reads it from stdin, and it may be left out when you --attach")=>({name:"text",required:!1,description}),AFTER="a reply only while this is the thread's newest message",groups=["you","the board","messages","agents","live"],commands=[{group:"you",name:"whoami",description:"who am I, on which board, with which token, and what I can do",arguments:[],options:[],examples:[{name:"see who you are on the board",value:"whoami"}]},{group:"the board",name:"channels",description:"channels, grouped by path prefix",arguments:[],options:[],examples:[{name:"list the channels",value:"channels"}]},{group:"the board",name:"actors",description:"actors and their handles",arguments:[],options:[],examples:[{name:"list who has written here",value:"actors"}]},{group:"the board",name:"identity",description:"your linked Slack and GitHub accounts",arguments:[],options:[],runsWithoutSubcommand:!0,examples:[{name:"list your linked accounts",value:"identity"}],subcommands:[{name:"link",description:"link your account on a sync entry: sign in, or post a code from it",arguments:[{name:"key",required:!0,description:"the sync entry, e.g. slack"}],options:[option("code"),option("no-wait"),option("no-open")],examples:[{name:"link your Slack account",value:"identity link slack"}]},{name:"unlink",description:"unlink one, by handle or actor ID",arguments:[{name:"account",required:!0,description:"a handle or actor ID from identity"}],options:[],examples:[{name:"unlink an account",value:"identity unlink @ada"}]}]},{group:"messages",name:"read",description:"the latest threads, one each (root, replies, latest reply), or one thread, every message",arguments:[{name:"channel|id|link",required:!1,description:"a channel (every channel without one), a message's ID, or a Slack or GitHub link the board synced"}],options:[option("limit","threads to list (default: 50)")],filters:!0,examples:[{name:"list a channel's latest threads",value:"read dev"},{name:"read one thread, every message",value:"read 812"},{name:"list the open bugs",value:"read dev --label kind=bug --label state=open"}]},{group:"messages",name:"post",description:"a new thread in a channel, or with an ID, a reply in its thread",arguments:[{name:"channel|id",required:!0,description:"a channel, or a message ID to reply in its thread"},text()],options:[option("label","label it","k=v"),option("attach"),option("sync"),option("no-sync"),option("idempotency-key"),option("after",AFTER)],examples:[{name:"start a thread",value:'post dev "deploys are green again"'},{name:"start a labeled thread",value:'post dev "checkout times out" --label kind=bug'}]},{group:"messages",name:"reply",description:"a reply in a thread",arguments:[id("the ID of a message in the thread"),text()],options:[option("attach"),option("idempotency-key"),option("no-sync"),option("after",AFTER)],examples:[{name:"reply in a thread",value:'reply 812 "on it"'},{name:"reply only if #815 is still the thread's newest",value:'reply 812 "on it" --after 815'}]},{group:"messages",name:"schedule",description:"post later, as you: once (--in or --at), or repeating (--every) until a stop or until canceled",arguments:[{name:"channel|id",required:!0,description:"a channel, or a message ID to reply in its thread"},text()],options:[option("in"),option("at"),option("every"),option("until"),option("for"),option("times"),option("label","label it","k=v"),option("attach"),option("no-sync")],examples:[{name:"reply in a thread tomorrow",value:'schedule 812 "still broken?" --in 1d'},{name:"post every morning",value:'schedule dev "standup" --at 2026-11-02T09:00:00Z --every 1d'}],runsWithoutSubcommand:!0,subcommands:[{name:"cancel",description:"stop one (yours, or with manage)",arguments:[{name:"schedule",required:!0,description:"its ID, as schedules shows it (s12)"}],options:[],examples:[{name:"cancel a schedule",value:"schedule cancel s12"}]}]},{group:"messages",name:"schedules",description:"pending schedules, or a thread's with an ID",arguments:[{name:"id",required:!1,description:"a message in the thread"}],options:[option("by","scheduled by a handle"),option("channel","posting in a channel"),option("all","done and canceled ones too")],examples:[{name:"list pending schedules",value:"schedules"}]},{group:"messages",name:"edit",description:"change a message's text",arguments:[id(),{name:"text",required:!0,description:"its new text: - reads it from stdin"}],options:[option("if-revision")],examples:[{name:"fix a typo",value:'edit 812 "deploys are green again"'},{name:"only if no one changed it since you read it",value:'edit 812 "step 3 of 5" --if-revision 820'}]},{group:"messages",name:"delete",aliases:["rm","del"],description:"delete a message, leaving a tombstone",arguments:[id()],options:[option("if-revision")],examples:[{name:"delete a message",value:"delete 812"}]},{group:"messages",name:"react",description:"react to a message",arguments:[id(),{name:"emoji",required:!0,description:"its name or the emoji itself: eyes, \u{1F440}"}],options:[option("remove")],examples:[{name:"react with eyes",value:"react 812 eyes"}]},{group:"messages",name:"label",description:"set labels on a message, or remove them",arguments:[id(),{name:"k=v",required:!1,multiple:!0,description:"a label to set"}],options:[option("unset"),option("if"),option("if-unset")],examples:[{name:"mark a bug fixed",value:"label 812 state=fixed --unset wip"},{name:"claim a thread, unless someone has",value:"label 812 owner=claude --if-unset owner"},{name:"move it on from open only",value:"label 812 state=fixing --if state=open"}]},{group:"messages",name:"typing",description:"show typing in the thread's synced platform threads (marks WhatsApp read)",arguments:[id(),{name:"status",required:!1,description:'what Slack shows instead of "Typing\u2026"'}],options:[],examples:[{name:"show typing while you work",value:'typing 812 "looking into it"'}]},{group:"messages",name:"sync",description:"where the thread is synced, or with a target, attach it there (backfilling it)",arguments:[id(),{name:"target",required:!1,description:"where to sync it, e.g. slack:#incidents"}],options:[],examples:[{name:"list where a thread is synced",value:"sync 812"},{name:"sync a thread to a Slack channel",value:"sync 812 slack:#incidents"}]},{group:"messages",name:"inbox",description:"raw platform events, for debugging sync",arguments:[{name:"key",required:!0,description:"the sync entry, e.g. slack"},{name:"channel",required:!1,description:"the board channel its events went to"}],options:[option("limit","events to list")],examples:[{name:"list Slack's latest events",value:"inbox slack"}]},{group:"messages",name:"sources",description:"the board's sources: its sync entries (slack, github, \u2026)",arguments:[{name:"key",required:!1,description:"a sync entry, e.g. slack"}],options:[],runsWithoutSubcommand:!0,argumentsBeforeSubcommand:!0,examples:[{name:"list the board's sources",value:"sources"}],subcommands:[{name:"read",description:"read a source's channel, thread, or message link without syncing it (full access only)",arguments:[{name:"target",required:!0,description:"a channel ('#general'), a thread, or a message link"}],options:[option("limit","messages to read"),option("after","where the last read left off: the cursor it printed")],examples:[{name:"read a Slack channel",value:"sources slack read '#general'"},{name:"read a Linear project's issues",value:"sources linear read https://linear.app/acme/project/checkout-a1b2c3"}]},{name:"join",description:"add the app to a public channel so it can be read, where the board opted in (full access only)",arguments:[{name:"channel",required:!0,description:"a channel or its link"}],options:[],examples:[{name:"join a Slack channel",value:"sources slack join '#general'"}]}]},{group:"messages",name:"download",description:"save an attachment (its name, here, by default; - for stdout)",arguments:[{name:"attachment",required:!0,description:"the ID read shows on a file line"},{name:"path",required:!1,description:"where to save it, or - for stdout"}],options:[],examples:[{name:"save an attachment",value:"download Yt2mR8vQ1x0pLk3sF7dA9w"}]},{group:"messages",name:"conformance",description:"check that the board speaks the protocol (1 if a check fails): it posts, and deletes what it posted",arguments:[],options:[option("channel","the channel to check in (default: conformance)")],examples:[{name:"check the board",value:"conformance"}]},{group:"agents",name:"hooks",description:"the turn-end hooks an earlier board installed",arguments:[],options:[],examples:[],subcommands:[{name:"uninstall",description:"remove the turn-end hooks an earlier board installed, from every agent or the ones named",arguments:[{name:"agent",required:!1,multiple:!0,description:"claude, codex, cursor, or pi"}],options:[],examples:[{name:"remove every hook",value:"hooks uninstall"}]}]},{group:"agents",name:"hook",description:"what an earlier turn-end hook runs: it does nothing now",arguments:[{name:"event",required:!1,multiple:!0}],options:[option("agent")],examples:[],hidden:!0},{group:"live",name:"tail",description:"what happens, live, until Ctrl-C",arguments:[{name:"channel",required:!1,description:"a channel, or a path prefix (dev/)"}],options:[option("all","delivery receipts too")],filters:!0,examples:[{name:"follow the bugs",value:"tail dev --label kind=bug"}]},{group:"live",name:"wait",description:"block for the next match and print it",arguments:[{name:"channel",required:!1,description:"a channel, or a path prefix (dev/)"}],options:[option("timeout")],filters:!0,examples:[{name:"wait for a mention",value:"wait dev --mentions --timeout 10m"}]},{group:"live",name:"help",description:"this help, or a command's",arguments:[{name:"command",required:!1,multiple:!0}],options:[],examples:[],hidden:!0}];function usage(path){let words=[];return path.forEach((command,at)=>{let last=at===path.length-1;if(words.push(command.name),last||command.argumentsBeforeSubcommand)for(let argument of command.arguments){let required=argument.required||!last;words.push(`${required?`<${argument.name}>`:`[${argument.name}]`}${argument.multiple?"...":""}`)}}),path.at(-1)?.filters&&words.push("[filters]"),words.join(" ")}export{options,filters,globalOptions,groups,commands,usage};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import{commands,commandsStructs}from"./chunk-ZIC7VWFC.js";import{printError}from"./chunk-PKZK23PR.js";import{createHelpTheme,help,helpCommand,resolveHelpTarget}from"./chunk-OYIDWI5Y.js";import{TelemetryClient,readLaunch}from"./chunk-MBXLL2HF.js";import{require_ci_info}from"./chunk-2EYYB6YN.js";import{shouldEmitNonInteractiveCommandError,writeAgentError}from"./chunk-AUIV7YJO.js";import{parseArguments,takeCommand}from"./chunk-US7YJ2RQ.js";import{getCommandNamePlain}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{getFlagsSpecification,globalCliFlagTakesValue}from"./chunk-AMPJ6RWT.js";import{AGENT_STATUS}from"./chunk-JBU72NEQ.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_ci_info=__toESM(require_ci_info(),1);var RootTelemetryClient=class extends TelemetryClient{trackCliExtension(){this.trackExtension()}trackCliDefaultDeploy(defaultDeploy){defaultDeploy&&this.trackDefaultDeploy()}trackCliCommandAgent(actual){this.trackCliCommand({command:"agent",value:actual})}trackCliCommandAgentRuns(actual){this.trackCliCommand({command:"agent-runs",value:actual})}trackCliCommandAiGateway(actual){this.trackCliCommand({command:"ai-gateway",value:actual})}trackCliCommandTokenPass(actual){this.trackCliCommand({command:"token-pass",value:actual})}trackCliCommandAlias(actual){this.trackCliCommand({command:"alias",value:actual})}trackCliCommandActivity(actual){this.trackCliCommand({command:"activity",value:actual})}trackCliCommandAlerts(actual){this.trackCliCommand({command:"alerts",value:actual})}trackCliCommandApi(actual){this.trackCliCommand({command:"api",value:actual})}trackCliCommandBilling(actual){this.trackCliCommand({command:"billing",value:actual})}trackCliCommandBisect(actual){this.trackCliCommand({command:"bisect",value:actual})}trackCliCommandBlob(actual){this.trackCliCommand({command:"blob",value:actual})}trackCliCommandBoard(actual){this.trackCliCommand({command:"board",value:actual})}trackCliCommandBudgets(actual){this.trackCliCommand({command:"budgets",value:actual})}trackCliCommandBuild(actual){this.trackCliCommand({command:"build",value:actual})}trackCliCommandBuy(actual){this.trackCliCommand({command:"buy",value:actual})}trackCliCommandCache(actual){this.trackCliCommand({command:"cache",value:actual})}trackCliCommandCerts(actual){this.trackCliCommand({command:"certs",value:actual})}trackCliCommandCi(actual){this.trackCliCommand({command:"ci",value:actual})}trackCliCommandChangelog(actual){this.trackCliCommand({command:"changelog",value:actual})}trackCliCommandComments(actual){this.trackCliCommand({command:"comments",value:actual})}trackCliCommandConnex(actual){this.trackCliCommand({command:"connect",value:actual})}trackCliCommandContract(actual){this.trackCliCommand({command:"contract",value:actual})}trackCliCommandCrons(actual){this.trackCliCommand({command:"crons",value:actual})}trackCliCommandCurl(actual){this.trackCliCommand({command:"curl",value:actual})}trackCliCommandDaemons(actual){this.trackCliCommand({command:"daemons",value:actual})}trackCliCommandDeploy(actual){this.trackCliCommand({command:"deploy",value:actual})}trackCliCommandDeployHooks(actual){this.trackCliCommand({command:"deploy-hooks",value:actual})}trackCliCommandDev(actual){this.trackCliCommand({command:"dev",value:actual})}trackCliCommandDoctor(actual){this.trackCliCommand({command:"doctor",value:actual})}trackCliCommandDomains(actual){this.trackCliCommand({command:"domains",value:actual})}trackCliCommandDrains(actual){this.trackCliCommand({command:"drains",value:actual})}trackCliCommandDns(actual){this.trackCliCommand({command:"dns",value:actual})}trackCliCommandEnv(actual){this.trackCliCommand({command:"env",value:actual})}trackCliCommandExperiments(actual){this.trackCliCommand({command:"experiments",value:actual})}trackCliCommandFirewall(actual){this.trackCliCommand({command:"firewall",value:actual})}trackCliCommandFlags(actual){this.trackCliCommand({command:"flags",value:actual})}trackCliCommandGit(actual){this.trackCliCommand({command:"git",value:actual})}trackCliCommandGlobalConfig(actual){this.trackCliCommand({command:"global-config",value:actual})}trackCliCommandGuidance(actual){this.trackCliCommand({command:"guidance",value:actual})}trackCliCommandHealth(actual){this.trackCliCommand({command:"health",value:actual})}trackCliCommandHelp(actual){this.trackCliCommand({command:"help",value:actual})}trackCliCommandHttpstat(actual){this.trackCliCommand({command:"httpstat",value:actual})}trackCliCommandInit(actual){this.trackCliCommand({command:"init",value:actual})}trackCliCommandInspect(actual){this.trackCliCommand({command:"inspect",value:actual})}trackCliCommandInstall(actual){this.trackCliCommand({command:"install",value:actual})}trackCliCommandIntegration(actual){this.trackCliCommand({command:"integration",value:actual})}trackCliCommandIntegrationResource(actual){this.trackCliCommand({command:"integration-resource",value:actual})}trackCliCommandKms(actual){this.trackCliCommand({command:"kms",value:actual})}trackCliCommandLink(actual){this.trackCliCommand({command:"link",value:actual})}trackCliCommandList(actual){this.trackCliCommand({command:"list",value:actual})}trackCliCommandLogin(actual){this.trackCliCommand({command:"login",value:actual})}trackCliCommandLogout(actual){this.trackCliCommand({command:"logout",value:actual})}trackCliCommandLogs(actual){this.trackCliCommand({command:"logs",value:actual})}trackCliCommandMetrics(actual){this.trackCliCommand({command:"metrics",value:actual})}trackCliCommandMicrofrontends(actual){this.trackCliCommand({command:"microfrontends",value:actual})}trackCliCommandMonitors(actual){this.trackCliCommand({command:"monitors",value:actual})}trackCliCommandOpen(actual){this.trackCliCommand({command:"open",value:actual})}trackCliCommandPageIntegrity(actual){this.trackCliCommand({command:"page-integrity",value:actual})}trackCliCommandFeedback(actual){this.trackCliCommand({command:"feedback",value:actual})}trackCliCommandPricing(actual){this.trackCliCommand({command:"pricing",value:actual})}trackCliCommandProject(actual){this.trackCliCommand({command:"project",value:actual})}trackCliCommandPromote(actual){this.trackCliCommand({command:"promote",value:actual})}trackCliCommandPull(actual){this.trackCliCommand({command:"pull",value:actual})}trackCliCommandRollback(actual){this.trackCliCommand({command:"rollback",value:actual})}trackCliCommandRollingRelease(actual){this.trackCliCommand({command:"rolling-release",value:actual})}trackCliCommandRedeploy(actual){this.trackCliCommand({command:"redeploy",value:actual})}trackCliCommandRedirects(actual){this.trackCliCommand({command:"redirects",value:actual})}trackCliCommandRoutes(actual){this.trackCliCommand({command:"routes",value:actual})}trackCliCommandRemove(actual){this.trackCliCommand({command:"remove",value:actual})}trackCliCommandSignup(actual){this.trackCliCommand({command:"signup",value:actual})}trackCliCommandSkills(actual){this.trackCliCommand({command:"skills",value:actual})}trackCliCommandSetup(actual){this.trackCliCommand({command:"setup",value:actual})}trackCliCommandSandbox(actual){this.trackCliCommand({command:"sandbox",value:actual})}trackCliCommandSchedules(actual){this.trackCliCommand({command:"schedules",value:actual})}trackCliCommandSecurity(actual){this.trackCliCommand({command:"security",value:actual})}trackCliCommandStorage(actual){this.trackCliCommand({command:"storage",value:actual})}trackCliCommandEnvironments(actual){this.trackCliCommand({command:"environments",value:actual})}trackCliCommandTeams(actual){this.trackCliCommand({command:"teams",value:actual})}trackCliCommandOrganizations(actual){this.trackCliCommand({command:"organizations",value:actual})}trackCliCommandTokens(actual){this.trackCliCommand({command:"tokens",value:actual})}trackCliCommandTelemetry(actual){this.trackCliCommand({command:"telemetry",value:actual})}trackCliCommandTraces(actual){this.trackCliCommand({command:"traces",value:actual})}trackCliCommandWhoami(actual){this.trackCliCommand({command:"whoami",value:actual})}trackCliCommandUpgrade(actual){this.trackCliCommand({command:"upgrade",value:actual})}trackCliCommandVersion(actual){this.trackCliCommand({command:"version",value:actual})}trackCliCommandWebhooks(actual){this.trackCliCommand({command:"webhooks",value:actual})}trackCliCommandUsage(actual){this.trackCliCommand({command:"usage",value:actual})}trackCliCommandVcr(actual){this.trackCliCommand({command:"vcr",value:actual})}trackCPUs(){super.trackCPUs()}trackAgenticUse(agent){super.trackAgenticUse(agent)}trackArch(){super.trackArch()}trackPlatform(){super.trackPlatform()}trackLibc(libc){super.trackLibc(libc)}trackCliLaunch(){let launch=readLaunch();launch&&this.trackLaunch(launch)}trackCIVendorName(){this.trackCI(import_ci_info.default.id)}trackStdinIsTTY(isTTY){super.trackStdinIsTTY(isTTY)}trackVersion(version){super.trackVersion(version)}trackProjectId(projectId){super.trackProjectId(projectId)}trackInvocationId(invocationId){super.trackInvocationId(invocationId)}trackDeviceId(deviceId){super.trackDeviceId(deviceId)}trackVercelPluginActiveSession(){super.trackVercelPluginActiveSession()}trackVercelPluginVersion(version){super.trackVercelPluginVersion(version)}trackErrorStatus(status){super.trackErrorStatus(status)}trackErrorCode(code){super.trackErrorCode(code)}trackErrorSlug(slug){super.trackErrorSlug(slug)}trackErrorAction(action){super.trackErrorAction(action)}trackErrorServerMessage(serverMessage){super.trackErrorServerMessage(serverMessage)}trackCliOptionCwd(cwd){cwd&&this.trackCliOption({option:"cwd",value:this.redactedValue})}trackCliOptionLocalConfig(localConfig){localConfig&&this.trackCliOption({option:"local-config",value:this.redactedValue})}trackCliOptionGlobalConfig(globalConfig){globalConfig&&this.trackCliOption({option:"global-config",value:this.redactedValue})}trackCliOptionScope(scope){scope&&this.trackCliOption({option:"scope",value:this.redactedValue})}trackCliOptionToken(token){token&&this.trackCliOption({option:"token",value:this.redactedValue})}trackCliOptionTeam(team){team&&this.trackCliOption({option:"team",value:this.redactedValue})}trackCliOptionApi(api){api&&this.trackCliOption({option:"api",value:this.redactedValue})}trackCliFlagDebug(debug){debug&&this.trackCliFlag("debug")}trackCliFlagNoColor(noColor){noColor&&this.trackCliFlag("no-color")}trackCliDeprecatedShorthands(shorthands){for(let shorthand of shorthands)this.trackDeprecatedShorthand(shorthand)}};function printCommandHelp(client,commandName,tokens){let found=findBuiltInCommand(commandName,tokens);if(!found)return;let{root}=found,target=resolveHelpTarget(root,found.tokens);return target.unknownSegment!==void 0?(printUnknownCommand(client,target.unknownSegment,[root.name,...target.typedPath]),2):target.command.dynamicHelp?void 0:(new RootTelemetryClient({opts:{store:client.telemetryEventStore}}).trackCliFlagHelp([root.name,...target.typedPath].join(":")),client.stdout.write(help(target.command,{parent:target.parent,columns:client.stdout.columns??client.stderr.columns,stream:client.stdout})),0)}function printGroupHelp(client,commandName,tokens){let found=findBuiltInCommand(commandName,tokens);if(!found)return;let{root}=found,target=resolveHelpTarget(root,found.tokens),{command}=target;if(!(target.unknownSegment!==void 0||!command.subcommands?.length||command.arguments.length>0||command.runsWithoutSubcommand||command.subcommands.some(subcommand=>subcommand.default)||command.forwardsUnknownOptions&&found.tokens.some(token=>token.startsWith("-")))){try{parseArguments([...found.tokens],getFlagsSpecification(getCommandsAlongPath(root,target.typedPath).flatMap(({options})=>options)))}catch(err){return printError(err,client),2}return client.stdout.write(help(command,{parent:target.parent,columns:client.stdout.columns??client.stderr.columns,stream:client.stdout})),0}}function getCommandPathOptions(commandName,tokens){let found=findBuiltInCommand(commandName,tokens);if(!found)return;let{typedPath}=resolveHelpTarget(found.root,found.tokens);return getCommandsAlongPath(found.root,typedPath).flatMap(({options})=>options)}function asksForVersion(commandName,argv){let flags;try{({flags}=parseArguments(argv.slice(2),{"--version":Boolean,"-v":Boolean},{permissive:!0}))}catch{return!1}let typedLong=flags["--version"]===!0,typedShort=flags["-v"]===!0;if(!typedLong&&!typedShort)return!1;let found=findBuiltInCommand(commandName,tokensAfterCommand(argv));if(!found)return!1;let{command,typedPath}=resolveHelpTarget(found.root,found.tokens),defaultSubcommand=command.subcommands?.find(subcommand=>subcommand.default);if(command.forwardsUnknownOptions||defaultSubcommand?.forwardsUnknownOptions)return!1;let options=getCommandsAlongPath(found.root,typedPath).flatMap(({options:options2})=>options2);defaultSubcommand&&options.push(...defaultSubcommand.options);let definesLong=options.some(option=>option.name==="version"),definesShort=definesLong||options.some(option=>option.shorthand==="v"||option.deprecatedShorthand==="v");return typedLong&&!definesLong||typedShort&&!definesShort}function deployAcceptsOptions(argv){let deploy=findBuiltInCommand("deploy",[]);if(!deploy)return!1;try{return parseArguments(argv.slice(2),getFlagsSpecification(deploy.root.options),{warnDeprecated:!1}),!0}catch{return!1}}function getCommandsAlongPath(root,typedPath){let path=[root];for(let token of typedPath){let subcommand=path[path.length-1].subcommands?.find(candidate=>candidate.name===token||candidate.aliases.includes(token));if(!subcommand)break;path.push(subcommand)}return path}var EXTERNAL_CLIS=new Set(["sandbox"]);function findBuiltInCommand(commandName,tokens){let name=commandName?commands.get(commandName):void 0;if(!commandName||!name||EXTERNAL_CLIS.has(name))return;let findRoot=rootName=>commandsStructs.find(command=>command.name===rootName&&"options"in command),root=findRoot(name);if(!root)return;let monitors=root.name==="alerts"?findRoot("monitors"):void 0;if(monitors){let alias=takeAlertsRulesAlias(root,tokens);if(alias)return{root:monitors,tokens:alias}}let namesSubcommand=commandName!==root.name&&root.subcommands?.some(subcommand=>subcommand.name===commandName||subcommand.aliases.includes(commandName));return{root,tokens:namesSubcommand?[commandName,...tokens]:tokens}}function takeAlertsRulesAlias(alerts,tokens){try{let{command,args}=takeCommand([...tokens],getFlagsSpecification(alerts.options));return command==="rules"?args:void 0}catch{return}}function printUnknownCommand(client,segment,groupPath=[]){let group=groupPath.join(" "),message=`Unknown command ${segment} for ${getCommandNamePlain(group||void 0)}.`,helpCommand2=group?`${group} --help`:"--help";if(shouldEmitNonInteractiveCommandError(client)){writeAgentError(client,{status:AGENT_STATUS.ERROR,reason:"unknown_command",message,next:[{command:getCommandNamePlain(helpCommand2),when:"See all commands"}]});return}output_manager_default.fatal(message),output_manager_default.print(`
|
|
8
|
+
See all commands:
|
|
9
|
+
${helpCommand(getCommandNamePlain(helpCommand2),[],createHelpTheme(client.stderr))}
|
|
10
|
+
`)}function tokensAfterCommand(argv){let args=argv.slice(2);for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--")return[];if(arg.startsWith("-")){!arg.includes("=")&&globalCliFlagTakesValue(arg)&&i++;continue}return args.slice(i+1)}return[]}export{RootTelemetryClient,printCommandHelp,printGroupHelp,getCommandPathOptions,asksForVersion,deployAcceptsOptions,printUnknownCommand,tokensAfterCommand};
|
|
@@ -4,4 +4,4 @@ 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{printProjectNotFoundError}from"./chunk-
|
|
7
|
+
import{printProjectNotFoundError}from"./chunk-S535FZTA.js";import{detectExplicitScope}from"./chunk-DNLE3KPC.js";import{omitGlobalFlagsFromArgs}from"./chunk-AUIV7YJO.js";import{getLinkedProject}from"./chunk-6NUH6ZPE.js";function getInvokingCommandFromArgv(argv){let args=omitGlobalFlagsFromArgs(argv.slice(2)),positionals=[];for(let arg of args){if(arg.startsWith("-"))break;positionals.push(arg)}return positionals.join(" ")}async function resolveProjectContext({client,cwd=client.cwd,projectNameOrId,commandName="",projectNotFoundHandling="report",skipOwnerLookup,quiet}){let context=await getLinkedProject(client,{cwd,projectName:projectNameOrId,projectNameIsExplicit:!!projectNameOrId,scopeIsExplicit:detectExplicitScope(client),skipOwnerLookup,quiet});return context.status==="not_linked"&&projectNameOrId&&projectNotFoundHandling==="report"?(await printProjectNotFoundError(client,projectNameOrId,commandName||getInvokingCommandFromArgv(client.argv),context.orgId),{status:"error",exitCode:1,orgId:context.orgId}):context}export{resolveProjectContext};
|
|
@@ -4,5 +4,5 @@ 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{external_exports}from"./chunk-2AMO2VMV.js";import{recordLine}from"./chunk-
|
|
7
|
+
import{external_exports}from"./chunk-2AMO2VMV.js";import{recordLine}from"./chunk-E7WULWMX.js";import{isAPIError}from"./chunk-T2FCF46I.js";import{require_strip_ansi}from"./chunk-BULSRTQE.js";import{__toESM}from"./chunk-BZENIQ7N.js";var MAX_PAGE_SIZE=1e3,QUERY_REASON_HEADER="x-vercel-observability-query-reason",responseSchema=external_exports.object({events:external_exports.array(external_exports.record(external_exports.string(),external_exports.unknown())),pagination:external_exports.object({hasMore:external_exports.boolean(),nextCursor:external_exports.string().nullable()}),meta:external_exports.object({excludedIntervals:external_exports.array(external_exports.object({start:external_exports.string(),end:external_exports.string()})).optional()}).passthrough().optional()}),InvalidEventsResponseError=class extends Error{constructor(){super("The Observability API returned an invalid events response."),this.name="InvalidEventsResponseError"}},RecordTooLargeError=class extends Error{constructor(){super("A single record exceeds the API response size limit and cannot be returned."),this.name="RecordTooLargeError"}};function isResultTooLarge(err){return isAPIError(err)&&err.status===413&&err.code==="result_too_large"}async function fetchEventsPage(client,request,limit,cursor){let body={event:request.event,scope:{ownerId:request.ownerId,...request.projectIds?{projectIds:[...request.projectIds]}:{}},timeRange:{start:request.timeRange.start,end:request.timeRange.end},select:[...request.select],order:"desc",limit};request.filter&&(body.filter=request.filter),cursor&&(body.cursor=cursor);let params=new URLSearchParams({teamId:request.ownerId}),response=await client.fetch(`/v1/observability/events?${params}`,{method:"POST",headers:{[QUERY_REASON_HEADER]:request.queryReason},body,useCurrentTeam:!1,...request.bailOn429?{bailOn429:!0}:{},...request.gatewayTimeoutRetries!==void 0?{gatewayTimeoutRetries:request.gatewayTimeoutRetries}:{}}),parsed=responseSchema.safeParse(response);if(!parsed.success)throw new InvalidEventsResponseError;return parsed.data}async function*fetchEventPages(client,request,limit,startCursor){let remaining=limit,maxPageSize=MAX_PAGE_SIZE,cursor=startCursor,lastNextCursor=null;for(;remaining>0;){let pageSize=Math.min(remaining,maxPageSize),response;for(;;)try{response=await fetchEventsPage(client,request,pageSize,cursor);break}catch(err){if(!isResultTooLarge(err))throw err;if(pageSize===1)throw new RecordTooLargeError;pageSize=Math.max(1,Math.floor(pageSize/2)),maxPageSize=pageSize}let events=response.events.slice(0,remaining);remaining-=events.length;let{hasMore,nextCursor}=response.pagination,continues=hasMore&&!!nextCursor&&nextCursor!==cursor;if(lastNextCursor=continues?nextCursor:null,yield{events,excludedIntervals:response.meta?.excludedIntervals??[],nextCursor:lastNextCursor},!continues)return{hasMore,nextCursor:null};cursor=nextCursor??void 0}return{hasMore:!0,nextCursor:lastNextCursor}}function sortIntervals(intervals){return[...intervals].sort((a,b)=>Date.parse(a.start)-Date.parse(b.start)||Date.parse(a.end)-Date.parse(b.end))}var import_strip_ansi=__toESM(require_strip_ansi(),1);function recordLine2(type,event){return recordLine(type,event)}function warningLine(warning){let line={type:"warning",reason:warning.reason,message:(0,import_strip_ansi.default)(warning.message),...warning.data?{data:warning.data}:{}};return`${JSON.stringify(line)}
|
|
8
8
|
`}function serializeTimeRange(range){return{start:range.start.toISOString(),end:range.end.toISOString()}}var CONTINUATION_VERSION=1,continuationSchema=external_exports.object({v:external_exports.literal(CONTINUATION_VERSION),event:external_exports.string().min(1),ownerId:external_exports.string().min(1),projectIds:external_exports.array(external_exports.string().min(1)).optional(),timeRange:external_exports.object({start:external_exports.string().min(1),end:external_exports.string().min(1)}),filter:external_exports.string().optional(),order:external_exports.enum(["asc","desc"]),cursor:external_exports.string().min(1)});function encodeContinuation(continuation){let payload={v:CONTINUATION_VERSION,event:continuation.event,ownerId:continuation.ownerId,...continuation.projectIds?{projectIds:[...continuation.projectIds]}:{},timeRange:{start:continuation.timeRange.start,end:continuation.timeRange.end},...continuation.filter!==void 0?{filter:continuation.filter}:{},order:continuation.order,cursor:continuation.cursor};return Buffer.from(JSON.stringify(payload),"utf8").toString("base64url")}function decodeContinuation(token){if(!/^[A-Za-z0-9_-]+$/.test(token))return;let raw;try{raw=JSON.parse(Buffer.from(token,"base64url").toString("utf8"))}catch{return}let parsed=continuationSchema.safeParse(raw);if(!parsed.success)return;let{v:_version,...continuation}=parsed.data;return continuation}export{InvalidEventsResponseError,RecordTooLargeError,fetchEventPages,sortIntervals,recordLine2 as recordLine,warningLine,serializeTimeRange,encodeContinuation,decodeContinuation};
|
|
@@ -4,6 +4,6 @@ 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{getExitCodeForErrorCode}from"./chunk-
|
|
7
|
+
import{getExitCodeForErrorCode}from"./chunk-5RSSGN2Q.js";import{buildCommandWithGlobalFlags,outputAgentError}from"./chunk-AUIV7YJO.js";import{isJSONObject}from"./chunk-6NUH6ZPE.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{AGENT_REASON,getExitCodeForReason}from"./chunk-JBU72NEQ.js";import{readFileSync}from"fs";import{resolve}from"path";var MONITORS_API={basePath:"/alerts/v3/monitors",itemKey:"monitor",listKey:"monitors",typesKey:"monitorTypes",idKey:"monitorId"},ALERT_RULES_API={basePath:"/alerts/v3/alert-rules",itemKey:"rule",listKey:"rules",typesKey:"ruleTypes",idKey:"ruleId"};function rulesCollectionPath(api,teamId,options={}){let query=new URLSearchParams({teamId});return options.limit!==void 0&&query.set("limit",String(options.limit)),options.cursor&&query.set("cursor",options.cursor),options.projectId&&query.set("projectId",options.projectId),options.type&&query.set("type",options.type),`${api.basePath}?${query.toString()}`}function rulesItemPath(api,teamId,ruleId){let query=new URLSearchParams({teamId});return`${api.basePath}/${encodeURIComponent(ruleId)}?${query.toString()}`}function ruleNotificationsPath(api,teamId,ruleId){let query=new URLSearchParams({teamId});return`${api.basePath}/${encodeURIComponent(ruleId)}/notifications?${query.toString()}`}function rulesNotificationsPath(api,teamId,options={}){let query=new URLSearchParams({teamId});return options.limit!==void 0&&query.set("limit",String(options.limit)),options.cursor&&query.set("cursor",options.cursor),`${api.basePath}/notifications?${query.toString()}`}function rulesNotificationLinksPath(api,teamId,ruleId){let query=new URLSearchParams({teamId});return`${api.basePath}/${encodeURIComponent(ruleId)}/notifications/links?${query.toString()}`}function rulesSchemaPath(api,teamId,type){let query=new URLSearchParams({teamId});return type&&query.set("type",type),`${api.basePath}/schema?${query.toString()}`}async function fetchRule(client,api,scope,ruleId){return(await client.fetch(rulesItemPath(api,scope.teamId,ruleId)))[api.itemKey]}function getIssues(error){return Array.isArray(error.issues)?error.issues.filter(issue=>isJSONObject(issue)&&typeof issue.path=="string"&&typeof issue.message=="string"):[]}function outputRulesError(client,jsonOutput,code,message,options={}){let issues=options.issues??[],issueSummary=issues.slice(0,5).map(issue=>`${issue.path||"body"}: ${issue.message}`).join("; "),exitCode=options.reason!==void 0?getExitCodeForReason(options.reason):getExitCodeForErrorCode(code);return outputAgentError(client,{status:"error",reason:options.reason??AGENT_REASON.INVALID_ARGUMENTS,message,hint:options.hint??(issueSummary||void 0)},exitCode),jsonOutput?client.stdout.write(`${JSON.stringify({error:{code,message,...issues.length?{issues}:{}}},null,2)}
|
|
8
8
|
`):output_manager_default.fatal([message,...issues.map(issue=>` ${issue.path}: ${issue.message}`)].join(`
|
|
9
9
|
`)),exitCode}function handleRulesApiError(client,err,jsonOutput){let message=err.status===401?"You do not have access to monitors in this team. Ensure your role can manage Alert Rules, or pass --token and --scope.":err.status===403?err.serverMessage||"You do not have permission to manage monitors in this team.":err.status>=500?`The monitors endpoint failed (${err.status}). Re-run with --debug and share the x-vercel-id from the failed request.`:err.serverMessage||`API error (${err.status}).`;return outputRulesError(client,jsonOutput,err.code||"API_ERROR",message,{reason:err.status===401?"not_authorized":err.status===403?"forbidden":err.status===404?AGENT_REASON.NOT_FOUND:err.status===429?"rate_limited":AGENT_REASON.API_ERROR,issues:getIssues(err),hint:err.status===401||err.status===403?"Confirm the team with `vercel whoami`; use --scope <team-slug> if the monitor belongs to another team.":void 0})}var LEGACY_BODY_FIELDS=["alertTypes","customAlert","queryJsonString"];function readRuleBody(client,bodyPath,jsonOutput){let raw;try{raw=readFileSync(resolve(client.cwd,bodyPath),"utf8")}catch{return outputRulesError(client,jsonOutput,"INVALID_ARGUMENTS",`Could not read --body file: ${bodyPath}`)}let parsed;try{parsed=JSON.parse(raw)}catch{return outputRulesError(client,jsonOutput,"INVALID_ARGUMENTS","Invalid JSON in --body file.")}return isJSONObject(parsed)?LEGACY_BODY_FIELDS.some(field=>Object.hasOwn(parsed,field))?outputRulesError(client,jsonOutput,"LEGACY_ALERT_RULE_BODY","This body uses the previous alert-rules shape. Rewrite it using the current schema.",{hint:"Run `vercel monitors schema --type built-in` for examples."}):parsed:outputRulesError(client,jsonOutput,"INVALID_ARGUMENTS","The --body file must contain a JSON object.")}function getBodyType(body){return body.type==="built-in"||body.type==="custom"?body.type:void 0}function emitRulesArgParseError(client,err,recoverWithProjectFlag){let message=err instanceof Error?err.message:String(err),projectFlagMissingArg=message.includes("--project")&&message.includes("requires argument");outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:projectFlagMissingArg?"`--project` requires a project name or id (for example `--project my-app`).":message,next:[{command:buildCommandWithGlobalFlags(client.argv,projectFlagMissingArg?recoverWithProjectFlag:"monitors --help"),when:projectFlagMissingArg?"Retry with a project name or id":"See valid `monitors` subcommands"}]},2)}export{MONITORS_API,ALERT_RULES_API,rulesCollectionPath,rulesItemPath,ruleNotificationsPath,rulesNotificationsPath,rulesNotificationLinksPath,rulesSchemaPath,fetchRule,outputRulesError,handleRulesApiError,readRuleBody,getBodyType,emitRulesArgParseError};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import{require_cjs}from"./chunk-N5AN4JZL.js";import{CONTACT_FIELDS,billingFieldsUsed,collectContactInformation,getBillingContact,getDomainPrice,getDomainStatus,mergeContact,missingContactFields,purchaseDomain,readContactFlags}from"./chunk-NZRBJB6T.js";import{amountMatchesPrice,canPromptForCharge,chargeFailureReason,chargeFlagWithValue,formatAmountArg,formatTerm,formatUsd,parseAmount,printChargeRecovery,refuseUnnamedTeam,reportChargeFailure,reportPriceChanged,reportUnknownOutcome,reportUsageError,writeChargeAction}from"./chunk-ZCUUCYID.js";import{stamp_default}from"./chunk-A2RZZQEP.js";import{buySubcommand}from"./chunk-ZIC7VWFC.js";import{printError}from"./chunk-PKZK23PR.js";import{param}from"./chunk-3G3FQYMW.js";import{getScope}from"./chunk-DNLE3KPC.js";import{TelemetryClient}from"./chunk-MBXLL2HF.js";import{buildCommandWithGlobalFlags,outputAgentError}from"./chunk-AUIV7YJO.js";import{parseArguments}from"./chunk-US7YJ2RQ.js";import{validateJsonOutput}from"./chunk-SDYCW5JM.js";import{DomainChargeOutcomeUnknown,DomainPriceChanged,isAPIError}from"./chunk-T2FCF46I.js";import{getCommandName,getCommandNamePlain}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{require_dist}from"./chunk-RM3ZDRYE.js";import{getFlagsSpecification,getGlobalFlagsFromArgs,quoteArg}from"./chunk-AMPJ6RWT.js";import{require_source}from"./chunk-NB2WLB3J.js";import{require_strip_ansi}from"./chunk-BULSRTQE.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS}from"./chunk-JBU72NEQ.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1),import_strip_ansi=__toESM(require_strip_ansi(),1),import_tldts=__toESM(require_cjs(),1),import_error_utils=__toESM(require_dist(),1);var DomainsBuyTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(v){v&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliOptionAmount(v){this.trackRedactedCliOption("amount",v)}trackCliFlagUseBillingDetails(v){v&&this.trackCliFlag("use-billing-details")}trackCliOptionFirstName(v){this.trackRedactedCliOption("first-name",v)}trackCliOptionLastName(v){this.trackRedactedCliOption("last-name",v)}trackCliOptionEmail(v){this.trackRedactedCliOption("email",v)}trackCliOptionPhone(v){this.trackRedactedCliOption("phone",v)}trackCliOptionAddress(v){this.trackRedactedCliOption("address",v)}trackCliOptionCity(v){this.trackRedactedCliOption("city",v)}trackCliOptionState(v){this.trackRedactedCliOption("state",v)}trackCliOptionZip(v){this.trackRedactedCliOption("zip",v)}trackCliOptionCountry(v){this.trackRedactedCliOption("country",v)}trackCliOptionCompany(v){this.trackRedactedCliOption("company",v)}trackCliFlagAutoRenew(v){v&&this.trackCliFlag("auto-renew")}trackCliFlagNoAutoRenew(v){v&&this.trackCliFlag("no-auto-renew")}trackCliFlagJson(v){v&&this.trackCliFlag("json")}};function buildBuyCommand(client,domain,opts){let parts=[`domains buy ${domain}`];opts.team&&parts.push(`--scope ${opts.team}`),opts.amount!==void 0&&parts.push(`--amount ${formatAmountArg(opts.amount)}`),opts.useBilling&&parts.push("--use-billing-details");for(let{field,flag}of CONTACT_FIELDS){let value=opts.contact[field];value!==void 0?parts.push(`${flag} ${quoteArg(value)}`):opts.missing.includes(field)&&parts.push(`${flag} <${flag.slice(2)}>`)}return opts.autoRenew===!0&&parts.push("--auto-renew"),opts.autoRenew===!1&&parts.push("--no-auto-renew"),opts.json&&parts.push("--json"),buildCommandWithGlobalFlags(client.argv,parts.join(" "))}function flagFor(field){return CONTACT_FIELDS.find(f=>f.field===field).flag}function usageError(client,message){return reportUsageError(client,AGENT_REASON.INVALID_ARGUMENTS,message)}async function buy(client,argv){let telemetry=new DomainsBuyTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(buySubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags}=parsedArgs,[domainName]=args;if(telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionAmount(flags["--amount"]),telemetry.trackCliFlagUseBillingDetails(flags["--use-billing-details"]),telemetry.trackCliOptionFirstName(flags["--first-name"]),telemetry.trackCliOptionLastName(flags["--last-name"]),telemetry.trackCliOptionEmail(flags["--email"]),telemetry.trackCliOptionPhone(flags["--phone"]),telemetry.trackCliOptionAddress(flags["--address"]),telemetry.trackCliOptionCity(flags["--city"]),telemetry.trackCliOptionState(flags["--state"]),telemetry.trackCliOptionZip(flags["--zip"]),telemetry.trackCliOptionCountry(flags["--country"]),telemetry.trackCliOptionCompany(flags["--company"]),telemetry.trackCliFlagAutoRenew(flags["--auto-renew"]),telemetry.trackCliFlagNoAutoRenew(flags["--no-auto-renew"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),!domainName){if(client.nonInteractive){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd=getCommandNamePlain(`domains buy <domain> ${globalFlags.join(" ")}`.trim());outputAgentError(client,{status:"error",reason:"missing_arguments",message:`Missing domain name. Run: ${cmd}`,next:[{command:cmd,when:"Replace <domain> with the domain to buy"}]},2)}return output_manager_default.error(`Missing domain name. Run ${getCommandName("domains --help")}`),2}if(args.length>1){let extra=args[1].toLowerCase();return usageError(client,extra==="true"||extra==="false"?"Unexpected extra argument. On/off options like --auto-renew don't take a value: pass --auto-renew or --no-auto-renew.":'Unexpected extra argument. domains buy takes one domain; quote option values that contain spaces, like --address "1 Main St".')}let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return usageError(client,formatResult.error);let asJson=formatResult.jsonOutput,{domain:rootDomain,subdomain}=(0,import_tldts.parse)(domainName);if(subdomain||!rootDomain)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_domain",message:`Invalid domain name '${domainName}'. Use a registrable root domain (no subdomain).`},1),output_manager_default.error(`Invalid domain name "${domainName}". Run ${getCommandName("domains --help")}`),1;let amount=parseAmount(flags["--amount"]);if(amount instanceof Error)return usageError(client,amount.message);let fromFlags=readContactFlags(flags);if(typeof fromFlags=="string")return usageError(client,fromFlags);let valuedFlag=chargeFlagWithValue(argv,["--auto-renew","--no-auto-renew","--use-billing-details"]);if(valuedFlag)return usageError(client,valuedFlag);let useBilling=!!flags["--use-billing-details"];if(flags["--auto-renew"]&&flags["--no-auto-renew"])return usageError(client,"Can't use --auto-renew with --no-auto-renew.");let autoRenewChoice=flags["--auto-renew"]?!0:flags["--no-auto-renew"]?!1:void 0,{contextName,team}=await getScope(client),availableStamp=stamp_default(),[domainPrice,domainStatus]=await Promise.all([getDomainPrice(client,domainName),getDomainStatus(client,domainName)]);if(domainPrice instanceof Error)return reportChargeFailure(client,asJson,{reason:chargeFailureReason(domainPrice),message:domainPrice.message});if(!domainStatus.available)return reportChargeFailure(client,asJson,{reason:AGENT_REASON.DOMAIN_NOT_AVAILABLE,message:`The domain ${domainName} is unavailable.`});let{years,purchasePrice,renewalPrice}=domainPrice;if(purchasePrice===null||renewalPrice===null)return reportChargeFailure(client,asJson,{reason:AGENT_REASON.API_ERROR,message:`The price of ${domainName} was not found.`});output_manager_default.log(`The domain ${param(domainName)} is ${import_chalk.default.underline("available")} to buy under ${import_chalk.default.bold(contextName)}! ${availableStamp()}`);let billing=getBillingContact(team),contact=mergeContact(fromFlags,useBilling?billing:{}),commandOptions={team:team?.slug,useBilling,contact:fromFlags,autoRenew:autoRenewChoice,json:asJson};if(amount!==void 0&&!amountMatchesPrice(amount,purchasePrice))return reportPriceChanged(client,{verb:"buy",domain:domainName,amount,price:purchasePrice,nextCommand:buildBuyCommand(client,domainName,{...commandOptions,amount:purchasePrice,missing:missingContactFields(contact)}),json:asJson});let autoRenew,contactInformation;if(canPromptForCharge(client,asJson)){if(amount===void 0&&!await client.input.confirm(`Buy now for ${import_chalk.default.bold(formatUsd(purchasePrice))} (${formatTerm(years)})?`,!1))return 0;autoRenew=autoRenewChoice??await client.input.confirm(years===1?`Auto renew yearly for ${import_chalk.default.bold(formatUsd(renewalPrice))}?`:`Auto renew every ${years} years for ${import_chalk.default.bold(formatUsd(renewalPrice))}?`,!0),contactInformation=await collectContactInformation(client,{provided:contact,defaults:mergeContact(fromFlags,billing)})}else{let missing=missingContactFields(contact);if(amount===void 0||missing.length>0||autoRenewChoice===void 0)return requireApproval(client,{domain:domainName,team:team?.slug,contextName,price:purchasePrice,renewalPrice,years,amount,fromFlags,billing,useBilling,autoRenew:autoRenewChoice,json:asJson});if(team){let refused=refuseUnnamedTeam(client,asJson,{verb:"buy",domain:domainName,team,nextCommand:buildBuyCommand(client,domainName,{...commandOptions,amount,missing:[]})});if(refused!==void 0)return refused}autoRenew=autoRenewChoice,contactInformation={...contact,companyName:contact.companyName||void 0}}let inspectCommand=buildCommandWithGlobalFlags(client.argv,`domains inspect ${domainName}`),buyResult,purchaseStamp=stamp_default();output_manager_default.spinner("Purchasing");try{buyResult=await purchaseDomain(client,domainName,purchasePrice,years,autoRenew,contactInformation)}catch(err){output_manager_default.stopSpinner(),output_manager_default.debug(`Server response: ${(0,import_error_utils.errorToString)(err)}`);let apiError=isAPIError(err)?err:void 0;return reportChargeFailure(client,asJson,{reason:AGENT_REASON.API_ERROR,message:apiError?`Couldn't buy ${domainName}. The API returned an error (${apiError.code}). Nothing was charged.`:`Couldn't buy ${domainName}. The order wasn't sent, so nothing was charged.`},{apiMessage:apiError?.serverMessage})}return output_manager_default.stopSpinner(),buyResult instanceof DomainPriceChanged?reportPriceChanged(client,{verb:"buy",domain:domainName,amount:purchasePrice,nextCommand:buildBuyCommand(client,domainName,{...commandOptions,missing:[]}),json:asJson}):buyResult instanceof DomainChargeOutcomeUnknown?reportUnknownOutcome(client,asJson,{verb:"buy",domain:domainName,inspectCommand}):buyResult instanceof Error?reportChargeFailure(client,asJson,{reason:chargeFailureReason(buyResult),message:buyResult.message}):asJson?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,domain:domainName,years,charge:{amount:purchasePrice,currency:"USD"},orderId:buyResult.orderId,autoRenew,renewalPrice,message:`Domain ${domainName} purchased.`},null,2)}
|
|
8
|
+
`),0):(client.stdout.write(`${domainName}
|
|
9
|
+
`),output_manager_default.success(`Domain ${param(domainName)} purchased ${purchaseStamp()}`),output_manager_default.log(`Charged ${formatUsd(purchasePrice)} for ${formatTerm(years)}. Registered to ${contactInformation.firstName} ${contactInformation.lastName} (${contactInformation.email}).`),output_manager_default.note(`You may now use your domain as an alias to your deployments. Run ${getCommandName("alias --help")}`),0)}function requireApproval(client,opts){let{domain,price,renewalPrice,years,billing,autoRenew}=opts,shown=billingFieldsUsed(opts.fromFlags,billing),shownFields=CONTACT_FIELDS.filter(({field})=>shown[field]),hasBilling=shownFields.length>0,useBilling=opts.useBilling||hasBilling,missing=missingContactFields(mergeContact(opts.fromFlags,useBilling?billing:{})),missingFlags=missing.map(flagFor),missingNow=missingContactFields(mergeContact(opts.fromFlags,opts.useBilling?billing:{})),needs=[...opts.amount===void 0?["an approved price (--amount)"]:[],...autoRenew===void 0?["an auto-renew choice (--auto-renew or --no-auto-renew)"]:[],...missingNow.length>0?["registrant details"]:[]],headline=`Can't buy ${domain} without ${needs.join(" and ")} in non-interactive mode.`,every=years===1?"year":formatTerm(years),renewal=autoRenew===void 0?`Auto-renew isn't chosen: --auto-renew renews it every ${every} (currently ${formatUsd(renewalPrice)}), --no-auto-renew lets it expire.`:autoRenew?`Then it auto-renews every ${every} (currently ${formatUsd(renewalPrice)}).`:"Auto-renew is off.",priceLine=`Price: ${formatUsd(price)} for ${formatTerm(years)}, charged to ${opts.contextName}. ${renewal}`,stillNeeded=missingFlags.length>0?`Still needed: ${missingFlags.join(", ")}.`:"",next=(autoRenew===void 0?[!0,!1]:[autoRenew]).map(renews=>({command:buildBuyCommand(client,domain,{team:opts.team,amount:price,useBilling,contact:opts.fromFlags,missing,autoRenew:renews,json:opts.json}),when:`Only after a human approves: charges ${formatUsd(price)} now${renews?` and renews every ${every} (currently ${formatUsd(renewalPrice)})`:", with no renewal"}`}));writeChargeAction(client,opts.json,{status:AGENT_STATUS.ACTION_REQUIRED,reason:opts.amount===void 0||autoRenew===void 0?AGENT_REASON.CONFIRMATION_REQUIRED:AGENT_REASON.MISSING_REQUIREMENTS,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:[headline,priceLine,hasBilling?`The team's billing info has the registrant ${shownFields.map(({label})=>label.toLowerCase()).join(", ")} (data.billingDetails). Confirm them with the user; --use-billing-details uses them, and any contact option you pass replaces them.`:"",stillNeeded].filter(Boolean).join(" "),userActionRequired:!0,hint:"Show the user the price, renewal terms, and registrant details, and get their approval before running next[]. Domain registrations are non-refundable.",data:{domain,...opts.team&&{team:opts.team},amount:price,currency:"USD",years,autoRenew:autoRenew??null,renewalAmount:renewalPrice,...hasBilling&&{billingDetails:shown}},missing:[...opts.amount===void 0?["--amount"]:[],...autoRenew===void 0?["--auto-renew|--no-auto-renew"]:[],...useBilling&&!opts.useBilling?["--use-billing-details"]:[],...missingFlags],next});let billingRows=hasBilling?[`From ${opts.contextName}'s billing info:`,...shownFields.map(({field,label})=>` ${label.padEnd(10)}${(0,import_strip_ansi.default)(shown[field])}`)]:[];return printChargeRecovery([headline,priceLine,...billingRows,stillNeeded].filter(Boolean).join(`
|
|
10
|
+
`),next.length>1?"Once a person approves the price, details, and auto-renew choice, run one of":"Once a person approves the price and details, run",next.map(({command})=>command).join(`
|
|
11
|
+
`)),1}async function removeAliasById(client,id){return client.fetch(`/now/aliases/${id}`,{method:"DELETE"})}function isDomainExternal(domain){return domain.serviceType!=="zeit.world"}function getProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}`,options)}function getProjectDomainByName(client,domainName,options={}){return fetchProjectDomain(client,`/project-domains/${encodeURIComponent(domainName)}`,options)}function verifyProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}/verify`,{...options,method:"POST"})}async function fetchProjectDomain(client,url,init){try{return await client.fetch(url,init)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}async function deleteCertById(client,id){return client.fetch(`/v5/certs/${id}`,{method:"DELETE"})}async function getDomains(client,next,limit=20){let domainUrl=`/v5/domains?limit=${limit}`;return next&&(domainUrl+=`&until=${next}`),await client.fetch(domainUrl)}function teamMemberLabel(member){return member.username||member.email||member.uid}function fetchMembers(client,teamId,opts){let query=new URLSearchParams({limit:"100"});opts.search&&query.set("search",opts.search);for(let id of opts.userIds??[])query.append("filterByUserIds",id);return client.fetch(`/v2/teams/${encodeURIComponent(teamId)}/members?${query}`).then(res=>res.members??[])}async function getTeamMemberByIdentifier(client,teamId,identifier){let needle=identifier.toLowerCase(),match=(await fetchMembers(client,teamId,{search:identifier})).find(member=>member.uid===identifier||member.email?.toLowerCase()===needle||member.username?.toLowerCase()===needle);return match||((await fetchMembers(client,teamId,{userIds:[identifier]})).find(member=>member.uid===identifier)??null)}async function getTeamMembersByIds(client,teamId,uids){let chunks=[];for(let i=0;i<uids.length;i+=20)chunks.push(uids.slice(i,i+20));let pages=await Promise.all(chunks.map(userIds=>fetchMembers(client,teamId,{userIds})));return new Map(pages.flat().map(member=>[member.uid,member]))}export{removeAliasById,isDomainExternal,getProjectDomain,getProjectDomainByName,verifyProjectDomain,buy,deleteCertById,getDomains,teamMemberLabel,getTeamMemberByIdentifier,getTeamMembersByIds};
|
|
@@ -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{packageName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-
|
|
7
|
+
import{packageName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{normalizeFlagName,stripSensitiveAuthArgs}from"./chunk-AMPJ6RWT.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);var DEFAULT_LIST_LIMIT=20,MAX_LIST_LIMIT=100;function parseListLimit(value,{defaultLimit=DEFAULT_LIST_LIMIT,maxLimit=MAX_LIST_LIMIT}={}){if(value===void 0)return defaultLimit;if(!Number.isInteger(value)||value<1||value>maxLimit)throw new Error(`The --limit option must be an integer from 1 to ${maxLimit}.`);return value}var PaginationError=class extends Error{constructor(message){super(message),this.name="PaginationError"}};async function fetchAllPages(fetchPage,{maxPages=1e3}={}){let items=[],seen=new Set,next;for(let pages=0;pages<maxPages;pages++){let page=await fetchPage(next);if(items.push(...page.items),!page.next)return items;if(seen.has(page.next))throw new PaginationError("Pagination returned a cursor it already returned. The list is incomplete.");seen.add(page.next),next=page.next}throw new PaginationError(`Stopped after ${maxPages} pages. The list is incomplete. Use --limit and --next to page through it manually.`)}var CURSOR_FLAGS=new Set(["--next","-N"]);function quoteShellArg(value){return/^[A-Za-z0-9_./@:,=+-]+$/.test(value)?value:`'${value.replace(/'/g,"'\\''")}'`}function getNextPageCommand(argv,next,dropFlags=[]){let args=stripSensitiveAuthArgs(argv.slice(2)),delimiter=args.indexOf("--"),own=delimiter===-1?args:args.slice(0,delimiter),passthrough=delimiter===-1?[]:args.slice(delimiter),kept=[];for(let i=0;i<own.length;i++){let arg=own[i],name=normalizeFlagName(arg);if(CURSOR_FLAGS.has(name)||dropFlags.includes(name)){!arg.includes("=")&&i+1<own.length&&i++;continue}if(/^-[A-Za-z]{2,}$/.test(arg)&&arg.includes("N")){kept.push(arg.replace(/N/g,"")),i+1<own.length&&i++;continue}kept.push(arg)}return kept.push(`--next=${next}`,...passthrough),`${packageName} ${kept.map(quoteShellArg).join(" ")}`}function printNextPageCommand(command,label="Next page"){output_manager_default.print(` ${label}:
|
|
8
8
|
${import_chalk.default.cyan(command)}
|
|
9
9
|
`)}function printNextPageHint(client,next,dropFlags=[]){next&&(output_manager_default.print(`
|
|
10
10
|
`),printNextPageCommand(getNextPageCommand(client.argv,next,dropFlags)))}export{DEFAULT_LIST_LIMIT,MAX_LIST_LIMIT,parseListLimit,PaginationError,fetchAllPages,quoteShellArg,getNextPageCommand,printNextPageCommand,printNextPageHint};
|
|
@@ -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{humanReadableColumnLabel}from"./chunk-GHAY4PSD.js";import{FETCH_TIMEOUT_MS,OpenApiCache,SSO_API_URL,assertAllowedSpecUrl,readSpecResponse}from"./chunk-SODZSOOL.js";import{table}from"./chunk-375JVQYK.js";import{apiCommand,listSubcommand}from"./chunk-S5JBQCBA.js";import{printError}from"./chunk-Q4GX2UTG.js";import{help}from"./chunk-GKALP6QD.js";import{TelemetryClient}from"./chunk-VPUYTI5E.js";import{parseArguments}from"./chunk-C4N4LKPM.js";import{validateJsonOutput}from"./chunk-GJCVOEC2.js";import{require_ms}from"./chunk-MXTC4ZAQ.js";import{packageName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-W634OFUG.js";import{getFlagsSpecification}from"./chunk-CKTLP5GX.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";import{createHash}from"crypto";var MAX_REDIRECTS=3;async function fetchSpecUrl(client,specUrl){let specOrigin=assertAllowedSpecUrl(specUrl).origin,probe=await fetchWithTimeout(specUrl,{readSpec:!0});if(probe.response.ok)return probe.spec??null;let nonce=getSetCookieValue(probe.response,"_vercel_sso_nonce");if(!nonce)throw output_manager_default.debug(`OpenAPI spec URL returned ${probe.response.status} without a Vercel SSO nonce`),new Error(formatHttpError(specUrl,probe.response));let token=client.authConfig.token;if(!token)return output_manager_default.debug("OpenAPI spec URL requires Vercel authentication"),null;let hashedNonce=createHash("sha256").update(nonce).digest("hex"),ssoUrl=`${SSO_API_URL}?url=${encodeURIComponent(specUrl)}&nonce=${hashedNonce}`,sso=await fetchWithTimeout(ssoUrl,{cookie:`authorization=${encodeURIComponent(`Bearer ${token}`)}; isLoggedIn=1`}),location=sso.response.headers.get("location");if(!location||!location.includes("_vercel_jwt="))throw output_manager_default.debug("OpenAPI spec URL: user has no access"),new Error(formatHttpError(specUrl,sso.response));let cookies=new Map([["_vercel_sso_nonce",nonce]]),url=location;for(let i=0;i<=MAX_REDIRECTS;i++){if(!isSameOriginUrl(url,specOrigin))return output_manager_default.debug("OpenAPI spec URL: cross-origin redirect rejected"),null;let{response,spec}=await fetchWithTimeout(url,{cookie:Array.from(cookies,([name,value])=>`${name}=${value}`).join("; "),readSpec:!0});if(response.ok)return spec??null;let next=response.headers.get("location");if(response.status>=300&&response.status<400&&next){let setJwt=getSetCookieValue(response,"_vercel_jwt");setJwt&&cookies.set("_vercel_jwt",setJwt);let nextUrl=new URL(next,url).href;if(!isSameOriginUrl(nextUrl,specOrigin))return output_manager_default.debug("OpenAPI spec URL: cross-origin redirect rejected"),null;url=nextUrl;continue}throw output_manager_default.debug(`OpenAPI spec URL: unexpected response ${response.status}`),new Error(formatHttpError(url,response))}return output_manager_default.debug("OpenAPI spec URL: too many redirects"),null}function createOpenApiCache(client,specUrl){return new OpenApiCache(specUrl?{specUrl,fetchSpecUrl:url=>fetchSpecUrl(client,url)}:void 0)}async function fetchWithTimeout(url,options){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),1e4);try{let response=await fetch(url,{redirect:"manual",signal:controller.signal,headers:options?.cookie?{cookie:options.cookie}:void 0}),spec=options?.readSpec&&response.ok?await readSpecResponse(response,formatDiagnosticUrl(url)):void 0;return{response,spec}}finally{clearTimeout(timeoutId)}}function isSameOriginUrl(url,origin){try{return new URL(url).origin===origin}catch{return!1}}function formatHttpError(url,response){let statusText=response.statusText?` ${response.statusText}`:"";return`Could not load OpenAPI spec from ${formatDiagnosticUrl(url)}: HTTP ${response.status}${statusText}.`}function formatDiagnosticUrl(url){try{let parsed=new URL(url);parsed.hash="";for(let key of parsed.searchParams.keys())parsed.searchParams.set(key,"[redacted]");return parsed.href}catch{return url}}function getSetCookieValue(response,name){let header=response.headers.get("set-cookie");if(!header)return null;let match=header.match(new RegExp(`${name}=([^;,\\s]+)`));return match?match[1]:null}function foldNamingStyle(input){return input.trim().replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/[-_\s]+/g," ").trim().toLowerCase().replace(/\s+/g,"")}function operationIdToKebabCase(operationId){let s=operationId.trim();return s?s.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1-$2").replace(/[-_\s]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase():"unnamed"}function inferCliSubcommandAliases(ep){let upper=ep.method.toUpperCase(),hasPathParams=ep.parameters.some(p=>p.in==="path");switch(upper){case"GET":return hasPathParams?["inspect","get"]:["ls","list"];case"POST":return["add","create"];case"DELETE":return["rm","remove"];case"PUT":case"PATCH":return["update"];default:return[]}}var import_ms=__toESM(require_ms(),1),import_chalk=__toESM(require_source(),1);function getByPath(obj,path){let parts=path.split(".").filter(Boolean),cur=obj;for(let p of parts){if(cur===null||typeof cur!="object")return;cur=cur[p]}return cur}var TIMESTAMP_FIELD_PATTERN=/(?:^|\.)(created|updated|deleted|expired|blocked|completed|started|finished|modified|verified|published|cancelled|revoked|invited|accepted|accessed|deployed)(?:At|_at|On|_on)?$/i,MIN_TIMESTAMP_MS=1e12,MAX_TIMESTAMP_MS=41024448e5;function isTimestampValue(value,columnPath){return typeof value!="number"||!Number.isFinite(value)||value<MIN_TIMESTAMP_MS||value>MAX_TIMESTAMP_MS?!1:TIMESTAMP_FIELD_PATTERN.test(columnPath)}function formatRelativeTime(timestamp){let diff=Date.now()-timestamp;return diff<0?"just now":import_chalk.default.gray((0,import_ms.default)(diff))}function stringifyCell(value,columnPath){return value==null?import_chalk.default.gray("--"):columnPath&&isTimestampValue(value,columnPath)?formatRelativeTime(value):typeof value=="object"?JSON.stringify(value):String(value)}function styleColumnKey(plainLabel){return import_chalk.default.gray(plainLabel)}function columnsForRow(r,display){return r.limited===!0&&display.columnsWhenLimited?.length?display.columnsWhenLimited:display.columnsDefault}function formatAsCard(r,display){let columns=columnsForRow(r,display);if(!columns.length)return null;let rows=columns.map(colPath=>[styleColumnKey(humanReadableColumnLabel(colPath)),stringifyCell(getByPath(r,colPath),colPath)]);return table(rows,{align:["l","l"],hsep:2})}function formatAsDataTable(items,display){if(items.length===0)return"(empty)";let first=items[0];if(first===null||typeof first!="object"||Array.isArray(first)){let headers2=[styleColumnKey(humanReadableColumnLabel("#")),styleColumnKey(humanReadableColumnLabel("value"))],rows=items.map((v,i)=>[String(i),stringifyCell(v,"value")]);return table([headers2,...rows])}let columns=columnsForRow(first,display);if(!columns.length)return null;let headers=columns.map(p=>styleColumnKey(humanReadableColumnLabel(p))),dataRows=items.map(item=>{let row=item!==null&&typeof item=="object"&&!Array.isArray(item)?item:{};return columns.map(colPath=>stringifyCell(getByPath(row,colPath),colPath))});return table([headers,...dataRows])}function resolveEndpointByTagAndOperationId(endpoints,tag,operationHint){let tagLower=tag.toLowerCase(),tagMatches=endpoints.filter(ep=>ep.tags.some(t=>t.toLowerCase()===tagLower));if(tagMatches.length===0)return{ok:!1,reason:"no_tag",tag,tagMatches:[],operationHint};let withOpId=tagMatches.filter(ep=>ep.operationId.length>0);if(withOpId.length===0)return{ok:!1,reason:"no_operation",tag,tagMatches,operationHint};let hint=operationHint.trim(),hintLower=hint.toLowerCase(),exact=withOpId.filter(ep=>ep.operationId===hint);if(exact.length===1)return{ok:!0,endpoint:exact[0]};if(exact.length>1)return{ok:!1,reason:"ambiguous_operation",tag,tagMatches:exact,operationHint:hint};let exactCi=withOpId.filter(ep=>ep.operationId.toLowerCase()===hintLower);return exactCi.length===1?{ok:!0,endpoint:exactCi[0]}:exactCi.length>1?{ok:!1,reason:"ambiguous_operation",tag,tagMatches:exactCi,operationHint:hint}:{ok:!1,reason:"no_operation",tag,tagMatches,operationHint:hint}}var import_chalk4=__toESM(require_source(),1);var ApiTelemetryClient=class extends TelemetryClient{trackCliArgumentEndpoint(endpoint){if(endpoint){let normalized=this.normalizeEndpoint(endpoint);this.trackCliArgument({arg:"endpoint",value:normalized})}}trackCliArgumentOperationId(operationId){operationId&&this.trackCliArgument({arg:"operationId",value:operationId})}trackCliOptionMethod(method){if(method){let validMethods=["GET","POST","PUT","DELETE","PATCH","HEAD"],upperMethod=method.toUpperCase(),value=validMethods.includes(upperMethod)?upperMethod:this.redactedValue;this.trackCliOption({option:"method",value})}}trackCliOptionField(fields){fields&&fields.length>0&&this.trackCliOption({option:"field",value:this.redactedArgumentsLength(fields)})}trackCliOptionRawField(fields){fields&&fields.length>0&&this.trackCliOption({option:"raw-field",value:this.redactedArgumentsLength(fields)})}trackCliOptionHeader(headers){headers&&headers.length>0&&this.trackCliOption({option:"header",value:this.redactedArgumentsLength(headers)})}trackCliOptionInput(input){if(input){let value=input==="-"?"stdin":"file";this.trackCliOption({option:"input",value})}}trackCliOptionSpecUrl(specUrl){specUrl&&this.trackCliOption({option:"spec-url",value:this.redactedValue})}trackCliFlagPaginate(value){value&&this.trackCliFlag("paginate")}trackCliFlagInclude(value){value&&this.trackCliFlag("include")}trackCliFlagSilent(value){value&&this.trackCliFlag("silent")}trackCliFlagVerbose(value){value&&this.trackCliFlag("verbose")}trackCliFlagRaw(value){value&&this.trackCliFlag("raw")}trackCliFlagRefresh(value){value&&this.trackCliFlag("refresh")}trackCliOptionGenerate(format){if(format){let value=["curl"].includes(format)?format:this.redactedValue;this.trackCliOption({option:"generate",value})}}trackCliFlagDangerouslySkipPermissions(value){value&&this.trackCliFlag("dangerously-skip-permissions")}trackCliSubcommandList(){this.trackCliSubcommand({subcommand:"list",value:"list"})}trackCliOptionFormat(format){if(format){let value=["table","json"].includes(format)?format:this.redactedValue;this.trackCliOption({option:"format",value})}}trackCliFlagJson(json){json&&this.trackCliFlag("json")}normalizeEndpoint(endpoint){return endpoint.replace(/\/dpl_[a-zA-Z0-9]+/g,"/:deploymentId").replace(/\/prj_[a-zA-Z0-9]+/g,"/:projectId").replace(/\/team_[a-zA-Z0-9]+/g,"/:teamId").replace(/\/[a-f0-9]{24}/g,"/:id").replace(/\/[a-f0-9-]{36}/g,"/:uuid")}};import{readFile}from"fs/promises";import{resolve}from"path";async function buildRequest(endpoint,flags){let headers={},body,customHeaders=flags["--header"]||[];for(let header of customHeaders){let colonIndex=header.indexOf(":");if(colonIndex>0){let key=header.substring(0,colonIndex).trim(),value=header.substring(colonIndex+1).trim();headers[key]=value}}let fields=flags["--field"]||[],rawFields=flags["--raw-field"]||[];if(fields.length>0||rawFields.length>0){body={};for(let field of fields){let{key,value}=await parseField(field,!0);body[key]=value}for(let field of rawFields){let{key,value}=await parseField(field,!1);body[key]=value}}if(flags["--input"]){let inputPath=flags["--input"];if(inputPath==="-"?body=await readStdin():body=await readFile(resolve(inputPath),"utf-8"),typeof body=="string")try{body=JSON.parse(body)}catch{}}let method=flags["--method"]?.toUpperCase()||"GET";return!flags["--method"]&&body&&(method="POST"),{url:endpoint,method,headers,body}}async function parseCliKeyValueField(field,typed){return parseField(field,typed)}async function parseField(field,typed){let eqIndex=field.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid field format: ${field}. Expected key=value`);let key=field.substring(0,eqIndex),value=field.substring(eqIndex+1);if(typed&&typeof value=="string"){if(value.startsWith("@")){let filePath=value.substring(1);if(filePath==="-"?value=await readStdin():value=await readFile(resolve(filePath),"utf-8"),typeof value=="string")try{value=JSON.parse(value)}catch{}}else if(value==="true")value=!0;else if(value==="false")value=!1;else if(value==="null")value=null;else if(/^-?\d+$/.test(value))value=parseInt(value,10);else if(/^-?\d*\.\d+$/.test(value))value=parseFloat(value);else if(value.startsWith("[")||value.startsWith("{"))try{value=JSON.parse(value)}catch{}}return{key,value}}async function readStdin(){let chunks=[];for await(let chunk of process.stdin)chunks.push(Buffer.from(chunk));return Buffer.concat(chunks).toString("utf-8")}function formatOutput(data,options){return options.raw?typeof data=="string"?data:JSON.stringify(data):JSON.stringify(data,null,2)}function generateCurlCommand(config,baseUrl){let parts=["curl"];config.method!=="GET"&&parts.push(`-X ${config.method}`),parts.push("-H 'Authorization: Bearer <TOKEN>'");for(let[key,value]of Object.entries(config.headers))parts.push(`-H '${key}: ${escapeShellArg(value)}'`);if(config.method!=="GET"&&config.body){let bodyStr=typeof config.body=="string"?config.body:JSON.stringify(config.body);parts.push("-H 'Content-Type: application/json'"),parts.push(`-d '${escapeShellArg(bodyStr)}'`)}let fullUrl=`${baseUrl}${config.url}`;return parts.push(`'${fullUrl}'`),parts.join(` \\
|
|
7
|
+
import{humanReadableColumnLabel}from"./chunk-GHAY4PSD.js";import{FETCH_TIMEOUT_MS,OpenApiCache,SSO_API_URL,assertAllowedSpecUrl,readSpecResponse}from"./chunk-K5KVSA2A.js";import{table}from"./chunk-375JVQYK.js";import{apiCommand,listSubcommand}from"./chunk-EJN55YDV.js";import{printError}from"./chunk-PKZK23PR.js";import{help}from"./chunk-OYIDWI5Y.js";import{TelemetryClient}from"./chunk-MBXLL2HF.js";import{parseArguments}from"./chunk-US7YJ2RQ.js";import{validateJsonOutput}from"./chunk-SDYCW5JM.js";import{require_ms}from"./chunk-MXTC4ZAQ.js";import{packageName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{getFlagsSpecification}from"./chunk-AMPJ6RWT.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";import{createHash}from"crypto";var MAX_REDIRECTS=3;async function fetchSpecUrl(client,specUrl){let specOrigin=assertAllowedSpecUrl(specUrl).origin,probe=await fetchWithTimeout(specUrl,{readSpec:!0});if(probe.response.ok)return probe.spec??null;let nonce=getSetCookieValue(probe.response,"_vercel_sso_nonce");if(!nonce)throw output_manager_default.debug(`OpenAPI spec URL returned ${probe.response.status} without a Vercel SSO nonce`),new Error(formatHttpError(specUrl,probe.response));let token=client.authConfig.token;if(!token)return output_manager_default.debug("OpenAPI spec URL requires Vercel authentication"),null;let hashedNonce=createHash("sha256").update(nonce).digest("hex"),ssoUrl=`${SSO_API_URL}?url=${encodeURIComponent(specUrl)}&nonce=${hashedNonce}`,sso=await fetchWithTimeout(ssoUrl,{cookie:`authorization=${encodeURIComponent(`Bearer ${token}`)}; isLoggedIn=1`}),location=sso.response.headers.get("location");if(!location||!location.includes("_vercel_jwt="))throw output_manager_default.debug("OpenAPI spec URL: user has no access"),new Error(formatHttpError(specUrl,sso.response));let cookies=new Map([["_vercel_sso_nonce",nonce]]),url=location;for(let i=0;i<=MAX_REDIRECTS;i++){if(!isSameOriginUrl(url,specOrigin))return output_manager_default.debug("OpenAPI spec URL: cross-origin redirect rejected"),null;let{response,spec}=await fetchWithTimeout(url,{cookie:Array.from(cookies,([name,value])=>`${name}=${value}`).join("; "),readSpec:!0});if(response.ok)return spec??null;let next=response.headers.get("location");if(response.status>=300&&response.status<400&&next){let setJwt=getSetCookieValue(response,"_vercel_jwt");setJwt&&cookies.set("_vercel_jwt",setJwt);let nextUrl=new URL(next,url).href;if(!isSameOriginUrl(nextUrl,specOrigin))return output_manager_default.debug("OpenAPI spec URL: cross-origin redirect rejected"),null;url=nextUrl;continue}throw output_manager_default.debug(`OpenAPI spec URL: unexpected response ${response.status}`),new Error(formatHttpError(url,response))}return output_manager_default.debug("OpenAPI spec URL: too many redirects"),null}function createOpenApiCache(client,specUrl){return new OpenApiCache(specUrl?{specUrl,fetchSpecUrl:url=>fetchSpecUrl(client,url)}:void 0)}async function fetchWithTimeout(url,options){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),1e4);try{let response=await fetch(url,{redirect:"manual",signal:controller.signal,headers:options?.cookie?{cookie:options.cookie}:void 0}),spec=options?.readSpec&&response.ok?await readSpecResponse(response,formatDiagnosticUrl(url)):void 0;return{response,spec}}finally{clearTimeout(timeoutId)}}function isSameOriginUrl(url,origin){try{return new URL(url).origin===origin}catch{return!1}}function formatHttpError(url,response){let statusText=response.statusText?` ${response.statusText}`:"";return`Could not load OpenAPI spec from ${formatDiagnosticUrl(url)}: HTTP ${response.status}${statusText}.`}function formatDiagnosticUrl(url){try{let parsed=new URL(url);parsed.hash="";for(let key of parsed.searchParams.keys())parsed.searchParams.set(key,"[redacted]");return parsed.href}catch{return url}}function getSetCookieValue(response,name){let header=response.headers.get("set-cookie");if(!header)return null;let match=header.match(new RegExp(`${name}=([^;,\\s]+)`));return match?match[1]:null}function foldNamingStyle(input){return input.trim().replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/[-_\s]+/g," ").trim().toLowerCase().replace(/\s+/g,"")}function operationIdToKebabCase(operationId){let s=operationId.trim();return s?s.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1-$2").replace(/[-_\s]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase():"unnamed"}function inferCliSubcommandAliases(ep){let upper=ep.method.toUpperCase(),hasPathParams=ep.parameters.some(p=>p.in==="path");switch(upper){case"GET":return hasPathParams?["inspect","get"]:["ls","list"];case"POST":return["add","create"];case"DELETE":return["rm","remove"];case"PUT":case"PATCH":return["update"];default:return[]}}var import_ms=__toESM(require_ms(),1),import_chalk=__toESM(require_source(),1);function getByPath(obj,path){let parts=path.split(".").filter(Boolean),cur=obj;for(let p of parts){if(cur===null||typeof cur!="object")return;cur=cur[p]}return cur}var TIMESTAMP_FIELD_PATTERN=/(?:^|\.)(created|updated|deleted|expired|blocked|completed|started|finished|modified|verified|published|cancelled|revoked|invited|accepted|accessed|deployed)(?:At|_at|On|_on)?$/i,MIN_TIMESTAMP_MS=1e12,MAX_TIMESTAMP_MS=41024448e5;function isTimestampValue(value,columnPath){return typeof value!="number"||!Number.isFinite(value)||value<MIN_TIMESTAMP_MS||value>MAX_TIMESTAMP_MS?!1:TIMESTAMP_FIELD_PATTERN.test(columnPath)}function formatRelativeTime(timestamp){let diff=Date.now()-timestamp;return diff<0?"just now":import_chalk.default.gray((0,import_ms.default)(diff))}function stringifyCell(value,columnPath){return value==null?import_chalk.default.gray("--"):columnPath&&isTimestampValue(value,columnPath)?formatRelativeTime(value):typeof value=="object"?JSON.stringify(value):String(value)}function styleColumnKey(plainLabel){return import_chalk.default.gray(plainLabel)}function columnsForRow(r,display){return r.limited===!0&&display.columnsWhenLimited?.length?display.columnsWhenLimited:display.columnsDefault}function formatAsCard(r,display){let columns=columnsForRow(r,display);if(!columns.length)return null;let rows=columns.map(colPath=>[styleColumnKey(humanReadableColumnLabel(colPath)),stringifyCell(getByPath(r,colPath),colPath)]);return table(rows,{align:["l","l"],hsep:2})}function formatAsDataTable(items,display){if(items.length===0)return"(empty)";let first=items[0];if(first===null||typeof first!="object"||Array.isArray(first)){let headers2=[styleColumnKey(humanReadableColumnLabel("#")),styleColumnKey(humanReadableColumnLabel("value"))],rows=items.map((v,i)=>[String(i),stringifyCell(v,"value")]);return table([headers2,...rows])}let columns=columnsForRow(first,display);if(!columns.length)return null;let headers=columns.map(p=>styleColumnKey(humanReadableColumnLabel(p))),dataRows=items.map(item=>{let row=item!==null&&typeof item=="object"&&!Array.isArray(item)?item:{};return columns.map(colPath=>stringifyCell(getByPath(row,colPath),colPath))});return table([headers,...dataRows])}function resolveEndpointByTagAndOperationId(endpoints,tag,operationHint){let tagLower=tag.toLowerCase(),tagMatches=endpoints.filter(ep=>ep.tags.some(t=>t.toLowerCase()===tagLower));if(tagMatches.length===0)return{ok:!1,reason:"no_tag",tag,tagMatches:[],operationHint};let withOpId=tagMatches.filter(ep=>ep.operationId.length>0);if(withOpId.length===0)return{ok:!1,reason:"no_operation",tag,tagMatches,operationHint};let hint=operationHint.trim(),hintLower=hint.toLowerCase(),exact=withOpId.filter(ep=>ep.operationId===hint);if(exact.length===1)return{ok:!0,endpoint:exact[0]};if(exact.length>1)return{ok:!1,reason:"ambiguous_operation",tag,tagMatches:exact,operationHint:hint};let exactCi=withOpId.filter(ep=>ep.operationId.toLowerCase()===hintLower);return exactCi.length===1?{ok:!0,endpoint:exactCi[0]}:exactCi.length>1?{ok:!1,reason:"ambiguous_operation",tag,tagMatches:exactCi,operationHint:hint}:{ok:!1,reason:"no_operation",tag,tagMatches,operationHint:hint}}var import_chalk4=__toESM(require_source(),1);var ApiTelemetryClient=class extends TelemetryClient{trackCliArgumentEndpoint(endpoint){if(endpoint){let normalized=this.normalizeEndpoint(endpoint);this.trackCliArgument({arg:"endpoint",value:normalized})}}trackCliArgumentOperationId(operationId){operationId&&this.trackCliArgument({arg:"operationId",value:operationId})}trackCliOptionMethod(method){if(method){let validMethods=["GET","POST","PUT","DELETE","PATCH","HEAD"],upperMethod=method.toUpperCase(),value=validMethods.includes(upperMethod)?upperMethod:this.redactedValue;this.trackCliOption({option:"method",value})}}trackCliOptionField(fields){fields&&fields.length>0&&this.trackCliOption({option:"field",value:this.redactedArgumentsLength(fields)})}trackCliOptionRawField(fields){fields&&fields.length>0&&this.trackCliOption({option:"raw-field",value:this.redactedArgumentsLength(fields)})}trackCliOptionHeader(headers){headers&&headers.length>0&&this.trackCliOption({option:"header",value:this.redactedArgumentsLength(headers)})}trackCliOptionInput(input){if(input){let value=input==="-"?"stdin":"file";this.trackCliOption({option:"input",value})}}trackCliOptionSpecUrl(specUrl){specUrl&&this.trackCliOption({option:"spec-url",value:this.redactedValue})}trackCliFlagPaginate(value){value&&this.trackCliFlag("paginate")}trackCliFlagInclude(value){value&&this.trackCliFlag("include")}trackCliFlagSilent(value){value&&this.trackCliFlag("silent")}trackCliFlagVerbose(value){value&&this.trackCliFlag("verbose")}trackCliFlagRaw(value){value&&this.trackCliFlag("raw")}trackCliFlagRefresh(value){value&&this.trackCliFlag("refresh")}trackCliOptionGenerate(format){if(format){let value=["curl"].includes(format)?format:this.redactedValue;this.trackCliOption({option:"generate",value})}}trackCliFlagDangerouslySkipPermissions(value){value&&this.trackCliFlag("dangerously-skip-permissions")}trackCliSubcommandList(){this.trackCliSubcommand({subcommand:"list",value:"list"})}trackCliOptionFormat(format){if(format){let value=["table","json"].includes(format)?format:this.redactedValue;this.trackCliOption({option:"format",value})}}trackCliFlagJson(json){json&&this.trackCliFlag("json")}normalizeEndpoint(endpoint){return endpoint.replace(/\/dpl_[a-zA-Z0-9]+/g,"/:deploymentId").replace(/\/prj_[a-zA-Z0-9]+/g,"/:projectId").replace(/\/team_[a-zA-Z0-9]+/g,"/:teamId").replace(/\/[a-f0-9]{24}/g,"/:id").replace(/\/[a-f0-9-]{36}/g,"/:uuid")}};import{readFile}from"fs/promises";import{resolve}from"path";async function buildRequest(endpoint,flags){let headers={},body,customHeaders=flags["--header"]||[];for(let header of customHeaders){let colonIndex=header.indexOf(":");if(colonIndex>0){let key=header.substring(0,colonIndex).trim(),value=header.substring(colonIndex+1).trim();headers[key]=value}}let fields=flags["--field"]||[],rawFields=flags["--raw-field"]||[];if(fields.length>0||rawFields.length>0){body={};for(let field of fields){let{key,value}=await parseField(field,!0);body[key]=value}for(let field of rawFields){let{key,value}=await parseField(field,!1);body[key]=value}}if(flags["--input"]){let inputPath=flags["--input"];if(inputPath==="-"?body=await readStdin():body=await readFile(resolve(inputPath),"utf-8"),typeof body=="string")try{body=JSON.parse(body)}catch{}}let method=flags["--method"]?.toUpperCase()||"GET";return!flags["--method"]&&body&&(method="POST"),{url:endpoint,method,headers,body}}async function parseCliKeyValueField(field,typed){return parseField(field,typed)}async function parseField(field,typed){let eqIndex=field.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid field format: ${field}. Expected key=value`);let key=field.substring(0,eqIndex),value=field.substring(eqIndex+1);if(typed&&typeof value=="string"){if(value.startsWith("@")){let filePath=value.substring(1);if(filePath==="-"?value=await readStdin():value=await readFile(resolve(filePath),"utf-8"),typeof value=="string")try{value=JSON.parse(value)}catch{}}else if(value==="true")value=!0;else if(value==="false")value=!1;else if(value==="null")value=null;else if(/^-?\d+$/.test(value))value=parseInt(value,10);else if(/^-?\d*\.\d+$/.test(value))value=parseFloat(value);else if(value.startsWith("[")||value.startsWith("{"))try{value=JSON.parse(value)}catch{}}return{key,value}}async function readStdin(){let chunks=[];for await(let chunk of process.stdin)chunks.push(Buffer.from(chunk));return Buffer.concat(chunks).toString("utf-8")}function formatOutput(data,options){return options.raw?typeof data=="string"?data:JSON.stringify(data):JSON.stringify(data,null,2)}function generateCurlCommand(config,baseUrl){let parts=["curl"];config.method!=="GET"&&parts.push(`-X ${config.method}`),parts.push("-H 'Authorization: Bearer <TOKEN>'");for(let[key,value]of Object.entries(config.headers))parts.push(`-H '${key}: ${escapeShellArg(value)}'`);if(config.method!=="GET"&&config.body){let bodyStr=typeof config.body=="string"?config.body:JSON.stringify(config.body);parts.push("-H 'Content-Type: application/json'"),parts.push(`-d '${escapeShellArg(bodyStr)}'`)}let fullUrl=`${baseUrl}${config.url}`;return parts.push(`'${fullUrl}'`),parts.join(` \\
|
|
8
8
|
`)}function escapeShellArg(str){return str.replace(/'/g,"'\\''")}import{readFile as readFile2}from"fs/promises";import{resolve as resolve2}from"path";var GLOBAL_CLI_QUERY_PARAMS=new Set(["teamId","slug"]);async function parseOperationKeyValuePairs(endpoint,bodyFields,flags,positionalKeyValues){let pathParamNames=new Set(endpoint.parameters.filter(p=>p.in==="path").map(p=>p.name)),queryParamNames=new Set(endpoint.parameters.filter(p=>p.in==="query").map(p=>p.name)),headerParamNames=new Set(endpoint.parameters.filter(p=>p.in==="header").map(p=>p.name)),bodyFieldNames=new Set(bodyFields.map(f=>f.name)),pathValues={},queryValues={},headerValues={},body={};async function dispatchPair(field,typed){let eqIndex=field.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid option "${field}". Expected key=value (or use options -F / -f).`);let key=field.slice(0,eqIndex),param=endpoint.parameters.find(p=>p.name===key);if(param?.in==="path"){let{value}=await parseCliKeyValueField(field,!1);pathValues[key]=String(value);return}if(param?.in==="query"){let{value}=await parseCliKeyValueField(field,typed);queryValues[key]=typeof value=="object"&&value!==null?JSON.stringify(value):String(value);return}if(param?.in==="header"){let{value}=await parseCliKeyValueField(field,!1);headerValues[key]=String(value);return}if(param?.in==="cookie")throw new Error(`Option "${key}" is cookie-based; set it via headers instead.`);if(bodyFieldNames.has(key)){let{value}=await parseCliKeyValueField(field,typed);body[key]=value;return}if(!param&&pathParamNames.has(key)){let{value}=await parseCliKeyValueField(field,!1);pathValues[key]=String(value);return}if(!param&&queryParamNames.has(key)){let{value}=await parseCliKeyValueField(field,typed);queryValues[key]=typeof value=="object"&&value!==null?JSON.stringify(value):String(value);return}if(!param&&headerParamNames.has(key)){let{value}=await parseCliKeyValueField(field,!1);headerValues[key]=String(value);return}throw new Error(`Unknown option "${key}" for operation ${endpoint.operationId}. Check the API docs or run \`vercel api ls --json\`.`)}for(let field of flags["--field"]||[])await dispatchPair(field,!0);for(let field of flags["--raw-field"]||[])await dispatchPair(field,!1);for(let field of positionalKeyValues)await dispatchPair(field,!0);return{pathValues,queryValues,headerValues,body}}function getMissingRequiredOperationParams(endpoint,bodyFields,parsed,flags){let missingPath=endpoint.parameters.filter(p=>p.in==="path").filter(p=>parsed.pathValues[p.name]===void 0),missingQuery=endpoint.parameters.filter(p=>p.in==="query"&&p.required&&!GLOBAL_CLI_QUERY_PARAMS.has(p.name)).filter(p=>parsed.queryValues[p.name]===void 0),missingHeader=endpoint.parameters.filter(p=>p.in==="header"&&p.required).filter(p=>parsed.headerValues[p.name]===void 0),missingBody=bodyFields.filter(f=>f.required&&parsed.body[f.name]===void 0&&!flags["--input"]);return{path:missingPath,query:missingQuery,header:missingHeader,body:missingBody}}function getUnsetOptionalOperationParams(endpoint,bodyFields,parsed,flags){let unsetQuery=endpoint.parameters.filter(p=>p.in==="query"&&parsed.queryValues[p.name]===void 0&&(!p.required||GLOBAL_CLI_QUERY_PARAMS.has(p.name))),unsetHeader=endpoint.parameters.filter(p=>p.in==="header"&&!p.required&&parsed.headerValues[p.name]===void 0),unsetBody=bodyFields.filter(f=>!f.required&&parsed.body[f.name]===void 0&&!flags["--input"]);return{query:unsetQuery,header:unsetHeader,body:unsetBody}}async function buildRequestForResolvedOperation(endpoint,bodyFields,flags,positionalKeyValues){let headers={},customHeaders=flags["--header"]||[];for(let header of customHeaders){let colonIndex=header.indexOf(":");if(colonIndex>0){let key=header.substring(0,colonIndex).trim(),value=header.substring(colonIndex+1).trim();headers[key]=value}}let method=(flags["--method"]?.toUpperCase()||endpoint.method).toUpperCase(),pathParamNames=new Set(endpoint.parameters.filter(p=>p.in==="path").map(p=>p.name)),parsed=await parseOperationKeyValuePairs(endpoint,bodyFields,flags,positionalKeyValues),{pathValues,queryValues,headerValues,body}=parsed;for(let[k,v]of Object.entries(headerValues))headers[k]=v;let urlPath=endpoint.path;for(let name of pathParamNames){let value=pathValues[name];if(value===void 0)throw new Error(`Missing required path option {${name}} for ${endpoint.operationId}.`);urlPath=urlPath.replace(`{${name}}`,encodeURIComponent(value))}if(/\{[^}]+\}/.test(urlPath))throw new Error(`Unresolved path placeholders in ${urlPath}. Provide values for all path options.`);let requiredQuery=endpoint.parameters.filter(p=>p.in==="query"&&p.required&&!GLOBAL_CLI_QUERY_PARAMS.has(p.name));for(let p of requiredQuery)if(queryValues[p.name]===void 0)throw new Error(`Missing required query option "${p.name}" for ${endpoint.operationId}.`);let requiredHeader=endpoint.parameters.filter(h=>h.in==="header"&&h.required);for(let h of requiredHeader)if(headerValues[h.name]===void 0)throw new Error(`Missing required header option "${h.name}" for ${endpoint.operationId}.`);let requiredBody=bodyFields.filter(f=>f.required);for(let f of requiredBody)if(body[f.name]===void 0&&!flags["--input"])throw new Error(`Missing required body option "${f.name}" for ${endpoint.operationId}.`);let queryString=new URLSearchParams(queryValues).toString();queryString&&(urlPath+=(urlPath.includes("?")?"&":"?")+queryString);let finalBody=Object.keys(body).length>0?body:void 0;if(flags["--input"]){let inputPath=flags["--input"],inputBody;if(inputPath==="-"?inputBody=await readStdin():inputBody=await readFile2(resolve2(inputPath),"utf-8"),typeof inputBody=="string")try{finalBody=JSON.parse(inputBody)}catch{finalBody=inputBody}else finalBody=inputBody}return(method==="GET"||method==="HEAD")&&(finalBody=void 0),{url:urlPath,method,headers,body:finalBody}}var API_BASE_URL="https://api.vercel.com";var import_chalk2=__toESM(require_source(),1);function colorizeMethod(method){switch(method){case"GET":return import_chalk2.default.cyan(method);case"POST":return import_chalk2.default.green(method);case"PUT":return import_chalk2.default.yellow(method);case"PATCH":return import_chalk2.default.blue(method);case"DELETE":return import_chalk2.default.red(method);default:return method}}function colorizeMethodPadded(method,width=7){let colored=colorizeMethod(method),padding=" ".repeat(Math.max(0,width-method.length));return colored+padding}function formatPathParam(paramName){return import_chalk2.default.cyan(`{${paramName}}`)}function formatTypeHint(type){return import_chalk2.default.dim(`[${type}]`)}function formatDescription(description){return description?import_chalk2.default.gray(` (${description})`):""}var import_chalk3=__toESM(require_source(),1);function getByPath2(obj,path){let current=obj;for(let segment of path.split(".")){if(current==null||typeof current!="object")return;current=current[segment]}return current}function parseArrayColumns(data,columns){let entries=Object.entries(columns),first=entries[0];if(!first)return null;let bracketIdx=first[1].indexOf("[].");if(bracketIdx===-1)return null;let arrayKey=first[1].slice(0,bracketIdx),rowColumns={};for(let[label,path]of entries){let prefix=path.slice(0,bracketIdx);if(prefix!==arrayKey||!path.startsWith(prefix+"[]."))return null;rowColumns[label]=path.slice(bracketIdx+3)}let arr=getByPath2(data,arrayKey);return Array.isArray(arr)?{rows:arr,rowColumns}:null}function formatValue(value){return value==null?import_chalk3.default.dim("\u2013"):typeof value=="number"?value>1e12&&value<2e12?new Date(value).toISOString():String(value):typeof value=="boolean"?String(value):typeof value=="string"?value:JSON.stringify(value)}function renderCard(data,columns){let entries=Object.entries(columns),maxLabel=Math.max(...entries.map(([label])=>label.length));return entries.map(([label,path])=>{let value=getByPath2(data,path);return` ${import_chalk3.default.gray(label.padEnd(maxLabel))} ${formatValue(value)}`}).join(`
|
|
9
9
|
`)}function renderTable(rows,columns){let entries=Object.entries(columns),headerRow=entries.map(([label])=>label),dataRows=rows.map(row=>entries.map(([,path])=>formatValue(getByPath2(row,path)))),widths=entries.map(([label],colIdx)=>{let dataMax=dataRows.reduce((max,row)=>Math.max(max,stripAnsi(row[colIdx]).length),0);return Math.max(label.length,dataMax)}),header=headerRow.map((h,i)=>import_chalk3.default.bold(h.padEnd(widths[i]))).join(" "),body=dataRows.map(row=>row.map((cell,i)=>{let pad=widths[i]-stripAnsi(cell).length;return cell+" ".repeat(Math.max(0,pad))}).join(" "));return[header,...body].join(`
|
|
10
10
|
`)}function stripAnsi(str){return str.replace(/\x1b\[[0-9;]*m/g,"")}async function api(client){let telemetryClient=new ApiTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpec=getFlagsSpecification(apiCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpec,{permissive:!0})}catch(err){return printError(err),2}let{args,flags}=parsedArgs,needHelp=flags["--help"],firstArg=args[1];if(firstArg==="ls"||firstArg==="list"){let lsFlagsSpec=getFlagsSpecification(listSubcommand.options),lsParsedArgs;try{lsParsedArgs=parseArguments(client.argv.slice(2),lsFlagsSpec)}catch(err){return printError(err),2}let lsFlags=lsParsedArgs.flags;if(lsFlags["--help"])return telemetryClient.trackCliFlagHelp("api",firstArg),output_manager_default.print(help(listSubcommand,{stream:client.stderr,parent:apiCommand,columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(lsFlags);return formatResult.valid?(telemetryClient.trackCliSubcommandList(),lsFlags["--refresh"]&&telemetryClient.trackCliFlagRefresh(!0),lsFlags["--format"]&&telemetryClient.trackCliOptionFormat(lsFlags["--format"]),telemetryClient.trackCliFlagJson(lsFlags["--json"]),lsFlags["--spec-url"]&&telemetryClient.trackCliOptionSpecUrl(lsFlags["--spec-url"]),listEndpoints(client,lsFlags["--refresh"]??!1,lsFlags["--spec-url"],formatResult.jsonOutput?"json":"table")):(output_manager_default.error(formatResult.error),2)}if(needHelp)return telemetryClient.trackCliFlagHelp("api"),output_manager_default.print(help(apiCommand,{stream:client.stderr,columns:client.stderr.columns})),0;flags["--dangerously-skip-permissions"]&&(client.dangerouslySkipPermissions=!0);let endpoint,selectedMethod,selectedBodyFields=[];if(firstArg)endpoint=firstArg;else if(client.stdin.isTTY){let selected=await promptEndpointSelection(client,flags["--refresh"]??!1,flags["--spec-url"]);if(!selected)return 1;endpoint=selected.finalUrl,selectedMethod=selected.method,selectedBodyFields=selected.bodyFields}else return output_manager_default.error("Endpoint is required. Usage: vercel api <endpoint>"),2;if(endpoint&&!endpoint.startsWith("/"))return output_manager_default.error(`Invalid arguments. Use an API path starting with /, or run \`${packageName} api\` interactively.`),2;try{if(new URL(endpoint,API_BASE_URL).origin!==API_BASE_URL)return output_manager_default.error("Invalid endpoint: must be a Vercel API path, not an external URL"),2}catch{return output_manager_default.error("Invalid endpoint URL format"),1}let finalFlags={...flags};if(selectedMethod&&!flags["--method"]&&(finalFlags["--method"]=selectedMethod),selectedBodyFields.length>0){let existingFields=finalFlags["--field"]||[];finalFlags["--field"]=[...existingFields,...selectedBodyFields]}let requestConfig;try{requestConfig=await buildRequest(endpoint,finalFlags)}catch(err){return printError(err),1}if(telemetryClient.trackCliArgumentEndpoint(requestConfig.url),telemetryClient.trackCliArgumentOperationId(void 0),telemetryClient.trackCliOptionMethod(flags["--method"]),telemetryClient.trackCliOptionHeader(flags["--header"]),telemetryClient.trackCliOptionInput(flags["--input"]),flags["--paginate"]&&telemetryClient.trackCliFlagPaginate(!0),flags["--include"]&&telemetryClient.trackCliFlagInclude(!0),flags["--silent"]&&telemetryClient.trackCliFlagSilent(!0),flags["--verbose"]&&telemetryClient.trackCliFlagVerbose(!0),flags["--raw"]&&telemetryClient.trackCliFlagRaw(!0),flags["--refresh"]&&telemetryClient.trackCliFlagRefresh(!0),flags["--spec-url"]&&telemetryClient.trackCliOptionSpecUrl(flags["--spec-url"]),flags["--generate"]&&telemetryClient.trackCliOptionGenerate(flags["--generate"]),flags["--dangerously-skip-permissions"]&&telemetryClient.trackCliFlagDangerouslySkipPermissions(!0),flags["--generate"]==="curl"){let curlCmd=generateCurlCommand(requestConfig,"https://api.vercel.com");return output_manager_default.log(""),output_manager_default.log("Replace <TOKEN> with your auth token:"),output_manager_default.log(""),client.stdout.write(curlCmd+`
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import{require_dist}from"./chunk-WKSXBH7X.js";import{__commonJS,__require}from"./chunk-BZENIQ7N.js";var require_token_error=__commonJS({"../../node_modules/.pnpm/@vercel+oidc@3.8.2/node_modules/@vercel/oidc/dist/token-error.js"(exports,module){"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),token_error_exports={};__export(token_error_exports,{VercelOidcTokenError:()=>VercelOidcTokenError});module.exports=__toCommonJS(token_error_exports);var VercelOidcTokenError=class extends Error{constructor(message,cause){super(message),this.name="VercelOidcTokenError",this.cause=cause}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}}});var require_token_io=__commonJS({"../../node_modules/.pnpm/@vercel+oidc@3.8.2/node_modules/@vercel/oidc/dist/token-io.js"(exports,module){"use strict";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),token_io_exports={};__export(token_io_exports,{findRootDir:()=>findRootDir,getUserDataDir:()=>getUserDataDir});module.exports=__toCommonJS(token_io_exports);var import_path=__toESM(__require("path")),import_fs=__toESM(__require("fs")),import_os=__toESM(__require("os")),import_token_error=require_token_error();function findRootDir(){try{let dir=process.cwd();for(;dir!==import_path.default.dirname(dir);){let pkgPath=import_path.default.join(dir,".vercel");if(import_fs.default.existsSync(pkgPath))return dir;dir=import_path.default.dirname(dir)}}catch{throw new import_token_error.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function getUserDataDir(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(import_os.default.platform()){case"darwin":return import_path.default.join(import_os.default.homedir(),"Library/Application Support");case"linux":return import_path.default.join(import_os.default.homedir(),".local/share");case"win32":return process.env.LOCALAPPDATA?process.env.LOCALAPPDATA:null;default:return null}}}});var require_oauth=__commonJS({"../../node_modules/.pnpm/@vercel+oidc@3.8.2/node_modules/@vercel/oidc/dist/oauth.js"(exports,module){"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),oauth_exports={};__export(oauth_exports,{processTokenResponse:()=>processTokenResponse,refreshTokenRequest:()=>refreshTokenRequest});module.exports=__toCommonJS(oauth_exports);var import_os=__require("os"),VERCEL_ISSUER="https://vercel.com",VERCEL_CLI_CLIENT_ID="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",userAgent=`@vercel/oidc node-${process.version} ${(0,import_os.platform)()} (${(0,import_os.arch)()}) ${(0,import_os.hostname)()}`,_tokenEndpoint=null;async function getTokenEndpoint(){if(_tokenEndpoint)return _tokenEndpoint;let discoveryUrl=`${VERCEL_ISSUER}/.well-known/openid-configuration`,response=await fetch(discoveryUrl,{headers:{"user-agent":userAgent}});if(!response.ok)throw new Error("Failed to discover OAuth endpoints");let metadata=await response.json();if(!metadata||typeof metadata.token_endpoint!="string")throw new Error("Invalid OAuth discovery response");let endpoint=metadata.token_endpoint;return _tokenEndpoint=endpoint,endpoint}async function refreshTokenRequest(options){let tokenEndpoint=await getTokenEndpoint();return await fetch(tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":userAgent},body:new URLSearchParams({client_id:VERCEL_CLI_CLIENT_ID,grant_type:"refresh_token",...options})})}async function processTokenResponse(response){let json=await response.json();if(!response.ok){let errorMsg=typeof json=="object"&&json&&"error"in json?String(json.error):"Token refresh failed";return[new Error(errorMsg)]}return typeof json!="object"||json===null?[new Error("Invalid token response")]:typeof json.access_token!="string"?[new Error("Missing access_token in response")]:json.token_type!=="Bearer"?[new Error("Invalid token_type in response")]:typeof json.expires_in!="number"?[new Error("Missing expires_in in response")]:[null,json]}}});var require_auth_errors=__commonJS({"../../node_modules/.pnpm/@vercel+oidc@3.8.2/node_modules/@vercel/oidc/dist/auth-errors.js"(exports,module){"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),auth_errors_exports={};__export(auth_errors_exports,{AccessTokenMissingError:()=>AccessTokenMissingError,RefreshAccessTokenFailedError:()=>RefreshAccessTokenFailedError});module.exports=__toCommonJS(auth_errors_exports);var AccessTokenMissingError=class extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login)."),this.name="AccessTokenMissingError"}},RefreshAccessTokenFailedError=class extends Error{constructor(cause){super("Failed to refresh authentication token."),this.name="RefreshAccessTokenFailedError",cause!==void 0&&(this.cause=cause)}}}});var require_token_util=__commonJS({"../../node_modules/.pnpm/@vercel+oidc@3.8.2/node_modules/@vercel/oidc/dist/token-util.js"(exports,module){var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),token_util_exports={};__export(token_util_exports,{assertVercelOidcTokenResponse:()=>assertVercelOidcTokenResponse,findProjectInfo:()=>findProjectInfo,getTokenPayload:()=>getTokenPayload,getVercelOidcToken:()=>getVercelOidcToken,getVercelOidcTokenFromCli:()=>getVercelOidcTokenFromCli,getVercelToken:()=>getVercelToken,isExpired:()=>isExpired,loadToken:()=>loadToken,saveToken:()=>saveToken});module.exports=__toCommonJS(token_util_exports);var path=__toESM(__require("path")),fs=__toESM(__require("fs")),import_cli_exec=require_dist(),import_cli_config=__require("@vercel/cli-config"),import_token_error=require_token_error(),import_token_io=require_token_io(),import_oauth=require_oauth(),import_auth_errors=require_auth_errors();async function getVercelToken(options){let configDir=(0,import_cli_config.getGlobalPathConfig)(),authConfig=(0,import_cli_config.tryReadAuthConfig)(configDir);if(!authConfig||!authConfig.token&&!authConfig.refreshToken)throw new import_auth_errors.AccessTokenMissingError;if(isValidAccessToken(authConfig,options?.expirationBufferMs))return authConfig.token;if(!authConfig.refreshToken)throw(0,import_cli_config.writeAuthConfig)(configDir,{}),new import_auth_errors.RefreshAccessTokenFailedError("No refresh token available");try{let tokenResponse=await(0,import_oauth.refreshTokenRequest)({refresh_token:authConfig.refreshToken}),[tokensError,tokens]=await(0,import_oauth.processTokenResponse)(tokenResponse);if(tokensError||!tokens)throw(0,import_cli_config.writeAuthConfig)(configDir,{}),new import_auth_errors.RefreshAccessTokenFailedError(tokensError);let updatedConfig={token:tokens.access_token,expiresAt:Math.floor(Date.now()/1e3)+tokens.expires_in,refreshToken:tokens.refresh_token};return(0,import_cli_config.writeAuthConfig)(configDir,updatedConfig),updatedConfig.token}catch(error){throw(0,import_cli_config.writeAuthConfig)(configDir,{}),error instanceof import_auth_errors.AccessTokenMissingError||error instanceof import_auth_errors.RefreshAccessTokenFailedError?error:new import_auth_errors.RefreshAccessTokenFailedError(error)}}function isValidAccessToken(authConfig,expirationBufferMs=0){if(!authConfig.token)return!1;if(typeof authConfig.expiresAt!="number")return!0;let nowInSeconds=Math.floor(Date.now()/1e3),bufferInSeconds=expirationBufferMs/1e3;return authConfig.expiresAt>=nowInSeconds+bufferInSeconds}async function getVercelOidcTokenFromCli(projectId,teamId){let args=["project","token",projectId,"--format=json"];teamId&&args.push("--scope",teamId);try{let{stdout}=await(0,import_cli_exec.execVercelCli)(args),parsedOutput;if(typeof stdout!="string")throw new import_token_error.VercelOidcTokenError("Failed to refresh OIDC token: `vercel project token` did not return stdout");try{parsedOutput=JSON.parse(stdout)}catch{throw new import_token_error.VercelOidcTokenError("Failed to refresh OIDC token: `vercel project token` returned invalid JSON: "+stdout)}return assertVercelOidcTokenResponse(parsedOutput),parsedOutput}catch(error){if(error instanceof import_token_error.VercelOidcTokenError)throw error;let message=error instanceof Error?error.message:"",stderr=error instanceof import_cli_exec.VercelCliError?error.stderr?.trim():void 0;throw stderr&&!message.includes(stderr)&&(message=`${message}
|
|
8
|
+
${stderr}`.trim()),new import_token_error.VercelOidcTokenError(message?`Failed to refresh OIDC token with the Vercel CLI: ${message}`:"Failed to refresh OIDC token with the Vercel CLI")}}async function getVercelOidcToken(authToken,projectId,teamId){let url=`https://api.vercel.com/v1/projects/${projectId}/token?source=vercel-oidc-refresh${teamId?`&teamId=${teamId}`:""}`,res=await fetch(url,{method:"POST",headers:{Authorization:`Bearer ${authToken}`}});if(!res.ok)throw new import_token_error.VercelOidcTokenError(`Failed to refresh OIDC token: ${res.statusText}`);let tokenRes=await res.json();return assertVercelOidcTokenResponse(tokenRes),tokenRes}function assertVercelOidcTokenResponse(res){if(!res||typeof res!="object")throw new TypeError("Vercel OIDC token is malformed. Expected an object.");if(!("token"in res)||typeof res.token!="string")throw new TypeError("Vercel OIDC token is malformed. Expected a string-valued token property.")}function findProjectInfo(){let dir=(0,import_token_io.findRootDir)();if(!dir)throw new import_token_error.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let prjPath=path.join(dir,".vercel","project.json");if(!fs.existsSync(prjPath))throw new import_token_error.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let prj=JSON.parse(fs.readFileSync(prjPath,"utf8"));if(typeof prj.projectId!="string"&&typeof prj.orgId!="string")throw new TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:prj.projectId,teamId:prj.orgId}}function saveToken(token,projectId){let dir=(0,import_token_io.getUserDataDir)();if(!dir)throw new import_token_error.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let tokenPath=path.join(dir,"com.vercel.token",`${projectId}.json`),tokenJson=JSON.stringify(token);fs.mkdirSync(path.dirname(tokenPath),{mode:504,recursive:!0}),fs.writeFileSync(tokenPath,tokenJson),fs.chmodSync(tokenPath,432)}function loadToken(projectId){let dir=(0,import_token_io.getUserDataDir)();if(!dir)throw new import_token_error.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let tokenPath=path.join(dir,"com.vercel.token",`${projectId}.json`);if(!fs.existsSync(tokenPath))return null;let token=JSON.parse(fs.readFileSync(tokenPath,"utf8"));return assertVercelOidcTokenResponse(token),token}function getTokenPayload(token){let tokenParts=token.split(".");if(tokenParts.length!==3)throw new import_token_error.VercelOidcTokenError("Invalid token.");let base64=tokenParts[1].replace(/-/g,"+").replace(/_/g,"/"),padded=base64.padEnd(base64.length+(4-base64.length%4)%4,"=");return JSON.parse(Buffer.from(padded,"base64").toString("utf8"))}function isExpired(token,bufferMs=0){return token.exp*1e3<Date.now()+bufferMs}}});export{require_token_error,require_auth_errors,require_token_util};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import{getProductionUrl}from"./chunk-VT6RIZJH.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";var PROTECTION_METHODS=[{setting:"ssoProtection",id:"vercel_authentication",name:"Vercel Authentication"},{setting:"passwordProtection",id:"password",name:"Password Protection"}];async function getEnabledProtection(client,project,fetchedProject){try{let settings=fetchedProject??await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId});return readEnabledProtection(settings)}catch(err){return output_manager_default.debug(`Could not read Deployment Protection settings: ${err}`),null}}function readEnabledProtection(settings){let values=settings;return PROTECTION_METHODS.filter(method=>values[method.setting]).map(method=>({...method,deploymentType:readDeploymentType(values[method.setting])}))}function readDeploymentType(setting){if(setting&&typeof setting=="object"&&"deploymentType"in setting){let{deploymentType}=setting;return typeof deploymentType=="string"?deploymentType:void 0}}var PRODUCTION_DOMAINS_PUBLIC=new Set(["all_except_custom_domains","prod_deployment_urls_and_all_previews","preview"]),PRODUCTION_DEPLOYMENTS_PUBLIC=new Set(["preview"]);function getProtectionForDeployment(methods,deployment){if(!methods)return[];if(deployment.target!=="production")return methods;let publicScopes=getProductionUrl(deployment)?PRODUCTION_DOMAINS_PUBLIC:PRODUCTION_DEPLOYMENTS_PUBLIC;return methods.filter(method=>!method.deploymentType||!publicScopes.has(method.deploymentType))}function getProtectionForDeploymentAlias(methods,deployment){return methods?deployment.target!=="production"?methods:methods.filter(method=>!method.deploymentType||!PRODUCTION_DEPLOYMENTS_PUBLIC.has(method.deploymentType)):[]}function getProtectionForProductionDomain(methods){return(methods??[]).filter(method=>!method.deploymentType||!PRODUCTION_DOMAINS_PUBLIC.has(method.deploymentType))}export{getEnabledProtection,readEnabledProtection,getProtectionForDeployment,getProtectionForDeploymentAlias,getProtectionForProductionDomain};
|
|
@@ -4,4 +4,4 @@ import { dirname as __dirname_ } from 'node:path';
|
|
|
4
4
|
const require = __createRequire(import.meta.url);
|
|
5
5
|
const __filename = __fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = __dirname_(__filename);
|
|
7
|
-
import{require_json_parse_better_errors}from"./chunk-25565AGS.js";import{require_lib}from"./chunk-
|
|
7
|
+
import{require_json_parse_better_errors}from"./chunk-25565AGS.js";import{require_lib}from"./chunk-6NUH6ZPE.js";import{CantParseJSONFile}from"./chunk-T2FCF46I.js";import{require_dist}from"./chunk-RM3ZDRYE.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_fs_extra=__toESM(require_lib(),1);var import_json_parse_better_errors=__toESM(require_json_parse_better_errors(),1),import_error_utils=__toESM(require_dist(),1);async function readJSONFile(file){let content=await readFileSafe(file);if(content===null)return content;try{return(0,import_json_parse_better_errors.default)(content)}catch(error){return new CantParseJSONFile(file,(0,import_error_utils.errorToString)(error))}}async function readFileSafe(file){try{return await import_fs_extra.default.readFile(file,"utf8")}catch{return null}}export{readJSONFile};
|