@vercel/cli-support 0.0.0 → 65.4.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 (355) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +100 -3
  3. package/dist/chunks/add-7NS6HIWC.js +8 -0
  4. package/dist/chunks/add-NMYFDVXW.js +8 -0
  5. package/dist/chunks/add-PMJ5BECU.js +8 -0
  6. package/dist/chunks/build-BCY6HQJG.js +7 -0
  7. package/dist/chunks/chunk-25565AGS.js +7 -0
  8. package/dist/chunks/chunk-2EYYB6YN.js +7 -0
  9. package/dist/chunks/chunk-2GHZGOWT.js +7 -0
  10. package/dist/chunks/chunk-2K3ISCQ6.js +7 -0
  11. package/dist/chunks/chunk-2NABMKFV.js +29 -0
  12. package/dist/chunks/chunk-2S6PE6GB.js +7 -0
  13. package/dist/chunks/chunk-2TUVL6WE.js +12 -0
  14. package/dist/chunks/chunk-363SJ4TN.js +7 -0
  15. package/dist/chunks/chunk-3G3FQYMW.js +7 -0
  16. package/dist/chunks/chunk-3LIKVGFT.js +8 -0
  17. package/dist/chunks/chunk-3XW7N4W3.js +9 -0
  18. package/dist/chunks/chunk-462YCCJZ.js +7 -0
  19. package/dist/chunks/chunk-4CACOKMS.js +7 -0
  20. package/dist/chunks/chunk-4N6LMERQ.js +57 -0
  21. package/dist/chunks/chunk-4NTBYNFR.js +17 -0
  22. package/dist/chunks/chunk-4SAVH3H7.js +7 -0
  23. package/dist/chunks/chunk-4VFYJU37.js +7 -0
  24. package/dist/chunks/chunk-527GBU3K.js +7 -0
  25. package/dist/chunks/chunk-5IWFRZQT.js +10 -0
  26. package/dist/chunks/chunk-5KUUMQ3M.js +7 -0
  27. package/dist/chunks/chunk-5RMIM4S2.js +7 -0
  28. package/dist/chunks/chunk-5V53NA6C.js +7 -0
  29. package/dist/chunks/chunk-67GZ5REA.js +7 -0
  30. package/dist/chunks/chunk-6I6QJHCY.js +7 -0
  31. package/dist/chunks/chunk-6IDNVZZR.js +7 -0
  32. package/dist/chunks/chunk-6OVX3PWM.js +7 -0
  33. package/dist/chunks/chunk-6QKS6QK7.js +7 -0
  34. package/dist/chunks/chunk-6TXEVQA4.js +7 -0
  35. package/dist/chunks/chunk-6VH56CX2.js +19 -0
  36. package/dist/chunks/chunk-6Y2ZL5XJ.js +98 -0
  37. package/dist/chunks/chunk-6YXIWZ3X.js +25 -0
  38. package/dist/chunks/chunk-773GOZIR.js +13 -0
  39. package/dist/chunks/chunk-7E3WREH5.js +7 -0
  40. package/dist/chunks/chunk-7EJQLVWX.js +7 -0
  41. package/dist/chunks/chunk-7L2K4OKM.js +63 -0
  42. package/dist/chunks/chunk-7L5QUDUR.js +8 -0
  43. package/dist/chunks/chunk-7QAGSRCU.js +7 -0
  44. package/dist/chunks/chunk-7R6TRRG5.js +7 -0
  45. package/dist/chunks/chunk-7YKFF6CE.js +7 -0
  46. package/dist/chunks/chunk-A2RZZQEP.js +7 -0
  47. package/dist/chunks/chunk-ADLBLGT3.js +8 -0
  48. package/dist/chunks/chunk-AM46JVVN.js +7 -0
  49. package/dist/chunks/chunk-ANMDN3EG.js +9 -0
  50. package/dist/chunks/chunk-AYUUSAB7.js +7 -0
  51. package/dist/chunks/chunk-BLUPZPAS.js +7 -0
  52. package/dist/chunks/chunk-BPUANOGW.js +7 -0
  53. package/dist/chunks/chunk-BRQUZ5NC.js +7 -0
  54. package/dist/chunks/chunk-BS32OUOC.js +7 -0
  55. package/dist/chunks/chunk-BTI5TG6Q.js +7 -0
  56. package/dist/chunks/chunk-BUJITHGZ.js +8 -0
  57. package/dist/chunks/chunk-BVGGTBYE.js +7 -0
  58. package/dist/chunks/chunk-BVH2AEFE.js +7 -0
  59. package/dist/chunks/chunk-BZENIQ7N.js +7 -0
  60. package/dist/chunks/chunk-C6GY2G73.js +7 -0
  61. package/dist/chunks/chunk-C7FQMC6D.js +7 -0
  62. package/dist/chunks/chunk-CBVKB3DT.js +21 -0
  63. package/dist/chunks/chunk-CC6FLKIP.js +11 -0
  64. package/dist/chunks/chunk-COD3WAUI.js +7 -0
  65. package/dist/chunks/chunk-CR3NBTHV.js +7 -0
  66. package/dist/chunks/chunk-CWM2F235.js +7 -0
  67. package/dist/chunks/chunk-CZSOZKHX.js +7 -0
  68. package/dist/chunks/chunk-D3AHZ5LI.js +7 -0
  69. package/dist/chunks/chunk-D6REP5QQ.js +15 -0
  70. package/dist/chunks/chunk-DFVNL5ML.js +7 -0
  71. package/dist/chunks/chunk-DKJL2KV7.js +7 -0
  72. package/dist/chunks/chunk-DQ2SVW4R.js +12 -0
  73. package/dist/chunks/chunk-DWZBL4NK.js +7 -0
  74. package/dist/chunks/chunk-EAUDC24V.js +9 -0
  75. package/dist/chunks/chunk-EAXMWCOL.js +63 -0
  76. package/dist/chunks/chunk-ECEDD646.js +8 -0
  77. package/dist/chunks/chunk-ECQIO5K3.js +7 -0
  78. package/dist/chunks/chunk-EEUJLJEJ.js +7 -0
  79. package/dist/chunks/chunk-EGNR2DEI.js +7 -0
  80. package/dist/chunks/chunk-EISD3RG7.js +11 -0
  81. package/dist/chunks/chunk-EKZTFGDX.js +7 -0
  82. package/dist/chunks/chunk-ETV3C2CV.js +7 -0
  83. package/dist/chunks/chunk-EU2GBIPC.js +7 -0
  84. package/dist/chunks/chunk-F4KY2TOK.js +7 -0
  85. package/dist/chunks/chunk-F53OKXYI.js +7 -0
  86. package/dist/chunks/chunk-F6EBOT64.js +7 -0
  87. package/dist/chunks/chunk-F7AVGV4Y.js +7 -0
  88. package/dist/chunks/chunk-FBYA6LLM.js +7 -0
  89. package/dist/chunks/chunk-FGFLTLEA.js +7 -0
  90. package/dist/chunks/chunk-FHU2O7ZJ.js +8 -0
  91. package/dist/chunks/chunk-FLHO75XC.js +8 -0
  92. package/dist/chunks/chunk-FSPPKNKN.js +7 -0
  93. package/dist/chunks/chunk-FUX6LKNP.js +7 -0
  94. package/dist/chunks/chunk-GA277JFB.js +20 -0
  95. package/dist/chunks/chunk-GCZVIDNG.js +86 -0
  96. package/dist/chunks/chunk-GD7AV7BO.js +9 -0
  97. package/dist/chunks/chunk-GG5RME4X.js +7 -0
  98. package/dist/chunks/chunk-GHAY4PSD.js +7 -0
  99. package/dist/chunks/chunk-GYVJIIYL.js +7 -0
  100. package/dist/chunks/chunk-GZNDA6SV.js +8 -0
  101. package/dist/chunks/chunk-HCRD3JFL.js +7 -0
  102. package/dist/chunks/chunk-HEGJZJO7.js +7 -0
  103. package/dist/chunks/chunk-HRR57QNP.js +7 -0
  104. package/dist/chunks/chunk-HSFKISDH.js +9 -0
  105. package/dist/chunks/chunk-HTXDC7E2.js +10 -0
  106. package/dist/chunks/chunk-ID663OJ7.js +7 -0
  107. package/dist/chunks/chunk-IOZ3I765.js +7 -0
  108. package/dist/chunks/chunk-IQ7FPAI4.js +7 -0
  109. package/dist/chunks/chunk-IQKGQ2Y2.js +15 -0
  110. package/dist/chunks/chunk-ISWW3DKF.js +7 -0
  111. package/dist/chunks/chunk-IVSSTHB6.js +7 -0
  112. package/dist/chunks/chunk-J24BABG4.js +21 -0
  113. package/dist/chunks/chunk-JALVF3C2.js +7 -0
  114. package/dist/chunks/chunk-JELLVPCM.js +8 -0
  115. package/dist/chunks/chunk-JESNVRVR.js +7 -0
  116. package/dist/chunks/chunk-JLE7K4SY.js +9 -0
  117. package/dist/chunks/chunk-JLEJB6KM.js +7 -0
  118. package/dist/chunks/chunk-JP33AIDQ.js +7 -0
  119. package/dist/chunks/chunk-JRPNHWA3.js +7 -0
  120. package/dist/chunks/chunk-JUSR7V2L.js +7 -0
  121. package/dist/chunks/chunk-JWCEHQQF.js +29 -0
  122. package/dist/chunks/chunk-K5U47EVH.js +7 -0
  123. package/dist/chunks/chunk-KCKYPLIH.js +7 -0
  124. package/dist/chunks/chunk-KGBIRIFF.js +7 -0
  125. package/dist/chunks/chunk-KJA2GKPT.js +7 -0
  126. package/dist/chunks/chunk-KPQLUGFI.js +32 -0
  127. package/dist/chunks/chunk-KQCFC2JL.js +7 -0
  128. package/dist/chunks/chunk-KQCROPL3.js +8 -0
  129. package/dist/chunks/chunk-KRPY5FHJ.js +7 -0
  130. package/dist/chunks/chunk-KW6GSQXV.js +7 -0
  131. package/dist/chunks/chunk-KY335KWI.js +7 -0
  132. package/dist/chunks/chunk-L3JYCXVB.js +23 -0
  133. package/dist/chunks/chunk-LFOWP74R.js +7 -0
  134. package/dist/chunks/chunk-LOBA3E72.js +7 -0
  135. package/dist/chunks/chunk-LQVSU5HR.js +7 -0
  136. package/dist/chunks/chunk-LSF7FY6X.js +7 -0
  137. package/dist/chunks/chunk-LSQREJXO.js +11 -0
  138. package/dist/chunks/chunk-LW4N3CW6.js +9 -0
  139. package/dist/chunks/chunk-M2NXKZKX.js +16 -0
  140. package/dist/chunks/chunk-MBEKRUTQ.js +8 -0
  141. package/dist/chunks/chunk-MCRKBVZA.js +7 -0
  142. package/dist/chunks/chunk-MVGTMPMI.js +23 -0
  143. package/dist/chunks/chunk-MXTC4ZAQ.js +7 -0
  144. package/dist/chunks/chunk-N2FLYCCO.js +9 -0
  145. package/dist/chunks/chunk-N6JBQMOF.js +20 -0
  146. package/dist/chunks/chunk-NAX6IARA.js +11 -0
  147. package/dist/chunks/chunk-NB2WLB3J.js +12 -0
  148. package/dist/chunks/chunk-NGKO2OOU.js +8 -0
  149. package/dist/chunks/chunk-NW7WWUCQ.js +9 -0
  150. package/dist/chunks/chunk-NWGBDBZI.js +7 -0
  151. package/dist/chunks/chunk-NZ2TFADV.js +7 -0
  152. package/dist/chunks/chunk-O4WNSKQR.js +15 -0
  153. package/dist/chunks/chunk-O72YDZKD.js +10 -0
  154. package/dist/chunks/chunk-OAM5NJCU.js +9 -0
  155. package/dist/chunks/chunk-OCR5CRTH.js +10 -0
  156. package/dist/chunks/chunk-OFDTADPQ.js +7 -0
  157. package/dist/chunks/chunk-OHEOYFBU.js +9 -0
  158. package/dist/chunks/chunk-OO572JUC.js +7 -0
  159. package/dist/chunks/chunk-OPORM35X.js +7 -0
  160. package/dist/chunks/chunk-OZCQTXI4.js +7 -0
  161. package/dist/chunks/chunk-PADL3C6Z.js +7 -0
  162. package/dist/chunks/chunk-PFD7LETF.js +7 -0
  163. package/dist/chunks/chunk-PFPJLIFF.js +33 -0
  164. package/dist/chunks/chunk-PSOVLGHP.js +7 -0
  165. package/dist/chunks/chunk-PUKYAALC.js +7 -0
  166. package/dist/chunks/chunk-PVASGBEF.js +7 -0
  167. package/dist/chunks/chunk-Q4KTAQB3.js +7 -0
  168. package/dist/chunks/chunk-Q5ODLDCU.js +7 -0
  169. package/dist/chunks/chunk-Q7D7RGXM.js +7 -0
  170. package/dist/chunks/chunk-QB7F3UAP.js +7 -0
  171. package/dist/chunks/chunk-QHJLRTVY.js +7 -0
  172. package/dist/chunks/chunk-QIVX6SCR.js +27 -0
  173. package/dist/chunks/chunk-QVHXFHBV.js +14 -0
  174. package/dist/chunks/chunk-QVXS234E.js +7 -0
  175. package/dist/chunks/chunk-QVZAAMGQ.js +39 -0
  176. package/dist/chunks/chunk-R2BUF6Z7.js +7 -0
  177. package/dist/chunks/chunk-R2XHJDAP.js +7 -0
  178. package/dist/chunks/chunk-R6BEOVTU.js +7 -0
  179. package/dist/chunks/chunk-RLKS5G6C.js +12 -0
  180. package/dist/chunks/chunk-RM3ZDRYE.js +7 -0
  181. package/dist/chunks/chunk-RMZTB2IU.js +7 -0
  182. package/dist/chunks/chunk-RRDNKB2X.js +7 -0
  183. package/dist/chunks/chunk-RW3X523R.js +8 -0
  184. package/dist/chunks/chunk-S3L2OHPO.js +7 -0
  185. package/dist/chunks/chunk-SACGQMVQ.js +13 -0
  186. package/dist/chunks/chunk-SCV7XEEO.js +7 -0
  187. package/dist/chunks/chunk-SF4E3AQ3.js +7 -0
  188. package/dist/chunks/chunk-SLGUYM42.js +10 -0
  189. package/dist/chunks/chunk-SYFG2RM6.js +10 -0
  190. package/dist/chunks/chunk-T6243EDS.js +7 -0
  191. package/dist/chunks/chunk-TAAWMNNL.js +7 -0
  192. package/dist/chunks/chunk-TAISZMA2.js +7 -0
  193. package/dist/chunks/chunk-TEYREL44.js +7 -0
  194. package/dist/chunks/chunk-TG2RCYTH.js +7 -0
  195. package/dist/chunks/chunk-TIPQQ4TG.js +17 -0
  196. package/dist/chunks/chunk-U2OBPULW.js +7 -0
  197. package/dist/chunks/chunk-U4Z2MMOF.js +301 -0
  198. package/dist/chunks/chunk-U56NHYAH.js +7 -0
  199. package/dist/chunks/chunk-UGNIIDHR.js +32 -0
  200. package/dist/chunks/chunk-UHBMX3OK.js +7 -0
  201. package/dist/chunks/chunk-UVHKXCR5.js +11 -0
  202. package/dist/chunks/chunk-V6Y6UK6B.js +43 -0
  203. package/dist/chunks/chunk-VNIKIQVE.js +10 -0
  204. package/dist/chunks/chunk-VT6RIZJH.js +7 -0
  205. package/dist/chunks/chunk-WDXW6A4H.js +10 -0
  206. package/dist/chunks/chunk-WEH6XC4Y.js +22 -0
  207. package/dist/chunks/chunk-WKZ6JSGZ.js +7 -0
  208. package/dist/chunks/chunk-WVHCBDTB.js +7 -0
  209. package/dist/chunks/chunk-XC46OAAT.js +9 -0
  210. package/dist/chunks/chunk-XGTKHQTT.js +7 -0
  211. package/dist/chunks/chunk-XOETL6DB.js +96 -0
  212. package/dist/chunks/chunk-XP3FT56R.js +27 -0
  213. package/dist/chunks/chunk-XR6QY7RR.js +7 -0
  214. package/dist/chunks/chunk-XVDRGWXM.js +16 -0
  215. package/dist/chunks/chunk-Y5ZMKL7E.js +7 -0
  216. package/dist/chunks/chunk-YEZJNXQX.js +7 -0
  217. package/dist/chunks/chunk-YHPPP3SF.js +7 -0
  218. package/dist/chunks/chunk-YHULP2KK.js +7 -0
  219. package/dist/chunks/chunk-YMZ6WBKB.js +21 -0
  220. package/dist/chunks/chunk-ZF27J6FQ.js +7 -0
  221. package/dist/chunks/chunk-ZFRNVIHI.js +7 -0
  222. package/dist/chunks/chunk-ZN6CQWVP.js +7 -0
  223. package/dist/chunks/chunk-ZQBSAMFL.js +24 -0
  224. package/dist/chunks/cjs-2SMN43VH.js +54 -0
  225. package/dist/chunks/clear-FKVWDCVA.js +8 -0
  226. package/dist/chunks/compile-vercel-config-GWAJE44R.js +7 -0
  227. package/dist/chunks/config-5WVLG5SE.js +8 -0
  228. package/dist/chunks/config-RMOHN5YT.js +7 -0
  229. package/dist/chunks/config-validator.mjs +1 -0
  230. package/dist/chunks/connect-git-provider-FS5Q2HO4.js +7 -0
  231. package/dist/chunks/constants-JAB7MRSK.js +7 -0
  232. package/dist/chunks/create-project-IKCB6MB2.js +7 -0
  233. package/dist/chunks/delete-5WMB4WFR.js +9 -0
  234. package/dist/chunks/delete-EM4JZPFA.js +10 -0
  235. package/dist/chunks/detect-projects-OD4JEAW2.js +7 -0
  236. package/dist/chunks/detect-services-BSJGB4RM.js +7 -0
  237. package/dist/chunks/disable-QOM7UHQC.js +7 -0
  238. package/dist/chunks/discard-L5ZH7P5B.js +14 -0
  239. package/dist/chunks/dist-33WTJLVQ.js +7 -0
  240. package/dist/chunks/dist-RXYNZPEA.js +7 -0
  241. package/dist/chunks/edit-F3VJGCG2.js +9 -0
  242. package/dist/chunks/edit-TM7YCWBU.js +8 -0
  243. package/dist/chunks/enable-72C3QX34.js +7 -0
  244. package/dist/chunks/esm-33752ISR.js +7 -0
  245. package/dist/chunks/esm-4JKEE7PC.js +7 -0
  246. package/dist/chunks/esm-BYG5BWYH.js +9 -0
  247. package/dist/chunks/esm-DFFBNKNU.js +20 -0
  248. package/dist/chunks/esm-IF453UWS.js +7 -0
  249. package/dist/chunks/esm-LABWDJ72.js +7 -0
  250. package/dist/chunks/esm-TG37FXTU.js +9 -0
  251. package/dist/chunks/exec-OZSY46V6.js +16372 -0
  252. package/dist/chunks/export-EPLYZF2Q.js +19 -0
  253. package/dist/chunks/fetch-proxy-45DGILKR.js +67 -0
  254. package/dist/chunks/future-V77DRMQG.js +7 -0
  255. package/dist/chunks/generate-cert-for-deploy-Y3YHBMPU.js +7 -0
  256. package/dist/chunks/image-CVXEXU5R.js +7 -0
  257. package/dist/chunks/import-builders-PGRKJOOE.js +7 -0
  258. package/dist/chunks/inspect-BTRNXRJT.js +9 -0
  259. package/dist/chunks/inspect-CZ7WXYE5.js +20 -0
  260. package/dist/chunks/inspect-FGDVWAQP.js +13 -0
  261. package/dist/chunks/inspect-HFDGZNWC.js +15 -0
  262. package/dist/chunks/inspect-T2AIREYK.js +19 -0
  263. package/dist/chunks/list-CKRRHAOE.js +12 -0
  264. package/dist/chunks/list-FLREMGJR.js +16 -0
  265. package/dist/chunks/list-ON4YTQRN.js +10 -0
  266. package/dist/chunks/login-55LJ5ZA6.js +9 -0
  267. package/dist/chunks/login-DQRZSD4Z.js +7 -0
  268. package/dist/chunks/logs-2HQXWOHM.js +7 -0
  269. package/dist/chunks/ls-2HUJHVLA.js +12 -0
  270. package/dist/chunks/ls-3DVM5HLK.js +12 -0
  271. package/dist/chunks/ls-4B3QYHCI.js +8 -0
  272. package/dist/chunks/ls-A7K4XDQB.js +8 -0
  273. package/dist/chunks/ls-FK5XEJEU.js +12 -0
  274. package/dist/chunks/ls-QGUKJJY5.js +12 -0
  275. package/dist/chunks/ls-VTKHPDWS.js +11 -0
  276. package/dist/chunks/mutate-7ADZBCZM.js +9 -0
  277. package/dist/chunks/notifications-XZJXE2K4.js +7 -0
  278. package/dist/chunks/open-EE5IZQD7.js +7 -0
  279. package/dist/chunks/openapi-QBX62ZXC.js +7 -0
  280. package/dist/chunks/permissions-VYJ4LL5R.js +7 -0
  281. package/dist/chunks/pkg-EDJQLCNP.js +7 -0
  282. package/dist/chunks/plugin-offer-TEGYA3TA.js +9 -0
  283. package/dist/chunks/prompt-missing-credentials-VP6OVCFM.js +7 -0
  284. package/dist/chunks/publish-2HEK5UMJ.js +15 -0
  285. package/dist/chunks/pull-WRTTSY7J.js +7 -0
  286. package/dist/chunks/purchase-domain-if-available-6S3NLTUI.js +7 -0
  287. package/dist/chunks/push-L3QRGGLC.js +7 -0
  288. package/dist/chunks/query-FXXLX6UB.js +12 -0
  289. package/dist/chunks/reauthenticate-IXQDC4UZ.js +7 -0
  290. package/dist/chunks/reorder-B4OXSYCI.js +10 -0
  291. package/dist/chunks/reply-F637K6XH.js +9 -0
  292. package/dist/chunks/repo-info-to-url-XQSULSEO.js +7 -0
  293. package/dist/chunks/resolve-E3F6NYQZ.js +12 -0
  294. package/dist/chunks/resolve-agent-team-EIPCH766.js +7 -0
  295. package/dist/chunks/resolve-deployment-framework-preset-AXXYBFCL.js +7 -0
  296. package/dist/chunks/restore-Q25KRZPH.js +16 -0
  297. package/dist/chunks/rm-FWD2NUGX.js +8 -0
  298. package/dist/chunks/rm-JMQ4QKCC.js +8 -0
  299. package/dist/chunks/rm-PPG7P3GN.js +8 -0
  300. package/dist/chunks/rm-SH3DYKNS.js +8 -0
  301. package/dist/chunks/rm-UEBLKFVC.js +8 -0
  302. package/dist/chunks/routes-PKTWMDWQ.js +7 -0
  303. package/dist/chunks/rule-inspect-LKQA5I4V.js +8 -0
  304. package/dist/chunks/schema-FBV42W7N.js +14 -0
  305. package/dist/chunks/schema-ZWE5MNMG.js +44 -0
  306. package/dist/chunks/select-org-WMB752Z6.js +7 -0
  307. package/dist/chunks/set-UTYIPOLC.js +7 -0
  308. package/dist/chunks/setup-and-link-ZLY5XQW5.js +7 -0
  309. package/dist/chunks/skills-RKIGVVNM.js +590 -0
  310. package/dist/chunks/slugify-NMMUASYK.js +7 -0
  311. package/dist/chunks/stamp-TKONNIJ5.js +7 -0
  312. package/dist/chunks/tags-UCLZ5UMX.js +7 -0
  313. package/dist/chunks/token-W6P2KNI5.js +7 -0
  314. package/dist/chunks/token-util-JDQI37VN.js +7 -0
  315. package/dist/chunks/types-YM7TMHXW.js +14 -0
  316. package/dist/chunks/update-BGDQ5TXO.js +8 -0
  317. package/dist/chunks/update-route-version-KWK5S4UW.js +7 -0
  318. package/dist/chunks/utils-IQZEE4DT.js +86 -0
  319. package/dist/chunks/vlt-builder-graph-XL2XRO4V.js +7 -0
  320. package/dist/chunks/vlt-builder-importer-RBUPAB6J.js +11 -0
  321. package/dist/chunks/zod-2C2SXNIK.js +7 -0
  322. package/dist/commands/build/builder-worker.cjs +281 -0
  323. package/dist/commands/build/index.js +34 -0
  324. package/dist/commands/deploy/index.js +72 -0
  325. package/dist/commands/dev/builder-worker.cjs +110 -0
  326. package/dist/commands/dev/index.js +157 -0
  327. package/dist/commands/env/index.js +40 -0
  328. package/dist/commands/link/index.js +10 -0
  329. package/dist/commands/list/index.js +14 -0
  330. package/dist/commands/project/index.js +113 -0
  331. package/dist/commands-account.js +209 -0
  332. package/dist/commands-ai.js +200 -0
  333. package/dist/commands-blob.js +107 -0
  334. package/dist/commands-core.js +222 -0
  335. package/dist/commands-deployments.js +84 -0
  336. package/dist/commands-flags.js +377 -0
  337. package/dist/commands-integrations.js +143 -0
  338. package/dist/commands-observability.js +122 -0
  339. package/dist/commands-routing.js +273 -0
  340. package/dist/fetch-dist-tags.cjs +60 -0
  341. package/dist/get-latest-worker.cjs +222 -0
  342. package/dist/help.js +7 -0
  343. package/dist/index.js +27 -0
  344. package/dist/internal-build-worker.js +10 -0
  345. package/dist/internal-build.js +11 -0
  346. package/dist/package.json +264 -0
  347. package/dist/root-help-commands.mjs +1 -0
  348. package/dist/runtime-assets/dev-tunnel/api/tunnel.ts +443 -0
  349. package/dist/runtime-assets/dev-tunnel/lib/env.ts +25 -0
  350. package/dist/runtime-assets/dev-tunnel/lib/tunnel_pb.ts +505 -0
  351. package/dist/runtime-assets/node-preloads/next-dev-websocket.cjs +220 -0
  352. package/dist/vc.js +404 -0
  353. package/dist/version.mjs +2 -0
  354. package/package.json +224 -14
  355. package/index.js +0 -1
@@ -0,0 +1,122 @@
1
+ import { createRequire as __createRequire } from 'node:module';
2
+ import { fileURLToPath as __fileURLToPath } from 'node:url';
3
+ import { dirname as __dirname_ } from 'node:path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __dirname_(__filename);
7
+ import{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope,tracingErrorMessage,tracingErrorReason}from"./chunks/chunk-LQVSU5HR.js";import{main}from"./chunks/chunk-JLE7K4SY.js";import{remoteText}from"./chunks/chunk-GYVJIIYL.js";import{InvalidEventsResponseError,RecordTooLargeError,decodeContinuation,encodeContinuation,fetchEventPages,sortIntervals,warningLine}from"./chunks/chunk-KQCROPL3.js";import{recordLine,summaryLine,writeJsonError}from"./chunks/chunk-O72YDZKD.js";import"./chunks/chunk-KJA2GKPT.js";import{readStdinText}from"./chunks/chunk-PSOVLGHP.js";import"./chunks/chunk-XOETL6DB.js";import{runCurl}from"./chunks/chunk-SLGUYM42.js";import{applyDeprecatedGitBranchFlag}from"./chunks/chunk-EU2GBIPC.js";import"./chunks/chunk-MBEKRUTQ.js";import{decodeListCursor,sliceList}from"./chunks/chunk-EGNR2DEI.js";import{parseRepoUrl}from"./chunks/chunk-IQKGQ2Y2.js";import"./chunks/chunk-EAUDC24V.js";import"./chunks/chunk-RRDNKB2X.js";import"./chunks/chunk-MVGTMPMI.js";import"./chunks/chunk-SACGQMVQ.js";import{ellipsis}from"./chunks/chunk-F4KY2TOK.js";import{validateIntegerRangeWithDefault}from"./chunks/chunk-RW3X523R.js";import"./chunks/chunk-ID663OJ7.js";import{printUnknownCommand}from"./chunks/chunk-5IWFRZQT.js";import"./chunks/chunk-2EYYB6YN.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{formatTable}from"./chunks/chunk-LSQREJXO.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import"./chunks/chunk-Q7D7RGXM.js";import"./chunks/chunk-L3JYCXVB.js";import"./chunks/chunk-C7FQMC6D.js";import"./chunks/chunk-6Y2ZL5XJ.js";import"./chunks/chunk-7QAGSRCU.js";import"./chunks/chunk-25565AGS.js";import"./chunks/chunk-JP33AIDQ.js";import"./chunks/chunk-WEH6XC4Y.js";import"./chunks/chunk-7YKFF6CE.js";import"./chunks/chunk-6OVX3PWM.js";import"./chunks/chunk-HTXDC7E2.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-2TUVL6WE.js";import"./chunks/chunk-R6BEOVTU.js";import"./chunks/chunk-HCRD3JFL.js";import"./chunks/chunk-7EJQLVWX.js";import{canPrompt,canPromptOnTerminal}from"./chunks/chunk-IQ7FPAI4.js";import{parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-VNIKIQVE.js";import{getRenamedOption}from"./chunks/chunk-T6243EDS.js";import{getSubcommand as getSubcommand2}from"./chunks/chunk-ETV3C2CV.js";import"./chunks/chunk-FGFLTLEA.js";import{CI_LOG_LEVELS,ciCommand,createSubcommand4 as createSubcommand,deleteSubcommand,drainsCommand,enableSubcommand,getCommandAliases,grepSubcommand,healthCommand,inspectSubcommand4 as inspectSubcommand,inspectSubcommand7 as inspectSubcommand2,listSubcommand12 as listSubcommand2,listSubcommand6 as listSubcommand,logsSubcommand,pauseSubcommand,rerunSubcommand,resumeSubcommand,updateSubcommand3 as updateSubcommand}from"./chunks/chunk-O4WNSKQR.js";import{createSubcommand as createSubcommand2,getSubcommand,searchSubcommand,tracesCommand}from"./chunks/chunk-6I6QJHCY.js";import{tracesConfigCommand}from"./chunks/chunk-EKZTFGDX.js";import"./chunks/chunk-462YCCJZ.js";import"./chunks/chunk-WVHCBDTB.js";import"./chunks/chunk-TAISZMA2.js";import"./chunks/chunk-527GBU3K.js";import"./chunks/chunk-CR3NBTHV.js";import"./chunks/chunk-BVGGTBYE.js";import"./chunks/chunk-6TXEVQA4.js";import"./chunks/chunk-5KUUMQ3M.js";import"./chunks/chunk-UHBMX3OK.js";import"./chunks/chunk-EEUJLJEJ.js";import"./chunks/chunk-NW7WWUCQ.js";import"./chunks/chunk-F6EBOT64.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-LOBA3E72.js";import"./chunks/chunk-7R6TRRG5.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-OZCQTXI4.js";import"./chunks/chunk-FSPPKNKN.js";import{help}from"./chunks/chunk-FLHO75XC.js";import{table}from"./chunks/chunk-773GOZIR.js";import{printError}from"./chunks/chunk-HSFKISDH.js";import"./chunks/chunk-67GZ5REA.js";import{require_strip_ansi}from"./chunks/chunk-BS32OUOC.js";import"./chunks/chunk-3G3FQYMW.js";import{TelemetryClient}from"./chunks/chunk-6YXIWZ3X.js";import"./chunks/chunk-PUKYAALC.js";import{getContextName,getScope,scopeFlagPassed}from"./chunks/chunk-K5U47EVH.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithYes,getErrorRecovery,getExitCodeForReason,getGlobalFlagsFromArgv,outputAgentError,shouldEmitNonInteractiveCommandError,withGlobalFlags,writeAgentError}from"./chunks/chunk-WDXW6A4H.js";import"./chunks/chunk-DKJL2KV7.js";import{execFileAsync,getGitExecutable,getLinkedProject,getProjectByNameOrId,require_pluralize,selectGitRemote,sleep,ua_default}from"./chunks/chunk-4N6LMERQ.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-ADLBLGT3.js";import"./chunks/chunk-CWM2F235.js";import"./chunks/chunk-4NTBYNFR.js";import{isArgumentError,parseArguments,takeCommand}from"./chunks/chunk-KCKYPLIH.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{GLOBAL_CLI_FLAG_NAMES,getFlagsSpecification,validateJsonOutput,warnDeprecatedSubcommand}from"./chunks/chunk-QVXS234E.js";import{fetch,toNodeReadable}from"./chunks/chunk-FUX6LKNP.js";import"./chunks/chunk-OPORM35X.js";import"./chunks/chunk-4SAVH3H7.js";import{ProjectNotFound,isAPIError}from"./chunks/chunk-6VH56CX2.js";import{cmd,getCommandName,getCommandNamePlain}from"./chunks/chunk-JESNVRVR.js";import{output_manager_default,recordCliError}from"./chunks/chunk-XP3FT56R.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BRQUZ5NC.js";import{__commonJS,__require,__toESM}from"./chunks/chunk-BZENIQ7N.js";var require_split2=__commonJS({"../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js"(exports,module){"use strict";var{Transform:Transform2}=__require("stream"),{StringDecoder}=__require("string_decoder"),kLast=Symbol("last"),kDecoder=Symbol("decoder");function transform(chunk,enc,cb){let list2;if(this.overflow){if(list2=this[kDecoder].write(chunk).split(this.matcher),list2.length===1)return cb();list2.shift(),this.overflow=!1}else this[kLast]+=this[kDecoder].write(chunk),list2=this[kLast].split(this.matcher);this[kLast]=list2.pop();for(let i=0;i<list2.length;i++)try{push(this,this.mapper(list2[i]))}catch(error){return cb(error)}if(this.overflow=this[kLast].length>this.maxLength,this.overflow&&!this.skipOverflow){cb(new Error("maximum buffer reached"));return}cb()}function flush(cb){if(this[kLast]+=this[kDecoder].end(),this[kLast])try{push(this,this.mapper(this[kLast]))}catch(error){return cb(error)}cb()}function push(self,val){val!==void 0&&self.push(val)}function noop(incoming){return incoming}function split2(matcher,mapper,options){switch(matcher=matcher||/\r?\n/,mapper=mapper||noop,options=options||{},arguments.length){case 1:typeof matcher=="function"?(mapper=matcher,matcher=/\r?\n/):typeof matcher=="object"&&!(matcher instanceof RegExp)&&!matcher[Symbol.split]&&(options=matcher,matcher=/\r?\n/);break;case 2:typeof matcher=="function"?(options=mapper,mapper=matcher,matcher=/\r?\n/):typeof mapper=="object"&&(options=mapper,mapper=noop)}options=Object.assign({},options),options.autoDestroy=!0,options.transform=transform,options.flush=flush,options.readableObjectMode=!0;let stream=new Transform2(options);return stream[kLast]="",stream[kDecoder]=new StringDecoder("utf8"),stream.matcher=matcher,stream.mapper=mapper,stream.maxLength=options.maxLength,stream.skipOverflow=options.skipOverflow||!1,stream.overflow=!1,stream._destroy=function(err,cb){this._writableState.errorEmitted=!1,cb(err)},stream}module.exports=split2}});var CiTelemetryClient=class extends TelemetryClient{trackCliSubcommandEnable(actual){this.trackCliSubcommand({subcommand:"enable",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandLogs(actual){this.trackCliSubcommand({subcommand:"logs",value:actual})}trackCliSubcommandGrep(actual){this.trackCliSubcommand({subcommand:"grep",value:actual})}trackCliSubcommandRerun(actual){this.trackCliSubcommand({subcommand:"rerun",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}};var import_strip_ansi=__toESM(require_strip_ansi(),1);function ciDisplayText(value){return Array.from((0,import_strip_ansi.default)(value),char=>{let code=char.codePointAt(0);return code>=127&&code<=159?`\\u${code.toString(16).padStart(4,"0")}`:code<32?JSON.stringify(char).slice(1,-1):char}).join("")}function quoteCiCommandArg(value){return/^[a-zA-Z0-9_./:@%+,=-]+$/.test(value)?value:`'${value.replace(/'/g,"'\\''")}'`}function buildCiCommand(argv,args){return getCommandNamePlain([...args,...getGlobalFlagsFromArgv(argv)].map(quoteCiCommandArg).join(" "))}var import_split2=__toESM(require_split2(),1);import{Transform}from"node:stream";import{pipeline}from"node:stream/promises";async function*readNdjson(client,url,options={}){let response=await client.fetch(url,{json:!1,accountId:options.accountId,signal:options.signal}),source=toNodeReadable(response.body),maxFrameBytes=8*1024*1024,frameBytes=0,bounded=new Transform({transform(chunk,_encoding,callback){let start=0;for(;start<chunk.length;){let newline=chunk.indexOf(10,start),end=newline===-1?chunk.length:newline;if(frameBytes+=end-start,frameBytes>maxFrameBytes){callback(new Error("Vercel CI response frame exceeds 8 MiB."));return}if(newline===-1)break;frameBytes=0,start=newline+1}callback(null,chunk)}}),lines=(0,import_split2.default)(),completion=pipeline(source,bounded,lines,{signal:options.signal}).then(()=>{},error=>error);try{let snapshot=response.headers.get("content-type")?.split(";")[0]==="application/json",json="",bytes=0;for await(let line of lines)if(snapshot){if(bytes+=Buffer.byteLength(line)+1,bytes>8*1024*1024)throw new Error("Vercel CI JSON snapshot exceeds 8 MiB.");json+=`${line}
8
+ `}else line.trim()&&(yield JSON.parse(line));let error=await completion;if(error)throw error;snapshot&&(yield JSON.parse(json))}finally{source.destroy(),bounded.destroy(),lines.destroy(),await completion}}async function resolveCiTeam(_client){return{ok:!0}}function listCiInvocations(client,params,accountId){let query=new URLSearchParams({provider:params.provider,repository:params.repository});params.branch&&query.set("branchName",params.branch),params.commitSha&&query.set("snapshot",params.commitSha);for(let status of params.statuses??[])query.append("status",status);for(let conclusion2 of params.conclusions??[])query.append("conclusion",conclusion2);return params.limit&&query.set("limit",String(params.limit)),params.cursor&&query.set("cursor",params.cursor),client.fetch(`/v2/vercel-ci/invocations?${query}`,{accountId})}function getCiInvocationTree(client,invocationId,options={}){let query=new URLSearchParams;options.attempt&&query.set("attempt",String(options.attempt));let suffix=query.size?`?${query}`:"";return client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/tree${suffix}`,{accountId:options.accountId})}function streamCiInvocationTree(client,invocationId,options){let query=new URLSearchParams({attempt:String(options.attempt),follow:"1"});return readNdjson(client,`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/tree?${query}`,{accountId:options.accountId,signal:options.signal})}async function getLatestCiAttempt(client,invocationId,accountId){let{attempts}=await client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/attempts`,{accountId});return Math.max(1,...attempts.map(attempt=>attempt.attempt))}function searchCiLogs(client,runs,filters,accountId){let query=new URLSearchParams;for(let run of runs)query.append("invocation",`${run.invocationId}:${run.attempt}`);query.set("search",filters.search);for(let level of filters.levels??[])query.append("level",level);return client.fetch(`/v1/vercel-ci/log-search?${query}`,{accountId})}function getCiTaskLogs(client,invocationId,attempt,filters,accountId){let query=new URLSearchParams;for(let task of filters.tasks??[])query.append("task",task);for(let conclusion2 of filters.conclusions??[])query.append("conclusion",conclusion2);for(let level of filters.levels??[])query.append("level",level);filters.search&&query.set("search",filters.search),filters.limit&&query.set("limit",String(filters.limit));let suffix=query.size?`?${query}`:"";return client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/attempts/${attempt}/task-logs${suffix}`,{accountId})}function streamCiTaskRunLogs(client,locator,options){let query=new URLSearchParams({follow:"1"});options.since!==void 0&&query.set("since",String(options.since));for(let level of options.levels??[])query.append("level",level);return readNdjson(client,`${ciTaskRunLogsPath(locator)}?${query}`,{accountId:options.accountId,signal:options.signal})}async function getCiTaskRunLogs(client,locator,options={}){let query=new URLSearchParams;for(let level of options.levels??[])query.append("level",level);let suffix=query.size?`?${query}`:"",snapshot;for await(let value of readNdjson(client,`${ciTaskRunLogsPath(locator)}${suffix}`,{accountId:options.accountId})){if(snapshot||typeof value!="object"||value===null||!("lines"in value)||!Array.isArray(value.lines))throw new Error("Invalid Vercel CI log snapshot.");snapshot=value}if(!snapshot)throw new Error("Missing Vercel CI log snapshot.");return snapshot}function ciTaskRunLogsPath(locator){return`/v1/vercel-ci/${["invocations",locator.invocationId,"attempts",locator.attempt,"job-definitions",locator.jobDefinitionId,"runs",locator.jobRunAttempt,"task-definitions",locator.taskDefinitionId,"runs",locator.taskRunAttempt,"logs"].map(segment=>encodeURIComponent(String(segment))).join("/")}`}async function getCiSetupLogs(client,invocationId,attempt,options={}){let base=`/v1/vercel-ci/invocations/${encodeURIComponent(invocationId)}/attempts/${attempt}`,{invocation}=await client.fetch(base,{accountId:options.accountId});if(invocation.setupConclusion?.result!=="failed")return{failed:!1,lines:[]};let query=new URLSearchParams;for(let level of options.levels??[])query.append("level",level);let suffix=query.size?`?${query}`:"",{lines}=await client.fetch(`${base}/logs${suffix}`,{accountId:options.accountId});return{failed:!0,lines}}function repositorySettingsPath(repo){return`/v1/vercel-ci/repository-settings?${new URLSearchParams({provider:repo.provider,organizationId:repo.organizationId,repository:repo.repository})}`}function getCiRepositorySettings(client,repo,accountId){return client.fetch(repositorySettingsPath(repo),{accountId})}function updateCiRepositorySettings(client,repo,settings,accountId){return client.fetch(repositorySettingsPath(repo),{method:"PATCH",body:settings,accountId})}var CiEnableTelemetryClient=class extends TelemetryClient{trackCliOptionRemote(remote){remote!==void 0&&this.trackCliOption({option:"remote",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var SUPPORTED_PROVIDERS=["github"];async function getCiGitRemoteNames(cwd){let git=await getGitExecutable(cwd),names=await readGit(git,cwd,["remote"]);return names?names.split(`
9
+ `):[]}async function getCiGitContext(cwd,remoteName="origin"){let git=await getGitExecutable(cwd),[remote,branch,commitSha]=await Promise.all([readGit(git,cwd,["remote","get-url",remoteName]),readGit(git,cwd,["rev-parse","--abbrev-ref","HEAD"]),readGit(git,cwd,["rev-parse","HEAD"])]);if(!remote)return null;let repo=parseRepoUrl(remote),provider=SUPPORTED_PROVIDERS.find(p=>p===repo?.provider);return!repo||!provider?(output_manager_default.debug("Unsupported Git remote for Vercel CI."),null):{provider,repository:`${repo.org}/${repo.repo}`,...branch&&branch!=="HEAD"?{branch}:{},...commitSha?{commitSha}:{}}}var COMMIT_SHA_PATTERN=/^[0-9a-f]{4,40}$/i;async function resolveCommitSha(cwd,value){let sha=value.trim().toLowerCase();if(!COMMIT_SHA_PATTERN.test(sha))return null;if(sha.length===40)return sha;let git=await getGitExecutable(cwd);return await readGit(git,cwd,["rev-parse","--verify","--quiet",`${sha}^{commit}`])??null}async function readGit(git,cwd,args){try{let{stdout}=await execFileAsync(git,args,{cwd});return stdout.trim()||void 0}catch(error){output_manager_default.debug(`git ${args.join(" ")} failed: ${error}`);return}}function failCi(client,failure){return shouldEmitNonInteractiveCommandError(client)?writeAgentError(client,{status:AGENT_STATUS.ERROR,...failure}):output_manager_default.fatal(failure.message),getExitCodeForReason(failure.reason)}function invalidCiArguments(client,message){return failCi(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message})}function handleCiApiError(client,action,err){if(isAPIError(err)){let detail=err.serverMessage?` ${err.serverMessage}`:"";switch(err.status){case 403:return failCi(client,{reason:AGENT_REASON.PERMISSION_DENIED,message:`Can't ${action}. You don't have access to Vercel CI runs for this team.`});case 404:return failCi(client,{reason:AGENT_REASON.CI_RUN_NOT_FOUND,message:"Couldn't find that Vercel CI run for this team."});case 429:return failCi(client,{reason:AGENT_REASON.RATE_LIMITED,message:`Failed to ${action}. Too many requests. Wait a moment, then try again.`});default:return failCi(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${action}.${detail}`})}}throw err}async function resolveCiContext(client,remoteOptions){let remoteName="origin";if(remoteOptions){let remoteNames=await getCiGitRemoteNames(client.cwd);if(remoteOptions.remote!==void 0){if(!remoteNames.includes(remoteOptions.remote))return invalidCiArguments(client,"Can't enable Vercel CI. --remote must name an existing Git remote. Run `git remote` to list remotes, then pass --remote <NAME>.");remoteName=remoteOptions.remote}else{if(remoteNames.length>1&&(remoteOptions.nonInteractive||!canPromptOnTerminal(client)))return invalidCiArguments(client,"Can't enable Vercel CI. Found multiple Git remotes. Pass --remote <NAME> to select one; run `git remote` to list remotes.");remoteNames.length>0&&(remoteName=await selectGitRemote(client,remoteNames))}}let git=await getCiGitContext(client.cwd,remoteName);if(!git)return failCi(client,{reason:AGENT_REASON.GIT_REPOSITORY_REQUIRED,message:remoteOptions?"Couldn't find a supported Git repository for the selected remote. Vercel CI currently supports GitHub repositories. Run `git remote -v` to check remotes, then pass --remote <NAME>.":"Couldn't find a supported Git repository here. Vercel CI currently supports GitHub repositories with an origin remote."});let team=await resolveCiTeam(client);return team.ok?{git,remoteName,accountId:team.accountId}:team.exitCode}async function enable(client,argv){let telemetry=new CiEnableTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(enableSubcommand.options))}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliOptionRemote(flags["--remote"]),args.length>0)return invalidCiArguments(client,`\`${getCommandNamePlain("ci enable")}\` doesn't take arguments. Run it inside the repository to enable.`);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidCiArguments(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,context=await resolveCiContext(client,{remote:flags["--remote"],nonInteractive:asJson});if(typeof context=="number")return context;let{git,accountId}=context,[organizationId,repository]=git.repository.split("/"),repo={provider:git.provider,organizationId,repository},repoName=ciDisplayText(git.repository);asJson||output_manager_default.spinner("Enabling Vercel CI\u2026");let settings,outcome;try{let current=await getCiRepositorySettings(client,repo,accountId);current.ciEnabled?(settings=current,outcome="unchanged"):(settings=await updateCiRepositorySettings(client,repo,{ciEnabled:!0},accountId),outcome="enabled")}catch(err){return output_manager_default.stopSpinner(),handleEnableError(client,repoName,err)}output_manager_default.stopSpinner();let listCommand=buildCiCommand(client.argv,["ci","list"]),next=context.remoteName==="origin"?[{command:listCommand,when:"List Vercel CI runs after you push a commit"}]:[],message=outcome==="enabled"?`Enabled Vercel CI for ${repoName}.`:`Vercel CI is already enabled for ${repoName}.`;if(asJson){let payload={repository:settings,outcome,next},agentPayload=client.nonInteractive?{status:AGENT_STATUS.OK,...payload,message}:payload;return client.stdout.write(`${JSON.stringify(agentPayload,null,2)}
10
+ `),0}return outcome==="enabled"?(printAlignedLabel("Enabled","Vercel CI",{gutter:"\u2713"}),printAlignedLabel("Repository",repoName)):output_manager_default.print(` ${message}
11
+ `),next.length>0&&output_manager_default.print(`
12
+ ${next[0].when}:
13
+ ${listCommand}
14
+ `),0}function handleEnableError(client,repoName,err){if(!isAPIError(err))throw err;switch(err.status){case 403:return failCi(client,{reason:AGENT_REASON.PERMISSION_DENIED,message:`Can't enable Vercel CI for ${repoName}. You don't have permission to change Vercel CI settings for this team.`});case 404:return failCi(client,{reason:AGENT_REASON.NOT_FOUND,message:`Couldn't find ${repoName} connected to a project on this team. Connect the repository to a project, or pass the team that owns it with --scope.`,next:[{command:buildCiCommand(client.argv,["git","connect"]),when:"Connect the linked project to this repository"}]});case 409:return failCi(client,{reason:AGENT_REASON.CONFLICT,message:err.code==="repository_linked_to_multiple_teams"?`Can't enable Vercel CI for ${repoName}. It's connected to projects on more than one team; Vercel CI needs it connected to one team only.`:`Can't enable Vercel CI for ${repoName}. More than one connected repository matches it on this team.`});case 429:return failCi(client,{reason:AGENT_REASON.RATE_LIMITED,message:`Failed to enable Vercel CI for ${repoName}. Too many requests. Wait a moment, then try again.`});default:return failCi(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to enable Vercel CI for ${repoName} (HTTP ${err.status}). Enabling is safe to repeat, so run the command again.`})}}var import_chalk2=__toESM(require_source(),1),import_ms2=__toESM(require_ms(),1),import_pluralize=__toESM(require_pluralize(),1);var FAILED_SETUP_STATUSES=new Set(["bootstrapping_failed","jobs_on_hive_failed"]);function getRunStatus(invocation){return invocation.runConclusion?invocation.runConclusion.result:invocation.completed?.conclusion?invocation.completed.conclusion:invocation.status==="skipped"?"skipped":FAILED_SETUP_STATUSES.has(invocation.status)?"failed":invocation.status==="completed"?"completed":invocation.status==="new"?"queued":"running"}var CI_RUN_STATUSES=["queued","running","succeeded","failed","skipped"],RUNNING_API_STATUSES=["bootstrapping","snapshotted","sandbox_named","jobs_on_hive_clone_dispatched","jobs_on_hive_dispatched","jobs_on_hive_completed","awaiting_jobs"];function toRunStatusFilter(status){switch(status){case"queued":return{statuses:["new"]};case"running":return{statuses:RUNNING_API_STATUSES};case"completed":return{statuses:["completed"]};default:return{conclusions:[status]}}}function isTerminalRunStatus(status){return status!=="queued"&&status!=="running"}function toBranchName(ref){return ref.startsWith("refs/heads/")?ref.slice(11):ref}function toShortSha(sha){return sha.slice(0,7)}var RUN_ID_PREFIX="invo1_",RUN_ID_PATTERN=/^[A-Za-z0-9]+$/;function toDisplayRunId(id2){return id2.startsWith(RUN_ID_PREFIX)?id2.slice(RUN_ID_PREFIX.length):id2}function toApiRunId(input){let id2=toDisplayRunId(input.trim());return RUN_ID_PATTERN.test(id2)?`${RUN_ID_PREFIX}${id2}`:null}function toRunSummary(invocation,repositories){let repository=repositories[invocation.repositoryKey];return{id:toDisplayRunId(invocation.invocationId),attempt:invocation.attempt,status:getRunStatus(invocation),...getRunReason(invocation),repository:repository?`${repository.owner}/${repository.name}`:"",branch:toBranchName(invocation.ref),commitSha:invocation.commitSha,createdAt:toIso(invocation.createdAt)}}function getRunReason(invocation){return invocation.skipped?{reason:invocation.skipped.reason}:invocation.setupConclusion?.result==="failed"?{reason:"setup_failed"}:{}}function toRunView(tree){return{run:toRunSummary(tree.invocation,tree.repositories),jobs:tree.jobs.map(job=>({name:job.definition.name,kind:job.definition.kind,...toStepTiming(job.run),tasks:job.tasks.map(task=>({name:task.definition.name,...toStepTiming(task.run)}))}))}}function toStepTiming(run){let startedAt=run?.started?.startedAt,completedAt=run?.completed?.completedAt,conclusion2=run?.completed?.conclusion,status="queued";return conclusion2?status=conclusion2.result:startedAt!==void 0&&(status="running"),{status,...conclusion2&&"reason"in conclusion2?{reason:conclusion2.reason}:{},...startedAt!==void 0?{startedAt:toIso(startedAt)}:{},...completedAt!==void 0?{completedAt:toIso(completedAt)}:{},...startedAt!==void 0&&completedAt!==void 0?{durationMs:Math.max(completedAt-startedAt,0)}:{}}}function toIso(timestamp2){return new Date(timestamp2).toISOString()}function countTasks(view){let total=0,finished=0;for(let job of view.jobs)for(let task of job.tasks)total++,task.status!=="queued"&&task.status!=="running"&&finished++;return{total,finished}}var CiGrepTelemetryClient=class extends TelemetryClient{trackCliArgumentText(text){text&&this.trackCliArgument({arg:"text",value:this.redactedValue})}trackCliOptionGitBranch(gitBranch){gitBranch&&this.trackCliOption({option:"git-branch",value:this.redactedValue})}trackCliOptionBranch(branch){branch&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliFlagAllBranches(allBranches){allBranches&&this.trackCliFlag("all-branches")}trackCliOptionStatus(status){status&&this.trackCliOption({option:"status",value:status})}trackCliOptionRuns(runs){runs!==void 0&&this.trackCliOption({option:"runs",value:String(runs)})}trackCliOptionLevel(levels){levels?.length&&this.trackCliOption({option:"level",value:levels.join(",")})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var import_chalk=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1);function formatStatus(status){switch(status){case"succeeded":return import_chalk.default.green(status);case"failed":return import_chalk.default.red(status);case"skipped":case"cached":return import_chalk.default.gray(status);default:return ciDisplayText(status)}}function formatCiTable(headers,rows){return formatTable(headers,headers.map(()=>"l"),[{rows}]).split(`
15
+ `).map(line=>line.trimEnd()).filter(line=>line.length>0).join(`
16
+ `)}function printRunView(view,elapsed){let{run}=view;output_manager_default.log(`Vercel CI run ${import_chalk.default.bold(ciDisplayText(run.id))} ${import_chalk.default.gray(elapsed)}`),output_manager_default.print(`
17
+ `),printAlignedLabel("Status",formatStatus(run.status)),run.reason&&printAlignedLabel("Reason",ciDisplayText(run.reason)),run.repository&&printAlignedLabel("Repository",ciDisplayText(run.repository)),printAlignedLabel("Branch",ciDisplayText(run.branch)),printAlignedLabel("Commit",ciDisplayText(toShortSha(run.commitSha))),printAlignedLabel("Attempt",String(run.attempt)),printAlignedLabel("Created",`${(0,import_ms.default)(Math.max(Date.now()-Date.parse(run.createdAt),0))} ago`),view.jobs.length===0&&run.reason==="setup_failed"&&output_manager_default.print(`
18
+ Setup failed before any jobs were created.
19
+ `);for(let job of view.jobs){let duration=job.durationMs!==void 0?import_chalk.default.gray(` \xB7 ${(0,import_ms.default)(job.durationMs)}`):"";if(output_manager_default.print(`
20
+ ${import_chalk.default.bold(ciDisplayText(job.name))} ${import_chalk.default.gray("\xB7")} ${formatStatus(job.status)}${duration}
21
+ `),job.tasks.length===0)continue;let rows=job.tasks.map(task=>[ciDisplayText(task.name),formatStatus(task.status),task.durationMs!==void 0?import_chalk.default.gray((0,import_ms.default)(task.durationMs)):"",task.reason?import_chalk.default.gray(ciDisplayText(task.reason)):""]);output_manager_default.print(`${formatCiTable(["Task","Status","Duration","Reason"],rows)}
22
+ `)}output_manager_default.print(`
23
+ `)}var DEFAULT_RUNS=20,MAX_RUNS=50,MAX_SCAN_PAGES=100,MAX_SCAN_CANDIDATES=100,MAX_TEXT_LENGTH=256,EOF_LEVEL="eof";async function grep(client,argv){let telemetry=new CiGrepTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(grepSubcommand.options))}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs;telemetry.trackCliArgumentText(args[0]),telemetry.trackCliOptionGitBranch(flags["--git-branch"]),telemetry.trackCliOptionBranch(flags["--branch"]),telemetry.trackCliFlagAllBranches(flags["--all-branches"]),telemetry.trackCliOptionStatus(flags["--status"]),telemetry.trackCliOptionRuns(flags["--runs"]),telemetry.trackCliOptionLevel(flags["--level"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]);let text=args[0];if(args.length!==1||!text||text.trim()==="")return invalidCiArguments(client,`Pass the text to search for. Usage: ${getCommandName("ci grep <text>")}`);if(text.length>MAX_TEXT_LENGTH)return invalidCiArguments(client,`Search text can be at most ${MAX_TEXT_LENGTH} characters.`);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidCiArguments(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,branchError=applyDeprecatedGitBranchFlag(client,flags,"--branch");if(branchError)return invalidCiArguments(client,branchError);if(flags["--git-branch"]&&flags["--all-branches"])return invalidCiArguments(client,"Can't combine --git-branch with --all-branches. Pass one of them.");let status=flags["--status"];if(status!==void 0&&!CI_RUN_STATUSES.includes(status))return invalidCiArguments(client,`Status must be one of: ${CI_RUN_STATUSES.join(", ")}.`);let runCount=flags["--runs"]??DEFAULT_RUNS;if(!Number.isInteger(runCount)||runCount<1||runCount>MAX_RUNS)return invalidCiArguments(client,`--runs must be a whole number from 1 to ${MAX_RUNS}.`);let levels=flags["--level"]??[];if(levels.some(level=>!CI_LOG_LEVELS.includes(level)))return invalidCiArguments(client,`Level must be one of: ${CI_LOG_LEVELS.join(", ")}.`);let context=await resolveCiContext(client);if(typeof context=="number")return context;let{git,accountId}=context,branch=flags["--all-branches"]?void 0:flags["--git-branch"]??git.branch,selected=new Map,trees=new Map,seen=new Set,scanLimited=!1,result,fetchingRun=!1;try{asJson||output_manager_default.spinner("Finding recent Vercel CI runs\u2026");let cursor,cursors=new Set;for(let page=0;page<MAX_SCAN_PAGES;page++){fetchingRun=!1;let response=await listCiInvocations(client,{provider:git.provider,repository:git.repository,branch,limit:runCount,cursor},accountId);for(let candidate of latestAttempts(response.invocations)){if(toApiRunId(candidate.invocationId)!==candidate.invocationId||!Number.isSafeInteger(candidate.attempt)||candidate.attempt<1)return output_manager_default.stopSpinner(),failCi(client,{reason:AGENT_REASON.API_ERROR,message:"Failed to find recent Vercel CI runs. The API returned an invalid run ID or attempt."});if(seen.has(candidate.invocationId))continue;if(seen.size===MAX_SCAN_CANDIDATES){scanLimited=!0;break}seen.add(candidate.invocationId),fetchingRun=!0;let attempt=await getLatestCiAttempt(client,candidate.invocationId,accountId);if(!Number.isSafeInteger(attempt)||attempt<candidate.attempt)return output_manager_default.stopSpinner(),failCi(client,{reason:AGENT_REASON.API_ERROR,message:"Failed to find recent Vercel CI runs. The API returned an invalid latest attempt."});let tree=await getCiInvocationTree(client,candidate.invocationId,{attempt,accountId}),current=tree.invocation;if(current.invocationId!==candidate.invocationId||current.attempt!==attempt)return output_manager_default.stopSpinner(),failCi(client,{reason:AGENT_REASON.API_ERROR,message:"Failed to find recent Vercel CI runs. The API returned an invalid latest attempt."});if(!(status&&getRunStatus(current)!==status)&&(selected.set(current.invocationId,current),trees.set(current.invocationId,tree),selected.size===runCount))break}if(scanLimited||selected.size===runCount||!response.pagination.nextCursor)break;if(cursor=response.pagination.nextCursor,cursors.has(cursor))return output_manager_default.stopSpinner(),failCi(client,{reason:AGENT_REASON.API_ERROR,message:"Failed to find recent Vercel CI runs. The API repeated a pagination cursor."});if(seen.size===MAX_SCAN_CANDIDATES||page===MAX_SCAN_PAGES-1){scanLimited=!0;break}cursors.add(cursor)}}catch(err){return output_manager_default.stopSpinner(),fetchingRun?handleCiApiError(client,"find recent Vercel CI runs",err):handleGrepApiError(client,"find recent Vercel CI runs",err)}let runs=[...selected.values()],selection={requestedRuns:runCount,scannedRuns:seen.size,limited:scanLimited},scanNotice=scanLimited?`Recent-run scan reached its limit after checking ${(0,import_pluralize.default)("run",seen.size,!0)}. Results are partial; narrow with --git-branch${status?" or remove --status":" or fewer --runs"}.`:void 0;if(runs.length===0)return output_manager_default.stopSpinner(),printNoRuns(client,asJson,text,describeScope(git,branch),selection,scanNotice);try{asJson||output_manager_default.spinner(`Searching ${(0,import_pluralize.default)("run",runs.length,!0)}\u2026`),result=await searchCiLogs(client,runs,{search:text,levels},accountId)}catch(err){return output_manager_default.stopSpinner(),handleGrepApiError(client,"search Vercel CI logs",err)}output_manager_default.stopSpinner();let runsById=new Map(runs.map(run=>[run.invocationId,run])),matches=result.invocations.flatMap(match=>{let run=runsById.get(match.invocationId);if(!run||match.attempt!==run.attempt)return[];let summary={...toRunSummary(run,{}),repository:git.repository},tasks=match.tasks.map(task=>({job:task.jobName,name:task.taskName,status:task.conclusion?.result??"running",...task.conclusion&&"reason"in task.conclusion?{reason:task.conclusion.reason}:{},locator:{invocationId:run.invocationId,attempt:run.attempt,jobDefinitionId:task.jobDefinitionId,jobRunAttempt:task.jobRunAttempt,taskDefinitionId:task.taskDefinitionId,...task.taskRunAttempt!==void 0?{taskRunAttempt:task.taskRunAttempt}:{}},...isAddressableTask(trees.get(run.invocationId),task)?{command:buildCiCommand(client.argv,["ci","logs",summary.id,"--attempt",String(summary.attempt),`--task=${task.taskName}`])}:{},lines:task.lines.filter(line=>line.level!==EOF_LEVEL).map(line=>({timestamp:new Date(line.timestamp).toISOString(),level:line.level,message:line.message}))}));return[{run:summary,tasks}]}),lineCount=matches.reduce((total,match)=>total+match.tasks.reduce((sum,task)=>sum+task.lines.length,0),0),scope=describeScope(git,branch);if(asJson){let payload={search:text,searchedRuns:runs.length,selection,matches:{lines:lineCount,runs:matches.length},runs:matches.map(({run,tasks})=>({...run,tasks})),hasMore:result.hasMore};return client.stdout.write(`${JSON.stringify(client.nonInteractive?{status:AGENT_STATUS.OK,...payload,next:[],message:[lineCount>0?`Found ${(0,import_pluralize.default)("matching line",lineCount,!0)} in ${(0,import_pluralize.default)("run",matches.length,!0)} of ${(0,import_pluralize.default)("searched run",runs.length,!0)} for ${plainScope(git,branch)}.`:`No log lines match the search text in ${(0,import_pluralize.default)("searched run",runs.length,!0)} for ${plainScope(git,branch)}.`,scanNotice].filter(Boolean).join(" ")}:payload,null,2)}
24
+ `),0}if(scanNotice&&output_manager_default.print(`! ${scanNotice}
25
+ `),output_manager_default.log(`Searched ${scanLimited?"":"the last "}${(0,import_pluralize.default)("run",runs.length,!0)} for ${scope} for ${import_chalk2.default.bold(`"${ciDisplayText(text)}"`)}`),matches.length===0)return output_manager_default.log(`No log lines match "${ciDisplayText(text)}".`),0;let now=Date.now();for(let{run,tasks}of matches){output_manager_default.print(`
26
+ `),output_manager_default.log(describeRun(run,now,!branch));for(let task of tasks){let reason=task.reason?` ${import_chalk2.default.gray("\xB7")} ${ciDisplayText(task.reason)}`:"",execution=[`job attempt ${ciDisplayText(String(task.locator.jobRunAttempt))}`,...task.locator.taskRunAttempt!==void 0?[`task attempt ${ciDisplayText(String(task.locator.taskRunAttempt))}`]:[]].join(" \xB7 ");output_manager_default.print(` ${import_chalk2.default.bold(`${ciDisplayText(task.job)} \u203A ${ciDisplayText(task.name)}`)} ${import_chalk2.default.gray("\xB7")} ${execution} ${import_chalk2.default.gray("\xB7")} ${formatStatus(task.status)}${reason}
27
+ `),task.command&&output_manager_default.print(` ${import_chalk2.default.gray(ciDisplayText(task.command))}
28
+ `);for(let line of task.lines)client.stdout.write(` ${import_chalk2.default.gray(formatTime(line.timestamp))} ${ciDisplayText(line.level).padEnd(5)} ${highlight(ciDisplayText(line.message),ciDisplayText(text))}
29
+ `)}}return output_manager_default.print(`
30
+ `),output_manager_default.log(`${(0,import_pluralize.default)("matching line",lineCount,!0)} in ${(0,import_pluralize.default)("run",matches.length,!0)} of ${runs.length} searched`),result.hasMore&&output_manager_default.log(`Showing the newest ${lineCount} matching lines. Narrow with --status, --level, or fewer --runs.`),0}function isAddressableTask(tree,task){let named=tree.jobs.flatMap(job2=>job2.tasks.filter(current2=>current2.definition.name===task.taskName).map(current2=>({job:job2,current:current2})));if(named.length!==1||task.taskRunAttempt===void 0)return!1;let{job,current}=named[0];return job.definition.jobDefinitionId===task.jobDefinitionId&&job.run?.attempt===task.jobRunAttempt&&current.definition.jobDefinitionId===task.jobDefinitionId&&current.definition.jobRunAttempt===task.jobRunAttempt&&current.definition.taskDefinitionId===task.taskDefinitionId&&current.run?.taskDefinitionId===task.taskDefinitionId&&current.run.attempt===task.taskRunAttempt}function latestAttempts(invocations){let latest=new Map;for(let invocation of invocations){let current=latest.get(invocation.invocationId);(!current||invocation.attempt>current.attempt)&&latest.set(invocation.invocationId,invocation)}return[...latest.values()]}function printNoRuns(client,asJson,text,scope,selection,scanNotice){return asJson?(client.stdout.write(`${JSON.stringify({...client.nonInteractive?{status:AGENT_STATUS.OK,message:selection.limited?`No Vercel CI runs match the current filters among the runs checked. ${scanNotice}`:"No Vercel CI runs match the current filters.",next:[]}:{},search:text,searchedRuns:0,selection,matches:{lines:0,runs:0},runs:[],hasMore:!1},null,2)}
31
+ `),0):(scanNotice&&output_manager_default.print(`! ${scanNotice}
32
+ `),output_manager_default.log(selection.limited?`No Vercel CI runs match the current filters among the runs checked for ${scope}.`:selection.scannedRuns>0?`No Vercel CI runs match the current filters for ${scope}.`:`No Vercel CI runs found for ${scope}.`),0)}function describeScope(git,branch){let repo=import_chalk2.default.bold(ciDisplayText(git.repository));return branch?`${repo} on ${import_chalk2.default.bold(ciDisplayText(branch))}`:`${repo} on all branches`}function plainScope(git,branch){return branch?`${ciDisplayText(git.repository)} on ${ciDisplayText(branch)}`:`${ciDisplayText(git.repository)} on all branches`}function describeRun(run,now,showBranch){return[`Run ${import_chalk2.default.bold(ciDisplayText(run.id))}`,formatStatus(run.status),...run.attempt>1?[`attempt ${run.attempt}`]:[],...showBranch?[ciDisplayText(run.branch)]:[],ciDisplayText(toShortSha(run.commitSha)),`${(0,import_ms2.default)(Math.max(now-Date.parse(run.createdAt),0))} ago`].join(import_chalk2.default.gray(" \xB7 "))}function formatTime(timestamp2){return new Date(timestamp2).toLocaleTimeString("en-US",{hour12:!1})}function highlight(message,text){let literal=text.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return message.replace(new RegExp(literal,"giu"),match=>import_chalk2.default.red.bold(match))}function handleGrepApiError(client,action,err){return isAPIError(err)&&err.status===404?failCi(client,{reason:AGENT_REASON.API_ERROR,message:`Failed to ${action}. The Vercel CI endpoint wasn't found.`}):handleCiApiError(client,action,err)}var import_chalk3=__toESM(require_source(),1);var CiInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentRun(run){run&&this.trackCliArgument({arg:"run",value:this.redactedValue})}trackCliOptionAttempt(attempt){attempt!==void 0&&this.trackCliOption({option:"attempt",value:String(attempt)})}trackCliFlagWait(wait){wait&&this.trackCliFlag("wait")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var MAX_STREAM_FAILURES=3,STREAM_RETRY_DELAY_MS=2e3,WAIT_TIMEOUT_MS=10*60*1e3,id=external_exports.string().min(1),attemptNumber=external_exports.number().int().positive(),timestamp=external_exports.number().refine(value=>Number.isFinite(new Date(value).getTime())),conclusionResult=external_exports.enum(["succeeded","failed","skipped"]),conclusion=external_exports.object({result:conclusionResult}),stepConclusion=external_exports.object({result:conclusionResult,reason:external_exports.string().optional()}),stepRun=external_exports.object({attempt:attemptNumber,createdAt:timestamp,started:external_exports.object({startedAt:timestamp}).optional()}),treeSchema=external_exports.object({invocation:external_exports.object({invocationId:id,attempt:attemptNumber,teamId:id,createdAt:timestamp,repositoryKey:id,ref:external_exports.string(),commitSha:external_exports.string(),status:external_exports.enum(["new","running","bootstrapping","bootstrapping_failed","snapshotted","sandbox_named","jobs_on_hive_clone_dispatched","jobs_on_hive_dispatched","jobs_on_hive_completed","jobs_on_hive_failed","awaiting_jobs","completed","skipped"]),skipped:external_exports.object({reason:external_exports.string()}).optional(),completed:external_exports.object({completedAt:timestamp,conclusion:conclusionResult.optional()}).optional(),runConclusion:conclusion.optional(),setupConclusion:conclusion.optional()}),repositories:external_exports.record(external_exports.string(),external_exports.object({owner:external_exports.string(),name:external_exports.string()})),jobs:external_exports.array(external_exports.object({definition:external_exports.object({jobDefinitionId:id,kind:external_exports.enum(["command","turbo"]),name:external_exports.string(),command:external_exports.string(),createdAt:timestamp}),run:stepRun.extend({jobDefinitionId:id,completed:external_exports.object({completedAt:timestamp,conclusion:stepConclusion}).optional()}).optional(),tasks:external_exports.array(external_exports.object({definition:external_exports.object({jobDefinitionId:id,jobRunAttempt:attemptNumber,taskDefinitionId:id,name:external_exports.string(),dependencyTaskDefinitionIds:external_exports.array(id),createdAt:timestamp}),run:stepRun.extend({taskDefinitionId:id,completed:external_exports.object({completedAt:timestamp,conclusion:stepConclusion.extend({result:external_exports.enum(["succeeded","cached","failed","skipped"])})}).optional()}).optional()}))}))});function validateTree(tree,expected){let parsed=treeSchema.safeParse(tree);if(!parsed.success||parsed.data.invocation.invocationId!==expected.invocationId||parsed.data.invocation.attempt!==expected.attempt||parsed.data.invocation.teamId!==expected.teamId)throw new Error("Invalid Vercel CI run tree.")}var CiWaitError=class extends Error{constructor(reason){super(reason==="ci_wait_timeout"?"Stopped waiting after 10 minutes. The run may still be running.":"Failed to wait for the Vercel CI run after 3 interrupted streams. The run may still be running.");this.reason=reason}};async function waitForRun(client,target,initial,asJson){let expected={invocationId:target.invocationId,attempt:target.attempt??initial.invocation?.attempt,teamId:target.accountId??initial.invocation?.teamId};if(validateTree(initial,expected),isTerminalRunStatus(getRunStatus(initial.invocation)))return initial;let tree=initial,attempt=initial.invocation.attempt,controller=new AbortController,timeoutError=new CiWaitError("ci_wait_timeout"),timer,deadline=new Promise((_resolve,reject)=>{timer=setTimeout(()=>{reject(timeoutError),controller.abort()},WAIT_TIMEOUT_MS)}),updateSpinner=()=>{if(asJson)return;let{total,finished}=countTasks(toRunView(tree)),progress2=total>0?` ${finished} of ${total} tasks finished`:"";output_manager_default.spinner(`Waiting for the run to finish\u2026${progress2}`)};asJson||(output_manager_default.stopSpinner(),output_manager_default.log("Waiting for the run to finish (up to 10 minutes). Press Ctrl+C to stop waiting; the run keeps going."));let follow=async()=>{let failures=0,incompleteStreams=0;for(;!controller.signal.aborted;){updateSpinner();let timedOut=!1,validTree=!1;try{for await(let event of streamCiInvocationTree(client,target.invocationId,{attempt,accountId:target.accountId,signal:controller.signal})){if(controller.signal.aborted)throw timeoutError;if(!event||typeof event!="object")throw new Error("Invalid Vercel CI run stream event.");if(event.type==="tree"){let{type:_type,...next}=event;if(validateTree(next,expected),countTasks(toRunView(next)),tree=next,validTree=!0,isTerminalRunStatus(getRunStatus(tree.invocation)))return tree;updateSpinner()}else if(event.type==="end"&&event.reason==="timeout"){timedOut=!0;break}else throw new Error("Vercel CI run stream ended without completion.")}}catch(err){if(controller.signal.aborted)throw timeoutError;if(isAPIError(err))throw err;output_manager_default.debug(`Vercel CI run stream interrupted: ${err}`)}if(timedOut)validTree&&(failures=0);else if(++failures>=MAX_STREAM_FAILURES||++incompleteStreams>=MAX_STREAM_FAILURES)throw new CiWaitError("ci_wait_interrupted");await new Promise((resolve,reject)=>{let onAbort=()=>{clearTimeout(retryTimer),reject(timeoutError)},retryTimer=setTimeout(()=>{controller.signal.removeEventListener("abort",onAbort),resolve()},STREAM_RETRY_DELAY_MS);controller.signal.addEventListener("abort",onAbort,{once:!0}),controller.signal.aborted&&onAbort()})}throw timeoutError};try{return await Promise.race([follow(),deadline])}finally{clearTimeout(timer),controller.abort(),asJson||output_manager_default.stopSpinner()}}async function resolveRunTarget(client,runArg,attempt){if(runArg!==void 0){let invocationId2=toApiRunId(runArg);if(!invocationId2)return invalidCiArguments(client,`Run IDs contain only letters and numbers. Find one with ${getCommandName("ci ls")}.`);let team=await resolveCiTeam(client);return team.ok?{invocationId:invocationId2,attempt,accountId:team.accountId}:team.exitCode}let context=await resolveCiContext(client);if(typeof context=="number")return context;let{git,accountId}=context;if(!git.commitSha)return failCi(client,{reason:AGENT_REASON.CI_RUN_NOT_FOUND,message:"This repository doesn't have any commits yet. Commit and push, then try again."});if(!git.branch){let command=buildCiCommand(client.argv,["ci","ls","--all-branches"]),exitCode=failCi(client,{reason:AGENT_REASON.CI_RUN_NOT_FOUND,message:"Can't find the run for HEAD while HEAD is detached. Check out its branch and try again, or list runs across all branches and pass a run ID.",next:[{command,when:"Find a run ID across all branches, then pass it explicitly"}]});return shouldEmitNonInteractiveCommandError(client)||output_manager_default.print(` ${command}
33
+ `),exitCode}let invocationId;try{let{invocations}=await listCiInvocations(client,{provider:git.provider,repository:git.repository,branch:git.branch,commitSha:git.commitSha,limit:1},accountId);invocationId=invocations.find(invocation=>invocation.commitSha===git.commitSha)?.invocationId}catch(err){return handleCiApiError(client,"find the Vercel CI run for HEAD",err)}if(!invocationId){let where=` on ${ciDisplayText(git.branch)}`;return failCi(client,{reason:AGENT_REASON.CI_RUN_NOT_FOUND,message:`No Vercel CI run found for ${toShortSha(git.commitSha)}${where}. Push the commit, or pass a run ID from ${getCommandName("ci ls")}.`,next:[{command:buildCiCommand(client.argv,["ci","ls"]),when:"List recent runs for this branch"}]})}return{invocationId,attempt,accountId}}async function resolveAttemptNumber(client,target){return target.attempt??await getLatestCiAttempt(client,target.invocationId,target.accountId)}async function inspect(client,argv){let telemetry=new CiInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(inspectSubcommand.options))}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs;if(telemetry.trackCliArgumentRun(args[0]),telemetry.trackCliOptionAttempt(flags["--attempt"]),telemetry.trackCliFlagWait(flags["--wait"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length>1)return invalidCiArguments(client,`Pass at most 1 run ID. Usage: ${getCommandName("ci inspect [run]")}`);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidCiArguments(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,attempt=flags["--attempt"];if(attempt!==void 0&&(!Number.isInteger(attempt)||attempt<1))return invalidCiArguments(client,"--attempt must be a whole number of 1 or more.");let target=await resolveRunTarget(client,args[0],attempt);if(typeof target=="number")return target;let inspectStamp=stamp_default(),tree;try{if(asJson||output_manager_default.spinner("Fetching Vercel CI run\u2026"),tree=await getCiInvocationTree(client,target.invocationId,{attempt:target.attempt,accountId:target.accountId}),flags["--wait"])try{tree=await waitForRun(client,target,tree,asJson)}catch(err){if(!(err instanceof CiWaitError))throw err;output_manager_default.stopSpinner();let command=buildCiCommand(client.argv,["ci","inspect",toRunView(tree).run.id,"--attempt",String(tree.invocation.attempt)]),failure={reason:err.reason,message:err.message,next:[{command,when:"Check the status of this attempt"}]};if(asJson)return client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,...failure},null,2)}
34
+ `),1;let exitCode=failCi(client,failure);return output_manager_default.print(` ${command}
35
+ `),exitCode}}catch(err){return output_manager_default.stopSpinner(),handleCiApiError(client,"fetch the Vercel CI run",err)}output_manager_default.stopSpinner();let view=toRunView(tree),next=getNextSteps(client,view,tree.invocation.source),failedWait=flags["--wait"]&&view.run.status==="failed";if(asJson){let payload=client.nonInteractive?{status:failedWait?AGENT_STATUS.ERROR:AGENT_STATUS.OK,message:`The Vercel CI run ${view.run.status}.`,...failedWait?{reason:"ci_run_failed"}:{},...view,next}:view;client.stdout.write(`${JSON.stringify(payload,null,2)}
36
+ `)}else{printRunView(view,inspectStamp());for(let step of next)output_manager_default.log(`${step.when}: ${import_chalk3.default.cyan(step.command)}`)}return failedWait?1:0}function getNextSteps(client,view,source){if(!toApiRunId(view.run.id))return[];let attemptArgs=["--attempt",String(view.run.attempt)];return isTerminalRunStatus(view.run.status)?view.run.status==="failed"?[{command:buildCiCommand(client.argv,["ci","logs",view.run.id,"--failed",...attemptArgs]),when:"Show logs for the failed tasks"},...source?.type==="vercel-ci"?[{command:buildCiCommand(client.argv,["ci","rerun",view.run.id]),when:"Start a new attempt of this run"}]:[]]:[]:[{command:buildCiCommand(client.argv,["ci","inspect",view.run.id,"--wait",...attemptArgs]),when:"Wait for this run to finish"}]}var import_chalk4=__toESM(require_source(),1),import_pluralize2=__toESM(require_pluralize(),1);var CiStreamOutputError=class extends Error{},CiReplayLimitError=class extends Error{};async function writeCiOutput(stream,text){await new Promise((resolve,reject)=>{let cleanup=()=>{stream.removeListener("drain",onDrain),stream.removeListener("error",onError),stream.removeListener("close",onClose)},onDrain=()=>{cleanup(),resolve()},onError=()=>{cleanup(),reject(new CiStreamOutputError("Failed to write task logs."))},onClose=()=>{cleanup(),reject(new CiStreamOutputError("Task log output closed."))};if(stream.once("drain",onDrain),stream.once("error",onError),stream.once("close",onClose),stream.destroyed)return onClose();try{stream.write(text)&&onDrain()}catch{onError()}})}var CiLogReplay=class{constructor(maxBytes=8*1024*1024,maxKeys=5e4){this.maxBytes=maxBytes;this.maxKeys=maxKeys;this.counts=new Map;this.bytes=0}begin(){let remaining=new Map(this.counts);return line=>{let key=JSON.stringify([line.timestamp,line.level,line.message]),count=remaining.get(key)??0;if(count>0)return remaining.set(key,count-1),!1;if(!this.counts.has(key)){let bytes=Buffer.byteLength(key)+128;if(this.bytes+bytes>this.maxBytes||this.counts.size>=this.maxKeys)throw new CiReplayLimitError("Stopped following task logs because full replay reached its memory limit. Fetch task logs without --follow.");this.bytes+=bytes}return this.counts.set(key,(this.counts.get(key)??0)+1),!0}}};async function reportCiStreamError(client,asJson,report){if(!asJson)return report(client);let payload="",reportingClient=new Proxy(client,{get(target,property){return property==="nonInteractive"?!0:property==="stdout"?{write:text=>(payload+=text,!0)}:Reflect.get(target,property,target)}}),code=report(reportingClient);return payload&&await writeCiOutput(client.stdout,`${JSON.stringify(JSON.parse(payload))}
37
+ `),code}var CiLogsTelemetryClient=class extends TelemetryClient{trackCliArgumentRun(run){run&&this.trackCliArgument({arg:"run",value:this.redactedValue})}trackCliFlagFailed(failed){failed&&this.trackCliFlag("failed")}trackCliOptionTask(tasks){tasks?.length&&this.trackCliOption({option:"task",value:this.redactedValue})}trackCliOptionLevel(levels){levels?.length&&this.trackCliOption({option:"level",value:levels.join(",")})}trackCliOptionGrep(grep2){grep2!==void 0&&this.trackCliOption({option:"grep",value:this.redactedValue})}trackCliOptionAttempt(attempt){attempt!==void 0&&this.trackCliOption({option:"attempt",value:String(attempt)})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliFlagFollow(follow){follow&&this.trackCliFlag("follow")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var MAX_TASK_LIMIT=25,MAX_GREP_LENGTH=256,EOF_LEVEL2="eof",MAX_STREAM_FAILURES2=3,STREAM_RETRY_DELAY_MS2=2e3;async function logs(client,argv){let telemetry=new CiLogsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(logsSubcommand.options))}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs;if(telemetry.trackCliArgumentRun(args[0]),telemetry.trackCliFlagFailed(flags["--failed"]),telemetry.trackCliOptionTask(flags["--task"]),telemetry.trackCliOptionLevel(flags["--level"]),telemetry.trackCliOptionGrep(flags["--grep"]),telemetry.trackCliOptionAttempt(flags["--attempt"]),telemetry.trackCliOptionLimit(flags["--limit"]),telemetry.trackCliFlagFollow(flags["--follow"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length>1)return invalidCiArguments(client,`Pass at most 1 run ID. Usage: ${getCommandName("ci logs [run]")}`);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidCiArguments(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,levels=flags["--level"]??[];if(levels.find(level=>!CI_LOG_LEVELS.includes(level))!==void 0)return invalidCiArguments(client,`Level must be one of: ${CI_LOG_LEVELS.join(", ")}.`);let attempt=flags["--attempt"];if(attempt!==void 0&&(!Number.isInteger(attempt)||attempt<1))return invalidCiArguments(client,"--attempt must be a whole number of 1 or more.");let limit=flags["--limit"];if(limit!==void 0&&(!Number.isInteger(limit)||limit<1||limit>MAX_TASK_LIMIT))return invalidCiArguments(client,`--limit must be a whole number from 1 to ${MAX_TASK_LIMIT}.`);let grep2=flags["--grep"];if(grep2!==void 0){if(grep2.trim()===""||grep2.length>MAX_GREP_LENGTH)return invalidCiArguments(client,`--grep takes 1 to ${MAX_GREP_LENGTH} characters of text.`);if(flags["--follow"])return invalidCiArguments(client,"--grep can't be combined with --follow. Use --level to filter a stream.");if(limit!==void 0)return invalidCiArguments(client,"--grep searches every task, so --limit does not apply. Narrow with --task or --failed.")}if(flags["--failed"]&&flags["--follow"])return invalidCiArguments(client,"--failed can't be combined with --follow. Fetch failed task logs without --follow.");let tasks=flags["--task"]??[];if(flags["--follow"]&&tasks.length!==1)return invalidCiArguments(client,"--follow streams 1 task at a time. Pass --task <name>.");let target=await resolveRunTarget(client,args[0],attempt);if(typeof target=="number")return target;let attemptNumber2;try{attemptNumber2=await resolveAttemptNumber(client,target)}catch(err){return handleCiApiError(client,"fetch the Vercel CI run",err)}if(flags["--follow"])return followTask(client,{invocationId:target.invocationId,attempt:attemptNumber2,accountId:target.accountId,taskName:tasks[0],levels,asJson});let result,setup,runFinished;try{if(asJson||output_manager_default.spinner("Fetching task logs\u2026"),result=await getCiTaskLogs(client,target.invocationId,attemptNumber2,{tasks,conclusions:flags["--failed"]?["failed"]:void 0,levels,search:grep2,limit},target.accountId),flags["--failed"]&&result.tasks.length===0&&(tasks.length===0&&(setup=await getCiSetupLogs(client,target.invocationId,attemptNumber2,{levels,accountId:target.accountId})),!setup?.failed)){let tree=await getCiInvocationTree(client,target.invocationId,{attempt:attemptNumber2,accountId:target.accountId});runFinished=!!(tree.invocation.completed||tree.invocation.skipped)}}catch(err){return output_manager_default.stopSpinner(),handleCiApiError(client,"fetch task logs",err)}output_manager_default.stopSpinner();let view={run:{id:toDisplayRunId(target.invocationId),attempt:attemptNumber2,...runFinished!==void 0?{finished:runFinished}:{}},tasks:result.tasks.map(task=>({job:task.jobName,name:task.taskName,status:task.conclusion?.result??"running",...task.conclusion&&"reason"in task.conclusion?{reason:task.conclusion.reason}:{},lines:task.lines.filter(isContentLine).map(toJsonLine)})),hasMore:result.hasMore,...setup?.failed?{setup:{status:"failed",lines:setup.lines.filter(isContentLine).filter(line=>grep2===void 0||matchesGrep(line,grep2)).map(toJsonLine)}}:{}};if(asJson)return await writeCiOutput(client.stdout,`${JSON.stringify(view,null,2)}
38
+ `),0;if(view.setup){output_manager_default.log(`${import_chalk4.default.bold("Setup")} ${import_chalk4.default.gray("\xB7")} failed`),view.setup.lines.length===0&&output_manager_default.print(import_chalk4.default.gray(grep2===void 0?` No log lines.
39
+ `:` No setup log lines match "${ciDisplayText(grep2)}".
40
+ `));for(let line of view.setup.lines)await writeCiOutput(client.stdout,`${grep2===void 0?ciDisplayText(line.message):highlightGrep(line.message,grep2)}
41
+ `);return 0}if(grep2!==void 0)return printGrepMatches(client,view,grep2);if(view.tasks.length===0)return output_manager_default.log(flags["--failed"]&&tasks.length===0?runFinished?"No failed tasks in this run.":"No failed tasks yet. The run is still in progress.":"No tasks match the current filters."),0;for(let task of view.tasks){let reason=task.reason?` ${import_chalk4.default.gray("\xB7")} ${ciDisplayText(task.reason)}`:"";output_manager_default.log(`${import_chalk4.default.bold(ciDisplayText(task.name))} ${import_chalk4.default.gray("\xB7")} ${ciDisplayText(task.status)}${reason}`),task.lines.length===0&&output_manager_default.print(import_chalk4.default.gray(` No log lines.
42
+ `));for(let line of task.lines)await writeCiOutput(client.stdout,`${ciDisplayText(line.message)}
43
+ `)}return view.hasMore&&output_manager_default.log(`Showing ${(0,import_pluralize2.default)("task",view.tasks.length,!0)}. More tasks match; narrow with --task or raise --limit (max ${MAX_TASK_LIMIT}).`),0}async function printGrepMatches(client,view,grep2){let matching=view.tasks.filter(task=>task.lines.length>0).map(task=>({...task,name:ciDisplayText(task.name)}));if(matching.length===0)return output_manager_default.log(`No log lines match "${ciDisplayText(grep2)}".`),0;let width=Math.max(...matching.map(task=>task.name.length)),lineCount=0;for(let task of matching)for(let line of task.lines)lineCount++,await writeCiOutput(client.stdout,`${import_chalk4.default.cyan(task.name.padEnd(width))} ${highlightGrep(line.message,grep2)}
44
+ `);return output_manager_default.log(`${(0,import_pluralize2.default)("matching line",lineCount,!0)} in ${(0,import_pluralize2.default)("task",matching.length,!0)}`),view.hasMore&&output_manager_default.log(`Showing the first ${lineCount} matching lines. Narrow with --task, --failed, or --level.`),0}function matchesGrep(line,grep2){return line.message.toLowerCase().includes(grep2.toLowerCase())}function highlightGrep(message,grep2){message=ciDisplayText(message);let needle=ciDisplayText(grep2);if(needle.length===0)return message;let literal=needle.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return message.replace(new RegExp(literal,"giu"),match=>import_chalk4.default.red.bold(match))}async function followTask(client,options){let replay=new CiLogReplay,report=callback=>reportCiStreamError(client,options.asJson,callback),previousLocator,completingLocator,sawContent=!1,failures=0,announced=!1;for(;;){let locator,finished;try{if(completingLocator)locator=completingLocator,finished=!0;else{let resolved=await findTask(client,options,report);if(typeof resolved=="number")return resolved;({locator,finished}=resolved)}}catch(err){if(err instanceof CiStreamOutputError)throw err;return report(reportingClient=>isAPIError(err)?handleCiApiError(reportingClient,"fetch the Vercel CI run",err):failCi(reportingClient,{reason:AGENT_REASON.API_ERROR,message:"Failed to fetch a valid Vercel CI run tree. Fetch task logs without --follow."}))}let locatorKey=JSON.stringify(locator);locatorKey!==previousLocator&&(replay=new CiLogReplay,sawContent=!1,completingLocator=void 0,failures=0,previousLocator=locatorKey),!options.asJson&&!announced&&(output_manager_default.log(`Streaming logs for ${import_chalk4.default.bold(ciDisplayText(options.taskName))}. Press Ctrl+C to stop; the run keeps going.`),announced=!0);let sawEof=!1,printLines=async(lines,accept=replay.begin())=>{if(!Array.isArray(lines)||!lines.every(isLogEvent))throw new Error("Invalid Vercel CI log event.");for(let line of lines){if(!isContentLine(line)){sawEof=!0;continue}sawContent=!0,accept(line)&&await writeCiOutput(client.stdout,options.asJson?`${JSON.stringify(toJsonLine(line))}
45
+ `:`${ciDisplayText(line.message)}
46
+ `)}};try{if(!finished){let accept=replay.begin();for await(let event of streamCiTaskRunLogs(client,locator,{levels:options.levels,accountId:options.accountId})){let value=event,lines=typeof value=="object"&&value!==null&&"lines"in value?value.lines:[value];if(await printLines(lines,accept),sawEof)break}}if(finished||sawEof){completingLocator=locator;let snapshot=await getCiTaskRunLogs(client,locator,{levels:options.levels,accountId:options.accountId});if(await printLines(snapshot?.lines),locator.taskRunAttempt>1&&!sawContent&&!options.levels.length){let message=`No logs were returned for task attempt ${locator.taskRunAttempt}. Logs may be empty or unavailable for this attempt. Fetch task logs without --follow.`;options.asJson?await writeCiOutput(client.stderr,`${JSON.stringify({type:"warning",reason:"ci_logs_empty",message})}
47
+ `):output_manager_default.print(`! ${message}
48
+ `)}return 0}failures=0}catch(err){if(err instanceof CiStreamOutputError)throw err;if(err instanceof CiReplayLimitError)return report(reportingClient=>failCi(reportingClient,{reason:AGENT_REASON.API_ERROR,message:err.message}));if(isAPIError(err))return report(reportingClient=>handleCiApiError(reportingClient,"stream task logs",err));if(++failures>=MAX_STREAM_FAILURES2)return report(reportingClient=>failCi(reportingClient,{reason:AGENT_REASON.API_ERROR,message:`Failed to stream task logs after ${MAX_STREAM_FAILURES2} interrupted or invalid responses. The run may still be running; check it with ${getCommandName(`ci inspect ${toDisplayRunId(options.invocationId)}`)}.`}));output_manager_default.debug(`Vercel CI log stream interrupted: ${ciDisplayText(String(err))}`)}await sleep(STREAM_RETRY_DELAY_MS2)}}async function findTask(client,options,report){let matches=(await getCiInvocationTree(client,options.invocationId,{attempt:options.attempt,accountId:options.accountId})).jobs.flatMap(job2=>job2.tasks.filter(task2=>task2.definition.name===options.taskName).map(task2=>({job:job2,task:task2})));if(matches.length!==1)return report(reportingClient=>failCi(reportingClient,{reason:matches.length===0?AGENT_REASON.NOT_FOUND:AGENT_REASON.INVALID_ARGUMENTS,message:matches.length===0?`Couldn't find a task with that name in this run. List tasks with ${getCommandName(`ci inspect ${toDisplayRunId(options.invocationId)}`)}.`:`${matches.length} jobs have a task with that name. Streaming needs a unique task name.`}));let[{job,task}]=matches;return{locator:{invocationId:options.invocationId,attempt:options.attempt,jobDefinitionId:job.definition.jobDefinitionId,jobRunAttempt:task.definition.jobRunAttempt,taskDefinitionId:task.definition.taskDefinitionId,taskRunAttempt:task.run?.attempt??1},finished:!!task.run?.completed}}function isLogEvent(value){if(typeof value!="object"||value===null)return!1;let line=value;return typeof line.message=="string"&&typeof line.level=="string"&&(line.level===EOF_LEVEL2||CI_LOG_LEVELS.includes(line.level))&&typeof line.timestamp=="number"&&Number.isFinite(line.timestamp)&&!Number.isNaN(new Date(line.timestamp).getTime())}function isContentLine(line){return line.level!==EOF_LEVEL2}function toJsonLine(line){return{timestamp:new Date(line.timestamp).toISOString(),level:line.level,message:line.message}}var CiRerunTelemetryClient=class extends TelemetryClient{trackCliArgumentRun(run){run&&this.trackCliArgument({arg:"run",value:this.redactedValue})}trackCliFlagWait(wait){wait&&this.trackCliFlag("wait")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function rerun(client,argv){let telemetry=new CiRerunTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(rerunSubcommand.options))}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs;if(telemetry.trackCliArgumentRun(args[0]),telemetry.trackCliFlagWait(flags["--wait"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length>1)return invalidCiArguments(client,`Pass at most 1 run ID. Usage: ${getCommandName("ci rerun [run]")}`);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidCiArguments(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,target=await resolveRunTarget(client,args[0],void 0);if(typeof target=="number")return target;let runId=toDisplayRunId(target.invocationId),currentNext=[{command:buildCiCommand(client.argv,["ci","inspect",runId]),when:"Inspect the current attempt before deciding what to do next"}],unsupportedMessage="Can't rerun this run. Only runs with a Vercel CI source can be rerun; deployment-native checks aren't supported.",staleMessage="Can't rerun this attempt because a newer attempt exists. Inspect the current attempt before deciding what to do next.",sourceTree;try{sourceTree=await getCiInvocationTree(client,target.invocationId,{accountId:target.accountId})}catch(err){return handleCiApiError(client,"fetch the source Vercel CI run",err)}let previous=toRunView(sourceTree).run,source=sourceTree.invocation.source;if(asJson||(printAlignedLabel("Repository",ciDisplayText(previous.repository)),printAlignedLabel("Branch",ciDisplayText(previous.branch)),printAlignedLabel("Commit",ciDisplayText(previous.commitSha)),printAlignedLabel("Previous status",`attempt ${previous.attempt} \xB7 ${previous.status}`)),source&&source.type!=="vercel-ci")return reportFailure(client,asJson,{reason:AGENT_REASON.CI_RUN_NOT_RETRYABLE,message:unsupportedMessage,next:currentNext});if(!isTerminalRunStatus(previous.status))return reportFailure(client,asJson,{reason:AGENT_REASON.CI_RUN_IN_PROGRESS,message:"Can't rerun a run that hasn't finished. Wait for the current attempt to finish.",next:[{command:buildCiCommand(client.argv,["ci","inspect",runId,"--attempt",String(previous.attempt),"--wait"]),when:"Wait for the current attempt to finish"}]});if(!args[0]&&(previous.status==="succeeded"||previous.status==="skipped"))return reportFailure(client,asJson,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,userActionRequired:!0,message:`The run for HEAD is ${previous.status}. Pass its run ID explicitly to intentionally start another attempt.`,run:previous,next:[{command:buildCiCommand(client.argv,["ci","rerun",runId]),when:"Intentionally rerun this finished run"}]});let newAttempt;try{asJson||(output_manager_default.print(`
49
+ `),output_manager_default.spinner(`Starting a new attempt of run ${runId}\u2026`));let sourceAttempt=await getLatestCiAttempt(client,target.invocationId,target.accountId);if(sourceAttempt!==previous.attempt)return output_manager_default.stopSpinner(),reportFailure(client,asJson,{reason:"source_not_latest",message:staleMessage,next:currentNext});({attempt:newAttempt}=await client.fetch(`/v1/vercel-ci/invocations/${encodeURIComponent(target.invocationId)}/attempts/${sourceAttempt}/retry`,{method:"POST",accountId:target.accountId,retry:{retries:0},bailOn429:!0}))}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===409){if(err.code==="retry_not_supported")return reportFailure(client,asJson,{reason:AGENT_REASON.CI_RUN_NOT_RETRYABLE,message:unsupportedMessage,next:currentNext});if(err.code==="source_not_latest")return reportFailure(client,asJson,{reason:"source_not_latest",message:staleMessage,next:currentNext});if(err.code==="retry_not_allowed")return reportFailure(client,asJson,{reason:AGENT_REASON.CI_RUN_IN_PROGRESS,message:"Can't rerun a run that hasn't finished. Inspect the current attempt before deciding what to do next.",next:currentNext})}return reportFailure(client,asJson,{reason:apiFailureReason(err),message:`Failed to start a new attempt of run ${runId}. The request wasn't retried; inspect the current attempt before trying another rerun.`,next:currentNext})}output_manager_default.stopSpinner();let started={id:runId,attempt:newAttempt},attemptArgs=["ci","inspect",runId,"--attempt",String(newAttempt)],inspectCommand=buildCiCommand(client.argv,[...attemptArgs,"--wait"]),next=[{command:inspectCommand,when:"Wait for the new attempt to finish"}];if(asJson||printAlignedLabel("Started",`attempt ${newAttempt} of run ${runId}`,{gutter:"\u2713"}),!flags["--wait"]){if(asJson){let payload=client.nonInteractive?{status:AGENT_STATUS.OK,run:started,previousRun:previous,message:`Started attempt ${newAttempt} of run ${runId}.`,next}:{run:started};client.stdout.write(`${JSON.stringify(payload,null,2)}
50
+ `)}else output_manager_default.print(`
51
+ Wait for the new attempt to finish:
52
+ ${inspectCommand}
53
+ `);return 0}let rerunStamp=stamp_default(),tree;try{let waitTarget={...target,attempt:newAttempt};tree=await getCiInvocationTree(client,target.invocationId,{attempt:newAttempt,accountId:target.accountId}),tree=await waitForRun(client,waitTarget,tree,asJson)}catch(err){return output_manager_default.stopSpinner(),reportFailure(client,asJson,{reason:err instanceof CiWaitError?err.reason:apiFailureReason(err),message:`Started attempt ${newAttempt} of run ${runId}, but failed to wait for it. ${err instanceof CiWaitError?err.message:"The attempt may still be running."}`,run:started,next:[{command:buildCiCommand(client.argv,attemptArgs),when:"Check the status of the new attempt without starting another"}]})}output_manager_default.stopSpinner();let view=toRunView(tree),failed=view.run.status==="failed",completedNext=[{command:buildCiCommand(client.argv,failed?["ci","logs",runId,"--attempt",String(newAttempt),"--failed"]:attemptArgs),when:failed?"Show logs for the failed tasks":"Inspect the finished attempt"}];if(asJson){let payload=client.nonInteractive?{status:failed?AGENT_STATUS.ERROR:AGENT_STATUS.OK,...failed?{reason:"ci_run_failed"}:{},message:`Attempt ${newAttempt} of run ${runId} ${view.run.status}.`,...view,next:completedNext}:view;client.stdout.write(`${JSON.stringify(payload,null,2)}
54
+ `)}else printRunView(view,rerunStamp()),output_manager_default.print(`
55
+ ${completedNext[0].when}:
56
+ ${completedNext[0].command}
57
+ `);return failed?1:0}function apiFailureReason(err){if(isAPIError(err)){if(err.status===403)return AGENT_REASON.PERMISSION_DENIED;if(err.status===404)return AGENT_REASON.CI_RUN_NOT_FOUND;if(err.status===429)return AGENT_REASON.RATE_LIMITED}return AGENT_REASON.API_ERROR}function reportFailure(client,asJson,failure){if(asJson)client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,...failure},null,2)}
58
+ `);else{output_manager_default.fatal(failure.message);for(let step of failure.next)output_manager_default.print(` ${step.when}:
59
+ ${step.command}
60
+ `)}return 1}var import_chalk5=__toESM(require_source(),1),import_ms3=__toESM(require_ms(),1),import_pluralize3=__toESM(require_pluralize(),1);var CiLsTelemetryClient=class extends TelemetryClient{trackCliOptionGitBranch(gitBranch){gitBranch&&this.trackCliOption({option:"git-branch",value:this.redactedValue})}trackCliOptionBranch(branch){branch&&this.trackCliOption({option:"branch",value:this.redactedValue})}trackCliFlagAllBranches(allBranches){allBranches&&this.trackCliFlag("all-branches")}trackCliOptionCommit(commit){commit&&this.trackCliOption({option:"commit",value:this.redactedValue})}trackCliOptionStatus(status){status&&this.trackCliOption({option:"status",value:status})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var MAX_LIMIT=100,SAFE_CURSOR_PATTERN=/^[A-Za-z0-9_\-.=+/]+$/;async function ls(client,argv){let telemetry=new CiLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(listSubcommand.options))}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs;if(telemetry.trackCliOptionGitBranch(flags["--git-branch"]),telemetry.trackCliOptionBranch(flags["--branch"]),telemetry.trackCliFlagAllBranches(flags["--all-branches"]),telemetry.trackCliOptionCommit(flags["--commit"]),telemetry.trackCliOptionStatus(flags["--status"]),telemetry.trackCliOptionLimit(flags["--limit"]),telemetry.trackCliOptionNext(flags["--next"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length>0)return invalidCiArguments(client,`\`${getCommandNamePlain("ci ls")}\` doesn't take arguments. Filter runs with --git-branch, --commit, or --status.`);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return invalidCiArguments(client,formatResult.error);let asJson=formatResult.jsonOutput||client.nonInteractive,branchError=applyDeprecatedGitBranchFlag(client,flags,"--branch");if(branchError)return invalidCiArguments(client,branchError);if(flags["--git-branch"]&&flags["--all-branches"])return invalidCiArguments(client,"Can't combine --git-branch with --all-branches. Pass one of them.");if(flags["--commit"]&&flags["--all-branches"])return invalidCiArguments(client,"Can't combine --commit with --all-branches. Commit filters require a branch.");let status=flags["--status"];if(status!==void 0&&!CI_RUN_STATUSES.includes(status))return invalidCiArguments(client,`Status must be one of: ${CI_RUN_STATUSES.join(", ")}.`);let limit=flags["--limit"];if(limit!==void 0&&(!Number.isInteger(limit)||limit<1||limit>MAX_LIMIT))return invalidCiArguments(client,`--limit must be a whole number from 1 to ${MAX_LIMIT}.`);let context=await resolveCiContext(client);if(typeof context=="number")return context;let{git,accountId}=context,commitSha;if(flags["--commit"]){let resolved=await resolveCommitSha(client.cwd,flags["--commit"]);if(!resolved)return invalidCiArguments(client,"Couldn't resolve --commit to a commit in this repository. Pass the full 40-character SHA.");commitSha=resolved}let branch=flags["--all-branches"]?void 0:flags["--git-branch"]??git.branch;if(commitSha&&!branch)return invalidCiArguments(client,"--commit requires a branch. Pass --git-branch when HEAD is detached.");let lsStamp=stamp_default();asJson||output_manager_default.spinner("Fetching Vercel CI runs\u2026");let invocations,nextCursor;try{let response=await listCiInvocations(client,{provider:git.provider,repository:git.repository,branch,commitSha,...status?toRunStatusFilter(status):{},limit,cursor:flags["--next"]},accountId);invocations=commitSha?response.invocations.filter(inv=>inv.commitSha===commitSha):response.invocations,nextCursor=response.pagination.nextCursor}catch(err){return output_manager_default.stopSpinner(),handleCiApiError(client,"list Vercel CI runs",err)}output_manager_default.stopSpinner();let runs=invocations.map(invocation=>({...toRunSummary(invocation,{}),repository:git.repository})),nextArgs=nextCursor&&SAFE_CURSOR_PATTERN.test(nextCursor)?["ci ls",...Object.entries(flags).flatMap(([flag,value])=>flag==="--next"||GLOBAL_CLI_FLAG_NAMES.has(flag)?[]:typeof value=="boolean"?value?[flag]:[]:[flag,quoteCiCommandArg(String(value))]),...getGlobalFlagsFromArgv(client.argv).map(quoteCiCommandArg),"--next",nextCursor].join(" "):void 0;if(asJson){let payload={runs,pagination:{next:nextCursor??null}},agentPayload=client.nonInteractive?{status:AGENT_STATUS.OK,...payload,message:runs.length?`Found ${(0,import_pluralize3.default)("Vercel CI run",runs.length,!0)}.`:"No Vercel CI runs found.",next:[...nextArgs?[{command:getCommandNamePlain(nextArgs),when:"Show the next page of runs"}]:[]]}:payload;return client.stdout.write(`${JSON.stringify(agentPayload,null,2)}
61
+ `),0}let scope=describeScope2(git.repository,branch,commitSha);if(runs.length===0){let filtered=!!(status||commitSha||flags["--next"]);return output_manager_default.log(filtered?"No Vercel CI runs match the current filters.":`No Vercel CI runs found for ${scope}.`),0}return output_manager_default.log(`${(0,import_pluralize3.default)("Vercel CI run",runs.length,!0)} for ${scope} ${import_chalk5.default.gray(lsStamp())}`),output_manager_default.print(`
62
+ ${formatRunsTable(invocations)}
63
+
64
+ `),nextArgs&&printNextPageCommand(getCommandNamePlain(nextArgs)),0}function describeScope2(repository,branch,commitSha){let repo=import_chalk5.default.bold(ciDisplayText(repository));return commitSha?`${repo} at ${import_chalk5.default.bold(toShortSha(commitSha))}`:branch?`${repo} on ${import_chalk5.default.bold(ciDisplayText(branch))}`:`${repo} on all branches`}function formatRunsTable(invocations){let now=Date.now(),rows=invocations.map(invocation=>[ciDisplayText(toDisplayRunId(invocation.invocationId)),formatStatus(getRunStatus(invocation)),ciDisplayText(toBranchName(invocation.ref)),toShortSha(invocation.commitSha),import_chalk5.default.gray((0,import_ms3.default)(Math.max(now-invocation.createdAt,0)))]);return formatCiTable(["Run","Status","Branch","Commit","Age"],rows)}var COMMAND_CONFIG={enable:getCommandAliases(enableSubcommand),ls:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),logs:getCommandAliases(logsSubcommand),grep:getCommandAliases(grepSubcommand),rerun:getCommandAliases(rerunSubcommand)};async function main2(client){let parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(ciCommand.options),{permissive:!0})}catch(error){return printError(error,client),2}let telemetry=new CiTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand2(parsedArgs.args.slice(1),COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];function printHelp(command){return output_manager_default.print(help(command,{parent:ciCommand,columns:client.stderr.columns})),0}switch(subcommand){case"enable":return needHelp?(telemetry.trackCliFlagHelp("ci",subcommandOriginal),printHelp(enableSubcommand)):(telemetry.trackCliSubcommandEnable(subcommandOriginal),enable(client,args));case"ls":return needHelp?(telemetry.trackCliFlagHelp("ci",subcommandOriginal),printHelp(listSubcommand)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("ci",subcommandOriginal),printHelp(inspectSubcommand)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect(client,args));case"logs":return needHelp?(telemetry.trackCliFlagHelp("ci",subcommandOriginal),printHelp(logsSubcommand)):(telemetry.trackCliSubcommandLogs(subcommandOriginal),logs(client,args));case"grep":return needHelp?(telemetry.trackCliFlagHelp("ci",subcommandOriginal),printHelp(grepSubcommand)):(telemetry.trackCliSubcommandGrep(subcommandOriginal),grep(client,args));case"rerun":return needHelp?(telemetry.trackCliFlagHelp("ci",subcommandOriginal),printHelp(rerunSubcommand)):(telemetry.trackCliSubcommandRerun(subcommandOriginal),rerun(client,args));default:return needHelp&&telemetry.trackCliFlagHelp("ci"),output_manager_default.print(help(ciCommand,{columns:client.stderr.columns})),needHelp?0:2}}var DRAIN_TYPES=["logs","traces","analytics","speed-insights"],DRAIN_SCHEMAS={logs:{log:{version:"v1"}},traces:{trace:{version:"v1"}},analytics:{analytics:{version:"v2"}},"speed-insights":{speed_insights:{version:"v1"}}},LOG_SOURCES=["lambda","edge","static","external","build","firewall","redirect"],DRAIN_ENVIRONMENTS=["production","preview"];function drainPath(id2){return`/v1/drains/${encodeURIComponent(id2)}`}async function listDrains(client,opts={}){let query=new URLSearchParams;opts.project&&query.set("projectId",opts.project);let withStats=new URLSearchParams(query);withStats.set("includeDeliveryStats","true");try{let{drains:drains3}=await client.fetch(`/v1/drains?${withStats}`,{retry:{retries:0}});return{drains:drains3,hasDeliveryStats:drains3.some(drain=>drain.deliveryStats),deliveryStatsUnavailable:!1}}catch(err){if(!isAPIError(err)||err.status!==503||err.code!=="delivery_stats_unavailable")throw err}let suffix=opts.project?`?${query}`:"",{drains:drains2}=await client.fetch(`/v1/drains${suffix}`);return{drains:drains2,hasDeliveryStats:!1,deliveryStatsUnavailable:!0}}function getDrain(client,id2){return client.fetch(drainPath(id2))}function createDrain(client,body){return client.fetch("/v1/drains",{method:"POST",body,retry:{retries:0}})}function updateDrain(client,id2,body){return client.fetch(drainPath(id2),{method:"PATCH",body})}async function deleteDrain(client,id2){await client.fetch(drainPath(id2),{method:"DELETE"})}var KNOWN_VALUES={type:DRAIN_TYPES,encoding:["json","ndjson","proto"],source:LOG_SOURCES,environment:DRAIN_ENVIRONMENTS},DrainsTelemetryClient=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})}trackCliSubcommandPause(actual){this.trackCliSubcommand({subcommand:"pause",value:actual})}trackCliSubcommandResume(actual){this.trackCliSubcommand({subcommand:"resume",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackOptions(flags){for(let[flag,value]of Object.entries(flags)){if(!flag.startsWith("--")||value===void 0)continue;let option=flag.slice(2);if(typeof value=="boolean"){value&&this.trackCliFlag(option);continue}let values=Array.isArray(value)?value:[value],known=KNOWN_VALUES[option],recorded=values.map(item=>known?.includes(String(item))?String(item):this.redactedValue);this.trackCliOption({option,value:option==="limit"||option==="sample-rate"?String(value):recorded.join(",")})}}};var import_chalk6=__toESM(require_source(),1),import_ms4=__toESM(require_ms(),1),import_strip_ansi2=__toESM(require_strip_ansi(),1);var SCHEMA_LABELS={log:"Logs",trace:"Traces",analytics:"Web Analytics",speed_insights:"Speed Insights",ai_gateway:"AI Gateway",audit_log:"Audit Logs",connect:"Connect"},DISABLED_REASONS={"feature-not-available":"the feature is not available on the plan","account-plan-downgrade":"the plan was downgraded","disabled-by-admin":"an admin disabled it","limits-exceeded":"it exceeded its limits"};function formatType(drain){let labels=Object.keys(drain.schemas??{}).map(schema=>SCHEMA_LABELS[schema]??schema);return labels.length?labels.join(", "):"-"}function getEndpoint(drain){let endpoint=drain.delivery?.endpoint;if(typeof endpoint=="string")return endpoint;if(endpoint&&typeof endpoint=="object"&&"traces"in endpoint&&typeof endpoint.traces=="string")return endpoint.traces}function formatProjects(drain){let ids=drain.projectIds;return ids?.length?ids.length===1?ids[0]:`${ids.length} projects`:"All"}function formatState(drain){if(drain.status==="disabled"){if(drain.disabledReason&&drain.disabledReason!=="disabled-by-owner"){let reason=DISABLED_REASONS[drain.disabledReason];return reason?`Disabled (${reason})`:"Disabled by Vercel"}return"Paused"}return drain.status==="errored"?"Errored":"Enabled"}function formatDeliveredRate(stats){let rate=(stats.attempts-stats.failures)/stats.attempts;return rate===1?"100%":rate>=.999?">99.9%":rate>=.9?`${Math.floor(rate*1e3)/10}%`:`${Math.floor(rate*100)}%`}function getStatus(drain){if(drain.status==="disabled")return{label:!drain.disabledReason||drain.disabledReason==="disabled-by-owner"?"Paused":"Disabled",tone:"muted"};let stats=drain.deliveryStats;if(!stats||stats.state==="unknown"||stats.attempts===0)return{label:"No data",tone:"muted"};let delivered=`${formatDeliveredRate(stats)} delivered`;return stats.state==="failing"?{label:`Degraded, ${delivered}`,tone:"pending"}:{label:`Healthy, ${delivered}`,tone:"success"}}function formatAge(client,timestamp2){if(!client.stdout.isTTY)return new Date(timestamp2).toISOString();let age=Date.now()-timestamp2;return age<7*24*60*60*1e3?(0,import_ms4.default)(Math.max(0,age)):new Date(timestamp2).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function formatDrainsTable(client,drains2,{withStatus}){let headers=["ID","Name","Type","URL","Projects"];withStatus&&headers.push("Status"),headers.push("Age");let tty=!!client.stdout.isTTY,rows=drains2.map(drain=>{let row2=[drain.id,remoteText(drain.name),formatType(drain),remoteText(getEndpoint(drain)??"-"),formatProjects(drain)];if(withStatus){let{label,tone}=getStatus(drain);row2.push(tty?output_manager_default.formatStatus(label,tone):label)}return row2.push(formatAge(client,drain.createdAt)),row2});return tty?table([headers.map(header=>import_chalk6.default.dim(header)),...rows],{hsep:3}).split(`
65
+ `).map(line=>` ${line}`.trimEnd()).join(`
66
+ `):[headers,...rows].map(row2=>row2.map(cell2=>(0,import_strip_ansi2.default)(cell2)).join(" ")).join(`
67
+ `)}function formatFilter(drain){let filter=drain.filterV2?.filter;return filter?filter.type!=="basic"?{custom:remoteText(filter.text)}:{sources:filter.log?.sources?.length?filter.log.sources.join(", "):"All",environments:filter.deployment?.environments?.length?filter.deployment.environments.join(", "):"All"}:{sources:"All",environments:"All"}}function formatSampling(drain){return drain.sampling?.length?drain.sampling.map(rule=>{let scope=[rule.env,rule.requestPath].filter(Boolean).join(" "),rate=`${Math.round(rule.rate*1e4)/100}%`;return scope?`${rate} (${remoteText(scope)})`:rate}).join(", "):"100%"}function formatDrainRows(drain,{full}){let rows=[["Drain ID",drain.id],["Type",formatType(drain)],["URL",remoteText(getEndpoint(drain)??"-")]],projects=drain.projectIds?.length?drain.projectIds.join(", "):"All";if(rows.push(["Projects",projects]),!full)return rows;let delivery=drain.delivery;delivery?.encoding&&rows.push(["Encoding",delivery.encoding]);let headers=Object.keys(delivery?.headers??{});headers.length&&rows.push(["Headers",headers.map(remoteText).join(", ")]),rows.push(["Signed",delivery?.secret?"Yes":"No"]);let filter=formatFilter(drain);return"custom"in filter?rows.push(["Filter",filter.custom??""]):drain.schemas?.log&&(rows.push(["Sources",filter.sources]),rows.push(["Environments",filter.environments])),rows.push(["Sampling",formatSampling(drain)]),rows.push(["Status",formatState(drain)]),drain.source?.kind==="integration"&&rows.push(["Managed By","Integration"]),rows.push(["Created",new Date(drain.createdAt).toISOString()]),rows}function formatDrainDetails(drain){return[formatAlignedLabel("Drain",remoteText(drain.name)),...formatDrainRows(drain,{full:!0}).map(([label,value])=>formatAlignedLabel(label,value))].join(`
68
+ `)}function printReceipt(verb,drain,{details}){output_manager_default.print(`${formatAlignedLabel(verb,remoteText(drain.name),{gutter:"\u2713"})}
69
+ `);let rows=details?formatDrainRows(drain,{full:!1}):[["Drain ID",drain.id]];for(let[label,value]of rows)output_manager_default.print(`${formatAlignedLabel(label,value)}
70
+ `)}var HEADER_NAME=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,CONTROL_CHARACTERS=/[\u0000-\u001f\u007f]/,MAX_SECRET_BYTES=4096;function splitList(value){if(value!==void 0)return value.split(",").map(item=>item.trim()).filter(Boolean)}function readName(value,issues){if(value===void 0)return;let name=value.trim();if(!name||name.length>256||CONTROL_CHARACTERS.test(name)){issues.push({field:"name",message:"Use 1-256 characters with no control characters."});return}return name}function readUrl(value,issues){if(value===void 0)return;let url;try{url=new URL(value)}catch{issues.push({field:"url",message:"Use a full URL, like https://example.com/drain."});return}if(url.protocol!=="https:"&&url.protocol!=="http:"){issues.push({field:"url",message:"Use an http or https URL."});return}return value}var DASHBOARD_ONLY_TYPES={"audit-log":"an audit log drain","audit-logs":"an audit log drain",audit_log:"an audit log drain","ai-gateway":"an AI Gateway drain",ai_gateway:"an AI Gateway drain",connect:"a Connect drain"};function getDashboardOnlyType(value){return value===void 0?void 0:DASHBOARD_ONLY_TYPES[value]}function readType(value,issues){if(value!==void 0){if(!DRAIN_TYPES.includes(value)){issues.push({field:"type",message:`Use ${DRAIN_TYPES.join(", ")}.`});return}return value}}function encodingsFor(type){return type==="traces"?["json","proto"]:["json","ndjson"]}function readEncoding(value,type,issues){if(value===void 0||type===void 0)return;let allowed=encodingsFor(type);if(!allowed.includes(value)){issues.push({field:"encoding",message:`Use ${allowed.join(" or ")} for ${type} drains.`});return}return value}function readHeaders(values,issues){if(values===void 0)return;let headers={};for(let[index,raw]of values.entries()){let separator=raw.indexOf(":"),name=separator===-1?"":raw.slice(0,separator).trim(),value=separator===-1?"":raw.slice(separator+1).trim();if(!HEADER_NAME.test(name)||CONTROL_CHARACTERS.test(value)){issues.push({field:"header",message:`Header ${index+1} must look like "Name: value".`});continue}headers[name]=value}return headers}function readEnum(values,allowed,field,issues){if(values===void 0)return;let items=[...new Set(values.flatMap(value=>value.split(",")))].map(value=>value.trim()).filter(Boolean);if(items.filter(item=>!allowed.includes(item)).length||items.length===0){issues.push({field,message:`Use ${allowed.join(", ")}.`});return}return items}function readSources(values,issues){return readEnum(values,LOG_SOURCES,"source",issues)}function readEnvironments(values,issues){return readEnum(values,DRAIN_ENVIRONMENTS,"environment",issues)}function readSampleRate(value,issues){if(value!==void 0){if(!Number.isFinite(value)||value<=0||value>100){issues.push({field:"sample-rate",message:"Use a percentage greater than 0 and at most 100."});return}return value}}function toSampling(percent){if(!(percent>=100))return[{type:"head_sampling",rate:percent/100}]}function toFilter(changes,base={type:"basic"}){let filter={...base,type:"basic"};if(changes.sources&&(filter.log={sources:changes.sources}),changes.environments&&(filter.deployment={environments:changes.environments}),!(!filter.log&&!filter.deployment&&!filter.project))return{version:"v2",filter}}async function readSecret(client,value){if(value!==void 0)return value!=="-"?value:readStdinText(client.stdin,MAX_SECRET_BYTES)}async function resolveProjectIds(client,projects){let ids=[],missing=[];for(let nameOrId of[...new Set(projects)]){let project=await getProjectByNameOrId(client,nameOrId);project instanceof ProjectNotFound?missing.push(nameOrId):ids.push(project.id)}return{ids,missing}}var DRAIN_ID_PATTERN=/^[a-zA-Z0-9_-]{1,256}$/;function drainsCommand2(client,command){return withGlobalFlags(client,`drains ${command}`)}function reportsJsonErrors(client,json){return json||client.nonInteractive}function fail(client,json,failure,exitCode=getExitCodeForReason(failure.reason)){output_manager_default.stopSpinner();let next=failure.next?.map(step=>({command:step.full?step.command:drainsCommand2(client,step.command),when:step.when}));if(reportsJsonErrors(client,json))return writeJsonError(client,{status:failure.reason===AGENT_REASON.CONFIRMATION_REQUIRED?AGENT_STATUS.ACTION_REQUIRED:AGENT_STATUS.ERROR,reason:failure.reason,message:failure.message,...next?.length?{next}:{},...failure.userActionRequired?{userActionRequired:!0}:{},...failure.data||failure.issues||failure.link?{data:{...failure.data,...failure.link?{url:failure.link.url}:{},...failure.issues?{issues:failure.issues.map(issue=>({...issue,reason:AGENT_REASON.INVALID_ARGUMENTS}))}:{}}}:{}},exitCode);output_manager_default.fatal(failure.message),failure.detail&&output_manager_default.print(` ${failure.detail}
71
+ `);for(let issue of failure.issues??[])output_manager_default.print(` ${`--${issue.field}`.padEnd(16)}${issue.message}
72
+ `);for(let step of next??[])output_manager_default.print(`
73
+ ${step.when}:
74
+ ${cmd(step.command)}
75
+ `);return failure.link&&output_manager_default.print(`
76
+ ${failure.link.when}:
77
+ ${failure.link.url}
78
+ `),exitCode}function usageError(client,json,message,helpCommand){return fail(client,json,{reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:`${helpCommand} --help`,when:"See all options"}]})}function parseSubcommand(client,argv,options,path){let json=argv.includes("--json"),parsed;try{let spec=getFlagsSpecification(options);parsed=parseArguments(argv,spec)}catch(err){return usageError(client,json,err instanceof Error?err.message:String(err),path)}return new DrainsTelemetryClient({opts:{store:client.telemetryEventStore}}).trackOptions(parsed.flags),{args:parsed.args,flags:parsed.flags,json:!!parsed.flags["--json"]}}function readDrainId(client,json,args,path,verb){return args.length===0?fail(client,json,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:`Can't ${verb} a drain without its ID.`,next:[{command:"list",when:"Find the drain ID"},{command:`${path.replace(/^drains /,"")} <DRAIN>`,when:"Then pass it, replacing <DRAIN>"}]}):args.length>1?usageError(client,json,`vercel ${path} takes one drain ID. Got ${args.length} arguments.`,path):DRAIN_ID_PATTERN.test(args[0])?args[0]:usageError(client,json,"A drain ID uses letters, numbers, underscores, and hyphens, like drn_a1b2c3d4e5f6g7h8.",path)}function redactDrain(drain){if(!drain.delivery)return drain;let{secret:_secret,...delivery}=drain.delivery;return delivery.headers&&(delivery.headers=Object.fromEntries(Object.keys(delivery.headers).map(name=>[name,"[REDACTED]"]))),{...drain,delivery}}function inspectNext(client,id2){return[{command:drainsCommand2(client,`inspect ${id2}`),when:"Inspect the drain"}]}function printJson(client,document){return output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify(document,null,2)}
79
+ `),0}function printStdoutIdentifier(client,id2){client.stdout.isTTY&&!client.nonInteractive||client.stdout.write(`${id2}
80
+ `)}function progress(client,json,message){!json&&!client.nonInteractive&&output_manager_default.spinner(message)}function handleApiError(client,json,err,failed){if(!isAPIError(err))throw err;let remote=err.serverMessage?remoteText(err.serverMessage):"",withRemote=failure=>remote?{...failure,detail:`Vercel API: ${remote}`,data:{...failure.data,remoteMessage:remote}}:failure;return err.status===404&&failed.drainId?fail(client,json,{reason:AGENT_REASON.NOT_FOUND,message:`Couldn't find drain ${failed.drainId}.`,next:[{command:"list",when:"List your drains"}]}):err.code==="drain_enable_not_allowed"?fail(client,json,withRemote({reason:AGENT_REASON.CONFLICT,message:`Can't ${failed.action}. Vercel disabled it.`})):err.status===403?fail(client,json,withRemote({reason:AGENT_REASON.PERMISSION_DENIED,message:`You can't ${failed.action}.`})):err.status===429?fail(client,json,{reason:AGENT_REASON.RATE_LIMITED,message:"Too many requests to the Vercel API. Try again later."}):err.status===400?fail(client,json,withRemote({reason:AGENT_REASON.API_ERROR,message:`Couldn't ${failed.action}. The API rejected the request.`})):fail(client,json,withRemote({reason:AGENT_REASON.API_ERROR,message:`Failed to ${failed.action}.`,data:{httpStatus:err.status}}))}var NETWORK_ERROR_CODES=new Set(["ECONNREFUSED","ECONNRESET","ENOTFOUND","EAI_AGAIN","ETIMEDOUT","EPIPE","UND_ERR_CONNECT_TIMEOUT","UND_ERR_SOCKET"]);function isNetworkError(err){if(!(err instanceof Error))return!1;let code=err.code,cause=err.cause;return typeof code=="string"&&NETWORK_ERROR_CODES.has(code)||typeof cause?.code=="string"&&NETWORK_ERROR_CODES.has(cause.code)||err.name==="FetchError"||err.name==="AbortError"||err.name==="TimeoutError"||/fetch failed/i.test(err.message)}function handleUnexpectedError(client,json,err){if(output_manager_default.stopSpinner(),isNetworkError(err)){let host="the Vercel API";try{host=new URL(client.apiUrl).host}catch{}return fail(client,json,{reason:AGENT_REASON.NETWORK_ERROR,message:`Couldn't reach ${host}. The connection failed.`})}return reportsJsonErrors(client,json)?writeJsonError(client,{status:AGENT_STATUS.ERROR,reason:"internal_error",message:"Unexpected error in vercel drains. This is a bug in Vercel CLI."},1):(printError(err,client),1)}var PATH="drains create";async function create(client,argv){let parsed=parseSubcommand(client,argv,createSubcommand.options,PATH);if(typeof parsed=="number")return parsed;let{args,flags,json}=parsed;if(args.length>0)return usageError(client,json,`vercel ${PATH} takes no arguments. Pass the URL with --url.`,PATH);let dashboardOnly=getDashboardOnlyType(flags["--type"]);if(dashboardOnly){let team=await getContextName(client).catch(()=>{});return fail(client,json,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Can't create ${dashboardOnly} with the CLI yet.${team?"":" Create it in the dashboard."}`,...team?{link:{when:"Create it in the dashboard",url:`https://vercel.com/${encodeURIComponent(team)}/~/settings/drains`}}:{}})}let missing=["name","url","type"].filter(option=>flags[`--${option}`]===void 0);if(missing.length){let list2=missing.map(option=>`--${option}`).join(", ");return fail(client,json,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:`Can't create a drain without ${list2}.`,next:[{command:"create --name <NAME> --type <TYPE> --url <URL>",when:"Pass every required option"}]})}let issues=[],name=readName(flags["--name"],issues),url=readUrl(flags["--url"],issues),type=readType(flags["--type"],issues),encoding=readEncoding(flags["--encoding"],type,issues),headers=readHeaders(flags["--header"],issues),sources=readSources(flags["--source"],issues),environments=readEnvironments(flags["--environment"],issues),sampleRate=readSampleRate(flags["--sample-rate"],issues),projects=splitList(flags["--project"]);if(projects?.length===0&&issues.push({field:"project",message:"Name at least one project."}),sources&&type&&type!=="logs"&&issues.push({field:"source",message:"Only logs drains have sources. Remove --source."}),environments&&type&&type!=="logs"&&issues.push({field:"environment",message:"Only logs drains filter by environment. Remove --environment."}),issues.length||!name||!url||!type)return fail(client,json,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Can't create the drain. ${issues.length===1?"1 option is":`${issues.length} options are`} invalid.`,issues});let secret;try{secret=await readSecret(client,flags["--secret"])}catch{return fail(client,json,{reason:AGENT_REASON.STDIN_ERROR,message:"Couldn't read the secret from stdin."})}if(secret==="")return usageError(client,json,"The --secret value is empty. Pass a value, or pipe it to --secret -.",PATH);progress(client,json,"Creating drain\u2026");let projectIds;if(projects?.length){let resolved;try{resolved=await resolveProjectIds(client,projects)}catch(err){return handleApiError(client,json,err,{action:"create the drain"})}if(resolved.missing.length)return fail(client,json,{reason:AGENT_REASON.PROJECT_NOT_FOUND,message:`Couldn't find ${resolved.missing.length===1?"project":"projects"} ${resolved.missing.join(", ")}.`,data:{projects:resolved.missing}});projectIds=resolved.ids}let finalEncoding=encoding??encodingsFor(type)[0],body={name,projects:projectIds?"some":"all",...projectIds?{projectIds}:{},schemas:DRAIN_SCHEMAS[type],delivery:type==="traces"?{type:"otlphttp",endpoint:{traces:url},encoding:finalEncoding,headers:headers??{},...secret?{secret}:{}}:{type:"http",endpoint:url,encoding:finalEncoding,headers:headers??{},...secret?{secret}:{}},source:{kind:"self-served"}},sampling=sampleRate===void 0?void 0:toSampling(sampleRate);sampling&&(body.sampling=sampling);let filter=toFilter({sources,environments});filter&&(body.filter=filter);let drain;try{drain=await createDrain(client,body)}catch(err){return!isAPIError(err)||err.status>=500?fail(client,json,{reason:AGENT_REASON.UNKNOWN_OUTCOME,message:isAPIError(err)?"Can't confirm whether the drain was created. The API failed to respond.":"Can't confirm whether the drain was created. The request failed.",next:[{command:"list",when:"Check whether it exists before creating it again"}],...isAPIError(err)?{data:{httpStatus:err.status}}:{}}):handleApiError(client,json,err,{action:"create the drain"})}return output_manager_default.stopSpinner(),json?printJson(client,{drain:redactDrain(drain),outcome:"created",next:inspectNext(client,drain.id)}):(printReceipt("Created",drain,{details:!0}),printStdoutIdentifier(client,drain.id),0)}async function confirmOrFail(client,json,opts){return opts.yes?!0:opts.interactive?(output_manager_default.print(`${opts.preview.join(`
81
+ `)}
82
+ `),await client.input.confirm(opts.question,!1)?!0:(output_manager_default.print(` Canceled. Nothing was changed.
83
+ `),130)):fail(client,json,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Can't ${opts.action} without confirmation in non-interactive mode.`,next:[{command:buildCommandWithYes(client.argv),when:`Only after a human approves: ${opts.consequence}`,full:!0}],userActionRequired:!0,data:{effects:opts.effects}})}var PATH2="drains delete";async function deleteCommand(client,argv){let parsed=parseSubcommand(client,argv,deleteSubcommand.options,PATH2);if(typeof parsed=="number")return parsed;let{args,flags,json}=parsed,id2=readDrainId(client,json,args,PATH2,"delete");if(typeof id2=="number")return id2;progress(client,json,"Fetching drain\u2026");let drain;try{drain=await getDrain(client,id2)}catch(err){return handleApiError(client,json,err,{action:`delete drain ${id2}`,drainId:id2})}output_manager_default.stopSpinner();let consent=await confirmOrFail(client,json,{yes:!!flags["--yes"],interactive:!json&&canPrompt(client),preview:[formatAlignedLabel("Drain",remoteText(drain.name)),formatAlignedLabel("Drain ID",drain.id),formatAlignedLabel("Type",formatType(drain)),formatAlignedLabel("URL",remoteText(getEndpoint(drain)??"-")),""," Stops sending data to this endpoint and deletes the drain."," This cannot be undone."],question:`Delete drain ${remoteText(drain.name)}?`,action:`delete drain ${drain.id}`,consequence:"the drain stops sending data and is deleted permanently",effects:[`Delete drain ${drain.id}`]});if(consent!==!0)return consent;progress(client,json,"Deleting drain\u2026");try{await deleteDrain(client,id2)}catch(err){return handleApiError(client,json,err,{action:`delete drain ${id2}`,drainId:id2})}return output_manager_default.stopSpinner(),json?printJson(client,{drain:{id:drain.id,name:drain.name},outcome:"deleted",next:[{command:drainsCommand2(client,"list"),when:"List the remaining drains"}]}):(printReceipt("Deleted",drain,{details:!1}),printStdoutIdentifier(client,drain.id),0)}var PATH3="drains inspect";async function inspect2(client,argv){let parsed=parseSubcommand(client,argv,inspectSubcommand2.options,PATH3);if(typeof parsed=="number")return parsed;let{args,json}=parsed,id2=readDrainId(client,json,args,PATH3,"inspect");if(typeof id2=="number")return id2;progress(client,json,"Fetching drain\u2026");let drain;try{drain=await getDrain(client,id2)}catch(err){return handleApiError(client,json,err,{action:`inspect drain ${id2}`,drainId:id2})}return output_manager_default.stopSpinner(),json?printJson(client,{drain:redactDrain(drain)}):(client.stdout.write(`${formatDrainDetails(drain)}
84
+ `),0)}var import_pluralize4=__toESM(require_pluralize(),1);var PATH4="drains list";async function list(client,argv){let parsed=parseSubcommand(client,argv,listSubcommand2.options,PATH4);if(typeof parsed=="number")return parsed;let{args,flags,json}=parsed;if(args.length>0)return usageError(client,json,`vercel ${PATH4} takes no arguments. Got ${args.length}.`,PATH4);let limit;try{limit=parseListLimit(flags["--limit"])}catch(err){return usageError(client,json,err.message,PATH4)}let start=flags["--next"]?decodeListCursor(flags["--next"]):{offset:0};if(!start)return usageError(client,json,"Provide --next with the cursor from the previous page.",PATH4);let project=flags["--project"];if(progress(client,json,"Fetching drains\u2026"),project){let resolved;try{resolved=await resolveProjectIds(client,[project])}catch(err){return handleApiError(client,json,err,{action:"list drains"})}if(resolved.missing.length)return fail(client,json,{reason:AGENT_REASON.PROJECT_NOT_FOUND,message:`Couldn't find project ${remoteText(project)}.`,next:[{command:"list",when:"List drains for every project"}]})}let result;try{result=await listDrains(client,{project})}catch(err){return handleApiError(client,json,err,{action:"list drains"})}output_manager_default.stopSpinner();let page=sliceList(result.drains,start,limit);if(!page)return usageError(client,json,"Provide --next with the cursor from the previous page.",PATH4);let warnings=result.deliveryStatsUnavailable?[{reason:AGENT_REASON.METRICS_UNAVAILABLE,message:"Delivery status is unavailable right now."}]:[];if(json)return printJson(client,{drains:page.items.map(redactDrain),pagination:{next:page.next},...warnings.length?{warnings}:{}});for(let warning of warnings)output_manager_default.warning(`${warning.message} The Status column is hidden.`);if(page.items.length===0){if(flags["--next"])return output_manager_default.log("No more drains."),0;if(project)return output_manager_default.print(` No drains send data from ${project}. Remove --project to see all drains.
85
+ `),0;let context=await getContextName(client);return output_manager_default.print(` No drains in ${context}.
86
+ `),output_manager_default.print(`
87
+ Create one:
88
+ ${drainsCommand2(client,"create --name <NAME> --type logs --url <URL>")}
89
+ `),0}return client.stdout.isTTY&&output_manager_default.print(` ${(0,import_pluralize4.default)("drain",result.drains.length,!0)}${project?` for ${project}`:""}
90
+
91
+ `),client.stdout.write(`${formatDrainsTable(client,page.items,{withStatus:result.hasDeliveryStats})}
92
+ `),printNextPageHint(client,page.next),0}function pause(client,argv){return setStatus(client,argv,"pause")}function resume(client,argv){return setStatus(client,argv,"resume")}async function setStatus(client,argv,verb){let command=verb==="pause"?pauseSubcommand:resumeSubcommand,path=`drains ${verb}`,parsed=parseSubcommand(client,argv,command.options,path);if(typeof parsed=="number")return parsed;let{args,flags,json}=parsed,id2=readDrainId(client,json,args,path,verb);if(typeof id2=="number")return id2;progress(client,json,"Fetching drain\u2026");let current;try{current=await getDrain(client,id2)}catch(err){return handleApiError(client,json,err,{action:`${verb} drain ${id2}`,drainId:id2})}output_manager_default.stopSpinner();let paused=current.status==="disabled";if(verb==="pause"?paused:current.status==="enabled")return json?printJson(client,{drain:redactDrain(current),outcome:"unchanged"}):(output_manager_default.print(` Drain ${remoteText(current.name)} is already ${verb==="pause"?"paused":"running"}.
93
+ `),printStdoutIdentifier(client,current.id),0);if(verb==="pause"){let yes=!!flags["--yes"],consent=await confirmOrFail(client,json,{yes,interactive:!json&&canPrompt(client),preview:[formatAlignedLabel("Drain",remoteText(current.name)),formatAlignedLabel("Drain ID",current.id),""," Data generated while it's paused won't be sent and can't be recovered."],question:`Pause drain ${remoteText(current.name)}?`,action:`pause drain ${current.id}`,consequence:"data generated while it's paused won't be sent",effects:[`Pause drain ${current.id}`]});if(consent!==!0)return consent}progress(client,json,verb==="pause"?"Pausing drain\u2026":"Resuming drain\u2026");let drain;try{drain=await updateDrain(client,id2,{status:verb==="pause"?"disabled":"enabled"})}catch(err){return handleApiError(client,json,err,{action:`${verb} drain ${id2}`,drainId:id2})}output_manager_default.stopSpinner();let outcome=verb==="pause"?"paused":"resumed";return json?printJson(client,{drain:redactDrain(drain),outcome,next:inspectNext(client,drain.id)}):(printReceipt(verb==="pause"?"Paused":"Resumed",drain,{details:!1}),printStdoutIdentifier(client,drain.id),0)}var PATH5="drains update",CHANGE_OPTIONS=["--name","--url","--encoding","--header","--secret","--project","--all","--source","--environment","--sample-rate"];async function update(client,argv){let parsed=parseSubcommand(client,argv,updateSubcommand.options,PATH5);if(typeof parsed=="number")return parsed;let{args,flags,json}=parsed,id2=readDrainId(client,json,args,PATH5,"update");if(typeof id2=="number")return id2;if(!CHANGE_OPTIONS.some(option=>flags[option]!==void 0))return fail(client,json,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Can't update the drain without an option to change.",next:[{command:"update --help",when:"See the options"}]});let projects=splitList(flags["--project"]);if(flags["--all"]&&projects)return usageError(client,json,"Can't use --all with --project.",PATH5);let issues=[],name=readName(flags["--name"],issues),url=readUrl(flags["--url"],issues),headers=readHeaders(flags["--header"],issues),sources=readSources(flags["--source"],issues),environments=readEnvironments(flags["--environment"],issues),sampleRate=readSampleRate(flags["--sample-rate"],issues);if(projects?.length===0&&issues.push({field:"project",message:"Name at least one project."}),issues.length)return invalidOptions(client,json,id2,issues);progress(client,json,"Fetching drain\u2026");let current;try{current=await getDrain(client,id2)}catch(err){return handleApiError(client,json,err,{action:`update drain ${id2}`,drainId:id2})}output_manager_default.stopSpinner();let deliveryType=current.delivery?.type,encoding=readEncoding(flags["--encoding"],deliveryType==="otlphttp"?"traces":"logs",issues),changesDelivery=url!==void 0||encoding!==void 0||headers!==void 0||flags["--secret"]!==void 0;changesDelivery&&deliveryType!=="http"&&deliveryType!=="otlphttp"?issues.push({field:"url",message:"This drain's destination isn't an HTTP endpoint. Update it in the dashboard."}):changesDelivery&&current.source?.kind==="integration"&&issues.push({field:"url",message:"An integration manages this drain's destination. Update it in the integration's settings."}),sources&&!current.schemas?.log&&issues.push({field:"source",message:"Only logs drains have sources. Remove --source."}),environments&&!current.schemas?.log&&issues.push({field:"environment",message:"Only logs drains filter by environment. Remove --environment."});let currentFilter=current.filterV2?.filter,isBasicFilter=current.filterV2===void 0||current.filterV2.version==="v2"&&currentFilter?.type==="basic"&&Object.keys(currentFilter.log??{}).every(key=>key==="sources");if((sources||environments)&&!isBasicFilter&&issues.push({field:sources?"source":"environment",message:currentFilter?.type==="basic"?"This drain's filter has a legacy setting the CLI can't keep. Update it in the dashboard.":"This drain uses a custom filter. Update it in the dashboard."}),issues.length)return invalidOptions(client,json,id2,issues);let secret;try{secret=await readSecret(client,flags["--secret"])}catch{return fail(client,json,{reason:AGENT_REASON.STDIN_ERROR,message:"Couldn't read the secret from stdin."})}if(secret==="")return usageError(client,json,"The --secret value is empty. Pass a value, or pipe it to --secret -.",PATH5);progress(client,json,"Updating drain\u2026");let body={};if(name!==void 0&&(body.name=name),flags["--all"])body.projects="all";else if(projects?.length){let resolved;try{resolved=await resolveProjectIds(client,projects)}catch(err){return handleApiError(client,json,err,{action:`update drain ${id2}`})}if(resolved.missing.length)return fail(client,json,{reason:AGENT_REASON.PROJECT_NOT_FOUND,message:`Couldn't find ${resolved.missing.length===1?"project":"projects"} ${resolved.missing.join(", ")}.`,data:{projects:resolved.missing}});body.projects="some",body.projectIds=resolved.ids}changesDelivery&&current.delivery&&(body.delivery=toDelivery(current.delivery,{url,encoding,headers,secret})),(sources||environments)&&(body.filter=toFilter({sources,environments},currentFilter?.type==="basic"?currentFilter:void 0)??null),sampleRate!==void 0&&(body.sampling=toSampling(sampleRate)??null);let drain;try{drain=await updateDrain(client,id2,body)}catch(err){return handleApiError(client,json,err,{action:`update drain ${id2}`,drainId:id2})}return output_manager_default.stopSpinner(),json?printJson(client,{drain:redactDrain(drain),outcome:"updated",next:inspectNext(client,drain.id)}):(printReceipt("Updated",drain,{details:!0}),printStdoutIdentifier(client,drain.id),0)}function invalidOptions(client,json,id2,issues){return fail(client,json,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Can't update drain ${id2}. ${issues.length===1?"1 option is":`${issues.length} options are`} invalid.`,issues})}function toDelivery(current,changes){let secret=changes.secret??current.secret,base={encoding:changes.encoding??current.encoding,headers:changes.headers??current.headers??{},...secret?{secret}:{}};return current.type==="otlphttp"?{type:"otlphttp",endpoint:changes.url?{traces:changes.url}:current.endpoint,...base}:{type:"http",endpoint:changes.url??current.endpoint,..."compression"in current&&current.compression?{compression:current.compression}:{},...base}}var RUN={list,inspect:inspect2,create,update,pause,resume,delete:deleteCommand},COMMAND_CONFIG2=Object.fromEntries(drainsCommand.subcommands.map(command=>[command.name,getCommandAliases(command)])),routingFlags=getFlagsSpecification(drainsCommand.subcommands.flatMap(command=>command.options));async function drains(client){let selected;try{let group=takeCommand(client.argv.slice(2),routingFlags);selected=takeCommand(group.args,routingFlags)}catch(err){return printError(err,client),isArgumentError(err)?2:1}let{subcommand,subcommandOriginal}=getSubcommand2(selected.command?[selected.command]:[],COMMAND_CONFIG2);if(!subcommand&&selected.command)return printUnknownCommand(client,selected.command,["drains"]),2;let name=typeof subcommand=="string"?subcommand:"list",telemetry=new DrainsTelemetryClient({opts:{store:client.telemetryEventStore}});({list:a=>telemetry.trackCliSubcommandList(a),inspect:a=>telemetry.trackCliSubcommandInspect(a),create:a=>telemetry.trackCliSubcommandCreate(a),update:a=>telemetry.trackCliSubcommandUpdate(a),pause:a=>telemetry.trackCliSubcommandPause(a),resume:a=>telemetry.trackCliSubcommandResume(a),delete:a=>telemetry.trackCliSubcommandDelete(a)})[name](subcommandOriginal);try{return await RUN[name](client,selected.args)}catch(err){return handleUnexpectedError(client,selected.args.includes("--json"),err)}}var HealthTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var import_chalk7=__toESM(require_source(),1),import_ms5=__toESM(require_ms(),1),import_strip_ansi3=__toESM(require_strip_ansi(),1);var STATUS_PAGE_URL="https://www.vercel-status.com",STATUS_PAGE_HOST=new URL(STATUS_PAGE_URL).host,SUMMARY_URL=`${STATUS_PAGE_URL}/api/v2/summary.json`,INCIDENTS_URL=`${STATUS_PAGE_URL}/api/v2/incidents.json`,REQUEST_TIMEOUT_MS=1e4,RECENT_DAYS=7,ComponentRefSchema=external_exports.object({id:external_exports.string(),name:external_exports.string(),group_id:external_exports.string().nullish()}),ComponentSchema=ComponentRefSchema.extend({status:external_exports.string(),group:external_exports.boolean().optional().default(!1)}),IncidentSchema=external_exports.object({id:external_exports.string(),name:external_exports.string(),status:external_exports.string(),impact:external_exports.string(),created_at:external_exports.string(),started_at:external_exports.string().nullish(),resolved_at:external_exports.string().nullish(),components:external_exports.array(ComponentRefSchema).optional().default([]),incident_updates:external_exports.array(external_exports.object({id:external_exports.string(),status:external_exports.string(),body:external_exports.string(),created_at:external_exports.string()})).optional().default([])}),MaintenanceSchema=external_exports.object({id:external_exports.string(),name:external_exports.string(),status:external_exports.string(),impact:external_exports.string(),scheduled_for:external_exports.string().nullish(),scheduled_until:external_exports.string().nullish(),components:external_exports.array(ComponentRefSchema).optional().default([])}),SummarySchema=external_exports.object({page:external_exports.object({name:external_exports.string(),url:external_exports.string(),updated_at:external_exports.string()}),status:external_exports.object({indicator:external_exports.string(),description:external_exports.string()}),components:external_exports.array(ComponentSchema),incidents:external_exports.array(IncidentSchema),scheduled_maintenances:external_exports.array(MaintenanceSchema)}),IncidentsSchema=external_exports.object({incidents:external_exports.array(IncidentSchema)});function incidentUrl(id2){return`${STATUS_PAGE_URL}/incidents/${encodeURIComponent(id2)}`}function toRef(c,groups){return{id:c.id,name:c.name,group:c.group_id&&groups.get(c.group_id)||null}}function toIncident(i,groups){return{id:i.id,name:i.name,status:i.status,impact:i.impact,startedAt:i.started_at??i.created_at,resolvedAt:i.resolved_at??null,url:incidentUrl(i.id),components:i.components.map(c=>toRef(c,groups)),updates:i.incident_updates.map(u=>({id:u.id,status:u.status,body:u.body,createdAt:u.created_at}))}}function toMaintenance(m,groups){return{id:m.id,name:m.name,status:m.status,impact:m.impact,scheduledFor:m.scheduled_for??null,scheduledUntil:m.scheduled_until??null,url:incidentUrl(m.id),components:m.components.map(c=>toRef(c,groups))}}var StatusPageError=class extends Error{constructor(kind,detail={}){super(`Status page request failed: ${kind}`);this.kind=kind;this.detail=detail;this.name="StatusPageError"}};function networkError(err){let timedOut=err instanceof Error&&(err.name==="TimeoutError"||err.name==="AbortError");return new StatusPageError("network",{timedOut})}async function getJson(url,schema){let response,text;try{response=await fetch(url,{headers:{accept:"application/json","user-agent":ua_default},signal:AbortSignal.timeout(REQUEST_TIMEOUT_MS)}),response.ok&&(text=await response.text())}catch(err){throw networkError(err)}if(response.status===429)throw new StatusPageError("rate_limited",{httpStatus:429});if(!response.ok||text===void 0)throw new StatusPageError("http",{httpStatus:response.status});let body;try{body=JSON.parse(text)}catch{throw new StatusPageError("invalid")}let result=schema.safeParse(body);if(!result.success)throw new StatusPageError("invalid");return result.data}async function getStatusReport(now=Date.now()){let[summary,history]=await Promise.all([getJson(SUMMARY_URL,SummarySchema),getJson(INCIDENTS_URL,IncidentsSchema)]),groups=new Map(summary.components.filter(c=>c.group).map(c=>[c.id,c.name])),since=new Date(now-RECENT_DAYS*24*60*60*1e3),incidents=new Map;for(let incident of history.incidents.map(i=>toIncident(i,groups))){let resolvedAt=incident.resolvedAt&&new Date(incident.resolvedAt);(!resolvedAt||resolvedAt>=since)&&incidents.set(incident.id,incident)}for(let incident of summary.incidents.map(i=>toIncident(i,groups)))incidents.set(incident.id,incident);return{page:{name:summary.page.name,url:summary.page.url,updatedAt:summary.page.updated_at},status:summary.status,components:summary.components.filter(c=>!c.group).map(c=>({...toRef(c,groups),status:c.status})),incidents:[...incidents.values()].sort((a,b)=>Date.parse(b.startedAt)-Date.parse(a.startedAt)),scheduledMaintenances:summary.scheduled_maintenances.map(m=>toMaintenance(m,groups)),since:since.toISOString()}}var MAX_LIST_ITEMS=5,CONTROL_CHARACTERS2=/[\u0000-\u001F\u007F-\u009F]/g,FORMAT_CHARACTERS=/[\u200B-\u200F\u202A-\u202E\u2060-\u2069\uFEFF]/g,INDICATOR_TONES={none:"success",minor:"pending",major:"error",critical:"error"},COMPONENT_TONES={operational:"success",degraded_performance:"pending",partial_outage:"pending",major_outage:"error"},IMPACT_TONES={minor:"pending",major:"error",critical:"error"},PROGRESS_TONES={investigating:"error",identified:"error",monitoring:"pending",resolved:"success",postmortem:"success",in_progress:"pending",verifying:"pending",completed:"success"};function formatState2(value,tones,label=humanizeEnum(value)){return output_manager_default.formatStatus(label,tones[value]??"muted")}function toSafeLine(value){return(0,import_strip_ansi3.default)(value).replace(/\s+/g," ").replace(CONTROL_CHARACTERS2,"").replace(FORMAT_CHARACTERS,"").trim()}function humanizeEnum(value){let words=toSafeLine(value).replace(/_/g," ");return words.charAt(0).toUpperCase()+words.slice(1)}function formatAge2(iso,now){let elapsed=now-Date.parse(iso);return Number.isFinite(elapsed)?Math.abs(elapsed)<6e4?"just now":elapsed<0?`in ${(0,import_ms5.default)(-elapsed)}`:`${(0,import_ms5.default)(elapsed)} ago`:""}var dateTimeFormat=new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit",hourCycle:"h23",timeZone:"UTC"});function formatTime2(iso,now){let date=new Date(iso);if(Number.isNaN(date.getTime()))return toSafeLine(iso);let age=formatAge2(iso,now);return`${dateTimeFormat.format(date)} UTC${age?` ${import_chalk7.default.dim(`(${age})`)}`:""}`}function formatDuration(fromIso,toIso2){let minutes=Math.round((Date.parse(toIso2)-Date.parse(fromIso))/6e4);if(!Number.isFinite(minutes)||minutes<0)return"";if(minutes<1)return"under 1m";let days=Math.floor(minutes/1440),hours=Math.floor(minutes%1440/60),mins=minutes%60;return days>0?hours>0?`${days}d ${hours}h`:`${days}d`:hours>0?mins>0?`${hours}h ${mins}m`:`${hours}h`:`${mins}m`}function componentName(component){let name=toSafeLine(component.name);return component.group?`${toSafeLine(component.group)} / ${name}`:name}function row(label,value){return` ${import_chalk7.default.dim(label.padEnd(ALIGNED_LABEL_WIDTH))}${value}`}function heading(text){return` ${import_chalk7.default.bold(text)}`}function muted(text){return` ${import_chalk7.default.dim(text)}`}function componentsRows(components){if(components.length===0)return[];let names=components.slice(0,MAX_LIST_ITEMS).map(componentName),more=components.length-MAX_LIST_ITEMS,list2=more>0?`${names.join(", ")}, and ${more} more`:names.join(", ");return[row("Components",list2)]}function urlRow(url){return row("URL",import_chalk7.default.cyan(url))}function formatIncident(incident,now){let{resolvedAt}=incident,latest=resolvedAt?void 0:incident.updates[0],duration=resolvedAt&&formatDuration(incident.startedAt,resolvedAt);return[` ${toSafeLine(incident.name)}`,row("Impact",formatState2(incident.impact,IMPACT_TONES)),...resolvedAt?[]:[row("Status",formatState2(incident.status,PROGRESS_TONES))],row("Started",formatTime2(incident.startedAt,now)),...resolvedAt?[row("Resolved",`${formatTime2(resolvedAt,now)}${duration?`, after ${duration}`:""}`)]:[],...componentsRows(incident.components),...latest?[row("Latest Update",formatTime2(latest.createdAt,now)),` ${" ".repeat(ALIGNED_LABEL_WIDTH)}${toSafeLine(latest.body)}`]:[],urlRow(incident.url)]}function formatMaintenance(m,now){return[` ${toSafeLine(m.name)}`,row("Status",formatState2(m.status,PROGRESS_TONES)),...m.scheduledFor?[row("Starts",formatTime2(m.scheduledFor,now))]:[],...m.scheduledUntil?[row("Ends",formatTime2(m.scheduledUntil,now))]:[],...componentsRows(m.components),urlRow(m.url)]}function section(title,blocks){return[heading(title),...blocks.flatMap(b=>["",...b])]}function formatStatusReport(report,now){let sections=[[` ${formatState2(report.status.indicator,INDICATOR_TONES,import_chalk7.default.bold(toSafeLine(report.status.description)))}`,row("Updated",formatTime2(report.page.updatedAt,now)),row("Status Page",import_chalk7.default.cyan(toSafeLine(report.page.url)))]],degraded=report.components.filter(c=>c.status!=="operational");if(degraded.length>0){let width=Math.max(...degraded.map(c=>componentName(c).length));sections.push(section("Degraded components",[degraded.map(c=>` ${componentName(c).padEnd(width)} ${formatState2(c.status,COMPONENT_TONES)}`)]))}let active=report.incidents.filter(i=>!i.resolvedAt);sections.push(active.length>0?section("Active incidents",active.map(i=>formatIncident(i,now))):[muted("No active incidents.")]),report.scheduledMaintenances.length>0&&sections.push(section("Scheduled maintenance",report.scheduledMaintenances.map(m=>formatMaintenance(m,now))));let resolved=report.incidents.filter(i=>i.resolvedAt);return sections.push(resolved.length>0?section(`Resolved in the last ${RECENT_DAYS} days`,resolved.map(i=>formatIncident(i,now))):[muted(`No incidents resolved in the last ${RECENT_DAYS} days.`)]),`${sections.map(lines=>lines.join(`
94
+ `)).join(`
95
+
96
+ `)}
97
+ `}function describeFailure(err){if(!(err instanceof StatusPageError))throw err;switch(err.kind){case"network":return{reason:AGENT_REASON.NETWORK_ERROR,message:err.detail.timedOut?`Couldn't reach ${STATUS_PAGE_HOST}. The request timed out.`:`Couldn't reach ${STATUS_PAGE_HOST}. The connection failed.`,retryable:!0};case"rate_limited":return{reason:AGENT_REASON.RATE_LIMITED,message:`Too many requests to ${STATUS_PAGE_HOST}. Try again in a minute.`,retryable:!0};case"http":return{reason:AGENT_REASON.API_ERROR,message:`Failed to get the Vercel status. ${STATUS_PAGE_HOST} returned an error.`,detail:err.detail.httpStatus?`HTTP status ${err.detail.httpStatus}`:void 0,retryable:!0};case"invalid":return{reason:AGENT_REASON.API_ERROR,message:`Failed to get the Vercel status. ${STATUS_PAGE_HOST} returned an unexpected response.`,retryable:!1}}}async function health(client){let telemetry=new HealthTelemetryClient({opts:{store:client.telemetryEventStore}}),argv=client.argv.slice(2),jsonOutput=argv.includes("--json"),fail2=(failure,usage=!1)=>jsonOutput?writeJsonError(client,{status:"error",reason:failure.reason,message:failure.message,...failure.retryable!==void 0&&{retryable:failure.retryable},...usage&&{next:[{command:getCommandNamePlain("health --help")}]},...failure.detail&&{data:{detail:failure.detail}}}):(recordCliError({code:failure.reason}),output_manager_default.fatal(failure.message),failure.detail&&output_manager_default.print(` ${failure.detail}
98
+ `),output_manager_default.print(usage?`
99
+ See all options:
100
+ ${getCommandNamePlain("health --help")}
101
+ `:`
102
+ Check the status page in a browser:
103
+ ${STATUS_PAGE_URL}
104
+ `),usage?2:1),parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(healthCommand.options))}catch(err){return fail2({reason:AGENT_REASON.INVALID_ARGUMENTS,message:err instanceof Error?err.message:String(err)},!0)}jsonOutput=parsedArgs.flags["--json"]===!0,telemetry.trackCliFlagJson(parsedArgs.flags["--json"]),parsedArgs.args[0]==="status-page"&&warnDeprecatedSubcommand(client,"status-page","health");let extra=parsedArgs.args.slice(1);if(extra.length>0)return fail2({reason:AGENT_REASON.UNKNOWN_COMMAND,message:`Unknown command ${toSafeLine(extra[0])} for vercel health.`},!0);jsonOutput||output_manager_default.spinner("Getting the Vercel status\u2026");let report;try{report=await getStatusReport()}catch(err){return fail2(describeFailure(err))}return output_manager_default.stopSpinner(),client.stdout.write(jsonOutput?`${JSON.stringify(report,null,2)}
105
+ `:`
106
+ ${formatStatusReport(report,Date.now())}`),0}var TracesTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id2,kind="requestId"){id2&&this.trackCliArgument({arg:kind,value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionProject(project){project&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagOpen(open2){open2&&this.trackCliFlag("open")}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliOptionEnvironment(value){this.trackRedactedOption("environment",value)}trackCliOptionService(value){this.trackRedactedOption("service",value)}trackCliOptionName(value){this.trackRedactedOption("name",value)}trackCliOptionKind(value){this.trackRedactedOption("kind",value)}trackCliOptionStatus(value){this.trackRedactedOption("status",value)}trackCliOptionDeployment(value){this.trackRedactedOption("deployment",value)}trackCliOptionDeploymentId(value){this.trackRedactedOption("deployment-id",value)}trackCliOptionRequestId(value){this.trackRedactedOption("request-id",value)}trackCliOptionTrace(value){this.trackRedactedOption("trace",value)}trackCliOptionTraceId(value){this.trackRedactedOption("trace-id",value)}trackCliOptionSpan(value){this.trackRedactedOption("span",value)}trackCliOptionSpanId(value){this.trackRedactedOption("span-id",value)}trackCliFlagRoot(root){root&&this.trackCliFlag("root")}trackCliOptionSince(value){this.trackRedactedOption("since",value)}trackCliOptionUntil(value){this.trackRedactedOption("until",value)}trackCliOptionLimit(value){value!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionQuery(value){this.trackRedactedOption("query",value)}trackCliOptionColumns(value){this.trackRedactedOption("columns",value)}trackCliOptionNext(value){this.trackRedactedOption("next",value)}trackRedactedOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackCliOptionView(view){view&&this.trackCliOption({option:"view",value:view})}};var import_chalk8=__toESM(require_source(),1),import_open=__toESM(require_open(),1);var SPAN_STATUS_UNSET="Unset",SPAN_STATUS_OK="Ok",SPAN_STATUS_ERROR="Error",ATTR_HINT_KEYS=["http.url","http.target","db.statement","http.status_code"];function tupleToUs(tuple){if(!tuple||tuple.length!==2)return null;let[seconds,nanoseconds]=tuple;return typeof seconds!="number"||typeof nanoseconds!="number"?null:seconds*1e6+nanoseconds/1e3}function getDurationUs(span){let us=tupleToUs(span.duration);return us===null?null:us<0?0:us}function getStartTimeUs(span){return tupleToUs(span.startTime)}function readAttrString(attributes,key){let value=attributes?.[key];if(typeof value=="string")return value;if(typeof value=="number")return String(value)}function resolveRootSpan(trace){if(trace.spans.length!==0){if(trace.rootSpanId){let match=trace.spans.find(span=>span.spanId===trace.rootSpanId);if(match)return match}return trace.spans[0]}}function compareByStart(a,b){let startA=getStartTimeUs(a),startB=getStartTimeUs(b);return startA===null&&startB===null?0:startA===null?1:startB===null?-1:startA-startB}function analyze(trace){let root=resolveRootSpan(trace),rootDurationUs=root?getDurationUs(root):null,rootStartUs=root?getStartTimeUs(root):null,spansById=new Map;for(let span of trace.spans)spansById.set(span.spanId,span);let childrenByParent=new Map;for(let span of trace.spans){if(!span.parentSpanId||!spansById.has(span.parentSpanId))continue;let list2=childrenByParent.get(span.parentSpanId);list2?list2.push(span):childrenByParent.set(span.parentSpanId,[span])}for(let list2 of childrenByParent.values())list2.sort(compareByStart);let spanInfo=new Map;for(let span of trace.spans){let durationUs=getDurationUs(span),children=childrenByParent.get(span.spanId)??[],childTotalUs=0;for(let child of children){let cd=getDurationUs(child);cd!==null&&(childTotalUs+=cd)}let selfTimeUs=durationUs===null?null:Math.max(0,durationUs-childTotalUs),startOffsetUs=null;if(rootStartUs!==null){let startUs=getStartTimeUs(span);startUs!==null&&(startOffsetUs=Math.max(0,startUs-rootStartUs))}spanInfo.set(span.spanId,{span,durationUs,selfTimeUs,startOffsetUs})}let visited=new Set,treeOrder=[],truncatedAtDepth=!1;root&&(truncatedAtDepth=walkTree(root,0,childrenByParent,visited,treeOrder)||truncatedAtDepth);let orphanOrder=[],orphanRoots=trace.spans.filter(span=>!visited.has(span.spanId)&&(!span.parentSpanId||!spansById.has(span.parentSpanId))).sort(compareByStart);for(let orphan of orphanRoots)truncatedAtDepth=walkTree(orphan,0,childrenByParent,visited,orphanOrder)||truncatedAtDepth;for(let span of trace.spans)visited.has(span.spanId)||(orphanOrder.push({span,depth:0}),visited.add(span.spanId));let errorSpans=trace.spans.filter(span=>span.status?.code===SPAN_STATUS_ERROR),byName=new Map;for(let span of trace.spans){let name=span.name||"<unnamed>",durationUs=getDurationUs(span)??0,entry=byName.get(name);entry?(entry.count+=1,entry.totalUs+=durationUs):byName.set(name,{count:1,totalUs:durationUs})}let repeatedOps=[];for(let[name,{count,totalUs}]of byName)count>=2&&repeatedOps.push({name,count,totalUs,perCallUs:totalUs/count});return repeatedOps.sort((a,b)=>b.totalUs-a.totalUs),{trace,root,rootDurationUs,rootStartUs,spanInfo,treeOrder,orphanOrder,errorSpans,repeatedOps,truncatedAtDepth}}function walkTree(span,depth,childrenByParent,visited,out){if(visited.has(span.spanId))return!1;if(visited.add(span.spanId),depth>=256)return out.push({span,depth}),!0;out.push({span,depth});let truncated=!1,children=childrenByParent.get(span.spanId)??[];for(let child of children)truncated=walkTree(child,depth+1,childrenByParent,visited,out)||truncated;return truncated}var OBSERVABILITY_API_URL="https://vercel.com/api/observability-api/",QUERY_REASON_HEADER="x-vercel-observability-query-reason",QUERY_REASON="cli/traces-get",QueryEngineResponseError=class extends Error{constructor(message){super(message),this.name="QueryEngineResponseError"}};async function fetchTrace({client,teamId,projectId,requestId,traceId}){let traceUrl=new URL(traceId!==void 0?`v1/traces/${encodeURIComponent(traceId)}`:`v1/traces/requests/${encodeURIComponent(requestId)}`,OBSERVABILITY_API_URL);traceUrl.searchParams.set("teamId",teamId),traceUrl.searchParams.set("projectId",projectId);let response=await client.fetch(traceUrl.href,{headers:{[QUERY_REASON_HEADER]:QUERY_REASON}});return{trace:mapTrace(response),partial:isRecord(response.meta)&&response.meta.partial===!0}}function mapTrace(response){if(!isRecord(response)||typeof response.traceId!="string"||!Array.isArray(response.spans))throw new QueryEngineResponseError("Observability API returned an invalid resolved trace.");return{traceId:response.traceId,...typeof response.rootSpanId=="string"?{rootSpanId:response.rootSpanId}:{},spans:response.spans.map(mapSpan)}}function mapSpan(value){if(!isRecord(value)||typeof value.spanId!="string")throw new QueryEngineResponseError("Observability API returned an invalid trace span.");if(typeof value.name!="string"||typeof value.durationMs!="number")throw new QueryEngineResponseError("Observability API returned an invalid trace span.");let timestamp2=parseTimestamp(value.timestamp),attributes=isRecord(value.attributes)?value.attributes:void 0,status=isRecord(value.status)?value.status:void 0,statusCode=mapStatusCode(status?.code),statusMessage=typeof status?.message=="string"?status.message:void 0;return{spanId:value.spanId,...typeof value.parentSpanId=="string"&&value.parentSpanId?{parentSpanId:value.parentSpanId}:{},name:value.name,duration:durationTuple(value.durationMs),startTime:timestampTuple(timestamp2),...attributes?{attributes}:{},status:{code:statusCode,...statusMessage?{message:statusMessage}:{}}}}function mapStatusCode(code){switch(code){case"ERROR":return SPAN_STATUS_ERROR;case"OK":return SPAN_STATUS_OK;default:return SPAN_STATUS_UNSET}}function parseTimestamp(value){if(typeof value!="string")throw new QueryEngineResponseError("Observability API returned an invalid trace timestamp.");let timestamp2=Date.parse(value);if(!Number.isFinite(timestamp2))throw new QueryEngineResponseError("Observability API returned an invalid trace timestamp.");return timestamp2}function durationTuple(durationMs){let nanoseconds=Math.round(durationMs*1e6);if(!Number.isSafeInteger(nanoseconds)||nanoseconds<0)throw new QueryEngineResponseError("Observability API returned an invalid span duration.");return[Math.floor(nanoseconds/1e9),nanoseconds%1e9]}function timestampTuple(timestampMs){let seconds=Math.floor(timestampMs/1e3);return[seconds,(timestampMs-seconds*1e3)*1e6]}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var UNKNOWN="<unknown>",UNNAMED="<unnamed>",ATTR_VALUE_MAX_LEN=80,TRACE_ID_MAX_LEN=13;function renderMarkdown(trace,options){let analysis=analyze(trace),sections=[];return sections.push(renderHeader(analysis,options)),analysis.errorSpans.length>0&&sections.push(renderErrors(analysis)),analysis.repeatedOps.length>0&&sections.push(renderRepeatedOps(analysis)),sections.push(renderTree(analysis)),`${sections.join(`
107
+
108
+ `)}
109
+ `}function renderHeader(analysis,options){let{trace,root,rootDurationUs,errorSpans}=analysis,attributes=root?.attributes,method=readAttrString(attributes,"http.method"),target=readAttrString(attributes,"http.target"),status=readAttrString(attributes,"http.status_code"),endpoint=formatEndpoint(method,target,status),duration=formatDurationUs(rootDurationUs),spans=formatSpansLine(trace.spans.length,errorSpans.length);return[`# Trace ${ellipsis(trace.traceId,TRACE_ID_MAX_LEN)}`,"",`- **Trace id:** ${trace.traceId}`,...options.requestId!==void 0?[`- **Request id:** ${options.requestId}`]:[],`- **Endpoint:** ${endpoint}`,`- **Duration:** ${duration}`,`- **Spans:** ${spans}`].join(`
110
+ `)}function renderErrors(analysis){let lines=[`## Errors (${analysis.errorSpans.length})`,""];for(let span of analysis.errorSpans){let name=`\`${span.name||UNNAMED}\``,message=span.status?.message,header=message?`${name} \u2014 \`${message}\``:name;lines.push(`- ${header}`);for(let hint of collectAttrHints(span.attributes))lines.push(` - \`${hint.key}\`: ${hint.value}`)}return lines.join(`
111
+ `)}function renderRepeatedOps(analysis){let{repeatedOps,rootDurationUs}=analysis,showPctColumn=rootDurationUs!==null&&rootDurationUs>0,header=["Operation","Count","Total","Per call"],align=["---","---:","---:","---:"];showPctColumn&&(header.push("% of root"),align.push("---:"));let lines=["## Repeated operations","",`| ${header.join(" | ")} |`,`| ${align.join(" | ")} |`];for(let op of repeatedOps){let cells=[`\`${op.name}\``,String(op.count),formatDurationUs(op.totalUs),formatDurationUs(op.perCallUs)];showPctColumn&&rootDurationUs!==null&&cells.push(formatPct(op.totalUs,rootDurationUs)),lines.push(`| ${cells.join(" | ")} |`)}return lines.join(`
112
+ `)}function renderTree(analysis){let lines=["## Span tree",""];if(analysis.treeOrder.length===0&&analysis.orphanOrder.length===0)return lines.push("_No spans._"),lines.join(`
113
+ `);for(let node of analysis.treeOrder)lines.push(formatTreeRow(node,analysis));if(analysis.orphanOrder.length>0){lines.push("","### Orphan spans","");for(let node of analysis.orphanOrder)lines.push(formatTreeRow(node,analysis))}return analysis.truncatedAtDepth&&lines.push("",`_Tree truncated at depth ${256}._`),lines.join(`
114
+ `)}function formatTreeRow(node,analysis){let{span,depth}=node,info=analysis.spanInfo.get(span.spanId),indent=" ".repeat(depth),parts=[],durationUs=info?.durationUs??null;if(parts.push(`\`${formatDurationUs(durationUs)}\``),analysis.rootDurationUs!==null&&analysis.rootDurationUs>0&&parts.push(formatPct(durationUs,analysis.rootDurationUs)),analysis.rootStartUs!==null){let offset=info?.startOffsetUs??null;parts.push(formatOffset(offset))}if(parts.push(`\`${span.name||UNNAMED}\``),span.status?.code===SPAN_STATUS_ERROR){let message=span.status.message;parts.push(message?`[error: ${message}]`:"[error]")}let[hint]=collectAttrHints(span.attributes);return hint&&parts.push(`\u2014 \`${hint.key}\`: ${hint.value}`),`${indent}- ${parts.join(" ")}`}function formatEndpoint(method,target,status){let left=method&&target?`${method} ${target}`:method??target,path=left?`\`${left}\``:UNKNOWN;return status?`${path} \u2192 ${status}`:path}function formatSpansLine(count,errors){return errors===0?String(count):`${count} (${errors} ${errors===1?"error":"errors"})`}function formatDurationUs(us){return us===null?UNKNOWN:us<1e3?`${Math.round(us)}\u03BCs`:us<1e6?`${(us/1e3).toFixed(1)}ms`:`${(us/1e6).toFixed(1)}s`}function formatOffset(us){return us===null?`+${UNKNOWN}`:`+${formatDurationUs(us)}`}function formatPct(us,rootUs){if(us===null||rootUs<=0)return UNKNOWN;let pct=us/rootUs*100;return pct>0&&pct<1?"<1%":`${Math.round(pct)}%`}function collectAttrHints(attributes){if(!attributes)return[];let out=[];for(let key of ATTR_HINT_KEYS){let value=readAttrString(attributes,key);value!==void 0&&out.push({key,value:ellipsis(value,ATTR_VALUE_MAX_LEN)})}return out}var VIEW_OPTIONS=["timeline","tree","waterfall"];function isView(value){return VIEW_OPTIONS.includes(value)}function buildDashboardUrl({teamSlug,projectName,traceId,view}){let base=`https://vercel.com/${encodeURIComponent(teamSlug)}/${encodeURIComponent(projectName)}/logs/traces/${encodeURIComponent(traceId)}`;return view&&view!=="timeline"?`${base}?view=${encodeURIComponent(view)}`:base}async function resolveDashboardScope({client,scopeFlag,projectName,linkedProject}){let teamSlug;if(scopeFlag)scopeFlag.startsWith("team_")?teamSlug=(await getTeamByIdOrSlug(client,scopeFlag)).slug:teamSlug=scopeFlag;else if(linkedProject.status==="linked")teamSlug=linkedProject.org.slug;else return{error:"Unable to resolve team slug for the dashboard URL.",reason:AGENT_REASON.NOT_LINKED};return{teamSlug,projectName}}async function get(client,telemetry){let parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let positional=parsedArgs.args.slice(1),identifiers=[getSubcommand.name,...getSubcommand.aliases].includes(positional[0])?positional.slice(1):positional,id2=identifiers[0],isTraceId=id2!==void 0&&/^[a-fA-F0-9]{32}$/.test(id2),json=parsedArgs.flags["--json"],scopeFlag=parsedArgs.flags["--scope"]?.trim()||void 0,projectFlag=parsedArgs.flags["--project"],openFlag=parsedArgs.flags["--open"],viewFlag=parsedArgs.flags["--view"];if(telemetry.trackCliArgumentId(id2,isTraceId?"traceId":"requestId"),telemetry.trackCliFlagJson(json),telemetry.trackCliOptionProject(projectFlag),telemetry.trackCliFlagOpen(openFlag),telemetry.trackCliOptionView(viewFlag),json&&openFlag){let msg="`--json` and `--open` cannot be used together.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),2}if(viewFlag&&!openFlag){let msg="`--view` can only be used with `--open`.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),2}let view;if(viewFlag!==void 0){if(!isView(viewFlag)){let msg=`\`--view\` must be one of: ${VIEW_OPTIONS.join(", ")}. Received: ${viewFlag}`;return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.error(msg),2}view=viewFlag}if(!id2)return output_manager_default.print(help(getSubcommand,{parent:tracesCommand,columns:client.stderr.columns})),2;if(identifiers.length>1){let msg="Provide one trace ID or request ID.";return client.nonInteractive&&writeAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg}),output_manager_default.fatal(msg),2}let target=isTraceId?{traceId:id2.toLowerCase()}:{requestId:id2},teamId,projectId,linkedProject;if(linkedProject=await getLinkedProject(client),linkedProject.status==="error")if(scopeFlag&&projectFlag)linkedProject={status:"not_linked",org:null,project:null};else return linkedProject.exitCode;let scope;try{scope=await resolveScope({client,flags:{scope:scopeFlag,project:projectFlag},linkedProject})}catch(err){return printError(err),1}if("message"in scope)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:scope.reason,message:scope.message}),output_manager_default.error(scope.message),1;teamId=scope.teamId,projectId=scope.projectId,output_manager_default.spinner("Fetching trace\u2026");let trace,partial;try{({trace,partial}=await fetchTrace({client,teamId,projectId,...target}))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}output_manager_default.stopSpinner();let rootRequestId=resolveRootSpan(trace)?.attributes?.["vercel.request_id"],requestId=target.requestId??(typeof rootRequestId=="string"&&rootRequestId.trim()!==""?rootRequestId:void 0);if(partial&&output_manager_default.warn("Trace is incomplete because it exceeded the span limit."),openFlag){if(!linkedProject){let msg="Unable to resolve project link for the dashboard URL.";return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message:msg}),output_manager_default.error(msg),1}let resolved=await resolveDashboardScope({client,scopeFlag,projectName:scope.projectName,linkedProject});if("error"in resolved)return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:resolved.reason,message:resolved.error}),output_manager_default.error(resolved.error),1;let url=buildDashboardUrl({teamSlug:resolved.teamSlug,projectName:resolved.projectName,traceId:trace.traceId,view});return output_manager_default.log(`Opening ${url} in your browser...`),await(0,import_open.default)(url),0}if(json)return client.stdout.write(`${JSON.stringify(trace,null,2)}
115
+ `),0;client.stdout.write(renderMarkdown(trace,{requestId}));try{let resolved=await resolveDashboardScope({client,scopeFlag,projectName:scope.projectName,linkedProject});if("error"in resolved)output_manager_default.warn(resolved.error);else{let url=buildDashboardUrl({...resolved,traceId:trace.traceId,view});output_manager_default.log(`View trace: ${url}`)}}catch(err){output_manager_default.print(`${import_chalk8.default.yellow("!")} Failed to resolve the dashboard URL. Use --open to retry.
116
+ `),output_manager_default.debug(String(err))}return output_manager_default.log("Run with --json for full trace data."),0}var import_chalk9=__toESM(require_source(),1);var import_ms6=__toESM(require_ms(),1);var DEFAULT_LIMIT=100,MAX_LIMIT2=1e3,SPAN_EVENT="vercel.span",SPAN_SELECT=["span","resource"],QUERY_REASON2="cli/traces-search",SPAN_KINDS=["UNSPECIFIED","INTERNAL","SERVER","CLIENT","PRODUCER","CONSUMER"],MAX_RANGE_MS=30*24*60*60*1e3,isoDateTimeSchema=external_exports.iso.datetime({offset:!0}),timeInputSchema=external_exports.union([isoDateTimeSchema,external_exports.iso.date()]),TIME_FORMAT_HINT="Use a duration with units such as 100ms or 30m, an ISO timestamp, or YYYY-MM-DD at midnight UTC.",CONTINUATION_CONFLICTS=["--project","--environment","--service","--name","--kind","--status","--deployment","--deployment-id","--request-id","--trace","--trace-id","--span","--span-id","--root","--since","--until","--query"];async function resolveSpanSearchScope(client,project){if(project!==void 0){let scope2=await resolveConfigScope(client,{project});return"exitCode"in scope2?scope2:{ownerId:scope2.teamId,projectIds:[scope2.projectId]}}let scope;try{scope=await getScope(client,{resolveLocalScope:!0})}catch(error){return{exitCode:handleTracingApiError(client,error)}}return scope.isCrossTeamRepo&&!scope.localOrgId&&!scope.explicitScopeProvided&&(!scope.app||scope.user)?{exitCode:invalidArguments(client,"This repository has projects across multiple teams. Pass `--scope <team>` or run from a linked project directory.")}:scope.team?{ownerId:scope.team.id}:{exitCode:invalidArguments(client,"A team scope is required. Pass `--scope <team>` or run `vercel switch <team>`.")}}function parseTime(input,now){let value=input.trim();if(!value)return null;try{let duration=(0,import_ms6.default)(value);if(duration!==void 0&&(duration<=0||!/[a-z]/i.test(value))||duration===void 0&&!timeInputSchema.safeParse(value).success)return null;let date=new Date(duration===void 0?value:now-duration);return Number.isFinite(date.getTime())?date:null}catch{return null}}function buildFilter(flags,spanKind){let clauses=["NOT (service.name:vercel.* AND span.kind:1)"],query=flags["--query"];typeof query=="string"&&clauses.push(`(${query.trim()})`),spanKind!==void 0&&clauses.push(`span.kind:${spanKind}`),flags["--root"]&&clauses.push("span.isRoot:1");let filters=[["--environment","environment"],["--service","service.name"],["--name","span.name"],["--status","span.status.code"],["--deployment","deployment.id"],["--deployment-id","deployment.id"],["--request-id","request.id"],["--trace","trace.id"],["--trace-id","trace.id"],["--span","span.id"],["--span-id","span.id"]];for(let[flag,dimension]of filters){let rawValue=flags[flag];if(typeof rawValue!="string")continue;let value=flag==="--status"?{error:"Error",ok:"Ok",unset:"Unset"}[rawValue]:rawValue.trim();clauses.push(`${dimension}:${JSON.stringify(value)}`)}return clauses.join(" AND ")}function trackSpanQueryOptions(flags,telemetry){telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliOptionEnvironment(flags["--environment"]),telemetry.trackCliOptionService(flags["--service"]),telemetry.trackCliOptionName(flags["--name"]),telemetry.trackCliOptionKind(flags["--kind"]),telemetry.trackCliOptionStatus(flags["--status"]),telemetry.trackCliOptionDeployment(flags["--deployment"]),telemetry.trackCliOptionDeploymentId(flags["--deployment-id"]),telemetry.trackCliOptionRequestId(flags["--request-id"]),telemetry.trackCliOptionTrace(flags["--trace"]),telemetry.trackCliOptionTraceId(flags["--trace-id"]),telemetry.trackCliOptionSpan(flags["--span"]),telemetry.trackCliOptionSpanId(flags["--span-id"]),telemetry.trackCliFlagRoot(flags["--root"]),telemetry.trackCliOptionSince(flags["--since"]),telemetry.trackCliOptionUntil(flags["--until"]),telemetry.trackCliOptionLimit(flags["--limit"]),telemetry.trackCliOptionQuery(flags["--query"]),telemetry.trackCliOptionNext(flags["--next"])}async function resolveSpanQuery(client,flags,telemetry){let project=flags["--project"],environment=flags["--environment"]?.trim().toLowerCase(),status=flags["--status"]?.trim().toLowerCase(),query=flags["--query"];if(trackSpanQueryOptions(flags,telemetry),environment!==void 0&&!["production","preview"].includes(environment))return{exitCode:invalidArguments(client,"`--environment` must be one of: production, preview.")};if(status!==void 0&&!["error","ok","unset"].includes(status))return{exitCode:invalidArguments(client,"`--status` must be one of: error, ok, unset.")};for(let flag of["--service","--name","--deployment","--deployment-id","--request-id","--trace","--trace-id","--span","--span-id"])if(flags[flag]!==void 0&&flags[flag]?.trim()==="")return{exitCode:invalidArguments(client,`\`${flag}\` must not be empty.`)};if(query!==void 0&&query.trim()==="")return{exitCode:invalidArguments(client,"`--query` must not be empty.")};let spanKind;if(flags["--kind"]!==void 0){let value=flags["--kind"].trim().toUpperCase();if(spanKind=/^[0-5]$/.test(value)?Number(value):SPAN_KINDS.indexOf(value.replace(/^SPAN_KIND_/,"")),spanKind===-1)return{exitCode:invalidArguments(client,"`--kind` must be one of: UNSPECIFIED (0), INTERNAL (1), SERVER (2), CLIENT (3), PRODUCER (4), CONSUMER (5).")}}let limit=parseSpanLimit(client,flags["--limit"]);if(typeof limit!="number")return limit;let now=Date.now(),start=parseTime(flags["--since"]??"1h",now),end=flags["--until"]!==void 0?parseTime(flags["--until"],now):new Date(now);if(!start)return{exitCode:invalidArguments(client,`Invalid time format for \`--since\`. ${TIME_FORMAT_HINT}`)};if(!end)return{exitCode:invalidArguments(client,`Invalid time format for \`--until\`. ${TIME_FORMAT_HINT}`)};if(start.getTime()>=end.getTime())return{exitCode:invalidArguments(client,"`--since` must be earlier than `--until`.")};if(end.getTime()-start.getTime()>MAX_RANGE_MS)return{exitCode:invalidArguments(client,"The requested time range must not exceed 30 days.")};if(now-start.getTime()>MAX_RANGE_MS)return{exitCode:invalidArguments(client,"`--since` must be within the last 30 days.")};let scope=await resolveSpanSearchScope(client,project);return"exitCode"in scope?scope:{scope,timeRange:{start:start.toISOString(),end:end.toISOString()},filter:buildFilter({...flags,"--environment":environment,"--status":status},spanKind),limit}}function parseSpanLimit(client,value){let limitResult=validateIntegerRangeWithDefault(value,{flag:"--limit",min:1,max:MAX_LIMIT2,defaultValue:DEFAULT_LIMIT});return limitResult.valid?limitResult.value:{exitCode:invalidArguments(client,limitResult.message)}}function isCanonicalTimestamp(value){let date=new Date(value);return Number.isFinite(date.getTime())&&date.toISOString()===value}function resolveSpanContinuation(client,flags,telemetry){trackSpanQueryOptions(flags,telemetry);let token=flags["--next"]?.trim();if(!token)return{exitCode:invalidArguments(client,"`--next` must not be empty.")};let continuation=decodeContinuation(token),projectIds=continuation?.projectIds??[];if(!continuation||continuation.event!==SPAN_EVENT||continuation.order!=="desc"||projectIds.length>1||!isCanonicalTimestamp(continuation.timeRange.start)||!isCanonicalTimestamp(continuation.timeRange.end)||continuation.timeRange.start>=continuation.timeRange.end)return{exitCode:invalidArguments(client,`\`--next\` is not a valid cursor. Use the pagination.next value from the summary of a previous ${getCommandName("traces search --json")} run.`)};for(let flag of CONTINUATION_CONFLICTS)if(flags[flag]!==void 0)return{exitCode:invalidArguments(client,`\`${flag}\` can't be combined with \`--next\`. The cursor keeps the original filters and time window.`)};if(scopeFlagPassed(client.argv)&&client.config.currentTeam!==continuation.ownerId)return{exitCode:invalidArguments(client,"The `--next` cursor belongs to a different team than `--scope`. Remove `--scope` to use the team in the cursor.")};let limit=parseSpanLimit(client,flags["--limit"]);return typeof limit!="number"?limit:{scope:{ownerId:continuation.ownerId,...projectIds.length===1?{projectIds:[projectIds[0]]}:{}},timeRange:continuation.timeRange,filter:continuation.filter??"",limit,startCursor:continuation.cursor}}function spanEventsRequest(query){return{event:SPAN_EVENT,ownerId:query.scope.ownerId,...query.scope.projectIds?{projectIds:query.scope.projectIds}:{},timeRange:query.timeRange,...query.filter?{filter:query.filter}:{},select:SPAN_SELECT,queryReason:QUERY_REASON2,bailOn429:!0}}function spanContinuationToken(query,cursor){return encodeContinuation({event:SPAN_EVENT,ownerId:query.scope.ownerId,...query.scope.projectIds?{projectIds:query.scope.projectIds}:{},timeRange:query.timeRange,...query.filter?{filter:query.filter}:{},order:"desc",cursor})}function addSpanQueryIssueDetails(err){if(isAPIError(err)){let issues=external_exports.array(external_exports.object({path:external_exports.string(),message:external_exports.string()})).safeParse(err.issues);if(issues.success&&issues.data.length>0){let details=issues.data.map(issue=>`${issue.path}: ${issue.message}`).join(", ");err.serverMessage=`${err.serverMessage}: ${details}`,(err.status===400||err.status===422)&&issues.data.some(issue=>issue.path==="filter")&&(err.serverMessage+=". Filter error positions refer to the generated filter, including CLI-added clauses."),err.message=`${err.serverMessage} (${err.status})`}}}var INVALID_RESPONSE_MESSAGE="The Observability API returned an invalid span search response.",spanSchema=external_exports.object({span:external_exports.object({startTime:isoDateTimeSchema,traceId:external_exports.string(),id:external_exports.string(),parentSpanId:external_exports.string().nullable(),isRoot:external_exports.number(),traceState:external_exports.string(),name:external_exports.string(),kind:external_exports.string(),status:external_exports.object({code:external_exports.string(),message:external_exports.string()}),duration:external_exports.number(),attributes:external_exports.record(external_exports.string(),external_exports.unknown()),events:external_exports.array(external_exports.object({name:external_exports.string(),timestamp:isoDateTimeSchema,attributes:external_exports.record(external_exports.string(),external_exports.unknown())})).optional(),links:external_exports.array(external_exports.object({traceId:external_exports.string(),spanId:external_exports.string(),traceState:external_exports.string(),attributes:external_exports.record(external_exports.string(),external_exports.unknown())})).optional()}).passthrough(),resource:external_exports.object({attributes:external_exports.record(external_exports.string(),external_exports.unknown())})}),spansSchema=external_exports.array(spanSchema);function formatDuration2(durationMs){if(durationMs===0)return"0ms";if(durationMs<1e-6)return"<1ns";let units=[[1e-6,"ns"],[.001,"\u03BCs"],[1,"ms"],[1e3,"s"],[6e4,"m"],[36e5,"h"],[864e5,"d"]],index=units.length-1;for(;durationMs<units[index][0];)index--;let value=Number((durationMs/units[index][0]).toFixed(1));return index<units.length-1&&value>=Math.round(units[index+1][0]/units[index][0])&&(index++,value=Number((durationMs/units[index][0]).toFixed(1))),`${value}${units[index][1]}`}function cell(value){return value||"-"}function stringAttribute(attributes,key){let value=attributes[key];return typeof value=="string"?value:null}var spanColumns={"span.startTime":{header:"TIME",format:event=>new Date(event.span.startTime).toISOString()},"span.duration":{header:"DURATION",format:event=>formatDuration2(event.span.duration)},"span.name":{header:"SPAN NAME",format:event=>ellipsis(cell(event.span.name),60)},"span.status.code":{header:"STATUS",format:event=>event.span.status.code.toUpperCase()==="ERROR"?import_chalk9.default.red("ERROR"):cell(event.span.status.code.toUpperCase())},"service.name":{header:"SERVICE NAME",format:event=>{let serviceName=stringAttribute(event.resource.attributes,"service.name");return serviceName?.startsWith("vercel.")?`\u25B2 ${serviceName}`:cell(serviceName)}},environment:{header:"ENVIRONMENT",format:event=>cell(stringAttribute(event.resource.attributes,"deployment.environment.name"))},"request.id":{header:"REQUEST ID",format:event=>stringAttribute(event.span.attributes,"vercel.request_id")?.split("::").at(-1)||"-"},"trace.id":{header:"TRACE ID",format:event=>cell(event.span.traceId)},"span.id":{header:"SPAN ID",format:event=>cell(event.span.id)},"parent.id":{header:"PARENT ID",format:event=>cell(event.span.parentSpanId)},"span.kind":{header:"SPAN KIND",format:event=>SPAN_KINDS.find((kind,index)=>event.span.kind===String(index)||event.span.kind.toUpperCase()===kind)??cell(event.span.kind)}};function printSpans(client,spans,columns){if(spans.length===0){client.stdout.write(`No spans found for this period.
117
+ `);return}client.stdout.write(`${table([columns.map(column=>column.header),...spans.map(span=>columns.map(column=>column.format(span)))])}
118
+ `)}async function search(client,telemetry){let parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),{...getFlagsSpecification(searchSubcommand.options),"-j":"--json"})}catch(err){return invalidArguments(client,err instanceof Error?err.message:String(err))}let{flags}=parsedArgs,json=!!(flags["--json"]||client.nonInteractive),columnsOption=flags["--columns"];if(telemetry.trackCliOptionColumns(columnsOption),parsedArgs.args.slice(2).length>0)return trackSpanQueryOptions(flags,telemetry),invalidArguments(client,`Unexpected argument: ${parsedArgs.args.slice(2)[0]}.`);let deployment=getRenamedOption(flags,"--deployment","--deployment-id",{json});if("error"in deployment)return trackSpanQueryOptions(flags,telemetry),invalidArguments(client,deployment.error);let trace=getRenamedOption(flags,"--trace","--trace-id",{json});if("error"in trace)return trackSpanQueryOptions(flags,telemetry),invalidArguments(client,trace.error);let span=getRenamedOption(flags,"--span","--span-id",{json});if("error"in span)return trackSpanQueryOptions(flags,telemetry),invalidArguments(client,span.error);let columns=Object.values(spanColumns).filter(column=>column!==spanColumns["span.kind"]&&column!==spanColumns["request.id"]&&column!==spanColumns.environment);if(columnsOption!==void 0){if(json)return invalidArguments(client,"`--columns` cannot be combined with `--json` or `--non-interactive`.");let names=columnsOption.split(",").map(name=>name.trim());if(names.some(name=>!Object.hasOwn(spanColumns,name)))return invalidArguments(client,`Invalid column selection. Available columns: ${Object.keys(spanColumns).join(", ")}.`);if(new Set(names).size!==names.length)return invalidArguments(client,"Columns cannot repeat. List each column once.");columns=names.map(name=>spanColumns[name])}let resolved=flags["--next"]!==void 0?resolveSpanContinuation(client,flags,telemetry):await resolveSpanQuery(client,flags,telemetry);if("exitCode"in resolved)return resolved.exitCode;let query=resolved;for(let{warning}of[deployment,trace,span])warning&&client.stdout.write(warningLine(warning));let interactionOverride=explicitInteractionOverride(client.argv),nextPageArgs=token=>["traces search",`--next ${token}`,...json?["--json"]:[],...interactionOverride?[interactionOverride]:[],...flags["--limit"]!==void 0?[`--limit ${flags["--limit"]}`]:[],...columnsOption!==void 0?[`--columns ${quoteArg(columnsOption)}`]:[]].join(" "),pages=fetchEventPages(client,spanEventsRequest(query),query.limit,query.startCursor),spans=[],excludedIntervals=new Map,received=0,resumeCursor=query.startCursor,result;for(json||output_manager_default.spinner("Searching spans\u2026");;){let page;try{page=await pages.next()}catch(err){return reportFailure2(err)}if(page.done){result=page.value;break}let parsed=spansSchema.safeParse(page.value.events);if(!parsed.success)return reportFailure2(new InvalidEventsResponseError);for(let interval of page.value.excludedIntervals)excludedIntervals.set(`${interval.start}/${interval.end}`,interval);json?client.stdout.write(page.value.events.map(event=>recordLine("span",event)).join("")):spans.push(...parsed.data),received+=page.value.events.length,resumeCursor=page.value.nextCursor??void 0}json||output_manager_default.stopSpinner();let intervals=sortIntervals(excludedIntervals.values()),nextToken=result.nextCursor?spanContinuationToken(query,result.nextCursor):null;if(json)return client.stdout.write(summaryLine({recordsReturned:received,timeRange:query.timeRange,pagination:{hasMore:result.hasMore,next:nextToken},excludedIntervals:intervals})),0;return printSpans(client,spans,columns),intervals.length>0&&output_manager_default.warning("Results omit part of this window: some data is unavailable to this query. Use --json to see the excluded intervals."),result.hasMore&&(output_manager_default.log("More spans matched."),nextToken?(output_manager_default.print(`
119
+ `),printNextPageCommand(getCommandNamePlain(nextPageArgs(nextToken)))):output_manager_default.print(`Narrow the query or increase --limit to see the rest.
120
+ `)),0;function reportFailure2(err){json||output_manager_default.stopSpinner(),err instanceof InvalidEventsResponseError&&(err=new Error(INVALID_RESPONSE_MESSAGE)),addSpanQueryIssueDetails(err),query.startCursor&&received===0&&isAPIError(err)&&err.status===400&&(err.serverMessage=`${err.serverMessage}. The cursor may have expired. Run the search again without --next.`,err.message=`${err.serverMessage} (${err.status})`);let retryToken=received>0&&resumeCursor&&!(err instanceof RecordTooLargeError)?spanContinuationToken(query,resumeCursor):null;if(json&&received>0)return writeJsonError(client,{status:"error",reason:tracingErrorReason(err),message:tracingErrorMessage(err),...isAPIError(err)&&err.status===429?getErrorRecovery(err,client):{},data:progressFor(query,received,retryToken,excludedIntervals),...retryToken?{next:[{command:getCommandNamePlain(nextPageArgs(retryToken)),when:"Retry the failed page"}]}:{}},1);!json&&spans.length>0&&printSpans(client,spans,columns);let exitCode=handleTracingApiError(client,err);return received>0&&(output_manager_default.error(`Output is incomplete: ${received} spans were printed before the failure.`),retryToken&&output_manager_default.print(`Retry the failed page:
121
+ ${getCommandName(nextPageArgs(retryToken))}
122
+ `)),exitCode}}function explicitInteractionOverride(argv){let args=argv.slice(2),end=args.indexOf("--");for(let arg of end===-1?args:args.slice(0,end)){if(arg==="--non-interactive=false")return"--non-interactive=false";if(arg==="--non-interactive"||arg.startsWith("--non-interactive="))return"--non-interactive"}}function progressFor(query,received,retryToken,excludedIntervals){return{recordsReturned:received,outputIncomplete:!0,timeRange:query.timeRange,pagination:{hasMore:!0,next:retryToken},excludedIntervals:sortIntervals(excludedIntervals.values())}}var COMMAND_CONFIG3={inspect:getCommandAliases(getSubcommand),create:getCommandAliases(createSubcommand2),search:getCommandAliases(searchSubcommand),config:getCommandAliases(tracesConfigCommand)},SUBCOMMAND_METADATA={[getSubcommand.name]:getSubcommand,[createSubcommand2.name]:createSubcommand2,[searchSubcommand.name]:searchSubcommand};async function traces(client){let telemetry=new TracesTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(tracesCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return invalidArguments(client,err instanceof Error?err.message:String(err))}let{subcommand,subcommandOriginal,args}=getSubcommand2(parsedArgs.args.slice(1),COMMAND_CONFIG3),needHelp=!!parsedArgs.flags["--help"];if(subcommand===tracesConfigCommand.name)return(await import("./chunks/config-RMOHN5YT.js")).default(client,{args,needHelp,subcommandOriginal,telemetry});if(needHelp){telemetry.trackCliFlagHelp("traces",subcommandOriginal);let subMetadata=typeof subcommand=="string"?SUBCOMMAND_METADATA[subcommand]:void 0;return output_manager_default.print(help(subMetadata??tracesCommand,{parent:subMetadata?tracesCommand:void 0,columns:client.stderr.columns})),0}if(subcommand===createSubcommand2.name){let args2=client.argv.slice(4);return runCurl(client,{forceTrace:!0,args:args2})}return subcommand===searchSubcommand.name?(telemetry.trackCliSubcommandSearch(subcommandOriginal||subcommand),search(client,telemetry)):(subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"traces get","traces inspect"),get(client,telemetry))}export{main2 as ci,drains,health,main as pull,traces};