@vercel/cli-support 65.8.0 → 65.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/chunks/add-6YFDZCAK.js +8 -0
  2. package/dist/chunks/add-QDZPCCUD.js +8 -0
  3. package/dist/chunks/add-Z24IIQDY.js +8 -0
  4. package/dist/chunks/build-HLU4YO37.js +7 -0
  5. package/dist/chunks/chunk-2CSCY66I.js +11 -0
  6. package/dist/chunks/{chunk-G7X2TVUO.js → chunk-2DODPQ5J.js} +1 -1
  7. package/dist/chunks/{chunk-FQVSBXRY.js → chunk-2H4DUZJZ.js} +1 -1
  8. package/dist/chunks/{chunk-QTCS2HDX.js → chunk-2JNDJISE.js} +1 -1
  9. package/dist/chunks/{chunk-BLFPDEXE.js → chunk-2JXQWOK5.js} +1 -1
  10. package/dist/chunks/{chunk-44XDCARR.js → chunk-2RXUQ72I.js} +1 -1
  11. package/dist/chunks/{chunk-TSKFDJ77.js → chunk-2TRNHR72.js} +1 -1
  12. package/dist/chunks/{chunk-EZL4AJXH.js → chunk-32AS5X7G.js} +1 -1
  13. package/dist/chunks/chunk-32NXYHYC.js +10 -0
  14. package/dist/chunks/{chunk-OTJNOMRV.js → chunk-375JVQYK.js} +1 -1
  15. package/dist/chunks/{chunk-QR7PY5JS.js → chunk-43P35KUA.js} +1 -1
  16. package/dist/chunks/{chunk-IECNFRTK.js → chunk-4BZ3DNGM.js} +1 -1
  17. package/dist/chunks/chunk-4CQKN5TW.js +10 -0
  18. package/dist/chunks/{chunk-4UIMSZZB.js → chunk-4KM733OB.js} +1 -1
  19. package/dist/chunks/{chunk-GKUHMS3A.js → chunk-4OTI552J.js} +1 -1
  20. package/dist/chunks/{chunk-KARAZGCO.js → chunk-4SJU5QSD.js} +1 -1
  21. package/dist/chunks/{chunk-6KCYUYUM.js → chunk-4VF5BZJP.js} +1 -1
  22. package/dist/chunks/{chunk-P2HBUDGR.js → chunk-4XJVEKTD.js} +1 -1
  23. package/dist/chunks/chunk-4Z3APEBF.js +7 -0
  24. package/dist/chunks/chunk-5CVEW3HD.js +12 -0
  25. package/dist/chunks/{chunk-LFOWP74R.js → chunk-5DXC4TE2.js} +1 -1
  26. package/dist/chunks/{chunk-FNOCIKAU.js → chunk-5K4UTJSY.js} +1 -1
  27. package/dist/chunks/{chunk-62FZFXPJ.js → chunk-5M3WBT3N.js} +1 -1
  28. package/dist/chunks/{constants-JAB7MRSK.js → chunk-5MDNVAE6.js} +1 -1
  29. package/dist/chunks/{chunk-HA2ICIB5.js → chunk-5TI3ZXW3.js} +1 -1
  30. package/dist/chunks/{chunk-3LQ2ADXO.js → chunk-64UCX5JM.js} +1 -1
  31. package/dist/chunks/{chunk-UAUVCOGS.js → chunk-6RCFEJZK.js} +1 -1
  32. package/dist/chunks/chunk-7DM3IJ7L.js +10 -0
  33. package/dist/chunks/chunk-7PGGP2QT.js +10 -0
  34. package/dist/chunks/{chunk-A6F3EE2O.js → chunk-7ULVGK67.js} +1 -1
  35. package/dist/chunks/{chunk-MCP63EVQ.js → chunk-7WY7ASKE.js} +1 -1
  36. package/dist/chunks/{chunk-YTZPQVGF.js → chunk-AUCTNGW2.js} +1 -1
  37. package/dist/chunks/{chunk-LD42X7ZH.js → chunk-AX3V7N44.js} +1 -1
  38. package/dist/chunks/chunk-BRETAWE7.js +10 -0
  39. package/dist/chunks/{chunk-T2SRGJPU.js → chunk-BT5C6MCY.js} +1 -1
  40. package/dist/chunks/{chunk-D3GYYGSS.js → chunk-BWS3ZOHJ.js} +1 -1
  41. package/dist/chunks/{chunk-OV7G6RIQ.js → chunk-BZNRYQ6U.js} +1 -1
  42. package/dist/chunks/{chunk-KDRCBWRY.js → chunk-C6525MLX.js} +1 -1
  43. package/dist/chunks/chunk-CBVVVYUP.js +10 -0
  44. package/dist/chunks/{chunk-KIMIK4SG.js → chunk-CGTD4QFC.js} +1 -1
  45. package/dist/chunks/{chunk-5MHRCRIN.js → chunk-CMHL66LK.js} +1 -1
  46. package/dist/chunks/{chunk-H4DE2OFO.js → chunk-D2JHIOVH.js} +1 -1
  47. package/dist/chunks/{chunk-WRC5CTUD.js → chunk-D4TD2KWH.js} +1 -1
  48. package/dist/chunks/{chunk-XBOGVOV5.js → chunk-D4ZEJM3T.js} +1 -1
  49. package/dist/chunks/{chunk-5O7CRJE5.js → chunk-D6REP5QQ.js} +1 -1
  50. package/dist/chunks/chunk-DASHFOKO.js +8 -0
  51. package/dist/chunks/chunk-DSNIVABS.js +7 -0
  52. package/dist/chunks/{chunk-A67TLHES.js → chunk-DUJAQS7I.js} +1 -1
  53. package/dist/chunks/{chunk-M4TIOVOP.js → chunk-DUPAU76G.js} +1 -1
  54. package/dist/chunks/{chunk-TCEEQLD4.js → chunk-E5CN62HO.js} +1 -1
  55. package/dist/chunks/{chunk-APNR444T.js → chunk-E7DYXF6G.js} +1 -1
  56. package/dist/chunks/{chunk-ZBJ44DRL.js → chunk-EBBDSEEU.js} +1 -1
  57. package/dist/chunks/{chunk-GP5MFCGO.js → chunk-ECQKK4JU.js} +1 -1
  58. package/dist/chunks/chunk-EDOTKQ7L.js +15 -0
  59. package/dist/chunks/{chunk-PY5A73YH.js → chunk-EVH5524J.js} +1 -1
  60. package/dist/chunks/{chunk-LOEU4R4Z.js → chunk-EW62WSXG.js} +1 -1
  61. package/dist/chunks/{chunk-XUJA3RZD.js → chunk-EXLKCL5I.js} +1 -1
  62. package/dist/chunks/{chunk-U3J7VS56.js → chunk-FBYA6LLM.js} +1 -1
  63. package/dist/chunks/{chunk-SOCGBVML.js → chunk-FVVOHGQE.js} +1 -1
  64. package/dist/chunks/{chunk-QLW5DCM4.js → chunk-FWTBSC7Z.js} +1 -1
  65. package/dist/chunks/{chunk-2OET5FWH.js → chunk-G2BNLRPU.js} +1 -1
  66. package/dist/chunks/{chunk-DBV6AB6T.js → chunk-G3LWP5CH.js} +1 -1
  67. package/dist/chunks/{chunk-YIOT5B5Z.js → chunk-G6HUSV7F.js} +1 -1
  68. package/dist/chunks/{chunk-7V2PXIVW.js → chunk-GCPPL24C.js} +1 -1
  69. package/dist/chunks/{chunk-3AXMZRAB.js → chunk-GCXUSXB4.js} +1 -1
  70. package/dist/chunks/{chunk-GZWYJT4C.js → chunk-GHEGWXH2.js} +1 -1
  71. package/dist/chunks/{chunk-JRBPVMQO.js → chunk-GJCVOEC2.js} +1 -1
  72. package/dist/chunks/{chunk-ELQBQ2O5.js → chunk-GN5IAG3M.js} +1 -1
  73. package/dist/chunks/{chunk-HTFQFHPR.js → chunk-H34SGIVS.js} +1 -1
  74. package/dist/chunks/{chunk-O7IYJGOR.js → chunk-IFCMWIRB.js} +1 -1
  75. package/dist/chunks/{pkg-EDJQLCNP.js → chunk-ITQPDXXA.js} +1 -1
  76. package/dist/chunks/{chunk-XK3W6Q5I.js → chunk-IZ4GFKGR.js} +1 -1
  77. package/dist/chunks/{chunk-CJLRNGWY.js → chunk-JMAXX2I6.js} +1 -1
  78. package/dist/chunks/{chunk-V5A4EBV3.js → chunk-JOXGYP5S.js} +1 -1
  79. package/dist/chunks/{chunk-2QSNFVB6.js → chunk-K5YO4UD7.js} +1 -1
  80. package/dist/chunks/{chunk-WZ2R4Z7N.js → chunk-KRPY5FHJ.js} +1 -1
  81. package/dist/chunks/{chunk-7E6UJXLR.js → chunk-KV2DYFUG.js} +1 -1
  82. package/dist/chunks/{chunk-3KSTUMR6.js → chunk-M73W4XNR.js} +1 -1
  83. package/dist/chunks/{chunk-BHJLCFQ4.js → chunk-MXURT5TX.js} +1 -1
  84. package/dist/chunks/chunk-MY4MONOH.js +7 -0
  85. package/dist/chunks/{chunk-SBBD2Q5A.js → chunk-NAU6URTI.js} +1 -1
  86. package/dist/chunks/{chunk-B3ETPBO4.js → chunk-NEUQZYBL.js} +2 -2
  87. package/dist/chunks/{chunk-3P4Y46MS.js → chunk-NIS66BFX.js} +2 -2
  88. package/dist/chunks/{chunk-RIAOB3RF.js → chunk-NNIQPNGP.js} +1 -1
  89. package/dist/chunks/chunk-NTUDWWSL.js +14 -0
  90. package/dist/chunks/{chunk-AEOG4E5G.js → chunk-O4CQRV2G.js} +1 -1
  91. package/dist/chunks/{chunk-QZEZCUUZ.js → chunk-OZPBJWYU.js} +13 -13
  92. package/dist/chunks/chunk-PBX7RJ2K.js +12 -0
  93. package/dist/chunks/{chunk-T3S63EA3.js → chunk-QBOY2CXL.js} +1 -1
  94. package/dist/chunks/{chunk-63DO6KMD.js → chunk-QJAIUZVZ.js} +3 -3
  95. package/dist/chunks/{chunk-JULKMXVP.js → chunk-QKWJN6OE.js} +1 -1
  96. package/dist/chunks/{chunk-37DIJCWK.js → chunk-QQA2OMXJ.js} +1 -1
  97. package/dist/chunks/{chunk-HNOZM6D4.js → chunk-QY5RG6BB.js} +1 -1
  98. package/dist/chunks/{chunk-K2R3QPOC.js → chunk-R5ZLTWKB.js} +1 -1
  99. package/dist/chunks/chunk-RBIHS5QI.js +7 -0
  100. package/dist/chunks/{chunk-T34C75TI.js → chunk-RCUDI7OF.js} +1 -1
  101. package/dist/chunks/{chunk-7EJ3BZ67.js → chunk-RZY54T7B.js} +1 -1
  102. package/dist/chunks/{chunk-3DDEBTCC.js → chunk-SNCQOAFU.js} +1 -1
  103. package/dist/chunks/{chunk-GP2FXUFE.js → chunk-SR2SHYJA.js} +1 -1
  104. package/dist/chunks/{chunk-FXEMEIST.js → chunk-T2FCF46I.js} +1 -1
  105. package/dist/chunks/{chunk-IHRM7L23.js → chunk-T5TOBY4D.js} +1 -1
  106. package/dist/chunks/{chunk-EKB2DYCQ.js → chunk-TCB4XM23.js} +1 -1
  107. package/dist/chunks/{chunk-YRK2BCTJ.js → chunk-TD7AL545.js} +1 -1
  108. package/dist/chunks/{chunk-4MP4HVBG.js → chunk-TGPYWWX3.js} +1 -1
  109. package/dist/chunks/{chunk-6V67VZJD.js → chunk-TMXIVQ45.js} +1 -1
  110. package/dist/chunks/{chunk-J52UJYOK.js → chunk-TRZDIAX3.js} +1 -1
  111. package/dist/chunks/{chunk-7BML2OR6.js → chunk-U6KJOCXX.js} +1 -1
  112. package/dist/chunks/{chunk-Y55DGB3L.js → chunk-UIJYRI3G.js} +1 -1
  113. package/dist/chunks/{chunk-NAXFG37F.js → chunk-UNASHUWQ.js} +1 -1
  114. package/dist/chunks/chunk-UOQGI6CL.js +8 -0
  115. package/dist/chunks/{chunk-753RQ6WV.js → chunk-USYEDO7R.js} +1 -1
  116. package/dist/chunks/{chunk-YKNHA3RN.js → chunk-UVE5COCG.js} +1 -1
  117. package/dist/chunks/{chunk-3RXEJWYM.js → chunk-UZTDRGCW.js} +1 -1
  118. package/dist/chunks/{chunk-F76MNMH3.js → chunk-VR5ROBAO.js} +1 -1
  119. package/dist/chunks/{chunk-JESNVRVR.js → chunk-VRH7LWOC.js} +1 -1
  120. package/dist/chunks/{chunk-QIPUFI6P.js → chunk-VU3RBRDH.js} +1 -1
  121. package/dist/chunks/{chunk-AQA4JVKA.js → chunk-VZKQP67Q.js} +1 -1
  122. package/dist/chunks/{chunk-ZRJKGAUT.js → chunk-W634OFUG.js} +3 -3
  123. package/dist/chunks/{chunk-SKLRHAGH.js → chunk-WFCGAYP5.js} +1 -1
  124. package/dist/chunks/{chunk-5GOQ3FBV.js → chunk-WFOJ2LEA.js} +1 -1
  125. package/dist/chunks/{chunk-KL6HNOFN.js → chunk-WGVIQTOI.js} +1 -1
  126. package/dist/chunks/{chunk-IHNEF3BG.js → chunk-WGWGDC3N.js} +1 -1
  127. package/dist/chunks/{chunk-C4XT3PG4.js → chunk-WKYFWE37.js} +1 -1
  128. package/dist/chunks/{chunk-YHFZIUXF.js → chunk-XBWISZCG.js} +1 -1
  129. package/dist/chunks/chunk-XRIM4BUF.js +7 -0
  130. package/dist/chunks/chunk-Y5YXAXK3.js +13 -0
  131. package/dist/chunks/{chunk-YEPB52XE.js → chunk-Y6WXTTZS.js} +1 -1
  132. package/dist/chunks/{chunk-45UDRX4C.js → chunk-ZBZPCKTW.js} +1 -1
  133. package/dist/chunks/{chunk-KUNFE2M6.js → chunk-ZCXKEZS4.js} +1 -1
  134. package/dist/chunks/{chunk-MDWYXLDB.js → chunk-ZERZX6BZ.js} +3 -3
  135. package/dist/chunks/{chunk-2B7U6BB5.js → chunk-ZGKJLJ47.js} +1 -1
  136. package/dist/chunks/chunk-ZS2WS4AM.js +7 -0
  137. package/dist/chunks/clear-RU72IUXU.js +8 -0
  138. package/dist/chunks/compile-vercel-config-DRTOWZK6.js +7 -0
  139. package/dist/chunks/config-MNRKCDQA.js +7 -0
  140. package/dist/chunks/config-PIFTR3UF.js +8 -0
  141. package/dist/chunks/connect-git-provider-AWEOEEOO.js +7 -0
  142. package/dist/chunks/delete-47BF6SIO.js +9 -0
  143. package/dist/chunks/delete-QNSKEIGO.js +10 -0
  144. package/dist/chunks/{detect-projects-A4H2ZEAP.js → detect-projects-K7SVMH5T.js} +1 -1
  145. package/dist/chunks/detect-services-GXKWIX52.js +7 -0
  146. package/dist/chunks/disable-SBFW3F7B.js +7 -0
  147. package/dist/chunks/discard-DUZR3OWZ.js +14 -0
  148. package/dist/chunks/edit-6BQ7FZC4.js +8 -0
  149. package/dist/chunks/edit-WO7FLNW2.js +9 -0
  150. package/dist/chunks/enable-OK4MR3Z6.js +7 -0
  151. package/dist/chunks/{exec-7LB36K52.js → exec-UV73J2ZB.js} +1 -1
  152. package/dist/chunks/{export-AI2O22W5.js → export-N5F7EY7B.js} +1 -1
  153. package/dist/chunks/future-5AQIYILU.js +7 -0
  154. package/dist/chunks/generate-cert-for-deploy-7ERAHVOV.js +7 -0
  155. package/dist/chunks/image-IRC2NJVA.js +7 -0
  156. package/dist/chunks/import-builders-OAGJKQNW.js +7 -0
  157. package/dist/chunks/{inspect-4A67JORH.js → inspect-35WHAXL2.js} +1 -1
  158. package/dist/chunks/inspect-5FKOSDTK.js +13 -0
  159. package/dist/chunks/inspect-ACNGICEF.js +9 -0
  160. package/dist/chunks/{inspect-3NMNI7GY.js → inspect-GX34WQGR.js} +1 -1
  161. package/dist/chunks/{inspect-OM5S5YQ2.js → inspect-UDUI3ETL.js} +1 -1
  162. package/dist/chunks/{list-NEV4FBTY.js → list-BINT67HQ.js} +1 -1
  163. package/dist/chunks/list-TRFGY6WP.js +12 -0
  164. package/dist/chunks/{list-TUJ7HCQK.js → list-VVND632B.js} +1 -1
  165. package/dist/chunks/login-MYVTOBRG.js +9 -0
  166. package/dist/chunks/login-SOZ5ME3D.js +7 -0
  167. package/dist/chunks/logs-EMAGPMIZ.js +7 -0
  168. package/dist/chunks/{ls-OVM2DZYL.js → ls-2MJY6EKD.js} +1 -1
  169. package/dist/chunks/{ls-CVO4MCX5.js → ls-6HYUGM62.js} +1 -1
  170. package/dist/chunks/{ls-COOTTCRW.js → ls-7OZ5TSNW.js} +1 -1
  171. package/dist/chunks/{ls-UY3KCDSF.js → ls-HTNWWU45.js} +1 -1
  172. package/dist/chunks/ls-KU35N6DP.js +8 -0
  173. package/dist/chunks/ls-WFC636QK.js +11 -0
  174. package/dist/chunks/ls-YT3MWU4U.js +8 -0
  175. package/dist/chunks/mutate-JVDDZLVE.js +9 -0
  176. package/dist/chunks/native-self-update-75UJCHGZ.js +7 -0
  177. package/dist/chunks/notifications-CXDBNBHU.js +7 -0
  178. package/dist/chunks/open-3CD5ZNKU.js +7 -0
  179. package/dist/chunks/openapi-KYC6JIXI.js +7 -0
  180. package/dist/chunks/permissions-PNBST4WN.js +7 -0
  181. package/dist/chunks/{plugin-offer-4YTKDZGS.js → plugin-offer-URT5JNEU.js} +1 -1
  182. package/dist/chunks/prompt-missing-credentials-Q5JCRP3R.js +7 -0
  183. package/dist/chunks/publish-LH5CIXCP.js +15 -0
  184. package/dist/chunks/pull-XLZXPTLS.js +7 -0
  185. package/dist/chunks/purchase-domain-if-available-PDJGZ6MY.js +7 -0
  186. package/dist/chunks/push-XB57XK6H.js +7 -0
  187. package/dist/chunks/{query-NIMDIFLO.js → query-POTX2HYL.js} +1 -1
  188. package/dist/chunks/reauthenticate-CRI4D2BQ.js +7 -0
  189. package/dist/chunks/reorder-KUQ5EQBV.js +10 -0
  190. package/dist/chunks/reply-LO76EKEE.js +9 -0
  191. package/dist/chunks/resolve-KZJYJJLA.js +12 -0
  192. package/dist/chunks/resolve-agent-team-N7QMB7UO.js +7 -0
  193. package/dist/chunks/restore-L3T5KOG7.js +16 -0
  194. package/dist/chunks/rm-7UKXTIZW.js +8 -0
  195. package/dist/chunks/rm-AKKEQN32.js +8 -0
  196. package/dist/chunks/rm-ELC57ULY.js +8 -0
  197. package/dist/chunks/rm-K7XEZ7TY.js +8 -0
  198. package/dist/chunks/rm-MOYCAXNO.js +8 -0
  199. package/dist/chunks/routes-S75L7Z7A.js +7 -0
  200. package/dist/chunks/rule-inspect-ZCS4EBKR.js +8 -0
  201. package/dist/chunks/{schema-44U7GOQE.js → schema-P4T4GQBF.js} +1 -1
  202. package/dist/chunks/schema-TOVLKRPJ.js +14 -0
  203. package/dist/chunks/select-org-6NEM7F25.js +7 -0
  204. package/dist/chunks/set-NXFB6JXG.js +7 -0
  205. package/dist/chunks/setup-and-link-L67MMSUD.js +7 -0
  206. package/dist/chunks/{skills-XOH4Q7KK.js → skills-DZYJV7BE.js} +3 -3
  207. package/dist/chunks/statuspage-45LJ2XYT.js +7 -0
  208. package/dist/chunks/tags-5AV6WAOF.js +7 -0
  209. package/dist/chunks/{types-6W3KAE2A.js → types-YA6BOCRV.js} +1 -1
  210. package/dist/chunks/{update-YLFMSPQF.js → update-YSAO36V7.js} +1 -1
  211. package/dist/chunks/validate-config-XWZ7ZZ3G.js +7 -0
  212. package/dist/commands/build/index.js +1 -6
  213. package/dist/commands/deploy/index.js +14 -14
  214. package/dist/commands/dev/index.js +3 -3
  215. package/dist/commands/env/index.js +1 -1
  216. package/dist/commands/link/index.js +1 -1
  217. package/dist/commands/list/index.js +1 -1
  218. package/dist/commands/project/index.js +1 -1
  219. package/dist/commands-account.js +112 -91
  220. package/dist/commands-ai.js +2 -2
  221. package/dist/commands-blob.js +1 -1
  222. package/dist/commands-core.js +62 -44
  223. package/dist/commands-deployments.js +9 -6
  224. package/dist/commands-flags.js +4 -3
  225. package/dist/commands-integrations.js +98 -74
  226. package/dist/commands-observability.js +5 -5
  227. package/dist/commands-routing.js +154 -162
  228. package/dist/help.js +1 -1
  229. package/dist/index.js +5 -5
  230. package/dist/internal-build.js +1 -1
  231. package/dist/native-download.js +1 -1
  232. package/dist/package.json +58 -59
  233. package/dist/root-help-commands.mjs +1 -1
  234. package/dist/version.mjs +1 -1
  235. package/package.json +51 -52
  236. package/dist/chunks/add-3MWFJH54.js +0 -8
  237. package/dist/chunks/add-CJWCA3MM.js +0 -8
  238. package/dist/chunks/add-GLCVYEEN.js +0 -8
  239. package/dist/chunks/build-6RK6VECG.js +0 -7
  240. package/dist/chunks/chunk-2PYFJXKS.js +0 -14
  241. package/dist/chunks/chunk-5SMV2PPI.js +0 -10
  242. package/dist/chunks/chunk-7A5WO5KA.js +0 -8
  243. package/dist/chunks/chunk-CJHVHB2F.js +0 -8
  244. package/dist/chunks/chunk-EGPVNTKP.js +0 -7
  245. package/dist/chunks/chunk-GJB72ITS.js +0 -12
  246. package/dist/chunks/chunk-H3SJJO6S.js +0 -10
  247. package/dist/chunks/chunk-INH6RXBH.js +0 -9
  248. package/dist/chunks/chunk-IU6PHFPQ.js +0 -7
  249. package/dist/chunks/chunk-KAUKCHQF.js +0 -10
  250. package/dist/chunks/chunk-NDWGYZRT.js +0 -10
  251. package/dist/chunks/chunk-OLAG7Y3P.js +0 -10
  252. package/dist/chunks/chunk-TK2ILW2O.js +0 -21
  253. package/dist/chunks/chunk-WKZ6JSGZ.js +0 -7
  254. package/dist/chunks/chunk-X65XZSWS.js +0 -10
  255. package/dist/chunks/cjs-2SMN43VH.js +0 -54
  256. package/dist/chunks/clear-375VKVXY.js +0 -8
  257. package/dist/chunks/compile-vercel-config-LNRUSKTH.js +0 -7
  258. package/dist/chunks/config-GOYBATSI.js +0 -8
  259. package/dist/chunks/config-VAW454ZH.js +0 -7
  260. package/dist/chunks/connect-git-provider-7KRYVDFS.js +0 -7
  261. package/dist/chunks/delete-3SN6XFOW.js +0 -10
  262. package/dist/chunks/delete-W6BZHLGP.js +0 -9
  263. package/dist/chunks/detect-services-6L57MV5F.js +0 -7
  264. package/dist/chunks/disable-UUV5MYYH.js +0 -7
  265. package/dist/chunks/discard-Y6ZITZ2P.js +0 -14
  266. package/dist/chunks/edit-CVMUITFG.js +0 -9
  267. package/dist/chunks/edit-LLRI57RF.js +0 -8
  268. package/dist/chunks/enable-TFA6XWAA.js +0 -7
  269. package/dist/chunks/future-EZEU2CBY.js +0 -7
  270. package/dist/chunks/generate-cert-for-deploy-QP5BUOJL.js +0 -7
  271. package/dist/chunks/image-YLUF7SHR.js +0 -7
  272. package/dist/chunks/import-builders-ANLKHIYK.js +0 -7
  273. package/dist/chunks/inspect-3TRAN3SP.js +0 -9
  274. package/dist/chunks/inspect-VEUY4QJ2.js +0 -13
  275. package/dist/chunks/list-DJKKVFUL.js +0 -12
  276. package/dist/chunks/login-4HCFKDKL.js +0 -7
  277. package/dist/chunks/login-EPBJQDEK.js +0 -9
  278. package/dist/chunks/logs-Q7XXVFR3.js +0 -7
  279. package/dist/chunks/ls-3TKRCF4T.js +0 -8
  280. package/dist/chunks/ls-LS5J5ERG.js +0 -11
  281. package/dist/chunks/ls-OQQTUQFN.js +0 -8
  282. package/dist/chunks/mutate-I6QWCURL.js +0 -9
  283. package/dist/chunks/notifications-UKC5Z6AH.js +0 -7
  284. package/dist/chunks/open-CYATUDTT.js +0 -7
  285. package/dist/chunks/openapi-B7WSK7AU.js +0 -7
  286. package/dist/chunks/permissions-4ZYPHPOZ.js +0 -7
  287. package/dist/chunks/prompt-missing-credentials-4OKJMYW5.js +0 -7
  288. package/dist/chunks/publish-N6E7VTRK.js +0 -15
  289. package/dist/chunks/pull-LPIT3XUR.js +0 -7
  290. package/dist/chunks/purchase-domain-if-available-IS6UDPJT.js +0 -7
  291. package/dist/chunks/push-ETLU6OCC.js +0 -7
  292. package/dist/chunks/reauthenticate-TESIUM6U.js +0 -7
  293. package/dist/chunks/reorder-PQU2BQEE.js +0 -10
  294. package/dist/chunks/reply-RKDDYV5I.js +0 -9
  295. package/dist/chunks/resolve-ZF7BFXIW.js +0 -12
  296. package/dist/chunks/resolve-agent-team-QSIJ665W.js +0 -7
  297. package/dist/chunks/restore-U5A3BEFQ.js +0 -16
  298. package/dist/chunks/rm-7H5O3T7G.js +0 -8
  299. package/dist/chunks/rm-EPPMQEAV.js +0 -8
  300. package/dist/chunks/rm-FNMW2FPM.js +0 -8
  301. package/dist/chunks/rm-OZIA3DFM.js +0 -8
  302. package/dist/chunks/rm-W3VOR2ED.js +0 -8
  303. package/dist/chunks/routes-BLE5XZJE.js +0 -7
  304. package/dist/chunks/rule-inspect-YAVRRGAP.js +0 -8
  305. package/dist/chunks/schema-6SAZ7T2S.js +0 -14
  306. package/dist/chunks/select-org-L5FJVL5Q.js +0 -7
  307. package/dist/chunks/set-3NQXDGJV.js +0 -7
  308. package/dist/chunks/setup-and-link-H36NRP3A.js +0 -7
  309. package/dist/chunks/tags-CRG27GFL.js +0 -7
  310. /package/dist/chunks/{chunk-OO572JUC.js → chunk-DBT6PGEH.js} +0 -0
@@ -4,7 +4,7 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{createCertForCns,extractDomain,isWildcardAlias,setupDomain}from"./chunks/chunk-XUJA3RZD.js";import"./chunks/chunk-O7IYJGOR.js";import{joinWords}from"./chunks/chunk-4VFYJU37.js";import{api,tryOpenApiFallback}from"./chunks/chunk-YIOT5B5Z.js";import"./chunks/chunk-GHAY4PSD.js";import{list_item_default}from"./chunks/chunk-BTI5TG6Q.js";import{collectList,decodeListCursor,sliceList}from"./chunks/chunk-XBOGVOV5.js";import{getTeamBillingUrl}from"./chunks/chunk-XR6QY7RR.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-NAXFG37F.js";import"./chunks/chunk-4ELZOAQH.js";import"./chunks/chunk-JUAHDOL6.js";import"./chunks/chunk-UI2H2EIM.js";import"./chunks/chunk-UUDE44NV.js";import{ellipsis}from"./chunks/chunk-AKOYIH3A.js";import{box}from"./chunks/chunk-LM3YPF3K.js";import{did_you_mean_default}from"./chunks/chunk-DWZBL4NK.js";import{OpenApiCache,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-T3S63EA3.js";import{email}from"./chunks/chunk-6IDNVZZR.js";import{isValidName}from"./chunks/chunk-PADL3C6Z.js";import{handleValidationError,outputError,parseTimeFlag,validateOptionalIntegerRange,validateTimeBound,validateTimeOrder}from"./chunks/chunk-LD42X7ZH.js";import{getProtectionForDeploymentAlias,getProtectionForProductionDomain,readEnabledProtection}from"./chunks/chunk-AEOG4E5G.js";import"./chunks/chunk-VT6RIZJH.js";import"./chunks/chunk-TOTTVS5P.js";import{ensureLink}from"./chunks/chunk-NDWGYZRT.js";import{getDeployment,toHost}from"./chunks/chunk-QIPUFI6P.js";import{mapCertError}from"./chunks/chunk-6KCYUYUM.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-ZBJ44DRL.js";import{require_tar_fs}from"./chunks/chunk-WZ2R4Z7N.js";import{NO_RETRY,TEAM_BUDGET,budgetAmountDollars,budgetPauses,budgetStatePayload,buy,canPromptForCharge,deleteCertById,findBudget,formatUsd,formatUsdWhole,getDomains,getProjectDomain,getTeamMemberByIdentifier,getTeamSpend,getWebhook,hasPauseThreshold,isDomainExternal,listBudgetAlerts,listBudgets,pausePercentsOutside100,percentUsed,removeAliasById,removeBudget,removeReceipt,setBudget,setSavedReceipt,spendDollars,spendPayload,teamMemberLabel,thresholdsForSet,toBudgetState}from"./chunks/chunk-YKNHA3RN.js";import{require_cjs}from"./chunks/chunk-5GOQ3FBV.js";import"./chunks/chunk-62FZFXPJ.js";import{getAliases}from"./chunks/chunk-QR7PY5JS.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import{require_execa}from"./chunks/chunk-T34C75TI.js";import"./chunks/chunk-GD7AV7BO.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import"./chunks/chunk-PFD7LETF.js";import{MAX_LIST_LIMIT,getNextPageCommand,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-B3ETPBO4.js";import{validateLsArgs}from"./chunks/chunk-T2SRGJPU.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-44XDCARR.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-OTJNOMRV.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-2QSNFVB6.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand as getSubcommand3}from"./chunks/chunk-ETV3C2CV.js";import{getTeams}from"./chunks/chunk-YEPB52XE.js";import{CREDIT_TYPE_LABELS,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,addSubcommand10 as addSubcommand4,addSubcommand11 as addSubcommand5,addSubcommand2 as addSubcommand,addSubcommand4 as addSubcommand2,addSubcommand5 as addSubcommand3,addonSubcommand,agentRunsCommand,alertsListSubcommand2 as alertsListSubcommand,alertsSubcommand2 as alertsSubcommand,aliasCommand,backupsSubcommand,bisectCommand,budgetCommand,buyCommand,certsCommand,connectSubcommand,createSubcommand10 as createSubcommand2,createSubcommand7 as createSubcommand,creditsSubcommand,disconnectSubcommand,dnsCommand,domainSubcommand,getCommandAliases,getSubcommand,getSubcommand5 as getSubcommand2,gitCommand,globalConfigCommand,importSubcommand,initCommand,inspectSubcommand,inspectSubcommand12 as inspectSubcommand3,inspectSubcommand14 as inspectSubcommand4,inspectSubcommand6 as inspectSubcommand2,inviteSubcommand,isCustomEnvironmentAddonAlias,issueSubcommand,itemsSubcommand,listSubcommand,listSubcommand11 as listSubcommand4,listSubcommand15 as listSubcommand5,listSubcommand18 as listSubcommand6,listSubcommand24 as listSubcommand7,listSubcommand25 as listSubcommand8,listSubcommand28 as listSubcommand9,listSubcommand29 as listSubcommand10,listSubcommand3 as listSubcommand2,listSubcommand5 as listSubcommand3,membersInviteSubcommand,membersRemoveSubcommand,membersSubcommand2 as membersSubcommand,organizationsCommand,proSubcommand,projectsSubcommand,removeSubcommand15 as removeSubcommand5,removeSubcommand16 as removeSubcommand6,removeSubcommand17 as removeSubcommand7,removeSubcommand2 as removeSubcommand,removeSubcommand4 as removeSubcommand2,removeSubcommand7 as removeSubcommand3,removeSubcommand9 as removeSubcommand4,requestSubcommand,setSubcommand,setSubcommand3 as setSubcommand2,ssoSubcommand,switchSubcommand,teamsAddSubcommand,teamsCommand,teamsCreateSubcommand,teamsListSubcommand,teamsSubcommand,tokensCommand,tokensSubcommand,traceSubcommand,updateSubcommand2 as updateSubcommand,updateSubcommand6 as updateSubcommand2,updateSubcommand9 as updateSubcommand3,webhooksCommand}from"./chunks/chunk-2PYFJXKS.js";import"./chunks/chunk-3KSTUMR6.js";import"./chunks/chunk-EZL4AJXH.js";import"./chunks/chunk-45UDRX4C.js";import"./chunks/chunk-J52UJYOK.js";import"./chunks/chunk-GZWYJT4C.js";import"./chunks/chunk-3AXMZRAB.js";import"./chunks/chunk-FQVSBXRY.js";import"./chunks/chunk-GP5MFCGO.js";import"./chunks/chunk-V5A4EBV3.js";import"./chunks/chunk-IECNFRTK.js";import"./chunks/chunk-A6F3EE2O.js";import"./chunks/chunk-K2R3QPOC.js";import"./chunks/chunk-IHRM7L23.js";import"./chunks/chunk-HTFQFHPR.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-DBV6AB6T.js";import"./chunks/chunk-37DIJCWK.js";import"./chunks/chunk-7E6UJXLR.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-7V2PXIVW.js";import{printError}from"./chunks/chunk-D3GYYGSS.js";import{help}from"./chunks/chunk-33U57CNE.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getContextName,getScope}from"./chunks/chunk-IU6PHFPQ.js";import{TelemetryClient}from"./chunks/chunk-SBBD2Q5A.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,exitWithNonInteractiveError,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-KAUKCHQF.js";import"./chunks/chunk-QLW5DCM4.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getUser,getVercelDirectory,humanizePath,parseGitConfig,pluckRemoteUrls,require_pluralize,writeToConfigFile}from"./chunks/chunk-QZEZCUUZ.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-3LQ2ADXO.js";import"./chunks/chunk-MCP63EVQ.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments}from"./chunks/chunk-KIMIK4SG.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-JRBPVMQO.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-OCR5CRTH.js";import"./chunks/chunk-4SAVH3H7.js";import{AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainNotAvailable,DomainNotFound,DomainPaymentError,DomainPermissionDenied,DomainPriceChanged,DomainPurchasePending,DomainPurchaseRefundFailed,DomainPurchaseRefunded,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,NoAliasInConfig,NowError,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnsupportedTLD,UserAborted,isAPIError}from"./chunks/chunk-FXEMEIST.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-JESNVRVR.js";import{emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-ZRJKGAUT.js";import"./chunks/chunk-BLUPZPAS.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-PUKYAALC.js";import{formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getSameSubcommandSuggestionFlags,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-YPPDRKVC.js";import{chars_default}from"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-5O7CRJE5.js";import{toNodeReadable}from"./chunks/chunk-U3J7VS56.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var AgentRunsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandTrace(actual){this.trackCliSubcommand({subcommand:"trace",value:actual})}trackCliSubcommandProjects(actual){this.trackCliSubcommand({subcommand:"projects",value:actual})}};var import_chalk2=__toESM(require_source(),1);var AGENT_RUNS_API_BASE="https://vercel.com/api/observability/agent-runs",DEFAULT_TRACE_MAX_FIELD_LENGTH=8e3,MAX_TRACE_FIELD_LENGTH=5e4;function getAgentRunsApiBase(){return process.env.VERCEL_AGENT_RUNS_API_URL||AGENT_RUNS_API_BASE}function resolveAgentRunsWindow(since,until){if(!since)return;let from=parseTimeFlag(since),to=until?parseTimeFlag(until):new Date;return{from:Math.floor(from.getTime()/1e3),to:Math.floor(to.getTime()/1e3)}}function buildAgentRunsUrl(query){let url=new URL(getAgentRunsApiBase());url.searchParams.set("teamSlug",query.teamId),query.view==="team"?url.searchParams.set("view","team"):query.projectId&&url.searchParams.set("project",query.projectId),url.searchParams.set("environment",query.environment||"production");let window=query.window??resolveAgentRunsWindow(query.since,query.until);return window&&(url.searchParams.set("from",String(window.from)),url.searchParams.set("to",String(window.to))),typeof query.page=="number"&&url.searchParams.set("page",String(Math.max(1,Math.floor(query.page)))),typeof query.pageSize=="number"&&url.searchParams.set("pageSize",String(Math.max(1,Math.floor(query.pageSize)))),query.search&&url.searchParams.set("search",query.search),query.cursor&&url.searchParams.set("cursor",query.cursor),query.runId&&url.searchParams.set("runId",query.runId),query.trace&&url.searchParams.set("trace","1"),query.traceStreamId&&url.searchParams.set("traceStreamId",query.traceStreamId),query.traceAfterCursor&&url.searchParams.set("traceAfterCursor",query.traceAfterCursor),typeof query.traceBeforeChunk=="number"&&url.searchParams.set("traceBeforeChunk",String(query.traceBeforeChunk)),url.href}async function fetchAgentRuns(client,query){return client.fetch(buildAgentRunsUrl(query),{useCurrentTeam:!1})}var MISSING_PROJECT_SCOPE_MESSAGE="No linked project found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team> and --project <name>.",MISSING_TEAM_SCOPE_MESSAGE="No team scope found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team>.";async function resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject}){let flagScope=scopeFlag?.trim()||void 0,flagProject=projectFlag?.trim()||void 0;if(flagScope&&(flagProject||!requireProject))return{ok:!0,teamId:flagScope,projectId:flagProject,contextName:flagProject?`${flagScope}/${flagProject}`:flagScope};let linkedProject=await getLinkedProject(client);if(linkedProject.status==="error")return{ok:!1,exitCode:linkedProject.exitCode};if(linkedProject.status==="linked"){let{org,project}=linkedProject;if(flagScope&&flagScope!==org.id&&flagScope!==org.slug)return{ok:!1,exitCode:invalidArguments(client,`\`--scope ${flagScope}\` doesn't match the linked project's team. Pass \`--project <name>\` to query a project in that team.`)};let teamName=flagScope??org.slug,projectName=requireProject?flagProject??project.name:flagProject;return{ok:!0,teamId:flagScope??org.id,projectId:requireProject?flagProject??project.id:flagProject,contextName:projectName?`${teamName}/${projectName}`:teamName}}let message=requireProject?MISSING_PROJECT_SCOPE_MESSAGE:MISSING_TEAM_SCOPE_MESSAGE;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message}),output_manager_default.error(message),{ok:!1,exitCode:1}}function normalizeApiErrorText(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function handleAgentRunsApiError(client,err){if(isAPIError(err)){let reason=err.status===403?"forbidden":err.status===401?"not_authorized":err.status===404?AGENT_REASON.NOT_FOUND:err.status===429?"rate_limited":AGENT_REASON.API_ERROR;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:normalizeApiErrorText(err.serverMessage||err.message)})}else outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)});printError(err)}function invalidArguments(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),2}function normalizeTraceMaxFieldLength(value){return typeof value!="number"||!Number.isFinite(value)?DEFAULT_TRACE_MAX_FIELD_LENGTH:Math.min(Math.max(Math.floor(value),0),MAX_TRACE_FIELD_LENGTH)}function truncateLargeStrings(value,maxLength){return maxLength===0?value:typeof value=="string"?value.length<=maxLength?value:`${value.slice(0,maxLength)}... [truncated ${value.length-maxLength} chars]`:Array.isArray(value)?value.map(item=>truncateLargeStrings(item,maxLength)):value&&typeof value=="object"?Object.fromEntries(Object.entries(value).map(([key,entry])=>[key,truncateLargeStrings(entry,maxLength)])):value}import{createHash}from"node:crypto";var import_chalk=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib(),1);function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function quoteCommandArgument(value,placeholder){return/[\x00-\x1F\x7F]/.test(value)?placeholder:/^[A-Za-z0-9_./:=@%+,-]+$/.test(value)?value:`'${value.replaceAll("'",`'"'"'`)}'`}function asArray(value){return Array.isArray(value)?value.filter(isRecord):[]}function readString(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="string"&&value.length>0)return value}}function readNumber(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value}}function readRecord(record,...keys){if(record)for(let key of keys){let value=record[key];if(isRecord(value))return value}}function readTimestampMs(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value;if(typeof value=="string"&&value.length>0){let parsed=Date.parse(value);if(!Number.isNaN(parsed))return parsed}}}var PLACEHOLDER="-";function runId(run){return readString(run,"id","runId")??PLACEHOLDER}function formatRunStatus(run){let status=readString(run,"status","state");if(!status)return PLACEHOLDER;let label=(0,import_title.default)(status.replace(/[_-]+/g," ")),CIRCLE="\u25CF ";switch(status.toLowerCase()){case"completed":case"succeeded":case"success":case"ready":return import_chalk.default.green(CIRCLE)+label;case"error":case"errored":case"failed":case"timed out":case"timed_out":return import_chalk.default.red(CIRCLE)+label;case"running":case"in progress":case"in_progress":case"pending":case"queued":case"started":return import_chalk.default.yellow(CIRCLE)+label;case"canceled":case"cancelled":return import_chalk.default.gray(label);default:return label}}function runModel(run){return readString(run,"model")??PLACEHOLDER}function runTrigger(run){return readString(run,"trigger")??readString(readRecord(run,"trigger"),"label","type","name")??PLACEHOLDER}function runTitle(run){return readString(run,"title","name")}function runStartedAtMs(run){return readTimestampMs(run,"createdAt","startedAt","startTime")}function runDurationMs(run){let explicit=readNumber(run,"durationMs","duration");if(explicit!==void 0)return explicit;let start=readTimestampMs(run,"startedAt","createdAt","startTime"),end=readTimestampMs(run,"endedAt","completedAt","endTime");if(start!==void 0&&end!==void 0&&end>=start)return end-start}function runTotalTokens(run){let usage=readRecord(run,"usage")??run,total=readNumber(usage,"totalTokens","total");if(total!==void 0)return total;let input=readNumber(usage,"inputTokens","promptTokens","input"),output=readNumber(usage,"outputTokens","completionTokens","output");if(input!==void 0||output!==void 0)return(input??0)+(output??0)}function formatAge(timestampMs){if(timestampMs===void 0)return PLACEHOLDER;let delta=Date.now()-timestampMs;return delta<1e3?"just now":`${(0,import_ms.default)(delta)} ago`}function formatTimestamp(timestampMs){return timestampMs===void 0?PLACEHOLDER:new Date(timestampMs).toISOString()}function formatDurationMs(value){return value===void 0?PLACEHOLDER:value<1e3?`${Math.round(value)}ms`:value<6e4?`${(value/1e3).toFixed(1)}s`:(0,import_ms.default)(Math.round(value))}function formatCount(value){return value===void 0?PLACEHOLDER:value<1e4?String(value):value<1e6?`${(value/1e3).toFixed(1)}k`:`${(value/1e6).toFixed(1)}m`}var MAX_TOKEN_LENGTH=8192,MAX_SOURCE_OFFSET=1e4,OTEL_CURSOR_PATTERN=/^[A-Za-z0-9_-]{1,4096}$/,SOURCE_CURSOR_PATTERN=/^[0-9a-z]+\.[0-9a-z]+(\.[0-9a-z]+\.[0-9a-z]+(\.[A-Za-z0-9_-]{1,4096})?)?$/,FILTERS_LENGTH=22;function isSourceOffset(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>=0&&value<=MAX_SOURCE_OFFSET}function isEpoch(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>0}function isWindow(value){if(!isRecord(value))return!1;let{from,to}=value;return isEpoch(from)&&isEpoch(to)&&from<to}function encodeAgentRunsSourceCursor(offsets){if(!offsets)return;let{otel,workflow,otelCursor}=offsets;if(!isSourceOffset(otel)||!isSourceOffset(workflow))return;let parts=[otel.toString(36),workflow.toString(36)],range=offsets.otelRange;if(range!==void 0){if(!isWindow(range))return;parts.push(range.from.toString(36),range.to.toString(36))}if(otelCursor!==void 0){if(range===void 0||typeof otelCursor!="string"||!OTEL_CURSOR_PATTERN.test(otelCursor))return;parts.push(otelCursor)}return parts.join(".")}function getAgentRunsListFilters({teamId,projectId,environment,search}){return createHash("sha256").update(JSON.stringify([teamId,projectId??null,environment||"production",search||null])).digest("base64url").slice(0,FILTERS_LENGTH)}function encodeAgentRunsListContinuation(continuation){return Buffer.from(JSON.stringify(continuation),"utf8").toString("base64url")}function parseAgentRunsListContinuation(value){if(value.length===0||value.length>MAX_TOKEN_LENGTH||!/^[A-Za-z0-9_-]+$/.test(value))return;let decoded;try{decoded=JSON.parse(Buffer.from(value,"base64url").toString("utf8"))}catch{return}if(!(!isRecord(decoded)||decoded.version!==1||typeof decoded.cursor!="string"||!SOURCE_CURSOR_PATTERN.test(decoded.cursor)||typeof decoded.page!="number"||!Number.isSafeInteger(decoded.page)||decoded.page<2||typeof decoded.filters!="string"||decoded.filters.length!==FILTERS_LENGTH||!isWindow(decoded.window)))return{version:1,cursor:decoded.cursor,page:decoded.page,window:{from:decoded.window.from,to:decoded.window.to},filters:decoded.filters}}var AgentRunsQueryTelemetryClient=class extends TelemetryClient{trackCliOptionEnvironment(value){value&&this.trackCliOption({option:"environment",value:["production","preview"].includes(value)?value:this.redactedValue})}trackCliOptionSince(value){value&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(value){value&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionProject(value){value&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagJson(value){value&&this.trackCliFlag("json")}};var AgentRunsListTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliOptionQuery(value){value&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(value){value&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionNext(value){value!==void 0&&this.trackCliOption({option:"next",value:/^\d+$/.test(value)?value:this.redactedValue})}trackCliOptionPage(value){typeof value=="number"&&this.trackCliOption({option:"page",value:String(value)})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:String(value)})}};var DEFAULT_LIST_WINDOW_SECONDS=12*60*60;function getDefaultListWindow(){let to=Math.floor(Date.now()/1e3);return{from:to-DEFAULT_LIST_WINDOW_SECONDS,to}}function buildListPageCommand({argv,window,next}){let args=argv.slice(2),delimiter=args.indexOf("--"),own=delimiter===-1?args:args.slice(0,delimiter),passthrough=delimiter===-1?[]:args.slice(delimiter),kept=argv.slice(0,2);for(let i=0;i<own.length;i++){let arg=own[i],name=normalizeFlagName(arg);if(name==="--since"||name==="--until"){arg.includes("=")||i++;continue}kept.push(arg)}return window&&kept.push("--since",new Date(window.from*1e3).toISOString(),"--until",new Date(window.to*1e3).toISOString()),getNextPageCommand([...kept,...passthrough],next,["--page"])}function printNextPage(command){output_manager_default.print(`
7
+ import{createCertForCns,extractDomain,isWildcardAlias,setupDomain}from"./chunks/chunk-EXLKCL5I.js";import"./chunks/chunk-IFCMWIRB.js";import{joinWords}from"./chunks/chunk-4VFYJU37.js";import{api,tryOpenApiFallback}from"./chunks/chunk-G6HUSV7F.js";import"./chunks/chunk-GHAY4PSD.js";import{list_item_default}from"./chunks/chunk-BTI5TG6Q.js";import{collectList,decodeListCursor,sliceList}from"./chunks/chunk-D4ZEJM3T.js";import{getTeamBillingUrl}from"./chunks/chunk-XR6QY7RR.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-UNASHUWQ.js";import"./chunks/chunk-4ELZOAQH.js";import"./chunks/chunk-JUAHDOL6.js";import"./chunks/chunk-UI2H2EIM.js";import"./chunks/chunk-UUDE44NV.js";import{ellipsis}from"./chunks/chunk-AKOYIH3A.js";import{box}from"./chunks/chunk-LM3YPF3K.js";import{did_you_mean_default}from"./chunks/chunk-DWZBL4NK.js";import{OpenApiCache,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-QBOY2CXL.js";import{email}from"./chunks/chunk-6IDNVZZR.js";import{isValidName}from"./chunks/chunk-PADL3C6Z.js";import{writeJsonError}from"./chunks/chunk-CBVVVYUP.js";import{handleValidationError,outputError,parseTimeFlag,validateOptionalIntegerRange,validateTimeBound,validateTimeOrder}from"./chunks/chunk-AX3V7N44.js";import{getProtectionForDeploymentAlias,getProtectionForProductionDomain,readEnabledProtection}from"./chunks/chunk-O4CQRV2G.js";import"./chunks/chunk-VT6RIZJH.js";import"./chunks/chunk-TOTTVS5P.js";import{ensureLink}from"./chunks/chunk-7DM3IJ7L.js";import{getDeployment,toHost}from"./chunks/chunk-VU3RBRDH.js";import{mapCertError}from"./chunks/chunk-4VF5BZJP.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-EBBDSEEU.js";import{require_tar_fs}from"./chunks/chunk-KRPY5FHJ.js";import{NO_RETRY,TEAM_BUDGET,budgetAmountDollars,budgetPauses,budgetStatePayload,buy,canPromptForCharge,deleteCertById,findBudget,formatUsd,formatUsdWhole,getDomains,getProjectDomain,getTeamMemberByIdentifier,getTeamSpend,getWebhook,hasPauseThreshold,isDomainExternal,listBudgetAlerts,listBudgets,pausePercentsOutside100,percentUsed,removeAliasById,removeBudget,removeReceipt,setBudget,setSavedReceipt,spendDollars,spendPayload,teamMemberLabel,thresholdsForSet,toBudgetState}from"./chunks/chunk-UVE5COCG.js";import{require_cjs}from"./chunks/chunk-WFOJ2LEA.js";import"./chunks/chunk-5M3WBT3N.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-43P35KUA.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"./chunks/chunk-C6GY2G73.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import"./chunks/chunk-PFD7LETF.js";import{DEFAULT_LIST_LIMIT,MAX_LIST_LIMIT,getNextPageCommand,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-NEUQZYBL.js";import{validateLsArgs}from"./chunks/chunk-BT5C6MCY.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-2RXUQ72I.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-K5YO4UD7.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand as getSubcommand3}from"./chunks/chunk-ETV3C2CV.js";import{printUnknownCommand}from"./chunks/chunk-4CQKN5TW.js";import{getTeams}from"./chunks/chunk-Y6WXTTZS.js";import{CREDIT_TYPE_LABELS,INVOICE_STATUSES,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,addSubcommand10 as addSubcommand4,addSubcommand11 as addSubcommand5,addSubcommand2 as addSubcommand,addSubcommand4 as addSubcommand2,addSubcommand5 as addSubcommand3,addonSubcommand,agentRunsCommand,alertsListSubcommand2 as alertsListSubcommand,alertsSubcommand2 as alertsSubcommand,aliasCommand,backupsSubcommand,bisectCommand,budgetCommand,buyCommand,certsCommand,connectSubcommand,createSubcommand10 as createSubcommand2,createSubcommand7 as createSubcommand,creditsSubcommand,disconnectSubcommand,dnsCommand,domainSubcommand,getCommandAliases,getSubcommand,getSubcommand5 as getSubcommand2,gitCommand,globalConfigCommand,importSubcommand,initCommand,inspectSubcommand,inspectSubcommand12 as inspectSubcommand3,inspectSubcommand14 as inspectSubcommand4,inspectSubcommand6 as inspectSubcommand2,inviteSubcommand,invoicesDownloadSubcommand,invoicesInspectSubcommand,invoicesListSubcommand,invoicesSubcommand,isCustomEnvironmentAddonAlias,issueSubcommand,itemsSubcommand,listSubcommand,listSubcommand11 as listSubcommand4,listSubcommand15 as listSubcommand5,listSubcommand18 as listSubcommand6,listSubcommand24 as listSubcommand7,listSubcommand25 as listSubcommand8,listSubcommand28 as listSubcommand9,listSubcommand29 as listSubcommand10,listSubcommand3 as listSubcommand2,listSubcommand5 as listSubcommand3,membersInviteSubcommand,membersRemoveSubcommand,membersSubcommand2 as membersSubcommand,organizationsCommand,proSubcommand,projectsSubcommand,removeSubcommand15 as removeSubcommand5,removeSubcommand16 as removeSubcommand6,removeSubcommand17 as removeSubcommand7,removeSubcommand2 as removeSubcommand,removeSubcommand4 as removeSubcommand2,removeSubcommand7 as removeSubcommand3,removeSubcommand9 as removeSubcommand4,requestSubcommand,setSubcommand,setSubcommand3 as setSubcommand2,ssoSubcommand,switchSubcommand,teamsAddSubcommand,teamsCommand,teamsCreateSubcommand,teamsListSubcommand,teamsSubcommand,tokensCommand,tokensSubcommand,traceSubcommand,updateSubcommand2 as updateSubcommand,updateSubcommand6 as updateSubcommand2,updateSubcommand9 as updateSubcommand3,webhooksCommand}from"./chunks/chunk-NTUDWWSL.js";import"./chunks/chunk-M73W4XNR.js";import"./chunks/chunk-32AS5X7G.js";import"./chunks/chunk-ZBZPCKTW.js";import"./chunks/chunk-TRZDIAX3.js";import"./chunks/chunk-GHEGWXH2.js";import"./chunks/chunk-GCXUSXB4.js";import"./chunks/chunk-2H4DUZJZ.js";import"./chunks/chunk-ECQKK4JU.js";import"./chunks/chunk-JOXGYP5S.js";import"./chunks/chunk-7ULVGK67.js";import"./chunks/chunk-4BZ3DNGM.js";import"./chunks/chunk-R5ZLTWKB.js";import"./chunks/chunk-T5TOBY4D.js";import"./chunks/chunk-H34SGIVS.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-G3LWP5CH.js";import"./chunks/chunk-QQA2OMXJ.js";import"./chunks/chunk-KV2DYFUG.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-GCPPL24C.js";import{printError}from"./chunks/chunk-BWS3ZOHJ.js";import{help}from"./chunks/chunk-33U57CNE.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getContextName,getScope}from"./chunks/chunk-DSNIVABS.js";import{TelemetryClient}from"./chunks/chunk-NAU6URTI.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,exitWithNonInteractiveError,getErrorRecovery,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-32NXYHYC.js";import"./chunks/chunk-FWTBSC7Z.js";import{getGitConfigPath,getLinkFromDir,getLinkedProject,getUser,getVercelDirectory,humanizePath,parseGitConfig,pluckRemoteUrls,require_pluralize,writeToConfigFile}from"./chunks/chunk-OZPBJWYU.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-64UCX5JM.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-7WY7ASKE.js";import"./chunks/chunk-4NTBYNFR.js";import{isArgumentError,parseArguments,takeCommand}from"./chunks/chunk-CGTD4QFC.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-4SAVH3H7.js";import{AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainNotAvailable,DomainNotFound,DomainPaymentError,DomainPermissionDenied,DomainPriceChanged,DomainPurchasePending,DomainPurchaseRefundFailed,DomainPurchaseRefunded,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,NoAliasInConfig,NowError,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnsupportedTLD,UserAborted,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getSameSubcommandSuggestionFlags,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-YPPDRKVC.js";import{chars_default}from"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import{fetch,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var AgentRunsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandTrace(actual){this.trackCliSubcommand({subcommand:"trace",value:actual})}trackCliSubcommandProjects(actual){this.trackCliSubcommand({subcommand:"projects",value:actual})}};var import_chalk2=__toESM(require_source(),1);var AGENT_RUNS_API_BASE="https://vercel.com/api/observability/agent-runs",DEFAULT_TRACE_MAX_FIELD_LENGTH=8e3,MAX_TRACE_FIELD_LENGTH=5e4;function getAgentRunsApiBase(){return process.env.VERCEL_AGENT_RUNS_API_URL||AGENT_RUNS_API_BASE}function resolveAgentRunsWindow(since,until){if(!since)return;let from=parseTimeFlag(since),to=until?parseTimeFlag(until):new Date;return{from:Math.floor(from.getTime()/1e3),to:Math.floor(to.getTime()/1e3)}}function buildAgentRunsUrl(query){let url=new URL(getAgentRunsApiBase());url.searchParams.set("teamSlug",query.teamId),query.view==="team"?url.searchParams.set("view","team"):query.projectId&&url.searchParams.set("project",query.projectId),url.searchParams.set("environment",query.environment||"production");let window=query.window??resolveAgentRunsWindow(query.since,query.until);return window&&(url.searchParams.set("from",String(window.from)),url.searchParams.set("to",String(window.to))),typeof query.page=="number"&&url.searchParams.set("page",String(Math.max(1,Math.floor(query.page)))),typeof query.pageSize=="number"&&url.searchParams.set("pageSize",String(Math.max(1,Math.floor(query.pageSize)))),query.search&&url.searchParams.set("search",query.search),query.cursor&&url.searchParams.set("cursor",query.cursor),query.runId&&url.searchParams.set("runId",query.runId),query.trace&&url.searchParams.set("trace","1"),query.traceStreamId&&url.searchParams.set("traceStreamId",query.traceStreamId),query.traceAfterCursor&&url.searchParams.set("traceAfterCursor",query.traceAfterCursor),typeof query.traceBeforeChunk=="number"&&url.searchParams.set("traceBeforeChunk",String(query.traceBeforeChunk)),url.href}async function fetchAgentRuns(client,query){return client.fetch(buildAgentRunsUrl(query),{useCurrentTeam:!1})}var MISSING_PROJECT_SCOPE_MESSAGE="No linked project found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team> and --project <name>.",MISSING_TEAM_SCOPE_MESSAGE="No team scope found. Run `vercel link`, pass --cwd to a linked dir, or use --scope <team>.";async function resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject}){let flagScope=scopeFlag?.trim()||void 0,flagProject=projectFlag?.trim()||void 0;if(flagScope&&(flagProject||!requireProject))return{ok:!0,teamId:flagScope,projectId:flagProject,contextName:flagProject?`${flagScope}/${flagProject}`:flagScope};let linkedProject=await getLinkedProject(client);if(linkedProject.status==="error")return{ok:!1,exitCode:linkedProject.exitCode};if(linkedProject.status==="linked"){let{org,project}=linkedProject;if(flagScope&&flagScope!==org.id&&flagScope!==org.slug)return{ok:!1,exitCode:invalidArguments(client,`\`--scope ${flagScope}\` doesn't match the linked project's team. Pass \`--project <name>\` to query a project in that team.`)};let teamName=flagScope??org.slug,projectName=requireProject?flagProject??project.name:flagProject;return{ok:!0,teamId:flagScope??org.id,projectId:requireProject?flagProject??project.id:flagProject,contextName:projectName?`${teamName}/${projectName}`:teamName}}let message=requireProject?MISSING_PROJECT_SCOPE_MESSAGE:MISSING_TEAM_SCOPE_MESSAGE;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message}),output_manager_default.error(message),{ok:!1,exitCode:1}}function normalizeApiErrorText(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function handleAgentRunsApiError(client,err){if(isAPIError(err)){let reason=err.status===403?"forbidden":err.status===401?"not_authorized":err.status===404?AGENT_REASON.NOT_FOUND:err.status===429?"rate_limited":AGENT_REASON.API_ERROR;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:normalizeApiErrorText(err.serverMessage||err.message)})}else outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)});printError(err)}function invalidArguments(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),2}function normalizeTraceMaxFieldLength(value){return typeof value!="number"||!Number.isFinite(value)?DEFAULT_TRACE_MAX_FIELD_LENGTH:Math.min(Math.max(Math.floor(value),0),MAX_TRACE_FIELD_LENGTH)}function truncateLargeStrings(value,maxLength){return maxLength===0?value:typeof value=="string"?value.length<=maxLength?value:`${value.slice(0,maxLength)}... [truncated ${value.length-maxLength} chars]`:Array.isArray(value)?value.map(item=>truncateLargeStrings(item,maxLength)):value&&typeof value=="object"?Object.fromEntries(Object.entries(value).map(([key,entry])=>[key,truncateLargeStrings(entry,maxLength)])):value}import{createHash}from"node:crypto";var import_chalk=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib(),1);function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function quoteCommandArgument(value,placeholder){return/[\x00-\x1F\x7F]/.test(value)?placeholder:/^[A-Za-z0-9_./:=@%+,-]+$/.test(value)?value:`'${value.replaceAll("'",`'"'"'`)}'`}function asArray(value){return Array.isArray(value)?value.filter(isRecord):[]}function readString(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="string"&&value.length>0)return value}}function readNumber(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value}}function readRecord(record,...keys){if(record)for(let key of keys){let value=record[key];if(isRecord(value))return value}}function readTimestampMs(record,...keys){if(record)for(let key of keys){let value=record[key];if(typeof value=="number"&&Number.isFinite(value))return value;if(typeof value=="string"&&value.length>0){let parsed=Date.parse(value);if(!Number.isNaN(parsed))return parsed}}}var PLACEHOLDER="-";function runId(run){return readString(run,"id","runId")??PLACEHOLDER}function formatRunStatus(run){let status=readString(run,"status","state");if(!status)return PLACEHOLDER;let label=(0,import_title.default)(status.replace(/[_-]+/g," ")),CIRCLE="\u25CF ";switch(status.toLowerCase()){case"completed":case"succeeded":case"success":case"ready":return import_chalk.default.green(CIRCLE)+label;case"error":case"errored":case"failed":case"timed out":case"timed_out":return import_chalk.default.red(CIRCLE)+label;case"running":case"in progress":case"in_progress":case"pending":case"queued":case"started":return import_chalk.default.yellow(CIRCLE)+label;case"canceled":case"cancelled":return import_chalk.default.gray(label);default:return label}}function runModel(run){return readString(run,"model")??PLACEHOLDER}function runTrigger(run){return readString(run,"trigger")??readString(readRecord(run,"trigger"),"label","type","name")??PLACEHOLDER}function runTitle(run){return readString(run,"title","name")}function runStartedAtMs(run){return readTimestampMs(run,"createdAt","startedAt","startTime")}function runDurationMs(run){let explicit=readNumber(run,"durationMs","duration");if(explicit!==void 0)return explicit;let start=readTimestampMs(run,"startedAt","createdAt","startTime"),end=readTimestampMs(run,"endedAt","completedAt","endTime");if(start!==void 0&&end!==void 0&&end>=start)return end-start}function runTotalTokens(run){let usage=readRecord(run,"usage")??run,total=readNumber(usage,"totalTokens","total");if(total!==void 0)return total;let input=readNumber(usage,"inputTokens","promptTokens","input"),output=readNumber(usage,"outputTokens","completionTokens","output");if(input!==void 0||output!==void 0)return(input??0)+(output??0)}function formatAge(timestampMs){if(timestampMs===void 0)return PLACEHOLDER;let delta=Date.now()-timestampMs;return delta<1e3?"just now":`${(0,import_ms.default)(delta)} ago`}function formatTimestamp(timestampMs){return timestampMs===void 0?PLACEHOLDER:new Date(timestampMs).toISOString()}function formatDurationMs(value){return value===void 0?PLACEHOLDER:value<1e3?`${Math.round(value)}ms`:value<6e4?`${(value/1e3).toFixed(1)}s`:(0,import_ms.default)(Math.round(value))}function formatCount(value){return value===void 0?PLACEHOLDER:value<1e4?String(value):value<1e6?`${(value/1e3).toFixed(1)}k`:`${(value/1e6).toFixed(1)}m`}var MAX_TOKEN_LENGTH=8192,MAX_SOURCE_OFFSET=1e4,OTEL_CURSOR_PATTERN=/^[A-Za-z0-9_-]{1,4096}$/,SOURCE_CURSOR_PATTERN=/^[0-9a-z]+\.[0-9a-z]+(\.[0-9a-z]+\.[0-9a-z]+(\.[A-Za-z0-9_-]{1,4096})?)?$/,FILTERS_LENGTH=22;function isSourceOffset(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>=0&&value<=MAX_SOURCE_OFFSET}function isEpoch(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>0}function isWindow(value){if(!isRecord(value))return!1;let{from,to}=value;return isEpoch(from)&&isEpoch(to)&&from<to}function encodeAgentRunsSourceCursor(offsets){if(!offsets)return;let{otel,workflow,otelCursor}=offsets;if(!isSourceOffset(otel)||!isSourceOffset(workflow))return;let parts=[otel.toString(36),workflow.toString(36)],range=offsets.otelRange;if(range!==void 0){if(!isWindow(range))return;parts.push(range.from.toString(36),range.to.toString(36))}if(otelCursor!==void 0){if(range===void 0||typeof otelCursor!="string"||!OTEL_CURSOR_PATTERN.test(otelCursor))return;parts.push(otelCursor)}return parts.join(".")}function getAgentRunsListFilters({teamId,projectId,environment,search}){return createHash("sha256").update(JSON.stringify([teamId,projectId??null,environment||"production",search||null])).digest("base64url").slice(0,FILTERS_LENGTH)}function encodeAgentRunsListContinuation(continuation){return Buffer.from(JSON.stringify(continuation),"utf8").toString("base64url")}function parseAgentRunsListContinuation(value){if(value.length===0||value.length>MAX_TOKEN_LENGTH||!/^[A-Za-z0-9_-]+$/.test(value))return;let decoded;try{decoded=JSON.parse(Buffer.from(value,"base64url").toString("utf8"))}catch{return}if(!(!isRecord(decoded)||decoded.version!==1||typeof decoded.cursor!="string"||!SOURCE_CURSOR_PATTERN.test(decoded.cursor)||typeof decoded.page!="number"||!Number.isSafeInteger(decoded.page)||decoded.page<2||typeof decoded.filters!="string"||decoded.filters.length!==FILTERS_LENGTH||!isWindow(decoded.window)))return{version:1,cursor:decoded.cursor,page:decoded.page,window:{from:decoded.window.from,to:decoded.window.to},filters:decoded.filters}}var AgentRunsQueryTelemetryClient=class extends TelemetryClient{trackCliOptionEnvironment(value){value&&this.trackCliOption({option:"environment",value:["production","preview"].includes(value)?value:this.redactedValue})}trackCliOptionSince(value){value&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(value){value&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionProject(value){value&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagJson(value){value&&this.trackCliFlag("json")}};var AgentRunsListTelemetryClient=class extends AgentRunsQueryTelemetryClient{trackCliOptionQuery(value){value&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(value){value&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionNext(value){value!==void 0&&this.trackCliOption({option:"next",value:/^\d+$/.test(value)?value:this.redactedValue})}trackCliOptionPage(value){typeof value=="number"&&this.trackCliOption({option:"page",value:String(value)})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:String(value)})}};var DEFAULT_LIST_WINDOW_SECONDS=12*60*60;function getDefaultListWindow(){let to=Math.floor(Date.now()/1e3);return{from:to-DEFAULT_LIST_WINDOW_SECONDS,to}}function buildListPageCommand({argv,window,next}){let args=argv.slice(2),delimiter=args.indexOf("--"),own=delimiter===-1?args:args.slice(0,delimiter),passthrough=delimiter===-1?[]:args.slice(delimiter),kept=argv.slice(0,2);for(let i=0;i<own.length;i++){let arg=own[i],name=normalizeFlagName(arg);if(name==="--since"||name==="--until"){arg.includes("=")||i++;continue}kept.push(arg)}return window&&kept.push("--since",new Date(window.from*1e3).toISOString(),"--until",new Date(window.to*1e3).toISOString()),getNextPageCommand([...kept,...passthrough],next,["--page"])}function printNextPage(command){output_manager_default.print(`
8
8
  `),printNextPageCommand(command)}async function list2(client){let telemetry=new AgentRunsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let{"--project":projectFlag,"--environment":environment,"--since":since,"--until":until,"--query":queryFlag,"--search":searchFlag,"--next":next,"--page":legacyPage,"--limit":limit,"--json":json,"--scope":scopeFlag}=parsedArgs.flags;legacyPage!==void 0&&warnDeprecatedOption(client.argv,"--page","--next"),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliOptionEnvironment(environment),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliOptionQuery(queryFlag),telemetry.trackCliOptionSearch(searchFlag),telemetry.trackCliOptionNext(next),telemetry.trackCliOptionPage(legacyPage),telemetry.trackCliOptionLimit(limit),telemetry.trackCliFlagJson(json);let query=getRenamedOption(parsedArgs.flags,"--query","--search",{json});if("error"in query)return reportRenamedOptionError(client,query.error,{json});let search=query.value;if(until&&!since)return invalidArguments(client,"`--until` requires `--since`.");if(next!==void 0&&legacyPage!==void 0)return invalidArguments(client,"`--next` and `--page` cannot be used together.");let legacyNext=next!==void 0&&/^\d+$/.test(next)?Number(next):void 0,continuation;if(next!==void 0&&legacyNext===void 0&&(continuation=parseAgentRunsListContinuation(next),!continuation))return invalidArguments(client,"Invalid or expired `--next` cursor. Omit `--next` to start from the first page.");let page=continuation?.page??legacyNext??legacyPage,requestedWindow;try{requestedWindow=resolveAgentRunsWindow(since,until)}catch(err){return handleAgentRunsApiError(client,err),1}let window=requestedWindow??getDefaultListWindow();if(continuation){if(requestedWindow&&(requestedWindow.from!==continuation.window.from||requestedWindow.to!==continuation.window.to))return invalidArguments(client,"`--since` and `--until` must match the time range of the `--next` cursor. Omit them to continue the same list.");window=continuation.window}let scope=await resolveAgentRunsScope(client,{scopeFlag,projectFlag,requireProject:!0});if(!scope.ok)return scope.exitCode;let filters=getAgentRunsListFilters({teamId:scope.teamId,projectId:scope.projectId,environment,search});if(continuation&&continuation.filters!==filters)return invalidArguments(client,"The `--next` cursor belongs to a different list. Use the same scope, project, environment, and search, or omit `--next` to start from the first page.");let fetchStamp=stamp_default();output_manager_default.spinner(`Fetching Agent Runs in ${import_chalk2.default.bold(scope.contextName)}\u2026`);let data;try{data=await fetchAgentRuns(client,{teamId:scope.teamId,projectId:scope.projectId,environment,window,page,pageSize:limit,search,cursor:continuation?.cursor})}catch(err){return output_manager_default.stopSpinner(),handleAgentRunsApiError(client,err),1}output_manager_default.stopSpinner();let pageInfo=readRecord(data,"pageInfo"),cursorPaged=typeof pageInfo?.hasMore=="boolean"||pageInfo?.nextOffsets!==void 0;if(cursorPaged&&!continuation&&(page??1)>1)return invalidArguments(client,"Page numbers cannot continue this Agent Runs list. Use the `--next` cursor from the previous page (`pagination.next` with `--json`).");let nextToken=null;if(cursorPaged&&pageInfo?.hasMore===!0){let nextOffsets=readRecord(pageInfo,"nextOffsets"),cursor=encodeAgentRunsSourceCursor(nextOffsets);cursor&&(nextToken=encodeAgentRunsListContinuation({version:1,cursor,page:(page??1)+1,window,filters}))}if(json){let payload=cursorPaged?{...data,pagination:{next:nextToken}}:data;return client.stdout.write(`${JSON.stringify(withWarnings(payload,[query.warning]),null,2)}
9
9
  `),0}let pageCommand={argv:renameOptionInArgs(client.argv,"--search","--query")},runList=asArray(data.runs);if(runList.length===0)return nextToken?(output_manager_default.log("No Agent Runs on this page."),printNextPage(buildListPageCommand({...pageCommand,next:nextToken}))):search||since?output_manager_default.log("No Agent Runs match the current filters."):output_manager_default.log("No Agent Runs found."),0;output_manager_default.log(`Agent Runs under ${import_chalk2.default.bold(scope.contextName)} ${fetchStamp()}`);let rows=[["Run ID","Status","Trigger","Model","Tokens","Duration","Age"].map(header=>import_chalk2.default.bold(import_chalk2.default.cyan(header))),...runList.map(run=>[import_chalk2.default.bold(runId(run)),formatRunStatus(run),runTrigger(run),runModel(run),formatCount(runTotalTokens(run)),import_chalk2.default.gray(formatDurationMs(runDurationMs(run))),import_chalk2.default.gray(formatAge(runStartedAtMs(run)))])];client.stdout.write(`
10
10
  ${table(rows,{hsep:3}).replace(/^/gm," ")}
@@ -48,80 +48,101 @@ ${table(rows,{hsep:3}).replace(/^/gm," ")}
48
48
  `)),1}return error}var AliasSetTelemetryClient=class extends TelemetryClient{trackCliFlagDebug(flag){flag&&this.trackCliFlag("debug")}trackCliOptionLocalConfig(localConfig){localConfig&&this.trackCliOption({option:"local-config",value:this.redactedValue})}trackCliArgumentDeployment(idOrUrl){idOrUrl&&this.trackCliArgument({arg:"id-or-url",value:this.redactedValue})}trackCliArgumentAlias(customDomain){customDomain&&this.trackCliArgument({arg:"custom-domain",value:this.redactedValue})}};async function set(client,argv){let parsedArguments,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArguments,setStamp=stamp_default(),{localConfig}=client,telemetryClient=new AliasSetTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliFlagDebug(opts["--debug"]),telemetryClient.trackCliOptionLocalConfig(opts["--local-config"]);let{contextName,user}=await getScope(client);if(args.length>2)return output_manager_default.error(`${getCommandName("alias <deployment> <target>")} accepts at most two arguments`),1;if(args.length>=1&&!isValidName(args[0]))return output_manager_default.error(`The provided argument "${args[0]}" is not a valid ID or URL`),2;if(args.length>=2&&!isValidName(args[1]))return output_manager_default.error(`The provided argument "${args[1]}" is not a valid domain`),2;if(args.length===0)return output_manager_default.error(`To ship to production, optionally configure your domains (${link_default("https://vercel.link/domain-configuration")}) and run ${getCommandName("--prod")}.`),1;if(args.length===1){let[aliasTarget2]=args;telemetryClient.trackCliArgumentAlias(aliasTarget2);let deployment=handleCertError(await getDeploymentForAlias(client,opts["--local-config"],user,contextName,localConfig));if(deployment===1)return deployment;if(deployment instanceof Error)return output_manager_default.error(deployment.message),1;if(!deployment)return output_manager_default.error("Couldn't find a deployment to alias. Please provide one as an argument."),1;let targets=getTargetsForAlias(args,localConfig);if(targets instanceof Error)return output_manager_default.prettyError(targets),1;for(let target of targets){output_manager_default.log(`Assigning alias ${target} to deployment ${deployment.url}`);let record2=await assignAlias(client,deployment.id,target,contextName),handleResult2=handleSetupDomainError(handleCreateAliasError(record2));if(handleResult2===1)return 1;output_manager_default.success(`${import_chalk10.default.bold(`${isWildcardAlias(target)?"":"https://"}${handleResult2.alias}`)} now points to https://${deployment.url} ${setStamp()}`),isWildcardAlias(target)||await warnIfDeploymentOnlyAlias(client,deployment,target)}return 0}let[idOrUrl,aliasTarget]=args;telemetryClient.trackCliArgumentDeployment(idOrUrl),telemetryClient.trackCliArgumentAlias(aliasTarget),output_manager_default.log(`Assigning alias ${aliasTarget} to ${idOrUrl}`);let isWildcard=isWildcardAlias(aliasTarget),idOrUrlForRequest=idOrUrl.includes(".")?toHost(idOrUrl):idOrUrl,aliasHost=toHost(aliasTarget),deploymentLookup=!isWildcard&&aliasHost.includes(".")?getDeployment(client,contextName,idOrUrlForRequest).catch(err=>(output_manager_default.debug(`Could not load deployment ${idOrUrlForRequest}: ${err}`),null)):null,record=await assignAlias(client,idOrUrlForRequest,aliasTarget,contextName),handleResult=handleSetupDomainError(handleCreateAliasError(record));if(handleResult===1)return 1;let prefix=isWildcard?"":"https://";return output_manager_default.success(`${import_chalk10.default.bold(`${prefix}${handleResult.alias}`)} now points to ${idOrUrl} ${setStamp()}`),deploymentLookup&&await warnIfDeploymentOnlyAlias(client,await deploymentLookup,aliasHost),0}function handleSetupDomainError(error){return error instanceof DomainPermissionDenied?(output_manager_default.error(`You don't have permissions over domain ${import_chalk10.default.underline(error.meta.domain)} under ${import_chalk10.default.bold(error.meta.context)}.`),1):error instanceof UserAborted?(output_manager_default.error("User canceled."),1):error instanceof DomainNotFound?(output_manager_default.error("You should buy the domain before aliasing."),1):error instanceof UnsupportedTLD?(output_manager_default.error(`The TLD for domain name ${error.meta.domain} is not supported.`),1):error instanceof InvalidDomain?(output_manager_default.error(`The domain ${error.meta.domain} used for the alias is not valid.`),1):error instanceof DomainNotAvailable?(output_manager_default.error(`The domain ${error.meta.domain} is not available to be purchased.`),1):error instanceof UnexpectedDomainPurchaseError?(output_manager_default.error("There was an unexpected error while purchasing the domain."),1):error instanceof DomainAlreadyExists?(output_manager_default.error(`The domain ${error.meta.domain} exists for a different account.`),1):error instanceof DomainPurchasePending?(output_manager_default.error(`The domain ${error.meta.domain} is processing and will be available once the order is completed.`),output_manager_default.print(` An email will be sent upon completion so you can alias to your new domain.
49
49
  `),1):error instanceof SourceNotFound?(output_manager_default.error("You can't purchase the domain you're aliasing to since you have no valid payment method."),output_manager_default.print(` Please add a valid payment method and retry.
50
50
  `),1):error instanceof DomainPaymentError?(output_manager_default.error("You can't purchase the domain you're aliasing to since your card was declined."),output_manager_default.print(` Please add a valid payment method and retry.
51
- `),1):error instanceof TLDNotSupportedViaCLI?(output_manager_default.error(`The TLD for domain name ${error.meta.domain} is not supported via the CLI. Use the REST API or the dashboard to purchase.`),1):error instanceof DomainPurchaseRefundFailed||error instanceof DomainPurchaseRefunded||error instanceof DomainChargeOutcomeUnknown||error instanceof DomainPriceChanged?(output_manager_default.error(error.message),1):error}function handleCreateAliasError(errorOrResult){let error=handleCertError(errorOrResult);return error===1?error:error instanceof AliasInUse?(output_manager_default.error(`The alias ${import_chalk10.default.dim(error.meta.alias)} is a deployment URL or it's in use by a different team.`),1):error instanceof DeploymentNotFound?(output_manager_default.error(`Failed to find ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof InvalidAlias?(output_manager_default.error("Invalid alias. Please confirm that the alias you provided is a valid hostname. Note: For `vercel.app`, only sub and sub-sub domains are supported."),1):error instanceof DeploymentPermissionDenied?(output_manager_default.error(`No permission to access ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof CertMissing?(output_manager_default.error(`There is no certificate for the domain ${error.meta.domain} and it could not be created.`),output_manager_default.log(`Please generate a new certificate manually with ${getCommandName(`certs issue ${error.meta.domain}`)}`),1):error instanceof InvalidDomain?(output_manager_default.error(`The domain ${error.meta.domain} used for the alias is not valid.`),1):error instanceof DomainPermissionDenied||error instanceof DeploymentFailedAliasImpossible||error instanceof InvalidDeploymentId?(output_manager_default.error(error.message),1):error instanceof DeploymentNotReady?(output_manager_default.error(error.message),1):error}function getTargetsForAlias(args,{alias:alias2}={}){return args.length?[args[args.length-1]].map(target=>target.indexOf(".")!==-1?toHost(target):target).filter(x=>!!x&&typeof x=="string"):alias2?typeof alias2!="string"&&!Array.isArray(alias2)?new InvalidAliasInConfig(alias2):typeof alias2=="string"?[alias2]:alias2:new NoAliasInConfig}var AliasTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}};var COMMAND_CONFIG2={ls:getCommandAliases(listSubcommand2),rm:getCommandAliases(removeSubcommand),set:getCommandAliases(setSubcommand)};async function alias(client){let telemetry=new AliasTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(aliasCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}parsedArguments.args[0]==="ln"&&warnDeprecatedSubcommand(client,"ln","alias");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArguments.args.slice(1),COMMAND_CONFIG2),needHelp=parsedArguments.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("alias"),output_manager_default.print(help(aliasCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:aliasCommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(listSubcommand2),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(removeSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args))}}var import_open=__toESM(require_open(),1),import_execa=__toESM(require_execa(),1),import_pluralize=__toESM(require_pluralize(),1),import_chalk11=__toESM(require_source(),1);import{resolve}from"path";import{URLSearchParams as URLSearchParams2,parse as parse3}from"url";function hasScheme(url){return url.startsWith("http://")||url.startsWith("https://")}function normalizeURL(url){return hasScheme(url)?url:`https://${url}`}var BisectTelemetryClient=class extends TelemetryClient{trackCliOptionGood(good){good&&this.trackCliOption({option:"good",value:this.redactedValue})}trackCliOptionBad(bad){bad&&this.trackCliOption({option:"bad",value:this.redactedValue})}trackCliOptionPath(path3){path3&&this.trackCliOption({option:"path",value:this.redactedValue})}trackCliOptionRun(run){run&&this.trackCliOption({option:"run",value:this.redactedValue})}trackCliFlagOpen(open4){open4&&this.trackCliFlag("open")}};async function bisect(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(bisectCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new BisectTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("bisect"),output_manager_default.print(help(bisectCommand,{stream:client.stderr,columns:client.stderr.columns})),0;telemetry.trackCliOptionGood(parsedArgs.flags["--good"]),telemetry.trackCliOptionBad(parsedArgs.flags["--bad"]),telemetry.trackCliOptionPath(parsedArgs.flags["--path"]),telemetry.trackCliOptionRun(parsedArgs.flags["--run"]),telemetry.trackCliFlagOpen(parsedArgs.flags["--open"]);let scope=await getScope(client),{contextName}=scope,bad=parsedArgs.flags["--bad"]||await client.input.text({message:"Specify a URL where the bug occurs:",validate:val=>val?!0:"A URL must be provided"}),good=parsedArgs.flags["--good"]||await client.input.text({message:"Specify a URL where the bug does not occur:",validate:val=>val?!0:"A URL must be provided"}),subpath=parsedArgs.flags["--path"]||"",run=parsedArgs.flags["--run"]||"",openEnabled=parsedArgs.flags["--open"]||!1;run&&(run=resolve(run)),bad=normalizeURL(bad);let parsed=parse3(bad);if(!parsed.hostname)return output_manager_default.error("Invalid input: no hostname provided"),1;if(bad=parsed.hostname,typeof parsed.path=="string"&&parsed.path!=="/"&&(subpath&&subpath!==parsed.path?output_manager_default.note(`Ignoring subpath ${import_chalk11.default.bold(parsed.path)} in favor of \`--path\` argument ${import_chalk11.default.bold(subpath)}`):subpath=parsed.path),good=normalizeURL(good),parsed=parse3(good),!parsed.hostname)return output_manager_default.error("Invalid input: no hostname provided"),1;good=parsed.hostname,typeof parsed.path=="string"&&parsed.path!=="/"&&subpath&&subpath!==parsed.path&&output_manager_default.note(`Ignoring subpath ${import_chalk11.default.bold(parsed.path)} which does not match ${import_chalk11.default.bold(subpath)}`),subpath||(subpath=await client.input.text({message:"Specify the URL subpath where the bug occurs:",validate:val=>val?!0:"A subpath must be provided"})),output_manager_default.spinner("Retrieving deployments\u2026");let badDeployment=await getDeployment(client,contextName,bad).catch(err=>err);if(badDeployment){if(badDeployment instanceof Error)return badDeployment.message+=` when requesting bad deployment "${normalizeURL(bad)}"`,output_manager_default.prettyError(badDeployment),1;bad=badDeployment.url}else return output_manager_default.error(`Failed to retrieve ${import_chalk11.default.bold("bad")} Deployment: ${bad}`),1;let goodDeployment=await getDeployment(client,contextName,good).catch(err=>err);if(goodDeployment){if(goodDeployment instanceof Error)return goodDeployment.message+=` when requesting good deployment "${normalizeURL(good)}"`,output_manager_default.prettyError(goodDeployment),1;good=goodDeployment.url}else return output_manager_default.error(`Failed to retrieve ${import_chalk11.default.bold("good")} Deployment: ${good}`),1;let{projectId}=badDeployment;if(projectId!==goodDeployment.projectId)return output_manager_default.error("Good and Bad deployments must be from the same Project"),1;if(badDeployment.url===goodDeployment.url)return output_manager_default.error("Good and Bad deployments must be different"),1;if(badDeployment.createdAt<goodDeployment.createdAt)return output_manager_default.error("Good deployment must be older than the Bad deployment"),1;if(badDeployment.target!==goodDeployment.target)return output_manager_default.error(`Bad deployment target "${badDeployment.target||"preview"}" does not match good deployment target "${goodDeployment.target||"preview"}"`),1;let deployments=[],query=new URLSearchParams2;query.set("projectId",projectId),badDeployment.target&&query.set("target",badDeployment.target),query.set("state","READY"),query.set("until",String(badDeployment.createdAt+1));for await(let chunk of client.fetchPaginated(`/v6/deployments?${query}`,{accountId:badDeployment.ownerId})){let newDeployments=chunk.deployments,hasGood=!1;for(let i=0;i<newDeployments.length;i++)if(newDeployments[i].url===good){newDeployments=newDeployments.slice(0,i),hasGood=!0;break}if(deployments=deployments.concat(newDeployments),hasGood)break}if(!deployments.length)return output_manager_default.error("Cannot bisect because this project does not have any deployments"),1;let lastBad=deployments.shift();for(;deployments.length>0;){output_manager_default.print(`
52
- `);let middleIndex=Math.floor(deployments.length/2),deployment=deployments[middleIndex],rem=(0,import_pluralize.default)("deployment",deployments.length,!0),steps=Math.floor(Math.log2(deployments.length)),pSteps=(0,import_pluralize.default)("step",steps,!0);output_manager_default.log(import_chalk11.default.magenta(`${import_chalk11.default.bold("Bisecting:")} ${rem} left to test after this (roughly ${pSteps})`),import_chalk11.default.magenta);let testUrl=`https://${deployment.url}${subpath}`;output_manager_default.log(`${import_chalk11.default.bold("Deployment URL:")} ${link_default(testUrl)}`),output_manager_default.log(`${import_chalk11.default.bold("Date:")} ${formatDate(deployment.createdAt)}`);let commit2=getCommit(deployment);if(commit2){let shortSha=commit2.sha.substring(0,7),firstLine=commit2.message?.split(`
53
- `)[0];output_manager_default.log(`${import_chalk11.default.bold("Commit:")} [${shortSha}] ${firstLine}`)}let action;if(run){let proc=await(0,import_execa.default)(run,[testUrl],{stdio:"inherit",reject:!1,env:{...process.env,HOST:deployment.url,URL:testUrl}});if(proc instanceof Error&&typeof proc.exitCode!="number")return output_manager_default.prettyError(proc),1;let{exitCode}=proc,color;exitCode===0?(color=import_chalk11.default.green,action="good"):exitCode===125?(action="skip",color=import_chalk11.default.grey):(action="bad",color=import_chalk11.default.red),output_manager_default.log(`Run script returned exit code ${import_chalk11.default.bold(String(exitCode))}: ${color(action)}`)}else openEnabled&&await(0,import_open.default)(testUrl),action=await client.input.expand({message:"Select an action:",choices:[{key:"g",name:"Good",value:"good"},{key:"b",name:"Bad",value:"bad"},{key:"s",name:"Skip",value:"skip"}]});action==="good"?deployments=deployments.slice(0,middleIndex):action==="bad"?(lastBad=deployment,deployments=deployments.slice(middleIndex+1)):action==="skip"&&deployments.splice(middleIndex,1)}output_manager_default.print(`
54
- `);let result=[import_chalk11.default.bold(`The first bad deployment is: ${link_default(`https://${lastBad.url}`)}`),"",` ${import_chalk11.default.bold("Date:")} ${formatDate(lastBad.createdAt)}`],commit=getCommit(lastBad);if(commit){let shortSha=commit.sha.substring(0,7),firstLine=commit.message?.split(`
55
- `)[0];result.push(` ${import_chalk11.default.bold("Commit:")} [${shortSha}] ${firstLine}`)}return result.push(`${import_chalk11.default.bold("Inspect:")} ${link_default(lastBad.inspectorUrl)}`),output_manager_default.print(box(result.join(`
51
+ `),1):error instanceof TLDNotSupportedViaCLI?(output_manager_default.error(`The TLD for domain name ${error.meta.domain} is not supported via the CLI. Use the REST API or the dashboard to purchase.`),1):error instanceof DomainPurchaseRefundFailed||error instanceof DomainPurchaseRefunded||error instanceof DomainChargeOutcomeUnknown||error instanceof DomainPriceChanged?(output_manager_default.error(error.message),1):error}function handleCreateAliasError(errorOrResult){let error=handleCertError(errorOrResult);return error===1?error:error instanceof AliasInUse?(output_manager_default.error(`The alias ${import_chalk10.default.dim(error.meta.alias)} is a deployment URL or it's in use by a different team.`),1):error instanceof DeploymentNotFound?(output_manager_default.error(`Failed to find ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof InvalidAlias?(output_manager_default.error("Invalid alias. Please confirm that the alias you provided is a valid hostname. Note: For `vercel.app`, only sub and sub-sub domains are supported."),1):error instanceof DeploymentPermissionDenied?(output_manager_default.error(`No permission to access ID or URL ${import_chalk10.default.dim(error.meta.id)} under ${import_chalk10.default.bold(error.meta.context)}`),1):error instanceof CertMissing?(output_manager_default.error(`There is no certificate for the domain ${error.meta.domain} and it could not be created.`),output_manager_default.log(`Please generate a new certificate manually with ${getCommandName(`certs issue ${error.meta.domain}`)}`),1):error instanceof InvalidDomain?(output_manager_default.error(`The domain ${error.meta.domain} used for the alias is not valid.`),1):error instanceof DomainPermissionDenied||error instanceof DeploymentFailedAliasImpossible||error instanceof InvalidDeploymentId?(output_manager_default.error(error.message),1):error instanceof DeploymentNotReady?(output_manager_default.error(error.message),1):error}function getTargetsForAlias(args,{alias:alias2}={}){return args.length?[args[args.length-1]].map(target=>target.indexOf(".")!==-1?toHost(target):target).filter(x=>!!x&&typeof x=="string"):alias2?typeof alias2!="string"&&!Array.isArray(alias2)?new InvalidAliasInConfig(alias2):typeof alias2=="string"?[alias2]:alias2:new NoAliasInConfig}var AliasTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}};var COMMAND_CONFIG2={ls:getCommandAliases(listSubcommand2),rm:getCommandAliases(removeSubcommand),set:getCommandAliases(setSubcommand)};async function alias(client){let telemetry=new AliasTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(aliasCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}parsedArguments.args[0]==="ln"&&warnDeprecatedSubcommand(client,"ln","alias");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArguments.args.slice(1),COMMAND_CONFIG2),needHelp=parsedArguments.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("alias"),output_manager_default.print(help(aliasCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:aliasCommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(listSubcommand2),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(removeSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("alias",subcommandOriginal),printHelp(setSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args))}}var BillingTelemetryClient=class extends TelemetryClient{constructor(){super(...arguments);this.sub=subcommand=>value=>this.trackSubcommand(subcommand,value);this.option=option=>value=>this.trackRedactedCliOption(option,value);this.flag=flag=>value=>{value&&this.trackCliFlag(flag)};this.trackCliSubcommandInvoices=this.sub("invoices");this.trackCliSubcommandList=this.sub("list");this.trackCliSubcommandInspect=this.sub("inspect");this.trackCliSubcommandDownload=this.sub("download");this.trackCliOptionNext=this.option("next");this.trackCliOptionOutput=this.option("output");this.trackCliFlagJson=this.flag("json")}trackSubcommand(subcommand,value){this.trackCliSubcommand({subcommand,value})}trackCliArgumentInvoice(value){this.trackCliArgument({arg:"invoice",value:value&&this.redactedValue})}trackCliOptionStatus(value){this.trackRedactedCliOption("status",value?.join(","))}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:String(value)})}trackOptions(flags){this.trackCliOptionStatus(flags["--status"]),this.trackCliOptionLimit(flags["--limit"]),this.trackCliOptionNext(flags["--next"]),this.trackCliOptionOutput(flags["--output"]),this.trackCliFlagJson(flags["--json"])}};var import_chalk11=__toESM(require_source(),1),import_error_utils=__toESM(require_dist(),1);var INVOICE_ID_PATTERN=/^inv_[A-Za-z0-9_-]+$/;function isJsonOutput(client){return wantsMachineReadableOutput("billing",client.argv)}function invoicesCommand(client,command){return withGlobalFlags(client,`billing invoices ${command}`)}function parse3(client,argv,options,usage){let parsed;try{let spec=getFlagsSpecification(options);parsed=parseArguments(argv,spec)}catch(err){return reportError(client,err,2)}let telemetry=new BillingTelemetryClient({opts:{store:client.telemetryEventStore}});return telemetry.trackOptions(parsed.flags),{...parsed,asJson:isJsonOutput(client),telemetry}}function invoiceIdArg(client,args,usage){let[invoiceId]=args;return invoiceId?args.length>1||!INVOICE_ID_PATTERN.test(invoiceId)?usageError(client,"Expected one invoice ID that starts with inv_, from vercel billing invoices list.",usage):invoiceId:failure(client,AGENT_REASON.MISSING_ARGUMENTS,"An invoice ID is required.",{command:"list",when:"Find the invoice ID"},2)}async function resolveOwner(client){try{let{contextName,team}=await getScope(client);return{contextName,teamId:team?.id}}catch(err){if((0,import_error_utils.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return reportError(client,err);throw err}}function ownerQuery(teamId){let query=new URLSearchParams;return teamId&&query.set("teamId",teamId),query}function fetchInvoicesPage(client,teamId,opts){let query=ownerQuery(teamId);for(let status of opts.statuses)query.append("status",status);return query.set("limit",String(opts.limit)),opts.cursor&&query.set("cursor",opts.cursor),client.fetch(`/v1/invoices?${query}`,{useCurrentTeam:!1})}function fetchInvoice(client,teamId,invoiceId){return client.fetch(`/v1/invoices/${encodeURIComponent(invoiceId)}?${ownerQuery(teamId)}`,{useCurrentTeam:!1})}function toInvoiceJson({pdfDownloadUrl:_pdfDownloadUrl,hostedUrl:_hostedUrl,...invoice}){return invoice}function formatInvoiceStatus(invoice){return Number(invoice.postPaymentCreditAmount)>0?"Refunded":(invoice.status==="open"||invoice.status==="uncollectible")&&invoice.dueDate!==null&&Date.now()>Date.parse(invoice.dueDate)?"Overdue":`${invoice.status.charAt(0).toUpperCase()}${invoice.status.slice(1)}`}function formatAmount(amount,currency){let value=Number(amount);return currency.toLowerCase()!=="usd"?`${value.toFixed(2)} ${currency.toUpperCase()}`:`${value<0?"-":""}$${Math.abs(value).toFixed(2)}`}function formatDate2(date){return date?new Date(date).toISOString().slice(0,10):"-"}function formatTable2(headers,rows){return table([headers.map(header=>import_chalk11.default.dim(header)),...rows],{hsep:3}).split(`
52
+ `).map(line=>` ${line}`.trimEnd()).join(`
53
+ `)}function failure(client,reason,message,next,exitCode=1){let command=invoicesCommand(client,next.command);return output_manager_default.stopSpinner(),isJsonOutput(client)?writeJsonError(client,{status:AGENT_STATUS.ERROR,reason,message,next:[{...next,command}]},exitCode):(output_manager_default.fatal(message),output_manager_default.print(`
54
+ ${next.when}:
55
+ ${cmd(command)}
56
+ `),exitCode)}function usageError(client,message,usage){let next={command:`${usage} --help`,when:"See the usage"};return failure(client,AGENT_REASON.INVALID_ARGUMENTS,message,next,2)}function reportError(client,err,exitCode=1){if(output_manager_default.stopSpinner(),!isJsonOutput(client))return printError(err,client),exitCode;let apiError=isAPIError(err)?err:void 0,reason=exitCode===2?AGENT_REASON.INVALID_ARGUMENTS:apiError?.status===403?AGENT_REASON.PERMISSION_DENIED:AGENT_REASON.API_ERROR,message=err instanceof Error&&!apiError?err.message:"Couldn't complete the invoices command.";return writeJsonError(client,{status:AGENT_STATUS.ERROR,reason,message,...apiError&&{...getErrorRecovery(apiError,client),data:{httpStatus:apiError.status}}},exitCode)}function reportInvoiceError(client,err,invoiceId,contextName){return isAPIError(err)&&err.status===404?failure(client,AGENT_REASON.NOT_FOUND,`Couldn't find invoice ${invoiceId} in ${contextName}.`,{command:"list",when:"List invoices"}):reportError(client,err)}var API_PAGE_LIMIT=50;function encodeCursor(cursor){return Buffer.from(JSON.stringify(cursor)).toString("base64url")}function decodeCursor(value){try{let decoded=JSON.parse(Buffer.from(value,"base64url").toString());return typeof decoded?.cursor=="string"&&Array.isArray(decoded.statuses)&&decoded.statuses.every(status=>INVOICE_STATUSES.includes(status))?decoded:void 0}catch{return}}async function list3(client,argv){let{name:usage,options}=invoicesListSubcommand,parsed=parse3(client,argv,options,usage);if(typeof parsed=="number")return parsed;let{args,flags,asJson}=parsed;if(args.length>0)return usageError(client,"Expected no arguments.",usage);let statusFlags=(flags["--status"]??[]).map(status=>status.toLowerCase());if(statusFlags.find(status=>!INVOICE_STATUSES.includes(status))!==void 0)return usageError(client,`--status must be one of ${INVOICE_STATUSES.join(", ")}.`,usage);let requestedLimit=flags["--limit"]??DEFAULT_LIST_LIMIT;if(!Number.isInteger(requestedLimit)||requestedLimit<1)return usageError(client,"--limit must be a whole number of at least 1.",usage);let limit=Math.min(requestedLimit,MAX_LIST_LIMIT),warnings=requestedLimit>MAX_LIST_LIMIT?[{reason:AGENT_REASON.LIMIT_CLAMPED,message:`--limit is at most ${MAX_LIST_LIMIT}. Showing ${MAX_LIST_LIMIT} invoices.`}]:[],start;if(flags["--next"]!==void 0){if(start=decodeCursor(flags["--next"]),!start)return usageError(client,"--next must be a cursor from a previous vercel billing invoices list.",usage);if(statusFlags.length>0)return usageError(client,"Can't use --status with --next. The cursor keeps the first page's statuses.",usage)}let statuses=start?.statuses??[...new Set(statusFlags)],owner=await resolveOwner(client);if(typeof owner=="number")return owner;let invoices=[],cursor=start?.cursor??null;try{asJson||output_manager_default.spinner(`Fetching invoices for ${owner.contextName}`);do{let page=await fetchInvoicesPage(client,owner.teamId,{statuses,limit:Math.min(limit-invoices.length,API_PAGE_LIMIT),cursor:cursor??void 0});invoices.push(...page.data),cursor=page.hasMore&&page.data.length>0?page.nextCursor:null}while(cursor&&invoices.length<limit);output_manager_default.stopSpinner()}catch(err){return isAPIError(err)&&(err.status===403||err.status===404)?failure(client,AGENT_REASON.PERMISSION_DENIED,`Can't list invoices for ${owner.contextName}. Your account doesn't have access to them.`,{command:"list --scope <TEAM>",when:"Ask a team owner for access, or list invoices for another team"}):reportError(client,err)}let next=cursor?encodeCursor({cursor,statuses}):null;if(asJson){let result={invoices:invoices.map(toInvoiceJson),pagination:{next},...warnings.length>0&&{warnings}};return client.stdout.write(`${JSON.stringify(result,null,2)}
57
+ `),0}for(let warning of warnings)output_manager_default.warning(warning.message);if(invoices.length===0)return output_manager_default.print(statusFlags.length>0?` No invoices match this filter. Remove --status to see all invoices.
58
+ `:` No invoices for ${owner.contextName}.
59
+ `),0;printAlignedLabel(owner.teamId?"Team":"User",owner.contextName);let rows=invoices.map(invoice=>[formatDate2(invoice.issuedAt??invoice.createdAt),invoice.invoiceNumber??"-",formatInvoiceStatus(invoice),formatAmount(invoice.total,invoice.currency),invoice.id]),headers=["Issued","Number","Status","Total","Invoice ID"];if(client.stdout.write(`
60
+ ${formatTable2(headers,rows)}
61
+
62
+ `),next){let limitFlag=flags["--limit"]!==void 0?` --limit ${limit}`:"";printNextPageCommand(invoicesCommand(client,`list${limitFlag} --next ${quoteArg(next)}`))}return 0}async function inspect2(client,argv){let{name:usage,options}=invoicesInspectSubcommand,parsed=parse3(client,argv,options,usage);if(typeof parsed=="number")return parsed;let{args,asJson,telemetry}=parsed,invoiceId=invoiceIdArg(client,args,usage);if(typeof invoiceId=="number")return invoiceId;telemetry.trackCliArgumentInvoice(invoiceId);let owner=await resolveOwner(client);if(typeof owner=="number")return owner;let invoice;try{asJson||output_manager_default.spinner(`Fetching invoice ${invoiceId}`),invoice=await fetchInvoice(client,owner.teamId,invoiceId),output_manager_default.stopSpinner()}catch(err){return reportInvoiceError(client,err,invoiceId,owner.contextName)}if(asJson){let result={invoice:toInvoiceJson(invoice)};return client.stdout.write(`${JSON.stringify(result,null,2)}
63
+ `),0}let amount=value=>formatAmount(value,invoice.currency),paidAt=invoice.statusTransitions.paidAt,amountDue=Number(invoice.amountRemaining)>0,details=[["Invoice",invoice.invoiceNumber],["Status",formatInvoiceStatus(invoice)],["Issued",formatDate2(invoice.issuedAt??invoice.createdAt)],["Due",invoice.dueDate&&formatDate2(invoice.dueDate)],["Paid",paidAt&&formatDate2(paidAt)],["Subtotal",amount(invoice.subtotal)],["Tax",invoice.tax&&amount(invoice.tax)],["Total",amount(invoice.total)],["Amount Due",amountDue?amount(invoice.amountRemaining):null],["Invoice ID",invoice.id]].flatMap(([label,value])=>value?[formatAlignedLabel(label,value)]:[]);if(client.stdout.write(`${details.join(`
64
+ `)}
65
+
66
+ `),invoice.lineItems.length>0){let lineItems=invoice.lineItems.map(item=>[item.title||item.description,`${formatDate2(item.periodStart)} to ${formatDate2(item.periodEnd)}`,item.quantity.toLocaleString("en-US",{maximumFractionDigits:6}),amount(item.amount)]),headers=["Item","Period","Quantity","Amount"];client.stdout.write(`${formatTable2(headers,lineItems)}
67
+
68
+ `)}if(invoice.pdfDownloadUrl){let download2=invoicesCommand(client,`download ${invoice.id}`);output_manager_default.print(` Download the PDF:
69
+ ${cmd(download2)}
70
+ `)}return 0}var import_error_utils2=__toESM(require_dist(),1);import{randomUUID}from"node:crypto";import{constants}from"node:fs";import{copyFile,link,lstat,rm as rm2,writeFile}from"node:fs/promises";import{basename,dirname,join,relative,resolve}from"node:path";var SAFE_FILENAME=/^[A-Za-z0-9._-]+$/;async function download(client,argv){let{name:usage,options}=invoicesDownloadSubcommand,parsed=parse3(client,argv,options,usage);if(typeof parsed=="number")return parsed;let{args,flags,asJson,telemetry}=parsed,invoiceId=invoiceIdArg(client,args,usage);if(typeof invoiceId=="number")return invoiceId;telemetry.trackCliArgumentInvoice(invoiceId);let outputFlag=flags["--output"],toStdout=outputFlag==="-";if(outputFlag==="")return usageError(client,"--output must be a file path.",usage);if(toStdout&&asJson)return usageError(client,"Can't use --json with --output -.",usage);if(outputFlag&&!toStdout&&await exists(client,outputFlag))return fileExists(client,invoiceId,outputFlag);let owner=await resolveOwner(client);if(typeof owner=="number")return owner;let invoice;try{asJson||output_manager_default.spinner(`Fetching invoice ${invoiceId}`),invoice=await fetchInvoice(client,owner.teamId,invoiceId)}catch(err){return reportInvoiceError(client,err,invoiceId,owner.contextName)}if(!invoice.pdfDownloadUrl)return failure(client,AGENT_REASON.CONFLICT,`Can't download invoice ${invoiceId}. It has no PDF until it's finalized.`,{command:`inspect ${invoiceId}`,when:"See the invoice"});let invoiceNumber=invoice.invoiceNumber,defaultFilename=invoiceNumber&&SAFE_FILENAME.test(invoiceNumber)?`${invoiceNumber}.pdf`:`${invoiceId}.pdf`,destination=outputFlag??defaultFilename;if(!toStdout&&!outputFlag&&await exists(client,destination))return fileExists(client,invoiceId,destination);let pdf;try{asJson||output_manager_default.spinner(`Downloading invoice ${invoiceId}`);let response=await fetch(invoice.pdfDownloadUrl);if(!response.ok)throw await response.body?.cancel().catch(()=>{}),new Error(`The PDF request returned ${response.status}.`);pdf=new Uint8Array(await response.arrayBuffer()),output_manager_default.stopSpinner()}catch{return failure(client,AGENT_REASON.API_ERROR,`Failed to download the PDF for invoice ${invoiceId}.`,{command:`download ${invoiceId}`,when:"Download it again"})}if(toStdout)return client.stdout.write(pdf),0;let path3=resolve(client.cwd,destination),temporaryPath=join(dirname(path3),`.${basename(path3)}.${randomUUID()}.tmp`);try{await writeFile(temporaryPath,pdf,{flag:"wx"}),await link(temporaryPath,path3).catch(err=>{if((0,import_error_utils2.isErrnoException)(err)&&err.code==="EEXIST")throw err;return copyFile(temporaryPath,path3,constants.COPYFILE_EXCL)})}catch(err){return(0,import_error_utils2.isErrnoException)(err)&&err.code==="EEXIST"?fileExists(client,invoiceId,destination):reportError(client,err)}finally{await rm2(temporaryPath,{force:!0}).catch(()=>{})}let displayPath=relative(client.cwd,path3)||path3;if(asJson){let result={invoice:{id:invoice.id,invoiceNumber},file:{path:path3,size:pdf.byteLength},outcome:"downloaded"};return client.stdout.write(`${JSON.stringify(result,null,2)}
71
+ `),0}return printAlignedLabel("Downloaded",displayPath,{gutter:"\u2713"}),client.stdout.isTTY||client.stdout.write(`${path3}
72
+ `),0}async function exists(client,path3){try{return await lstat(resolve(client.cwd,path3)),!0}catch{return!1}}function fileExists(client,invoiceId,path3){return failure(client,AGENT_REASON.CONFLICT,`Can't download invoice ${invoiceId}. ${path3} already exists.`,{command:`download ${invoiceId} --output <PATH>`,when:"Choose another file"})}var INVOICES=[[invoicesListSubcommand,list3],[invoicesInspectSubcommand,inspect2],[invoicesDownloadSubcommand,download]],ROOT=[[invoicesSubcommand,(client,argv)=>route(client,argv,INVOICES,["billing","invoices"])]],routingFlags=getFlagsSpecification(INVOICES.flatMap(([command])=>command.options));async function billing(client){try{let group=takeCommand(client.argv.slice(2),routingFlags);return await route(client,group.args,ROOT,["billing"])}catch(err){return reportError(client,err,isArgumentError(err)?2:1)}}async function route(client,argv,routes,path3){let config=Object.fromEntries(routes.map(([command2])=>[command2.name,getCommandAliases(command2)])),selected=takeCommand(argv,routingFlags),{subcommand,subcommandOriginal}=getSubcommand3(selected.command?[selected.command]:[],config);if(!subcommand&&selected.command&&!selected.command.startsWith("-")){let message=`Unknown command ${selected.command} for ${getCommandNamePlain(path3.join(" "))}.`;if(isJsonOutput(client)){let command2=withGlobalFlags(client,`${path3.join(" ")} --help`);return writeJsonError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.UNKNOWN_COMMAND,message,next:[{command:command2,when:"See all commands"}]},2)}return printUnknownCommand(client,selected.command,path3),2}let[command,run]=routes.find(([command2])=>command2.name===subcommand)??routes[0];return new BillingTelemetryClient({opts:{store:client.telemetryEventStore}}).trackSubcommand(command.name,subcommandOriginal),run(client,subcommand?selected.args:argv)}var import_open=__toESM(require_open(),1),import_execa=__toESM(require_execa(),1),import_pluralize=__toESM(require_pluralize(),1),import_chalk12=__toESM(require_source(),1);import{resolve as resolve2}from"path";import{URLSearchParams as URLSearchParams2,parse as parse4}from"url";function hasScheme(url){return url.startsWith("http://")||url.startsWith("https://")}function normalizeURL(url){return hasScheme(url)?url:`https://${url}`}var BisectTelemetryClient=class extends TelemetryClient{trackCliOptionGood(good){good&&this.trackCliOption({option:"good",value:this.redactedValue})}trackCliOptionBad(bad){bad&&this.trackCliOption({option:"bad",value:this.redactedValue})}trackCliOptionPath(path3){path3&&this.trackCliOption({option:"path",value:this.redactedValue})}trackCliOptionRun(run){run&&this.trackCliOption({option:"run",value:this.redactedValue})}trackCliFlagOpen(open4){open4&&this.trackCliFlag("open")}};async function bisect(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(bisectCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new BisectTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("bisect"),output_manager_default.print(help(bisectCommand,{stream:client.stderr,columns:client.stderr.columns})),0;telemetry.trackCliOptionGood(parsedArgs.flags["--good"]),telemetry.trackCliOptionBad(parsedArgs.flags["--bad"]),telemetry.trackCliOptionPath(parsedArgs.flags["--path"]),telemetry.trackCliOptionRun(parsedArgs.flags["--run"]),telemetry.trackCliFlagOpen(parsedArgs.flags["--open"]);let scope=await getScope(client),{contextName}=scope,bad=parsedArgs.flags["--bad"]||await client.input.text({message:"Specify a URL where the bug occurs:",validate:val=>val?!0:"A URL must be provided"}),good=parsedArgs.flags["--good"]||await client.input.text({message:"Specify a URL where the bug does not occur:",validate:val=>val?!0:"A URL must be provided"}),subpath=parsedArgs.flags["--path"]||"",run=parsedArgs.flags["--run"]||"",openEnabled=parsedArgs.flags["--open"]||!1;run&&(run=resolve2(run)),bad=normalizeURL(bad);let parsed=parse4(bad);if(!parsed.hostname)return output_manager_default.error("Invalid input: no hostname provided"),1;if(bad=parsed.hostname,typeof parsed.path=="string"&&parsed.path!=="/"&&(subpath&&subpath!==parsed.path?output_manager_default.note(`Ignoring subpath ${import_chalk12.default.bold(parsed.path)} in favor of \`--path\` argument ${import_chalk12.default.bold(subpath)}`):subpath=parsed.path),good=normalizeURL(good),parsed=parse4(good),!parsed.hostname)return output_manager_default.error("Invalid input: no hostname provided"),1;good=parsed.hostname,typeof parsed.path=="string"&&parsed.path!=="/"&&subpath&&subpath!==parsed.path&&output_manager_default.note(`Ignoring subpath ${import_chalk12.default.bold(parsed.path)} which does not match ${import_chalk12.default.bold(subpath)}`),subpath||(subpath=await client.input.text({message:"Specify the URL subpath where the bug occurs:",validate:val=>val?!0:"A subpath must be provided"})),output_manager_default.spinner("Retrieving deployments\u2026");let badDeployment=await getDeployment(client,contextName,bad).catch(err=>err);if(badDeployment){if(badDeployment instanceof Error)return badDeployment.message+=` when requesting bad deployment "${normalizeURL(bad)}"`,output_manager_default.prettyError(badDeployment),1;bad=badDeployment.url}else return output_manager_default.error(`Failed to retrieve ${import_chalk12.default.bold("bad")} Deployment: ${bad}`),1;let goodDeployment=await getDeployment(client,contextName,good).catch(err=>err);if(goodDeployment){if(goodDeployment instanceof Error)return goodDeployment.message+=` when requesting good deployment "${normalizeURL(good)}"`,output_manager_default.prettyError(goodDeployment),1;good=goodDeployment.url}else return output_manager_default.error(`Failed to retrieve ${import_chalk12.default.bold("good")} Deployment: ${good}`),1;let{projectId}=badDeployment;if(projectId!==goodDeployment.projectId)return output_manager_default.error("Good and Bad deployments must be from the same Project"),1;if(badDeployment.url===goodDeployment.url)return output_manager_default.error("Good and Bad deployments must be different"),1;if(badDeployment.createdAt<goodDeployment.createdAt)return output_manager_default.error("Good deployment must be older than the Bad deployment"),1;if(badDeployment.target!==goodDeployment.target)return output_manager_default.error(`Bad deployment target "${badDeployment.target||"preview"}" does not match good deployment target "${goodDeployment.target||"preview"}"`),1;let deployments=[],query=new URLSearchParams2;query.set("projectId",projectId),badDeployment.target&&query.set("target",badDeployment.target),query.set("state","READY"),query.set("until",String(badDeployment.createdAt+1));for await(let chunk of client.fetchPaginated(`/v6/deployments?${query}`,{accountId:badDeployment.ownerId})){let newDeployments=chunk.deployments,hasGood=!1;for(let i=0;i<newDeployments.length;i++)if(newDeployments[i].url===good){newDeployments=newDeployments.slice(0,i),hasGood=!0;break}if(deployments=deployments.concat(newDeployments),hasGood)break}if(!deployments.length)return output_manager_default.error("Cannot bisect because this project does not have any deployments"),1;let lastBad=deployments.shift();for(;deployments.length>0;){output_manager_default.print(`
73
+ `);let middleIndex=Math.floor(deployments.length/2),deployment=deployments[middleIndex],rem=(0,import_pluralize.default)("deployment",deployments.length,!0),steps=Math.floor(Math.log2(deployments.length)),pSteps=(0,import_pluralize.default)("step",steps,!0);output_manager_default.log(import_chalk12.default.magenta(`${import_chalk12.default.bold("Bisecting:")} ${rem} left to test after this (roughly ${pSteps})`),import_chalk12.default.magenta);let testUrl=`https://${deployment.url}${subpath}`;output_manager_default.log(`${import_chalk12.default.bold("Deployment URL:")} ${link_default(testUrl)}`),output_manager_default.log(`${import_chalk12.default.bold("Date:")} ${formatDate(deployment.createdAt)}`);let commit2=getCommit(deployment);if(commit2){let shortSha=commit2.sha.substring(0,7),firstLine=commit2.message?.split(`
74
+ `)[0];output_manager_default.log(`${import_chalk12.default.bold("Commit:")} [${shortSha}] ${firstLine}`)}let action;if(run){let proc=await(0,import_execa.default)(run,[testUrl],{stdio:"inherit",reject:!1,env:{...process.env,HOST:deployment.url,URL:testUrl}});if(proc instanceof Error&&typeof proc.exitCode!="number")return output_manager_default.prettyError(proc),1;let{exitCode}=proc,color;exitCode===0?(color=import_chalk12.default.green,action="good"):exitCode===125?(action="skip",color=import_chalk12.default.grey):(action="bad",color=import_chalk12.default.red),output_manager_default.log(`Run script returned exit code ${import_chalk12.default.bold(String(exitCode))}: ${color(action)}`)}else openEnabled&&await(0,import_open.default)(testUrl),action=await client.input.expand({message:"Select an action:",choices:[{key:"g",name:"Good",value:"good"},{key:"b",name:"Bad",value:"bad"},{key:"s",name:"Skip",value:"skip"}]});action==="good"?deployments=deployments.slice(0,middleIndex):action==="bad"?(lastBad=deployment,deployments=deployments.slice(middleIndex+1)):action==="skip"&&deployments.splice(middleIndex,1)}output_manager_default.print(`
75
+ `);let result=[import_chalk12.default.bold(`The first bad deployment is: ${link_default(`https://${lastBad.url}`)}`),"",` ${import_chalk12.default.bold("Date:")} ${formatDate(lastBad.createdAt)}`],commit=getCommit(lastBad);if(commit){let shortSha=commit.sha.substring(0,7),firstLine=commit.message?.split(`
76
+ `)[0];result.push(` ${import_chalk12.default.bold("Commit:")} [${shortSha}] ${firstLine}`)}return result.push(`${import_chalk12.default.bold("Inspect:")} ${link_default(lastBad.inspectorUrl)}`),output_manager_default.print(box(result.join(`
56
77
  `))),output_manager_default.print(`
57
- `),0}function getCommit(deployment){let sha=deployment.meta?.githubCommitSha||deployment.meta?.gitlabCommitSha||deployment.meta?.bitbucketCommitSha;if(!sha)return null;let message=deployment.meta?.githubCommitMessage||deployment.meta?.gitlabCommitMessage||deployment.meta?.bitbucketCommitMessage;return{sha,message}}var BudgetTelemetryClient=class extends TelemetryClient{trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandAlerts(actual){this.trackCliSubcommand({subcommand:"alerts",value:actual})}};var import_chalk12=__toESM(require_source(),1);function webhookLabel(state){return state.webhookStatus==="unavailable"?"configured (unavailable)":state.webhookUrl??"\u2014"}function printBudgetsTable(states,spentFor){let spendHeaders=spentFor?["spent","used"]:[],spendAlign=spentFor?["r","r"]:[];return`${table([["scope","amount",...spendHeaders,"status","pause","webhook"].map(header=>import_chalk12.default.gray(header)),...states.map(state=>{let spendCells=[];if(spentFor){let spent=spentFor(state),used=percentUsed(spent,state.amount);spendCells.push(spent===null?"\u2014":formatUsd(spent),used===null?"\u2014":`${used}%`)}return[state.scopeId?`${state.scope} ${state.scopeId}`:state.scope,formatUsdWhole(state.amount),...spendCells,state.status,state.pause?"yes":"no",webhookLabel(state)]})],{align:["l","r",...spendAlign,"l","l","l"],hsep:4}).replace(/^/gm," ")}
78
+ `),0}function getCommit(deployment){let sha=deployment.meta?.githubCommitSha||deployment.meta?.gitlabCommitSha||deployment.meta?.bitbucketCommitSha;if(!sha)return null;let message=deployment.meta?.githubCommitMessage||deployment.meta?.gitlabCommitMessage||deployment.meta?.bitbucketCommitMessage;return{sha,message}}var BudgetTelemetryClient=class extends TelemetryClient{trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandAlerts(actual){this.trackCliSubcommand({subcommand:"alerts",value:actual})}};var import_chalk13=__toESM(require_source(),1);function webhookLabel(state){return state.webhookStatus==="unavailable"?"configured (unavailable)":state.webhookUrl??"\u2014"}function printBudgetsTable(states,spentFor){let spendHeaders=spentFor?["spent","used"]:[],spendAlign=spentFor?["r","r"]:[];return`${table([["scope","amount",...spendHeaders,"status","pause","webhook"].map(header=>import_chalk13.default.gray(header)),...states.map(state=>{let spendCells=[];if(spentFor){let spent=spentFor(state),used=percentUsed(spent,state.amount);spendCells.push(spent===null?"\u2014":formatUsd(spent),used===null?"\u2014":`${used}%`)}return[state.scopeId?`${state.scope} ${state.scopeId}`:state.scope,formatUsdWhole(state.amount),...spendCells,state.status,state.pause?"yes":"no",webhookLabel(state)]})],{align:["l","r",...spendAlign,"l","l","l"],hsep:4}).replace(/^/gm," ")}
58
79
 
59
- `}function warnUnavailableWebhooks(states){states.some(state=>state.webhookStatus==="unavailable")&&output_manager_default.warn("A webhook is configured, but its URL could not be loaded. That is not the same as having no webhook.")}function formatAlertTime(ms10){return Number.isFinite(ms10)?`${new Date(ms10).toISOString().slice(0,16).replace("T"," ")} UTC`:"\u2014"}function formatUsdString(value,{whole}){let dollars=Number(value);return Number.isFinite(dollars)?whole&&Number.isInteger(dollars)?formatUsdWhole(dollars):formatUsd(dollars):value}function alertThresholdLabel(alert){return`${alert.threshold.percent}%`}function alertActionsLabel(alert){let{sendNotifications,triggerWebhook,pauseUsage}=alert.threshold,actions=[sendNotifications&&"notify",triggerWebhook&&"webhook",pauseUsage&&"pause"].filter(Boolean);return actions.length>0?actions.join(", "):"\u2014"}function printBudgetAlertsTable(alerts2){return`${table([["date","budget","threshold","spent","budget amount","actions configured"].map(header=>import_chalk12.default.gray(header)),...alerts2.map(alert=>[formatAlertTime(alert.triggeredAt),alert.scope,alertThresholdLabel(alert),formatUsdString(alert.spent,{whole:!1}),formatUsdString(alert.budgetAmount,{whole:!0}),alertActionsLabel(alert)])],{align:["l","l","r","r","r","l"],hsep:4}).replace(/^/gm," ")}
80
+ `}function warnUnavailableWebhooks(states){states.some(state=>state.webhookStatus==="unavailable")&&output_manager_default.warn("A webhook is configured, but its URL could not be loaded. That is not the same as having no webhook.")}function formatAlertTime(ms10){return Number.isFinite(ms10)?`${new Date(ms10).toISOString().slice(0,16).replace("T"," ")} UTC`:"\u2014"}function formatUsdString(value,{whole}){let dollars=Number(value);return Number.isFinite(dollars)?whole&&Number.isInteger(dollars)?formatUsdWhole(dollars):formatUsd(dollars):value}function alertThresholdLabel(alert){return`${alert.threshold.percent}%`}function alertActionsLabel(alert){let{sendNotifications,triggerWebhook,pauseUsage}=alert.threshold,actions=[sendNotifications&&"notify",triggerWebhook&&"webhook",pauseUsage&&"pause"].filter(Boolean);return actions.length>0?actions.join(", "):"\u2014"}function printBudgetAlertsTable(alerts2){return`${table([["date","budget","threshold","spent","budget amount","actions configured"].map(header=>import_chalk13.default.gray(header)),...alerts2.map(alert=>[formatAlertTime(alert.triggeredAt),alert.scope,alertThresholdLabel(alert),formatUsdString(alert.spent,{whole:!1}),formatUsdString(alert.budgetAmount,{whole:!0}),alertActionsLabel(alert)])],{align:["l","l","r","r","r","l"],hsep:4}).replace(/^/gm," ")}
60
81
 
61
- `}async function resolveBudgetTeam(client){let id=await client.resolveCurrentTeam();if(!id)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> budget \u2026` or run `vercel switch` first."),null;try{let team=await getTeamByIdOrSlug(client,id);return{id:team.id,slug:team.slug}}catch{return{id,slug:id}}}function rejectUnexpectedArgs(args,command){return args.length===0?!1:(output_manager_default.error(`Unexpected argument "${args[0]}". ${getCommandName(command)} takes options only.`),!0)}function scopedBudgetCommand(client,team,subcommand){return getCommandName(scopedBudgetSubcommand(client,team,subcommand))}function scopedBudgetSubcommand(client,team,subcommand){let full=buildCommandWithGlobalFlags(client.argv,`--scope ${team.slug} ${subcommand}`,packageName,{prependGlobalFlags:!0,excludeFlags:["--scope","-S","--team","-T"]});return full.startsWith(`${packageName} `)?full.slice(packageName.length+1):full}var BudgetListTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list3(client,argv){let telemetry=new BudgetListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand9.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets list"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let team=await resolveBudgetTeam(client);if(!team)return 2;output_manager_default.spinner("Fetching budgets\u2026");try{let budgets=await listBudgets(client),states=await Promise.all(budgets.map(budget2=>toBudgetState(client,budget2)));return output_manager_default.stopSpinner(),printTeamList(client,{asJson,states,team})}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}function printTeamList(client,{asJson,states,team}){return asJson?(client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,budgets:states.map(budgetStatePayload)},null,2)}
82
+ `}async function resolveBudgetTeam(client){let id=await client.resolveCurrentTeam();if(!id)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> budget \u2026` or run `vercel switch` first."),null;try{let team=await getTeamByIdOrSlug(client,id);return{id:team.id,slug:team.slug}}catch{return{id,slug:id}}}function rejectUnexpectedArgs(args,command){return args.length===0?!1:(output_manager_default.error(`Unexpected argument "${args[0]}". ${getCommandName(command)} takes options only.`),!0)}function scopedBudgetCommand(client,team,subcommand){return getCommandName(scopedBudgetSubcommand(client,team,subcommand))}function scopedBudgetSubcommand(client,team,subcommand){let full=buildCommandWithGlobalFlags(client.argv,`--scope ${team.slug} ${subcommand}`,packageName,{prependGlobalFlags:!0,excludeFlags:["--scope","-S","--team","-T"]});return full.startsWith(`${packageName} `)?full.slice(packageName.length+1):full}var BudgetListTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list4(client,argv){let telemetry=new BudgetListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand9.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets list"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let team=await resolveBudgetTeam(client);if(!team)return 2;output_manager_default.spinner("Fetching budgets\u2026");try{let budgets=await listBudgets(client),states=await Promise.all(budgets.map(budget2=>toBudgetState(client,budget2)));return output_manager_default.stopSpinner(),printTeamList(client,{asJson,states,team})}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}function printTeamList(client,{asJson,states,team}){return asJson?(client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,budgets:states.map(budgetStatePayload)},null,2)}
62
83
  `),0):states.length===0?(output_manager_default.log(`No budgets found on team ${team.slug}. Set one with ${scopedBudgetCommand(client,team,"budgets set --amount <dollars>")}.`),0):(output_manager_default.log("Budgets"),warnUnavailableWebhooks(states),client.stdout.write(printBudgetsTable(states)),0)}var BudgetSetTelemetryClient=class extends TelemetryClient{trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",value:this.redactedValue})}trackCliFlagPause(pause){pause&&this.trackCliFlag("pause")}trackCliFlagNoPause(noPause){noPause&&this.trackCliFlag("no-pause")}trackCliOptionWebhook(webhook){webhook&&this.trackCliOption({option:"webhook",value:this.redactedValue})}trackCliFlagNoWebhook(noWebhook){noWebhook&&this.trackCliFlag("no-webhook")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function set2(client,argv){let telemetry=new BudgetSetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(setSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets set"))return 2;let amountFlag=opts["--amount"],pauseFlag=opts["--pause"],noPauseFlag=opts["--no-pause"],webhookFlag=opts["--webhook"],noWebhookFlag=opts["--no-webhook"],pauseSpecified=!!(pauseFlag||noPauseFlag),webhookSpecified=webhookFlag!==void 0||!!noWebhookFlag,formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(telemetry.trackCliOptionAmount(amountFlag),telemetry.trackCliFlagPause(pauseFlag),telemetry.trackCliFlagNoPause(noPauseFlag),telemetry.trackCliOptionWebhook(webhookFlag),telemetry.trackCliFlagNoWebhook(noWebhookFlag),telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]),pauseFlag&&noPauseFlag)return output_manager_default.error("Cannot use --pause and --no-pause together."),2;if(webhookFlag!==void 0&&noWebhookFlag)return output_manager_default.error("Cannot use --webhook and --no-webhook together."),2;if(webhookFlag!==void 0&&webhookFlag.trim()==="")return output_manager_default.error("Provide a webhook URL, or use --no-webhook to remove it."),2;if(amountFlag===void 0&&!pauseSpecified&&!webhookSpecified)return output_manager_default.error(`Specify ${getCommandName("budgets set --amount <dollars>")} to create a budget, or --pause / --webhook to update the existing one.`),2;if(amountFlag!==void 0){if(!Number.isInteger(amountFlag))return output_manager_default.error("A budget must be a whole number of dollars."),2;if(amountFlag<1)return output_manager_default.error("A budget must be at least $1."),2}let team=await resolveBudgetTeam(client);if(!team)return 2;let selector=TEAM_BUDGET;output_manager_default.spinner("Fetching budget\u2026");let webhookSecret;try{let existing=await findBudget(client,selector),amount;if(amountFlag!==void 0)amount=amountFlag;else if(existing)amount=budgetAmountDollars(existing);else return output_manager_default.stopSpinner(),output_manager_default.error(`No budget to update. Create one with ${scopedBudgetCommand(client,team,"budgets set --amount <dollars>")}.`),1;let pause;pauseFlag?pause=!0:noPauseFlag?pause=!1:existing?pause=budgetPauses(existing):pause=!1;let webhookUrl;noWebhookFlag?webhookUrl=void 0:webhookFlag!==void 0?webhookUrl=webhookFlag.trim():existing?.webhookId&&(webhookUrl=(await getWebhook(client,existing.webhookId)).url);let thresholds=thresholdsForSet({existing:existing?.thresholds,pause,pauseSpecified,webhookUrl,webhookSpecified});if(pauseFlag&&!hasPauseThreshold(thresholds))return output_manager_default.stopSpinner(),output_manager_default.error("Pause only applies at 100% of the budget. This budget has no 100% threshold."),1;let invalidPause=pausePercentsOutside100(thresholds);if(invalidPause.length>0)return output_manager_default.stopSpinner(),output_manager_default.error(`Pause only applies at 100% of the budget. This budget pauses at ${invalidPause.map(percent=>`${percent}%`).join(", ")}. Re-run with --pause to move it to 100%, or --no-pause to clear it.`),1;output_manager_default.stopSpinner(),pauseFlag&&!asJson&&output_manager_default.log(`Pause all projects on team ${team.slug} at 100% (${formatUsdWhole(amount)}). Production deployments become unavailable.`),output_manager_default.spinner("Saving budget\u2026"),webhookSecret=(await setBudget(client,{amount,thresholds,...selector,...webhookUrl?{webhookUrl}:{}})).webhookSecret;let state;try{let row=await findBudget(client,selector);row&&(state=await toBudgetState(client,row,selector))}catch{state=void 0}return output_manager_default.stopSpinner(),state?asJson?(client.stdout.write(`${JSON.stringify(setSavedReceipt({team,reloaded:state,webhookSecret,amount,scope:selector.scope}),null,2)}
63
84
  `),0):(output_manager_default.success(`Budget updated on team ${team.slug}.`),warnUnavailableWebhooks([state]),client.stdout.write(printBudgetsTable([state])),printWebhookSecret(webhookSecret),0):(printSavedWithoutReload(client,{asJson,team,amount,webhookSecret}),0)}catch(err){return output_manager_default.stopSpinner(),printSetFailure(err,client,team)}}function printSavedWithoutReload(client,{asJson,team,amount,webhookSecret}){output_manager_default.warn(`Budget saved on team ${team.slug}, but it could not be reloaded. Run ${scopedBudgetCommand(client,team,"budgets")} to confirm before retrying.`),asJson?client.stdout.write(`${JSON.stringify(setSavedReceipt({team,reloaded:null,webhookSecret,amount,scope:TEAM_BUDGET.scope}),null,2)}
64
85
  `):printWebhookSecret(webhookSecret)}function printSetFailure(err,client,team){return isAPIError(err)?(output_manager_default.error(err.message),err.status>=500&&printInspectBeforeRetry(client,team),1):(output_manager_default.error(err instanceof Error?err.message:"Failed to save budget."),printInspectBeforeRetry(client,team),1)}function printInspectBeforeRetry(client,team){output_manager_default.log(`If the budget may already exist, run ${scopedBudgetCommand(client,team,"budgets")} before retrying. Retrying this save can drop a new webhook secret.`)}function printWebhookSecret(secret){secret&&(output_manager_default.log(`Webhook secret: ${secret}`),output_manager_default.log("Store it now \u2014 it cannot be retrieved later."))}var BudgetRemoveTelemetryClient=class extends TelemetryClient{trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function remove(client,argv){let telemetry=new BudgetRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs,yes=opts["--yes"];if(rejectUnexpectedArgs(args,"budgets remove"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliFlagYes(yes),telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let team=await resolveBudgetTeam(client);if(!team)return 2;let selector=TEAM_BUDGET;output_manager_default.spinner("Fetching budgets\u2026");let target;try{target=await findBudget(client,selector)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}if(output_manager_default.stopSpinner(),!target)return asJson?client.stdout.write(`${JSON.stringify(removeReceipt({team,alreadyAbsent:!0,disabled:null,scope:selector.scope}),null,2)}
65
86
  `):output_manager_default.log(`No budget to remove on team ${team.slug}.`),0;let amountLabel=formatUsdWhole(budgetAmountDollars(target));if(!yes){if(!client.stdin.isTTY||client.nonInteractive)return output_manager_default.error("To remove in non-interactive mode, re-run with --yes."),2;if(!await client.input.confirm(`Remove the ${amountLabel} budget on team ${team.slug}?`,!1))return output_manager_default.log("Canceled."),0}output_manager_default.spinner(`Removing budget on team ${team.slug}\u2026`);try{await removeBudget(client,target.id)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}return output_manager_default.stopSpinner(),asJson?(client.stdout.write(`${JSON.stringify(removeReceipt({team,alreadyAbsent:!1,disabled:target.id,scope:selector.scope}),null,2)}
66
- `),0):(output_manager_default.success(`Removed the ${amountLabel} budget on team ${team.slug}.`),0)}var BudgetInspectTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect2(client,argv){let telemetry=new BudgetInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let team=await resolveBudgetTeam(client);if(!team)return 2;let selector=TEAM_BUDGET;output_manager_default.spinner("Fetching spend\u2026");let spend,state,recentAlerts=null;try{let[budget2,teamSpend]=await Promise.all([findBudget(client,selector),getTeamSpend(client,team.id,selector,{retry:NO_RETRY}).catch(()=>null)]);spend=teamSpend,budget2&&([state,recentAlerts]=await Promise.all([toBudgetState(client,budget2,selector),fetchRecentAlerts(client,selector,budget2.id)]))}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}output_manager_default.stopSpinner();let spent=spendDollars(spend);if(asJson)return client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,spend:spendPayload(spent,state?.amount??null),budget:state?budgetStatePayload(state):null,recentAlerts},null,2)}
87
+ `),0):(output_manager_default.success(`Removed the ${amountLabel} budget on team ${team.slug}.`),0)}var BudgetInspectTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect3(client,argv){let telemetry=new BudgetInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let team=await resolveBudgetTeam(client);if(!team)return 2;let selector=TEAM_BUDGET;output_manager_default.spinner("Fetching spend\u2026");let spend,state,recentAlerts=null;try{let[budget2,teamSpend]=await Promise.all([findBudget(client,selector),getTeamSpend(client,team.id,selector,{retry:NO_RETRY}).catch(()=>null)]);spend=teamSpend,budget2&&([state,recentAlerts]=await Promise.all([toBudgetState(client,budget2,selector),fetchRecentAlerts(client,selector,budget2.id)]))}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}output_manager_default.stopSpinner();let spent=spendDollars(spend);if(asJson)return client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,spend:spendPayload(spent,state?.amount??null),budget:state?budgetStatePayload(state):null,recentAlerts},null,2)}
67
88
  `),0;if(!state){let spentLine=spent===null?"":` Current spend is ${formatUsd(spent)}.`;return output_manager_default.log(`No budget set on team ${team.slug}.${spentLine} Create one with ${scopedBudgetCommand(client,team,"budgets set --amount <dollars>")}.`),0}return warnUnavailableWebhooks([state]),client.stdout.write(printBudgetsTable([state],()=>spent)),recentAlerts===null?0:recentAlerts.length===0?(output_manager_default.log("No alerts on this budget yet."),0):(output_manager_default.log("Recent alerts"),client.stdout.write(printBudgetAlertsTable(recentAlerts)),0)}var RECENT_ALERTS_LIMIT=3;async function fetchRecentAlerts(client,selector,budgetId){try{return(await listBudgetAlerts(client,selector,{budgetId,limit:RECENT_ALERTS_LIMIT},{retry:NO_RETRY})).data}catch(err){return output_manager_default.debug(`Could not load recent budget alerts: ${err}`),null}}var import_pluralize2=__toESM(require_pluralize(),1);function encodeBudgetAlertsCursor(value){return Buffer.from(JSON.stringify({c:value.cursor,t:value.teamId,s:value.since,u:value.until})).toString("base64url")}function decodeBudgetAlertsCursor(value){if(value===void 0)return{valid:!0,value:void 0};let invalid={valid:!1,code:"INVALID_NEXT",message:INVALID_NEXT_MESSAGE},raw;try{raw=JSON.parse(Buffer.from(value,"base64url").toString("utf8"))}catch{return invalid}if(typeof raw!="object"||raw===null)return invalid;let{c,t,s,u}=raw;return typeof c!="string"||typeof t!="string"||!isOptionalMs(s)||!isOptionalMs(u)?invalid:{valid:!0,value:{cursor:c,teamId:t,since:s,until:u}}}function isOptionalMs(value){return value===void 0||Number.isFinite(value)}var BudgetAlertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function alerts(client,argv){let telemetry=new BudgetAlertsTelemetryClient({opts:{store:client.telemetryEventStore}}),action=getSubcommand3(argv,{list:getCommandAliases(alertsListSubcommand)});action.subcommand==="list"&&telemetry.trackCliSubcommandList(action.subcommandOriginal);let parsedArgs,flagsSpecification=getFlagsSpecification(alertsSubcommand.options);try{parsedArgs=parseArguments(action.args,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs;if(rejectUnexpectedArgs(args,"budgets alerts"))return 2;let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionSince(opts["--since"]),telemetry.trackCliOptionUntil(opts["--until"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliOptionFormat(opts["--format"]?"json":void 0),telemetry.trackCliFlagJson(opts["--json"]);let nextResult=decodeBudgetAlertsCursor(opts["--next"]);if(!nextResult.valid)return handleValidationError(nextResult,asJson,client);let cursor=nextResult.value,warnings=[],limit=opts["--limit"];if(typeof limit=="number"&&Number.isInteger(limit)&&limit>MAX_LIST_LIMIT){let message=`--limit ${limit} is above the maximum of ${MAX_LIST_LIMIT}. Using ${MAX_LIST_LIMIT}.`;warnings.push({reason:AGENT_REASON.LIMIT_CLAMPED,message}),asJson||output_manager_default.warning(message),limit=MAX_LIST_LIMIT}let limitResult=validateOptionalIntegerRange(limit,{flag:"--limit",min:1,max:MAX_LIST_LIMIT});if(!limitResult.valid)return handleValidationError(limitResult,asJson,client);let sinceResult=validateTimeBound(opts["--since"]);if(!sinceResult.valid)return handleValidationError(sinceResult,asJson,client);let untilResult=validateTimeBound(opts["--until"]);if(!untilResult.valid)return handleValidationError(untilResult,asJson,client);let order=validateTimeOrder(sinceResult.value,untilResult.value);if(!order.valid)return handleValidationError(order,asJson,client);let team=await resolveBudgetTeam(client);if(!team)return 2;if(cursor&&cursor.teamId!==team.id)return outputError(client,asJson,"INVALID_NEXT",`This --next cursor is from another team, not ${team.slug}. Use the --scope it was printed with.`);let since=cursor?cursor.since:sinceResult.value?.getTime(),until=cursor?cursor.until:untilResult.value?.getTime();output_manager_default.spinner("Fetching budget alerts\u2026");let selector=TEAM_BUDGET,page;try{page=await listBudgetAlerts(client,selector,{since,until,limit:limitResult.value,cursor:cursor?.cursor})}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return err.code==="invalid_cursor"?outputError(client,asJson,"INVALID_NEXT",INVALID_NEXT_MESSAGE):outputError(client,asJson,err.code||"API_ERROR",err.message);throw err}output_manager_default.stopSpinner();let next=page.nextCursor?encodeBudgetAlertsCursor({cursor:page.nextCursor,teamId:team.id,since,until}):null;if(asJson)return client.stdout.write(`${JSON.stringify({teamId:team.id,teamSlug:team.slug,alerts:page.data,pagination:{next},...warnings.length>0?{warnings}:{}},null,2)}
68
- `),0;let where=`on team ${team.slug}`;return page.data.length===0?(output_manager_default.log(cursor?`No more budget alerts ${where}.`:`No budget alerts found ${where}.`),0):(output_manager_default.log(`${(0,import_pluralize2.default)("budget alert",page.data.length,!0)} ${where}`),client.stdout.write(printBudgetAlertsTable(page.data)),next&&printNextPageCommand(getNextPageCommand(client.argv,next,WINDOW_FLAGS)),0)}var WINDOW_FLAGS=["--since","-s","--until","-u"];var COMMAND_CONFIG3={inspect:getCommandAliases(inspectSubcommand4),list:getCommandAliases(listSubcommand9),set:getCommandAliases(setSubcommand2),remove:getCommandAliases(removeSubcommand6),alerts:getCommandAliases(alertsSubcommand)},ADVERTISED_COMMAND_CONFIG=COMMAND_CONFIG3;async function budget(client){let parsedArgs,flagsSpecification=getFlagsSpecification(budgetCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BudgetTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG3),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:budgetCommand,columns:client.stderr.columns}))}switch(subcommand){case"inspect":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(inspectSubcommand4),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="overview"&&warnDeprecatedSubcommand(client,"budgets overview","budgets inspect"),inspect2(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(listSubcommand9),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(setSubcommand2),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),subcommandOriginal==="update"&&warnDeprecatedSubcommand(client,"budgets update","budgets set"),set2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(removeSubcommand6),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),(subcommandOriginal==="delete"||subcommandOriginal==="disable")&&warnDeprecatedSubcommand(client,`budgets ${subcommandOriginal}`,"budgets remove"),remove(client,args));case"alerts":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(alertsSubcommand),0):(telemetry.trackCliSubcommandAlerts(subcommandOriginal),alerts(client,args));default:{let unknown=args[0];return unknown&&!unknown.startsWith("-")?(output_manager_default.error(getInvalidSubcommand(ADVERTISED_COMMAND_CONFIG)),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),2):needHelp?(telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),0):list3(client,args)}}}var import_chalk13=__toESM(require_source(),1);async function createPurchase(client,item){return client.fetch("/v1/billing/buy?source=cli",{method:"POST",body:{item}})}var import_open2=__toESM(require_open(),1),import_error_utils=__toESM(require_dist(),1);function tryOpenBillingPage(teamSlug,openBrowser){if(!openBrowser)return;let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard";(0,import_open2.default)(billingUrl).catch(err=>{output_manager_default.debug(`Failed to open browser: ${err}`)})}function handlePurchaseError(err,teamSlug,opts){let openBrowser=opts?.openBrowser??!1;if(isAPIError(err)){if(err.code==="invalid_plan_iteration")return output_manager_default.error("Your team must be on the Flex plan to purchase add-ons."),1;if(err.code==="missing_subscription")return output_manager_default.error("Your team does not have an active subscription. Please contact support."),1;if(err.code==="missing_stripe_customer"){let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard",dashboardHint=teamSlug?` Please add one: ${output_manager_default.link(billingUrl,billingUrl)}`:` Please add one in the ${output_manager_default.link("Vercel dashboard",billingUrl)}.`;return output_manager_default.error(`Your team does not have a payment method on file.${dashboardHint}`),tryOpenBillingPage(teamSlug,openBrowser),1}if(err.code==="invalid_v0_subscription"){let pricingUrl="https://v0.app/pricing";return output_manager_default.error(`Your team must have a paid v0 plan to purchase v0 credits. Upgrade at ${output_manager_default.link(pricingUrl,pricingUrl)}`),1}if(err.code==="invalid_plan")return output_manager_default.error("Your team's current plan does not support this purchase."),1;if(err.code==="already_on_plan")return output_manager_default.error("Your team already has an active subscription for this plan."),1;if(err.code==="invalid_status")return output_manager_default.error("Your team is not in a state that allows plan changes. Please contact support."),1;if(err.code==="forbidden")return output_manager_default.error("You do not have permission to make purchases for this team. Please contact your account administrator."),1;if(err.code==="purchase_create_failed"||err.code==="purchase_confirm_failed"||err.code==="purchase_complete_failed"||err.code==="purchase_create_hosted_failed")return err.status===402?(output_manager_default.error("Payment failed. Please check that your team has a valid payment method on file."),tryOpenBillingPage(teamSlug,openBrowser),1):(output_manager_default.error("An error occurred while processing your purchase. Please try again later."),output_manager_default.debug(`Error code: ${err.code}`),1);if(err.status===402||err.code==="payment_failed")return output_manager_default.error("Payment failed. Please check the payment method on file for your team."),tryOpenBillingPage(teamSlug,openBrowser),1}return output_manager_default.error("An unexpected error occurred while completing your purchase. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils.errorToString)(err)}`),1}var MAX_CREDIT_PURCHASE_AMOUNT=1e3;async function credits(client,argv){let flagsSpecification=getFlagsSpecification(creditsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{args}=parsedArgs,[creditType,amountStr]=args;if(!creditType)return output_manager_default.error(`Missing credit type. Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;if(!SUPPORTED_CREDIT_TYPES.includes(creditType))return output_manager_default.error(`Invalid credit type "${creditType}". Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),1;if(!amountStr)return output_manager_default.error("Missing amount. Please specify the amount in dollars."),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;let amount=Number(amountStr);if(!Number.isInteger(amount))return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a whole number (in dollars).`),2;if(amount<=0)return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a positive amount in dollars.`),2;if(amount>MAX_CREDIT_PURCHASE_AMOUNT)return output_manager_default.error(`Amount cannot exceed $${MAX_CREDIT_PURCHASE_AMOUNT.toLocaleString()} per purchase via CLI.`),1;let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;let typedCreditType=creditType,label=CREDIT_TYPE_LABELS[typedCreditType];if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Purchase ${import_chalk13.default.bold(`$${amount}`)} of ${label} credits for team ${import_chalk13.default.bold(contextName)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"credits",creditType:typedCreditType,amount});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({creditType:typedCreditType,amount,team:contextName,purchaseIntent:result.purchaseIntent},null,2)}
69
- `):(output_manager_default.success(`Purchased ${import_chalk13.default.bold(`$${amount}`)} of ${label} credits for ${import_chalk13.default.bold(contextName)} ${purchaseStamp()}`),result.purchaseIntent&&output_manager_default.debug(`Purchase intent: ${result.purchaseIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}var import_chalk14=__toESM(require_source(),1);var import_error_utils2=__toESM(require_dist(),1);function handleCustomEnvironmentPurchaseError(err){if(isAPIError(err)){if(err.code==="upgrade_required")return output_manager_default.error("Custom environment purchases require an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")} or visit ${output_manager_default.link("vercel.com/pricing","https://vercel.com/pricing")}.`),1;if(err.code==="custom_environments_not_available_to_purchase")return output_manager_default.error(err.serverMessage||"Custom environments are not available to purchase on this team."),1;if(err.code==="custom_environments_in_use")return output_manager_default.error(err.serverMessage||"This project is using more custom environments than the requested capacity allows."),1;if(err.code==="bad_request"&&err.serverMessage)return output_manager_default.error(err.serverMessage),1;if(err.code==="forbidden")return output_manager_default.error(err.serverMessage||"You do not have permission to update custom environment capacity for this project."),1}return output_manager_default.error("An error occurred while updating custom environment capacity. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils2.errorToString)(err)}`),1}async function purchaseCustomEnvironmentCapacity(client,{packs,yes,projectName,commandName}){let{cwd}=client,link=await ensureLink(commandName,client,cwd,{autoConfirm:yes,projectName,failIfNotFound:!!projectName});if(typeof link=="number")return link;let projectId=link.project.id,projectNameResolved=link.project.name;output_manager_default.spinner("Fetching custom environment settings");let settings;try{settings=await client.fetch(`/v1/projects/custom-environments/settings?projectId=${encodeURIComponent(projectId)}`,{accountId:link.org.id})}catch(err){return output_manager_default.stopSpinner(),handleCustomEnvironmentPurchaseError(err)}output_manager_default.stopSpinner();let{packSize}=settings,purchasedPacks=settings.purchasedAmount/packSize,minPacks=settings.minPurchasedAmount/packSize,maxPacks=settings.maxPurchasedAmount/packSize;if(packs<minPacks||packs>maxPacks){let minEnvironments=minPacks*packSize,maxEnvironments=maxPacks*packSize;return output_manager_default.error(`Packs must be between ${minPacks} and ${maxPacks} for this project (${minEnvironments}-${maxEnvironments} purchased environments).`),2}if(packs===purchasedPacks)return output_manager_default.log(`Project ${import_chalk14.default.bold(projectNameResolved)} already has ${import_chalk14.default.bold(packs)} custom environment pack${packs===1?"":"s"} purchased.`),0;let purchasedAmount=packs*packSize,isIncreasing=packs>purchasedPacks;if(!yes){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`${isIncreasing?"Purchase":"Reduce to"} ${import_chalk14.default.bold(packs)} custom environment pack${packs===1?"":"s"} (${purchasedAmount} environments) for project ${import_chalk14.default.bold(projectNameResolved)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Updating custom environment capacity");try{let result=await client.fetch(`/v1/projects/custom-environments/settings?projectId=${encodeURIComponent(projectId)}`,{method:"POST",body:{purchasedAmount},accountId:link.org.id});return output_manager_default.stopSpinner(),output_manager_default.success(`Updated custom environment capacity for ${import_chalk14.default.bold(projectNameResolved)} to ${import_chalk14.default.bold(packs)} pack${packs===1?"":"s"} (${result.purchasedAmount} environments) ${purchaseStamp()}`),0}catch(err){return output_manager_default.stopSpinner(),handleCustomEnvironmentPurchaseError(err)}}function validateCustomEnvironmentPacks(packsStr){if(!packsStr)return{error:"Missing packs. Specify the number of custom environment packs to purchase.",usage:`Example: ${getCommandName(`buy addon custom-environment ${2}`)} \u2014 each pack adds ${5} environments.`};let packs=Number(packsStr);return Number.isInteger(packs)?packs<0?{error:`Invalid packs "${packsStr}". Please specify a non-negative number.`}:{packs}:{error:`Invalid packs "${packsStr}". Please specify a whole number.`}}var OBSERVABILITY_PLUS_ADDON_ALIASES=new Set(["observability","observabilityplus","observability-plus","observability_plus"]);function isObservabilityPlusAddonAlias(name){return OBSERVABILITY_PLUS_ADDON_ALIASES.has(name.toLowerCase())}var import_error_utils3=__toESM(require_dist(),1);var OBSERVABILITY_PLUS_PRODUCT_ALIAS="observabilityPlus";async function purchaseObservabilityPlus(client,{yes,asJson}){let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("Observability Plus requires a team. Use --scope to specify one."),1;if(team.billing?.plan==="hobby")return output_manager_default.error("Observability Plus requires an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")}.`),1;let currentConfiguration;asJson||output_manager_default.spinner("Checking Observability Plus status");try{currentConfiguration=await client.fetch("/v1/observability/manage/configuration")}catch(err){return output_manager_default.stopSpinner(),output_manager_default.error("Failed to check Observability Plus status."),output_manager_default.debug(`Server response: ${(0,import_error_utils3.errorToString)(err)}`),1}if(output_manager_default.stopSpinner(),currentConfiguration.observabilityPlus.subscribed)return asJson?client.stdout.write(`${JSON.stringify({productAlias:OBSERVABILITY_PLUS_PRODUCT_ALIAS,quantity:1,team:contextName,teamEnabled:currentConfiguration.observabilityPlus.enabled},null,2)}
89
+ `),0;let where=`on team ${team.slug}`;return page.data.length===0?(output_manager_default.log(cursor?`No more budget alerts ${where}.`:`No budget alerts found ${where}.`),0):(output_manager_default.log(`${(0,import_pluralize2.default)("budget alert",page.data.length,!0)} ${where}`),client.stdout.write(printBudgetAlertsTable(page.data)),next&&printNextPageCommand(getNextPageCommand(client.argv,next,WINDOW_FLAGS)),0)}var WINDOW_FLAGS=["--since","-s","--until","-u"];var COMMAND_CONFIG3={inspect:getCommandAliases(inspectSubcommand4),list:getCommandAliases(listSubcommand9),set:getCommandAliases(setSubcommand2),remove:getCommandAliases(removeSubcommand6),alerts:getCommandAliases(alertsSubcommand)},ADVERTISED_COMMAND_CONFIG=COMMAND_CONFIG3;async function budget(client){let parsedArgs,flagsSpecification=getFlagsSpecification(budgetCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BudgetTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG3),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:budgetCommand,columns:client.stderr.columns}))}switch(subcommand){case"inspect":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(inspectSubcommand4),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="overview"&&warnDeprecatedSubcommand(client,"budgets overview","budgets inspect"),inspect3(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(listSubcommand9),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list4(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(setSubcommand2),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),subcommandOriginal==="update"&&warnDeprecatedSubcommand(client,"budgets update","budgets set"),set2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(removeSubcommand6),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),(subcommandOriginal==="delete"||subcommandOriginal==="disable")&&warnDeprecatedSubcommand(client,`budgets ${subcommandOriginal}`,"budgets remove"),remove(client,args));case"alerts":return needHelp?(telemetry.trackCliFlagHelp("budgets",subcommandOriginal),printHelp(alertsSubcommand),0):(telemetry.trackCliSubcommandAlerts(subcommandOriginal),alerts(client,args));default:{let unknown=args[0];return unknown&&!unknown.startsWith("-")?(output_manager_default.error(getInvalidSubcommand(ADVERTISED_COMMAND_CONFIG)),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),2):needHelp?(telemetry.trackCliFlagHelp("budgets"),output_manager_default.print(help(budgetCommand,{stream:client.stderr,columns:client.stderr.columns})),0):list4(client,args)}}}var import_chalk14=__toESM(require_source(),1);async function createPurchase(client,item){return client.fetch("/v1/billing/buy?source=cli",{method:"POST",body:{item}})}var import_open2=__toESM(require_open(),1),import_error_utils3=__toESM(require_dist(),1);function tryOpenBillingPage(teamSlug,openBrowser){if(!openBrowser)return;let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard";(0,import_open2.default)(billingUrl).catch(err=>{output_manager_default.debug(`Failed to open browser: ${err}`)})}function handlePurchaseError(err,teamSlug,opts){let openBrowser=opts?.openBrowser??!1;if(isAPIError(err)){if(err.code==="invalid_plan_iteration")return output_manager_default.error("Your team must be on the Flex plan to purchase add-ons."),1;if(err.code==="missing_subscription")return output_manager_default.error("Your team does not have an active subscription. Please contact support."),1;if(err.code==="missing_stripe_customer"){let billingUrl=teamSlug?getTeamBillingUrl(teamSlug):"https://vercel.com/dashboard",dashboardHint=teamSlug?` Please add one: ${output_manager_default.link(billingUrl,billingUrl)}`:` Please add one in the ${output_manager_default.link("Vercel dashboard",billingUrl)}.`;return output_manager_default.error(`Your team does not have a payment method on file.${dashboardHint}`),tryOpenBillingPage(teamSlug,openBrowser),1}if(err.code==="invalid_v0_subscription"){let pricingUrl="https://v0.app/pricing";return output_manager_default.error(`Your team must have a paid v0 plan to purchase v0 credits. Upgrade at ${output_manager_default.link(pricingUrl,pricingUrl)}`),1}if(err.code==="invalid_plan")return output_manager_default.error("Your team's current plan does not support this purchase."),1;if(err.code==="already_on_plan")return output_manager_default.error("Your team already has an active subscription for this plan."),1;if(err.code==="invalid_status")return output_manager_default.error("Your team is not in a state that allows plan changes. Please contact support."),1;if(err.code==="forbidden")return output_manager_default.error("You do not have permission to make purchases for this team. Please contact your account administrator."),1;if(err.code==="purchase_create_failed"||err.code==="purchase_confirm_failed"||err.code==="purchase_complete_failed"||err.code==="purchase_create_hosted_failed")return err.status===402?(output_manager_default.error("Payment failed. Please check that your team has a valid payment method on file."),tryOpenBillingPage(teamSlug,openBrowser),1):(output_manager_default.error("An error occurred while processing your purchase. Please try again later."),output_manager_default.debug(`Error code: ${err.code}`),1);if(err.status===402||err.code==="payment_failed")return output_manager_default.error("Payment failed. Please check the payment method on file for your team."),tryOpenBillingPage(teamSlug,openBrowser),1}return output_manager_default.error("An unexpected error occurred while completing your purchase. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils3.errorToString)(err)}`),1}var MAX_CREDIT_PURCHASE_AMOUNT=1e3;async function credits(client,argv){let flagsSpecification=getFlagsSpecification(creditsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{args}=parsedArgs,[creditType,amountStr]=args;if(!creditType)return output_manager_default.error(`Missing credit type. Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;if(!SUPPORTED_CREDIT_TYPES.includes(creditType))return output_manager_default.error(`Invalid credit type "${creditType}". Supported types: ${SUPPORTED_CREDIT_TYPES.join(", ")}`),1;if(!amountStr)return output_manager_default.error("Missing amount. Please specify the amount in dollars."),output_manager_default.log(`Run ${getCommandName("buy credits --help")} for usage.`),2;let amount=Number(amountStr);if(!Number.isInteger(amount))return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a whole number (in dollars).`),2;if(amount<=0)return output_manager_default.error(`Invalid amount "${amountStr}". Please specify a positive amount in dollars.`),2;if(amount>MAX_CREDIT_PURCHASE_AMOUNT)return output_manager_default.error(`Amount cannot exceed $${MAX_CREDIT_PURCHASE_AMOUNT.toLocaleString()} per purchase via CLI.`),1;let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;let typedCreditType=creditType,label=CREDIT_TYPE_LABELS[typedCreditType];if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Purchase ${import_chalk14.default.bold(`$${amount}`)} of ${label} credits for team ${import_chalk14.default.bold(contextName)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"credits",creditType:typedCreditType,amount});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({creditType:typedCreditType,amount,team:contextName,purchaseIntent:result.purchaseIntent},null,2)}
90
+ `):(output_manager_default.success(`Purchased ${import_chalk14.default.bold(`$${amount}`)} of ${label} credits for ${import_chalk14.default.bold(contextName)} ${purchaseStamp()}`),result.purchaseIntent&&output_manager_default.debug(`Purchase intent: ${result.purchaseIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}var import_chalk15=__toESM(require_source(),1);var import_error_utils4=__toESM(require_dist(),1);function handleCustomEnvironmentPurchaseError(err){if(isAPIError(err)){if(err.code==="upgrade_required")return output_manager_default.error("Custom environment purchases require an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")} or visit ${output_manager_default.link("vercel.com/pricing","https://vercel.com/pricing")}.`),1;if(err.code==="custom_environments_not_available_to_purchase")return output_manager_default.error(err.serverMessage||"Custom environments are not available to purchase on this team."),1;if(err.code==="custom_environments_in_use")return output_manager_default.error(err.serverMessage||"This project is using more custom environments than the requested capacity allows."),1;if(err.code==="bad_request"&&err.serverMessage)return output_manager_default.error(err.serverMessage),1;if(err.code==="forbidden")return output_manager_default.error(err.serverMessage||"You do not have permission to update custom environment capacity for this project."),1}return output_manager_default.error("An error occurred while updating custom environment capacity. Please try again later."),output_manager_default.debug(`Server response: ${(0,import_error_utils4.errorToString)(err)}`),1}async function purchaseCustomEnvironmentCapacity(client,{packs,yes,projectName,commandName}){let{cwd}=client,link2=await ensureLink(commandName,client,cwd,{autoConfirm:yes,projectName,failIfNotFound:!!projectName});if(typeof link2=="number")return link2;let projectId=link2.project.id,projectNameResolved=link2.project.name;output_manager_default.spinner("Fetching custom environment settings");let settings;try{settings=await client.fetch(`/v1/projects/custom-environments/settings?projectId=${encodeURIComponent(projectId)}`,{accountId:link2.org.id})}catch(err){return output_manager_default.stopSpinner(),handleCustomEnvironmentPurchaseError(err)}output_manager_default.stopSpinner();let{packSize}=settings,purchasedPacks=settings.purchasedAmount/packSize,minPacks=settings.minPurchasedAmount/packSize,maxPacks=settings.maxPurchasedAmount/packSize;if(packs<minPacks||packs>maxPacks){let minEnvironments=minPacks*packSize,maxEnvironments=maxPacks*packSize;return output_manager_default.error(`Packs must be between ${minPacks} and ${maxPacks} for this project (${minEnvironments}-${maxEnvironments} purchased environments).`),2}if(packs===purchasedPacks)return output_manager_default.log(`Project ${import_chalk15.default.bold(projectNameResolved)} already has ${import_chalk15.default.bold(packs)} custom environment pack${packs===1?"":"s"} purchased.`),0;let purchasedAmount=packs*packSize,isIncreasing=packs>purchasedPacks;if(!yes){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`${isIncreasing?"Purchase":"Reduce to"} ${import_chalk15.default.bold(packs)} custom environment pack${packs===1?"":"s"} (${purchasedAmount} environments) for project ${import_chalk15.default.bold(projectNameResolved)}?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Updating custom environment capacity");try{let result=await client.fetch(`/v1/projects/custom-environments/settings?projectId=${encodeURIComponent(projectId)}`,{method:"POST",body:{purchasedAmount},accountId:link2.org.id});return output_manager_default.stopSpinner(),output_manager_default.success(`Updated custom environment capacity for ${import_chalk15.default.bold(projectNameResolved)} to ${import_chalk15.default.bold(packs)} pack${packs===1?"":"s"} (${result.purchasedAmount} environments) ${purchaseStamp()}`),0}catch(err){return output_manager_default.stopSpinner(),handleCustomEnvironmentPurchaseError(err)}}function validateCustomEnvironmentPacks(packsStr){if(!packsStr)return{error:"Missing packs. Specify the number of custom environment packs to purchase.",usage:`Example: ${getCommandName(`buy addon custom-environment ${2}`)} \u2014 each pack adds ${5} environments.`};let packs=Number(packsStr);return Number.isInteger(packs)?packs<0?{error:`Invalid packs "${packsStr}". Please specify a non-negative number.`}:{packs}:{error:`Invalid packs "${packsStr}". Please specify a whole number.`}}var OBSERVABILITY_PLUS_ADDON_ALIASES=new Set(["observability","observabilityplus","observability-plus","observability_plus"]);function isObservabilityPlusAddonAlias(name){return OBSERVABILITY_PLUS_ADDON_ALIASES.has(name.toLowerCase())}var import_error_utils5=__toESM(require_dist(),1);var OBSERVABILITY_PLUS_PRODUCT_ALIAS="observabilityPlus";async function purchaseObservabilityPlus(client,{yes,asJson}){let{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("Observability Plus requires a team. Use --scope to specify one."),1;if(team.billing?.plan==="hobby")return output_manager_default.error("Observability Plus requires an active Pro or Enterprise plan."),output_manager_default.log(`Upgrade with ${getCommandName("buy pro")}.`),1;let currentConfiguration;asJson||output_manager_default.spinner("Checking Observability Plus status");try{currentConfiguration=await client.fetch("/v1/observability/manage/configuration")}catch(err){return output_manager_default.stopSpinner(),output_manager_default.error("Failed to check Observability Plus status."),output_manager_default.debug(`Server response: ${(0,import_error_utils5.errorToString)(err)}`),1}if(output_manager_default.stopSpinner(),currentConfiguration.observabilityPlus.subscribed)return asJson?client.stdout.write(`${JSON.stringify({productAlias:OBSERVABILITY_PLUS_PRODUCT_ALIAS,quantity:1,team:contextName,teamEnabled:currentConfiguration.observabilityPlus.enabled},null,2)}
70
91
  `):(printAlignedLabel("Status","Already enabled"),printAlignedLabel("Team",contextName)),0;if(!yes&&(!client.stdin.isTTY||client.nonInteractive))return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if((!asJson||!yes)&&(printAlignedLabel("Add-on","Observability Plus"),printAlignedLabel("Team",contextName),printAlignedLabel("Usage","Billed as accrued")),!yes&&!await client.input.confirm("Enable this add-on?",!1))return 0;asJson||output_manager_default.spinner("Enabling Observability Plus");try{let result=await client.fetch("/v1/observability/manage/configuration",{method:"PATCH",body:{teamEnabled:!0}});return output_manager_default.stopSpinner(),result.teamEnabled?(asJson?client.stdout.write(`${JSON.stringify({productAlias:OBSERVABILITY_PLUS_PRODUCT_ALIAS,quantity:1,team:contextName,teamEnabled:result.teamEnabled},null,2)}
71
- `):(printAlignedLabel("Enabled","Observability Plus",{gutter:"\u2713"}),printAlignedLabel("Team",contextName)),0):(output_manager_default.error("The API did not confirm Observability Plus access for this team. Check the team billing settings before retrying."),1)}catch(err){return output_manager_default.stopSpinner(),handleObservabilityPlusPurchaseError(err,contextName)}}function handleObservabilityPlusPurchaseError(err,teamSlug){if(isAPIError(err)){if(err.code==="forbidden")return output_manager_default.error("Only team owners can purchase Observability Plus. Ask a team owner."),1;if(err.code==="invalid_plan_status")return output_manager_default.error("Observability Plus can't be enabled while this team's subscription is in its current state."),output_manager_default.log(`Review the team billing settings: ${output_manager_default.link(getTeamBillingUrl(teamSlug),getTeamBillingUrl(teamSlug))}`),1;if(err.code==="invalid_product"||err.code==="invalid_price")return output_manager_default.error("Observability Plus isn't available for this team's current plan."),output_manager_default.log(`Review the team billing settings: ${output_manager_default.link(getTeamBillingUrl(teamSlug),getTeamBillingUrl(teamSlug))}`),1}return output_manager_default.error("Failed to enable Observability Plus."),output_manager_default.debug(`Server response: ${(0,import_error_utils3.errorToString)(err)}`),1}async function addon(client,argv){let flagsSpecification=getFlagsSpecification(addonSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,[addonName,quantityStr]=args;if(addonName&&isCustomEnvironmentAddonAlias(addonName)){let packsResult=validateCustomEnvironmentPacks(quantityStr);if("error"in packsResult)return output_manager_default.error(packsResult.error),packsResult.usage&&output_manager_default.log(packsResult.usage),1;let project=flags["--project"];return purchaseCustomEnvironmentCapacity(client,{packs:packsResult.packs,yes:!!flags["--yes"],projectName:typeof project=="string"?project:void 0,commandName:"buy"})}if(addonName&&isObservabilityPlusAddonAlias(addonName)){if(flags["--project"]!==void 0)return output_manager_default.error("--project isn't supported for Observability Plus because it is enabled for a team. Use --scope <team> to select the team."),1;if(quantityStr!==void 0)return output_manager_default.error(`Observability Plus does not accept a quantity. Run ${getCommandName("buy addon observability-plus")} without one.`),1;let formatResult=validateJsonOutput(parsedArgs.flags);return formatResult.valid?purchaseObservabilityPlus(client,{yes:!!flags["--yes"],asJson:formatResult.jsonOutput}):(output_manager_default.error(formatResult.error),2)}return addonName?(output_manager_default.error(`Invalid addon "${addonName}". Supported addons: ${SUPPORTED_ADDON_NAMES.join(", ")}.`),1):(output_manager_default.error(`Missing addon name. Supported addons: ${SUPPORTED_ADDON_NAMES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy addon --help")} for usage.`),2)}var import_chalk15=__toESM(require_source(),1);async function pro(client,argv){let flagsSpecification=getFlagsSpecification(proSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Upgrade team ${import_chalk15.default.bold(contextName)} to Vercel Pro?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"subscription",planSlug:"pro"});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({team:contextName,subscriptionIntent:result.subscriptionIntent},null,2)}
72
- `):(output_manager_default.success(`Upgraded ${import_chalk15.default.bold(contextName)} to Vercel Pro ${purchaseStamp()}`),result.subscriptionIntent&&output_manager_default.debug(`Subscription intent: ${result.subscriptionIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}async function domain(client,argv){return buy(client,argv)}var BuyTelemetryClient=class extends TelemetryClient{trackCliSubcommandCredits(actual){this.trackCliSubcommand({subcommand:"credits",value:actual})}trackCliSubcommandAddon(actual){this.trackCliSubcommand({subcommand:"addon",value:actual})}trackCliSubcommandPro(actual){this.trackCliSubcommand({subcommand:"pro",value:actual})}trackCliSubcommandDomain(actual){this.trackCliSubcommand({subcommand:"domain",value:actual})}};var COMMAND_CONFIG4={credits:getCommandAliases(creditsSubcommand),addon:getCommandAliases(addonSubcommand),pro:getCommandAliases(proSubcommand),domain:getCommandAliases(domainSubcommand)};async function main(client){let parsedArgs,flagsSpecification=getFlagsSpecification(buyCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BuyTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG4),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("buy"),output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:buyCommand,columns:client.stderr.columns})),0}if(!subcommand)return output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),2;switch(subcommand){case"credits":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(creditsSubcommand)):(telemetry.trackCliSubcommandCredits(subcommandOriginal),credits(client,args));case"addon":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(addonSubcommand)):(telemetry.trackCliSubcommandAddon(subcommandOriginal),subcommandOriginal!=="addon"&&warnDeprecatedSubcommand(client,`buy ${subcommandOriginal}`,"buy addon"),addon(client,args));case"pro":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(proSubcommand)):(telemetry.trackCliSubcommandPro(subcommandOriginal),pro(client,args));case"domain":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(domainSubcommand)):(telemetry.trackCliSubcommandDomain(subcommandOriginal),domain(client,args));default:return output_manager_default.error(`Unknown subcommand: ${subcommand}`),output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk16=__toESM(require_source(),1);var import_error_utils4=__toESM(require_dist(),1);import{readFileSync}from"fs";import{resolve as resolve2}from"path";async function createCertFromFile(client,keyPath,certPath,caPath){output_manager_default.spinner("Adding your custom certificate");try{let cert=readFileSync(resolve2(certPath),"utf8"),key=readFileSync(resolve2(keyPath),"utf8"),ca=readFileSync(resolve2(caPath),"utf8");return await client.fetch("/v3/certs",{method:"PUT",body:{ca,cert,key}})}catch(err){if((0,import_error_utils4.isErrnoException)(err)&&err.code==="ENOENT")return new Error(`The specified file "${err.path}" doesn't exist.`);if(isAPIError(err)&&err.status<500)return err;throw err}}var CertsAddTelemetryClient=class extends TelemetryClient{trackCliFlagOverwrite(v){v&&this.trackCliFlag("overwrite")}trackCliOptionCrt(v){v&&this.trackCliOption({option:"crt",value:this.redactedValue})}trackCliOptionKey(v){v&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionCa(v){v&&this.trackCliOption({option:"ca",value:this.redactedValue})}};async function add(client,argv){let{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,cert,{"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsAddTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath){if(args.length!==0||!crtPath||!keyPath||!caPath)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk16.default.cyan(`${getCommandName("certs add --crt <domain.crt> --key <domain.key> --ca <ca.crt>")}`)}
73
- `),1;cert=await createCertFromFile(client,keyPath,crtPath,caPath)}else{if(output_manager_default.warn(`${import_chalk16.default.cyan(getCommandName("certs add"))} will be soon deprecated. Please use ${import_chalk16.default.cyan(getCommandName("certs issue <cn> <cns>"))} instead`),args.length<1)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk16.default.cyan(getCommandName("certs add <cn>[, <cn>]"))}
74
- `),2;let cns=args.reduce((res,item)=>res.concat(item.split(",")),[]);output_manager_default.spinner(`Generating a certificate for ${import_chalk16.default.bold(cns.join(", "))}`);let contextName=await getContextName(client);cert=await createCertForCns(client,cns,contextName),output_manager_default.stopSpinner()}return cert instanceof Error?(output_manager_default.error(cert.message),1):(output_manager_default.success(`Certificate entry for ${import_chalk16.default.bold(cert.cns.join(", "))} created ${addStamp()}`),0)}var add_default=add;var import_chalk19=__toESM(require_source(),1),import_tldts3=__toESM(require_cjs(),1);var import_chalk17=__toESM(require_source(),1);async function startCertOrder(client,cns,context){output_manager_default.spinner(`Issuing a certificate for ${import_chalk17.default.bold(cns.join(", "))}`);try{return await client.fetch("/v3/certs",{method:"PATCH",body:{op:"finalizeOrder",domains:cns}})}catch(err){if(isAPIError(err)){if(err.code==="cert_order_not_found")return new CertOrderNotFound(cns);let mappedError=mapCertError(err,cns);if(mappedError)return mappedError}throw err}}function getCnsFromArgs(args){return args.reduce((res,item)=>[...res,...item.split(",")],[]).filter(i=>i)}var import_chalk18=__toESM(require_source(),1);async function startCertOrder2(client,cns,contextName){return output_manager_default.spinner(`Starting certificate issuance for ${import_chalk18.default.bold(cns.join(", "))} under ${import_chalk18.default.bold(contextName)}`),await client.fetch("/v3/certs",{method:"PATCH",body:{op:"startOrder",domains:cns}})}var CertsIssueTelemetryClient=class extends CertsAddTelemetryClient{trackCliArgumentCn(value){value&&this.trackCliArgument({arg:"cn",value:this.redactedValue})}trackCliFlagChallengeOnly(v){v&&this.trackCliFlag("challenge-only")}};async function issue(client,argv){let cert,{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(issueSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,{"--challenge-only":challengeOnly,"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsIssueTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagChallengeOnly(challengeOnly),telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath)return args.length!==0||!crtPath||!keyPath||!caPath?(output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk19.default.cyan(getCommandName("certs issue --crt <domain.crt> --key <domain.key> --ca <ca.crt>"))}
75
- `),1):(cert=await createCertFromFile(client,keyPath,crtPath,caPath),cert instanceof Error?(output_manager_default.error(cert.message),1):(output_manager_default.success(`Certificate entry for ${import_chalk19.default.bold(cert.cns.join(", "))} created ${addStamp()}`),0));if(args.length<1)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk19.default.cyan(getCommandName("certs issue <cn>[, <cn>]"))}
76
- `),2;telemetry.trackCliArgumentCn(args[0]);let cns=getCnsFromArgs(args),contextName=await getContextName(client);if(challengeOnly)return runStartOrder(client,cns,contextName,addStamp);if(cert=await startCertOrder(client,cns,contextName),cert instanceof CertOrderNotFound&&(cert=await createCertForCns(client,cns,contextName)),cert instanceof CertError&&cert.meta.code==="wildcard_not_allowed")return runStartOrder(client,cns,contextName,addStamp,{fallingBack:!0});let handledResult=handleCertError(cert);return handledResult===1?handledResult:handledResult instanceof DomainPermissionDenied?(output_manager_default.error(`You do not have permissions over domain ${import_chalk19.default.underline(handledResult.meta.domain)} under ${import_chalk19.default.bold(handledResult.meta.context)}.`),1):(output_manager_default.success(`Certificate entry for ${import_chalk19.default.bold(handledResult.cns.join(", "))} created ${addStamp()}`),0)}async function runStartOrder(client,cns,contextName,stamp,{fallingBack=!1}={}){let{challengesToResolve}=await startCertOrder2(client,cns,contextName),pendingChallenges=challengesToResolve.filter(challenge=>challenge.status==="pending");if(fallingBack&&output_manager_default.warn("To generate a wildcard certificate for domain for an external domain you must solve challenges manually."),pendingChallenges.length===0)return output_manager_default.log(`A certificate issuance for ${import_chalk19.default.bold(cns.join(", "))} has been started ${stamp()}`),output_manager_default.print(` There are no pending challenges. Finish the issuance by running:
77
- `),output_manager_default.print(` ${import_chalk19.default.cyan(getCommandName(`certs issue ${cns.join(" ")}`))}
78
- `),0;output_manager_default.log(`A certificate issuance for ${import_chalk19.default.bold(cns.join(", "))} has been started ${stamp()}`),output_manager_default.print(` Add the following TXT records with your registrar to be able to the solve the DNS challenge:
92
+ `):(printAlignedLabel("Enabled","Observability Plus",{gutter:"\u2713"}),printAlignedLabel("Team",contextName)),0):(output_manager_default.error("The API did not confirm Observability Plus access for this team. Check the team billing settings before retrying."),1)}catch(err){return output_manager_default.stopSpinner(),handleObservabilityPlusPurchaseError(err,contextName)}}function handleObservabilityPlusPurchaseError(err,teamSlug){if(isAPIError(err)){if(err.code==="forbidden")return output_manager_default.error("Only team owners can purchase Observability Plus. Ask a team owner."),1;if(err.code==="invalid_plan_status")return output_manager_default.error("Observability Plus can't be enabled while this team's subscription is in its current state."),output_manager_default.log(`Review the team billing settings: ${output_manager_default.link(getTeamBillingUrl(teamSlug),getTeamBillingUrl(teamSlug))}`),1;if(err.code==="invalid_product"||err.code==="invalid_price")return output_manager_default.error("Observability Plus isn't available for this team's current plan."),output_manager_default.log(`Review the team billing settings: ${output_manager_default.link(getTeamBillingUrl(teamSlug),getTeamBillingUrl(teamSlug))}`),1}return output_manager_default.error("Failed to enable Observability Plus."),output_manager_default.debug(`Server response: ${(0,import_error_utils5.errorToString)(err)}`),1}async function addon(client,argv){let flagsSpecification=getFlagsSpecification(addonSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,[addonName,quantityStr]=args;if(addonName&&isCustomEnvironmentAddonAlias(addonName)){let packsResult=validateCustomEnvironmentPacks(quantityStr);if("error"in packsResult)return output_manager_default.error(packsResult.error),packsResult.usage&&output_manager_default.log(packsResult.usage),1;let project=flags["--project"];return purchaseCustomEnvironmentCapacity(client,{packs:packsResult.packs,yes:!!flags["--yes"],projectName:typeof project=="string"?project:void 0,commandName:"buy"})}if(addonName&&isObservabilityPlusAddonAlias(addonName)){if(flags["--project"]!==void 0)return output_manager_default.error("--project isn't supported for Observability Plus because it is enabled for a team. Use --scope <team> to select the team."),1;if(quantityStr!==void 0)return output_manager_default.error(`Observability Plus does not accept a quantity. Run ${getCommandName("buy addon observability-plus")} without one.`),1;let formatResult=validateJsonOutput(parsedArgs.flags);return formatResult.valid?purchaseObservabilityPlus(client,{yes:!!flags["--yes"],asJson:formatResult.jsonOutput}):(output_manager_default.error(formatResult.error),2)}return addonName?(output_manager_default.error(`Invalid addon "${addonName}". Supported addons: ${SUPPORTED_ADDON_NAMES.join(", ")}.`),1):(output_manager_default.error(`Missing addon name. Supported addons: ${SUPPORTED_ADDON_NAMES.join(", ")}`),output_manager_default.log(`Run ${getCommandName("buy addon --help")} for usage.`),2)}var import_chalk16=__toESM(require_source(),1);async function pro(client,argv){let flagsSpecification=getFlagsSpecification(proSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,{team,contextName}=await getScope(client);if(!team)return output_manager_default.error("This command must be run with a team scope. Use --scope to specify a team."),1;if(!parsedArgs.flags["--yes"]){if(!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use --yes to skip the confirmation prompt in non-interactive mode."),1;if(!await client.input.confirm(`Upgrade team ${import_chalk16.default.bold(contextName)} to Vercel Pro?`,!1))return 0}let purchaseStamp=stamp_default();output_manager_default.spinner("Processing purchase");try{let result=await createPurchase(client,{type:"subscription",planSlug:"pro"});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({team:contextName,subscriptionIntent:result.subscriptionIntent},null,2)}
93
+ `):(output_manager_default.success(`Upgraded ${import_chalk16.default.bold(contextName)} to Vercel Pro ${purchaseStamp()}`),result.subscriptionIntent&&output_manager_default.debug(`Subscription intent: ${result.subscriptionIntent.id}`)),0}catch(err){return output_manager_default.stopSpinner(),handlePurchaseError(err,contextName,{openBrowser:!!client.stdout.isTTY})}}async function domain(client,argv){return buy(client,argv)}var BuyTelemetryClient=class extends TelemetryClient{trackCliSubcommandCredits(actual){this.trackCliSubcommand({subcommand:"credits",value:actual})}trackCliSubcommandAddon(actual){this.trackCliSubcommand({subcommand:"addon",value:actual})}trackCliSubcommandPro(actual){this.trackCliSubcommand({subcommand:"pro",value:actual})}trackCliSubcommandDomain(actual){this.trackCliSubcommand({subcommand:"domain",value:actual})}};var COMMAND_CONFIG4={credits:getCommandAliases(creditsSubcommand),addon:getCommandAliases(addonSubcommand),pro:getCommandAliases(proSubcommand),domain:getCommandAliases(domainSubcommand)};async function main(client){let parsedArgs,flagsSpecification=getFlagsSpecification(buyCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new BuyTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG4),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("buy"),output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:buyCommand,columns:client.stderr.columns})),0}if(!subcommand)return output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),2;switch(subcommand){case"credits":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(creditsSubcommand)):(telemetry.trackCliSubcommandCredits(subcommandOriginal),credits(client,args));case"addon":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(addonSubcommand)):(telemetry.trackCliSubcommandAddon(subcommandOriginal),subcommandOriginal!=="addon"&&warnDeprecatedSubcommand(client,`buy ${subcommandOriginal}`,"buy addon"),addon(client,args));case"pro":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(proSubcommand)):(telemetry.trackCliSubcommandPro(subcommandOriginal),pro(client,args));case"domain":return needHelp?(telemetry.trackCliFlagHelp("buy",subcommandOriginal),printHelp(domainSubcommand)):(telemetry.trackCliSubcommandDomain(subcommandOriginal),domain(client,args));default:return output_manager_default.error(`Unknown subcommand: ${subcommand}`),output_manager_default.print(help(buyCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk17=__toESM(require_source(),1);var import_error_utils6=__toESM(require_dist(),1);import{readFileSync}from"fs";import{resolve as resolve3}from"path";async function createCertFromFile(client,keyPath,certPath,caPath){output_manager_default.spinner("Adding your custom certificate");try{let cert=readFileSync(resolve3(certPath),"utf8"),key=readFileSync(resolve3(keyPath),"utf8"),ca=readFileSync(resolve3(caPath),"utf8");return await client.fetch("/v3/certs",{method:"PUT",body:{ca,cert,key}})}catch(err){if((0,import_error_utils6.isErrnoException)(err)&&err.code==="ENOENT")return new Error(`The specified file "${err.path}" doesn't exist.`);if(isAPIError(err)&&err.status<500)return err;throw err}}var CertsAddTelemetryClient=class extends TelemetryClient{trackCliFlagOverwrite(v){v&&this.trackCliFlag("overwrite")}trackCliOptionCrt(v){v&&this.trackCliOption({option:"crt",value:this.redactedValue})}trackCliOptionKey(v){v&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionCa(v){v&&this.trackCliOption({option:"ca",value:this.redactedValue})}};async function add(client,argv){let{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,cert,{"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsAddTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath){if(args.length!==0||!crtPath||!keyPath||!caPath)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk17.default.cyan(`${getCommandName("certs add --crt <domain.crt> --key <domain.key> --ca <ca.crt>")}`)}
94
+ `),1;cert=await createCertFromFile(client,keyPath,crtPath,caPath)}else{if(output_manager_default.warn(`${import_chalk17.default.cyan(getCommandName("certs add"))} will be soon deprecated. Please use ${import_chalk17.default.cyan(getCommandName("certs issue <cn> <cns>"))} instead`),args.length<1)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk17.default.cyan(getCommandName("certs add <cn>[, <cn>]"))}
95
+ `),2;let cns=args.reduce((res,item)=>res.concat(item.split(",")),[]);output_manager_default.spinner(`Generating a certificate for ${import_chalk17.default.bold(cns.join(", "))}`);let contextName=await getContextName(client);cert=await createCertForCns(client,cns,contextName),output_manager_default.stopSpinner()}return cert instanceof Error?(output_manager_default.error(cert.message),1):(output_manager_default.success(`Certificate entry for ${import_chalk17.default.bold(cert.cns.join(", "))} created ${addStamp()}`),0)}var add_default=add;var import_chalk20=__toESM(require_source(),1),import_tldts3=__toESM(require_cjs(),1);var import_chalk18=__toESM(require_source(),1);async function startCertOrder(client,cns,context){output_manager_default.spinner(`Issuing a certificate for ${import_chalk18.default.bold(cns.join(", "))}`);try{return await client.fetch("/v3/certs",{method:"PATCH",body:{op:"finalizeOrder",domains:cns}})}catch(err){if(isAPIError(err)){if(err.code==="cert_order_not_found")return new CertOrderNotFound(cns);let mappedError=mapCertError(err,cns);if(mappedError)return mappedError}throw err}}function getCnsFromArgs(args){return args.reduce((res,item)=>[...res,...item.split(",")],[]).filter(i=>i)}var import_chalk19=__toESM(require_source(),1);async function startCertOrder2(client,cns,contextName){return output_manager_default.spinner(`Starting certificate issuance for ${import_chalk19.default.bold(cns.join(", "))} under ${import_chalk19.default.bold(contextName)}`),await client.fetch("/v3/certs",{method:"PATCH",body:{op:"startOrder",domains:cns}})}var CertsIssueTelemetryClient=class extends CertsAddTelemetryClient{trackCliArgumentCn(value){value&&this.trackCliArgument({arg:"cn",value:this.redactedValue})}trackCliFlagChallengeOnly(v){v&&this.trackCliFlag("challenge-only")}};async function issue(client,argv){let cert,{telemetryEventStore}=client,addStamp=stamp_default(),parsedArgs,flagsSpecification=getFlagsSpecification(issueSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,{"--challenge-only":challengeOnly,"--overwrite":overwrite,"--crt":crtPath,"--key":keyPath,"--ca":caPath}=opts,telemetry=new CertsIssueTelemetryClient({opts:{store:telemetryEventStore}});if(telemetry.trackCliFlagChallengeOnly(challengeOnly),telemetry.trackCliFlagOverwrite(overwrite),telemetry.trackCliOptionCrt(crtPath),telemetry.trackCliOptionKey(keyPath),telemetry.trackCliOptionCa(caPath),overwrite)return output_manager_default.error("Overwrite option is deprecated"),1;if(crtPath||keyPath||caPath)return args.length!==0||!crtPath||!keyPath||!caPath?(output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk20.default.cyan(getCommandName("certs issue --crt <domain.crt> --key <domain.key> --ca <ca.crt>"))}
96
+ `),1):(cert=await createCertFromFile(client,keyPath,crtPath,caPath),cert instanceof Error?(output_manager_default.error(cert.message),1):(output_manager_default.success(`Certificate entry for ${import_chalk20.default.bold(cert.cns.join(", "))} created ${addStamp()}`),0));if(args.length<1)return output_manager_default.error("Invalid number of arguments to create a custom certificate entry. Usage:"),output_manager_default.print(` ${import_chalk20.default.cyan(getCommandName("certs issue <cn>[, <cn>]"))}
97
+ `),2;telemetry.trackCliArgumentCn(args[0]);let cns=getCnsFromArgs(args),contextName=await getContextName(client);if(challengeOnly)return runStartOrder(client,cns,contextName,addStamp);if(cert=await startCertOrder(client,cns,contextName),cert instanceof CertOrderNotFound&&(cert=await createCertForCns(client,cns,contextName)),cert instanceof CertError&&cert.meta.code==="wildcard_not_allowed")return runStartOrder(client,cns,contextName,addStamp,{fallingBack:!0});let handledResult=handleCertError(cert);return handledResult===1?handledResult:handledResult instanceof DomainPermissionDenied?(output_manager_default.error(`You do not have permissions over domain ${import_chalk20.default.underline(handledResult.meta.domain)} under ${import_chalk20.default.bold(handledResult.meta.context)}.`),1):(output_manager_default.success(`Certificate entry for ${import_chalk20.default.bold(handledResult.cns.join(", "))} created ${addStamp()}`),0)}async function runStartOrder(client,cns,contextName,stamp,{fallingBack=!1}={}){let{challengesToResolve}=await startCertOrder2(client,cns,contextName),pendingChallenges=challengesToResolve.filter(challenge=>challenge.status==="pending");if(fallingBack&&output_manager_default.warn("To generate a wildcard certificate for domain for an external domain you must solve challenges manually."),pendingChallenges.length===0)return output_manager_default.log(`A certificate issuance for ${import_chalk20.default.bold(cns.join(", "))} has been started ${stamp()}`),output_manager_default.print(` There are no pending challenges. Finish the issuance by running:
98
+ `),output_manager_default.print(` ${import_chalk20.default.cyan(getCommandName(`certs issue ${cns.join(" ")}`))}
99
+ `),0;output_manager_default.log(`A certificate issuance for ${import_chalk20.default.bold(cns.join(", "))} has been started ${stamp()}`),output_manager_default.print(` Add the following TXT records with your registrar to be able to the solve the DNS challenge:
79
100
 
80
101
  `);let[header,...rows]=formatDNSTable(pendingChallenges.map(challenge=>{let subdomain=(0,import_tldts3.getSubdomain)(challenge.domain);if(subdomain===null)throw new InvalidDomain(challenge.domain);return[subdomain?`_acme-challenge.${subdomain}`:"_acme-challenge","TXT",challenge.value]})).split(`
81
102
  `);return output_manager_default.print(`${header}
82
103
  `),client.stdout.write(`${rows.join(`
83
104
  `)}
84
105
 
85
- `),output_manager_default.log("To issue the certificate once the records are added, run:"),output_manager_default.print(` ${import_chalk19.default.cyan(getCommandName(`certs issue ${cns.join(" ")}`))}
106
+ `),output_manager_default.log("To issue the certificate once the records are added, run:"),output_manager_default.print(` ${import_chalk20.default.cyan(getCommandName(`certs issue ${cns.join(" ")}`))}
86
107
  `),output_manager_default.print(` Read more: https://err.sh/vercel/solve-challenges-manually
87
- `),0}var import_chalk20=__toESM(require_source(),1),import_ms5=__toESM(require_ms(),1);async function getCerts(client,next,limit=20){let certsUrl=`/v4/certs?limit=${limit}`;return next&&(certsUrl+=`&until=${next}`),await client.fetch(certsUrl)}var CertsLsTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls2(client,argv){let{telemetryEventStore}=client,telemetry=new CertsLsTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"certs ls",args});if(validationResult!==0)return validationResult;telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliFlagJson(opts["--json"]);let paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}let lsStamp=stamp_default(),{certs,pagination}=await getCerts(client,...paginationOptions);if(opts["--json"]){let result={certs,pagination:{next:pagination?.next??null}};return client.stdout.write(`${JSON.stringify(result,null,2)}
88
- `),0}let contextName=await getContextName(client);if(output_manager_default.log(`${certs.length>0?"Certificates":"No certificates"} found under ${import_chalk20.default.bold(contextName)} ${lsStamp()}`),certs.length>0&&client.stdout.write(formatCertsTable(certs)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.print(`
108
+ `),0}var import_chalk21=__toESM(require_source(),1),import_ms5=__toESM(require_ms(),1);async function getCerts(client,next,limit=20){let certsUrl=`/v4/certs?limit=${limit}`;return next&&(certsUrl+=`&until=${next}`),await client.fetch(certsUrl)}var CertsLsTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls2(client,argv){let{telemetryEventStore}=client,telemetry=new CertsLsTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"certs ls",args});if(validationResult!==0)return validationResult;telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliFlagJson(opts["--json"]);let paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}let lsStamp=stamp_default(),{certs,pagination}=await getCerts(client,...paginationOptions);if(opts["--json"]){let result={certs,pagination:{next:pagination?.next??null}};return client.stdout.write(`${JSON.stringify(result,null,2)}
109
+ `),0}let contextName=await getContextName(client);if(output_manager_default.log(`${certs.length>0?"Certificates":"No certificates"} found under ${import_chalk21.default.bold(contextName)} ${lsStamp()}`),certs.length>0&&client.stdout.write(formatCertsTable(certs)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.print(`
89
110
  `),printNextPageCommand(getCommandNamePlain(`certs ls${flags} --next ${pagination.next}`))}return 0}function formatCertsTable(certsList){return`${table([formatCertsTableHead(),...formatCertsTableBody(certsList)],{align:["l","l","r","c","r"],hsep:2}).replace(/^(.*)/gm," $1")}
90
- `}function formatCertsTableHead(){return[import_chalk20.default.dim("id"),import_chalk20.default.dim("cns"),import_chalk20.default.dim("expiration"),import_chalk20.default.dim("renew"),import_chalk20.default.dim("age")]}function formatCertsTableBody(certsList){let now=new Date;return certsList.reduce((result,cert)=>result.concat(formatCert(now,cert)),[])}function formatCert(time,cert){return cert.cns.map((cn,idx)=>idx===0?formatCertFirstCn(time,cert,cn,cert.cns.length>1):formatCertNonFirstCn(cn,cert.cns.length>1))}function formatCertNonFirstCn(cn,multiple){return["",formatCertCn(cn,multiple),"","",""]}function formatCertCn(cn,multiple){return multiple?`${import_chalk20.default.gray("-")} ${import_chalk20.default.bold(cn)}`:import_chalk20.default.bold(cn)}function formatCertFirstCn(time,cert,cn,multiple){return[cert.uid,formatCertCn(cn,multiple),formatExpirationDate(new Date(cert.expiration)),cert.autoRenew?"yes":"no",import_chalk20.default.gray((0,import_ms5.default)(time.getTime()-new Date(cert.created).getTime()))]}function formatExpirationDate(date){let diff=date.getTime()-Date.now();return diff<0?import_chalk20.default.gray(`${(0,import_ms5.default)(-diff)} ago`):import_chalk20.default.gray(`in ${(0,import_ms5.default)(diff)}`)}var ls_default=ls2;var import_chalk21=__toESM(require_source(),1),import_ms6=__toESM(require_ms(),1),import_pluralize3=__toESM(require_pluralize(),1);async function getCertById(client,id){try{return await client.fetch(`/v6/certs/${id}`)}catch(err){if(isAPIError(err)&&err.code==="cert_not_found")return new CertNotFound(id);throw err}}import{stringify}from"querystring";async function getCustomCertsForDomain(client,context,domain2){try{let{certs}=await client.fetch(`/v5/certs?${stringify({domain:domain2,custom:!0})}`);return certs}catch(err){if(isAPIError(err)&&err.code==="forbidden")return new CertsPermissionDenied(context,domain2);throw err}}var CertsRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}};async function rm2(client,argv){let rmStamp=stamp_default(),{telemetryEventStore}=client,telemetry=new CertsRemoveTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args}=parsedArgs,id=args[0];if(telemetry.trackCliArgumentId(id),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk21.default.cyan(`${getCommandName("certs delete <id or cn>")}`)}`),2;let contextName=await getContextName(client),certs=await getCertsToDelete(client,contextName,id);return certs instanceof CertsPermissionDenied?(output_manager_default.error(`You don't have access to ${param(id)}'s certs under ${contextName}.`),1):certs.length===0?(id.includes(".")?output_manager_default.error(`No custom certificates found for "${id}" under ${import_chalk21.default.bold(contextName)}`):output_manager_default.error(`No certificates found by id "${id}" under ${import_chalk21.default.bold(contextName)}`),1):(await readConfirmation(client,"The following certificates will be deleted permanently",certs)&&(await Promise.all(certs.map(cert=>deleteCertById(client,cert.uid))),output_manager_default.success(`${import_chalk21.default.bold((0,import_pluralize3.default)("Certificate",certs.length,!0))} deleted ${rmStamp()}`)),0)}async function getCertsToDelete(client,contextName,id){let cert=await getCertById(client,id);if(cert instanceof CertNotFound){let certs=await getCustomCertsForDomain(client,contextName,id);return certs instanceof CertsPermissionDenied,certs}return[cert]}function readConfirmation(client,msg,certs){return new Promise(resolve4=>{output_manager_default.log(msg),output_manager_default.print(`${table(certs.map(formatCertRow),{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
91
- `),output_manager_default.print(`${import_chalk21.default.bold.red("> Are you sure?")} ${import_chalk21.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve4(d.toString().trim().toLowerCase()==="y")}).resume()})}function formatCertRow(cert){return[cert.uid,import_chalk21.default.bold(cert.cns?cert.cns.join(", "):"\u2013"),...cert.created?[import_chalk21.default.gray(`${(0,import_ms6.default)(Date.now()-new Date(cert.created).getTime())} ago`)]:[]]}var rm_default=rm2;var CertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandIssue(actual){this.trackCliSubcommand({subcommand:"issue",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG5={add:getCommandAliases(addSubcommand),issue:getCommandAliases(issueSubcommand),ls:getCommandAliases(listSubcommand3),delete:getCommandAliases(removeSubcommand2)};async function main2(client){let{telemetryEventStore}=client,telemetry=new CertsTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(certsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG5),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("certs",subcommand),output_manager_default.print(help(certsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:certsCommand,columns:client.stderr.columns}))}switch(subcommand){case"issue":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(issueSubcommand),0):(telemetry.trackCliSubcommandIssue(subcommandOriginal),issue(client,args));case"ls":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(listSubcommand3),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls_default(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(removeSubcommand2),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"certs remove","certs delete"),rm_default(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(addSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add_default(client,args));default:return output_manager_default.error("Please specify a valid subcommand: ls | issue | delete"),output_manager_default.print(help(certsCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk23=__toESM(require_source(),1);async function addDNSRecord(client,domain2,recordData){try{return await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{body:recordData,method:"POST"})}catch(err){if(isAPIError(err)){if(err.status===400&&err.code==="invalid_type")return new DNSInvalidType(recordData.type);if(err.status===400&&err.message.includes("port"))return new DNSInvalidPort;if(err.status===400)return err;if(err.status===403)return new DNSPermissionDenied(domain2);if(err.status===404)return new DomainNotFound(domain2);if(err.status===409){let{oldId=""}=err;return new DNSConflictingRecord(oldId)}}throw err}}function parseAddArgs(args){if(!args||args.length<1)return null;let[domain2,...rest]=args;if(domain2&&rest.length===0)return{domain:domain2,data:null};let name=args[1]==="@"?"":args[1].toString(),type=args[2],value=args[3];return domain2&&typeof name=="string"&&type?type==="MX"&&args.length===5?{domain:domain2,data:{name,type,value,mxPriority:Number(args[4])}}:type==="SRV"&&args.length===7?{domain:domain2,data:{name,type,srv:{priority:Number(value),weight:Number(args[4]),port:Number(args[5]),target:args[6]}}}:args.length===4?{domain:domain2,data:{name,type,value}}:null:null}var import_chalk22=__toESM(require_source(),1);var RECORD_TYPES=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"];async function getDNSData(client,data){if(data)return data;try{let possibleTypes=new Set(RECORD_TYPES),type=(await client.input.text({message:`- Record type (${RECORD_TYPES.join(", ")}): `,validate:v=>!!(v&&possibleTypes.has(v.trim().toUpperCase()))})).trim().toUpperCase(),name=await getRecordName(client,type);if(type==="SRV"){let priority=await getNumber(client,`- ${type} priority: `),weight=await getNumber(client,`- ${type} weight: `),port=await getNumber(client,`- ${type} port: `),target=await getTrimmedString(client,`- ${type} target: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(`${priority}`)} ${import_chalk22.default.cyan(`${weight}`)} ${import_chalk22.default.cyan(`${port}`)} ${import_chalk22.default.cyan(target)}.`),await verifyData(client)?{name,type,srv:{priority,weight,port,target}}:null}if(type==="MX"){let mxPriority=await getNumber(client,`- ${type} priority: `),value2=await getTrimmedString(client,`- ${type} host: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(`${mxPriority}`)} ${import_chalk22.default.cyan(value2)}`),await verifyData(client)?{name,type,value:value2,mxPriority}:null}let value=await getTrimmedString(client,`- ${type} value: `);return output_manager_default.log(`${import_chalk22.default.cyan(name)} ${import_chalk22.default.bold(type)} ${import_chalk22.default.cyan(value)}`),await verifyData(client)?{name,type,value}:null}catch{return null}}async function verifyData(client){return client.input.confirm("Is this correct?",!1)}async function getRecordName(client,type){let input=await client.input.text({message:`- ${type} name: `});return input==="@"?"":input}async function getNumber(client,label){return Number(await client.input.text({message:label,validate:v=>!!(v&&Number(v))}))}async function getTrimmedString(client,label){return(await client.input.text({message:label,validate:v=>!!(v&&v.trim().length>0)})).trim()}var ALLOWED_RECORD_TYPES=["A","AAAA","ALIAS","CNAME","TXT","MX","SRV"],DnsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES.includes(type)?type:this.redactedValue;this.trackCliArgument({arg:"type",value:allowedType})}}trackCliArgumentValues(values){values?.length&&this.trackCliArgument({arg:"values",value:this.redactedValue})}};async function add2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,parsedParams=parseAddArgs(args);if(!parsedParams){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to add a DNS record (see dns --help for MX/SRV forms)"}]},2)}return output_manager_default.error(`Invalid number of arguments. See: ${import_chalk23.default.cyan(`${getCommandName("dns --help")}`)} for usage.`),2}let addStamp=stamp_default(),{domain:domain2,data:argData}=parsedParams,valueArgs=args.slice(3);if(client.nonInteractive&&!argData){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:"In non-interactive mode full record details are required. Run: "+cmd2,next:[{command:cmd2,when:"to add a DNS record (replace placeholders)"},{command:withGlobalFlags(client,"dns --help"),when:"for usage and examples"}]},2),2}let telemetryClient=new DnsAddTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliArgumentDomain(domain2),telemetryClient.trackCliArgumentName(parsedParams.data?.name),telemetryClient.trackCliArgumentType(parsedParams.data?.type),telemetryClient.trackCliArgumentValues(valueArgs);let data=await getDNSData(client,argData);if(!data)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INCOMPLETE_RECORD,message:"Record details could not be determined non-interactively. Provide full arguments for dns add.",next:[{command:withGlobalFlags(client,"dns --help")}]},1),output_manager_default.log("Canceled"),1;let contextName=await getContextName(client),record=await addDNSRecord(client,domain2,data);return record instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),1):record instanceof DNSPermissionDenied?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PERMISSION_DENIED,message:`You don't have permissions to add records to domain ${domain2} under ${contextName}.`},1),output_manager_default.error(`You don't have permissions to add records to domain ${domain2} under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),1):record instanceof DNSInvalidPort?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_PORT,message:"Invalid <port> parameter. A number was expected."},2),output_manager_default.error(`Invalid <port> parameter. A number was expected ${import_chalk23.default.gray(addStamp())}`),2):record instanceof DNSInvalidType?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DNS_TYPE,message:`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT.`},2),output_manager_default.error(`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT ${import_chalk23.default.gray(addStamp())}`),2):record instanceof Error?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_ADD_FAILED,message:record.message},1),output_manager_default.error(record.message),1):(output_manager_default.success(`DNS record for domain ${import_chalk23.default.bold(domain2)} ${import_chalk23.default.gray(`(${record.uid})`)} created under ${import_chalk23.default.bold(contextName)} ${import_chalk23.default.gray(addStamp())}`),0)}var import_chalk25=__toESM(require_source(),1);var import_chalk24=__toESM(require_source(),1);import{readFileSync as readFileSync2}from"fs";import{resolve as resolve3}from"path";async function importZonefile(client,contextName,domain2,zonefilePath){output_manager_default.spinner(`Importing Zone file for domain ${domain2} under ${import_chalk24.default.bold(contextName)}`);let zonefile=readFileSync2(resolve3(zonefilePath),"utf8");try{let res=await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{headers:{"Content-Type":"text/dns"},body:zonefile,method:"PUT",json:!1}),{recordIds}=await res.json();return recordIds}catch(err){if(isAPIError(err)){if(err.code==="not_found")return new DomainNotFound(domain2,contextName);if(err.code==="invalid_domain")return new InvalidDomain(domain2)}throw err}}var DnsImportTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentZonefile(path3){path3&&this.trackCliArgument({arg:"zoneFilePath",value:this.redactedValue})}};async function importZone(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(importSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,{telemetryEventStore}=client,contextName=await getContextName(client),telemetry=new DnsImportTelemetryClient({opts:{store:telemetryEventStore}});if(args.length!==2){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns import <domain> <zonefile>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to import a zone file"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk25.default.cyan(`${getCommandName("dns import <domain> <zonefile>")}`)}`),2}let addStamp=stamp_default(),[domain2,zonefilePath]=args;telemetry.trackCliArgumentDomain(domain2),telemetry.trackCliArgumentZonefile(zonefilePath);let recordIds=await importZonefile(client,contextName,domain2,zonefilePath);return recordIds instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk25.default.bold(contextName)} ${import_chalk25.default.gray(addStamp())}`),1):recordIds instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DOMAIN,message:`The domain ${domain2} doesn't match the one found in the zone file.`},1),output_manager_default.error(`The domain ${domain2} doesn't match with the one found in the Zone file ${import_chalk25.default.gray(addStamp())}`),1):(output_manager_default.success(`${recordIds.length} DNS records for domain ${import_chalk25.default.bold(domain2)} created under ${import_chalk25.default.bold(contextName)} ${import_chalk25.default.gray(addStamp())}`),0)}var import_chalk26=__toESM(require_source(),1);async function getDNSRecordById(client,id){return client.fetch(`/v5/domains/records/${id}`)}function handleDNSRecordError(err){if(isAPIError(err))switch(err.status){case 404:return output_manager_default.error("DNS record not found"),1;case 403:return output_manager_default.error("You don't have permission to access this DNS record."),1;case 400:return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}var DnsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect3(client,argv){let telemetry=new DnsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk26.default.cyan(`${getCommandName("dns inspect <id>")}`)}`),2;let[recordId]=args;telemetry.trackCliArgumentId(recordId);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),record;try{record=await getDNSRecordById(client,recordId)}catch(err){return handleDNSRecordError(err)}return record?asJson?(client.stdout.write(`${JSON.stringify(record,null,2)}
92
- `),0):(output_manager_default.log(`DNS record ${import_chalk26.default.bold(record.id)} of domain ${import_chalk26.default.bold(record.domain)} under ${import_chalk26.default.bold(contextName)}`),client.stdout.write(formatRecordDetails(record)),0):(output_manager_default.error("DNS record not found"),1)}function formatRecordDetails(record){let rows=[["ID",record.id],["Name",record.name||"@"],["Domain",record.domain],["Type",record.type],["Value",record.value]],priority=record.priority??record.mxPriority;return priority!==void 0&&rows.push(["Priority",`${priority}`]),record.ttl!==void 0&&rows.push(["TTL",`${record.ttl}`]),record.comment&&rows.push(["Comment",record.comment]),rows.push(["Creator",record.creator]),rows.push(["Created",formatDate(record.createdAt)]),record.updatedAt&&rows.push(["Updated",formatDate(record.updatedAt)]),`${table(rows,{align:["l","l"],hsep:2}).replace(/^(.*)/gm," $1")}
93
- `}var import_chalk28=__toESM(require_source(),1),import_ms7=__toESM(require_ms(),1);async function getDomainDNSRecords(client,domain2,apiVersion=3,nextTimestamp,limit=20){output_manager_default.debug(`Fetching for DNS records of domain ${domain2}`);try{let url=`/v${apiVersion}/domains/${encodeURIComponent(domain2)}/records?limit=${limit}`;return nextTimestamp&&(url+=`&until=${nextTimestamp}`),await client.fetch(url)}catch(err){if(isAPIError(err)&&err.code==="not_found")return new DomainNotFound(domain2);throw err}}var import_chalk27=__toESM(require_source(),1);async function getDNSRecords(client,contextName,next){let{domainNames,pagination}=await getDomainNames(client,contextName,next);return{records:(await Promise.all(domainNames.map(createGetDomainRecords(client)))).map(item=>item instanceof DomainNotFound?[]:item).reduce(getAddDomainName(domainNames),[]),pagination}}function createGetDomainRecords(client){return async domainName=>{let data=await getDomainDNSRecords(client,domainName);return data instanceof DomainNotFound?[]:data.records}}function getAddDomainName(domainNames){return(prev,item,idx)=>[...prev,{domainName:domainNames[idx],records:item}]}async function getDomainNames(client,contextName,next){output_manager_default.spinner(`Fetching domains under ${import_chalk27.default.bold(contextName)}`);let{domains:domains2,pagination}=await getDomains(client,next);return{domainNames:domains2.map(domain2=>domain2.name),pagination}}var DnsLsTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs;if(client.nonInteractive&&args.length>1){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls <domain> ${flags.join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to list DNS records (optional single domain)"}]},2),2}let validationResult=validateLsArgs({commandName:"dns ls <domain>",args,maxArgs:1,exitCode:1});if(validationResult!==0)return validationResult;let{telemetryEventStore}=client,telemetry=new DnsLsTelemetryClient({opts:{store:telemetryEventStore}}),[domainName]=args;telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),lsStamp=stamp_default(),paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}if(domainName){let data=await getDomainDNSRecords(client,domainName,5,...paginationOptions);if(data instanceof DomainNotFound){if(client.nonInteractive){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls ${flags.join(" ")}`.trim());outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domainName} can't be found under ${contextName}.`,next:[{command:cmd2,when:"to list available DNS records"}]},1)}return output_manager_default.error(`The domain ${domainName} can't be found under ${import_chalk28.default.bold(contextName)} ${import_chalk28.default.gray(lsStamp())}`),1}let{records,pagination:pagination2}=data,dnsRecords2=[{domainName,records}];if(asJson)return outputDnsRecordsJson(client,dnsRecords2,pagination2),0;if(output_manager_default.log(`${records.length>0?"Records":"No records"} found under ${import_chalk28.default.bold(contextName)} ${import_chalk28.default.gray(lsStamp())}`),client.stdout.write(getDNSRecordsTable(dnsRecords2)),pagination2?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.print(`
94
- `),printNextPageCommand(getCommandNamePlain(`dns ls ${domainName}${flags} --next ${pagination2.next}`))}return 0}let{records:dnsRecords,pagination}=await getDNSRecords(client,contextName,...paginationOptions);if(asJson)return outputDnsRecordsJson(client,dnsRecords,pagination),0;let nRecords=dnsRecords.reduce((p,r)=>r.records.length+p,0);if(output_manager_default.log(`${nRecords>0?"Records":"No records"} found under ${import_chalk28.default.bold(contextName)} ${import_chalk28.default.gray(lsStamp())}`),output_manager_default.log(getDNSRecordsTable(dnsRecords)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);printNextPageCommand(getCommandNamePlain(`dns ls${flags} --next ${pagination.next}`))}return 0}function getDNSRecordsTable(dnsRecords){return formatTable(["","id","name","type","value","created"],["l","r","l","l","l","l"],dnsRecords.map(({domainName,records})=>({name:import_chalk28.default.bold(domainName),rows:records.map(getDNSRecordRow)})))}function getDNSRecordRow(record){let isSystemRecord=record.creator==="system",createdAt=`${(0,import_ms7.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`,priority=record.mxPriority||record.priority||null;return["",isSystemRecord?"":record.id,record.name,record.type,priority?`${priority} ${record.value}`:record.value,import_chalk28.default.gray(isSystemRecord?"default":createdAt)]}function outputDnsRecordsJson(client,records,pagination){output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({records,pagination},null,2)}
95
- `)}var import_chalk29=__toESM(require_source(),1),import_ms8=__toESM(require_ms(),1);async function deleteDNSRecordById(client,domain2,recordId){return client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records/${recordId}`,{method:"DELETE"})}var DnsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"recordId",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs,{telemetryEventStore}=client,telemetry=new DnsRmTelemetryClient({opts:{store:telemetryEventStore}});await getScope(client);let[recordId]=args;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns remove <id> --yes");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to remove a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk29.default.cyan(`${getCommandName("dns remove <id>")}`)}`),2}telemetry.trackCliArgumentId(recordId),telemetry.trackCliFlagYes(flags["--yes"]);let record=await getDNSRecordById(client,recordId);if(!record)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_RECORD_NOT_FOUND,message:"DNS record not found.",next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records and ids"}]},1),output_manager_default.error("DNS record not found"),1;let{domain:domainName}=record,skipConfirmation=flags["--yes"];if(client.nonInteractive&&!skipConfirmation)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"In non-interactive mode --yes is required to remove a DNS record.",next:[{command:buildCommandWithYes(client.argv),when:"to confirm removal"}]},1),1;if(!(skipConfirmation||await readConfirmation2(client,"The following record will be removed permanently",domainName,record)))return output_manager_default.error("User canceled."),0;let rmStamp=stamp_default();return await deleteDNSRecordById(client,domainName,record.id),output_manager_default.success(`Record ${import_chalk29.default.gray(`${record.id}`)} removed ${import_chalk29.default.gray(rmStamp())}`),0}function readConfirmation2(client,msg,domainName,record){return new Promise(resolve4=>{output_manager_default.log(msg),output_manager_default.print(`${table([getDeleteTableRow(domainName,record)],{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
96
- `),output_manager_default.print(`${import_chalk29.default.bold.red("> Are you sure?")} ${import_chalk29.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve4(d.toString().trim().toLowerCase()==="y")}).resume()})}function getDeleteTableRow(domainName,record){let recordName=`${record.name.length>0?`${record.name}.`:""}${domainName}`;return[record.id,import_chalk29.default.bold(`${recordName} ${record.type} ${record.value} ${record.mxPriority||""}`),import_chalk29.default.gray(`${(0,import_ms8.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`)]}var import_chalk30=__toESM(require_source(),1);async function updateDNSRecord(client,recordId,data){return client.fetch(`/v1/domains/records/${encodeURIComponent(recordId)}`,{method:"PATCH",body:data})}var ALLOWED_RECORD_TYPES2=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"],DnsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionName(name){name!==void 0&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES2.includes(type)?type:this.redactedValue;this.trackCliOption({option:"type",value:allowedType})}}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionTtl(ttl){ttl!==void 0&&this.trackCliOption({option:"ttl",value:this.redactedValue})}trackCliOptionMxPriority(mxPriority){mxPriority!==void 0&&this.trackCliOption({option:"mx-priority",value:this.redactedValue})}trackCliOptionSrvPriority(srvPriority){srvPriority!==void 0&&this.trackCliOption({option:"srv-priority",value:this.redactedValue})}trackCliOptionSrvWeight(srvWeight){srvWeight!==void 0&&this.trackCliOption({option:"srv-weight",value:this.redactedValue})}trackCliOptionSrvPort(srvPort){srvPort!==void 0&&this.trackCliOption({option:"srv-port",value:this.redactedValue})}trackCliOptionSrvTarget(srvTarget){srvTarget&&this.trackCliOption({option:"srv-target",value:this.redactedValue})}trackCliOptionComment(comment){comment!==void 0&&this.trackCliOption({option:"comment",value:this.redactedValue})}};var SRV_FLAGS=["--srv-priority","--srv-weight","--srv-port","--srv-target"];async function update(client,argv){let telemetry=new DnsUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk30.default.cyan(`${getCommandName("dns update <id> [options]")}`)}`),2}let[recordId]=args;telemetry.trackCliArgumentId(recordId),telemetry.trackCliOptionName(flags["--name"]),telemetry.trackCliOptionType(flags["--type"]),telemetry.trackCliOptionValue(flags["--value"]),telemetry.trackCliOptionTtl(flags["--ttl"]),telemetry.trackCliOptionMxPriority(flags["--mx-priority"]),telemetry.trackCliOptionSrvPriority(flags["--srv-priority"]),telemetry.trackCliOptionSrvWeight(flags["--srv-weight"]),telemetry.trackCliOptionSrvPort(flags["--srv-port"]),telemetry.trackCliOptionSrvTarget(flags["--srv-target"]),telemetry.trackCliOptionComment(flags["--comment"]);let numericFlags=["--ttl","--mx-priority","--srv-priority","--srv-weight","--srv-port"];for(let flagName of numericFlags){let value=flags[flagName];if(value!==void 0&&Number.isNaN(value))return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The ${flagName} option must be a number.`},2),output_manager_default.error(`The ${flagName} option must be a number.`),2}let data={},name=flags["--name"];name!==void 0&&(data.name=name==="@"?"":name),flags["--type"]!==void 0&&(data.type=flags["--type"]),flags["--value"]!==void 0&&(data.value=flags["--value"]),flags["--ttl"]!==void 0&&(data.ttl=flags["--ttl"]),flags["--mx-priority"]!==void 0&&(data.mxPriority=flags["--mx-priority"]),flags["--comment"]!==void 0&&(data.comment=flags["--comment"]);let srvFlagsProvided=SRV_FLAGS.filter(flagName=>flags[flagName]!==void 0);if(srvFlagsProvided.length>0){if(srvFlagsProvided.length!==SRV_FLAGS.length)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`},2),output_manager_default.error(`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`),2;data.srv={priority:flags["--srv-priority"],weight:flags["--srv-weight"],port:flags["--srv-port"],target:flags["--srv-target"]}}if(Object.keys(data).length===0){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.NO_CHANGES_REQUESTED,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Provide at least one field to update. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record (e.g. --value, --ttl, --comment)"},{command:withGlobalFlags(client,"dns update --help"),when:"for available options"}]},1)}return output_manager_default.error(`Provide at least one field to update. See ${import_chalk30.default.cyan(`${getCommandName("dns update --help")}`)} for available options.`),2}let changeSummary=Object.entries(data).map(([field,value])=>`${field}=${value===""?"@":value}`).join(", ");if(!canPrompt(client)){let rerun=getCommandNamePlain(stripSensitiveAuthArgs(client.argv.slice(2)).filter(arg=>arg!=="--non-interactive"&&!arg.startsWith("--non-interactive=")).join(" "));return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Updating DNS record ${recordId} (${changeSummary}) overwrites a live record. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:rerun,when:"user runs this command in an interactive terminal to confirm"}]},1),output_manager_default.error("This command must be run interactively to confirm overwriting the DNS record."),1}if(output_manager_default.print(prependEmoji(`Updating DNS record ${import_chalk30.default.gray(recordId)} will overwrite: ${import_chalk30.default.bold(changeSummary)}
97
- `,emoji("warning"))),!await client.input.confirm(`Update DNS record ${recordId}?`,!1))return output_manager_default.log("Canceled"),0;let updateStamp=stamp_default(),record;try{record=await updateDNSRecord(client,recordId,data)}catch(err){if(isAPIError(err)){if(err.status===404)return output_manager_default.error("DNS record not found"),1;if(err.status===403)return output_manager_default.error("You don't have permission to access this DNS record."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}let contextName=await getContextName(client);return output_manager_default.success(`DNS record ${import_chalk30.default.gray(`${record.id}`)} of domain ${import_chalk30.default.bold(record.domain)} updated under ${import_chalk30.default.bold(contextName)} ${import_chalk30.default.gray(updateStamp())}`),0}var DnsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG6={add:getCommandAliases(addSubcommand2),import:getCommandAliases(importSubcommand),inspect:getCommandAliases(inspectSubcommand2),ls:getCommandAliases(listSubcommand4),rm:getCommandAliases(removeSubcommand3),update:getCommandAliases(updateSubcommand)};async function dns(client){let{telemetryEventStore}=client,parsedArgs,flagsSpecification=getFlagsSpecification(dnsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let telemetry=new DnsTelemetryClient({opts:{store:telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG6),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("dns",subcommand),output_manager_default.print(help(dnsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:dnsCommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(addSubcommand2),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"import":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(importSubcommand),0):(telemetry.trackCliSubcommandImport(subcommandOriginal),importZone(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(inspectSubcommand2),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect3(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(removeSubcommand3),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm3(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(updateSubcommand),0):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),update(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(listSubcommand4),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls3(client,args))}}var import_chalk31=__toESM(require_source(),1);import{join}from"path";var GitConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentGitUrl(name){name&&this.trackCliArgument({arg:"gitUrl",value:this.redactedValue})}trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function connect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(connectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,{cwd}=client,telemetry=new GitConnectTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]);let confirm=!!opts["--yes"];if(args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk31.default.cyan(`${getCommandName("project connect")}`)}`),2;let repoArg=args[0];telemetry.trackCliArgumentGitUrl(repoArg);let projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm:confirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{project,org}=linkedProject,gitProviderLink=project.link;client.config.currentTeam=org.type==="team"?org.id:void 0;let gitConfigPath=getGitConfigPath({cwd})??join(cwd,".git/config"),gitConfig=await parseGitConfig(gitConfigPath);if(repoArg){let parsedUrlArg=parseRepoUrl(repoArg);return parsedUrlArg?gitConfig?await connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo:parsedUrlArg}):await connectArg({client,confirm,org,project,repoInfo:parsedUrlArg}):(output_manager_default.error(`Failed to parse URL "${repoArg}". Please ensure the URL is valid.`),1)}if(!gitConfig)return output_manager_default.error(`No local Git repository found. Run ${import_chalk31.default.cyan("`git clone <url>`")} to clone a remote Git repository first.`),1;let remoteUrls=pluckRemoteUrls(gitConfig);if(!remoteUrls)return output_manager_default.error(`No remote URLs found in your Git config. Make sure you've configured a remote repo in your local Git config. Run ${import_chalk31.default.cyan("`git remote --help`")} for more details.`),1;let repoInfo=await selectAndParseRemoteUrl(client,remoteUrls);if(!repoInfo)return Object.keys(remoteUrls).length>1?0:1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});return typeof result=="number"?result:0}async function connectArg({client,confirm,org,project,repoInfo}){let{url:repoUrl}=repoInfo,parsedRepoArg=parseRepoUrl(repoUrl);if(!parsedRepoArg)return output_manager_default.error(`Failed to parse URL "${repoUrl}". Please ensure the URL is valid.`),1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:parsedRepoArg.org,project,provider:parsedRepoArg.provider,repo:parsedRepoArg.repo,repoPath:`${parsedRepoArg.org}/${parsedRepoArg.repo}`});return typeof result=="number"?result:0}async function connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo}){let remoteUrls=pluckRemoteUrls(gitConfig);if(remoteUrls){let shouldConnect=await promptConnectArg({client,yes:confirm,repoInfo,remoteUrls});if(!shouldConnect)return 1;if(shouldConnect){let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});if(typeof result=="number")return result}return 0}return await connectArg({client,confirm,org,project,repoInfo})}async function promptConnectArg({client,yes,repoInfo:repoInfoFromArg,remoteUrls}){if(Object.keys(remoteUrls).length>1)output_manager_default.log("Found multiple Git repositories in your local Git config:"),printRemoteUrls(remoteUrls);else{let url=Object.values(remoteUrls)[0],repoInfoFromGitConfig=parseRepoUrl(url);if(!repoInfoFromGitConfig)return output_manager_default.error(`Failed to parse URL "${url}". Please ensure the URL is valid.`),!1;if(JSON.stringify(repoInfoFromGitConfig)===JSON.stringify(repoInfoFromArg))return!0;output_manager_default.log(`Found a repository in your local Git Config: ${import_chalk31.default.cyan(Object.values(remoteUrls)[0])}`)}let shouldConnect=yes;if(!shouldConnect){let{url:repoUrlFromArg}=repoInfoFromArg;shouldConnect=await client.input.confirm(`Do you still want to connect ${link_default(repoUrlFromArg)}?`,!1),shouldConnect||output_manager_default.log("Canceled. Repo not connected.")}return shouldConnect}var import_chalk32=__toESM(require_source(),1);var GitDisconnectTelemetryClient=class extends TelemetryClient{trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function disconnect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(disconnectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new GitDisconnectTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]),args.length!==0)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk32.default.cyan(`${getCommandName("project disconnect")}`)}`),2;let autoConfirm=!!parsedArgs.flags["--yes"],projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{org,project}=linkedProject;if(client.config.currentTeam=org.type==="team"?org.id:void 0,project.link){let{org:linkOrg,repo}=project.link;output_manager_default.print(`Your Vercel project will no longer create deployments when you push to this repository.
98
- `),autoConfirm||await client.input.confirm(`Are you sure you want to disconnect ${import_chalk32.default.cyan(`${linkOrg}/${repo}`)} from your project?`,!1)?(await disconnectGitProvider(client,org,project.id),output_manager_default.log(`Disconnected ${import_chalk32.default.cyan(`${linkOrg}/${repo}`)}.`)):output_manager_default.log("Canceled")}else return output_manager_default.error(`No Git repository connected. Run ${getCommandName("project connect")} to connect one.`),1;return 0}var GitTelemetryClient=class extends TelemetryClient{trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}};var COMMAND_CONFIG7={connect:["connect"],disconnect:["disconnect"]};async function main3(client){let parsedArgs,flagsSpecification=getFlagsSpecification(gitCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new GitTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG7);if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("git",subcommand),output_manager_default.print(help(gitCommand,{stream:client.stderr,columns:client.stderr.columns})),0;switch(subcommand){case"connect":return telemetry.trackCliSubcommandConnect(subcommandOriginal),connect(client,args);case"disconnect":return telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,args);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG7)),output_manager_default.print(help(gitCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk33=__toESM(require_source(),1);var GlobalConfigLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function listCmd(client,argv){let telemetry=new GlobalConfigLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand5.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,lsCheck=validateLsArgs({commandName:"global-config list",args,maxArgs:0,exitCode:2});if(lsCheck!==0)return lsCheck;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(flags["--format"]);let rows;try{rows=await client.fetch("/v1/global-config")}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(rows,null,2)}
99
- `),0;let contextName=await getContextName(client);if(output_manager_default.print(`${(0,import_chalk33.gray)(`${rows.length} Global Config${rows.length===1?"":"s"} found under ${contextName} ${stamp_default()}`)}
100
- `),rows.length===0)return 0;let tableRows=[["id","slug","items","size","updated"].map(h=>(0,import_chalk33.gray)(h)),...rows.map(r=>[r.id,r.slug,String(r.itemCount??""),String(r.sizeInBytes??""),r.updatedAt!=null?new Date(r.updatedAt).toISOString():""])];return client.stderr.write(`${table(tableRows,{hsep:2})}
101
- `),0}var import_chalk34=__toESM(require_source(),1);var GlobalConfigAddTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(value){this.trackCliArgument({arg:"slug",value})}trackCliOptionItems(value){value&&this.trackCliOption({option:"items",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function addCmd(client,argv){let telemetry=new GlobalConfigAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(addSubcommand3.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[slug]=args;if(telemetry.trackCliArgumentSlug(slug),telemetry.trackCliOptionItems(flags["--items"]),telemetry.trackCliOptionFormat(flags["--format"]),!slug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Slug is required. Usage: `vercel global-config create <slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config create <slug>")}]},2),output_manager_default.error(`Missing slug. Usage: ${import_chalk34.default.cyan(getCommandName("global-config create <slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,items;if(flags["--items"])try{let parsed=JSON.parse(String(flags["--items"]));if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return output_manager_default.error("`--items` must be a JSON object of key \u2192 value pairs."),2;items=parsed}catch{return output_manager_default.error("`--items` must be valid JSON."),1}let created;try{created=await client.fetch("/v1/global-config",{method:"POST",body:items?{slug,items}:{slug}})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
102
- `),0):(output_manager_default.success(`Global Config ${import_chalk34.default.bold(slug)} created.`),0)}var import_chalk35=__toESM(require_source(),1);var GlobalConfigGetTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function resolveGlobalConfigId(client,idOrSlug){return idOrSlug?idOrSlug.startsWith("ecfg_")?idOrSlug:(await client.fetch("/v1/global-config")).find(c=>c.slug===idOrSlug)?.id??null:null}async function getCmd(client,argv){let telemetry=new GlobalConfigGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(getSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config inspect <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk35.default.cyan(getCommandName("global-config inspect <id-or-slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let data;try{data=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
103
- `),0):(output_manager_default.log(JSON.stringify(data,null,2)),0)}var import_chalk36=__toESM(require_source(),1);var GlobalConfigUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionSlug(value){value&&this.trackCliOption({option:"slug",value:this.redactedValue})}trackCliOptionPatch(value){value&&this.trackCliOption({option:"patch",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function parsePatchJson(raw){let trimmed=raw.trim();try{return JSON.parse(trimmed)}catch(firstError){let normalized=trimmed.replace(/\\r\\n/g,`
111
+ `}function formatCertsTableHead(){return[import_chalk21.default.dim("id"),import_chalk21.default.dim("cns"),import_chalk21.default.dim("expiration"),import_chalk21.default.dim("renew"),import_chalk21.default.dim("age")]}function formatCertsTableBody(certsList){let now=new Date;return certsList.reduce((result,cert)=>result.concat(formatCert(now,cert)),[])}function formatCert(time,cert){return cert.cns.map((cn,idx)=>idx===0?formatCertFirstCn(time,cert,cn,cert.cns.length>1):formatCertNonFirstCn(cn,cert.cns.length>1))}function formatCertNonFirstCn(cn,multiple){return["",formatCertCn(cn,multiple),"","",""]}function formatCertCn(cn,multiple){return multiple?`${import_chalk21.default.gray("-")} ${import_chalk21.default.bold(cn)}`:import_chalk21.default.bold(cn)}function formatCertFirstCn(time,cert,cn,multiple){return[cert.uid,formatCertCn(cn,multiple),formatExpirationDate(new Date(cert.expiration)),cert.autoRenew?"yes":"no",import_chalk21.default.gray((0,import_ms5.default)(time.getTime()-new Date(cert.created).getTime()))]}function formatExpirationDate(date){let diff=date.getTime()-Date.now();return diff<0?import_chalk21.default.gray(`${(0,import_ms5.default)(-diff)} ago`):import_chalk21.default.gray(`in ${(0,import_ms5.default)(diff)}`)}var ls_default=ls2;var import_chalk22=__toESM(require_source(),1),import_ms6=__toESM(require_ms(),1),import_pluralize3=__toESM(require_pluralize(),1);async function getCertById(client,id){try{return await client.fetch(`/v6/certs/${id}`)}catch(err){if(isAPIError(err)&&err.code==="cert_not_found")return new CertNotFound(id);throw err}}import{stringify}from"querystring";async function getCustomCertsForDomain(client,context,domain2){try{let{certs}=await client.fetch(`/v5/certs?${stringify({domain:domain2,custom:!0})}`);return certs}catch(err){if(isAPIError(err)&&err.code==="forbidden")return new CertsPermissionDenied(context,domain2);throw err}}var CertsRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}};async function rm3(client,argv){let rmStamp=stamp_default(),{telemetryEventStore}=client,telemetry=new CertsRemoveTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args}=parsedArgs,id=args[0];if(telemetry.trackCliArgumentId(id),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk22.default.cyan(`${getCommandName("certs delete <id or cn>")}`)}`),2;let contextName=await getContextName(client),certs=await getCertsToDelete(client,contextName,id);return certs instanceof CertsPermissionDenied?(output_manager_default.error(`You don't have access to ${param(id)}'s certs under ${contextName}.`),1):certs.length===0?(id.includes(".")?output_manager_default.error(`No custom certificates found for "${id}" under ${import_chalk22.default.bold(contextName)}`):output_manager_default.error(`No certificates found by id "${id}" under ${import_chalk22.default.bold(contextName)}`),1):(await readConfirmation(client,"The following certificates will be deleted permanently",certs)&&(await Promise.all(certs.map(cert=>deleteCertById(client,cert.uid))),output_manager_default.success(`${import_chalk22.default.bold((0,import_pluralize3.default)("Certificate",certs.length,!0))} deleted ${rmStamp()}`)),0)}async function getCertsToDelete(client,contextName,id){let cert=await getCertById(client,id);if(cert instanceof CertNotFound){let certs=await getCustomCertsForDomain(client,contextName,id);return certs instanceof CertsPermissionDenied,certs}return[cert]}function readConfirmation(client,msg,certs){return new Promise(resolve5=>{output_manager_default.log(msg),output_manager_default.print(`${table(certs.map(formatCertRow),{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
112
+ `),output_manager_default.print(`${import_chalk22.default.bold.red("> Are you sure?")} ${import_chalk22.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve5(d.toString().trim().toLowerCase()==="y")}).resume()})}function formatCertRow(cert){return[cert.uid,import_chalk22.default.bold(cert.cns?cert.cns.join(", "):"\u2013"),...cert.created?[import_chalk22.default.gray(`${(0,import_ms6.default)(Date.now()-new Date(cert.created).getTime())} ago`)]:[]]}var rm_default=rm3;var CertsTelemetryClient=class extends TelemetryClient{trackCliSubcommandIssue(actual){this.trackCliSubcommand({subcommand:"issue",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG5={add:getCommandAliases(addSubcommand),issue:getCommandAliases(issueSubcommand),ls:getCommandAliases(listSubcommand3),delete:getCommandAliases(removeSubcommand2)};async function main2(client){let{telemetryEventStore}=client,telemetry=new CertsTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(certsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG5),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("certs",subcommand),output_manager_default.print(help(certsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:certsCommand,columns:client.stderr.columns}))}switch(subcommand){case"issue":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(issueSubcommand),0):(telemetry.trackCliSubcommandIssue(subcommandOriginal),issue(client,args));case"ls":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(listSubcommand3),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls_default(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(removeSubcommand2),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"certs remove","certs delete"),rm_default(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("certs",subcommandOriginal),printHelp(addSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add_default(client,args));default:return output_manager_default.error("Please specify a valid subcommand: ls | issue | delete"),output_manager_default.print(help(certsCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk24=__toESM(require_source(),1);async function addDNSRecord(client,domain2,recordData){try{return await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{body:recordData,method:"POST"})}catch(err){if(isAPIError(err)){if(err.status===400&&err.code==="invalid_type")return new DNSInvalidType(recordData.type);if(err.status===400&&err.message.includes("port"))return new DNSInvalidPort;if(err.status===400)return err;if(err.status===403)return new DNSPermissionDenied(domain2);if(err.status===404)return new DomainNotFound(domain2);if(err.status===409){let{oldId=""}=err;return new DNSConflictingRecord(oldId)}}throw err}}function parseAddArgs(args){if(!args||args.length<1)return null;let[domain2,...rest]=args;if(domain2&&rest.length===0)return{domain:domain2,data:null};let name=args[1]==="@"?"":args[1].toString(),type=args[2],value=args[3];return domain2&&typeof name=="string"&&type?type==="MX"&&args.length===5?{domain:domain2,data:{name,type,value,mxPriority:Number(args[4])}}:type==="SRV"&&args.length===7?{domain:domain2,data:{name,type,srv:{priority:Number(value),weight:Number(args[4]),port:Number(args[5]),target:args[6]}}}:args.length===4?{domain:domain2,data:{name,type,value}}:null:null}var import_chalk23=__toESM(require_source(),1);var RECORD_TYPES=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"];async function getDNSData(client,data){if(data)return data;try{let possibleTypes=new Set(RECORD_TYPES),type=(await client.input.text({message:`- Record type (${RECORD_TYPES.join(", ")}): `,validate:v=>!!(v&&possibleTypes.has(v.trim().toUpperCase()))})).trim().toUpperCase(),name=await getRecordName(client,type);if(type==="SRV"){let priority=await getNumber(client,`- ${type} priority: `),weight=await getNumber(client,`- ${type} weight: `),port=await getNumber(client,`- ${type} port: `),target=await getTrimmedString(client,`- ${type} target: `);return output_manager_default.log(`${import_chalk23.default.cyan(name)} ${import_chalk23.default.bold(type)} ${import_chalk23.default.cyan(`${priority}`)} ${import_chalk23.default.cyan(`${weight}`)} ${import_chalk23.default.cyan(`${port}`)} ${import_chalk23.default.cyan(target)}.`),await verifyData(client)?{name,type,srv:{priority,weight,port,target}}:null}if(type==="MX"){let mxPriority=await getNumber(client,`- ${type} priority: `),value2=await getTrimmedString(client,`- ${type} host: `);return output_manager_default.log(`${import_chalk23.default.cyan(name)} ${import_chalk23.default.bold(type)} ${import_chalk23.default.cyan(`${mxPriority}`)} ${import_chalk23.default.cyan(value2)}`),await verifyData(client)?{name,type,value:value2,mxPriority}:null}let value=await getTrimmedString(client,`- ${type} value: `);return output_manager_default.log(`${import_chalk23.default.cyan(name)} ${import_chalk23.default.bold(type)} ${import_chalk23.default.cyan(value)}`),await verifyData(client)?{name,type,value}:null}catch{return null}}async function verifyData(client){return client.input.confirm("Is this correct?",!1)}async function getRecordName(client,type){let input=await client.input.text({message:`- ${type} name: `});return input==="@"?"":input}async function getNumber(client,label){return Number(await client.input.text({message:label,validate:v=>!!(v&&Number(v))}))}async function getTrimmedString(client,label){return(await client.input.text({message:label,validate:v=>!!(v&&v.trim().length>0)})).trim()}var ALLOWED_RECORD_TYPES=["A","AAAA","ALIAS","CNAME","TXT","MX","SRV"],DnsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES.includes(type)?type:this.redactedValue;this.trackCliArgument({arg:"type",value:allowedType})}}trackCliArgumentValues(values){values?.length&&this.trackCliArgument({arg:"values",value:this.redactedValue})}};async function add2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,parsedParams=parseAddArgs(args);if(!parsedParams){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to add a DNS record (see dns --help for MX/SRV forms)"}]},2)}return output_manager_default.error(`Invalid number of arguments. See: ${import_chalk24.default.cyan(`${getCommandName("dns --help")}`)} for usage.`),2}let addStamp=stamp_default(),{domain:domain2,data:argData}=parsedParams,valueArgs=args.slice(3);if(client.nonInteractive&&!argData){let cmd2=withGlobalFlags(client,"dns add <domain> <name> <type> <value>");return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:"In non-interactive mode full record details are required. Run: "+cmd2,next:[{command:cmd2,when:"to add a DNS record (replace placeholders)"},{command:withGlobalFlags(client,"dns --help"),when:"for usage and examples"}]},2),2}let telemetryClient=new DnsAddTelemetryClient({opts:{store:client.telemetryEventStore}});telemetryClient.trackCliArgumentDomain(domain2),telemetryClient.trackCliArgumentName(parsedParams.data?.name),telemetryClient.trackCliArgumentType(parsedParams.data?.type),telemetryClient.trackCliArgumentValues(valueArgs);let data=await getDNSData(client,argData);if(!data)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INCOMPLETE_RECORD,message:"Record details could not be determined non-interactively. Provide full arguments for dns add.",next:[{command:withGlobalFlags(client,"dns --help")}]},1),output_manager_default.log("Canceled"),1;let contextName=await getContextName(client),record=await addDNSRecord(client,domain2,data);return record instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk24.default.bold(contextName)} ${import_chalk24.default.gray(addStamp())}`),1):record instanceof DNSPermissionDenied?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PERMISSION_DENIED,message:`You don't have permissions to add records to domain ${domain2} under ${contextName}.`},1),output_manager_default.error(`You don't have permissions to add records to domain ${domain2} under ${import_chalk24.default.bold(contextName)} ${import_chalk24.default.gray(addStamp())}`),1):record instanceof DNSInvalidPort?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_PORT,message:"Invalid <port> parameter. A number was expected."},2),output_manager_default.error(`Invalid <port> parameter. A number was expected ${import_chalk24.default.gray(addStamp())}`),2):record instanceof DNSInvalidType?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DNS_TYPE,message:`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT.`},2),output_manager_default.error(`Invalid <type> parameter "${record.meta.type}". Expected one of A, AAAA, ALIAS, CAA, CNAME, MX, SRV, TXT ${import_chalk24.default.gray(addStamp())}`),2):record instanceof Error?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_ADD_FAILED,message:record.message},1),output_manager_default.error(record.message),1):(output_manager_default.success(`DNS record for domain ${import_chalk24.default.bold(domain2)} ${import_chalk24.default.gray(`(${record.uid})`)} created under ${import_chalk24.default.bold(contextName)} ${import_chalk24.default.gray(addStamp())}`),0)}var import_chalk26=__toESM(require_source(),1);var import_chalk25=__toESM(require_source(),1);import{readFileSync as readFileSync2}from"fs";import{resolve as resolve4}from"path";async function importZonefile(client,contextName,domain2,zonefilePath){output_manager_default.spinner(`Importing Zone file for domain ${domain2} under ${import_chalk25.default.bold(contextName)}`);let zonefile=readFileSync2(resolve4(zonefilePath),"utf8");try{let res=await client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records`,{headers:{"Content-Type":"text/dns"},body:zonefile,method:"PUT",json:!1}),{recordIds}=await res.json();return recordIds}catch(err){if(isAPIError(err)){if(err.code==="not_found")return new DomainNotFound(domain2,contextName);if(err.code==="invalid_domain")return new InvalidDomain(domain2)}throw err}}var DnsImportTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domain2){domain2&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentZonefile(path3){path3&&this.trackCliArgument({arg:"zoneFilePath",value:this.redactedValue})}};async function importZone(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(importSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args}=parsedArgs,{telemetryEventStore}=client,contextName=await getContextName(client),telemetry=new DnsImportTelemetryClient({opts:{store:telemetryEventStore}});if(args.length!==2){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns import <domain> <zonefile>");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to import a zone file"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk26.default.cyan(`${getCommandName("dns import <domain> <zonefile>")}`)}`),2}let addStamp=stamp_default(),[domain2,zonefilePath]=args;telemetry.trackCliArgumentDomain(domain2),telemetry.trackCliArgumentZonefile(zonefilePath);let recordIds=await importZonefile(client,contextName,domain2,zonefilePath);return recordIds instanceof DomainNotFound?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domain2} can't be found under ${contextName}.`,next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records for your scope"}]},1),output_manager_default.error(`The domain ${domain2} can't be found under ${import_chalk26.default.bold(contextName)} ${import_chalk26.default.gray(addStamp())}`),1):recordIds instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_DOMAIN,message:`The domain ${domain2} doesn't match the one found in the zone file.`},1),output_manager_default.error(`The domain ${domain2} doesn't match with the one found in the Zone file ${import_chalk26.default.gray(addStamp())}`),1):(output_manager_default.success(`${recordIds.length} DNS records for domain ${import_chalk26.default.bold(domain2)} created under ${import_chalk26.default.bold(contextName)} ${import_chalk26.default.gray(addStamp())}`),0)}var import_chalk27=__toESM(require_source(),1);async function getDNSRecordById(client,id){return client.fetch(`/v5/domains/records/${id}`)}function handleDNSRecordError(err){if(isAPIError(err))switch(err.status){case 404:return output_manager_default.error("DNS record not found"),1;case 403:return output_manager_default.error("You don't have permission to access this DNS record."),1;case 400:return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}var DnsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect4(client,argv){let telemetry=new DnsInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk27.default.cyan(`${getCommandName("dns inspect <id>")}`)}`),2;let[recordId]=args;telemetry.trackCliArgumentId(recordId);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),record;try{record=await getDNSRecordById(client,recordId)}catch(err){return handleDNSRecordError(err)}return record?asJson?(client.stdout.write(`${JSON.stringify(record,null,2)}
113
+ `),0):(output_manager_default.log(`DNS record ${import_chalk27.default.bold(record.id)} of domain ${import_chalk27.default.bold(record.domain)} under ${import_chalk27.default.bold(contextName)}`),client.stdout.write(formatRecordDetails(record)),0):(output_manager_default.error("DNS record not found"),1)}function formatRecordDetails(record){let rows=[["ID",record.id],["Name",record.name||"@"],["Domain",record.domain],["Type",record.type],["Value",record.value]],priority=record.priority??record.mxPriority;return priority!==void 0&&rows.push(["Priority",`${priority}`]),record.ttl!==void 0&&rows.push(["TTL",`${record.ttl}`]),record.comment&&rows.push(["Comment",record.comment]),rows.push(["Creator",record.creator]),rows.push(["Created",formatDate(record.createdAt)]),record.updatedAt&&rows.push(["Updated",formatDate(record.updatedAt)]),`${table(rows,{align:["l","l"],hsep:2}).replace(/^(.*)/gm," $1")}
114
+ `}var import_chalk29=__toESM(require_source(),1),import_ms7=__toESM(require_ms(),1);async function getDomainDNSRecords(client,domain2,apiVersion=3,nextTimestamp,limit=20){output_manager_default.debug(`Fetching for DNS records of domain ${domain2}`);try{let url=`/v${apiVersion}/domains/${encodeURIComponent(domain2)}/records?limit=${limit}`;return nextTimestamp&&(url+=`&until=${nextTimestamp}`),await client.fetch(url)}catch(err){if(isAPIError(err)&&err.code==="not_found")return new DomainNotFound(domain2);throw err}}var import_chalk28=__toESM(require_source(),1);async function getDNSRecords(client,contextName,next){let{domainNames,pagination}=await getDomainNames(client,contextName,next);return{records:(await Promise.all(domainNames.map(createGetDomainRecords(client)))).map(item=>item instanceof DomainNotFound?[]:item).reduce(getAddDomainName(domainNames),[]),pagination}}function createGetDomainRecords(client){return async domainName=>{let data=await getDomainDNSRecords(client,domainName);return data instanceof DomainNotFound?[]:data.records}}function getAddDomainName(domainNames){return(prev,item,idx)=>[...prev,{domainName:domainNames[idx],records:item}]}async function getDomainNames(client,contextName,next){output_manager_default.spinner(`Fetching domains under ${import_chalk28.default.bold(contextName)}`);let{domains:domains2,pagination}=await getDomains(client,next);return{domainNames:domains2.map(domain2=>domain2.name),pagination}}var DnsLsTelemetryClient=class extends TelemetryClient{trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs;if(client.nonInteractive&&args.length>1){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls <domain> ${flags.join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to list DNS records (optional single domain)"}]},2),2}let validationResult=validateLsArgs({commandName:"dns ls <domain>",args,maxArgs:1,exitCode:1});if(validationResult!==0)return validationResult;let{telemetryEventStore}=client,telemetry=new DnsLsTelemetryClient({opts:{store:telemetryEventStore}}),[domainName]=args;telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,contextName=await getContextName(client),lsStamp=stamp_default(),paginationOptions;try{paginationOptions=getPaginationOpts(opts)}catch(err){return output_manager_default.prettyError(err),err instanceof InvalidNextError?2:1}if(domainName){let data=await getDomainDNSRecords(client,domainName,5,...paginationOptions);if(data instanceof DomainNotFound){if(client.nonInteractive){let flags=getGlobalFlagsFromArgs(client.argv.slice(2)),cmd2=getCommandNamePlain(`dns ls ${flags.join(" ")}`.trim());outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DOMAIN_NOT_FOUND,message:`The domain ${domainName} can't be found under ${contextName}.`,next:[{command:cmd2,when:"to list available DNS records"}]},1)}return output_manager_default.error(`The domain ${domainName} can't be found under ${import_chalk29.default.bold(contextName)} ${import_chalk29.default.gray(lsStamp())}`),1}let{records,pagination:pagination2}=data,dnsRecords2=[{domainName,records}];if(asJson)return outputDnsRecordsJson(client,dnsRecords2,pagination2),0;if(output_manager_default.log(`${records.length>0?"Records":"No records"} found under ${import_chalk29.default.bold(contextName)} ${import_chalk29.default.gray(lsStamp())}`),client.stdout.write(getDNSRecordsTable(dnsRecords2)),pagination2?.next){let flags=getCommandFlags(opts,["_","--next"]);output_manager_default.print(`
115
+ `),printNextPageCommand(getCommandNamePlain(`dns ls ${domainName}${flags} --next ${pagination2.next}`))}return 0}let{records:dnsRecords,pagination}=await getDNSRecords(client,contextName,...paginationOptions);if(asJson)return outputDnsRecordsJson(client,dnsRecords,pagination),0;let nRecords=dnsRecords.reduce((p,r)=>r.records.length+p,0);if(output_manager_default.log(`${nRecords>0?"Records":"No records"} found under ${import_chalk29.default.bold(contextName)} ${import_chalk29.default.gray(lsStamp())}`),output_manager_default.log(getDNSRecordsTable(dnsRecords)),pagination?.next){let flags=getCommandFlags(opts,["_","--next"]);printNextPageCommand(getCommandNamePlain(`dns ls${flags} --next ${pagination.next}`))}return 0}function getDNSRecordsTable(dnsRecords){return formatTable(["","id","name","type","value","created"],["l","r","l","l","l","l"],dnsRecords.map(({domainName,records})=>({name:import_chalk29.default.bold(domainName),rows:records.map(getDNSRecordRow)})))}function getDNSRecordRow(record){let isSystemRecord=record.creator==="system",createdAt=`${(0,import_ms7.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`,priority=record.mxPriority||record.priority||null;return["",isSystemRecord?"":record.id,record.name,record.type,priority?`${priority} ${record.value}`:record.value,import_chalk29.default.gray(isSystemRecord?"default":createdAt)]}function outputDnsRecordsJson(client,records,pagination){output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({records,pagination},null,2)}
116
+ `)}var import_chalk30=__toESM(require_source(),1),import_ms8=__toESM(require_ms(),1);async function deleteDNSRecordById(client,domain2,recordId){return client.fetch(`/v3/domains/${encodeURIComponent(domain2)}/records/${recordId}`,{method:"DELETE"})}var DnsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"recordId",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function rm4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs,{telemetryEventStore}=client,telemetry=new DnsRmTelemetryClient({opts:{store:telemetryEventStore}});await getScope(client);let[recordId]=args;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns remove <id> --yes");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to remove a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk30.default.cyan(`${getCommandName("dns remove <id>")}`)}`),2}telemetry.trackCliArgumentId(recordId),telemetry.trackCliFlagYes(flags["--yes"]);let record=await getDNSRecordById(client,recordId);if(!record)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.DNS_RECORD_NOT_FOUND,message:"DNS record not found.",next:[{command:withGlobalFlags(client,"dns ls"),when:"to list DNS records and ids"}]},1),output_manager_default.error("DNS record not found"),1;let{domain:domainName}=record,skipConfirmation=flags["--yes"];if(client.nonInteractive&&!skipConfirmation)return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"In non-interactive mode --yes is required to remove a DNS record.",next:[{command:buildCommandWithYes(client.argv),when:"to confirm removal"}]},1),1;if(!(skipConfirmation||await readConfirmation2(client,"The following record will be removed permanently",domainName,record)))return output_manager_default.error("User canceled."),0;let rmStamp=stamp_default();return await deleteDNSRecordById(client,domainName,record.id),output_manager_default.success(`Record ${import_chalk30.default.gray(`${record.id}`)} removed ${import_chalk30.default.gray(rmStamp())}`),0}function readConfirmation2(client,msg,domainName,record){return new Promise(resolve5=>{output_manager_default.log(msg),output_manager_default.print(`${table([getDeleteTableRow(domainName,record)],{align:["l","r","l"],hsep:6}).replace(/^(.*)/gm," $1")}
117
+ `),output_manager_default.print(`${import_chalk30.default.bold.red("> Are you sure?")} ${import_chalk30.default.gray("(y/N) ")}`),client.stdin.on("data",d=>{process.stdin.pause(),resolve5(d.toString().trim().toLowerCase()==="y")}).resume()})}function getDeleteTableRow(domainName,record){let recordName=`${record.name.length>0?`${record.name}.`:""}${domainName}`;return[record.id,import_chalk30.default.bold(`${recordName} ${record.type} ${record.value} ${record.mxPriority||""}`),import_chalk30.default.gray(`${(0,import_ms8.default)(Date.now()-new Date(Number(record.createdAt)).getTime())} ago`)]}var import_chalk31=__toESM(require_source(),1);async function updateDNSRecord(client,recordId,data){return client.fetch(`/v1/domains/records/${encodeURIComponent(recordId)}`,{method:"PATCH",body:data})}var ALLOWED_RECORD_TYPES2=["A","AAAA","ALIAS","CAA","CNAME","MX","SRV","TXT"],DnsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentId(recordId){recordId&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionName(name){name!==void 0&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionType(type){if(type){let allowedType=ALLOWED_RECORD_TYPES2.includes(type)?type:this.redactedValue;this.trackCliOption({option:"type",value:allowedType})}}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionTtl(ttl){ttl!==void 0&&this.trackCliOption({option:"ttl",value:this.redactedValue})}trackCliOptionMxPriority(mxPriority){mxPriority!==void 0&&this.trackCliOption({option:"mx-priority",value:this.redactedValue})}trackCliOptionSrvPriority(srvPriority){srvPriority!==void 0&&this.trackCliOption({option:"srv-priority",value:this.redactedValue})}trackCliOptionSrvWeight(srvWeight){srvWeight!==void 0&&this.trackCliOption({option:"srv-weight",value:this.redactedValue})}trackCliOptionSrvPort(srvPort){srvPort!==void 0&&this.trackCliOption({option:"srv-port",value:this.redactedValue})}trackCliOptionSrvTarget(srvTarget){srvTarget&&this.trackCliOption({option:"srv-target",value:this.redactedValue})}trackCliOptionComment(comment){comment!==void 0&&this.trackCliOption({option:"comment",value:this.redactedValue})}};var SRV_FLAGS=["--srv-priority","--srv-weight","--srv-port","--srv-target"];async function update(client,argv){let telemetry=new DnsUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags}=parsedArgs;if(args.length!==1){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_ARGUMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Invalid number of arguments. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record by id (use dns ls to find ids)"}]},2)}return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk31.default.cyan(`${getCommandName("dns update <id> [options]")}`)}`),2}let[recordId]=args;telemetry.trackCliArgumentId(recordId),telemetry.trackCliOptionName(flags["--name"]),telemetry.trackCliOptionType(flags["--type"]),telemetry.trackCliOptionValue(flags["--value"]),telemetry.trackCliOptionTtl(flags["--ttl"]),telemetry.trackCliOptionMxPriority(flags["--mx-priority"]),telemetry.trackCliOptionSrvPriority(flags["--srv-priority"]),telemetry.trackCliOptionSrvWeight(flags["--srv-weight"]),telemetry.trackCliOptionSrvPort(flags["--srv-port"]),telemetry.trackCliOptionSrvTarget(flags["--srv-target"]),telemetry.trackCliOptionComment(flags["--comment"]);let numericFlags=["--ttl","--mx-priority","--srv-priority","--srv-weight","--srv-port"];for(let flagName of numericFlags){let value=flags[flagName];if(value!==void 0&&Number.isNaN(value))return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The ${flagName} option must be a number.`},2),output_manager_default.error(`The ${flagName} option must be a number.`),2}let data={},name=flags["--name"];name!==void 0&&(data.name=name==="@"?"":name),flags["--type"]!==void 0&&(data.type=flags["--type"]),flags["--value"]!==void 0&&(data.value=flags["--value"]),flags["--ttl"]!==void 0&&(data.ttl=flags["--ttl"]),flags["--mx-priority"]!==void 0&&(data.mxPriority=flags["--mx-priority"]),flags["--comment"]!==void 0&&(data.comment=flags["--comment"]);let srvFlagsProvided=SRV_FLAGS.filter(flagName=>flags[flagName]!==void 0);if(srvFlagsProvided.length>0){if(srvFlagsProvided.length!==SRV_FLAGS.length)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`},2),output_manager_default.error(`Updating an SRV record requires all of ${SRV_FLAGS.join(", ")}.`),2;data.srv={priority:flags["--srv-priority"],weight:flags["--srv-weight"],port:flags["--srv-port"],target:flags["--srv-target"]}}if(Object.keys(data).length===0){if(client.nonInteractive){let cmd2=withGlobalFlags(client,"dns update <id> [options]");outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.NO_CHANGES_REQUESTED,action:AGENT_ACTION.MISSING_ARGUMENTS,message:`Provide at least one field to update. Run: ${cmd2}`,next:[{command:cmd2,when:"to update a DNS record (e.g. --value, --ttl, --comment)"},{command:withGlobalFlags(client,"dns update --help"),when:"for available options"}]},1)}return output_manager_default.error(`Provide at least one field to update. See ${import_chalk31.default.cyan(`${getCommandName("dns update --help")}`)} for available options.`),2}let changeSummary=Object.entries(data).map(([field,value])=>`${field}=${value===""?"@":value}`).join(", ");if(!canPrompt(client)){let rerun=getCommandNamePlain(stripSensitiveAuthArgs(client.argv.slice(2)).filter(arg=>arg!=="--non-interactive"&&!arg.startsWith("--non-interactive=")).join(" "));return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Updating DNS record ${recordId} (${changeSummary}) overwrites a live record. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:rerun,when:"user runs this command in an interactive terminal to confirm"}]},1),output_manager_default.error("This command must be run interactively to confirm overwriting the DNS record."),1}if(output_manager_default.print(prependEmoji(`Updating DNS record ${import_chalk31.default.gray(recordId)} will overwrite: ${import_chalk31.default.bold(changeSummary)}
118
+ `,emoji("warning"))),!await client.input.confirm(`Update DNS record ${recordId}?`,!1))return output_manager_default.log("Canceled"),0;let updateStamp=stamp_default(),record;try{record=await updateDNSRecord(client,recordId,data)}catch(err){if(isAPIError(err)){if(err.status===404)return output_manager_default.error("DNS record not found"),1;if(err.status===403)return output_manager_default.error("You don't have permission to access this DNS record."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"The request was invalid."),1}return printError(err),1}let contextName=await getContextName(client);return output_manager_default.success(`DNS record ${import_chalk31.default.gray(`${record.id}`)} of domain ${import_chalk31.default.bold(record.domain)} updated under ${import_chalk31.default.bold(contextName)} ${import_chalk31.default.gray(updateStamp())}`),0}var DnsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandImport(actual){this.trackCliSubcommand({subcommand:"import",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG6={add:getCommandAliases(addSubcommand2),import:getCommandAliases(importSubcommand),inspect:getCommandAliases(inspectSubcommand2),ls:getCommandAliases(listSubcommand4),rm:getCommandAliases(removeSubcommand3),update:getCommandAliases(updateSubcommand)};async function dns(client){let{telemetryEventStore}=client,parsedArgs,flagsSpecification=getFlagsSpecification(dnsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let telemetry=new DnsTelemetryClient({opts:{store:telemetryEventStore}}),{subcommand,subcommandOriginal,args}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG6),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("dns",subcommand),output_manager_default.print(help(dnsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:dnsCommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(addSubcommand2),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"import":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(importSubcommand),0):(telemetry.trackCliSubcommandImport(subcommandOriginal),importZone(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(inspectSubcommand2),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect4(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(removeSubcommand3),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm4(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(updateSubcommand),0):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),update(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("dns",subcommandOriginal),printHelp(listSubcommand4),0):(telemetry.trackCliSubcommandList(subcommandOriginal),ls3(client,args))}}var import_chalk32=__toESM(require_source(),1);import{join as join2}from"path";var GitConnectTelemetryClient=class extends TelemetryClient{trackCliArgumentGitUrl(name){name&&this.trackCliArgument({arg:"gitUrl",value:this.redactedValue})}trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function connect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(connectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,{cwd}=client,telemetry=new GitConnectTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]);let confirm=!!opts["--yes"];if(args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk32.default.cyan(`${getCommandName("project connect")}`)}`),2;let repoArg=args[0];telemetry.trackCliArgumentGitUrl(repoArg);let projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm:confirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{project,org}=linkedProject,gitProviderLink=project.link;client.config.currentTeam=org.type==="team"?org.id:void 0;let gitConfigPath=getGitConfigPath({cwd})??join2(cwd,".git/config"),gitConfig=await parseGitConfig(gitConfigPath);if(repoArg){let parsedUrlArg=parseRepoUrl(repoArg);return parsedUrlArg?gitConfig?await connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo:parsedUrlArg}):await connectArg({client,confirm,org,project,repoInfo:parsedUrlArg}):(output_manager_default.error(`Failed to parse URL "${repoArg}". Please ensure the URL is valid.`),1)}if(!gitConfig)return output_manager_default.error(`No local Git repository found. Run ${import_chalk32.default.cyan("`git clone <url>`")} to clone a remote Git repository first.`),1;let remoteUrls=pluckRemoteUrls(gitConfig);if(!remoteUrls)return output_manager_default.error(`No remote URLs found in your Git config. Make sure you've configured a remote repo in your local Git config. Run ${import_chalk32.default.cyan("`git remote --help`")} for more details.`),1;let repoInfo=await selectAndParseRemoteUrl(client,remoteUrls);if(!repoInfo)return Object.keys(remoteUrls).length>1?0:1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});return typeof result=="number"?result:0}async function connectArg({client,confirm,org,project,repoInfo}){let{url:repoUrl}=repoInfo,parsedRepoArg=parseRepoUrl(repoUrl);if(!parsedRepoArg)return output_manager_default.error(`Failed to parse URL "${repoUrl}". Please ensure the URL is valid.`),1;let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:parsedRepoArg.org,project,provider:parsedRepoArg.provider,repo:parsedRepoArg.repo,repoPath:`${parsedRepoArg.org}/${parsedRepoArg.repo}`});return typeof result=="number"?result:0}async function connectArgWithLocalGit({client,org,project,confirm,gitConfig,repoInfo}){let remoteUrls=pluckRemoteUrls(gitConfig);if(remoteUrls){let shouldConnect=await promptConnectArg({client,yes:confirm,repoInfo,remoteUrls});if(!shouldConnect)return 1;if(shouldConnect){let result=await checkExistsAndConnect({client,confirm,gitProviderLink:project.link,org,gitOrg:repoInfo.org,project,provider:repoInfo.provider,repo:repoInfo.repo,repoPath:`${repoInfo.org}/${repoInfo.repo}`});if(typeof result=="number")return result}return 0}return await connectArg({client,confirm,org,project,repoInfo})}async function promptConnectArg({client,yes,repoInfo:repoInfoFromArg,remoteUrls}){if(Object.keys(remoteUrls).length>1)output_manager_default.log("Found multiple Git repositories in your local Git config:"),printRemoteUrls(remoteUrls);else{let url=Object.values(remoteUrls)[0],repoInfoFromGitConfig=parseRepoUrl(url);if(!repoInfoFromGitConfig)return output_manager_default.error(`Failed to parse URL "${url}". Please ensure the URL is valid.`),!1;if(JSON.stringify(repoInfoFromGitConfig)===JSON.stringify(repoInfoFromArg))return!0;output_manager_default.log(`Found a repository in your local Git Config: ${import_chalk32.default.cyan(Object.values(remoteUrls)[0])}`)}let shouldConnect=yes;if(!shouldConnect){let{url:repoUrlFromArg}=repoInfoFromArg;shouldConnect=await client.input.confirm(`Do you still want to connect ${link_default(repoUrlFromArg)}?`,!1),shouldConnect||output_manager_default.log("Canceled. Repo not connected.")}return shouldConnect}var import_chalk33=__toESM(require_source(),1);var GitDisconnectTelemetryClient=class extends TelemetryClient{trackCliFlagConfirm(confirm){confirm&&this.trackCliFlag("confirm")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function disconnect(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(disconnectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new GitDisconnectTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetry.trackCliFlagConfirm(opts["--confirm"]),telemetry.trackCliFlagYes(opts["--yes"]),telemetry.trackCliOptionProject(opts["--project"]),"--confirm"in opts&&(output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),opts["--yes"]=opts["--confirm"]),args.length!==0)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk33.default.cyan(`${getCommandName("project disconnect")}`)}`),2;let autoConfirm=!!parsedArgs.flags["--yes"],projectName=opts["--project"],linkedProject=await ensureLink("git",client,client.cwd,{autoConfirm,projectName,failIfNotFound:!!projectName});if(typeof linkedProject=="number")return linkedProject;let{org,project}=linkedProject;if(client.config.currentTeam=org.type==="team"?org.id:void 0,project.link){let{org:linkOrg,repo}=project.link;output_manager_default.print(`Your Vercel project will no longer create deployments when you push to this repository.
119
+ `),autoConfirm||await client.input.confirm(`Are you sure you want to disconnect ${import_chalk33.default.cyan(`${linkOrg}/${repo}`)} from your project?`,!1)?(await disconnectGitProvider(client,org,project.id),output_manager_default.log(`Disconnected ${import_chalk33.default.cyan(`${linkOrg}/${repo}`)}.`)):output_manager_default.log("Canceled")}else return output_manager_default.error(`No Git repository connected. Run ${getCommandName("project connect")} to connect one.`),1;return 0}var GitTelemetryClient=class extends TelemetryClient{trackCliSubcommandConnect(actual){this.trackCliSubcommand({subcommand:"connect",value:actual})}trackCliSubcommandDisconnect(actual){this.trackCliSubcommand({subcommand:"disconnect",value:actual})}};var COMMAND_CONFIG7={connect:["connect"],disconnect:["disconnect"]};async function main3(client){let parsedArgs,flagsSpecification=getFlagsSpecification(gitCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new GitTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG7);if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("git",subcommand),output_manager_default.print(help(gitCommand,{stream:client.stderr,columns:client.stderr.columns})),0;switch(subcommand){case"connect":return telemetry.trackCliSubcommandConnect(subcommandOriginal),connect(client,args);case"disconnect":return telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,args);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG7)),output_manager_default.print(help(gitCommand,{stream:client.stderr,columns:client.stderr.columns})),2}}var import_chalk34=__toESM(require_source(),1);var GlobalConfigLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function listCmd(client,argv){let telemetry=new GlobalConfigLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand5.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,lsCheck=validateLsArgs({commandName:"global-config list",args,maxArgs:0,exitCode:2});if(lsCheck!==0)return lsCheck;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetry.trackCliOptionFormat(flags["--format"]);let rows;try{rows=await client.fetch("/v1/global-config")}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(rows,null,2)}
120
+ `),0;let contextName=await getContextName(client);if(output_manager_default.print(`${(0,import_chalk34.gray)(`${rows.length} Global Config${rows.length===1?"":"s"} found under ${contextName} ${stamp_default()}`)}
121
+ `),rows.length===0)return 0;let tableRows=[["id","slug","items","size","updated"].map(h=>(0,import_chalk34.gray)(h)),...rows.map(r=>[r.id,r.slug,String(r.itemCount??""),String(r.sizeInBytes??""),r.updatedAt!=null?new Date(r.updatedAt).toISOString():""])];return client.stderr.write(`${table(tableRows,{hsep:2})}
122
+ `),0}var import_chalk35=__toESM(require_source(),1);var GlobalConfigAddTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(value){this.trackCliArgument({arg:"slug",value})}trackCliOptionItems(value){value&&this.trackCliOption({option:"items",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function addCmd(client,argv){let telemetry=new GlobalConfigAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(addSubcommand3.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[slug]=args;if(telemetry.trackCliArgumentSlug(slug),telemetry.trackCliOptionItems(flags["--items"]),telemetry.trackCliOptionFormat(flags["--format"]),!slug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Slug is required. Usage: `vercel global-config create <slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config create <slug>")}]},2),output_manager_default.error(`Missing slug. Usage: ${import_chalk35.default.cyan(getCommandName("global-config create <slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,items;if(flags["--items"])try{let parsed=JSON.parse(String(flags["--items"]));if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return output_manager_default.error("`--items` must be a JSON object of key \u2192 value pairs."),2;items=parsed}catch{return output_manager_default.error("`--items` must be valid JSON."),1}let created;try{created=await client.fetch("/v1/global-config",{method:"POST",body:items?{slug,items}:{slug}})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
123
+ `),0):(output_manager_default.success(`Global Config ${import_chalk35.default.bold(slug)} created.`),0)}var import_chalk36=__toESM(require_source(),1);var GlobalConfigGetTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function resolveGlobalConfigId(client,idOrSlug){return idOrSlug?idOrSlug.startsWith("ecfg_")?idOrSlug:(await client.fetch("/v1/global-config")).find(c=>c.slug===idOrSlug)?.id??null:null}async function getCmd(client,argv){let telemetry=new GlobalConfigGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(getSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config inspect <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk36.default.cyan(getCommandName("global-config inspect <id-or-slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let data;try{data=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
124
+ `),0):(output_manager_default.log(JSON.stringify(data,null,2)),0)}var import_chalk37=__toESM(require_source(),1);var GlobalConfigUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionSlug(value){value&&this.trackCliOption({option:"slug",value:this.redactedValue})}trackCliOptionPatch(value){value&&this.trackCliOption({option:"patch",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function parsePatchJson(raw){let trimmed=raw.trim();try{return JSON.parse(trimmed)}catch(firstError){let normalized=trimmed.replace(/\\r\\n/g,`
104
125
  `).replace(/\\n/g,`
105
- `).replace(/\\t/g," ");if(normalized===trimmed)throw firstError;try{return JSON.parse(normalized)}catch{throw firstError}}}function parsePatchBody(raw){let parsed=parsePatchJson(raw);if(Array.isArray(parsed))return{items:parsed};if(typeof parsed=="object"&&parsed!==null&&"items"in parsed&&Array.isArray(parsed.items))return{items:parsed.items};throw new Error('`--patch` must be a JSON array of item operations or an object `{ "items": [...] }`.')}async function updateCmd(client,argv){let telemetry=new GlobalConfigUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(updateSubcommand2.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionSlug(flags["--slug"]),telemetry.trackCliOptionPatch(flags["--patch"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Provide `--slug` and/or `--patch`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk36.default.cyan(getCommandName("global-config update <id-or-slug>"))}`),2;let newSlug=flags["--slug"],patchRaw=flags["--patch"];if(!newSlug&&!patchRaw)return output_manager_default.error("Provide `--slug` to rename the store and/or `--patch` to update items."),1;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let parsedPatchBody;if(patchRaw)try{parsedPatchBody=parsePatchBody(String(patchRaw))}catch(e){return output_manager_default.error(e instanceof Error?e.message:String(e)),1}let lastPayload;try{newSlug&&(lastPayload=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}`,{method:"PUT",body:{slug:newSlug}})),parsedPatchBody&&(lastPayload=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}/items`,{method:"PATCH",body:parsedPatchBody}))}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(lastPayload,null,2)}
106
- `),0):(output_manager_default.success("Global Config updated."),0)}var import_chalk37=__toESM(require_source(),1);var GlobalConfigRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function removeCmd(client,argv){let telemetry=new GlobalConfigRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(removeSubcommand4.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,skipConfirmation=flags["--yes"]===!0;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config delete <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk37.default.cyan(getCommandName("global-config delete <id-or-slug>"))}`),2;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Deleting a Global Config requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;if(!skipConfirmation&&!await client.input.confirm(`Delete Global Config ${import_chalk37.default.bold(id)} (${import_chalk37.default.bold(idOrSlug)})?`,!1))return output_manager_default.log("Canceled"),0;try{await client.fetch(`/v1/global-config/${encodeURIComponent(id)}`,{method:"DELETE"})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify({status:"ok",id,message:`Global Config ${id} deleted.`},null,2)}
107
- `),0):(output_manager_default.success(`Global Config ${import_chalk37.default.bold(id)} deleted.`),0)}var import_chalk38=__toESM(require_source(),1);var GlobalConfigItemsTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionKey(value){value&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function itemsCmd(client,argv){let telemetry=new GlobalConfigItemsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(itemsSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,key=flags["--key"];if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionKey(key),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config items <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk38.default.cyan(getCommandName("global-config items <id-or-slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let data;try{if(key){let path3=`/v1/global-config/${encodeURIComponent(id)}/item/${encodeURIComponent(key)}`;data=await client.fetch(path3)}else data=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}/items`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return key&&data==null?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No item with key "${key}" in Global Config ${id}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,`global-config items ${idOrSlug}`)}]},1),output_manager_default.error(`No item with key "${key}" in Global Config ${id}.`),1):asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
108
- `),0):(output_manager_default.log(JSON.stringify(data,null,2)),0)}var import_chalk39=__toESM(require_source(),1);var GlobalConfigTokensTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionAdd(value){value&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliOptionRemove(values){values?.length&&this.trackCliOption({option:"remove",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function tokensCmd(client,argv){let telemetry=new GlobalConfigTokensTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(tokensSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,addLabel=flags["--add"],removeValues=flags["--remove"],removeCount=removeValues?.length??0,skipConfirmation=flags["--yes"]===!0;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionAdd(addLabel),telemetry.trackCliOptionRemove(removeValues),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config tokens <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk39.default.cyan(getCommandName("global-config tokens <id-or-slug>"))}`),2;if(addLabel&&removeCount>0)return output_manager_default.error("Use either `--add` or `--remove`, not both."),2;removeCount>0&&client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Revoking Global Config tokens requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let base=`/v1/global-config/${encodeURIComponent(id)}`;try{if(addLabel){let created=await client.fetch(`${base}/token`,{method:"POST",body:{label:addLabel}});return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
109
- `),0):(output_manager_default.success("Token created."),output_manager_default.print(`${import_chalk39.default.bold("Token")} (copy now; it will not be shown again):
126
+ `).replace(/\\t/g," ");if(normalized===trimmed)throw firstError;try{return JSON.parse(normalized)}catch{throw firstError}}}function parsePatchBody(raw){let parsed=parsePatchJson(raw);if(Array.isArray(parsed))return{items:parsed};if(typeof parsed=="object"&&parsed!==null&&"items"in parsed&&Array.isArray(parsed.items))return{items:parsed.items};throw new Error('`--patch` must be a JSON array of item operations or an object `{ "items": [...] }`.')}async function updateCmd(client,argv){let telemetry=new GlobalConfigUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(updateSubcommand2.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionSlug(flags["--slug"]),telemetry.trackCliOptionPatch(flags["--patch"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Provide `--slug` and/or `--patch`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk37.default.cyan(getCommandName("global-config update <id-or-slug>"))}`),2;let newSlug=flags["--slug"],patchRaw=flags["--patch"];if(!newSlug&&!patchRaw)return output_manager_default.error("Provide `--slug` to rename the store and/or `--patch` to update items."),1;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let parsedPatchBody;if(patchRaw)try{parsedPatchBody=parsePatchBody(String(patchRaw))}catch(e){return output_manager_default.error(e instanceof Error?e.message:String(e)),1}let lastPayload;try{newSlug&&(lastPayload=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}`,{method:"PUT",body:{slug:newSlug}})),parsedPatchBody&&(lastPayload=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}/items`,{method:"PATCH",body:parsedPatchBody}))}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(lastPayload,null,2)}
127
+ `),0):(output_manager_default.success("Global Config updated."),0)}var import_chalk38=__toESM(require_source(),1);var GlobalConfigRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function removeCmd(client,argv){let telemetry=new GlobalConfigRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(removeSubcommand4.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,skipConfirmation=flags["--yes"]===!0;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config delete <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk38.default.cyan(getCommandName("global-config delete <id-or-slug>"))}`),2;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Deleting a Global Config requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;if(!skipConfirmation&&!await client.input.confirm(`Delete Global Config ${import_chalk38.default.bold(id)} (${import_chalk38.default.bold(idOrSlug)})?`,!1))return output_manager_default.log("Canceled"),0;try{await client.fetch(`/v1/global-config/${encodeURIComponent(id)}`,{method:"DELETE"})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify({status:"ok",id,message:`Global Config ${id} deleted.`},null,2)}
128
+ `),0):(output_manager_default.success(`Global Config ${import_chalk38.default.bold(id)} deleted.`),0)}var import_chalk39=__toESM(require_source(),1);var GlobalConfigItemsTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionKey(value){value&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function itemsCmd(client,argv){let telemetry=new GlobalConfigItemsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(itemsSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,key=flags["--key"];if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionKey(key),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config items <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk39.default.cyan(getCommandName("global-config items <id-or-slug>"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let data;try{if(key){let path3=`/v1/global-config/${encodeURIComponent(id)}/item/${encodeURIComponent(key)}`;data=await client.fetch(path3)}else data=await client.fetch(`/v1/global-config/${encodeURIComponent(id)}/items`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}return key&&data==null?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No item with key "${key}" in Global Config ${id}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,`global-config items ${idOrSlug}`)}]},1),output_manager_default.error(`No item with key "${key}" in Global Config ${id}.`),1):asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
129
+ `),0):(output_manager_default.log(JSON.stringify(data,null,2)),0)}var import_chalk40=__toESM(require_source(),1);var GlobalConfigTokensTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionAdd(value){value&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliOptionRemove(values){values?.length&&this.trackCliOption({option:"remove",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function tokensCmd(client,argv){let telemetry=new GlobalConfigTokensTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(tokensSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,addLabel=flags["--add"],removeValues=flags["--remove"],removeCount=removeValues?.length??0,skipConfirmation=flags["--yes"]===!0;if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionAdd(addLabel),telemetry.trackCliOptionRemove(removeValues),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config tokens <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2),output_manager_default.error(`Missing id or slug. Usage: ${import_chalk40.default.cyan(getCommandName("global-config tokens <id-or-slug>"))}`),2;if(addLabel&&removeCount>0)return output_manager_default.error("Use either `--add` or `--remove`, not both."),2;removeCount>0&&client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Revoking Global Config tokens requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let base=`/v1/global-config/${encodeURIComponent(id)}`;try{if(addLabel){let created=await client.fetch(`${base}/token`,{method:"POST",body:{label:addLabel}});return asJson?(client.stdout.write(`${JSON.stringify(created,null,2)}
130
+ `),0):(output_manager_default.success("Token created."),output_manager_default.print(`${import_chalk40.default.bold("Token")} (copy now; it will not be shown again):
110
131
  ${created.token}
111
- `),output_manager_default.print(`${(0,import_chalk39.gray)(`id: ${created.id}`)}
112
- `),0)}if(removeValues?.length){if(!skipConfirmation&&!await client.input.confirm(`Revoke ${removeValues.length} token(s) on ${import_chalk39.default.bold(id)}?`,!1))return output_manager_default.log("Canceled"),0;let rows2=await client.fetch(`${base}/tokens`),knownIds=new Set(rows2.map(r=>r.id).filter(v=>!!v)),ids=[],tokens=[];for(let value of removeValues)knownIds.has(value)?ids.push(value):tokens.push(value);let body={};return tokens.length&&(body.tokens=tokens),ids.length&&(body.ids=ids),await client.fetch(`${base}/tokens`,{method:"DELETE",body}),asJson?(client.stdout.write(`${JSON.stringify({status:"ok",revoked:removeValues.length},null,2)}
132
+ `),output_manager_default.print(`${(0,import_chalk40.gray)(`id: ${created.id}`)}
133
+ `),0)}if(removeValues?.length){if(!skipConfirmation&&!await client.input.confirm(`Revoke ${removeValues.length} token(s) on ${import_chalk40.default.bold(id)}?`,!1))return output_manager_default.log("Canceled"),0;let rows2=await client.fetch(`${base}/tokens`),knownIds=new Set(rows2.map(r=>r.id).filter(v=>!!v)),ids=[],tokens=[];for(let value of removeValues)knownIds.has(value)?ids.push(value):tokens.push(value);let body={};return tokens.length&&(body.tokens=tokens),ids.length&&(body.ids=ids),await client.fetch(`${base}/tokens`,{method:"DELETE",body}),asJson?(client.stdout.write(`${JSON.stringify({status:"ok",revoked:removeValues.length},null,2)}
113
134
  `),0):(output_manager_default.success(`Revoked ${removeValues.length} token(s).`),0)}let rows=await client.fetch(`${base}/tokens`);if(asJson){let sanitized=rows.map(row=>({id:row.id,label:row.label,partialToken:row.partialToken,createdAt:row.createdAt}));return client.stdout.write(`${JSON.stringify(sanitized,null,2)}
114
- `),0}if(!rows.length)return output_manager_default.log("No tokens."),0;let tableRows=[["id","label","value","created"].map(h=>(0,import_chalk39.gray)(h)),...rows.map(t=>[t.id??"",t.label??"",t.partialToken??"",t.createdAt!=null?new Date(t.createdAt).toISOString():""])];return client.stderr.write(`${table(tableRows,{hsep:2})}
115
- `),0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}var import_chalk40=__toESM(require_source(),1);import{URLSearchParams as URLSearchParams3}from"url";var GlobalConfigBackupsTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionBackupVersion(value){value&&this.trackCliOption({option:"backup-version",value})}trackCliOptionRestore(value){value&&this.trackCliOption({option:"restore",value})}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:String(value)})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function backupsCmd(client,argv){let telemetry=new GlobalConfigBackupsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(backupsSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,backupVersion=flags["--backup-version"],restoreVersion=flags["--restore"],skipConfirmation=flags["--yes"]===!0,limit=flags["--limit"],next=flags["--next"];if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionBackupVersion(backupVersion),telemetry.trackCliOptionRestore(restoreVersion),telemetry.trackCliOptionLimit(limit),telemetry.trackCliOptionNext(next),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug){client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config backups <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2);let usage=getCommandName("global-config backups <id-or-slug>");return output_manager_default.error(`Missing id or slug. Usage: ${import_chalk40.default.cyan(usage)}`),2}if(backupVersion&&restoreVersion)return output_manager_default.error("Use either `--backup-version` or `--restore`, not both."),2;if(limit!==void 0&&(!Number.isFinite(limit)||limit<0||limit>50))return output_manager_default.error("The `--limit` value must be between 0 and 50."),2;restoreVersion&&client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Restoring a Global Config backup requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let base=`/v1/global-config/${encodeURIComponent(id)}/backups`;try{if(restoreVersion){if(!skipConfirmation&&!await client.input.confirm(`Restore Global Config ${import_chalk40.default.bold(id)} from backup ${import_chalk40.default.bold(restoreVersion)}? This updates live items immediately.`,!1))return output_manager_default.log("Canceled"),0;let restored=await client.fetch(`${base}/${encodeURIComponent(restoreVersion)}/restore`,{method:"POST"});return asJson?(client.stdout.write(`${JSON.stringify(restored,null,2)}
116
- `),0):(output_manager_default.success(`Restored Global Config ${import_chalk40.default.bold(id)} from backup ${import_chalk40.default.bold(restoreVersion)}.`),output_manager_default.print(`${(0,import_chalk40.gray)(`digest: ${restored.digest}`)}
135
+ `),0}if(!rows.length)return output_manager_default.log("No tokens."),0;let tableRows=[["id","label","value","created"].map(h=>(0,import_chalk40.gray)(h)),...rows.map(t=>[t.id??"",t.label??"",t.partialToken??"",t.createdAt!=null?new Date(t.createdAt).toISOString():""])];return client.stderr.write(`${table(tableRows,{hsep:2})}
136
+ `),0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}var import_chalk41=__toESM(require_source(),1);import{URLSearchParams as URLSearchParams3}from"url";var GlobalConfigBackupsTelemetryClient=class extends TelemetryClient{trackCliArgumentIdOrSlug(value){this.trackCliArgument({arg:"id-or-slug",value})}trackCliOptionBackupVersion(value){value&&this.trackCliOption({option:"backup-version",value})}trackCliOptionRestore(value){value&&this.trackCliOption({option:"restore",value})}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:String(value)})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function backupsCmd(client,argv){let telemetry=new GlobalConfigBackupsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(backupsSubcommand.options))}catch(error){return client.nonInteractive&&exitWithNonInteractiveError(client,error,2,{variant:"global-config"}),printError(error),2}let{args,flags}=parsedArgs,[idOrSlug]=args,backupVersion=flags["--backup-version"],restoreVersion=flags["--restore"],skipConfirmation=flags["--yes"]===!0,limit=flags["--limit"],next=flags["--next"];if(telemetry.trackCliArgumentIdOrSlug(idOrSlug),telemetry.trackCliOptionBackupVersion(backupVersion),telemetry.trackCliOptionRestore(restoreVersion),telemetry.trackCliOptionLimit(limit),telemetry.trackCliOptionNext(next),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),!idOrSlug){client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Global Config id or slug is required. Usage: `vercel global-config backups <id-or-slug>`",next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},2);let usage=getCommandName("global-config backups <id-or-slug>");return output_manager_default.error(`Missing id or slug. Usage: ${import_chalk41.default.cyan(usage)}`),2}if(backupVersion&&restoreVersion)return output_manager_default.error("Use either `--backup-version` or `--restore`, not both."),2;if(limit!==void 0&&(!Number.isFinite(limit)||limit<0||limit>50))return output_manager_default.error("The `--limit` value must be between 0 and 50."),2;restoreVersion&&client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Restoring a Global Config backup requires confirmation. Re-run with `--yes`.",next:[{command:buildCommandWithYes(client.argv)}]},1);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,id;try{id=await resolveGlobalConfigId(client,idOrSlug)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}if(!id)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"not_found",message:`No Global Config matches "${idOrSlug}" in the current team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"global-config list")}]},1),output_manager_default.error(`No Global Config matches "${idOrSlug}" in the current team.`),1;let base=`/v1/global-config/${encodeURIComponent(id)}/backups`;try{if(restoreVersion){if(!skipConfirmation&&!await client.input.confirm(`Restore Global Config ${import_chalk41.default.bold(id)} from backup ${import_chalk41.default.bold(restoreVersion)}? This updates live items immediately.`,!1))return output_manager_default.log("Canceled"),0;let restored=await client.fetch(`${base}/${encodeURIComponent(restoreVersion)}/restore`,{method:"POST"});return asJson?(client.stdout.write(`${JSON.stringify(restored,null,2)}
137
+ `),0):(output_manager_default.success(`Restored Global Config ${import_chalk41.default.bold(id)} from backup ${import_chalk41.default.bold(restoreVersion)}.`),output_manager_default.print(`${(0,import_chalk41.gray)(`digest: ${restored.digest}`)}
117
138
  `),0)}if(backupVersion){let backup=await client.fetch(`${base}/${encodeURIComponent(backupVersion)}`);return asJson?(client.stdout.write(`${JSON.stringify(backup,null,2)}
118
139
  `),0):(output_manager_default.log(JSON.stringify(backup,null,2)),0)}let query=new URLSearchParams3;limit!==void 0&&query.set("limit",String(limit)),next&&query.set("next",next),query.set("metadata","true");let queryString=query.toString(),suffix=queryString?`?${queryString}`:"",response=await client.fetch(`${base}${suffix}`);if(asJson)return client.stdout.write(`${JSON.stringify(response,null,2)}
119
- `),0;if(!response.backups.length)return output_manager_default.log("No backups."),0;let tableRows=[["id","last modified","items","bytes"].map(h=>(0,import_chalk40.gray)(h)),...response.backups.map(backup=>[backup.id,formatDate2(backup.lastModified),formatNumber(backup.metadata?.itemsCount),formatNumber(backup.metadata?.itemsBytes)])];if(client.stderr.write(`${table(tableRows,{hsep:2})}
140
+ `),0;if(!response.backups.length)return output_manager_default.log("No backups."),0;let tableRows=[["id","last modified","items","bytes"].map(h=>(0,import_chalk41.gray)(h)),...response.backups.map(backup=>[backup.id,formatDate3(backup.lastModified),formatNumber(backup.metadata?.itemsCount),formatNumber(backup.metadata?.itemsBytes)])];if(client.stderr.write(`${table(tableRows,{hsep:2})}
120
141
  `),response.pagination?.hasNext&&response.pagination.next){let commandFlags=getCommandFlags(flags,["--format","--next","--restore","--yes"]);output_manager_default.print(`
121
- `),printNextPageCommand(getCommandNamePlain(`global-config backups ${idOrSlug}${commandFlags} --next ${response.pagination.next}`))}return 0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}function formatDate2(value){if(value===void 0)return"";let timestamp=typeof value=="number"?value:Date.parse(value);return Number.isFinite(timestamp)?new Date(timestamp).toISOString():String(value)}function formatNumber(value){return value===void 0?"":String(value)}var GlobalConfigTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandItems(actual){this.trackCliSubcommand({subcommand:"items",value:actual})}trackCliSubcommandTokens(actual){this.trackCliSubcommand({subcommand:"tokens",value:actual})}trackCliSubcommandBackups(actual){this.trackCliSubcommand({subcommand:"backups",value:actual})}};async function applyLinkedProjectTeam(client){let link=await getLinkedProject(client);if(link.status==="error")return link.exitCode;link.status==="linked"&&(client.config.currentTeam=link.org.type==="team"?link.org.id:void 0)}var COMMAND_CONFIG8={list:["list","ls"],add:["add","create"],inspect:["inspect","get"],update:["update"],delete:["delete","rm","del","remove"],items:["items"],tokens:["tokens"],backups:["backups"]};async function main4(client){let parsedArgs,flagsSpecification=getFlagsSpecification(globalConfigCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}parsedArgs.args[0]==="edge-config"&&warnDeprecatedSubcommand(client,"edge-config","global-config");let telemetry=new GlobalConfigTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("global-config"),output_manager_default.print(help(globalConfigCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:globalConfigCommand,columns:client.stderr.columns})),0}if(!needHelp){let linkExitCode=await applyLinkedProjectTeam(client);if(linkExitCode!==void 0)return linkExitCode}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(addSubcommand3)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"global-config add","global-config create"),addCmd(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(getSubcommand)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"global-config get","global-config inspect"),getCmd(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(updateSubcommand2)):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),updateCmd(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(removeSubcommand4)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"global-config remove","global-config delete"),removeCmd(client,args));case"items":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(itemsSubcommand)):(telemetry.trackCliSubcommandItems(subcommandOriginal),itemsCmd(client,args));case"tokens":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(tokensSubcommand)):(telemetry.trackCliSubcommandTokens(subcommandOriginal),tokensCmd(client,args));case"backups":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(backupsSubcommand)):(telemetry.trackCliSubcommandBackups(subcommandOriginal),backupsCmd(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(listSubcommand5)):(telemetry.trackCliSubcommandList(subcommandOriginal),listCmd(client,args))}}var import_tar_fs=__toESM(require_tar_fs(),1),import_chalk41=__toESM(require_source(),1);import fs from"node:fs";import path2 from"node:path";var EXAMPLE_API="https://examples.vercel.sh";async function init(client,opts,args,telemetry){let[name,dir]=args,force=opts["--force"],examples=await fetchExampleList(client);if(!examples)throw new Error("Could not fetch example list.");let exampleList=examples.filter(x=>x.visible).map(x=>x.name);if(!name){if(client.stdin.isTTY!==!0)return output_manager_default.print("No framework provided"),0;let chosen=await chooseFromDropdown(client,"Select example:",exampleList);return chosen?extractExample(client,chosen,dir,force):(output_manager_default.log("Canceled"),0)}if(exampleList.includes(name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force);if(examples.find(x=>!x.visible&&x.name===name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force,"v1");telemetry.trackCliArgumentExample(name,!1);let found=await guess(client,exampleList,name);return typeof found=="string"?extractExample(client,found,dir,force):(output_manager_default.log("No changes made."),0)}async function fetchExampleList(client){output_manager_default.spinner("Fetching examples");let url=`${EXAMPLE_API}/v2/list.json`,body=await client.fetch(url,{teamOptional:!0});return output_manager_default.stopSpinner(),body}async function chooseFromDropdown(client,message,exampleList){let choices=exampleList.map(name=>({name,value:name,short:name}));return list(client,{message,choices})}async function extractExample(client,name,dir,force,ver="v2"){let folder=prepareFolder(client.cwd,dir||name,force);output_manager_default.spinner(`Fetching ${name}`);let url=`${EXAMPLE_API}/${ver}/download/${name}.tar.gz`;return client.fetch(url,{json:!1,teamOptional:!0}).then(async res=>{if(output_manager_default.stopSpinner(),res.status!==200)throw new Error(`Could not get ${name}.tar.gz`);await new Promise((resolve4,reject)=>{let extractor=import_tar_fs.default.extract(folder,{ignore:(_name,header)=>header?.type!=="file"&&header?.type!=="directory"}),body=toNodeReadable(res.body);body.on("error",reject),extractor.on("error",reject),extractor.on("finish",resolve4),body.pipe(extractor)});let successLog=`Initialized "${import_chalk41.default.bold(name)}" example in ${import_chalk41.default.bold(humanizePath(folder))}.`,folderRel=path2.relative(client.cwd,folder),deployHint=folderRel===""?list_item_default(`To deploy, run ${getCommandName()}.`):list_item_default(`To deploy, ${cmd(`cd ${folderRel}`)} and run ${getCommandName()}.`);return output_manager_default.success(`${successLog}
122
- ${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}function prepareFolder(cwd,folder,force){let dest=path2.join(cwd,folder);if(fs.existsSync(dest)){if(!fs.lstatSync(dest).isDirectory())throw new Error(`Destination path "${import_chalk41.default.bold(folder)}" already exists and is not a directory.`);if(!force&&fs.readdirSync(dest).length!==0)throw new Error(`Destination path "${import_chalk41.default.bold(folder)}" already exists and is not an empty directory. You may use ${cmd("--force")} or ${cmd("-f")} to override it.`)}else if(dest!==cwd)try{fs.mkdirSync(dest)}catch{throw new Error(`Could not create directory "${import_chalk41.default.bold(folder)}".`)}return dest}async function guess(client,exampleList,name){let GuessError=new Error(`No example found for ${import_chalk41.default.bold(name)}, run ${getCommandName("init")} to see the list of available examples.`);if(client.stdin.isTTY!==!0)throw GuessError;let found=did_you_mean_default(name,exampleList,.7);if(typeof found=="string"){if(await client.input.confirm(`Did you mean ${import_chalk41.default.bold(found)}?`,!1))return found}else throw GuessError}var import_error_utils5=__toESM(require_dist(),1);var InitTelemetryClient=class extends TelemetryClient{trackCliArgumentExample(v,knownValue){v&&this.trackCliArgument({arg:"example",value:knownValue?v:this.redactedValue})}trackCliArgumentDir(v){v&&this.trackCliArgument({arg:"dir",value:this.redactedValue})}trackCliFlagForce(v){v&&this.trackCliFlag("force")}};var COMMAND_CONFIG9={init:["init"]};async function main5(client){let parsedArgs,flagsSpecification=getFlagsSpecification(initCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new InitTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("init"),output_manager_default.print(help(initCommand,{stream:client.stderr,columns:client.stderr.columns})),0;let args=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG9).args;if(parsedArgs.args.length>3)return output_manager_default.error("Too many arguments."),2;telemetry.trackCliArgumentDir(parsedArgs.args[2]),telemetry.trackCliFlagForce(parsedArgs.flags["--force"]);try{return await init(client,parsedArgs.flags,args,telemetry)}catch(err){return output_manager_default.prettyError(err),(0,import_error_utils5.isError)(err)&&typeof err.stack=="string"&&output_manager_default.debug(err.stack),1}}var import_chalk42=__toESM(require_source(),1);var idSchema=external_exports.string().max(256).regex(/^[a-zA-Z0-9_-]+$/),slugSchema=external_exports.string().min(1).max(48).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/),nameSchema=external_exports.string().min(1).max(256).refine(value=>value.trim().length>0&&!/[\x00-\x1f\x7f]/.test(value)),billingPlanSchema=external_exports.enum(["platform","enterprise"]),ORGANIZATION_ID_PREFIX="org_",TEAM_ID_PREFIX="team_";function isPrefixedId(value,prefix){return value.startsWith(prefix)&&value.length>prefix.length&&idSchema.safeParse(value).success}var SLUG_MESSAGE="Provide --slug with 1-48 lowercase letters, numbers, or hyphens, beginning and ending with a letter or number.",NAME_MESSAGE="Provide --name with 1-256 characters and no control characters.",PLAN_MESSAGE="Use --billing-plan platform or --billing-plan enterprise.";function organizationsSuggestion(subcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${subcommand} ${globalFlags.join(" ")}`:subcommand;return getCommandNamePlain(full)}function missingArgument(client,options){let next=[];return options.suggestList&&next.push({command:organizationsSuggestion("organizations list",client.argv),when:"List organizations to find an ID"}),next.push({command:organizationsSuggestion(options.usage,client.argv)}),outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,action:AGENT_ACTION.MISSING_ARGUMENTS,reason:options.reason,message:options.message,next}),output_manager_default.error(options.message),output_manager_default.log(`Usage: ${import_chalk42.default.cyan(getCommandName(options.usage))}`),getExitCodeForReason(options.reason)}function invalidArgument(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),2}function invalidArgumentCount(client,usage){let message=`Too many arguments. Usage: ${getCommandNamePlain(usage)}`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk42.default.cyan(getCommandName(usage))}`),2}function validate(client,schema,value,options){if(value===void 0)return{status:"error",exitCode:missingArgument(client,{...options,reason:AGENT_REASON.MISSING_ARGUMENTS})};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,options.message)}}function validateOptional(client,schema,value,message){if(value===void 0)return{status:"ok",value:void 0};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,message)}}function outputFormat(client,flags){let format=validateJsonOutput(flags);return format.valid?{status:"ok",value:format.jsonOutput}:{status:"error",exitCode:invalidArgument(client,format.error)}}function noArguments(client,args,usage){return args.length?{status:"error",exitCode:invalidArgumentCount(client,usage)}:{status:"ok",value:void 0}}function unknownCommand(client,group,segment){let path3=getCommandNamePlain(group),message=segment?`Unknown command ${segment} for ${path3}.`:`Missing command for ${path3}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:segment?"unknown_command":"missing_command",message,next:[{command:`${path3} --help`,when:"See all commands"}]}),output_manager_default.error(message),output_manager_default.log(`
142
+ `),printNextPageCommand(getCommandNamePlain(`global-config backups ${idOrSlug}${commandFlags} --next ${response.pagination.next}`))}return 0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"global-config"}),printError(err),1}}function formatDate3(value){if(value===void 0)return"";let timestamp=typeof value=="number"?value:Date.parse(value);return Number.isFinite(timestamp)?new Date(timestamp).toISOString():String(value)}function formatNumber(value){return value===void 0?"":String(value)}var GlobalConfigTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandItems(actual){this.trackCliSubcommand({subcommand:"items",value:actual})}trackCliSubcommandTokens(actual){this.trackCliSubcommand({subcommand:"tokens",value:actual})}trackCliSubcommandBackups(actual){this.trackCliSubcommand({subcommand:"backups",value:actual})}};async function applyLinkedProjectTeam(client){let link2=await getLinkedProject(client);if(link2.status==="error")return link2.exitCode;link2.status==="linked"&&(client.config.currentTeam=link2.org.type==="team"?link2.org.id:void 0)}var COMMAND_CONFIG8={list:["list","ls"],add:["add","create"],inspect:["inspect","get"],update:["update"],delete:["delete","rm","del","remove"],items:["items"],tokens:["tokens"],backups:["backups"]};async function main4(client){let parsedArgs,flagsSpecification=getFlagsSpecification(globalConfigCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}parsedArgs.args[0]==="edge-config"&&warnDeprecatedSubcommand(client,"edge-config","global-config");let telemetry=new GlobalConfigTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("global-config"),output_manager_default.print(help(globalConfigCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:globalConfigCommand,columns:client.stderr.columns})),0}if(!needHelp){let linkExitCode=await applyLinkedProjectTeam(client);if(linkExitCode!==void 0)return linkExitCode}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(addSubcommand3)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"global-config add","global-config create"),addCmd(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(getSubcommand)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"global-config get","global-config inspect"),getCmd(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(updateSubcommand2)):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),updateCmd(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(removeSubcommand4)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"global-config remove","global-config delete"),removeCmd(client,args));case"items":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(itemsSubcommand)):(telemetry.trackCliSubcommandItems(subcommandOriginal),itemsCmd(client,args));case"tokens":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(tokensSubcommand)):(telemetry.trackCliSubcommandTokens(subcommandOriginal),tokensCmd(client,args));case"backups":return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(backupsSubcommand)):(telemetry.trackCliSubcommandBackups(subcommandOriginal),backupsCmd(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("global-config",subcommandOriginal),printHelp(listSubcommand5)):(telemetry.trackCliSubcommandList(subcommandOriginal),listCmd(client,args))}}var import_tar_fs=__toESM(require_tar_fs(),1),import_chalk42=__toESM(require_source(),1);import fs from"node:fs";import path2 from"node:path";var EXAMPLE_API="https://examples.vercel.sh";async function init(client,opts,args,telemetry){let[name,dir]=args,force=opts["--force"],examples=await fetchExampleList(client);if(!examples)throw new Error("Could not fetch example list.");let exampleList=examples.filter(x=>x.visible).map(x=>x.name);if(!name){if(client.stdin.isTTY!==!0)return output_manager_default.print("No framework provided"),0;let chosen=await chooseFromDropdown(client,"Select example:",exampleList);return chosen?extractExample(client,chosen,dir,force):(output_manager_default.log("Canceled"),0)}if(exampleList.includes(name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force);if(examples.find(x=>!x.visible&&x.name===name))return telemetry.trackCliArgumentExample(name,!0),extractExample(client,name,dir,force,"v1");telemetry.trackCliArgumentExample(name,!1);let found=await guess(client,exampleList,name);return typeof found=="string"?extractExample(client,found,dir,force):(output_manager_default.log("No changes made."),0)}async function fetchExampleList(client){output_manager_default.spinner("Fetching examples");let url=`${EXAMPLE_API}/v2/list.json`,body=await client.fetch(url,{teamOptional:!0});return output_manager_default.stopSpinner(),body}async function chooseFromDropdown(client,message,exampleList){let choices=exampleList.map(name=>({name,value:name,short:name}));return list(client,{message,choices})}async function extractExample(client,name,dir,force,ver="v2"){let folder=prepareFolder(client.cwd,dir||name,force);output_manager_default.spinner(`Fetching ${name}`);let url=`${EXAMPLE_API}/${ver}/download/${name}.tar.gz`;return client.fetch(url,{json:!1,teamOptional:!0}).then(async res=>{if(output_manager_default.stopSpinner(),res.status!==200)throw new Error(`Could not get ${name}.tar.gz`);await new Promise((resolve5,reject)=>{let extractor=import_tar_fs.default.extract(folder,{ignore:(_name,header)=>header?.type!=="file"&&header?.type!=="directory"}),body=toNodeReadable(res.body);body.on("error",reject),extractor.on("error",reject),extractor.on("finish",resolve5),body.pipe(extractor)});let successLog=`Initialized "${import_chalk42.default.bold(name)}" example in ${import_chalk42.default.bold(humanizePath(folder))}.`,folderRel=path2.relative(client.cwd,folder),deployHint=folderRel===""?list_item_default(`To deploy, run ${getCommandName()}.`):list_item_default(`To deploy, ${cmd(`cd ${folderRel}`)} and run ${getCommandName()}.`);return output_manager_default.success(`${successLog}
143
+ ${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}function prepareFolder(cwd,folder,force){let dest=path2.join(cwd,folder);if(fs.existsSync(dest)){if(!fs.lstatSync(dest).isDirectory())throw new Error(`Destination path "${import_chalk42.default.bold(folder)}" already exists and is not a directory.`);if(!force&&fs.readdirSync(dest).length!==0)throw new Error(`Destination path "${import_chalk42.default.bold(folder)}" already exists and is not an empty directory. You may use ${cmd("--force")} or ${cmd("-f")} to override it.`)}else if(dest!==cwd)try{fs.mkdirSync(dest)}catch{throw new Error(`Could not create directory "${import_chalk42.default.bold(folder)}".`)}return dest}async function guess(client,exampleList,name){let GuessError=new Error(`No example found for ${import_chalk42.default.bold(name)}, run ${getCommandName("init")} to see the list of available examples.`);if(client.stdin.isTTY!==!0)throw GuessError;let found=did_you_mean_default(name,exampleList,.7);if(typeof found=="string"){if(await client.input.confirm(`Did you mean ${import_chalk42.default.bold(found)}?`,!1))return found}else throw GuessError}var import_error_utils7=__toESM(require_dist(),1);var InitTelemetryClient=class extends TelemetryClient{trackCliArgumentExample(v,knownValue){v&&this.trackCliArgument({arg:"example",value:knownValue?v:this.redactedValue})}trackCliArgumentDir(v){v&&this.trackCliArgument({arg:"dir",value:this.redactedValue})}trackCliFlagForce(v){v&&this.trackCliFlag("force")}};var COMMAND_CONFIG9={init:["init"]};async function main5(client){let parsedArgs,flagsSpecification=getFlagsSpecification(initCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new InitTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("init"),output_manager_default.print(help(initCommand,{stream:client.stderr,columns:client.stderr.columns})),0;let args=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG9).args;if(parsedArgs.args.length>3)return output_manager_default.error("Too many arguments."),2;telemetry.trackCliArgumentDir(parsedArgs.args[2]),telemetry.trackCliFlagForce(parsedArgs.flags["--force"]);try{return await init(client,parsedArgs.flags,args,telemetry)}catch(err){return output_manager_default.prettyError(err),(0,import_error_utils7.isError)(err)&&typeof err.stack=="string"&&output_manager_default.debug(err.stack),1}}var import_chalk43=__toESM(require_source(),1);var idSchema=external_exports.string().max(256).regex(/^[a-zA-Z0-9_-]+$/),slugSchema=external_exports.string().min(1).max(48).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/),nameSchema=external_exports.string().min(1).max(256).refine(value=>value.trim().length>0&&!/[\x00-\x1f\x7f]/.test(value)),billingPlanSchema=external_exports.enum(["platform","enterprise"]),ORGANIZATION_ID_PREFIX="org_",TEAM_ID_PREFIX="team_";function isPrefixedId(value,prefix){return value.startsWith(prefix)&&value.length>prefix.length&&idSchema.safeParse(value).success}var SLUG_MESSAGE="Provide --slug with 1-48 lowercase letters, numbers, or hyphens, beginning and ending with a letter or number.",NAME_MESSAGE="Provide --name with 1-256 characters and no control characters.",PLAN_MESSAGE="Use --billing-plan platform or --billing-plan enterprise.";function organizationsSuggestion(subcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${subcommand} ${globalFlags.join(" ")}`:subcommand;return getCommandNamePlain(full)}function missingArgument(client,options){let next=[];return options.suggestList&&next.push({command:organizationsSuggestion("organizations list",client.argv),when:"List organizations to find an ID"}),next.push({command:organizationsSuggestion(options.usage,client.argv)}),outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,action:AGENT_ACTION.MISSING_ARGUMENTS,reason:options.reason,message:options.message,next}),output_manager_default.error(options.message),output_manager_default.log(`Usage: ${import_chalk43.default.cyan(getCommandName(options.usage))}`),getExitCodeForReason(options.reason)}function invalidArgument(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(message),2}function invalidArgumentCount(client,usage){let message=`Too many arguments. Usage: ${getCommandNamePlain(usage)}`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message}),output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk43.default.cyan(getCommandName(usage))}`),2}function validate(client,schema,value,options){if(value===void 0)return{status:"error",exitCode:missingArgument(client,{...options,reason:AGENT_REASON.MISSING_ARGUMENTS})};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,options.message)}}function validateOptional(client,schema,value,message){if(value===void 0)return{status:"ok",value:void 0};let parsed=schema.safeParse(value);return parsed.success?{status:"ok",value:parsed.data}:{status:"error",exitCode:invalidArgument(client,message)}}function outputFormat(client,flags){let format=validateJsonOutput(flags);return format.valid?{status:"ok",value:format.jsonOutput}:{status:"error",exitCode:invalidArgument(client,format.error)}}function noArguments(client,args,usage){return args.length?{status:"error",exitCode:invalidArgumentCount(client,usage)}:{status:"ok",value:void 0}}function unknownCommand(client,group,segment){let path3=getCommandNamePlain(group),message=segment?`Unknown command ${segment} for ${path3}.`:`Missing command for ${path3}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:segment?"unknown_command":"missing_command",message,next:[{command:`${path3} --help`,when:"See all commands"}]}),output_manager_default.error(message),output_manager_default.log(`
123
144
  See all commands:
124
- ${path3} --help`),2}function listWindow(client,flags){let limit;try{limit=parseListLimit(flags["--limit"])}catch(err){let message=err instanceof Error?err.message:String(err);return{status:"error",exitCode:invalidArgument(client,message)}}let next=flags["--next"];if(next===void 0)return{status:"ok",value:{limit,start:{offset:0}}};let start=decodeListCursor(next);return start?{status:"ok",value:{limit,start}}:{status:"error",exitCode:invalidArgument(client,"Provide --next with the cursor from the previous page.")}}var OrganizationsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandTeams(actual){this.trackCliSubcommand({subcommand:"teams",value:actual})}trackCliSubcommandTeamsAction(action,actual){this.trackCliSubcommand({subcommand:`teams:${action}`,value:actual})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliArgumentOrganizationId(id){id&&this.trackCliArgument({arg:"organization",value:this.redactedValue})}trackCliOptionSlug(slug){slug&&this.trackCliOption({option:"slug",value:this.redactedValue})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionChildTeam(team){team&&this.trackCliOption({option:"child-team",value:this.redactedValue})}trackCliOptionNext(cursor){cursor&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionBillingPlan(plan){plan&&this.trackCliOption({option:"billing-plan",value:plan==="platform"||plan==="enterprise"?plan:this.redactedValue})}};var OrganizationResponseError=class extends Error{};function handleOrganizationApiError(client,err,failed){if(!isAPIError(err)){output_manager_default.debug(`Organization request failed: ${err}`);let cause=err instanceof OrganizationResponseError?err.message:"";return report(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.${cause?` ${cause}`:""}`})}let remote=stripControlCharacters(err.serverMessage||"");if(err.status===404)return report(client,{reason:AGENT_REASON.NOT_FOUND,message:failed.notFound??`Couldn't ${failed.action}. It wasn't found.`});if(err.status===403)return report(client,{reason:AGENT_REASON.PERMISSION_DENIED,message:`You can't ${failed.action}.`,remote,action:err.action,resource:typeof err.resource=="string"?err.resource:void 0});let plan=typeof err.code=="string"&&PLAN_CAUSES[err.code];if(plan)return report(client,{reason:AGENT_REASON.PLAN_LIMIT,message:`Can't ${failed.action}. ${plan}.`,remote});if(err.status===409){let conflict=typeof err.code=="string"&&CONFLICT_CAUSES[err.code];return report(client,{reason:AGENT_REASON.CONFLICT,message:`Can't ${failed.action}. ${conflict||"It conflicts with the current state of the organization or team"}.`,remote})}return err.status===429?report(client,{reason:AGENT_REASON.RATE_LIMITED,message:"Too many requests to the Vercel API. Try again later."}):report(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.`,remote})}var CONFLICT_CAUSES={already_exists:"Another organization uses this slug",slug_conflict:"Another team uses this slug",team_already_in_organization:"The team already belongs to an organization",team_organization_transfer_in_progress:"The team is already moving to an organization"},PLAN_CAUSES={invalid_billing_plan:"The team's billing plan doesn't allow it",child_team_limit_reached:"The organization has reached its limit of enterprise child teams",team_already_enterprise:"An existing Enterprise team can't become an enterprise child team"};function stripControlCharacters(text){return text.replace(/[\u0000-\u001f\u007f-\u009f]/g," ").trim()}function report(client,failure){let payload={status:AGENT_STATUS.ERROR,reason:failure.reason,message:failure.message};return failure.remote&&(payload.data={remoteMessage:failure.remote}),failure.action&&(payload.action=failure.action),failure.resource&&(payload.resource=failure.resource),outputAgentError(client,payload,1),output_manager_default.error(failure.message),failure.remote&&output_manager_default.log(` Vercel API: ${failure.remote}`),1}var organizationSchema=external_exports.looseObject({organizationId:external_exports.string(),slug:external_exports.string(),name:external_exports.string().optional(),teamId:external_exports.string(),teamCount:external_exports.number(),createdAt:external_exports.string(),updatedAt:external_exports.string()}),teamSchema=external_exports.looseObject({organizationId:external_exports.string(),teamId:external_exports.string(),ssoMode:external_exports.string(),billingPlan:external_exports.string().optional(),createdAt:external_exports.string(),updatedAt:external_exports.string()}),teamsSchema=external_exports.object({teams:external_exports.array(teamSchema.extend({slug:external_exports.string(),name:external_exports.string().nullable(),avatar:external_exports.string().nullable()})),cursor:external_exports.string().nullable().optional()});async function request(client,path3,schema,options={}){let fetchOptions={...options,useCurrentTeam:!1};options.method&&options.method!=="GET"&&(fetchOptions.retry={retries:0},fetchOptions.bailOn429=!0);let data=await client.fetch(`/v1/organizations${path3}`,fetchOptions),result=schema.safeParse(data);if(!result.success){let paths=[...new Set(result.error.issues.map(issue2=>issue2.path.length?issue2.path.join("."):"<root>"))].slice(0,5);throw new OrganizationResponseError(`The Organizations API returned an invalid response at ${paths.join(", ")}.`)}return result.data}function listOrganizations(client){return request(client,"",external_exports.object({organizations:external_exports.array(organizationSchema)}))}function getOrganization(client,id){return request(client,`/${encodeURIComponent(id)}`,organizationSchema)}function createOrganization(client,rootTeamId,body){let query=new URLSearchParams({teamId:rootTeamId});return request(client,`?${query}`,organizationSchema,{method:"POST",body})}function updateOrganization(client,id,slug){return request(client,`/${encodeURIComponent(id)}`,organizationSchema,{method:"PATCH",body:{slug}})}function listOrganizationTeams(client,id,cursor){let query=cursor===void 0?"":`?${new URLSearchParams({cursor})}`;return request(client,`/${encodeURIComponent(id)}/teams${query}`,teamsSchema)}function addOrganizationTeam(client,id,body){return request(client,`/${encodeURIComponent(id)}/teams`,teamSchema,{method:"POST",body})}async function resolveOrganization(client,args,usage){if(args.length>1)return{status:"error",exitCode:invalidArgumentCount(client,usage)};let target=args[0];return target===void 0?fromCurrentScope(client,usage):target.startsWith(ORGANIZATION_ID_PREFIX)?isPrefixedId(target,ORGANIZATION_ID_PREFIX)?{status:"ok",value:target}:{status:"error",exitCode:invalidArgument(client,"Provide a valid organization ID.")}:slugSchema.safeParse(target).success?fromSlug(client,target):{status:"error",exitCode:invalidArgument(client,"Provide an organization ID or slug. A slug uses 1-48 lowercase letters, numbers, or hyphens.")}}async function fromSlug(client,slug){let organizations2;try{organizations2=await listOrganizations(client)}catch(err){return{status:"error",exitCode:handleOrganizationApiError(client,err,{action:`find organization ${slug}`})}}let match=organizations2.organizations.find(org=>org.slug===slug);return match?{status:"ok",value:match.organizationId}:{status:"error",exitCode:organizationNotFound(client,slug)}}async function fromCurrentScope(client,usage){let currentTeam=await resolveScopeTeam(client);if(!currentTeam)return{status:"error",exitCode:missingArgument(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide an organization ID or slug, or select an organization team with --scope.",usage,suggestList:!0})};let team;try{team=await getTeamByIdOrSlug(client,currentTeam,{useCurrentTeam:!1})}catch(err){return{status:"error",exitCode:handleOrganizationApiError(client,err,{action:`read team ${currentTeam}`,notFound:`Couldn't find team ${currentTeam}.`})}}return team.parentId?{status:"ok",value:team.parentId}:{status:"error",exitCode:invalidArgument(client,`Team ${team.slug} does not belong to an organization. Provide an organization ID or slug.`)}}async function resolveRootTeamId(client,usage){let currentTeam=await resolveScopeTeam(client);return currentTeam?{status:"ok",value:currentTeam}:{status:"error",exitCode:missingArgument(client,{reason:AGENT_REASON.MISSING_SCOPE,message:"Can't create an organization without a team. Select the root team with --scope.",usage:`--scope <team> ${usage}`})}}function resolveScopeTeam(client){return client.resolveCurrentTeam({ask:!1})}function organizationNotFound(client,slug){let message=`Couldn't find organization ${slug}.`,listCommand=getCommandNamePlain("organizations list");return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_FOUND,message,next:[{command:listCommand,when:"List your organizations"}]}),output_manager_default.error(message),output_manager_default.log(`
145
+ ${path3} --help`),2}function listWindow(client,flags){let limit;try{limit=parseListLimit(flags["--limit"])}catch(err){let message=err instanceof Error?err.message:String(err);return{status:"error",exitCode:invalidArgument(client,message)}}let next=flags["--next"];if(next===void 0)return{status:"ok",value:{limit,start:{offset:0}}};let start=decodeListCursor(next);return start?{status:"ok",value:{limit,start}}:{status:"error",exitCode:invalidArgument(client,"Provide --next with the cursor from the previous page.")}}var OrganizationsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandTeams(actual){this.trackCliSubcommand({subcommand:"teams",value:actual})}trackCliSubcommandTeamsAction(action,actual){this.trackCliSubcommand({subcommand:`teams:${action}`,value:actual})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliArgumentOrganizationId(id){id&&this.trackCliArgument({arg:"organization",value:this.redactedValue})}trackCliOptionSlug(slug){slug&&this.trackCliOption({option:"slug",value:this.redactedValue})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionChildTeam(team){team&&this.trackCliOption({option:"child-team",value:this.redactedValue})}trackCliOptionNext(cursor){cursor&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionBillingPlan(plan){plan&&this.trackCliOption({option:"billing-plan",value:plan==="platform"||plan==="enterprise"?plan:this.redactedValue})}};var OrganizationResponseError=class extends Error{};function handleOrganizationApiError(client,err,failed){if(!isAPIError(err)){output_manager_default.debug(`Organization request failed: ${err}`);let cause=err instanceof OrganizationResponseError?err.message:"";return report(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.${cause?` ${cause}`:""}`})}let remote=stripControlCharacters(err.serverMessage||"");if(err.status===404)return report(client,{reason:AGENT_REASON.NOT_FOUND,message:failed.notFound??`Couldn't ${failed.action}. It wasn't found.`});if(err.status===403)return report(client,{reason:AGENT_REASON.PERMISSION_DENIED,message:`You can't ${failed.action}.`,remote,action:err.action,resource:typeof err.resource=="string"?err.resource:void 0});let plan=typeof err.code=="string"&&PLAN_CAUSES[err.code];if(plan)return report(client,{reason:AGENT_REASON.PLAN_LIMIT,message:`Can't ${failed.action}. ${plan}.`,remote});if(err.status===409){let conflict=typeof err.code=="string"&&CONFLICT_CAUSES[err.code];return report(client,{reason:AGENT_REASON.CONFLICT,message:`Can't ${failed.action}. ${conflict||"It conflicts with the current state of the organization or team"}.`,remote})}return err.status===429?report(client,{reason:AGENT_REASON.RATE_LIMITED,message:"Too many requests to the Vercel API. Try again later."}):report(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.`,remote})}var CONFLICT_CAUSES={already_exists:"Another organization uses this slug",slug_conflict:"Another team uses this slug",team_already_in_organization:"The team already belongs to an organization",team_organization_transfer_in_progress:"The team is already moving to an organization"},PLAN_CAUSES={invalid_billing_plan:"The team's billing plan doesn't allow it",child_team_limit_reached:"The organization has reached its limit of enterprise child teams",team_already_enterprise:"An existing Enterprise team can't become an enterprise child team"};function stripControlCharacters(text){return text.replace(/[\u0000-\u001f\u007f-\u009f]/g," ").trim()}function report(client,failure2){let payload={status:AGENT_STATUS.ERROR,reason:failure2.reason,message:failure2.message};return failure2.remote&&(payload.data={remoteMessage:failure2.remote}),failure2.action&&(payload.action=failure2.action),failure2.resource&&(payload.resource=failure2.resource),outputAgentError(client,payload,1),output_manager_default.error(failure2.message),failure2.remote&&output_manager_default.log(` Vercel API: ${failure2.remote}`),1}var organizationSchema=external_exports.looseObject({organizationId:external_exports.string(),slug:external_exports.string(),name:external_exports.string().optional(),teamId:external_exports.string(),teamCount:external_exports.number(),createdAt:external_exports.string(),updatedAt:external_exports.string()}),teamSchema=external_exports.looseObject({organizationId:external_exports.string(),teamId:external_exports.string(),ssoMode:external_exports.string(),billingPlan:external_exports.string().optional(),createdAt:external_exports.string(),updatedAt:external_exports.string()}),teamsSchema=external_exports.object({teams:external_exports.array(teamSchema.extend({slug:external_exports.string(),name:external_exports.string().nullable(),avatar:external_exports.string().nullable()})),cursor:external_exports.string().nullable().optional()});async function request(client,path3,schema,options={}){let fetchOptions={...options,useCurrentTeam:!1};options.method&&options.method!=="GET"&&(fetchOptions.retry={retries:0},fetchOptions.bailOn429=!0);let data=await client.fetch(`/v1/organizations${path3}`,fetchOptions),result=schema.safeParse(data);if(!result.success){let paths=[...new Set(result.error.issues.map(issue2=>issue2.path.length?issue2.path.join("."):"<root>"))].slice(0,5);throw new OrganizationResponseError(`The Organizations API returned an invalid response at ${paths.join(", ")}.`)}return result.data}function listOrganizations(client){return request(client,"",external_exports.object({organizations:external_exports.array(organizationSchema)}))}function getOrganization(client,id){return request(client,`/${encodeURIComponent(id)}`,organizationSchema)}function createOrganization(client,rootTeamId,body){let query=new URLSearchParams({teamId:rootTeamId});return request(client,`?${query}`,organizationSchema,{method:"POST",body})}function updateOrganization(client,id,slug){return request(client,`/${encodeURIComponent(id)}`,organizationSchema,{method:"PATCH",body:{slug}})}function listOrganizationTeams(client,id,cursor){let query=cursor===void 0?"":`?${new URLSearchParams({cursor})}`;return request(client,`/${encodeURIComponent(id)}/teams${query}`,teamsSchema)}function addOrganizationTeam(client,id,body){return request(client,`/${encodeURIComponent(id)}/teams`,teamSchema,{method:"POST",body})}async function resolveOrganization(client,args,usage){if(args.length>1)return{status:"error",exitCode:invalidArgumentCount(client,usage)};let target=args[0];return target===void 0?fromCurrentScope(client,usage):target.startsWith(ORGANIZATION_ID_PREFIX)?isPrefixedId(target,ORGANIZATION_ID_PREFIX)?{status:"ok",value:target}:{status:"error",exitCode:invalidArgument(client,"Provide a valid organization ID.")}:slugSchema.safeParse(target).success?fromSlug(client,target):{status:"error",exitCode:invalidArgument(client,"Provide an organization ID or slug. A slug uses 1-48 lowercase letters, numbers, or hyphens.")}}async function fromSlug(client,slug){let organizations2;try{organizations2=await listOrganizations(client)}catch(err){return{status:"error",exitCode:handleOrganizationApiError(client,err,{action:`find organization ${slug}`})}}let match=organizations2.organizations.find(org=>org.slug===slug);return match?{status:"ok",value:match.organizationId}:{status:"error",exitCode:organizationNotFound(client,slug)}}async function fromCurrentScope(client,usage){let currentTeam=await resolveScopeTeam(client);if(!currentTeam)return{status:"error",exitCode:missingArgument(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide an organization ID or slug, or select an organization team with --scope.",usage,suggestList:!0})};let team;try{team=await getTeamByIdOrSlug(client,currentTeam,{useCurrentTeam:!1})}catch(err){return{status:"error",exitCode:handleOrganizationApiError(client,err,{action:`read team ${currentTeam}`,notFound:`Couldn't find team ${currentTeam}.`})}}return team.parentId?{status:"ok",value:team.parentId}:{status:"error",exitCode:invalidArgument(client,`Team ${team.slug} does not belong to an organization. Provide an organization ID or slug.`)}}async function resolveRootTeamId(client,usage){let currentTeam=await resolveScopeTeam(client);return currentTeam?{status:"ok",value:currentTeam}:{status:"error",exitCode:missingArgument(client,{reason:AGENT_REASON.MISSING_SCOPE,message:"Can't create an organization without a team. Select the root team with --scope.",usage:`--scope <team> ${usage}`})}}function resolveScopeTeam(client){return client.resolveCurrentTeam({ask:!1})}function organizationNotFound(client,slug){let message=`Couldn't find organization ${slug}.`,listCommand=getCommandNamePlain("organizations list");return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_FOUND,message,next:[{command:listCommand,when:"List your organizations"}]}),output_manager_default.error(message),output_manager_default.log(`
125
146
  List your organizations:
126
147
  ${listCommand}`),1}function printResult(client,jsonOutput,document,human){if(output_manager_default.stopSpinner(),jsonOutput){client.stdout.write(`${JSON.stringify(document,null,2)}
127
148
  `);return}human()}function printStdoutIdentifier(client,identifier){client.stdout.isTTY&&!shouldEmitNonInteractiveCommandError(client)||client.stdout.write(`${identifier}
@@ -129,7 +150,7 @@ ${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}fun
129
150
  `));return}rows.push(formatAlignedLabel("Created",organization.createdAt),formatAlignedLabel("Updated",organization.updatedAt)),client.stdout.write(`${rows.join(`
130
151
  `)}
131
152
  `)}function progress(jsonOutput,message){jsonOutput||output_manager_default.spinner(message)}var USAGE="organizations create --slug <slug>";async function create(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionSlug(opts["--slug"]),telemetry.trackCliOptionName(opts["--name"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let empty=noArguments(client,args,USAGE);if(empty.status==="error")return empty.exitCode;let slug=validate(client,slugSchema,opts["--slug"],{message:SLUG_MESSAGE,usage:USAGE});if(slug.status==="error")return slug.exitCode;let name=validateOptional(client,nameSchema,opts["--name"],NAME_MESSAGE);if(name.status==="error")return name.exitCode;let rootTeamId=await resolveRootTeamId(client,USAGE);if(rootTeamId.status==="error")return rootTeamId.exitCode;format.value||(printAlignedLabel("Root Team",rootTeamId.value),printAlignedLabel("Organization",slug.value)),progress(format.value,"Creating organization\u2026");let org;try{org=await createOrganization(client,rootTeamId.value,{slug:slug.value,name:name.value})}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`create organization ${slug.value}`,notFound:`Can't create an organization from team ${rootTeamId.value}. Organization creation isn't enabled for this team, or the team doesn't exist.`})}return printResult(client,format.value,{organization:org,outcome:"created"},()=>{printOrganization(client,org,{action:"Created"}),output_manager_default.print(` The root team's projects move to the organization in the background.
132
- `),printStdoutIdentifier(client,org.slug)}),0}var USAGE2="organizations inspect [organization]";async function inspect4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let id=await resolveOrganization(client,args,USAGE2);if(id.status==="error")return id.exitCode;progress(format.value,"Fetching organization\u2026");let org;try{org=await getOrganization(client,id.value)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`fetch organization ${id.value}`,notFound:`Couldn't find organization ${id.value}.`})}let rootTeamSlug;if(!format.value)try{rootTeamSlug=(await getTeamByIdOrSlug(client,org.teamId,{useCurrentTeam:!1})).slug}catch(err){output_manager_default.debug(`Root team lookup failed: ${err}`)}return printResult(client,format.value,{organization:org},()=>printOrganization(client,org,{rootTeamSlug})),0}var USAGE3="organizations list";async function list4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let empty=noArguments(client,args,USAGE3);if(empty.status==="error")return empty.exitCode;let window=listWindow(client,opts);if(window.status==="error")return window.exitCode;progress(format.value,"Fetching organizations\u2026");let result;try{result=await listOrganizations(client)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:"list organizations"})}let page=sliceList(result.organizations,window.value.start,window.value.limit);return page?(printResult(client,format.value,{organizations:page.items,pagination:{next:page.next}},()=>{if(!page.items.length){output_manager_default.log(opts["--next"]?"No more organizations.":"No organizations.");return}client.stdout.write(`${table([["ID","Slug","Root Team","Teams"],...page.items.map(org=>[org.organizationId,org.slug,org.teamId,String(org.teamCount)])],{hsep:2})}
153
+ `),printStdoutIdentifier(client,org.slug)}),0}var USAGE2="organizations inspect [organization]";async function inspect5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let id=await resolveOrganization(client,args,USAGE2);if(id.status==="error")return id.exitCode;progress(format.value,"Fetching organization\u2026");let org;try{org=await getOrganization(client,id.value)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`fetch organization ${id.value}`,notFound:`Couldn't find organization ${id.value}.`})}let rootTeamSlug;if(!format.value)try{rootTeamSlug=(await getTeamByIdOrSlug(client,org.teamId,{useCurrentTeam:!1})).slug}catch(err){output_manager_default.debug(`Root team lookup failed: ${err}`)}return printResult(client,format.value,{organization:org},()=>printOrganization(client,org,{rootTeamSlug})),0}var USAGE3="organizations list";async function list5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let empty=noArguments(client,args,USAGE3);if(empty.status==="error")return empty.exitCode;let window=listWindow(client,opts);if(window.status==="error")return window.exitCode;progress(format.value,"Fetching organizations\u2026");let result;try{result=await listOrganizations(client)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:"list organizations"})}let page=sliceList(result.organizations,window.value.start,window.value.limit);return page?(printResult(client,format.value,{organizations:page.items,pagination:{next:page.next}},()=>{if(!page.items.length){output_manager_default.log(opts["--next"]?"No more organizations.":"No organizations.");return}client.stdout.write(`${table([["ID","Slug","Root Team","Teams"],...page.items.map(org=>[org.organizationId,org.slug,org.teamId,String(org.teamCount)])],{hsep:2})}
133
154
  `),printNextPageHint(client,page.next)}),0):(output_manager_default.stopSpinner(),invalidArgument(client,"Provide --next with the cursor from the previous page."))}async function submit(client,submission){let{action,organizationId,body,teamSlug,jsonOutput}=submission,effect=billingEffect(submission);if(jsonOutput||(printAlignedLabel("Organization",organizationId),printAlignedLabel("Team",teamSlug),printAlignedLabel("Billing Plan",body.billingPlan??(action==="create"?"platform":"Derived from the team's plan")),output_manager_default.print(`
134
155
  `),output_manager_default.print(` ${effect}
135
156
  `)),!submission.yes){let consent=await askForConsent(client,submission,effect);if(consent!==void 0)return consent}progress(jsonOutput,action==="create"?"Creating organization team\u2026":"Adding team to organization\u2026");let result;try{result=await addOrganizationTeam(client,organizationId,body)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:action==="create"?`create team ${teamSlug} in organization ${organizationId}`:`add team ${teamSlug} to organization ${organizationId}`,notFound:`Couldn't find organization ${organizationId}.`})}return printResult(client,jsonOutput,{team:result,outcome:action==="create"?"created":"added"},()=>{output_manager_default.print(`
@@ -139,20 +160,20 @@ ${deployHint}`),0}).catch(e=>{throw output_manager_default.stopSpinner(),e})}fun
139
160
  ${command}
140
161
  `),getExitCodeForReason(reason)}let question=action==="create"?`Create team ${teamSlug} billed through organization ${organizationId}?`:`Add team ${teamSlug} to organization ${organizationId} and move its billing?`;if(!await client.input.confirm(question,!1))return output_manager_default.print(` Canceled.
141
162
  Nothing was changed.
142
- `),130}var USAGE4="organizations teams add [organization] --child-team <team>",TEAM_MESSAGE="Provide --child-team with the existing team ID or slug. A slug uses 1-48 lowercase letters, numbers, or hyphens.";function isTeamSelector(ref){return ref.startsWith(TEAM_ID_PREFIX)?isPrefixedId(ref,TEAM_ID_PREFIX):slugSchema.safeParse(ref).success}async function add3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(teamsAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionChildTeam(opts["--child-team"]),telemetry.trackCliOptionBillingPlan(opts["--billing-plan"]),telemetry.trackCliFlagYes(opts["--yes"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let plan=validateOptional(client,billingPlanSchema,opts["--billing-plan"],PLAN_MESSAGE);if(plan.status==="error")return plan.exitCode;let childTeam=opts["--child-team"];if(childTeam===void 0)return missingArgument(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide --child-team with the existing team ID or slug.",usage:USAGE4});if(!isTeamSelector(childTeam))return invalidArgument(client,TEAM_MESSAGE);let id=await resolveOrganization(client,args,USAGE4);if(id.status==="error")return id.exitCode;let team;try{team=await getTeamByIdOrSlug(client,childTeam,{useCurrentTeam:!1})}catch(err){return handleOrganizationApiError(client,err,{action:`find team ${childTeam}`,notFound:`Couldn't find team ${childTeam}.`})}return submit(client,{action:"add",organizationId:id.value,body:{mode:"link",teamId:team.id,billingPlan:plan.value},teamSlug:team.slug,jsonOutput:format.value,yes:opts["--yes"]??!1})}var USAGE5="organizations teams create [organization] --slug <slug> --name <name>";async function create2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(teamsCreateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionSlug(opts["--slug"]),telemetry.trackCliOptionName(opts["--name"]),telemetry.trackCliOptionBillingPlan(opts["--billing-plan"]),telemetry.trackCliFlagYes(opts["--yes"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let plan=validateOptional(client,billingPlanSchema,opts["--billing-plan"],PLAN_MESSAGE);if(plan.status==="error")return plan.exitCode;let slug=validate(client,slugSchema,opts["--slug"],{message:SLUG_MESSAGE,usage:USAGE5});if(slug.status==="error")return slug.exitCode;let name=validate(client,nameSchema,opts["--name"],{message:NAME_MESSAGE,usage:USAGE5});if(name.status==="error")return name.exitCode;let id=await resolveOrganization(client,args,USAGE5);return id.status==="error"?id.exitCode:submit(client,{action:"create",organizationId:id.value,body:{mode:"create",slug:slug.value,name:name.value,billingPlan:plan.value},teamSlug:slug.value,jsonOutput:format.value,yes:opts["--yes"]??!1})}var USAGE6="organizations teams list [organization]";async function list5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(teamsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let window=listWindow(client,opts);if(window.status==="error")return window.exitCode;let id=await resolveOrganization(client,args,USAGE6);if(id.status==="error")return id.exitCode;progress(format.value,"Fetching organization teams\u2026");let page;try{page=await collectList(async cursor=>{let result=await listOrganizationTeams(client,id.value,cursor);return{items:result.teams,cursor:result.cursor??null}},window.value.start,window.value.limit)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`list teams in organization ${id.value}`,notFound:`Couldn't find organization ${id.value}.`})}return printResult(client,format.value,{teams:page.items,pagination:{next:page.next}},()=>{if(!page.items.length){output_manager_default.log(opts["--next"]?"No more teams.":`No teams in organization ${id.value}.`);return}client.stdout.write(`${table([["ID","Slug","Name","Billing Plan"],...page.items.map(team=>[team.teamId,team.slug,team.name??"-",team.billingPlan??"-"])],{hsep:2})}
143
- `),printNextPageHint(client,page.next)}),0}var COMMAND_CONFIG10={list:getCommandAliases(teamsListSubcommand),create:getCommandAliases(teamsCreateSubcommand),add:getCommandAliases(teamsAddSubcommand)};async function main6(client,argv,telemetry){let flagsSpecification=getFlagsSpecification(teamsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args:subArgs,subcommandOriginal}=getSubcommand3(parsedArgs.args,COMMAND_CONFIG10);switch(subcommand){case"list":return telemetry.trackCliSubcommandTeamsAction("list",subcommandOriginal),list5(client,subArgs);case"create":return telemetry.trackCliSubcommandTeamsAction("create",subcommandOriginal),create2(client,subArgs);case"add":return telemetry.trackCliSubcommandTeamsAction("add",subcommandOriginal),add3(client,subArgs);default:return unknownCommand(client,"organizations teams",parsedArgs.args[0])}}var USAGE7="organizations update [organization] --slug <slug>";async function update2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionSlug(opts["--slug"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let slug=validate(client,slugSchema,opts["--slug"],{message:SLUG_MESSAGE,usage:USAGE7});if(slug.status==="error")return slug.exitCode;let id=await resolveOrganization(client,args,USAGE7);if(id.status==="error")return id.exitCode;progress(format.value,"Updating organization\u2026");let org;try{org=await updateOrganization(client,id.value,slug.value)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`update organization ${id.value}`,notFound:`Couldn't find organization ${id.value}.`})}return printResult(client,format.value,{organization:org,outcome:"updated"},()=>{printOrganization(client,org,{action:"Updated"}),printStdoutIdentifier(client,org.slug)}),0}var COMMAND_CONFIG11={list:getCommandAliases(listSubcommand6),inspect:getCommandAliases(inspectSubcommand3),create:getCommandAliases(createSubcommand),update:getCommandAliases(updateSubcommand3),teams:getCommandAliases(teamsSubcommand)};async function organizations(client){let parsedArgs,flagsSpecification=getFlagsSpecification(organizationsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG11);switch(subcommand){case"list":return telemetry.trackCliSubcommandList(subcommandOriginal),list4(client,args);case"inspect":return telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect4(client,args);case"create":return telemetry.trackCliSubcommandCreate(subcommandOriginal),create(client,args);case"update":return telemetry.trackCliSubcommandUpdate(subcommandOriginal),update2(client,args);case"teams":return telemetry.trackCliSubcommandTeams(subcommandOriginal),main6(client,args,telemetry);default:return unknownCommand(client,"organizations",parsedArgs.args[1])}}var import_chalk43=__toESM(require_source(),1);var TeamsListTelemetryClient=class extends TelemetryClient{trackCliOptionNext(value){value&&Number(value)>0&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionLimit(value){value&&value>0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionUntil(value){value&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionSince(value){value&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionCount(value){value&&value>0&&this.trackCliOption({option:"count",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list6(client,argv){let{config,telemetryEventStore}=client,telemetry=new TeamsListTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand7.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 validationResult=validateLsArgs({commandName:"teams ls",args:parsedArgs.args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;let next=parseNumericCursor(parsedArgs.flags["--next"]),limit=parsedArgs.flags["--limit"],formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(telemetry.trackCliOptionNext(parsedArgs.flags["--next"]),telemetry.trackCliOptionLimit(limit),telemetry.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry.trackCliOptionCount(parsedArgs.flags["--count"]),telemetry.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry.trackCliOptionSince(parsedArgs.flags["--since"]),typeof next<"u"&&!Number.isInteger(next))return output_manager_default.error(INVALID_NEXT_MESSAGE),2;try{getPaginationOpts(parsedArgs.flags)}catch(error){return output_manager_default.error(error instanceof Error?error.message:String(error)),1}output_manager_default.spinner("Fetching teams");let teamsResponse=await getTeams(client,{next,limit,apiVersion:2}),teams2=teamsResponse.teams??[],{pagination}=teamsResponse,{currentTeam}=config;output_manager_default.spinner("Fetching user information");let user=await getUser(client),accountIsCurrent=!currentTeam&&!client.isTeamUnchosen()&&user.version!=="northstar";accountIsCurrent&&(currentTeam=user.id);let teamList=teams2.map(({id,slug,name,billing})=>({id,name,plan:billing?.plan??null,value:slug,isCurrent:id===currentTeam}));if(user.version!=="northstar"&&teamList.unshift({id:user.id,name:user.email,plan:user.billing?.plan??null,value:user.username||user.email,isCurrent:accountIsCurrent}),!accountIsCurrent){let index=teamList.findIndex(choice=>choice.id===currentTeam);if(index!==-1){let choice=teamList.splice(index,1)[0];teamList.unshift(choice)}}if(output_manager_default.stopSpinner(),teamList.length===0)return output_manager_default.error(`No teams are visible to the current credential. Run ${cmd(`${packageName} whoami`)} to check which account you're authenticated as, or re-authorize your credential with team-level access.`),1;if(asJson){let jsonOutput={teams:teamList.map(team=>({id:team.id,slug:team.value,name:team.name,plan:team.plan,current:team.isCurrent})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
163
+ `),130}var USAGE4="organizations teams add [organization] --child-team <team>",TEAM_MESSAGE="Provide --child-team with the existing team ID or slug. A slug uses 1-48 lowercase letters, numbers, or hyphens.";function isTeamSelector(ref){return ref.startsWith(TEAM_ID_PREFIX)?isPrefixedId(ref,TEAM_ID_PREFIX):slugSchema.safeParse(ref).success}async function add3(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(teamsAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionChildTeam(opts["--child-team"]),telemetry.trackCliOptionBillingPlan(opts["--billing-plan"]),telemetry.trackCliFlagYes(opts["--yes"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let plan=validateOptional(client,billingPlanSchema,opts["--billing-plan"],PLAN_MESSAGE);if(plan.status==="error")return plan.exitCode;let childTeam=opts["--child-team"];if(childTeam===void 0)return missingArgument(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Provide --child-team with the existing team ID or slug.",usage:USAGE4});if(!isTeamSelector(childTeam))return invalidArgument(client,TEAM_MESSAGE);let id=await resolveOrganization(client,args,USAGE4);if(id.status==="error")return id.exitCode;let team;try{team=await getTeamByIdOrSlug(client,childTeam,{useCurrentTeam:!1})}catch(err){return handleOrganizationApiError(client,err,{action:`find team ${childTeam}`,notFound:`Couldn't find team ${childTeam}.`})}return submit(client,{action:"add",organizationId:id.value,body:{mode:"link",teamId:team.id,billingPlan:plan.value},teamSlug:team.slug,jsonOutput:format.value,yes:opts["--yes"]??!1})}var USAGE5="organizations teams create [organization] --slug <slug> --name <name>";async function create2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(teamsCreateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionSlug(opts["--slug"]),telemetry.trackCliOptionName(opts["--name"]),telemetry.trackCliOptionBillingPlan(opts["--billing-plan"]),telemetry.trackCliFlagYes(opts["--yes"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let plan=validateOptional(client,billingPlanSchema,opts["--billing-plan"],PLAN_MESSAGE);if(plan.status==="error")return plan.exitCode;let slug=validate(client,slugSchema,opts["--slug"],{message:SLUG_MESSAGE,usage:USAGE5});if(slug.status==="error")return slug.exitCode;let name=validate(client,nameSchema,opts["--name"],{message:NAME_MESSAGE,usage:USAGE5});if(name.status==="error")return name.exitCode;let id=await resolveOrganization(client,args,USAGE5);return id.status==="error"?id.exitCode:submit(client,{action:"create",organizationId:id.value,body:{mode:"create",slug:slug.value,name:name.value,billingPlan:plan.value},teamSlug:slug.value,jsonOutput:format.value,yes:opts["--yes"]??!1})}var USAGE6="organizations teams list [organization]";async function list6(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(teamsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionNext(opts["--next"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let window=listWindow(client,opts);if(window.status==="error")return window.exitCode;let id=await resolveOrganization(client,args,USAGE6);if(id.status==="error")return id.exitCode;progress(format.value,"Fetching organization teams\u2026");let page;try{page=await collectList(async cursor=>{let result=await listOrganizationTeams(client,id.value,cursor);return{items:result.teams,cursor:result.cursor??null}},window.value.start,window.value.limit)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`list teams in organization ${id.value}`,notFound:`Couldn't find organization ${id.value}.`})}return printResult(client,format.value,{teams:page.items,pagination:{next:page.next}},()=>{if(!page.items.length){output_manager_default.log(opts["--next"]?"No more teams.":`No teams in organization ${id.value}.`);return}client.stdout.write(`${table([["ID","Slug","Name","Billing Plan"],...page.items.map(team=>[team.teamId,team.slug,team.name??"-",team.billingPlan??"-"])],{hsep:2})}
164
+ `),printNextPageHint(client,page.next)}),0}var COMMAND_CONFIG10={list:getCommandAliases(teamsListSubcommand),create:getCommandAliases(teamsCreateSubcommand),add:getCommandAliases(teamsAddSubcommand)};async function main6(client,argv,telemetry){let flagsSpecification=getFlagsSpecification(teamsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args:subArgs,subcommandOriginal}=getSubcommand3(parsedArgs.args,COMMAND_CONFIG10);switch(subcommand){case"list":return telemetry.trackCliSubcommandTeamsAction("list",subcommandOriginal),list6(client,subArgs);case"create":return telemetry.trackCliSubcommandTeamsAction("create",subcommandOriginal),create2(client,subArgs);case"add":return telemetry.trackCliSubcommandTeamsAction("add",subcommandOriginal),add3(client,subArgs);default:return unknownCommand(client,"organizations teams",parsedArgs.args[0])}}var USAGE7="organizations update [organization] --slug <slug>";async function update2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand3.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentOrganizationId(args[0]),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]),telemetry.trackCliOptionSlug(opts["--slug"]);let format=outputFormat(client,opts);if(format.status==="error")return format.exitCode;let slug=validate(client,slugSchema,opts["--slug"],{message:SLUG_MESSAGE,usage:USAGE7});if(slug.status==="error")return slug.exitCode;let id=await resolveOrganization(client,args,USAGE7);if(id.status==="error")return id.exitCode;progress(format.value,"Updating organization\u2026");let org;try{org=await updateOrganization(client,id.value,slug.value)}catch(err){return output_manager_default.stopSpinner(),handleOrganizationApiError(client,err,{action:`update organization ${id.value}`,notFound:`Couldn't find organization ${id.value}.`})}return printResult(client,format.value,{organization:org,outcome:"updated"},()=>{printOrganization(client,org,{action:"Updated"}),printStdoutIdentifier(client,org.slug)}),0}var COMMAND_CONFIG11={list:getCommandAliases(listSubcommand6),inspect:getCommandAliases(inspectSubcommand3),create:getCommandAliases(createSubcommand),update:getCommandAliases(updateSubcommand3),teams:getCommandAliases(teamsSubcommand)};async function organizations(client){let parsedArgs,flagsSpecification=getFlagsSpecification(organizationsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new OrganizationsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG11);switch(subcommand){case"list":return telemetry.trackCliSubcommandList(subcommandOriginal),list5(client,args);case"inspect":return telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect5(client,args);case"create":return telemetry.trackCliSubcommandCreate(subcommandOriginal),create(client,args);case"update":return telemetry.trackCliSubcommandUpdate(subcommandOriginal),update2(client,args);case"teams":return telemetry.trackCliSubcommandTeams(subcommandOriginal),main6(client,args,telemetry);default:return unknownCommand(client,"organizations",parsedArgs.args[1])}}var import_chalk44=__toESM(require_source(),1);var TeamsListTelemetryClient=class extends TelemetryClient{trackCliOptionNext(value){value&&Number(value)>0&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionLimit(value){value&&value>0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionUntil(value){value&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionSince(value){value&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionCount(value){value&&value>0&&this.trackCliOption({option:"count",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list7(client,argv){let{config,telemetryEventStore}=client,telemetry=new TeamsListTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand7.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 validationResult=validateLsArgs({commandName:"teams ls",args:parsedArgs.args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;let next=parseNumericCursor(parsedArgs.flags["--next"]),limit=parsedArgs.flags["--limit"],formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(telemetry.trackCliOptionNext(parsedArgs.flags["--next"]),telemetry.trackCliOptionLimit(limit),telemetry.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry.trackCliOptionCount(parsedArgs.flags["--count"]),telemetry.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry.trackCliOptionSince(parsedArgs.flags["--since"]),typeof next<"u"&&!Number.isInteger(next))return output_manager_default.error(INVALID_NEXT_MESSAGE),2;try{getPaginationOpts(parsedArgs.flags)}catch(error){return output_manager_default.error(error instanceof Error?error.message:String(error)),1}output_manager_default.spinner("Fetching teams");let teamsResponse=await getTeams(client,{next,limit,apiVersion:2}),teams2=teamsResponse.teams??[],{pagination}=teamsResponse,{currentTeam}=config;output_manager_default.spinner("Fetching user information");let user=await getUser(client),accountIsCurrent=!currentTeam&&!client.isTeamUnchosen()&&user.version!=="northstar";accountIsCurrent&&(currentTeam=user.id);let teamList=teams2.map(({id,slug,name,billing:billing2})=>({id,name,plan:billing2?.plan??null,value:slug,isCurrent:id===currentTeam}));if(user.version!=="northstar"&&teamList.unshift({id:user.id,name:user.email,plan:user.billing?.plan??null,value:user.username||user.email,isCurrent:accountIsCurrent}),!accountIsCurrent){let index=teamList.findIndex(choice=>choice.id===currentTeam);if(index!==-1){let choice=teamList.splice(index,1)[0];teamList.unshift(choice)}}if(output_manager_default.stopSpinner(),teamList.length===0)return output_manager_default.error(`No teams are visible to the current credential. Run ${cmd(`${packageName} whoami`)} to check which account you're authenticated as, or re-authorize your credential with team-level access.`),1;if(asJson){let jsonOutput={teams:teamList.map(team=>({id:team.id,slug:team.value,name:team.name,plan:team.plan,current:team.isCurrent})),pagination};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
144
165
  `)}else{client.stdout.write(`
145
- `);let teamTable=table([["id","Team name","Plan"].map(str=>(0,import_chalk43.gray)(str)),...teamList.map(team=>[team.value,team.name,team.plan??"-"])],{hsep:5});if(client.stderr.write(currentTeam?teamTable.split(`
166
+ `);let teamTable=table([["id","Team name","Plan"].map(str=>(0,import_chalk44.gray)(str)),...teamList.map(team=>[team.value,team.name,team.plan??"-"])],{hsep:5});if(client.stderr.write(currentTeam?teamTable.split(`
146
167
  `).map((line,i)=>`${i>0&&teamList[i-1].isCurrent?chars_default.tick:" "} ${line}`).join(`
147
168
  `):teamTable),client.stderr.write(`
148
169
  `),pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["--next","-N","-d","--format"]),nextCmd=`${packageName} teams ls${flags} --next ${pagination.next}`;client.stdout.write(`
149
- `),printNextPageCommand(nextCmd)}}return 0}var import_chalk45=__toESM(require_source(),1);var import_chalk44=__toESM(require_source(),1);async function inviteUserToTeam(client,teamId,email2){return await client.fetch(`/teams/${encodeURIComponent(teamId)}/members`,{method:"POST",body:{email:email2}})}var import_error_utils6=__toESM(require_dist(),1);var TeamsInviteTelemetryClient=class extends TelemetryClient{trackCliArgumentEmail(values){values&&this.trackCliArgument({arg:"email",value:this.redactedArgumentsLength(values)})}};var validateEmail=data=>email.test(data.trim())||data.length===0,domains=Array.from(new Set(["aol.com","gmail.com","google.com","yahoo.com","ymail.com","hotmail.com","live.com","outlook.com","inbox.com","mail.com","gmx.com","icloud.com"]));async function invite(client,argv,{introMsg="",noopMsg="No changes made"}={}){let{telemetryEventStore}=client,telemetry=new TeamsInviteTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inviteSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:emails}=parsedArgs;if(client.nonInteractive&&emails.length===0){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),cmd2=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode at least one email is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to invite teammates (replace <email> with a teammate email)"}]},2),2}let currentTeamId=await client.resolveCurrentTeam();output_manager_default.spinner("Fetching teams");let currentTeam=(await getTeams(client)).find(team=>team.id===currentTeamId);output_manager_default.spinner("Fetching user information");let user=await getUser(client);if(domains.push(user.email.split("@")[1]),!currentTeam){let err=`You can't run this command under ${param(user.username||user.email)}.
150
- Please select a team scope using ${getCommandName("switch")} or use ${cmd("--scope")}`;if(client.nonInteractive){let switchCmd=withGlobalFlags(client,"teams switch <slug>");outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams invite. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1)}return output_manager_default.error(err),1}if(output_manager_default.log(introMsg||`Inviting team members to ${import_chalk44.default.bold(currentTeam.name)}`),telemetry.trackCliArgumentEmail(emails),emails.length>0){for(let email3 of emails)if(email.test(email3)){output_manager_default.spinner(email3);let elapsed=stamp_default(),userInfo=null;try{userInfo=(await inviteUserToTeam(client,currentTeam.id,email3)).username}catch(err){if(isAPIError(err)&&err.code==="user_not_found"){if(client.nonInteractive){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),retryCmd=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());outputAgentError(client,{status:"error",reason:"user_not_found",message:`No user exists with the email address "${email3}".`,next:[{command:retryCmd}]},1)}return output_manager_default.error(`No user exists with the email address "${email3}".`),1}throw err}output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${email3}${userInfo?` (${userInfo})`:""} ${elapsed()}`)}else output_manager_default.log(`${import_chalk44.default.red(`\u2716 ${email3}`)} ${import_chalk44.default.gray("[invalid]")}`);return 0}let inviteUserPrefix="Invite User".padEnd(14),sentEmailPrefix="Sent Email".padEnd(14),hasError=!1,email2;do{email2="";try{email2=await client.input.text({message:`- ${inviteUserPrefix}`,validate:validateEmail})}catch(err){if(!(0,import_error_utils6.isError)(err)||err.message!=="USER_ABORT")throw err}let elapsed;if(email2){elapsed=stamp_default(),output_manager_default.spinner(inviteUserPrefix+email2);try{let{username}=await inviteUserToTeam(client,currentTeam.id,email2);if(email2=`${email2}${username?` (${username})`:""} ${elapsed()}`,emails.push(email2),output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email2}`),hasError){hasError=!1,process.stderr.write(eraseLines(emails.length+2)),output_manager_default.log(introMsg||`Inviting team members to ${import_chalk44.default.bold(currentTeam.name)}`);for(let email3 of emails)output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}}catch(err){output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2)),output_manager_default.error((0,import_error_utils6.errorToString)(err)),hasError=!0;for(let email3 of emails)output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email3}`)}}}while(email2!=="");output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2));let n=emails.length;if(emails.length===0)output_manager_default.log(noopMsg);else{output_manager_default.success(`Invited ${n} teammate${n>1?"s":""}`);for(let email3 of emails)output_manager_default.log(`${import_chalk44.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}return 0}async function createTeam(client,{slug},opts){let fetchOpts={method:"POST",body:{slug},useCurrentTeam:!1,bailOn429:!0};return opts?.signal&&(fetchOpts.signal=opts.signal),await client.fetch("/teams",fetchOpts)}async function patchTeam(client,teamId,payload){let body=await client.fetch(`/teams/${encodeURIComponent(teamId)}`,{method:"PATCH",body:payload,teamOptional:!0});if(body&&typeof body=="object"&&"ok"in body)throw new Error("PATCH /teams returned non-JSON response");return body}var import_error_utils7=__toESM(require_dist(),1);var validateSlug=value=>/^[a-z]+[a-z0-9_-]*$/.test(value),validateName=value=>/^[ a-zA-Z0-9_-]+$/.test(value),teamUrlPrefix="Team URL".padEnd(14)+import_chalk45.default.gray("vercel.com/"),teamNamePrefix="Team Name".padEnd(14),CREATE_TEAM_TIMEOUT_MS=3e4,TIMEOUT_HINT="The request took too long and was cancelled. The team URL may already be taken, or the server may be slow. Try a different slug (e.g. your-company-name) or try again later. Run with `--debug` to see where the request is getting stuck.";function createTeamWithTimeout(client,slug){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),CREATE_TEAM_TIMEOUT_MS);output_manager_default.debug(`Creating team with slug "${slug}" (timeout: ${CREATE_TEAM_TIMEOUT_MS/1e3}s, apiUrl: ${client.apiUrl})`);let promise=createTeam(client,{slug},{signal:controller.signal}).then(result=>(clearTimeout(timeoutId),result)).catch(err=>{throw clearTimeout(timeoutId),err});return Promise.race([promise,new Promise((_,reject)=>setTimeout(()=>reject(new Error("Request timed out.")),CREATE_TEAM_TIMEOUT_MS+500))])}function formatCreateTeamError(err,slug){let isAbort=(0,import_error_utils7.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils7.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429){let retryMs=err.retryAfterMs,retrySec=typeof retryMs=="number"&&retryMs>=0?Math.ceil(retryMs/1e3):0,formatWait=sec=>sec<60?`${sec} seconds`:sec<3600?`${sec} seconds (${Math.ceil(sec/60)} minutes)`:`${sec} seconds (${(sec/3600).toFixed(1)} hours)`;return"Rate limited (429 Too Many Requests). The Vercel API limits how often you can create teams."+(retrySec>0?` Try again in ${formatWait(retrySec)}.`:" Wait a minute or two, then try again.")+" (The API sends when the rate limit window resets, often a fixed time like the next hour or midnight UTC.) Dashboard: https://vercel.com/account."}if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (${import_chalk45.default.cyan(`vercel.com/${slug}`)}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
151
- `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils7.errorToString)(err)}function formatCreateTeamErrorPlain(err,slug){let isAbort=(0,import_error_utils7.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils7.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429)return formatCreateTeamError(err,slug);if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (vercel.com/${slug}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
152
- `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils7.errorToString)(err)}var VERCEL_ACCOUNT_BILLING_URL="https://vercel.com/account/billing";function createTeamErrorReason(err){if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase();if(msg.includes("payment"))return"payment_required";if(msg.includes("slug")||msg.includes("cannot be used"))return"slug_unavailable"}return isAPIError(err)&&err.status===429?"rate_limited":(0,import_error_utils7.isError)(err)&&(err.name==="AbortError"||err.message==="Request timed out.")?"timeout":"team_creation_failed"}async function add4(client,argv=[]){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let slugFlag=parsedArgs.flags["--slug"],nameFlag=parsedArgs.flags["--name"];if(client.nonInteractive){let missing=[];if((!slugFlag||!slugFlag.trim())&&missing.push("--slug"),(!nameFlag||!nameFlag.trim())&&missing.push("--name"),missing.length>0){let fullArgs=client.argv.slice(2),subcommandNames=[addSubcommand4.name,...addSubcommand4.aliases],addIdx=fullArgs.findIndex(arg=>subcommandNames.includes(arg)),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams create --slug <slug> --name <name> ${flagParts.join(" ")}`.trim()),requiredPlain=missing.join(" and "),verb=missing.length===1?"is":"are";outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode ${requiredPlain} ${verb} required. Run: ${cmd2}`,next:[{command:cmd2,when:"to create a team non-interactively"}]},2)}let slug2=slugFlag.trim().toLowerCase(),name2=nameFlag.trim();if(!validateSlug(slug2)){let msg=`Invalid ${param("--slug")}: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. ${param("acme")})`,msgPlain="Invalid --slug: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. acme)";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_slug",message:msgPlain,next:[{command:getCommandNamePlain("teams create --slug <slug> --name <name>")}]},2),output_manager_default.error(msg),2}if(!validateName(name2)){let msg=`Invalid ${param("--name")}: only letters, numbers, spaces, hyphens, and underscores allowed`,msgPlain="Invalid --name: only letters, numbers, spaces, hyphens, and underscores allowed";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_name",message:msgPlain},2),output_manager_default.error(msg),2}output_manager_default.spinner(teamUrlPrefix+slug2);let team2;try{team2=await createTeamWithTimeout(client,slug2)}catch(err){if(output_manager_default.stopSpinner(),client.nonInteractive){let message=formatCreateTeamErrorPlain(err,slug2),reason=createTeamErrorReason(err),next=[];reason==="payment_required"&&(message+=` Add a payment method at ${VERCEL_ACCOUNT_BILLING_URL}, then retry.`,next.push({command:openUrlInBrowserCommand(VERCEL_ACCOUNT_BILLING_URL),when:"To open the billing page in your browser"})),outputAgentError(client,{status:"error",reason,message,...next.length>0&&{next}},1)}return output_manager_default.error(formatCreateTeamError(err,slug2)),1}output_manager_default.stopSpinner(),output_manager_default.spinner(teamNamePrefix+name2);try{let res2=await patchTeam(client,team2.id,{name:name2});team2=Object.assign(team2,res2)}catch(err){return output_manager_default.stopSpinner(),client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_update_failed",message:(0,import_error_utils7.errorToString)(err)},1),output_manager_default.error((0,import_error_utils7.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.updateConfig({currentTeam:team2.id}),client.writeToConfigFile(),output_manager_default.success(`Team ${import_chalk45.default.bold(team2.name)} (${import_chalk45.default.cyan(`vercel.com/${slug2}`)}) created.`),0}let slug=slugFlag?.trim().toLowerCase(),team,elapsed;output_manager_default.log(`Pick a team identifier for its URL (e.g.: ${import_chalk45.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils7.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("Canceled"),0;throw err}elapsed=stamp_default(),output_manager_default.spinner(teamUrlPrefix+slug);try{team=await createTeamWithTimeout(client,slug)}catch(err){output_manager_default.stopSpinner(),output_manager_default.print(eraseLines(2)),output_manager_default.error(formatCreateTeamError(err,slug)),slug=void 0}}while(!team);output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),output_manager_default.success(`Team created ${elapsed()}`),output_manager_default.log(`${import_chalk45.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
153
- `),output_manager_default.log("Pick a display name for your team");let name=nameFlag?.trim();try{name=await client.input.text({message:`- ${teamNamePrefix}`,validate:validateName,default:name})}catch(err){if((0,import_error_utils7.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("No name specified"),2;throw err}elapsed=stamp_default(),output_manager_default.spinner(teamNamePrefix+name);let res=await patchTeam(client,team.id,{name});return output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),team=Object.assign(team,res),output_manager_default.success(`Team name saved ${elapsed()}`),output_manager_default.log(`${import_chalk45.default.cyan(`${chars_default.tick} `)+teamNamePrefix+team.name}
154
- `),output_manager_default.spinner("Saving"),client.updateConfig({currentTeam:team.id}),client.writeToConfigFile(),output_manager_default.stopSpinner(),await invite(client,[],{introMsg:"Invite your teammates! When done, press enter on an empty field",noopMsg:`You can invite teammates later by running ${getCommandName("teams invite")}`}),0}var import_chalk46=__toESM(require_source(),1);var TeamsSwitchTelemetryClient=class extends TelemetryClient{trackCliArgumentName(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}};var updateCurrentTeam=(client,config,team)=>{client.savedTeam=team?.id,team?config.currentTeam=team.id:delete config.currentTeam,writeToConfigFile(config)};async function warnIfStaleLinkExists(client,newOrgId){let link=null;try{link=await getLinkFromDir(getVercelDirectory(client.cwd))}catch{link=null}!link||link.orgId===newOrgId||output_manager_default.warn("This directory is linked to a project under a different team/scope. Commands like `deploy` will still use the linked project's team. Run `vc link` to re-link.")}async function change(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(switchSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:[desiredSlug]}=parsedArgs;if(client.ignoresSavedTeam){let message="Agents can't change the saved team. Pass --scope <team> to each command, or link the directory with --scope.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.AGENT_CANNOT_SWITCH,message,next:[{command:withGlobalFlags(client,"teams ls"),when:"to list teams, then ask the user which one to use"},{command:getCommandNamePlain("link --scope <team>"),when:"to set the team for this directory (replace <team> with the team the user chose)"}]}),output_manager_default.error(message),1}if(client.nonInteractive&&!desiredSlug){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}let{config,telemetryEventStore}=client;new TeamsSwitchTelemetryClient({opts:{store:telemetryEventStore}}).trackCliArgumentName(desiredSlug),output_manager_default.spinner("Fetching teams information");let[user,teams2]=await Promise.all([getUser(client),getTeams(client)]),defaultTeamId=user.version==="northstar"?user.defaultTeamId:void 0,currentTeamId=config.currentTeam||defaultTeamId,personalScopeSelected=!currentTeamId,currentTeam=currentTeamId?teams2.find(team=>team.id===currentTeamId):void 0;if(!personalScopeSelected&&!currentTeam&&output_manager_default.warn("You are no longer a member of the previously selected team. Choose another scope to continue."),!desiredSlug){let teamChoices=teams2.slice(0).sort((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(team=>{let title2=`${team.name} (${team.slug})`,selected=team.id===currentTeam?.id;return selected&&(title2+=` ${import_chalk46.default.bold("(current)")}`),team.limited&&(title2+=` ${emoji("locked")}`),{name:title2,value:team.slug,short:team.slug,selected}}),suffix=personalScopeSelected?` ${import_chalk46.default.bold("(current)")}`:"";user.limited&&(suffix+=` ${emoji("locked")}`);let choices=[...user.version==="northstar"?[]:[{separator:"Personal Account"},{name:`${user.name||user.email} (${user.username})${suffix}`,value:user.username,short:user.username,selected:personalScopeSelected}],{separator:"Teams"},...teamChoices];if(output_manager_default.stopSpinner(),client.nonInteractive){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}desiredSlug=await list(client,{message:"Switch to:",choices,eraseFinalAnswer:!0})}if(!desiredSlug)return output_manager_default.log("No changes made."),0;let newTeam=teams2.find(team=>team.slug===desiredSlug);if(!newTeam&&(desiredSlug===user.username||desiredSlug===user.email))return user.version==="northstar"?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"personal_scope_not_allowed",message:"You cannot set your Personal Account as the scope in this account type."},1),output_manager_default.error("You cannot set your Personal Account as the scope."),1):personalScopeSelected?(output_manager_default.log("No changes made"),0):(user.limited&&await client.reauthenticate({scope:user.username,teamId:null}),updateCurrentTeam(client,config),output_manager_default.success(`Your account (${import_chalk46.default.bold(user.username)}) is now active!`),await warnIfStaleLinkExists(client,user.id),0);if(!newTeam)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"scope_not_accessible",message:`You do not have permission to access scope "${desiredSlug}".`,next:[{command:withGlobalFlags(client,"teams list")}]},1),output_manager_default.error(`You do not have permission to access scope ${import_chalk46.default.bold(desiredSlug)}.`),1;if(newTeam.slug===currentTeam?.slug)return output_manager_default.log("No changes made"),0;if(newTeam.limited){let samlEnabled=newTeam.saml?.connection?.state==="active";await client.reauthenticate({teamId:newTeam.id,scope:newTeam.slug,enforced:samlEnabled&&newTeam.saml?.enforced===!0})}return updateCurrentTeam(client,config,newTeam),output_manager_default.success(`The team ${import_chalk46.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`),await warnIfStaleLinkExists(client,newTeam.id),0}function optionRoot(flagToken){return flagToken.startsWith("--")&&flagToken.includes("=")?`--${flagToken.slice(2).split("=")[0]}`:flagToken}function teamsRequestNextCommand(client){let fullArgs=client.argv.slice(2),reqIdx=fullArgs.findIndex(a=>a==="request"||a==="access-request"),afterRequest=reqIdx>=0?fullArgs.slice(reqIdx+1):[],globalParts=getGlobalFlagsFromArgs(fullArgs),subParts=getSameSubcommandSuggestionFlags(afterRequest),seen=new Set;for(let g of globalParts)seen.add(optionRoot(g));let extras=[];for(let i=0;i<subParts.length;){let a=subParts[i],root=optionRoot(a);if(seen.has(root)){i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(i+=1);continue}seen.add(root),extras.push(a),i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(extras.push(subParts[i]),i+=1)}let base=withGlobalFlags(client,"teams request [userId]");return extras.length===0?base:getCommandNamePlain(`${base} ${extras.join(" ")}`.trim())}function apiFailureReason(err){return typeof err.code=="string"&&err.code?err.code:typeof err.code=="number"&&Number.isFinite(err.code)?String(err.code):`http_${err.status}`}async function request2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(requestSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1){if(client.nonInteractive){let cmdStr=teamsRequestNextCommand(client);outputAgentError(client,{status:"error",reason:"invalid_arguments",message:"Invalid number of arguments. At most one optional userId is allowed.",next:[{command:cmdStr,when:"to check join-request status (omit userId for the current user)"}]},2)}return output_manager_default.error("Invalid number of arguments. Usage: `vercel teams request [userId]`"),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,teamId=await client.resolveCurrentTeam();if(!teamId){let switchCmd=withGlobalFlags(client,"teams switch <slug>");return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams request. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1),output_manager_default.error(`This command requires a team scope. Run ${cmd("teams switch")} first.`),1}let userId=parsedArgs.args[0],path3=userId?`/v1/teams/${encodeURIComponent(teamId)}/request/${encodeURIComponent(userId)}`:`/v1/teams/${encodeURIComponent(teamId)}/request`,data;try{data=await client.fetch(path3)}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:apiFailureReason(err),message:err.serverMessage||err.message,next:[{command:teamsRequestNextCommand(client),when:"to retry after resolving the error (same options and optional userId)"}]},1),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
155
- `),0):(output_manager_default.log(`Team: ${String(data.teamName??"")} (${String(data.teamSlug??"")})`),output_manager_default.log(`Confirmed: ${String(data.confirmed??"")}`),data.accessRequestedAt!=null&&output_manager_default.log(`Access requested at: ${String(data.accessRequestedAt)}`),data.joinedFrom&&typeof data.joinedFrom=="object"&&output_manager_default.log(`Joined from: ${JSON.stringify(data.joinedFrom)}`),0)}var import_chalk47=__toESM(require_source(),1);function teamMemberPreviewLabel(member){return member.username&&member.email?`${member.username} (${member.email})`:teamMemberLabel(member)}function matchesEmail(first,second){return!!(first&&second&&first.trim().toLowerCase()===second.trim().toLowerCase())}function invoiceRecipientError(invoiceRecipient,departingMember,currentInvoiceRecipient){if(!email.test(invoiceRecipient))return"Enter a valid invoice recipient email address.";if(matchesEmail(invoiceRecipient,departingMember.email)||matchesEmail(invoiceRecipient,currentInvoiceRecipient))return"Choose a different invoice recipient. That address belongs to the team member being removed."}function buildInteractiveRemoveCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams members remove <member>",void 0,{excludeFlags:["--non-interactive"]})}async function membersRemove(client,argv){let parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification([formatOption,jsonOption]))}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult;function fail(reason,message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),getExitCodeForReason(reason)):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
170
+ `),printNextPageCommand(nextCmd)}}return 0}var import_chalk46=__toESM(require_source(),1);var import_chalk45=__toESM(require_source(),1);async function inviteUserToTeam(client,teamId,email2){return await client.fetch(`/teams/${encodeURIComponent(teamId)}/members`,{method:"POST",body:{email:email2}})}var import_error_utils8=__toESM(require_dist(),1);var TeamsInviteTelemetryClient=class extends TelemetryClient{trackCliArgumentEmail(values){values&&this.trackCliArgument({arg:"email",value:this.redactedArgumentsLength(values)})}};var validateEmail=data=>email.test(data.trim())||data.length===0,domains=Array.from(new Set(["aol.com","gmail.com","google.com","yahoo.com","ymail.com","hotmail.com","live.com","outlook.com","inbox.com","mail.com","gmx.com","icloud.com"]));async function invite(client,argv,{introMsg="",noopMsg="No changes made"}={}){let{telemetryEventStore}=client,telemetry=new TeamsInviteTelemetryClient({opts:{store:telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inviteSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:emails}=parsedArgs;if(client.nonInteractive&&emails.length===0){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),cmd2=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode at least one email is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to invite teammates (replace <email> with a teammate email)"}]},2),2}let currentTeamId=await client.resolveCurrentTeam();output_manager_default.spinner("Fetching teams");let currentTeam=(await getTeams(client)).find(team=>team.id===currentTeamId);output_manager_default.spinner("Fetching user information");let user=await getUser(client);if(domains.push(user.email.split("@")[1]),!currentTeam){let err=`You can't run this command under ${param(user.username||user.email)}.
171
+ Please select a team scope using ${getCommandName("switch")} or use ${cmd("--scope")}`;if(client.nonInteractive){let switchCmd=withGlobalFlags(client,"teams switch <slug>");outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams invite. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1)}return output_manager_default.error(err),1}if(output_manager_default.log(introMsg||`Inviting team members to ${import_chalk45.default.bold(currentTeam.name)}`),telemetry.trackCliArgumentEmail(emails),emails.length>0){for(let email3 of emails)if(email.test(email3)){output_manager_default.spinner(email3);let elapsed=stamp_default(),userInfo=null;try{userInfo=(await inviteUserToTeam(client,currentTeam.id,email3)).username}catch(err){if(isAPIError(err)&&err.code==="user_not_found"){if(client.nonInteractive){let fullArgs=client.argv.slice(2),inviteIdx=fullArgs.indexOf("invite"),afterInvite=inviteIdx>=0?fullArgs.slice(inviteIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterInvite),retryCmd=getCommandNamePlain(`teams invite <email> ${flagParts.join(" ")}`.trim());outputAgentError(client,{status:"error",reason:"user_not_found",message:`No user exists with the email address "${email3}".`,next:[{command:retryCmd}]},1)}return output_manager_default.error(`No user exists with the email address "${email3}".`),1}throw err}output_manager_default.log(`${import_chalk45.default.cyan(chars_default.tick)} ${email3}${userInfo?` (${userInfo})`:""} ${elapsed()}`)}else output_manager_default.log(`${import_chalk45.default.red(`\u2716 ${email3}`)} ${import_chalk45.default.gray("[invalid]")}`);return 0}let inviteUserPrefix="Invite User".padEnd(14),sentEmailPrefix="Sent Email".padEnd(14),hasError=!1,email2;do{email2="";try{email2=await client.input.text({message:`- ${inviteUserPrefix}`,validate:validateEmail})}catch(err){if(!(0,import_error_utils8.isError)(err)||err.message!=="USER_ABORT")throw err}let elapsed;if(email2){elapsed=stamp_default(),output_manager_default.spinner(inviteUserPrefix+email2);try{let{username}=await inviteUserToTeam(client,currentTeam.id,email2);if(email2=`${email2}${username?` (${username})`:""} ${elapsed()}`,emails.push(email2),output_manager_default.log(`${import_chalk45.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email2}`),hasError){hasError=!1,process.stderr.write(eraseLines(emails.length+2)),output_manager_default.log(introMsg||`Inviting team members to ${import_chalk45.default.bold(currentTeam.name)}`);for(let email3 of emails)output_manager_default.log(`${import_chalk45.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}}catch(err){output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2)),output_manager_default.error((0,import_error_utils8.errorToString)(err)),hasError=!0;for(let email3 of emails)output_manager_default.log(`${import_chalk45.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email3}`)}}}while(email2!=="");output_manager_default.stopSpinner(),process.stderr.write(eraseLines(emails.length+2));let n=emails.length;if(emails.length===0)output_manager_default.log(noopMsg);else{output_manager_default.success(`Invited ${n} teammate${n>1?"s":""}`);for(let email3 of emails)output_manager_default.log(`${import_chalk45.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`)}return 0}async function createTeam(client,{slug},opts){let fetchOpts={method:"POST",body:{slug},useCurrentTeam:!1,bailOn429:!0};return opts?.signal&&(fetchOpts.signal=opts.signal),await client.fetch("/teams",fetchOpts)}async function patchTeam(client,teamId,payload){let body=await client.fetch(`/teams/${encodeURIComponent(teamId)}`,{method:"PATCH",body:payload,teamOptional:!0});if(body&&typeof body=="object"&&"ok"in body)throw new Error("PATCH /teams returned non-JSON response");return body}var import_error_utils9=__toESM(require_dist(),1);var validateSlug=value=>/^[a-z]+[a-z0-9_-]*$/.test(value),validateName=value=>/^[ a-zA-Z0-9_-]+$/.test(value),teamUrlPrefix="Team URL".padEnd(14)+import_chalk46.default.gray("vercel.com/"),teamNamePrefix="Team Name".padEnd(14),CREATE_TEAM_TIMEOUT_MS=3e4,TIMEOUT_HINT="The request took too long and was cancelled. The team URL may already be taken, or the server may be slow. Try a different slug (e.g. your-company-name) or try again later. Run with `--debug` to see where the request is getting stuck.";function createTeamWithTimeout(client,slug){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),CREATE_TEAM_TIMEOUT_MS);output_manager_default.debug(`Creating team with slug "${slug}" (timeout: ${CREATE_TEAM_TIMEOUT_MS/1e3}s, apiUrl: ${client.apiUrl})`);let promise=createTeam(client,{slug},{signal:controller.signal}).then(result=>(clearTimeout(timeoutId),result)).catch(err=>{throw clearTimeout(timeoutId),err});return Promise.race([promise,new Promise((_,reject)=>setTimeout(()=>reject(new Error("Request timed out.")),CREATE_TEAM_TIMEOUT_MS+500))])}function formatCreateTeamError(err,slug){let isAbort=(0,import_error_utils9.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils9.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429){let retryMs=err.retryAfterMs,retrySec=typeof retryMs=="number"&&retryMs>=0?Math.ceil(retryMs/1e3):0,formatWait=sec=>sec<60?`${sec} seconds`:sec<3600?`${sec} seconds (${Math.ceil(sec/60)} minutes)`:`${sec} seconds (${(sec/3600).toFixed(1)} hours)`;return"Rate limited (429 Too Many Requests). The Vercel API limits how often you can create teams."+(retrySec>0?` Try again in ${formatWait(retrySec)}.`:" Wait a minute or two, then try again.")+" (The API sends when the rate limit window resets, often a fixed time like the next hour or midnight UTC.) Dashboard: https://vercel.com/account."}if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (${import_chalk46.default.cyan(`vercel.com/${slug}`)}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
172
+ `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils9.errorToString)(err)}function formatCreateTeamErrorPlain(err,slug){let isAbort=(0,import_error_utils9.isError)(err)&&err.name==="AbortError",isTimeoutMsg=(0,import_error_utils9.isError)(err)&&err.message==="Request timed out.";if(isAbort||isTimeoutMsg)return TIMEOUT_HINT;if(isAPIError(err)&&err.status===429)return formatCreateTeamError(err,slug);if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase(),slugHint=msg.includes("slug")||msg.includes("cannot be used")?`That team URL (vercel.com/${slug}) is not available. It may already be taken. `:"",paymentHint=msg.includes("payment")?"A payment method is required to create a team. ":"",prefix=slugHint||paymentHint;return prefix?`${prefix}${prefix.trim()?`
173
+ `:""}${err.serverMessage||err.message}`:err.serverMessage||err.message}return(0,import_error_utils9.errorToString)(err)}var VERCEL_ACCOUNT_BILLING_URL="https://vercel.com/account/billing";function createTeamErrorReason(err){if(isAPIError(err)&&err.status===400){let msg=(err.serverMessage||err.message||"").toLowerCase();if(msg.includes("payment"))return"payment_required";if(msg.includes("slug")||msg.includes("cannot be used"))return"slug_unavailable"}return isAPIError(err)&&err.status===429?"rate_limited":(0,import_error_utils9.isError)(err)&&(err.name==="AbortError"||err.message==="Request timed out.")?"timeout":"team_creation_failed"}async function add4(client,argv=[]){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand4.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let slugFlag=parsedArgs.flags["--slug"],nameFlag=parsedArgs.flags["--name"];if(client.nonInteractive){let missing=[];if((!slugFlag||!slugFlag.trim())&&missing.push("--slug"),(!nameFlag||!nameFlag.trim())&&missing.push("--name"),missing.length>0){let fullArgs=client.argv.slice(2),subcommandNames=[addSubcommand4.name,...addSubcommand4.aliases],addIdx=fullArgs.findIndex(arg=>subcommandNames.includes(arg)),afterAdd=addIdx>=0?fullArgs.slice(addIdx+1):[],flagParts=getSameSubcommandSuggestionFlags(afterAdd),cmd2=getCommandNamePlain(`teams create --slug <slug> --name <name> ${flagParts.join(" ")}`.trim()),requiredPlain=missing.join(" and "),verb=missing.length===1?"is":"are";outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode ${requiredPlain} ${verb} required. Run: ${cmd2}`,next:[{command:cmd2,when:"to create a team non-interactively"}]},2)}let slug2=slugFlag.trim().toLowerCase(),name2=nameFlag.trim();if(!validateSlug(slug2)){let msg=`Invalid ${param("--slug")}: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. ${param("acme")})`,msgPlain="Invalid --slug: must start with a letter and contain only lowercase letters, numbers, hyphens, and underscores (e.g. acme)";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_slug",message:msgPlain,next:[{command:getCommandNamePlain("teams create --slug <slug> --name <name>")}]},2),output_manager_default.error(msg),2}if(!validateName(name2)){let msg=`Invalid ${param("--name")}: only letters, numbers, spaces, hyphens, and underscores allowed`,msgPlain="Invalid --name: only letters, numbers, spaces, hyphens, and underscores allowed";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_name",message:msgPlain},2),output_manager_default.error(msg),2}output_manager_default.spinner(teamUrlPrefix+slug2);let team2;try{team2=await createTeamWithTimeout(client,slug2)}catch(err){if(output_manager_default.stopSpinner(),client.nonInteractive){let message=formatCreateTeamErrorPlain(err,slug2),reason=createTeamErrorReason(err),next=[];reason==="payment_required"&&(message+=` Add a payment method at ${VERCEL_ACCOUNT_BILLING_URL}, then retry.`,next.push({command:openUrlInBrowserCommand(VERCEL_ACCOUNT_BILLING_URL),when:"To open the billing page in your browser"})),outputAgentError(client,{status:"error",reason,message,...next.length>0&&{next}},1)}return output_manager_default.error(formatCreateTeamError(err,slug2)),1}output_manager_default.stopSpinner(),output_manager_default.spinner(teamNamePrefix+name2);try{let res2=await patchTeam(client,team2.id,{name:name2});team2=Object.assign(team2,res2)}catch(err){return output_manager_default.stopSpinner(),client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_update_failed",message:(0,import_error_utils9.errorToString)(err)},1),output_manager_default.error((0,import_error_utils9.errorToString)(err)),1}return output_manager_default.stopSpinner(),client.updateConfig({currentTeam:team2.id}),client.writeToConfigFile(),output_manager_default.success(`Team ${import_chalk46.default.bold(team2.name)} (${import_chalk46.default.cyan(`vercel.com/${slug2}`)}) created.`),0}let slug=slugFlag?.trim().toLowerCase(),team,elapsed;output_manager_default.log(`Pick a team identifier for its URL (e.g.: ${import_chalk46.default.cyan("`vercel.com/acme`")})`);do{try{slug=await client.input.text({message:`- ${teamUrlPrefix}`,validate:validateSlug,default:slug})}catch(err){if((0,import_error_utils9.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("Canceled"),0;throw err}elapsed=stamp_default(),output_manager_default.spinner(teamUrlPrefix+slug);try{team=await createTeamWithTimeout(client,slug)}catch(err){output_manager_default.stopSpinner(),output_manager_default.print(eraseLines(2)),output_manager_default.error(formatCreateTeamError(err,slug)),slug=void 0}}while(!team);output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),output_manager_default.success(`Team created ${elapsed()}`),output_manager_default.log(`${import_chalk46.default.cyan(`${chars_default.tick} `)+teamUrlPrefix+slug}
174
+ `),output_manager_default.log("Pick a display name for your team");let name=nameFlag?.trim();try{name=await client.input.text({message:`- ${teamNamePrefix}`,validate:validateName,default:name})}catch(err){if((0,import_error_utils9.isError)(err)&&err.message==="USER_ABORT")return output_manager_default.log("No name specified"),2;throw err}elapsed=stamp_default(),output_manager_default.spinner(teamNamePrefix+name);let res=await patchTeam(client,team.id,{name});return output_manager_default.stopSpinner(),process.stdout.write(eraseLines(2)),team=Object.assign(team,res),output_manager_default.success(`Team name saved ${elapsed()}`),output_manager_default.log(`${import_chalk46.default.cyan(`${chars_default.tick} `)+teamNamePrefix+team.name}
175
+ `),output_manager_default.spinner("Saving"),client.updateConfig({currentTeam:team.id}),client.writeToConfigFile(),output_manager_default.stopSpinner(),await invite(client,[],{introMsg:"Invite your teammates! When done, press enter on an empty field",noopMsg:`You can invite teammates later by running ${getCommandName("teams invite")}`}),0}var import_chalk47=__toESM(require_source(),1);var TeamsSwitchTelemetryClient=class extends TelemetryClient{trackCliArgumentName(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}};var updateCurrentTeam=(client,config,team)=>{client.savedTeam=team?.id,team?config.currentTeam=team.id:delete config.currentTeam,writeToConfigFile(config)};async function warnIfStaleLinkExists(client,newOrgId){let link2=null;try{link2=await getLinkFromDir(getVercelDirectory(client.cwd))}catch{link2=null}!link2||link2.orgId===newOrgId||output_manager_default.warn("This directory is linked to a project under a different team/scope. Commands like `deploy` will still use the linked project's team. Run `vc link` to re-link.")}async function change(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(switchSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args:[desiredSlug]}=parsedArgs;if(client.ignoresSavedTeam){let message="Agents can't change the saved team. Pass --scope <team> to each command, or link the directory with --scope.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.AGENT_CANNOT_SWITCH,message,next:[{command:withGlobalFlags(client,"teams ls"),when:"to list teams, then ask the user which one to use"},{command:getCommandNamePlain("link --scope <team>"),when:"to set the team for this directory (replace <team> with the team the user chose)"}]}),output_manager_default.error(message),1}if(client.nonInteractive&&!desiredSlug){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}let{config,telemetryEventStore}=client;new TeamsSwitchTelemetryClient({opts:{store:telemetryEventStore}}).trackCliArgumentName(desiredSlug),output_manager_default.spinner("Fetching teams information");let[user,teams2]=await Promise.all([getUser(client),getTeams(client)]),defaultTeamId=user.version==="northstar"?user.defaultTeamId:void 0,currentTeamId=config.currentTeam||defaultTeamId,personalScopeSelected=!currentTeamId,currentTeam=currentTeamId?teams2.find(team=>team.id===currentTeamId):void 0;if(!personalScopeSelected&&!currentTeam&&output_manager_default.warn("You are no longer a member of the previously selected team. Choose another scope to continue."),!desiredSlug){let teamChoices=teams2.slice(0).sort((a,b)=>a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(team=>{let title2=`${team.name} (${team.slug})`,selected=team.id===currentTeam?.id;return selected&&(title2+=` ${import_chalk47.default.bold("(current)")}`),team.limited&&(title2+=` ${emoji("locked")}`),{name:title2,value:team.slug,short:team.slug,selected}}),suffix=personalScopeSelected?` ${import_chalk47.default.bold("(current)")}`:"";user.limited&&(suffix+=` ${emoji("locked")}`);let choices=[...user.version==="northstar"?[]:[{separator:"Personal Account"},{name:`${user.name||user.email} (${user.username})${suffix}`,value:user.username,short:user.username,selected:personalScopeSelected}],{separator:"Teams"},...teamChoices];if(output_manager_default.stopSpinner(),client.nonInteractive){let fullArgs=client.argv.slice(2),switchIdx=fullArgs.findIndex(a=>a==="switch"||a==="change"),afterSwitch=switchIdx>=0?fullArgs.slice(switchIdx+1):fullArgs,afterPositional=afterSwitch.length>0&&!afterSwitch[0].startsWith("-")?afterSwitch.slice(1):afterSwitch,flagTail=getSameSubcommandSuggestionFlags(afterPositional),cmd2=getCommandNamePlain(`teams switch <slug> ${flagTail.join(" ")}`.trim());return outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`In non-interactive mode a team slug (or username for personal scope) is required. Run: ${cmd2}`,next:[{command:cmd2,when:"to switch scope (replace <slug> with team slug)"},{command:withGlobalFlags(client,"teams list"),when:"to list teams and slugs"}]},2),2}desiredSlug=await list(client,{message:"Switch to:",choices,eraseFinalAnswer:!0})}if(!desiredSlug)return output_manager_default.log("No changes made."),0;let newTeam=teams2.find(team=>team.slug===desiredSlug);if(!newTeam&&(desiredSlug===user.username||desiredSlug===user.email))return user.version==="northstar"?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"personal_scope_not_allowed",message:"You cannot set your Personal Account as the scope in this account type."},1),output_manager_default.error("You cannot set your Personal Account as the scope."),1):personalScopeSelected?(output_manager_default.log("No changes made"),0):(user.limited&&await client.reauthenticate({scope:user.username,teamId:null}),updateCurrentTeam(client,config),output_manager_default.success(`Your account (${import_chalk47.default.bold(user.username)}) is now active!`),await warnIfStaleLinkExists(client,user.id),0);if(!newTeam)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"scope_not_accessible",message:`You do not have permission to access scope "${desiredSlug}".`,next:[{command:withGlobalFlags(client,"teams list")}]},1),output_manager_default.error(`You do not have permission to access scope ${import_chalk47.default.bold(desiredSlug)}.`),1;if(newTeam.slug===currentTeam?.slug)return output_manager_default.log("No changes made"),0;if(newTeam.limited){let samlEnabled=newTeam.saml?.connection?.state==="active";await client.reauthenticate({teamId:newTeam.id,scope:newTeam.slug,enforced:samlEnabled&&newTeam.saml?.enforced===!0})}return updateCurrentTeam(client,config,newTeam),output_manager_default.success(`The team ${import_chalk47.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`),await warnIfStaleLinkExists(client,newTeam.id),0}function optionRoot(flagToken){return flagToken.startsWith("--")&&flagToken.includes("=")?`--${flagToken.slice(2).split("=")[0]}`:flagToken}function teamsRequestNextCommand(client){let fullArgs=client.argv.slice(2),reqIdx=fullArgs.findIndex(a=>a==="request"||a==="access-request"),afterRequest=reqIdx>=0?fullArgs.slice(reqIdx+1):[],globalParts=getGlobalFlagsFromArgs(fullArgs),subParts=getSameSubcommandSuggestionFlags(afterRequest),seen=new Set;for(let g of globalParts)seen.add(optionRoot(g));let extras=[];for(let i=0;i<subParts.length;){let a=subParts[i],root=optionRoot(a);if(seen.has(root)){i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(i+=1);continue}seen.add(root),extras.push(a),i+=1,!a.includes("=")&&i<subParts.length&&!subParts[i].startsWith("-")&&(extras.push(subParts[i]),i+=1)}let base=withGlobalFlags(client,"teams request [userId]");return extras.length===0?base:getCommandNamePlain(`${base} ${extras.join(" ")}`.trim())}function apiFailureReason(err){return typeof err.code=="string"&&err.code?err.code:typeof err.code=="number"&&Number.isFinite(err.code)?String(err.code):`http_${err.status}`}async function request2(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(requestSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1){if(client.nonInteractive){let cmdStr=teamsRequestNextCommand(client);outputAgentError(client,{status:"error",reason:"invalid_arguments",message:"Invalid number of arguments. At most one optional userId is allowed.",next:[{command:cmdStr,when:"to check join-request status (omit userId for the current user)"}]},2)}return output_manager_default.error("Invalid number of arguments. Usage: `vercel teams request [userId]`"),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,teamId=await client.resolveCurrentTeam();if(!teamId){let switchCmd=withGlobalFlags(client,"teams switch <slug>");return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"team_scope_required",message:`Team scope is required for teams request. Run ${switchCmd} or use --scope.`,next:[{command:switchCmd,when:"to select a team scope (replace <slug> with your team slug)"}]},1),output_manager_default.error(`This command requires a team scope. Run ${cmd("teams switch")} first.`),1}let userId=parsedArgs.args[0],path3=userId?`/v1/teams/${encodeURIComponent(teamId)}/request/${encodeURIComponent(userId)}`:`/v1/teams/${encodeURIComponent(teamId)}/request`,data;try{data=await client.fetch(path3)}catch(err){return client.nonInteractive&&isAPIError(err)&&outputAgentError(client,{status:"error",reason:apiFailureReason(err),message:err.serverMessage||err.message,next:[{command:teamsRequestNextCommand(client),when:"to retry after resolving the error (same options and optional userId)"}]},1),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(data,null,2)}
176
+ `),0):(output_manager_default.log(`Team: ${String(data.teamName??"")} (${String(data.teamSlug??"")})`),output_manager_default.log(`Confirmed: ${String(data.confirmed??"")}`),data.accessRequestedAt!=null&&output_manager_default.log(`Access requested at: ${String(data.accessRequestedAt)}`),data.joinedFrom&&typeof data.joinedFrom=="object"&&output_manager_default.log(`Joined from: ${JSON.stringify(data.joinedFrom)}`),0)}var import_chalk48=__toESM(require_source(),1);function teamMemberPreviewLabel(member){return member.username&&member.email?`${member.username} (${member.email})`:teamMemberLabel(member)}function matchesEmail(first,second){return!!(first&&second&&first.trim().toLowerCase()===second.trim().toLowerCase())}function invoiceRecipientError(invoiceRecipient,departingMember,currentInvoiceRecipient){if(!email.test(invoiceRecipient))return"Enter a valid invoice recipient email address.";if(matchesEmail(invoiceRecipient,departingMember.email)||matchesEmail(invoiceRecipient,currentInvoiceRecipient))return"Choose a different invoice recipient. That address belongs to the team member being removed."}function buildInteractiveRemoveCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams members remove <member>",void 0,{excludeFlags:["--non-interactive"]})}async function membersRemove(client,argv){let parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification([formatOption,jsonOption]))}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult;function fail(reason,message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),getExitCodeForReason(reason)):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
156
177
  `),getExitCodeForReason(reason)):(output_manager_default.fatal(message),getExitCodeForReason(reason))}if(parsedArgs.args.length!==1)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Provide exactly 1 team member. Usage: `vercel teams members remove <member>`",{next:[{command:buildInteractiveRemoveCommand(client),when:"Remove a member from the currently scoped team"}]});let teamId=await client.resolveCurrentTeam();if(!teamId)return fail("team_scope_required","Select a team. Run `vercel teams switch <slug>` or pass `--scope`.",{next:[{command:buildCommandWithGlobalFlags(client.argv,"teams switch <slug>"),when:"Select the team containing the member"}]});let identifier=parsedArgs.args[0],team,member;try{[team,member]=await Promise.all([getTeamByIdOrSlug(client,teamId),getTeamMemberByIdentifier(client,teamId,identifier)])}catch{return fail(AGENT_REASON.API_ERROR,"Failed to resolve the team member. Try again.")}if(!member){let listCommand=buildCommandWithGlobalFlags(client.argv,"teams members");return fail(AGENT_REASON.NOT_FOUND,`Couldn't find that team member. Run \`${listCommand}\` to list current members.`,{next:[{command:listCommand,when:"List current members to find the right identifier"}]})}let label=teamMemberPreviewLabel(member),teamLabel=`${team.name} (${team.slug})`,currentInvoiceRecipient=team.billing?.email,requiresInvoiceRecipient=matchesEmail(currentInvoiceRecipient,member.email),invoiceRecipient;if(requiresInvoiceRecipient&&currentInvoiceRecipient){if(!canPrompt(client)){let actionRequired={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.MISSING_REQUIREMENTS,action:AGENT_ACTION.MISSING_ARGUMENTS,userActionRequired:!0,message:"Invoices currently go to this team member. Rerun this command in an interactive terminal to choose where future invoices are sent.",hint:"Run this command in an interactive terminal to choose a new invoice recipient.",missing:["interactive_terminal"],data:{team:{id:team.id,name:team.name,slug:team.slug},member:{uid:member.uid,email:member.email,username:member.username},invoiceRecipient:currentInvoiceRecipient},next:[{command:buildInteractiveRemoveCommand(client),when:"A user reruns this command in an interactive terminal"}]};return outputActionRequired(client,actionRequired,1),client.stdout.write(`${JSON.stringify(actionRequired,null,2)}
157
178
  `),1}output_manager_default.print(`
158
179
  `),output_manager_default.print(`Invoices currently go to ${currentInvoiceRecipient}. Future invoices will be sent to:`),invoiceRecipient=(await client.input.text({message:"New invoice recipient?",validate:value=>!invoiceRecipientError(value.trim(),member,currentInvoiceRecipient)})).trim();let error=invoiceRecipientError(invoiceRecipient,member,currentInvoiceRecipient);if(error)return fail(AGENT_REASON.INVALID_ARGUMENTS,error)}if(!canPrompt(client)){let actionRequired={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,userActionRequired:!0,message:"To remove this team member, rerun the command in an interactive terminal and confirm the prompt. No team member was removed.",hint:"Run this command in an interactive terminal to review and confirm removal.",data:{team:{id:team.id,name:team.name,slug:team.slug},member:{uid:member.uid,email:member.email,username:member.username}},next:[{command:buildInteractiveRemoveCommand(client),when:"A user runs this command in an interactive terminal"}]};return outputActionRequired(client,actionRequired,1),client.stdout.write(`${JSON.stringify(actionRequired,null,2)}
@@ -160,11 +181,11 @@ Please select a team scope using ${getCommandName("switch")} or use ${cmd("--sco
160
181
  `),printAlignedLabel("Team",teamLabel),printAlignedLabel("Member",label),requiresInvoiceRecipient&&invoiceRecipient&&currentInvoiceRecipient&&(printAlignedLabel("Invoice To",currentInvoiceRecipient),printAlignedLabel("New Recipient",invoiceRecipient)),output_manager_default.print(`
161
182
  `),!await client.input.confirm(requiresInvoiceRecipient?"Update the invoice recipient and remove this team member?":"Remove this team member?",!1))return output_manager_default.log("Canceled."),0;if(requiresInvoiceRecipient&&invoiceRecipient&&currentInvoiceRecipient)try{await client.fetch(`/stripe/invoices/settings?${new URLSearchParams({teamId}).toString()}`,{method:"PATCH",body:{email:invoiceRecipient}}),printAlignedLabel("Updated","Invoice recipient",{gutter:"\u2713"})}catch{return fail(AGENT_REASON.API_ERROR,"Couldn't update the invoice recipient. Check your billing permissions or try again.")}try{let result=await client.fetch(`/v2/teams/${encodeURIComponent(teamId)}/members/${encodeURIComponent(member.uid)}`,{method:"DELETE"});return jsonOutput?(client.stdout.write(`${JSON.stringify(result,null,2)}
162
183
  `),0):(printAlignedLabel("Removed",label,{gutter:"\u2713"}),printAlignedLabel("Team",teamLabel),0)}catch{return fail(AGENT_REASON.API_ERROR,requiresInvoiceRecipient?"Invoice recipient updated, but the team member was not removed. Try removing them again.":"Failed to remove the team member. Try again.")}}async function members(client,argv){if(argv[0]==="invite")return invite(client,argv.slice(1));if(argv[0]==="remove"||argv[0]==="rm")return membersRemove(client,argv.slice(1));let parsedArgs,flagsSpecification=getFlagsSpecification(membersSubcommand.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 next=parseNumericCursor(parsedArgs.flags["--next"]),limit=parsedArgs.flags["--limit"],formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(typeof next<"u"&&!Number.isInteger(next))return output_manager_default.error(INVALID_NEXT_MESSAGE),2;try{getPaginationOpts(parsedArgs.flags)}catch(error){return output_manager_default.error(error instanceof Error?error.message:String(error)),1}let teamId=await client.resolveCurrentTeam();if(!teamId)return output_manager_default.error("Team scope is required. Run `vercel teams switch <slug>` or pass `--scope`."),1;let query=new URLSearchParams({limit:String(limit??20)});next&&query.set("until",String(next));let result=await client.fetch(`/v2/teams/${teamId}/members?${query}`),members2=result.members||[],{pagination}=result;if(asJson)return client.stdout.write(`${JSON.stringify({members:members2,pagination},null,2)}
163
- `),0;let rows=[["uid","Identity","Role"].map(str=>(0,import_chalk47.gray)(str)),...members2.map(member=>[member.uid,member.username||member.email||"",member.role||""])];if(client.stderr.write(`${table(rows,{hsep:3})}
184
+ `),0;let rows=[["uid","Identity","Role"].map(str=>(0,import_chalk48.gray)(str)),...members2.map(member=>[member.uid,member.username||member.email||"",member.role||""])];if(client.stderr.write(`${table(rows,{hsep:3})}
164
185
  `),pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["--next","-N"]),nextCmd=`${packageName} teams members${flags} --next ${pagination.next}`;output_manager_default.print(`
165
- `),printNextPageCommand(nextCmd)}return 0}var import_chalk48=__toESM(require_source(),1);async function sso(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(ssoSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("No team context. Run `vercel switch` or use --scope."),1;try{let full=await client.fetch(`/teams/${encodeURIComponent(team.id)}`),payload={teamId:full.id,slug:full.slug,name:full.name,saml:full.saml??null};return formatResult.jsonOutput?(client.stdout.write(`${JSON.stringify(payload,null,2)}
166
- `),0):(output_manager_default.log(`${import_chalk48.default.bold("Team")} ${full.name} (${import_chalk48.default.cyan(full.slug)})`),full.saml?(output_manager_default.log(`${import_chalk48.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`),full.saml.connection?.state&&output_manager_default.log(`${import_chalk48.default.cyan("Connection state:")} ${full.saml.connection.state}`)):output_manager_default.log("No SAML configuration on this team (or not visible to your token)."),0)}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`API error (${err.status})`),1;throw err}}var TeamsTelemetryClient=class extends TelemetryClient{trackCliSubcommandInvite(actual){actual&&this.trackCliSubcommand({subcommand:"invite",value:actual})}trackCliSubcommandCreate(actual){actual&&this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandSwitch(actual){actual&&this.trackCliSubcommand({subcommand:"switch",value:actual})}trackCliSubcommandList(actual){actual&&this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRequest(actual){actual&&this.trackCliSubcommand({subcommand:"request",value:actual})}trackCliSubcommandSso(actual){actual&&this.trackCliSubcommand({subcommand:"sso",value:actual})}trackCliSubcommandMembers(actual){actual&&this.trackCliSubcommand({subcommand:"members",value:actual})}};var COMMAND_CONFIG12={list:["ls","list"],switch:["switch","change"],add:["create","add"],invite:["invite"],request:["request","access-request"],sso:["sso"],members:["members","member"]};async function teams(client){let telemetry=new TeamsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(teamsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}parsedArgs.args[0]==="switch"&&parsedArgs.args.unshift("teams");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG12),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("teams",subcommand),output_manager_default.print(help(teamsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:teamsCommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(listSubcommand7),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list6(client,args));case"switch":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(switchSubcommand),0):(telemetry.trackCliSubcommandSwitch(subcommandOriginal),subcommandOriginal==="change"&&warnDeprecatedSubcommand(client,"teams change","teams switch"),change(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(addSubcommand4),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"teams add","teams create"),add4(client,args));case"invite":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(inviteSubcommand),0):(telemetry.trackCliSubcommandInvite(subcommandOriginal),invite(client,args));case"request":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(requestSubcommand),0):(telemetry.trackCliSubcommandRequest(subcommandOriginal),subcommandOriginal==="access-request"&&warnDeprecatedSubcommand(client,"teams access-request","teams request"),request2(client,args));case"sso":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(ssoSubcommand),0):(telemetry.trackCliSubcommandSso(subcommandOriginal),sso(client,args));case"members":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),args[0]==="invite"?(printHelp(membersInviteSubcommand),0):args[0]==="remove"||args[0]==="rm"?(printHelp(membersRemoveSubcommand),0):(printHelp(membersSubcommand),0)):(telemetry.trackCliSubcommandMembers(args[0]==="invite"?"members invite":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),members(client,args));default:{let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForTeamsCli);return fallback!==null?fallback:(output_manager_default.error("Please specify a valid subcommand: add | ls | switch | invite | request | sso | members"),output_manager_default.print(help(teamsCommand,{stream:client.stderr,columns:client.stderr.columns})),2)}}}var import_chalk49=__toESM(require_source(),1);async function ls4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be between 1 and 100."),2;let next=parsedArgs.flags["--next"],params=new URLSearchParams;typeof limit=="number"&&params.set("limit",String(limit)),typeof next=="string"&&params.set("until",next);let qs=params.toString(),path3=`/v6/user/tokens${qs?`?${qs}`:""}`,result=await client.fetch(path3,{useCurrentTeam:!1}),tokens=result.tokens||[];if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
167
- `),0;if(tokens.length===0)return output_manager_default.log("No tokens found."),0;let rows=[["id","name","type","active"].map(h=>(0,import_chalk49.gray)(h)),...tokens.map(t=>[t.id??"",t.name??"",t.type??"",t.active===void 0?"":String(t.active)])];if(client.stderr.write(`${table(rows,{hsep:2})}
186
+ `),printNextPageCommand(nextCmd)}return 0}var import_chalk49=__toESM(require_source(),1);async function sso(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(ssoSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("No team context. Run `vercel switch` or use --scope."),1;try{let full=await client.fetch(`/teams/${encodeURIComponent(team.id)}`),payload={teamId:full.id,slug:full.slug,name:full.name,saml:full.saml??null};return formatResult.jsonOutput?(client.stdout.write(`${JSON.stringify(payload,null,2)}
187
+ `),0):(output_manager_default.log(`${import_chalk49.default.bold("Team")} ${full.name} (${import_chalk49.default.cyan(full.slug)})`),full.saml?(output_manager_default.log(`${import_chalk49.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`),full.saml.connection?.state&&output_manager_default.log(`${import_chalk49.default.cyan("Connection state:")} ${full.saml.connection.state}`)):output_manager_default.log("No SAML configuration on this team (or not visible to your token)."),0)}catch(err){if(isAPIError(err))return output_manager_default.error(err.serverMessage||`API error (${err.status})`),1;throw err}}var TeamsTelemetryClient=class extends TelemetryClient{trackCliSubcommandInvite(actual){actual&&this.trackCliSubcommand({subcommand:"invite",value:actual})}trackCliSubcommandCreate(actual){actual&&this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandSwitch(actual){actual&&this.trackCliSubcommand({subcommand:"switch",value:actual})}trackCliSubcommandList(actual){actual&&this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandRequest(actual){actual&&this.trackCliSubcommand({subcommand:"request",value:actual})}trackCliSubcommandSso(actual){actual&&this.trackCliSubcommand({subcommand:"sso",value:actual})}trackCliSubcommandMembers(actual){actual&&this.trackCliSubcommand({subcommand:"members",value:actual})}};var COMMAND_CONFIG12={list:["ls","list"],switch:["switch","change"],add:["create","add"],invite:["invite"],request:["request","access-request"],sso:["sso"],members:["members","member"]};async function teams(client){let telemetry=new TeamsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(teamsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}parsedArgs.args[0]==="switch"&&parsedArgs.args.unshift("teams");let{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG12),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("teams",subcommand),output_manager_default.print(help(teamsCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:teamsCommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(listSubcommand7),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list7(client,args));case"switch":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(switchSubcommand),0):(telemetry.trackCliSubcommandSwitch(subcommandOriginal),subcommandOriginal==="change"&&warnDeprecatedSubcommand(client,"teams change","teams switch"),change(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(addSubcommand4),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"teams add","teams create"),add4(client,args));case"invite":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(inviteSubcommand),0):(telemetry.trackCliSubcommandInvite(subcommandOriginal),invite(client,args));case"request":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(requestSubcommand),0):(telemetry.trackCliSubcommandRequest(subcommandOriginal),subcommandOriginal==="access-request"&&warnDeprecatedSubcommand(client,"teams access-request","teams request"),request2(client,args));case"sso":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),printHelp(ssoSubcommand),0):(telemetry.trackCliSubcommandSso(subcommandOriginal),sso(client,args));case"members":return needHelp?(telemetry.trackCliFlagHelp("teams",subcommandOriginal),args[0]==="invite"?(printHelp(membersInviteSubcommand),0):args[0]==="remove"||args[0]==="rm"?(printHelp(membersRemoveSubcommand),0):(printHelp(membersSubcommand),0)):(telemetry.trackCliSubcommandMembers(args[0]==="invite"?"members invite":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),members(client,args));default:{let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForTeamsCli);return fallback!==null?fallback:(output_manager_default.error("Please specify a valid subcommand: add | ls | switch | invite | request | sso | members"),output_manager_default.print(help(teamsCommand,{stream:client.stderr,columns:client.stderr.columns})),2)}}}var import_chalk50=__toESM(require_source(),1);async function ls4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand8.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be between 1 and 100."),2;let next=parsedArgs.flags["--next"],params=new URLSearchParams;typeof limit=="number"&&params.set("limit",String(limit)),typeof next=="string"&&params.set("until",next);let qs=params.toString(),path3=`/v6/user/tokens${qs?`?${qs}`:""}`,result=await client.fetch(path3,{useCurrentTeam:!1}),tokens=result.tokens||[];if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
188
+ `),0;if(tokens.length===0)return output_manager_default.log("No tokens found."),0;let rows=[["id","name","type","active"].map(h=>(0,import_chalk50.gray)(h)),...tokens.map(t=>[t.id??"",t.name??"",t.type??"",t.active===void 0?"":String(t.active)])];if(client.stderr.write(`${table(rows,{hsep:2})}
168
189
  `),result.pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["_","--next","-N"]),nextCmd=`${packageName} tokens ls${flags} --next ${quoteArg(String(result.pagination.next))}`;output_manager_default.print(`
169
190
  `),printNextPageCommand(nextCmd)}return 0}var import_open3=__toESM(require_open(),1);import{KNOWN_AGENTS}from"@vercel/detect-agent";var VERCEL_ACCOUNT_TOKENS_URL="https://vercel.com/account/tokens",CLASSIC_TOKEN_GUIDANCE=`Creating a new token requires a classic personal access token. Sessions from "vercel login" use OAuth and cannot call the create-token API.
170
191
 
@@ -177,37 +198,37 @@ Common cases:
177
198
  \u2022 Team-only, project-only, or limited product tokens (for example some "vcp_" tokens) cannot mint new tokens.
178
199
  \u2022 Create a new classic token in the dashboard (Account \u2192 Settings \u2192 Tokens) with access to your personal account / full token permissions.
179
200
  \u2022 Then set VERCEL_TOKEN or use --token with that value and run this command again.`,USER_SCOPE_AGENT_HINT=`Creating a personal token requires a classic token that includes full user account scope. Team-scoped, project-scoped, or narrow product tokens are rejected with HTTP 403. Create a classic personal access token at ${VERCEL_ACCOUNT_TOKENS_URL} with account-level access, set VERCEL_TOKEN or --token, then re-run.`;function normalizeApiMessage(message){return message.replace(/\s*\(\d{3}\)\s*$/,"").trim()}function getSanitizedRerunCommand(client){let rerunArgs=stripSensitiveAuthArgs(client.argv.slice(2));return getCommandNamePlain(rerunArgs.join(" ").trim())}function isClassicTokenRequiredForCreateError(err){if(!isAPIError(err)||err.status!==403)return!1;let raw=err.serverMessage||err.message;return normalizeApiMessage(raw)==="Only user authentication tokens can be used to create new tokens."}function isTokenUserScopeRequiredError(err){return!isAPIError(err)||err.status!==403?!1:normalizeApiMessage(err.serverMessage||err.message).startsWith('To create a token you must be authenticated to scope "')}function tokensAddRecoveryNext(client,rerun,rerunWhen){return[{command:openUrlInBrowserCommand(VERCEL_ACCOUNT_TOKENS_URL),when:"Open the Vercel dashboard to create a classic personal access token"},{command:"export VERCEL_TOKEN='<class_access_token>'",when:"Paste your classic token from the dashboard (replace <class_access_token>); on Windows use set VERCEL_TOKEN=<class_access_token> in cmd or $env:VERCEL_TOKEN in PowerShell"},{command:rerun,when:rerunWhen}]}async function openTokensDashboardInBrowser(client){let isCursorAgent=client.agentName===KNOWN_AGENTS.CURSOR||client.agentName===KNOWN_AGENTS.CURSOR_CLI;if(!(process.env.CI&&!isCursorAgent))try{(await(0,import_open3.default)(VERCEL_ACCOUNT_TOKENS_URL))?.on?.("error",()=>{})}catch{}}async function add5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand5.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs,name=args[0]?.trim();if(!name)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_arguments",message:'Token name is required. Example: `vercel tokens create "My token"`'},2),output_manager_default.error('Token name is required. Example: `vercel tokens create "My token"`'),2;if(args.length>1)return output_manager_default.error("Too many arguments. Pass a single token name."),2;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput,projectId=parsedArgs.flags["--project"],body={name};typeof projectId=="string"&&projectId.length>0&&(body.projectId=projectId);let result;try{result=await client.fetch("/v3/user/tokens",{method:"POST",body,useCurrentTeam:!1})}catch(err){if(isClassicTokenRequiredForCreateError(err)){await openTokensDashboardInBrowser(client);let rerun=getSanitizedRerunCommand(client);return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.CLASSIC_TOKEN_REQUIRED,message:"Creating tokens requires a classic personal access token; OAuth login cannot create new tokens.",userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:CLASSIC_TOKEN_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun,"Re-run after the token is set (or use --token <class_access_token> instead of export)")},1),output_manager_default.error(CLASSIC_TOKEN_GUIDANCE),1}if(isTokenUserScopeRequiredError(err)){await openTokensDashboardInBrowser(client);let rerun=getSanitizedRerunCommand(client),apiMessage=normalizeApiMessage(isAPIError(err)?err.serverMessage||err.message:String(err));return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,{status:"error",reason:AGENT_REASON.TOKEN_USER_SCOPE_REQUIRED,message:apiMessage,userActionRequired:!0,verification_uri:VERCEL_ACCOUNT_TOKENS_URL,hint:USER_SCOPE_AGENT_HINT,next:tokensAddRecoveryNext(client,rerun,"Re-run with a classic token that has full user account scope (or pass --token <class_access_token>)")},1),output_manager_default.error(USER_SCOPE_GUIDANCE),output_manager_default.error(""),output_manager_default.error(apiMessage),1}return printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify(result,null,2)}
180
- `),0):(output_manager_default.success("Token created. Save the value below \u2014 it will not be shown again."),result.bearerToken&&output_manager_default.log(result.bearerToken),result.token?.id&&output_manager_default.log(`id: ${result.token.id}`),0)}async function rm4(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand5.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let id=parsedArgs.args[0];if(!id)return outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Token id is required. Example: `vercel tokens revoke tok_abc123`",hint:"Run `tokens ls` to list ids, then pass the id to `tokens revoke`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"tokens ls"),when:"List personal access token ids for the current account"},{command:buildCommandWithGlobalFlags(client.argv,"tokens revoke <token_id>"),when:"Revoke a token after replacing <token_id> with an id from the list"}]},2),output_manager_default.error("Token id is required. Example: `vercel tokens revoke tok_abc123`"),2;if(parsedArgs.args.length>1)return output_manager_default.error("Too many arguments. Pass a single token id."),2;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput;if(!parsedArgs.flags["--yes"]&&!asJson)if(canPrompt(client)){if(!await client.input.confirm(`Revoke token ${id}? Anything that uses it will stop working.`,!1))return output_manager_default.log("Canceled. Nothing was changed."),130}else output_manager_default.warning("Revoking a token without a terminal will need --yes in a future major version. Add --yes to keep this working.");return await client.fetch(`/v3/user/tokens/${encodeURIComponent(id)}`,{method:"DELETE",useCurrentTeam:!1}),asJson?(client.stdout.write(`${JSON.stringify({ok:!0,id},null,2)}
181
- `),0):(output_manager_default.success(`Revoked token ${id}`),0)}var TokensTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandRevoke(actual){this.trackCliSubcommand({subcommand:"revoke",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG13={add:["add","create"],revoke:getCommandAliases(removeSubcommand5),ls:["ls","list"]};async function main7(client){let parsedArgs,flagsSpecification=getFlagsSpecification(tokensCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new TokensTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG13),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("tokens"),output_manager_default.print(help(tokensCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:tokensCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(addSubcommand5)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"tokens add","tokens create"),add5(client,args));case"revoke":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(removeSubcommand5)):(telemetry.trackCliSubcommandRevoke(subcommandOriginal),subcommandOriginal!=="revoke"&&warnDeprecatedSubcommand(client,`tokens ${subcommandOriginal}`,"tokens revoke"),rm4(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(listSubcommand8)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls4(client,args))}}var import_ms9=__toESM(require_ms(),1),import_chalk50=__toESM(require_source(),1),import_pluralize4=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls5(client,argv){let telemetry=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand10.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk50.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
182
- `)}else output_manager_default.log(`${(0,import_pluralize4.default)("Webhook",webhooks.length,!0)} found under ${import_chalk50.default.bold(contextName)} ${import_chalk50.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
183
-
184
- `));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms9.default)(current-webhook.createdAt):"-",eventsDisplay=webhook.events.length>2?`${webhook.events.slice(0,2).join(", ")} +${webhook.events.length-2}`:webhook.events.join(", ");return[webhook.id,webhook.url,eventsDisplay,import_chalk50.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk51=__toESM(require_source(),1);var WebhooksGetTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function get(client,argv){let telemetry=new WebhooksGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args,getStamp=stamp_default();if(!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:getCommandNamePlain("webhooks ls")},{command:getCommandNamePlain("webhooks inspect <id>")}]},2),output_manager_default.error(`${getCommandName("webhooks inspect <id>")} expects one argument`),2;telemetry.trackCliArgumentId(webhookId),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk51.default.cyan(`${getCommandName("webhooks inspect <id>")}`)}`),2;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk51.default.bold(contextName)}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:getCommandNamePlain("webhooks ls")}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(asJson){output_manager_default.stopSpinner();let jsonOutput=client.nonInteractive?{status:"ok",webhook,message:`Webhook ${webhookId} found.`,next:[{command:getCommandNamePlain(`webhooks delete ${webhookId} --yes`),when:"Delete this webhook"}]}:webhook;client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
185
- `)}else{output_manager_default.log(`Webhook ${webhookId} found under ${import_chalk51.default.bold(contextName)} ${import_chalk51.default.gray(getStamp())}`),output_manager_default.print(`
186
- `),output_manager_default.print(import_chalk51.default.bold(` General
187
-
188
- `)),output_manager_default.print(` ${import_chalk51.default.cyan("ID")} ${webhook.id}
189
- `),output_manager_default.print(` ${import_chalk51.default.cyan("URL")} ${webhook.url}
190
- `),output_manager_default.print(` ${import_chalk51.default.cyan("Created At")} ${formatDate(webhook.createdAt)}
191
- `),output_manager_default.print(` ${import_chalk51.default.cyan("Updated At")} ${formatDate(webhook.updatedAt)}
201
+ `),0):(output_manager_default.success("Token created. Save the value below \u2014 it will not be shown again."),result.bearerToken&&output_manager_default.log(result.bearerToken),result.token?.id&&output_manager_default.log(`id: ${result.token.id}`),0)}async function rm5(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand5.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let id=parsedArgs.args[0];if(!id)return outputAgentError(client,{status:"error",reason:"missing_arguments",message:"Token id is required. Example: `vercel tokens revoke tok_abc123`",hint:"Run `tokens ls` to list ids, then pass the id to `tokens revoke`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"tokens ls"),when:"List personal access token ids for the current account"},{command:buildCommandWithGlobalFlags(client.argv,"tokens revoke <token_id>"),when:"Revoke a token after replacing <token_id> with an id from the list"}]},2),output_manager_default.error("Token id is required. Example: `vercel tokens revoke tok_abc123`"),2;if(parsedArgs.args.length>1)return output_manager_default.error("Too many arguments. Pass a single token id."),2;let validation=validateJsonOutput(parsedArgs.flags);if(!validation.valid)return output_manager_default.error(validation.error),1;let asJson=validation.jsonOutput;if(!parsedArgs.flags["--yes"]&&!asJson)if(canPrompt(client)){if(!await client.input.confirm(`Revoke token ${id}? Anything that uses it will stop working.`,!1))return output_manager_default.log("Canceled. Nothing was changed."),130}else output_manager_default.warning("Revoking a token without a terminal will need --yes in a future major version. Add --yes to keep this working.");return await client.fetch(`/v3/user/tokens/${encodeURIComponent(id)}`,{method:"DELETE",useCurrentTeam:!1}),asJson?(client.stdout.write(`${JSON.stringify({ok:!0,id},null,2)}
202
+ `),0):(output_manager_default.success(`Revoked token ${id}`),0)}var TokensTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandRevoke(actual){this.trackCliSubcommand({subcommand:"revoke",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG13={add:["add","create"],revoke:getCommandAliases(removeSubcommand5),ls:["ls","list"]};async function main7(client){let parsedArgs,flagsSpecification=getFlagsSpecification(tokensCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new TokensTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG13),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("tokens"),output_manager_default.print(help(tokensCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:tokensCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(addSubcommand5)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"tokens add","tokens create"),add5(client,args));case"revoke":return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(removeSubcommand5)):(telemetry.trackCliSubcommandRevoke(subcommandOriginal),subcommandOriginal!=="revoke"&&warnDeprecatedSubcommand(client,`tokens ${subcommandOriginal}`,"tokens revoke"),rm5(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("tokens",subcommandOriginal),printHelp(listSubcommand8)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls4(client,args))}}var import_ms9=__toESM(require_ms(),1),import_chalk51=__toESM(require_source(),1),import_pluralize4=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls5(client,argv){let telemetry=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand10.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk51.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
203
+ `)}else output_manager_default.log(`${(0,import_pluralize4.default)("Webhook",webhooks.length,!0)} found under ${import_chalk51.default.bold(contextName)} ${import_chalk51.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
204
+
205
+ `));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms9.default)(current-webhook.createdAt):"-",eventsDisplay=webhook.events.length>2?`${webhook.events.slice(0,2).join(", ")} +${webhook.events.length-2}`:webhook.events.join(", ");return[webhook.id,webhook.url,eventsDisplay,import_chalk51.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk52=__toESM(require_source(),1);var WebhooksGetTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function get(client,argv){let telemetry=new WebhooksGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args,getStamp=stamp_default();if(!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:getCommandNamePlain("webhooks ls")},{command:getCommandNamePlain("webhooks inspect <id>")}]},2),output_manager_default.error(`${getCommandName("webhooks inspect <id>")} expects one argument`),2;telemetry.trackCliArgumentId(webhookId),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk52.default.cyan(`${getCommandName("webhooks inspect <id>")}`)}`),2;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk52.default.bold(contextName)}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:getCommandNamePlain("webhooks ls")}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(asJson){output_manager_default.stopSpinner();let jsonOutput=client.nonInteractive?{status:"ok",webhook,message:`Webhook ${webhookId} found.`,next:[{command:getCommandNamePlain(`webhooks delete ${webhookId} --yes`),when:"Delete this webhook"}]}:webhook;client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
206
+ `)}else{output_manager_default.log(`Webhook ${webhookId} found under ${import_chalk52.default.bold(contextName)} ${import_chalk52.default.gray(getStamp())}`),output_manager_default.print(`
207
+ `),output_manager_default.print(import_chalk52.default.bold(` General
208
+
209
+ `)),output_manager_default.print(` ${import_chalk52.default.cyan("ID")} ${webhook.id}
210
+ `),output_manager_default.print(` ${import_chalk52.default.cyan("URL")} ${webhook.url}
211
+ `),output_manager_default.print(` ${import_chalk52.default.cyan("Created At")} ${formatDate(webhook.createdAt)}
212
+ `),output_manager_default.print(` ${import_chalk52.default.cyan("Updated At")} ${formatDate(webhook.updatedAt)}
192
213
  `),output_manager_default.print(`
193
- `),output_manager_default.print(import_chalk51.default.bold(` Events
214
+ `),output_manager_default.print(import_chalk52.default.bold(` Events
194
215
 
195
216
  `));for(let event of webhook.events)output_manager_default.print(` - ${event}
196
217
  `);if(webhook.projectIds&&webhook.projectIds.length>0)if(output_manager_default.print(`
197
- `),output_manager_default.print(import_chalk51.default.bold(` Projects
218
+ `),output_manager_default.print(import_chalk52.default.bold(` Projects
198
219
 
199
220
  `)),webhook.projectsMetadata&&webhook.projectsMetadata.length>0)for(let project of webhook.projectsMetadata)output_manager_default.print(` - ${project.name} (${project.id})
200
221
  `);else for(let projectId of webhook.projectIds)output_manager_default.print(` - ${projectId}
201
222
  `);output_manager_default.print(`
202
- `)}return 0}var import_chalk52=__toESM(require_source(),1);async function createWebhook(client,payload){return await client.fetch("/v1/webhooks",{method:"POST",body:payload})}var WebhooksCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentUrl(url){url&&this.trackCliArgument({arg:"url",value:this.redactedValue})}trackCliOptionEvent(events){events&&events.length>0&&this.trackCliOption({option:"event",value:String(events.length)})}trackCliOptionProject(projects2){projects2&&projects2.length>0&&this.trackCliOption({option:"project",value:String(projects2.length)})}};var cachedEvents=null;async function getWebhookEvents(){if(cachedEvents)return cachedEvents;let cache=new OpenApiCache;if(!await cache.load())return output_manager_default.debug("Failed to load OpenAPI spec for webhook events"),[];let createWebhookEndpoint=cache.getEndpoints().find(e=>e.path==="/v1/webhooks"&&e.method==="POST");if(!createWebhookEndpoint)return output_manager_default.debug("Could not find POST /v1/webhooks endpoint in OpenAPI spec"),[];let eventsField=cache.getBodyFields(createWebhookEndpoint).find(f=>f.name==="events");return eventsField?.enumValues?(cachedEvents=eventsField.enumValues.filter(v=>typeof v=="string"),cachedEvents):(output_manager_default.debug("Could not find events enum in webhook endpoint"),[])}async function validateWebhookEvents(events){let validEvents=await getWebhookEvents();if(validEvents.length===0)return[];let validSet=new Set(validEvents);return events.filter(e=>!validSet.has(e))}var WEBHOOKS_EVENTS_DOCS_URL="https://vercel.com/docs/webhooks/webhooks-api";async function create3(client,argv){let telemetry=new WebhooksCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[url]=args;if(url)try{let urlObj=new URL(url);if(!["http:","https:"].includes(urlObj.protocol))return output_manager_default.error("Webhook URL must use http or https protocol"),1}catch{return output_manager_default.error(`Invalid URL: ${url}`),1}else{if(client.nonInteractive){let argv2=client.argv.slice(2),subcommandParts=argv2.slice(0,2),rest=argv2.slice(2),subcommandWithPlaceholder=`${subcommandParts.join(" ")} <url>${rest.length?` ${rest.join(" ")}`:""}`;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_URL,message:"Webhook URL is required. Provide URL as the first argument.",next:[{command:getCommandNamePlain(subcommandWithPlaceholder)}]},2)}url=await client.input.text({message:"Webhook URL:",validate:val=>{if(!val)return"URL is required";try{let urlObj=new URL(val);if(!["http:","https:"].includes(urlObj.protocol))return"Webhook URL must use http or https protocol"}catch{return"Invalid URL"}return!0}})}let projectIds=opts["--project"],eventFlags=opts["--event"],events;if(!eventFlags||eventFlags.length===0){client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_EVENTS,message:"At least one event is required. Use --event <event> (can be repeated).",next:[{command:getCommandNamePlain("webhooks create <url> --event <event>")}]},2);let availableEvents=await getWebhookEvents()??[];if(availableEvents.length===0)return output_manager_default.error("Could not fetch available webhook events. Please specify events using --event options."),1;events=await client.input.checkbox({message:"Select events:",choices:availableEvents.map(event=>({name:event,value:event})),validate:selected=>selected.length===0?"At least one event is required":!0})}else{let invalidEvents=await validateWebhookEvents(eventFlags);if(invalidEvents.length>0){if(client.nonInteractive){let suggested=buildCreateCommandWithEventPlaceholder(client.argv,url);return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}. Use a valid event name (e.g. deployment.created).`,hint:`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`,next:[{command:suggested,when:"use a valid --event value"}]},2),2}return output_manager_default.error(`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}`),2}events=eventFlags}telemetry.trackCliArgumentUrl(url),telemetry.trackCliOptionEvent(events),telemetry.trackCliOptionProject(projectIds);let contextName=await getContextName(client),createStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Creating webhook under ${import_chalk52.default.bold(contextName)}`);try{let webhook=await createWebhook(client,{url,events,projectIds});if(client.nonInteractive){let json={status:AGENT_STATUS.OK,webhook:{id:webhook.id,url:webhook.url,events:webhook.events,...webhook.projectIds?.length?{projectIds:webhook.projectIds}:{}},message:`Webhook ${webhook.id} created.`,next:[{command:getCommandNamePlain(`webhooks inspect ${webhook.id}`),when:"Inspect the webhook"}]};return webhook.secret&&(json.secret=webhook.secret),client.stdout.write(`${JSON.stringify(json,null,2)}
203
- `),0}return output_manager_default.stopSpinner(),output_manager_default.success(`Webhook created: ${import_chalk52.default.bold(webhook.id)} ${createStamp()}`),output_manager_default.print(`
204
- `),output_manager_default.print(import_chalk52.default.bold(` Webhook Details
205
-
206
- `)),output_manager_default.print(` ${import_chalk52.default.cyan("ID".padEnd(10))}${webhook.id}
207
- `),output_manager_default.print(` ${import_chalk52.default.cyan("URL".padEnd(10))}${webhook.url}
208
- `),output_manager_default.print(` ${import_chalk52.default.cyan("Events".padEnd(10))}${webhook.events.join(", ")}
209
- `),webhook.projectIds&&webhook.projectIds.length>0&&output_manager_default.print(` ${import_chalk52.default.cyan("Projects".padEnd(10))}${webhook.projectIds.join(", ")}
223
+ `)}return 0}var import_chalk53=__toESM(require_source(),1);async function createWebhook(client,payload){return await client.fetch("/v1/webhooks",{method:"POST",body:payload})}var WebhooksCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentUrl(url){url&&this.trackCliArgument({arg:"url",value:this.redactedValue})}trackCliOptionEvent(events){events&&events.length>0&&this.trackCliOption({option:"event",value:String(events.length)})}trackCliOptionProject(projects2){projects2&&projects2.length>0&&this.trackCliOption({option:"project",value:String(projects2.length)})}};var cachedEvents=null;async function getWebhookEvents(){if(cachedEvents)return cachedEvents;let cache=new OpenApiCache;if(!await cache.load())return output_manager_default.debug("Failed to load OpenAPI spec for webhook events"),[];let createWebhookEndpoint=cache.getEndpoints().find(e=>e.path==="/v1/webhooks"&&e.method==="POST");if(!createWebhookEndpoint)return output_manager_default.debug("Could not find POST /v1/webhooks endpoint in OpenAPI spec"),[];let eventsField=cache.getBodyFields(createWebhookEndpoint).find(f=>f.name==="events");return eventsField?.enumValues?(cachedEvents=eventsField.enumValues.filter(v=>typeof v=="string"),cachedEvents):(output_manager_default.debug("Could not find events enum in webhook endpoint"),[])}async function validateWebhookEvents(events){let validEvents=await getWebhookEvents();if(validEvents.length===0)return[];let validSet=new Set(validEvents);return events.filter(e=>!validSet.has(e))}var WEBHOOKS_EVENTS_DOCS_URL="https://vercel.com/docs/webhooks/webhooks-api";async function create3(client,argv){let telemetry=new WebhooksCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand2.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[url]=args;if(url)try{let urlObj=new URL(url);if(!["http:","https:"].includes(urlObj.protocol))return output_manager_default.error("Webhook URL must use http or https protocol"),1}catch{return output_manager_default.error(`Invalid URL: ${url}`),1}else{if(client.nonInteractive){let argv2=client.argv.slice(2),subcommandParts=argv2.slice(0,2),rest=argv2.slice(2),subcommandWithPlaceholder=`${subcommandParts.join(" ")} <url>${rest.length?` ${rest.join(" ")}`:""}`;outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_URL,message:"Webhook URL is required. Provide URL as the first argument.",next:[{command:getCommandNamePlain(subcommandWithPlaceholder)}]},2)}url=await client.input.text({message:"Webhook URL:",validate:val=>{if(!val)return"URL is required";try{let urlObj=new URL(val);if(!["http:","https:"].includes(urlObj.protocol))return"Webhook URL must use http or https protocol"}catch{return"Invalid URL"}return!0}})}let projectIds=opts["--project"],eventFlags=opts["--event"],events;if(!eventFlags||eventFlags.length===0){client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_EVENTS,message:"At least one event is required. Use --event <event> (can be repeated).",next:[{command:getCommandNamePlain("webhooks create <url> --event <event>")}]},2);let availableEvents=await getWebhookEvents()??[];if(availableEvents.length===0)return output_manager_default.error("Could not fetch available webhook events. Please specify events using --event options."),1;events=await client.input.checkbox({message:"Select events:",choices:availableEvents.map(event=>({name:event,value:event})),validate:selected=>selected.length===0?"At least one event is required":!0})}else{let invalidEvents=await validateWebhookEvents(eventFlags);if(invalidEvents.length>0){if(client.nonInteractive){let suggested=buildCreateCommandWithEventPlaceholder(client.argv,url);return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}. Use a valid event name (e.g. deployment.created).`,hint:`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`,next:[{command:suggested,when:"use a valid --event value"}]},2),2}return output_manager_default.error(`Invalid event type${invalidEvents.length>1?"s":""}: ${invalidEvents.join(", ")}`),2}events=eventFlags}telemetry.trackCliArgumentUrl(url),telemetry.trackCliOptionEvent(events),telemetry.trackCliOptionProject(projectIds);let contextName=await getContextName(client),createStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Creating webhook under ${import_chalk53.default.bold(contextName)}`);try{let webhook=await createWebhook(client,{url,events,projectIds});if(client.nonInteractive){let json={status:AGENT_STATUS.OK,webhook:{id:webhook.id,url:webhook.url,events:webhook.events,...webhook.projectIds?.length?{projectIds:webhook.projectIds}:{}},message:`Webhook ${webhook.id} created.`,next:[{command:getCommandNamePlain(`webhooks inspect ${webhook.id}`),when:"Inspect the webhook"}]};return webhook.secret&&(json.secret=webhook.secret),client.stdout.write(`${JSON.stringify(json,null,2)}
224
+ `),0}return output_manager_default.stopSpinner(),output_manager_default.success(`Webhook created: ${import_chalk53.default.bold(webhook.id)} ${createStamp()}`),output_manager_default.print(`
225
+ `),output_manager_default.print(import_chalk53.default.bold(` Webhook Details
226
+
227
+ `)),output_manager_default.print(` ${import_chalk53.default.cyan("ID".padEnd(10))}${webhook.id}
228
+ `),output_manager_default.print(` ${import_chalk53.default.cyan("URL".padEnd(10))}${webhook.url}
229
+ `),output_manager_default.print(` ${import_chalk53.default.cyan("Events".padEnd(10))}${webhook.events.join(", ")}
230
+ `),webhook.projectIds&&webhook.projectIds.length>0&&output_manager_default.print(` ${import_chalk53.default.cyan("Projects".padEnd(10))}${webhook.projectIds.join(", ")}
210
231
  `),output_manager_default.print(`
211
- `),output_manager_default.warn(`Save this secret - it will not be shown again: ${import_chalk52.default.bold(webhook.secret)}`),output_manager_default.print(`
212
- `),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)){if(client.nonInteractive){let reason=err.code==="invalid_url"?AGENT_REASON.INVALID_URL:err.code==="invalid_event"?AGENT_REASON.INVALID_EVENT:AGENT_REASON.API_ERROR,suggested=reason===AGENT_REASON.INVALID_EVENT?buildCreateCommandWithEventPlaceholder(client.argv,url):void 0;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:err.message,hint:reason===AGENT_REASON.INVALID_EVENT?`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`:void 0,next:suggested!==void 0?[{command:suggested,when:"use a valid --event value"}]:void 0},1),1}return err.code==="invalid_url"?(output_manager_default.error(`Invalid webhook URL: ${url}`),1):err.code==="invalid_event"?(output_manager_default.error("Invalid event type. Please check the event names."),1):(output_manager_default.error(err.message),1)}throw err}}function buildCreateCommandWithEventPlaceholder(fullArgv,url){let argv=fullArgv.slice(2),out=["webhooks","create",url],i=3,hadEvent=!1;for(;i<argv.length;){if(argv[i]==="--event"||argv[i]==="-e"){hadEvent=!0,i+=2;continue}out.push(argv[i]),i++}return hadEvent&&out.push("--event","<event>"),getCommandNamePlain(out.join(" "))}var import_chalk53=__toESM(require_source(),1);async function deleteWebhook(client,webhookId){await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`,{method:"DELETE"})}var WebhooksRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};function webhookCommandWithGlobalFlags(baseSubcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${baseSubcommand} ${globalFlags.join(" ")}`:baseSubcommand;return getCommandNamePlain(full)}async function rm5(client,argv){let telemetry=new WebhooksRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand7.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args;if(telemetry.trackCliArgumentId(webhookId),telemetry.trackCliFlagYes(opts["--yes"]),!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)},{command:webhookCommandWithGlobalFlags("webhooks delete <id> --yes",client.argv)}]},2),output_manager_default.error(`${getCommandName("webhooks delete <id>")} expects one argument`),2;let skipConfirmation=opts["--yes"]||!1;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Deleting a webhook requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1);let contextName=await getContextName(client);if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk53.default.cyan(`${getCommandName("webhooks delete <id>")}`)}`),2;client.nonInteractive||output_manager_default.spinner(`Fetching webhook ${webhookId}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(output_manager_default.stopSpinner(),!skipConfirmation&&!await client.input.confirm(`Are you sure you want to delete webhook ${param(webhookId)} (${webhook.url})?`,!1))return client.nonInteractive||output_manager_default.log("Canceled"),0;let removeStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Deleting webhook under ${import_chalk53.default.bold(contextName)}`);try{return await deleteWebhook(client,webhookId),output_manager_default.stopSpinner(),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:"ok",webhook:{id:webhookId,url:webhook.url},message:`Webhook ${webhookId} deleted.`},null,2)}
213
- `),0):(output_manager_default.success(`Webhook ${import_chalk53.default.bold(webhookId)} deleted ${removeStamp()}`),0)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),1;throw err}}var WebhooksTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG14={create:["create","add"],inspect:["inspect","get"],ls:["ls","list"],delete:["delete","rm","del","remove"]};async function main8(client){let parsedArgs,flagsSpecification=getFlagsSpecification(webhooksCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new WebhooksTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG14),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("webhooks"),output_manager_default.print(help(webhooksCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:webhooksCommand,columns:client.stderr.columns})),0}switch(subcommand){case"create":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(createSubcommand2)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"webhooks add","webhooks create"),create3(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"webhooks get","webhooks inspect"),get(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand7)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"webhooks remove","webhooks delete"),rm5(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand10)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls5(client,args))}}export{agentRuns,alias,api,bisect,budget,main as buy,main2 as certs,dns,main3 as git,main4 as globalConfig,main5 as init,organizations,teams,main7 as tokens,main8 as webhooks};
232
+ `),output_manager_default.warn(`Save this secret - it will not be shown again: ${import_chalk53.default.bold(webhook.secret)}`),output_manager_default.print(`
233
+ `),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)){if(client.nonInteractive){let reason=err.code==="invalid_url"?AGENT_REASON.INVALID_URL:err.code==="invalid_event"?AGENT_REASON.INVALID_EVENT:AGENT_REASON.API_ERROR,suggested=reason===AGENT_REASON.INVALID_EVENT?buildCreateCommandWithEventPlaceholder(client.argv,url):void 0;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message:err.message,hint:reason===AGENT_REASON.INVALID_EVENT?`See available events: ${WEBHOOKS_EVENTS_DOCS_URL}`:void 0,next:suggested!==void 0?[{command:suggested,when:"use a valid --event value"}]:void 0},1),1}return err.code==="invalid_url"?(output_manager_default.error(`Invalid webhook URL: ${url}`),1):err.code==="invalid_event"?(output_manager_default.error("Invalid event type. Please check the event names."),1):(output_manager_default.error(err.message),1)}throw err}}function buildCreateCommandWithEventPlaceholder(fullArgv,url){let argv=fullArgv.slice(2),out=["webhooks","create",url],i=3,hadEvent=!1;for(;i<argv.length;){if(argv[i]==="--event"||argv[i]==="-e"){hadEvent=!0,i+=2;continue}out.push(argv[i]),i++}return hadEvent&&out.push("--event","<event>"),getCommandNamePlain(out.join(" "))}var import_chalk54=__toESM(require_source(),1);async function deleteWebhook(client,webhookId){await client.fetch(`/v1/webhooks/${encodeURIComponent(webhookId)}`,{method:"DELETE"})}var WebhooksRmTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};function webhookCommandWithGlobalFlags(baseSubcommand,argv){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2)),full=globalFlags.length?`${baseSubcommand} ${globalFlags.join(" ")}`:baseSubcommand;return getCommandNamePlain(full)}async function rm6(client,argv){let telemetry=new WebhooksRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand7.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args;if(telemetry.trackCliArgumentId(webhookId),telemetry.trackCliFlagYes(opts["--yes"]),!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)},{command:webhookCommandWithGlobalFlags("webhooks delete <id> --yes",client.argv)}]},2),output_manager_default.error(`${getCommandName("webhooks delete <id>")} expects one argument`),2;let skipConfirmation=opts["--yes"]||!1;client.nonInteractive&&!skipConfirmation&&outputAgentError(client,{status:"error",reason:"confirmation_required",message:"Deleting a webhook requires confirmation. Re-run with --yes.",next:[{command:buildCommandWithYes(client.argv)}]},1);let contextName=await getContextName(client);if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk54.default.cyan(`${getCommandName("webhooks delete <id>")}`)}`),2;client.nonInteractive||output_manager_default.spinner(`Fetching webhook ${webhookId}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(output_manager_default.stopSpinner(),!skipConfirmation&&!await client.input.confirm(`Are you sure you want to delete webhook ${param(webhookId)} (${webhook.url})?`,!1))return client.nonInteractive||output_manager_default.log("Canceled"),0;let removeStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Deleting webhook under ${import_chalk54.default.bold(contextName)}`);try{return await deleteWebhook(client,webhookId),output_manager_default.stopSpinner(),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:"ok",webhook:{id:webhookId,url:webhook.url},message:`Webhook ${webhookId} deleted.`},null,2)}
234
+ `),0):(output_manager_default.success(`Webhook ${import_chalk54.default.bold(webhookId)} deleted ${removeStamp()}`),0)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:webhookCommandWithGlobalFlags("webhooks ls",client.argv)}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),1;throw err}}var WebhooksTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var COMMAND_CONFIG14={create:["create","add"],inspect:["inspect","get"],ls:["ls","list"],delete:["delete","rm","del","remove"]};async function main8(client){let parsedArgs,flagsSpecification=getFlagsSpecification(webhooksCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new WebhooksTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand3(parsedArgs.args.slice(1),COMMAND_CONFIG14),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("webhooks"),output_manager_default.print(help(webhooksCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{stream:client.stderr,parent:webhooksCommand,columns:client.stderr.columns})),0}switch(subcommand){case"create":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(createSubcommand2)):(telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"webhooks add","webhooks create"),create3(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(getSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"webhooks get","webhooks inspect"),get(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(removeSubcommand7)):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"webhooks remove","webhooks delete"),rm6(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("webhooks",subcommandOriginal),printHelp(listSubcommand10)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls5(client,args))}}export{agentRuns,alias,api,billing,bisect,budget,main as buy,main2 as certs,dns,main3 as git,main4 as globalConfig,main5 as init,organizations,teams,main7 as tokens,main8 as webhooks};