@vercel/cli-support 65.8.0 → 65.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/chunks/add-6YFDZCAK.js +8 -0
  2. package/dist/chunks/add-QDZPCCUD.js +8 -0
  3. package/dist/chunks/add-Z24IIQDY.js +8 -0
  4. package/dist/chunks/build-HLU4YO37.js +7 -0
  5. package/dist/chunks/chunk-2CSCY66I.js +11 -0
  6. package/dist/chunks/{chunk-G7X2TVUO.js → chunk-2DODPQ5J.js} +1 -1
  7. package/dist/chunks/{chunk-FQVSBXRY.js → chunk-2H4DUZJZ.js} +1 -1
  8. package/dist/chunks/{chunk-QTCS2HDX.js → chunk-2JNDJISE.js} +1 -1
  9. package/dist/chunks/{chunk-BLFPDEXE.js → chunk-2JXQWOK5.js} +1 -1
  10. package/dist/chunks/{chunk-44XDCARR.js → chunk-2RXUQ72I.js} +1 -1
  11. package/dist/chunks/{chunk-TSKFDJ77.js → chunk-2TRNHR72.js} +1 -1
  12. package/dist/chunks/{chunk-EZL4AJXH.js → chunk-32AS5X7G.js} +1 -1
  13. package/dist/chunks/chunk-32NXYHYC.js +10 -0
  14. package/dist/chunks/{chunk-OTJNOMRV.js → chunk-375JVQYK.js} +1 -1
  15. package/dist/chunks/{chunk-QR7PY5JS.js → chunk-43P35KUA.js} +1 -1
  16. package/dist/chunks/{chunk-IECNFRTK.js → chunk-4BZ3DNGM.js} +1 -1
  17. package/dist/chunks/chunk-4CQKN5TW.js +10 -0
  18. package/dist/chunks/{chunk-4UIMSZZB.js → chunk-4KM733OB.js} +1 -1
  19. package/dist/chunks/{chunk-GKUHMS3A.js → chunk-4OTI552J.js} +1 -1
  20. package/dist/chunks/{chunk-KARAZGCO.js → chunk-4SJU5QSD.js} +1 -1
  21. package/dist/chunks/{chunk-6KCYUYUM.js → chunk-4VF5BZJP.js} +1 -1
  22. package/dist/chunks/{chunk-P2HBUDGR.js → chunk-4XJVEKTD.js} +1 -1
  23. package/dist/chunks/chunk-4Z3APEBF.js +7 -0
  24. package/dist/chunks/chunk-5CVEW3HD.js +12 -0
  25. package/dist/chunks/{chunk-LFOWP74R.js → chunk-5DXC4TE2.js} +1 -1
  26. package/dist/chunks/{chunk-FNOCIKAU.js → chunk-5K4UTJSY.js} +1 -1
  27. package/dist/chunks/{chunk-62FZFXPJ.js → chunk-5M3WBT3N.js} +1 -1
  28. package/dist/chunks/{constants-JAB7MRSK.js → chunk-5MDNVAE6.js} +1 -1
  29. package/dist/chunks/{chunk-HA2ICIB5.js → chunk-5TI3ZXW3.js} +1 -1
  30. package/dist/chunks/{chunk-3LQ2ADXO.js → chunk-64UCX5JM.js} +1 -1
  31. package/dist/chunks/{chunk-UAUVCOGS.js → chunk-6RCFEJZK.js} +1 -1
  32. package/dist/chunks/chunk-7DM3IJ7L.js +10 -0
  33. package/dist/chunks/chunk-7PGGP2QT.js +10 -0
  34. package/dist/chunks/{chunk-A6F3EE2O.js → chunk-7ULVGK67.js} +1 -1
  35. package/dist/chunks/{chunk-MCP63EVQ.js → chunk-7WY7ASKE.js} +1 -1
  36. package/dist/chunks/{chunk-YTZPQVGF.js → chunk-AUCTNGW2.js} +1 -1
  37. package/dist/chunks/{chunk-LD42X7ZH.js → chunk-AX3V7N44.js} +1 -1
  38. package/dist/chunks/chunk-BRETAWE7.js +10 -0
  39. package/dist/chunks/{chunk-T2SRGJPU.js → chunk-BT5C6MCY.js} +1 -1
  40. package/dist/chunks/{chunk-D3GYYGSS.js → chunk-BWS3ZOHJ.js} +1 -1
  41. package/dist/chunks/{chunk-OV7G6RIQ.js → chunk-BZNRYQ6U.js} +1 -1
  42. package/dist/chunks/{chunk-KDRCBWRY.js → chunk-C6525MLX.js} +1 -1
  43. package/dist/chunks/chunk-CBVVVYUP.js +10 -0
  44. package/dist/chunks/{chunk-KIMIK4SG.js → chunk-CGTD4QFC.js} +1 -1
  45. package/dist/chunks/{chunk-5MHRCRIN.js → chunk-CMHL66LK.js} +1 -1
  46. package/dist/chunks/{chunk-H4DE2OFO.js → chunk-D2JHIOVH.js} +1 -1
  47. package/dist/chunks/{chunk-WRC5CTUD.js → chunk-D4TD2KWH.js} +1 -1
  48. package/dist/chunks/{chunk-XBOGVOV5.js → chunk-D4ZEJM3T.js} +1 -1
  49. package/dist/chunks/{chunk-5O7CRJE5.js → chunk-D6REP5QQ.js} +1 -1
  50. package/dist/chunks/chunk-DASHFOKO.js +8 -0
  51. package/dist/chunks/chunk-DSNIVABS.js +7 -0
  52. package/dist/chunks/{chunk-A67TLHES.js → chunk-DUJAQS7I.js} +1 -1
  53. package/dist/chunks/{chunk-M4TIOVOP.js → chunk-DUPAU76G.js} +1 -1
  54. package/dist/chunks/{chunk-TCEEQLD4.js → chunk-E5CN62HO.js} +1 -1
  55. package/dist/chunks/{chunk-APNR444T.js → chunk-E7DYXF6G.js} +1 -1
  56. package/dist/chunks/{chunk-ZBJ44DRL.js → chunk-EBBDSEEU.js} +1 -1
  57. package/dist/chunks/{chunk-GP5MFCGO.js → chunk-ECQKK4JU.js} +1 -1
  58. package/dist/chunks/chunk-EDOTKQ7L.js +15 -0
  59. package/dist/chunks/{chunk-PY5A73YH.js → chunk-EVH5524J.js} +1 -1
  60. package/dist/chunks/{chunk-LOEU4R4Z.js → chunk-EW62WSXG.js} +1 -1
  61. package/dist/chunks/{chunk-XUJA3RZD.js → chunk-EXLKCL5I.js} +1 -1
  62. package/dist/chunks/{chunk-U3J7VS56.js → chunk-FBYA6LLM.js} +1 -1
  63. package/dist/chunks/{chunk-SOCGBVML.js → chunk-FVVOHGQE.js} +1 -1
  64. package/dist/chunks/{chunk-QLW5DCM4.js → chunk-FWTBSC7Z.js} +1 -1
  65. package/dist/chunks/{chunk-2OET5FWH.js → chunk-G2BNLRPU.js} +1 -1
  66. package/dist/chunks/{chunk-DBV6AB6T.js → chunk-G3LWP5CH.js} +1 -1
  67. package/dist/chunks/{chunk-YIOT5B5Z.js → chunk-G6HUSV7F.js} +1 -1
  68. package/dist/chunks/{chunk-7V2PXIVW.js → chunk-GCPPL24C.js} +1 -1
  69. package/dist/chunks/{chunk-3AXMZRAB.js → chunk-GCXUSXB4.js} +1 -1
  70. package/dist/chunks/{chunk-GZWYJT4C.js → chunk-GHEGWXH2.js} +1 -1
  71. package/dist/chunks/{chunk-JRBPVMQO.js → chunk-GJCVOEC2.js} +1 -1
  72. package/dist/chunks/{chunk-ELQBQ2O5.js → chunk-GN5IAG3M.js} +1 -1
  73. package/dist/chunks/{chunk-HTFQFHPR.js → chunk-H34SGIVS.js} +1 -1
  74. package/dist/chunks/{chunk-O7IYJGOR.js → chunk-IFCMWIRB.js} +1 -1
  75. package/dist/chunks/{pkg-EDJQLCNP.js → chunk-ITQPDXXA.js} +1 -1
  76. package/dist/chunks/{chunk-XK3W6Q5I.js → chunk-IZ4GFKGR.js} +1 -1
  77. package/dist/chunks/{chunk-CJLRNGWY.js → chunk-JMAXX2I6.js} +1 -1
  78. package/dist/chunks/{chunk-V5A4EBV3.js → chunk-JOXGYP5S.js} +1 -1
  79. package/dist/chunks/{chunk-2QSNFVB6.js → chunk-K5YO4UD7.js} +1 -1
  80. package/dist/chunks/{chunk-WZ2R4Z7N.js → chunk-KRPY5FHJ.js} +1 -1
  81. package/dist/chunks/{chunk-7E6UJXLR.js → chunk-KV2DYFUG.js} +1 -1
  82. package/dist/chunks/{chunk-3KSTUMR6.js → chunk-M73W4XNR.js} +1 -1
  83. package/dist/chunks/{chunk-BHJLCFQ4.js → chunk-MXURT5TX.js} +1 -1
  84. package/dist/chunks/chunk-MY4MONOH.js +7 -0
  85. package/dist/chunks/{chunk-SBBD2Q5A.js → chunk-NAU6URTI.js} +1 -1
  86. package/dist/chunks/{chunk-B3ETPBO4.js → chunk-NEUQZYBL.js} +2 -2
  87. package/dist/chunks/{chunk-3P4Y46MS.js → chunk-NIS66BFX.js} +2 -2
  88. package/dist/chunks/{chunk-RIAOB3RF.js → chunk-NNIQPNGP.js} +1 -1
  89. package/dist/chunks/chunk-NTUDWWSL.js +14 -0
  90. package/dist/chunks/{chunk-AEOG4E5G.js → chunk-O4CQRV2G.js} +1 -1
  91. package/dist/chunks/{chunk-QZEZCUUZ.js → chunk-OZPBJWYU.js} +13 -13
  92. package/dist/chunks/chunk-PBX7RJ2K.js +12 -0
  93. package/dist/chunks/{chunk-T3S63EA3.js → chunk-QBOY2CXL.js} +1 -1
  94. package/dist/chunks/{chunk-63DO6KMD.js → chunk-QJAIUZVZ.js} +3 -3
  95. package/dist/chunks/{chunk-JULKMXVP.js → chunk-QKWJN6OE.js} +1 -1
  96. package/dist/chunks/{chunk-37DIJCWK.js → chunk-QQA2OMXJ.js} +1 -1
  97. package/dist/chunks/{chunk-HNOZM6D4.js → chunk-QY5RG6BB.js} +1 -1
  98. package/dist/chunks/{chunk-K2R3QPOC.js → chunk-R5ZLTWKB.js} +1 -1
  99. package/dist/chunks/chunk-RBIHS5QI.js +7 -0
  100. package/dist/chunks/{chunk-T34C75TI.js → chunk-RCUDI7OF.js} +1 -1
  101. package/dist/chunks/{chunk-7EJ3BZ67.js → chunk-RZY54T7B.js} +1 -1
  102. package/dist/chunks/{chunk-3DDEBTCC.js → chunk-SNCQOAFU.js} +1 -1
  103. package/dist/chunks/{chunk-GP2FXUFE.js → chunk-SR2SHYJA.js} +1 -1
  104. package/dist/chunks/{chunk-FXEMEIST.js → chunk-T2FCF46I.js} +1 -1
  105. package/dist/chunks/{chunk-IHRM7L23.js → chunk-T5TOBY4D.js} +1 -1
  106. package/dist/chunks/{chunk-EKB2DYCQ.js → chunk-TCB4XM23.js} +1 -1
  107. package/dist/chunks/{chunk-YRK2BCTJ.js → chunk-TD7AL545.js} +1 -1
  108. package/dist/chunks/{chunk-4MP4HVBG.js → chunk-TGPYWWX3.js} +1 -1
  109. package/dist/chunks/{chunk-6V67VZJD.js → chunk-TMXIVQ45.js} +1 -1
  110. package/dist/chunks/{chunk-J52UJYOK.js → chunk-TRZDIAX3.js} +1 -1
  111. package/dist/chunks/{chunk-7BML2OR6.js → chunk-U6KJOCXX.js} +1 -1
  112. package/dist/chunks/{chunk-Y55DGB3L.js → chunk-UIJYRI3G.js} +1 -1
  113. package/dist/chunks/{chunk-NAXFG37F.js → chunk-UNASHUWQ.js} +1 -1
  114. package/dist/chunks/chunk-UOQGI6CL.js +8 -0
  115. package/dist/chunks/{chunk-753RQ6WV.js → chunk-USYEDO7R.js} +1 -1
  116. package/dist/chunks/{chunk-YKNHA3RN.js → chunk-UVE5COCG.js} +1 -1
  117. package/dist/chunks/{chunk-3RXEJWYM.js → chunk-UZTDRGCW.js} +1 -1
  118. package/dist/chunks/{chunk-F76MNMH3.js → chunk-VR5ROBAO.js} +1 -1
  119. package/dist/chunks/{chunk-JESNVRVR.js → chunk-VRH7LWOC.js} +1 -1
  120. package/dist/chunks/{chunk-QIPUFI6P.js → chunk-VU3RBRDH.js} +1 -1
  121. package/dist/chunks/{chunk-AQA4JVKA.js → chunk-VZKQP67Q.js} +1 -1
  122. package/dist/chunks/{chunk-ZRJKGAUT.js → chunk-W634OFUG.js} +3 -3
  123. package/dist/chunks/{chunk-SKLRHAGH.js → chunk-WFCGAYP5.js} +1 -1
  124. package/dist/chunks/{chunk-5GOQ3FBV.js → chunk-WFOJ2LEA.js} +1 -1
  125. package/dist/chunks/{chunk-KL6HNOFN.js → chunk-WGVIQTOI.js} +1 -1
  126. package/dist/chunks/{chunk-IHNEF3BG.js → chunk-WGWGDC3N.js} +1 -1
  127. package/dist/chunks/{chunk-C4XT3PG4.js → chunk-WKYFWE37.js} +1 -1
  128. package/dist/chunks/{chunk-YHFZIUXF.js → chunk-XBWISZCG.js} +1 -1
  129. package/dist/chunks/chunk-XRIM4BUF.js +7 -0
  130. package/dist/chunks/chunk-Y5YXAXK3.js +13 -0
  131. package/dist/chunks/{chunk-YEPB52XE.js → chunk-Y6WXTTZS.js} +1 -1
  132. package/dist/chunks/{chunk-45UDRX4C.js → chunk-ZBZPCKTW.js} +1 -1
  133. package/dist/chunks/{chunk-KUNFE2M6.js → chunk-ZCXKEZS4.js} +1 -1
  134. package/dist/chunks/{chunk-MDWYXLDB.js → chunk-ZERZX6BZ.js} +3 -3
  135. package/dist/chunks/{chunk-2B7U6BB5.js → chunk-ZGKJLJ47.js} +1 -1
  136. package/dist/chunks/chunk-ZS2WS4AM.js +7 -0
  137. package/dist/chunks/clear-RU72IUXU.js +8 -0
  138. package/dist/chunks/compile-vercel-config-DRTOWZK6.js +7 -0
  139. package/dist/chunks/config-MNRKCDQA.js +7 -0
  140. package/dist/chunks/config-PIFTR3UF.js +8 -0
  141. package/dist/chunks/connect-git-provider-AWEOEEOO.js +7 -0
  142. package/dist/chunks/delete-47BF6SIO.js +9 -0
  143. package/dist/chunks/delete-QNSKEIGO.js +10 -0
  144. package/dist/chunks/{detect-projects-A4H2ZEAP.js → detect-projects-K7SVMH5T.js} +1 -1
  145. package/dist/chunks/detect-services-GXKWIX52.js +7 -0
  146. package/dist/chunks/disable-SBFW3F7B.js +7 -0
  147. package/dist/chunks/discard-DUZR3OWZ.js +14 -0
  148. package/dist/chunks/edit-6BQ7FZC4.js +8 -0
  149. package/dist/chunks/edit-WO7FLNW2.js +9 -0
  150. package/dist/chunks/enable-OK4MR3Z6.js +7 -0
  151. package/dist/chunks/{exec-7LB36K52.js → exec-UV73J2ZB.js} +1 -1
  152. package/dist/chunks/{export-AI2O22W5.js → export-N5F7EY7B.js} +1 -1
  153. package/dist/chunks/future-5AQIYILU.js +7 -0
  154. package/dist/chunks/generate-cert-for-deploy-7ERAHVOV.js +7 -0
  155. package/dist/chunks/image-IRC2NJVA.js +7 -0
  156. package/dist/chunks/import-builders-OAGJKQNW.js +7 -0
  157. package/dist/chunks/{inspect-4A67JORH.js → inspect-35WHAXL2.js} +1 -1
  158. package/dist/chunks/inspect-5FKOSDTK.js +13 -0
  159. package/dist/chunks/inspect-ACNGICEF.js +9 -0
  160. package/dist/chunks/{inspect-3NMNI7GY.js → inspect-GX34WQGR.js} +1 -1
  161. package/dist/chunks/{inspect-OM5S5YQ2.js → inspect-UDUI3ETL.js} +1 -1
  162. package/dist/chunks/{list-NEV4FBTY.js → list-BINT67HQ.js} +1 -1
  163. package/dist/chunks/list-TRFGY6WP.js +12 -0
  164. package/dist/chunks/{list-TUJ7HCQK.js → list-VVND632B.js} +1 -1
  165. package/dist/chunks/login-MYVTOBRG.js +9 -0
  166. package/dist/chunks/login-SOZ5ME3D.js +7 -0
  167. package/dist/chunks/logs-EMAGPMIZ.js +7 -0
  168. package/dist/chunks/{ls-OVM2DZYL.js → ls-2MJY6EKD.js} +1 -1
  169. package/dist/chunks/{ls-CVO4MCX5.js → ls-6HYUGM62.js} +1 -1
  170. package/dist/chunks/{ls-COOTTCRW.js → ls-7OZ5TSNW.js} +1 -1
  171. package/dist/chunks/{ls-UY3KCDSF.js → ls-HTNWWU45.js} +1 -1
  172. package/dist/chunks/ls-KU35N6DP.js +8 -0
  173. package/dist/chunks/ls-WFC636QK.js +11 -0
  174. package/dist/chunks/ls-YT3MWU4U.js +8 -0
  175. package/dist/chunks/mutate-JVDDZLVE.js +9 -0
  176. package/dist/chunks/native-self-update-75UJCHGZ.js +7 -0
  177. package/dist/chunks/notifications-CXDBNBHU.js +7 -0
  178. package/dist/chunks/open-3CD5ZNKU.js +7 -0
  179. package/dist/chunks/openapi-KYC6JIXI.js +7 -0
  180. package/dist/chunks/permissions-PNBST4WN.js +7 -0
  181. package/dist/chunks/{plugin-offer-4YTKDZGS.js → plugin-offer-URT5JNEU.js} +1 -1
  182. package/dist/chunks/prompt-missing-credentials-Q5JCRP3R.js +7 -0
  183. package/dist/chunks/publish-LH5CIXCP.js +15 -0
  184. package/dist/chunks/pull-XLZXPTLS.js +7 -0
  185. package/dist/chunks/purchase-domain-if-available-PDJGZ6MY.js +7 -0
  186. package/dist/chunks/push-XB57XK6H.js +7 -0
  187. package/dist/chunks/{query-NIMDIFLO.js → query-POTX2HYL.js} +1 -1
  188. package/dist/chunks/reauthenticate-CRI4D2BQ.js +7 -0
  189. package/dist/chunks/reorder-KUQ5EQBV.js +10 -0
  190. package/dist/chunks/reply-LO76EKEE.js +9 -0
  191. package/dist/chunks/resolve-KZJYJJLA.js +12 -0
  192. package/dist/chunks/resolve-agent-team-N7QMB7UO.js +7 -0
  193. package/dist/chunks/restore-L3T5KOG7.js +16 -0
  194. package/dist/chunks/rm-7UKXTIZW.js +8 -0
  195. package/dist/chunks/rm-AKKEQN32.js +8 -0
  196. package/dist/chunks/rm-ELC57ULY.js +8 -0
  197. package/dist/chunks/rm-K7XEZ7TY.js +8 -0
  198. package/dist/chunks/rm-MOYCAXNO.js +8 -0
  199. package/dist/chunks/routes-S75L7Z7A.js +7 -0
  200. package/dist/chunks/rule-inspect-ZCS4EBKR.js +8 -0
  201. package/dist/chunks/{schema-44U7GOQE.js → schema-P4T4GQBF.js} +1 -1
  202. package/dist/chunks/schema-TOVLKRPJ.js +14 -0
  203. package/dist/chunks/select-org-6NEM7F25.js +7 -0
  204. package/dist/chunks/set-NXFB6JXG.js +7 -0
  205. package/dist/chunks/setup-and-link-L67MMSUD.js +7 -0
  206. package/dist/chunks/{skills-XOH4Q7KK.js → skills-DZYJV7BE.js} +3 -3
  207. package/dist/chunks/statuspage-45LJ2XYT.js +7 -0
  208. package/dist/chunks/tags-5AV6WAOF.js +7 -0
  209. package/dist/chunks/{types-6W3KAE2A.js → types-YA6BOCRV.js} +1 -1
  210. package/dist/chunks/{update-YLFMSPQF.js → update-YSAO36V7.js} +1 -1
  211. package/dist/chunks/validate-config-XWZ7ZZ3G.js +7 -0
  212. package/dist/commands/build/index.js +1 -6
  213. package/dist/commands/deploy/index.js +14 -14
  214. package/dist/commands/dev/index.js +3 -3
  215. package/dist/commands/env/index.js +1 -1
  216. package/dist/commands/link/index.js +1 -1
  217. package/dist/commands/list/index.js +1 -1
  218. package/dist/commands/project/index.js +1 -1
  219. package/dist/commands-account.js +112 -91
  220. package/dist/commands-ai.js +2 -2
  221. package/dist/commands-blob.js +1 -1
  222. package/dist/commands-core.js +62 -44
  223. package/dist/commands-deployments.js +9 -6
  224. package/dist/commands-flags.js +4 -3
  225. package/dist/commands-integrations.js +98 -74
  226. package/dist/commands-observability.js +5 -5
  227. package/dist/commands-routing.js +154 -162
  228. package/dist/help.js +1 -1
  229. package/dist/index.js +5 -5
  230. package/dist/internal-build.js +1 -1
  231. package/dist/native-download.js +1 -1
  232. package/dist/package.json +58 -59
  233. package/dist/root-help-commands.mjs +1 -1
  234. package/dist/version.mjs +1 -1
  235. package/package.json +51 -52
  236. package/dist/chunks/add-3MWFJH54.js +0 -8
  237. package/dist/chunks/add-CJWCA3MM.js +0 -8
  238. package/dist/chunks/add-GLCVYEEN.js +0 -8
  239. package/dist/chunks/build-6RK6VECG.js +0 -7
  240. package/dist/chunks/chunk-2PYFJXKS.js +0 -14
  241. package/dist/chunks/chunk-5SMV2PPI.js +0 -10
  242. package/dist/chunks/chunk-7A5WO5KA.js +0 -8
  243. package/dist/chunks/chunk-CJHVHB2F.js +0 -8
  244. package/dist/chunks/chunk-EGPVNTKP.js +0 -7
  245. package/dist/chunks/chunk-GJB72ITS.js +0 -12
  246. package/dist/chunks/chunk-H3SJJO6S.js +0 -10
  247. package/dist/chunks/chunk-INH6RXBH.js +0 -9
  248. package/dist/chunks/chunk-IU6PHFPQ.js +0 -7
  249. package/dist/chunks/chunk-KAUKCHQF.js +0 -10
  250. package/dist/chunks/chunk-NDWGYZRT.js +0 -10
  251. package/dist/chunks/chunk-OLAG7Y3P.js +0 -10
  252. package/dist/chunks/chunk-TK2ILW2O.js +0 -21
  253. package/dist/chunks/chunk-WKZ6JSGZ.js +0 -7
  254. package/dist/chunks/chunk-X65XZSWS.js +0 -10
  255. package/dist/chunks/cjs-2SMN43VH.js +0 -54
  256. package/dist/chunks/clear-375VKVXY.js +0 -8
  257. package/dist/chunks/compile-vercel-config-LNRUSKTH.js +0 -7
  258. package/dist/chunks/config-GOYBATSI.js +0 -8
  259. package/dist/chunks/config-VAW454ZH.js +0 -7
  260. package/dist/chunks/connect-git-provider-7KRYVDFS.js +0 -7
  261. package/dist/chunks/delete-3SN6XFOW.js +0 -10
  262. package/dist/chunks/delete-W6BZHLGP.js +0 -9
  263. package/dist/chunks/detect-services-6L57MV5F.js +0 -7
  264. package/dist/chunks/disable-UUV5MYYH.js +0 -7
  265. package/dist/chunks/discard-Y6ZITZ2P.js +0 -14
  266. package/dist/chunks/edit-CVMUITFG.js +0 -9
  267. package/dist/chunks/edit-LLRI57RF.js +0 -8
  268. package/dist/chunks/enable-TFA6XWAA.js +0 -7
  269. package/dist/chunks/future-EZEU2CBY.js +0 -7
  270. package/dist/chunks/generate-cert-for-deploy-QP5BUOJL.js +0 -7
  271. package/dist/chunks/image-YLUF7SHR.js +0 -7
  272. package/dist/chunks/import-builders-ANLKHIYK.js +0 -7
  273. package/dist/chunks/inspect-3TRAN3SP.js +0 -9
  274. package/dist/chunks/inspect-VEUY4QJ2.js +0 -13
  275. package/dist/chunks/list-DJKKVFUL.js +0 -12
  276. package/dist/chunks/login-4HCFKDKL.js +0 -7
  277. package/dist/chunks/login-EPBJQDEK.js +0 -9
  278. package/dist/chunks/logs-Q7XXVFR3.js +0 -7
  279. package/dist/chunks/ls-3TKRCF4T.js +0 -8
  280. package/dist/chunks/ls-LS5J5ERG.js +0 -11
  281. package/dist/chunks/ls-OQQTUQFN.js +0 -8
  282. package/dist/chunks/mutate-I6QWCURL.js +0 -9
  283. package/dist/chunks/notifications-UKC5Z6AH.js +0 -7
  284. package/dist/chunks/open-CYATUDTT.js +0 -7
  285. package/dist/chunks/openapi-B7WSK7AU.js +0 -7
  286. package/dist/chunks/permissions-4ZYPHPOZ.js +0 -7
  287. package/dist/chunks/prompt-missing-credentials-4OKJMYW5.js +0 -7
  288. package/dist/chunks/publish-N6E7VTRK.js +0 -15
  289. package/dist/chunks/pull-LPIT3XUR.js +0 -7
  290. package/dist/chunks/purchase-domain-if-available-IS6UDPJT.js +0 -7
  291. package/dist/chunks/push-ETLU6OCC.js +0 -7
  292. package/dist/chunks/reauthenticate-TESIUM6U.js +0 -7
  293. package/dist/chunks/reorder-PQU2BQEE.js +0 -10
  294. package/dist/chunks/reply-RKDDYV5I.js +0 -9
  295. package/dist/chunks/resolve-ZF7BFXIW.js +0 -12
  296. package/dist/chunks/resolve-agent-team-QSIJ665W.js +0 -7
  297. package/dist/chunks/restore-U5A3BEFQ.js +0 -16
  298. package/dist/chunks/rm-7H5O3T7G.js +0 -8
  299. package/dist/chunks/rm-EPPMQEAV.js +0 -8
  300. package/dist/chunks/rm-FNMW2FPM.js +0 -8
  301. package/dist/chunks/rm-OZIA3DFM.js +0 -8
  302. package/dist/chunks/rm-W3VOR2ED.js +0 -8
  303. package/dist/chunks/routes-BLE5XZJE.js +0 -7
  304. package/dist/chunks/rule-inspect-YAVRRGAP.js +0 -8
  305. package/dist/chunks/schema-6SAZ7T2S.js +0 -14
  306. package/dist/chunks/select-org-L5FJVL5Q.js +0 -7
  307. package/dist/chunks/set-3NQXDGJV.js +0 -7
  308. package/dist/chunks/setup-and-link-H36NRP3A.js +0 -7
  309. package/dist/chunks/tags-CRG27GFL.js +0 -7
  310. /package/dist/chunks/{chunk-OO572JUC.js → chunk-DBT6PGEH.js} +0 -0
@@ -4,7 +4,7 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{collectBuildLogs,displayBuildLogs}from"./chunks/chunk-EKB2DYCQ.js";import{decodeContinuation,encodeContinuation,recordLine,serializeTimeRange,warningLine}from"./chunks/chunk-CJHVHB2F.js";import{composeFilter,createRenderer,fetchEventPages,formatWindow,sanitize}from"./chunks/chunk-X65XZSWS.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{InvalidEventsResponseError,RecordTooLargeError,sortIntervals,summaryLine,writeJsonError}from"./chunks/chunk-OLAG7Y3P.js";import{getBuildMachineResourceConfig}from"./chunks/chunk-ZF27J6FQ.js";import{isDeploying}from"./chunks/chunk-ZFRNVIHI.js";import"./chunks/chunk-753RQ6WV.js";import{readStandardInput}from"./chunks/chunk-PSOVLGHP.js";import"./chunks/chunk-XOETL6DB.js";import{parseTimeFlag,validateIntegerRangeWithDefault}from"./chunks/chunk-LD42X7ZH.js";import{getDeployment}from"./chunks/chunk-QIPUFI6P.js";import"./chunks/chunk-6KCYUYUM.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import"./chunks/chunk-PFD7LETF.js";import{printNextPageCommand}from"./chunks/chunk-B3ETPBO4.js";import{elapsed}from"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{getTeams}from"./chunks/chunk-YEPB52XE.js";import{BACKGROUND_FUNCTION_EXCLUSION,DEFAULT_LIMIT,DEFAULT_WINDOW,MAX_LIMIT,getCommandAliases,inspectCommand,logsCommand,logsSources,requestsSubcommand,runtimeSubcommand,sourceForEvent}from"./chunks/chunk-2PYFJXKS.js";import"./chunks/chunk-3KSTUMR6.js";import"./chunks/chunk-EZL4AJXH.js";import"./chunks/chunk-45UDRX4C.js";import"./chunks/chunk-J52UJYOK.js";import"./chunks/chunk-GZWYJT4C.js";import"./chunks/chunk-3AXMZRAB.js";import"./chunks/chunk-FQVSBXRY.js";import"./chunks/chunk-GP5MFCGO.js";import"./chunks/chunk-V5A4EBV3.js";import"./chunks/chunk-IECNFRTK.js";import"./chunks/chunk-A6F3EE2O.js";import"./chunks/chunk-K2R3QPOC.js";import"./chunks/chunk-IHRM7L23.js";import"./chunks/chunk-HTFQFHPR.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-DBV6AB6T.js";import"./chunks/chunk-37DIJCWK.js";import"./chunks/chunk-7E6UJXLR.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-7V2PXIVW.js";import{printError}from"./chunks/chunk-D3GYYGSS.js";import{help}from"./chunks/chunk-33U57CNE.js";import{detectExplicitScope,getContextName}from"./chunks/chunk-IU6PHFPQ.js";import{TelemetryClient}from"./chunks/chunk-SBBD2Q5A.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_REASON,getErrorRecovery}from"./chunks/chunk-KAUKCHQF.js";import"./chunks/chunk-QLW5DCM4.js";import{getProjectByNameOrId,getProjectLink,resolveProjectCwd,sleep}from"./chunks/chunk-QZEZCUUZ.js";import"./chunks/chunk-3LQ2ADXO.js";import"./chunks/chunk-MCP63EVQ.js";import"./chunks/chunk-4NTBYNFR.js";import{isArgumentError,parseArguments}from"./chunks/chunk-KIMIK4SG.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,warnDeprecatedSubcommand}from"./chunks/chunk-JRBPVMQO.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-OCR5CRTH.js";import"./chunks/chunk-4SAVH3H7.js";import{DeploymentNotFound,DeploymentPermissionDenied,InvalidDeploymentId,ProjectNotFound,isAPIError,require_bytes}from"./chunks/chunk-FXEMEIST.js";import{getCommandName,getCommandNamePlain,require_lib}from"./chunks/chunk-JESNVRVR.js";import{output_manager_default,require_build_utils}from"./chunks/chunk-ZRJKGAUT.js";import"./chunks/chunk-BLUPZPAS.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-PUKYAALC.js";import{getFlagsSpecification}from"./chunks/chunk-YPPDRKVC.js";import"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-5O7CRJE5.js";import"./chunks/chunk-U3J7VS56.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_error_utils=__toESM(require_dist(),1),import_chalk3=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib(),1);var NOT_SAVED_LABELS={disabled:"not saved (caching disabled)",prebuilt:"not saved (prebuilt deployment)",no_cache_branch:"not saved (no branch to cache)",forced_skip:"not saved (skipped)",missing_metadata:"not saved (missing metadata)",no_files:"not saved (nothing to cache)"};function describeBuildCache(summary){let save=getKnownSave(summary);if(!save)return"unavailable";if(save.saved){let rows=[["size",`${formatCacheBytes(save.compressedSizeBytes)} / ${formatCacheBytes(save.cacheLimitBytes)} limit`]];return save.fileCount!==void 0&&rows.push(["file count",`~${save.fileCount.toLocaleString("en-US")} (approx., paths selected for packing)`]),rows}return"cacheLimitBytes"in save?`not saved (exceeded ${formatCacheBytes(save.cacheLimitBytes)} limit)`:save.reason==="failed"?"upload failed":NOT_SAVED_LABELS[save.reason]??"not saved"}function getBuildCacheJson(summary){if(!summary||typeof summary!="object")return;let{save}=summary;return save===void 0?void 0:{save}}function getKnownSave(summary){if(!summary||typeof summary!="object")return;let{version,save}=summary;if(!(version!==1||!save||typeof save!="object")){if(save.saved===!0)return isCount(save.compressedSizeBytes)&&isCount(save.cacheLimitBytes)&&(save.fileCount===void 0||isCount(save.fileCount))?save:void 0;if(!(save.saved!==!1||typeof save.reason!="string"))return save.reason==="size_exceeded"?isCount(save.cacheLimitBytes)?save:void 0:{saved:!1,reason:save.reason}}}function isCount(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>=0}var BINARY_UNITS=["B","KiB","MiB","GiB","TiB"];function formatCacheBytes(value){let unit=0,scaled=value;for(;scaled>=1024&&unit<BINARY_UNITS.length-1;)scaled/=1024,unit++;return`${Number(scaled.toFixed(2))} ${BINARY_UNITS[unit]}`}var import_chalk=__toESM(require_source(),1),import_bytes=__toESM(require_bytes(),1);var isReady=({readyState})=>readyState==="READY",isFailed=({readyState})=>readyState.endsWith("_ERROR")||readyState==="ERROR";var padding=8,MAX_BUILD_GROUPS=5,MAX_OUTPUTS_PER_GROUP=5,hasOutput=b=>Array.isArray(b.output)&&b.output.length>0,getCommonPath=buildGroup=>{let commonPath=[],splits=buildGroup.map(build=>getDirPath(build.entrypoint).split("/")),shortest=splits.reduce((prevValue,currentValue)=>Math.min(prevValue,currentValue.length),1/0);for(let i=0;i<=shortest;i++){let first=splits[0][i];if(splits.every(pathParts=>pathParts[i]===first)){commonPath.push(first);continue}break}return commonPath.join("/")||"/"},styleBuild=(build,times,longestSource)=>{let{entrypoint,id}=build,time=typeof times[id]=="string"?times[id]:"",pathColor=import_chalk.default.cyan;isFailed(build)&&(pathColor=import_chalk.default.red);let entry=entrypoint.padEnd(longestSource+padding),prefix=hasOutput(build)?"\u250C":"\u2576";return`${import_chalk.default.grey(prefix)} ${pathColor(entry)}${time}`},styleHiddenBuilds=(commonPath,buildGroup,times,longestSource,isHidden=!1)=>{let{id}=buildGroup[0],entry=commonPath.padEnd(longestSource+padding),time=typeof times[id]=="string"?times[id]:"",prefix=isHidden===!1&&buildGroup.some(hasOutput)?"\u250C":"\u2576",pathColor=import_chalk.default.cyan;return buildGroup.every(isFailed)&&(pathColor=import_chalk.default.red),isHidden&&(pathColor=import_chalk.default.grey),`${import_chalk.default.grey(prefix)} ${pathColor(entry)}${time}`},styleOutput=(output,readyState,isLast)=>{let{type,path,size,lambda}=output,prefix=type==="lambda"?"\u03BB ":"",finalSize=size?` ${import_chalk.default.grey(`(${(0,import_bytes.default)(size)})`)}`:"",color=import_chalk.default.grey,finalRegion="";if(isReady({readyState})?color=import_chalk.default:isFailed({readyState})&&(color=import_chalk.default.red),lambda){let{deployedTo}=lambda;deployedTo&&deployedTo.length>0&&(finalRegion=` ${import_chalk.default.grey(`[${deployedTo.join(", ")}]`)}`)}let corner=isLast?"\u2514\u2500\u2500":"\u251C\u2500\u2500",main=prefix+path+finalSize+finalRegion;return`${import_chalk.default.grey(corner)} ${color(main)}`},getDirPath=(path,level=0,highestLevel=null)=>{let parts=path.split("/").slice(0,-1);if(highestLevel===null||level===0)return parts.join("/");let reverseLevel=highestLevel-level;return parts.slice(0,reverseLevel).join("/")},sortByEntrypoint=(a,b)=>{let aPath=getDirPath(a.entrypoint),bPath=getDirPath(b.entrypoint);return aPath===""?1:bPath===""?-1:aPath>bPath?1:bPath>aPath?-1:0},groupBuilds=(buildList,highestLevel,counter)=>{let currentIndex=counter%buildList.length,__level=Math.ceil(counter/buildList.length),_level=(__level===0?1:__level)-1,level=_level>highestLevel?highestLevel:_level,currentPath=getDirPath(buildList[currentIndex][0].entrypoint,level,highestLevel),nextList=[],currentGroup=[];for(let i=0;i<buildList.length;i++){let group=buildList[i];getDirPath(group[0].entrypoint,level,highestLevel)===currentPath?currentGroup.push(...group):nextList.push(group)}return currentIndex===0?nextList.unshift(currentGroup):nextList.splice(currentIndex,0,currentGroup),nextList},builds_default=(builds,times)=>{let path=builds.sort(sortByEntrypoint).map(build=>[build]),highestLevel=builds.reduce((prev,curr)=>{let partCounter=curr.entrypoint.split("/").length-1;return partCounter>prev?partCounter:prev},0),counter=0;for(;path.length>MAX_BUILD_GROUPS;)path=groupBuilds(path,highestLevel,counter),counter++;path=path.reverse();let longestSource=builds.reduce((final2,current)=>{let{length}=current.entrypoint;return length>final2?length:final2},0),final=[],finalBuildsLength=path.length,lengthWithoutRootPaths=path.length,hiddenBuildGroup=[];path=(()=>{let nextList=[],rootList=[];for(let group of path)getCommonPath(group)==="/"?group.map(item=>rootList.push([item])):nextList.push(group);return lengthWithoutRootPaths=nextList.length,rootList.map(group=>nextList.push(group)),nextList})();for(let buildGroup of path){let commonPath=getCommonPath(buildGroup);if(commonPath==="/")if(lengthWithoutRootPaths<=MAX_BUILD_GROUPS&&finalBuildsLength<=MAX_BUILD_GROUPS){let item=buildGroup[0];final.push(`${styleBuild(item,times,longestSource)}
7
+ import{collectBuildLogs,displayBuildLogs}from"./chunks/chunk-TCB4XM23.js";import{InvalidEventsResponseError,RecordTooLargeError,decodeContinuation,encodeContinuation,fetchEventPages,recordLine,serializeTimeRange,sortIntervals,warningLine}from"./chunks/chunk-DASHFOKO.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{getBuildMachineResourceConfig}from"./chunks/chunk-ZF27J6FQ.js";import{isDeploying}from"./chunks/chunk-ZFRNVIHI.js";import"./chunks/chunk-USYEDO7R.js";import{readStandardInput}from"./chunks/chunk-PSOVLGHP.js";import"./chunks/chunk-XOETL6DB.js";import{summaryLine,writeJsonError}from"./chunks/chunk-CBVVVYUP.js";import{parseTimeFlag,validateIntegerRangeWithDefault}from"./chunks/chunk-AX3V7N44.js";import{getDeployment}from"./chunks/chunk-VU3RBRDH.js";import"./chunks/chunk-4VF5BZJP.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{require_format}from"./chunks/chunk-PFD7LETF.js";import{printNextPageCommand}from"./chunks/chunk-NEUQZYBL.js";import{elapsed}from"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{getTeams}from"./chunks/chunk-Y6WXTTZS.js";import{BACKGROUND_FUNCTION_EXCLUSION,DEFAULT_LIMIT,DEFAULT_WINDOW,MAX_LIMIT,getCommandAliases,inspectCommand,logsCommand,logsSources,requestsSubcommand,runtimeSubcommand,sourceForEvent}from"./chunks/chunk-NTUDWWSL.js";import"./chunks/chunk-M73W4XNR.js";import"./chunks/chunk-32AS5X7G.js";import"./chunks/chunk-ZBZPCKTW.js";import"./chunks/chunk-TRZDIAX3.js";import"./chunks/chunk-GHEGWXH2.js";import"./chunks/chunk-GCXUSXB4.js";import"./chunks/chunk-2H4DUZJZ.js";import"./chunks/chunk-ECQKK4JU.js";import"./chunks/chunk-JOXGYP5S.js";import"./chunks/chunk-7ULVGK67.js";import"./chunks/chunk-4BZ3DNGM.js";import"./chunks/chunk-R5ZLTWKB.js";import"./chunks/chunk-T5TOBY4D.js";import"./chunks/chunk-H34SGIVS.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-G3LWP5CH.js";import"./chunks/chunk-QQA2OMXJ.js";import"./chunks/chunk-KV2DYFUG.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-GCPPL24C.js";import{printError}from"./chunks/chunk-BWS3ZOHJ.js";import{help}from"./chunks/chunk-33U57CNE.js";import{detectExplicitScope,getContextName}from"./chunks/chunk-DSNIVABS.js";import{TelemetryClient}from"./chunks/chunk-NAU6URTI.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_REASON,getErrorRecovery}from"./chunks/chunk-32NXYHYC.js";import"./chunks/chunk-FWTBSC7Z.js";import{getProjectByNameOrId,getProjectLink,resolveProjectCwd,sleep}from"./chunks/chunk-OZPBJWYU.js";import"./chunks/chunk-64UCX5JM.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-7WY7ASKE.js";import"./chunks/chunk-4NTBYNFR.js";import{isArgumentError,parseArguments}from"./chunks/chunk-CGTD4QFC.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{validateJsonOutput,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-4SAVH3H7.js";import{DeploymentNotFound,DeploymentPermissionDenied,InvalidDeploymentId,ProjectNotFound,isAPIError,require_bytes}from"./chunks/chunk-T2FCF46I.js";import{getCommandName,getCommandNamePlain,require_lib}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{output_manager_default}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-ZS2WS4AM.js";import{require_build_utils}from"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{getFlagsSpecification}from"./chunks/chunk-YPPDRKVC.js";import"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import{require_strip_ansi}from"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_error_utils=__toESM(require_dist(),1),import_chalk3=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1),import_title=__toESM(require_lib(),1);var NOT_SAVED_LABELS={disabled:"not saved (caching disabled)",prebuilt:"not saved (prebuilt deployment)",no_cache_branch:"not saved (no branch to cache)",forced_skip:"not saved (skipped)",missing_metadata:"not saved (missing metadata)",no_files:"not saved (nothing to cache)"};function describeBuildCache(summary){let save=getKnownSave(summary);if(!save)return"unavailable";if(save.saved){let rows=[["size",`${formatCacheBytes(save.compressedSizeBytes)} / ${formatCacheBytes(save.cacheLimitBytes)} limit`]];return save.fileCount!==void 0&&rows.push(["file count",`~${save.fileCount.toLocaleString("en-US")} (approx., paths selected for packing)`]),rows}return"cacheLimitBytes"in save?`not saved (exceeded ${formatCacheBytes(save.cacheLimitBytes)} limit)`:save.reason==="failed"?"upload failed":NOT_SAVED_LABELS[save.reason]??"not saved"}function getBuildCacheJson(summary){if(!summary||typeof summary!="object")return;let{save}=summary;return save===void 0?void 0:{save}}function getKnownSave(summary){if(!summary||typeof summary!="object")return;let{version,save}=summary;if(!(version!==1||!save||typeof save!="object")){if(save.saved===!0)return isCount(save.compressedSizeBytes)&&isCount(save.cacheLimitBytes)&&(save.fileCount===void 0||isCount(save.fileCount))?save:void 0;if(!(save.saved!==!1||typeof save.reason!="string"))return save.reason==="size_exceeded"?isCount(save.cacheLimitBytes)?save:void 0:{saved:!1,reason:save.reason}}}function isCount(value){return typeof value=="number"&&Number.isSafeInteger(value)&&value>=0}var BINARY_UNITS=["B","KiB","MiB","GiB","TiB"];function formatCacheBytes(value){let unit=0,scaled=value;for(;scaled>=1024&&unit<BINARY_UNITS.length-1;)scaled/=1024,unit++;return`${Number(scaled.toFixed(2))} ${BINARY_UNITS[unit]}`}var import_chalk=__toESM(require_source(),1),import_bytes=__toESM(require_bytes(),1);var isReady=({readyState})=>readyState==="READY",isFailed=({readyState})=>readyState.endsWith("_ERROR")||readyState==="ERROR";var padding=8,MAX_BUILD_GROUPS=5,MAX_OUTPUTS_PER_GROUP=5,hasOutput=b=>Array.isArray(b.output)&&b.output.length>0,getCommonPath=buildGroup=>{let commonPath=[],splits=buildGroup.map(build=>getDirPath(build.entrypoint).split("/")),shortest=splits.reduce((prevValue,currentValue)=>Math.min(prevValue,currentValue.length),1/0);for(let i=0;i<=shortest;i++){let first=splits[0][i];if(splits.every(pathParts=>pathParts[i]===first)){commonPath.push(first);continue}break}return commonPath.join("/")||"/"},styleBuild=(build,times,longestSource)=>{let{entrypoint,id}=build,time=typeof times[id]=="string"?times[id]:"",pathColor=import_chalk.default.cyan;isFailed(build)&&(pathColor=import_chalk.default.red);let entry=entrypoint.padEnd(longestSource+padding),prefix=hasOutput(build)?"\u250C":"\u2576";return`${import_chalk.default.grey(prefix)} ${pathColor(entry)}${time}`},styleHiddenBuilds=(commonPath,buildGroup,times,longestSource,isHidden=!1)=>{let{id}=buildGroup[0],entry=commonPath.padEnd(longestSource+padding),time=typeof times[id]=="string"?times[id]:"",prefix=isHidden===!1&&buildGroup.some(hasOutput)?"\u250C":"\u2576",pathColor=import_chalk.default.cyan;return buildGroup.every(isFailed)&&(pathColor=import_chalk.default.red),isHidden&&(pathColor=import_chalk.default.grey),`${import_chalk.default.grey(prefix)} ${pathColor(entry)}${time}`},styleOutput=(output,readyState,isLast)=>{let{type,path,size,lambda}=output,prefix=type==="lambda"?"\u03BB ":"",finalSize=size?` ${import_chalk.default.grey(`(${(0,import_bytes.default)(size)})`)}`:"",color=import_chalk.default.grey,finalRegion="";if(isReady({readyState})?color=import_chalk.default:isFailed({readyState})&&(color=import_chalk.default.red),lambda){let{deployedTo}=lambda;deployedTo&&deployedTo.length>0&&(finalRegion=` ${import_chalk.default.grey(`[${deployedTo.join(", ")}]`)}`)}let corner=isLast?"\u2514\u2500\u2500":"\u251C\u2500\u2500",main=prefix+path+finalSize+finalRegion;return`${import_chalk.default.grey(corner)} ${color(main)}`},getDirPath=(path,level=0,highestLevel=null)=>{let parts=path.split("/").slice(0,-1);if(highestLevel===null||level===0)return parts.join("/");let reverseLevel=highestLevel-level;return parts.slice(0,reverseLevel).join("/")},sortByEntrypoint=(a,b)=>{let aPath=getDirPath(a.entrypoint),bPath=getDirPath(b.entrypoint);return aPath===""?1:bPath===""?-1:aPath>bPath?1:bPath>aPath?-1:0},groupBuilds=(buildList,highestLevel,counter)=>{let currentIndex=counter%buildList.length,__level=Math.ceil(counter/buildList.length),_level=(__level===0?1:__level)-1,level=_level>highestLevel?highestLevel:_level,currentPath=getDirPath(buildList[currentIndex][0].entrypoint,level,highestLevel),nextList=[],currentGroup=[];for(let i=0;i<buildList.length;i++){let group=buildList[i];getDirPath(group[0].entrypoint,level,highestLevel)===currentPath?currentGroup.push(...group):nextList.push(group)}return currentIndex===0?nextList.unshift(currentGroup):nextList.splice(currentIndex,0,currentGroup),nextList},builds_default=(builds,times)=>{let path=builds.sort(sortByEntrypoint).map(build=>[build]),highestLevel=builds.reduce((prev,curr)=>{let partCounter=curr.entrypoint.split("/").length-1;return partCounter>prev?partCounter:prev},0),counter=0;for(;path.length>MAX_BUILD_GROUPS;)path=groupBuilds(path,highestLevel,counter),counter++;path=path.reverse();let longestSource=builds.reduce((final2,current)=>{let{length}=current.entrypoint;return length>final2?length:final2},0),final=[],finalBuildsLength=path.length,lengthWithoutRootPaths=path.length,hiddenBuildGroup=[];path=(()=>{let nextList=[],rootList=[];for(let group of path)getCommonPath(group)==="/"?group.map(item=>rootList.push([item])):nextList.push(group);return lengthWithoutRootPaths=nextList.length,rootList.map(group=>nextList.push(group)),nextList})();for(let buildGroup of path){let commonPath=getCommonPath(buildGroup);if(commonPath==="/")if(lengthWithoutRootPaths<=MAX_BUILD_GROUPS&&finalBuildsLength<=MAX_BUILD_GROUPS){let item=buildGroup[0];final.push(`${styleBuild(item,times,longestSource)}
8
8
  `),finalBuildsLength++}else{hiddenBuildGroup.push(buildGroup[0]);continue}else if(buildGroup.length===1){let item=buildGroup[0];final.push(`${styleBuild(item,times,longestSource)}
9
9
  `),finalBuildsLength++}else final.push(`${styleHiddenBuilds(`${commonPath}/*`,buildGroup,times,longestSource)}
10
10
  `),finalBuildsLength++;let outputs=[];for(let build of buildGroup)Array.isArray(build.output)&&outputs.push(...build.output);outputs.slice(0,MAX_OUTPUTS_PER_GROUP).forEach((output,index)=>final.push(`${styleOutput(output,"READY",outputs.length===index+1)}
@@ -61,18 +61,21 @@ import{collectBuildLogs,displayBuildLogs}from"./chunks/chunk-EKB2DYCQ.js";import
61
61
 
62
62
  `))}async function printJson({deployment,contextName,client,prefetchedBuilds}){let{id,name,url,createdAt,routes:routes2,readyState,readyStateReason,alias:aliases,target,customEnvironment,buildCacheSummary}=deployment,builds=deployment.version===2?await(prefetchedBuilds??fetchBuilds(client,id)):[],buildMachine=getBuildMachineResourceConfig(deployment),buildCacheJson=getBuildCacheJson(buildCacheSummary),jsonOutput={id,name,url,target:customEnvironment?.slug??target??"preview",readyState,...readyStateReason&&{readyStateReason},createdAt,...deployment.duration&&{duration:deployment.duration},...buildMachine&&{buildMachine},...buildCacheJson&&{buildCacheSummary:buildCacheJson},...aliases&&aliases.length>0&&{aliases},...builds.length>0&&{builds},...Array.isArray(routes2)&&routes2.length>0&&{routes:routes2},...contextName&&{contextName}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
63
63
  `)}async function fetchBuilds(client,deploymentId){let{builds}=await client.fetch(`/v11/deployments/${deploymentId}/builds`);return builds}function getPostBuildDuration(duration){if(duration?.timeToReady===void 0||duration.timeToContainerExit===void 0)return;let postBuildDuration=duration.timeToContainerExit-duration.timeToReady;return postBuildDuration>=0?postBuildDuration:void 0}function formatDuration(durationMs){if(durationMs===void 0)return"unavailable";if(durationMs<1e3)return`${durationMs}ms`;let totalSeconds=Math.round(durationMs/1e3),minutes=Math.floor(totalSeconds/60),seconds=totalSeconds%60;return minutes===0?`${seconds}s`:seconds===0?`${minutes}m`:`${minutes}m ${seconds}s`}function formatCpuMinutes(billedBuildCpuMs,billableDurationMs,assignedCpuCores){if(billedBuildCpuMs===void 0)return"unavailable";let minutes=billedBuildCpuMs/6e4,calculation=billableDurationMs!==void 0&&assignedCpuCores!==void 0?` (${formatDuration(billableDurationMs)} x ${assignedCpuCores}vCPU)`:"";return`${minutes} minutes${calculation}`}function printLogsJson(client,logs2){client.stdout.write(`${JSON.stringify(logs2,null,2)}
64
- `)}function exitCode(state){return state==="ERROR"||state==="CANCELED"?1:0}var import_chalk4=__toESM(require_source(),1),import_error_utils2=__toESM(require_dist(),1);function writeWithBackpressure(stream,text){return new Promise((resolve,reject)=>{let cleanup=()=>{stream.removeListener("drain",onDrain),stream.removeListener("error",onError),stream.removeListener("close",onClose)},onDrain=()=>{cleanup(),resolve()},onError=err=>{cleanup(),reject(err)},onClose=()=>{cleanup(),reject(new Error("Output stream closed."))};if(stream.destroyed){onClose();return}stream.once("drain",onDrain),stream.once("error",onError),stream.once("close",onClose);try{stream.write(text)&&onDrain()}catch(err){onError(err instanceof Error?err:new Error(String(err)))}})}var LogsTelemetryClient=class extends TelemetryClient{trackCliSubcommandRuntime(actual){this.trackCliSubcommand({subcommand:"runtime",value:actual})}trackCliSubcommandRequests(actual){this.trackCliSubcommand({subcommand:"requests",value:actual})}trackCliLegacyOption(name){this.trackCliOption({option:name,value:"removed"})}trackCliArgumentPositional(kind){this.trackCliArgument({arg:"positional",value:kind})}trackCliOptionDeployment(v){v&&this.trackCliOption({option:"deployment",value:this.redactedValue})}trackCliOptionEnvironment(v){if(v){let value=["production","preview"].includes(v)?v:this.redactedValue;this.trackCliOption({option:"environment",value})}}trackCliOptionQuery(v){v!==void 0&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionNext(v){v!==void 0&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(v){if(v){let value=v.toLowerCase()==="json"?"json":this.redactedValue;this.trackCliOption({option:"format",value})}}trackCliFlagJson(v){v&&this.trackCliFlag("json")}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliFlagFollow(v){v&&this.trackCliFlag("follow")}};var issuesSchema=external_exports.array(external_exports.object({path:external_exports.string(),message:external_exports.string()})),REQUESTS_ACCESS_MESSAGE="CDN request logs require Observability Plus, a Priority project, or the Enterprise Agents & Apps entitlement.";function describeLogsApiError(client,err,source){if(!isAPIError(err))return;let serverMessage=sanitize(err.serverMessage||err.message),base={status:"error",...getErrorRecovery(err,client),data:{httpStatus:err.status,serverMessage,...typeof err.code=="string"?{code:err.code}:{}}};if(err.status===402)return{human:source==="requests"?`${REQUESTS_ACCESS_MESSAGE}
64
+ `)}function exitCode(state){return state==="ERROR"||state==="CANCELED"?1:0}var import_chalk5=__toESM(require_source(),1),import_error_utils2=__toESM(require_dist(),1);function writeWithBackpressure(stream,text2){return new Promise((resolve,reject)=>{let cleanup=()=>{stream.removeListener("drain",onDrain),stream.removeListener("error",onError),stream.removeListener("close",onClose)},onDrain=()=>{cleanup(),resolve()},onError=err=>{cleanup(),reject(err)},onClose=()=>{cleanup(),reject(new Error("Output stream closed."))};if(stream.destroyed){onClose();return}stream.once("drain",onDrain),stream.once("error",onError),stream.once("close",onClose);try{stream.write(text2)&&onDrain()}catch(err){onError(err instanceof Error?err:new Error(String(err)))}})}var LogsTelemetryClient=class extends TelemetryClient{trackCliSubcommandRuntime(actual){this.trackCliSubcommand({subcommand:"runtime",value:actual})}trackCliSubcommandRequests(actual){this.trackCliSubcommand({subcommand:"requests",value:actual})}trackCliLegacyOption(name){this.trackCliOption({option:name,value:"removed"})}trackCliArgumentPositional(kind){this.trackCliArgument({arg:"positional",value:kind})}trackCliOptionDeployment(v){v&&this.trackCliOption({option:"deployment",value:this.redactedValue})}trackCliOptionEnvironment(v){if(v){let value=["production","preview"].includes(v)?v:this.redactedValue;this.trackCliOption({option:"environment",value})}}trackCliOptionQuery(v){v!==void 0&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionNext(v){v!==void 0&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(v){if(v){let value=v.toLowerCase()==="json"?"json":this.redactedValue;this.trackCliOption({option:"format",value})}}trackCliFlagJson(v){v&&this.trackCliFlag("json")}trackCliOptionLimit(v){typeof v=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionSince(v){v&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(v){v&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliFlagFollow(v){v&&this.trackCliFlag("follow")}};var import_chalk4=__toESM(require_source(),1),import_format=__toESM(require_format(),1),import_strip_ansi=__toESM(require_strip_ansi(),1),TIME_ONLY_FORMAT="HH:mm:ss.SSS",DATE_TIME_FORMAT="MMM DD HH:mm:ss.SSS",LEVEL_WIDTH=7,PRODUCER_WIDTH=16,STATUS_WIDTH=6,METHOD_WIDTH=7,CACHE_WIDTH=9,REQUEST_ID_WIDTH=32,CONTROL_CHARACTERS=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;function sanitize(value){return(0,import_strip_ansi.default)(value.replace(/\r\n?/g,`
65
+ `)).replace(CONTROL_CHARACTERS,"")}function text(event,field){let value=event[field];return value==null?"":sanitize(typeof value=="string"?value:String(value))}function cell(value,width){return(value||"-").padEnd(width)}function timeFormatFor(range){return range.start.toDateString()===new Date(range.end.getTime()-1).toDateString()&&range.end.toDateString()===new Date().toDateString()?TIME_ONLY_FORMAT:DATE_TIME_FORMAT}function formatTime(event,timeFormat){let value=event.timestamp,date=typeof value=="string"||typeof value=="number"?new Date(value):void 0;return!date||isNaN(date.getTime())?text(event,"timestamp")||"-":(0,import_format.default)(date,timeFormat)}function colorizeLevel(value,level){switch(level){case"fatal":return import_chalk4.default.red.bold(value);case"error":return import_chalk4.default.red(value);case"warning":return import_chalk4.default.yellow(value);default:return import_chalk4.default.dim(value)}}function colorizeStatus(value,status){return status>=500?import_chalk4.default.red(value):status>=400?import_chalk4.default.yellow(value):status>=300?import_chalk4.default.cyan(value):status>=200?import_chalk4.default.green(value):import_chalk4.default.gray(value)}function runtimeRenderer(timeFormat,timeWidth){let messageIndent=" ".repeat(timeWidth+LEVEL_WIDTH+PRODUCER_WIDTH+6);return{header:()=>import_chalk4.default.dim(["TIME".padEnd(timeWidth),"LEVEL".padEnd(LEVEL_WIDTH),"SERVICE/SOURCE".padEnd(PRODUCER_WIDTH),"MESSAGE"].join(" ")),row:event=>{let level=text(event,"level"),producer=text(event,"service")||text(event,"source"),message=text(event,"message").replace(/\n+$/,""),[first="",...rest]=message.split(`
66
+ `),truncated=event.truncated===!0,lines=[[import_chalk4.default.dim(formatTime(event,timeFormat).padEnd(timeWidth)),colorizeLevel(cell(level,LEVEL_WIDTH),level),cell(producer,PRODUCER_WIDTH),first||(rest.length===0?import_chalk4.default.dim("(no message)"):"")].join(" "),...rest.map(line=>`${messageIndent}${line}`)];return truncated&&lines.push(`${messageIndent}${import_chalk4.default.yellow("[message truncated]")}`),lines.join(`
67
+ `)}}}function requestsRenderer(timeFormat,timeWidth){return{header:()=>import_chalk4.default.dim(["TIME".padEnd(timeWidth),"STATUS".padEnd(STATUS_WIDTH),"METHOD".padEnd(METHOD_WIDTH),"CACHE".padEnd(CACHE_WIDTH),"REQUEST ID".padEnd(REQUEST_ID_WIDTH),"HOST AND PATH"].join(" ")),row:event=>{let status=event.httpStatus,statusCell=(typeof status=="number"&&status>0?String(status):"-").padEnd(STATUS_WIDTH);return[import_chalk4.default.dim(formatTime(event,timeFormat).padEnd(timeWidth)),typeof status=="number"?colorizeStatus(statusCell,status):statusCell,cell(text(event,"requestMethod"),METHOD_WIDTH),cell(text(event,"cacheResult"),CACHE_WIDTH),cell(text(event,"requestId"),REQUEST_ID_WIDTH),`${text(event,"requestHostname")}${text(event,"requestPath")}`||"-"].join(" ")}}}function createRenderer(source,range){let timeFormat=timeFormatFor(range),timeWidth=(0,import_format.default)(new Date(0),timeFormat).length;return source==="runtime"?runtimeRenderer(timeFormat,timeWidth):requestsRenderer(timeFormat,timeWidth)}function formatWindow(range){let sameDay=range.start.toDateString()===range.end.toDateString(),start=(0,import_format.default)(range.start,"YYYY-MM-DD HH:mm:ss"),end=(0,import_format.default)(range.end,sameDay?"HH:mm:ss":"YYYY-MM-DD HH:mm:ss"),zone=(0,import_format.default)(range.end,"Z");return`${start} to ${end} (UTC${zone})`}var issuesSchema=external_exports.array(external_exports.object({path:external_exports.string(),message:external_exports.string()})),REQUESTS_ACCESS_MESSAGE="CDN request logs require Observability Plus, a Priority project, or the Enterprise Agents & Apps entitlement.";function describeLogsApiError(client,err,source){if(!isAPIError(err))return;let serverMessage=sanitize(err.serverMessage||err.message),base={status:"error",...getErrorRecovery(err,client),data:{httpStatus:err.status,serverMessage,...typeof err.code=="string"?{code:err.code}:{}}};if(err.status===402)return{human:source==="requests"?`${REQUESTS_ACCESS_MESSAGE}
65
68
  ${serverMessage}`:serverMessage,json:{...base,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message:source==="requests"?REQUESTS_ACCESS_MESSAGE:"The selected team can't query runtime logs for this window."},exitCode:1};let issues=issuesSchema.safeParse(err.issues);if(err.status===400&&issues.success&&issues.data.length>0){let messages=issues.data.map(issue=>sanitize(issue.message)),timeIssue=issues.data.some(issue=>issue.path.startsWith("timeRange")),hint=timeIssue?"Adjust --since or --until.":`See ${getCommandNamePlain(`logs ${source} --help`)} for supported filter forms.`,humanHint=timeIssue?hint:`See ${getCommandName(`logs ${source} --help`)} for supported filter forms.`;return{human:`${source}: ${messages.join("; ")}
66
69
  ${humanHint}`,json:{...base,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`The ${source} query was rejected.`,hint,data:{...base.data,issues:issues.data.map(issue=>({field:issue.path,reason:"invalid",message:sanitize(issue.message)}))}},exitCode:2}}if(err.status===400&&/time range|retain/i.test(serverMessage)){let hint=`Use a later --since, or omit it to search the last ${DEFAULT_WINDOW}.`;return{human:`${serverMessage}
67
70
  ${hint}`,json:{...base,reason:AGENT_REASON.INVALID_ARGUMENTS,message:"The requested time range is outside the available retention.",hint},exitCode:2}}return err.status===403?{human:serverMessage,json:{...base,reason:AGENT_REASON.PERMISSION_DENIED,message:`You don't have access to ${source} logs for this project.`},exitCode:1}:err.status===400?{human:serverMessage,json:{...base,reason:AGENT_REASON.API_ERROR,message:`The API rejected the ${source} query.`},exitCode:1}:err.status===429?{human:serverMessage,json:{...base,reason:AGENT_REASON.RATE_LIMITED,message:`Couldn't retrieve ${source} logs: the request limit was reached.`},exitCode:1}:{human:serverMessage,json:{...base,reason:AGENT_REASON.API_ERROR,message:`Couldn't retrieve ${source} logs.`},exitCode:1}}function printLogsApiError(client,err,source){let failure=describeLogsApiError(client,err,source);if(!failure){printError(err);return}let status=isAPIError(err)?err.status:void 0;if(failure.json.reason===AGENT_REASON.API_ERROR&&status!==400||failure.json.reason===AGENT_REASON.RATE_LIMITED){printError(err);return}output_manager_default.error(failure.human)}var legacyLogsOptions=[{name:"search",shorthand:null,type:String,deprecated:!0},{name:"branch",shorthand:"b",type:String,deprecated:!0},{name:"no-branch",shorthand:null,type:Boolean,deprecated:!0},{name:"no-follow",shorthand:null,type:Boolean,deprecated:!0},{name:"request-id",shorthand:null,type:String,deprecated:!0},{name:"level",shorthand:null,type:[String],deprecated:!0},{name:"source",shorthand:null,type:[String],deprecated:!0},{name:"status-code",shorthand:null,type:String,deprecated:!0},{name:"expand",shorthand:"x",type:Boolean,deprecated:!0}],SIMPLE_VALUE=/^[\w.\-:/]+$/;function filterCommand(filter,source){return getCommandName(`logs${source?` ${source}`:""} --query '${filter}'`)}function alternatives(field,values){return values.length===1?`${field}:${values[0]}`:`${field}:(${values.join(" OR ")})`}function statusFilter(value){let statusClass=/^([1-5])xx$/i.exec(value);if(statusClass){let base=Number(statusClass[1])*100;return`httpStatus >= ${base} AND httpStatus < ${base+100}`}return/^\d{3}$/.test(value)?`httpStatus:${value}`:"httpStatus:500"}function sourceReplacement(values){let normalized=values.map(value=>value.trim().toLowerCase());return normalized.length>0&&normalized.every(v=>v==="static")?`--source was removed. Static and CDN traffic is in ${getCommandName("logs requests")}.`:normalized.length>0&&normalized.every(v=>v==="serverless")?`--source was removed. Use ${filterCommand("source:function")}.`:`--source was removed. Use ${filterCommand("source:<value>")}.
68
71
  See ${getCommandName("logs runtime --help")} for filter fields and examples.`}function usedLegacyOptions(flags){return legacyLogsOptions.map(option=>option.name).filter(name=>flags[`--${name}`]!==void 0)}function getLegacyOptionError(flags){if(flags["--search"]!==void 0)return`--search was replaced by --query, which uses a new KQL-inspired syntax.
69
- See ${getCommandName("logs runtime --help")} or ${getCommandName("logs requests --help")} for filter fields and examples.`;if(flags["--branch"]!==void 0)return"--branch is no longer supported. Remove it from the command.";let requestId=flags["--request-id"];if(requestId!==void 0){let value=SIMPLE_VALUE.test(requestId)?requestId:"<request-id>";return`--request-id was removed. Use ${filterCommand(`requestId:"${value}"`)}.`}let levels=flags["--level"];if(levels!==void 0){let values=levels.every(level=>SIMPLE_VALUE.test(level))?levels:["error"];return`--level was removed. Use ${filterCommand(alternatives("level",values))}.`}let sources=flags["--source"];if(sources!==void 0)return sourceReplacement(sources);let statusCode=flags["--status-code"];if(statusCode!==void 0)return`--status-code was removed. Use ${filterCommand(statusFilter(statusCode.trim()),"requests")}.`;if(flags["--expand"]!==void 0)return"--expand was removed. Full runtime messages are shown by default; remove the option.";for(let flag of["--no-branch","--no-follow"])if(flags[flag]!==void 0)return`${flag} was removed and has no effect. Remove it from the command.`}var import_build_utils=__toESM(require_build_utils(),1);var NOT_LINKED_MESSAGE=`Your codebase isn't linked to a project on Vercel. Run ${getCommandName("link")}, or select a team and project with --scope <team> --project <name>.`;function fail(reason,error,exitCode2=1){return{error,exitCode:exitCode2,reason}}async function readLink(client,project){let orgId=(0,import_build_utils.getPlatformEnv)("ORG_ID"),projectId=(0,import_build_utils.getPlatformEnv)("PROJECT_ID");if(orgId&&projectId)return{link:{orgId,projectId}};if(orgId||projectId){let present=orgId?"`VERCEL_ORG_ID`":"`VERCEL_PROJECT_ID`",missing=orgId?"`VERCEL_PROJECT_ID`":"`VERCEL_ORG_ID`";return fail(AGENT_REASON.INVALID_CONFIGURATION,`You specified ${present} but you forgot to specify ${missing}. You need to specify both to select a custom project.`)}let path=await resolveProjectCwd(client.cwd);if(project){let selected=await getProjectLink(client,path,project,!0);if(selected)return{link:{orgId:selected.orgId,projectId:selected.projectId}}}let link=await getProjectLink(client,path);return{link:link?{orgId:link.orgId,projectId:link.projectId}:null}}async function teamLabel(client,teamId){try{return(await getTeamByIdOrSlug(client,teamId,{useCurrentTeam:!1})).slug||teamId}catch(err){return output_manager_default.debug(`Could not fetch team ${teamId}: ${err}`),teamId}}function isTeamId(ownerId){return ownerId.startsWith("team_")}var PERSONAL_ACCOUNT_MESSAGE="Logs are available for team-owned projects only. Select a team with --scope <team>.";async function resolveLogsTarget(client,{project:projectOption,deployment:deploymentOption,deploymentFromArgument=!1,quiet=!1}){let spinner=message=>{quiet||output_manager_default.spinner(message,1e3)},explicitScope=detectExplicitScope(client),explicitTeamId=explicitScope?client.config.currentTeam:void 0;if(explicitScope&&!explicitTeamId)return fail(AGENT_REASON.MISSING_SCOPE,PERSONAL_ACCOUNT_MESSAGE);let replacesLinkedProject=!!(projectOption||deploymentOption),link=null;if(!(explicitTeamId&&replacesLinkedProject)){let linkResult=await readLink(client,projectOption);if("error"in linkResult)return linkResult;link=linkResult.link}let teamId=explicitTeamId??link?.orgId;if(!teamId)return fail(AGENT_REASON.NOT_LINKED,NOT_LINKED_MESSAGE);if(!isTeamId(teamId))return fail(AGENT_REASON.MISSING_SCOPE,PERSONAL_ACCOUNT_MESSAGE);if(!replacesLinkedProject){if(!link)return fail(AGENT_REASON.NOT_LINKED,NOT_LINKED_MESSAGE);if(link.orgId!==teamId){let[requested,linked]=await Promise.all([teamLabel(client,teamId),teamLabel(client,link.orgId)]);return fail(AGENT_REASON.TARGET_CONFLICT,`This directory is linked to a project in team ${linked}, but ${requested} was selected.
72
+ See ${getCommandName("logs runtime --help")} or ${getCommandName("logs requests --help")} for filter fields and examples.`;if(flags["--branch"]!==void 0)return"--branch is no longer supported. Remove it from the command.";let requestId=flags["--request-id"];if(requestId!==void 0){let value=SIMPLE_VALUE.test(requestId)?requestId:"<request-id>";return`--request-id was removed. Use ${filterCommand(`requestId:"${value}"`)}.`}let levels=flags["--level"];if(levels!==void 0){let values=levels.every(level=>SIMPLE_VALUE.test(level))?levels:["error"];return`--level was removed. Use ${filterCommand(alternatives("level",values))}.`}let sources=flags["--source"];if(sources!==void 0)return sourceReplacement(sources);let statusCode=flags["--status-code"];if(statusCode!==void 0)return`--status-code was removed. Use ${filterCommand(statusFilter(statusCode.trim()),"requests")}.`;if(flags["--expand"]!==void 0)return"--expand was removed. Full runtime messages are shown by default; remove the option.";for(let flag of["--no-branch","--no-follow"])if(flags[flag]!==void 0)return`${flag} was removed and has no effect. Remove it from the command.`}function quoteFilterValue(value){return JSON.stringify(value)}function composeFilter({source,deploymentId,environment,filter}){let clauses=[];if(deploymentId&&clauses.push(`deploymentId:${quoteFilterValue(deploymentId)}`),environment&&clauses.push(`environment:${quoteFilterValue(environment)}`),clauses.push(...source.fixedFilters),filter&&clauses.push(filter),clauses.length!==0)return clauses.map(clause=>`(${clause})`).join(" AND ")}function fetchEventPages2(client,query,limit,startCursor){return fetchEventPages(client,{event:query.source.event,ownerId:query.teamId,projectIds:[query.projectId],timeRange:{start:query.timeRange.start.toISOString(),end:query.timeRange.end.toISOString()},filter:query.filter,select:query.source.select,queryReason:query.source.queryReason},limit,startCursor)}var import_build_utils=__toESM(require_build_utils(),1);var NOT_LINKED_MESSAGE=`Your codebase isn't linked to a project on Vercel. Run ${getCommandName("link")}, or select a team and project with --scope <team> --project <name>.`;function fail(reason,error,exitCode2=1){return{error,exitCode:exitCode2,reason}}async function readLink(client,project){let orgId=(0,import_build_utils.getPlatformEnv)("ORG_ID"),projectId=(0,import_build_utils.getPlatformEnv)("PROJECT_ID");if(orgId&&projectId)return{link:{orgId,projectId}};if(orgId||projectId){let present=orgId?"`VERCEL_ORG_ID`":"`VERCEL_PROJECT_ID`",missing=orgId?"`VERCEL_PROJECT_ID`":"`VERCEL_ORG_ID`";return fail(AGENT_REASON.INVALID_CONFIGURATION,`You specified ${present} but you forgot to specify ${missing}. You need to specify both to select a custom project.`)}let path=await resolveProjectCwd(client.cwd);if(project){let selected=await getProjectLink(client,path,project,!0);if(selected)return{link:{orgId:selected.orgId,projectId:selected.projectId}}}let link=await getProjectLink(client,path);return{link:link?{orgId:link.orgId,projectId:link.projectId}:null}}async function teamLabel(client,teamId){try{return(await getTeamByIdOrSlug(client,teamId,{useCurrentTeam:!1})).slug||teamId}catch(err){return output_manager_default.debug(`Could not fetch team ${teamId}: ${err}`),teamId}}function isTeamId(ownerId){return ownerId.startsWith("team_")}var PERSONAL_ACCOUNT_MESSAGE="Logs are available for team-owned projects only. Select a team with --scope <team>.";async function resolveLogsTarget(client,{project:projectOption,deployment:deploymentOption,deploymentFromArgument=!1,quiet=!1}){let spinner=message=>{quiet||output_manager_default.spinner(message,1e3)},explicitScope=detectExplicitScope(client),explicitTeamId=explicitScope?client.config.currentTeam:void 0;if(explicitScope&&!explicitTeamId)return fail(AGENT_REASON.MISSING_SCOPE,PERSONAL_ACCOUNT_MESSAGE);let replacesLinkedProject=!!(projectOption||deploymentOption),link=null;if(!(explicitTeamId&&replacesLinkedProject)){let linkResult=await readLink(client,projectOption);if("error"in linkResult)return linkResult;link=linkResult.link}let teamId=explicitTeamId??link?.orgId;if(!teamId)return fail(AGENT_REASON.NOT_LINKED,NOT_LINKED_MESSAGE);if(!isTeamId(teamId))return fail(AGENT_REASON.MISSING_SCOPE,PERSONAL_ACCOUNT_MESSAGE);if(!replacesLinkedProject){if(!link)return fail(AGENT_REASON.NOT_LINKED,NOT_LINKED_MESSAGE);if(link.orgId!==teamId){let[requested,linked]=await Promise.all([teamLabel(client,teamId),teamLabel(client,link.orgId)]);return fail(AGENT_REASON.TARGET_CONFLICT,`This directory is linked to a project in team ${linked}, but ${requested} was selected.
70
73
  Select a project in ${requested} with --project <name>, select the linked team with --scope ${linked}, or run ${getCommandName("link")} to relink.`)}}client.config.currentTeam=teamId;let labelPromise=teamLabel(client,teamId),deploymentId,deploymentProjectId;if(deploymentOption){let label2=await labelPromise;spinner(`Resolving deployment "${deploymentOption}"`);try{let deployment=await getDeployment(client,label2,deploymentOption);deploymentId=deployment.id,deploymentProjectId=deployment.projectId}catch(err){if(err instanceof DeploymentNotFound||err instanceof DeploymentPermissionDenied)return fail(AGENT_REASON.NOT_FOUND,`Deployment not found: ${deploymentOption} under ${label2}`);if(err instanceof InvalidDeploymentId)return fail(AGENT_REASON.NOT_FOUND,`Invalid deployment ID or URL: ${deploymentOption}`);throw err}finally{output_manager_default.stopSpinner()}if(!deploymentProjectId)return fail(AGENT_REASON.NOT_FOUND,`Deployment ${deploymentOption} is not associated with a project.`)}let projectIdOrName=projectOption??deploymentProjectId??link?.projectId;if(!projectIdOrName)return fail(AGENT_REASON.NOT_LINKED,NOT_LINKED_MESSAGE);spinner("Retrieving project\u2026");let project;try{project=await getProjectByNameOrId(client,projectIdOrName,teamId)}finally{output_manager_default.stopSpinner()}let label=await labelPromise;if(project instanceof ProjectNotFound)return!projectOption&&!deploymentProjectId?fail(AGENT_REASON.PROJECT_NOT_FOUND,`The linked project ${projectIdOrName} was not found under ${label}. Run ${getCommandName("link")} to relink, or select a project with --project <name>.`):fail(AGENT_REASON.PROJECT_NOT_FOUND,`Project not found: ${projectIdOrName} under ${label}`);if(deploymentProjectId&&project.id!==deploymentProjectId){let deploymentInput=deploymentFromArgument?"the deployment argument":"--deployment";return fail(AGENT_REASON.TARGET_CONFLICT,`Deployment ${deploymentOption} does not belong to project ${project.name}. Remove ${deploymentInput} or --project.`)}return{target:{teamId,teamLabel:label,projectId:project.id,projectName:project.name,deploymentId}}}var import_ms2=__toESM(require_ms(),1);function parseBound(flag,value,now){try{return parseTimeFlag(value,now)}catch{return`Invalid time format "${value}" for ${flag}. Use a relative duration (1h, 30m, 2d), an ISO 8601 datetime, or now.`}}function resolveLogsTimeRange({since,until,now,wholeSeconds}){let end=until!==void 0?parseBound("--until",until,now):new Date(now);if(typeof end=="string")return{error:end};let start=since!==void 0?parseBound("--since",since,now):new Date(end.getTime()-(0,import_ms2.default)(DEFAULT_WINDOW));if(typeof start=="string")return{error:start};let range=wholeSeconds?{start:floorToSecond(start),end:floorToSecond(end)}:{start,end};return range.start.getTime()>=range.end.getTime()?{error:[`The time range is empty: the start (${range.start.toISOString()}) must be before the end (${range.end.toISOString()}).`,"Use --since to set an earlier start."].join(`
71
74
  `)}:{range}}function floorToSecond(date){return new Date(Math.floor(date.getTime()/1e3)*1e3)}var COMMAND_CONFIG={runtime:getCommandAliases(runtimeSubcommand),requests:getCommandAliases(requestsSubcommand)},SUBCOMMAND_METADATA={runtime:runtimeSubcommand,requests:requestsSubcommand},SOURCE_TITLES={runtime:"Runtime logs",requests:"CDN requests"},CONTINUATION_CONFLICTS=["--project","--deployment","--environment","--query","--since","--until"];function looksLikeDeployment(value){return value.startsWith("dpl_")||value.includes(".")||/^https?:\/\//i.test(value)}function deploymentHost(value){try{return new URL(value).hostname}catch{return value}}function argvRequestsJson(argv){let args=argv.slice(2);for(let[index,arg]of args.entries()){if(arg==="--")break;if(arg==="--json")return!0;if(arg.startsWith("--json=")){if(arg.slice(7).toLowerCase()!=="false")return!0;continue}if(arg.toLowerCase()==="--format=json"||arg.startsWith("-F=")&&arg.slice(3).toLowerCase()==="json"||(arg==="--format"||arg==="-F")&&args[index+1]?.toLowerCase()==="json")return!0}return!1}function isRemovedJsonShorthandError(err){return isArgumentError(err)&&err.invalidOption==="-j"}function argvHasScopeFlag(argv){for(let arg of argv.slice(2)){if(arg==="--")break;if(arg==="--scope"||arg==="--team"||arg==="-S"||arg==="-T"||arg.startsWith("--scope=")||arg.startsWith("--team="))return!0}return!1}function deploymentFlag(value){return`--deployment ${quoteArg(deploymentHost(value))}`}function positionalError(value,explicitSource){let sourcePart=explicitSource?` ${explicitSource}`:"";return looksLikeDeployment(value)?`Select a deployment with --deployment: ${getCommandName(`logs${sourcePart} ${deploymentFlag(value)}`)}`:explicitSource?`Unexpected argument "${value}". ${getCommandName(`logs ${explicitSource}`)} takes no arguments.`:`Unknown data source "${value}". Use runtime or requests. See ${getCommandName("logs --help")}.`}function isClosedOutputError(err){return err instanceof Error&&(err.code==="EPIPE"||err.message==="Output stream closed.")}function streamGapMessage(interval){return`Results omit ${sanitize(interval.start)} to ${sanitize(interval.end)}: data for this period is unavailable to this query.`}async function logs(client){let commandStart=Date.now(),telemetry=new LogsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),getFlagsSpecification([...logsCommand.options,...legacyLogsOptions]))}catch(err){let removedShorthand=isRemovedJsonShorthandError(err);removedShorthand&&telemetry.trackCliLegacyOption("j");let message=removedShorthand?"-j was removed. Use --json.":err instanceof Error?err.message:String(err);return client.nonInteractive||argvRequestsJson(client.argv)?writeJsonError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:"vercel logs --help"}]}):removedShorthand?(output_manager_default.error(message),2):(printError(err),output_manager_default.print(`Run ${getCommandName("logs --help")} for usage.
72
- `),2)}parsedArguments.args[0]==="log"&&warnDeprecatedSubcommand(client,"log","logs");let{flags}=parsedArguments,formatResult=validateJsonOutput(flags),json=!!flags["--json"]||formatResult.valid&&formatResult.jsonOutput||argvRequestsJson(client.argv)||client.nonInteractive,{subcommand,subcommandOriginal,args}=getSubcommand(parsedArguments.args.slice(1),COMMAND_CONFIG),explicitSource=subcommand==="runtime"||subcommand==="requests"?subcommand:void 0;if(flags["--help"])return telemetry.trackCliFlagHelp("logs",explicitSource&&subcommandOriginal),output_manager_default.print(help(explicitSource?SUBCOMMAND_METADATA[explicitSource]:logsCommand,{stream:client.stderr,parent:explicitSource?logsCommand:void 0,columns:client.stderr.columns})),0;let nextOption=flags["--next"],trimmedNext=nextOption?.trim(),continuation=trimmedNext?decodeContinuation(trimmedNext):void 0,continuationSource=continuation?sourceForEvent(continuation.event):void 0,sourceName=explicitSource??continuationSource?.name??"runtime";sourceName==="requests"?telemetry.trackCliSubcommandRequests(subcommandOriginal):telemetry.trackCliSubcommandRuntime(subcommandOriginal);let projectOption=flags["--project"],deploymentOption=flags["--deployment"],environmentOption=flags["--environment"],queryOption=flags["--query"],sinceOption=flags["--since"],untilOption=flags["--until"],limitOption=flags["--limit"];telemetry.trackCliOptionProject(projectOption),telemetry.trackCliOptionDeployment(deploymentOption),telemetry.trackCliOptionEnvironment(environmentOption),telemetry.trackCliOptionQuery(queryOption),telemetry.trackCliOptionSince(sinceOption),telemetry.trackCliOptionUntil(untilOption),telemetry.trackCliOptionLimit(limitOption),telemetry.trackCliOptionNext(nextOption),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliFlagFollow(flags["--follow"]);let fail2=(reason,message,exitCode2,extra={})=>(output_manager_default.stopSpinner(),json?writeJsonError(client,{status:"error",reason,message,...extra},exitCode2):(output_manager_default.error(message),exitCode2??(reason===AGENT_REASON.INVALID_ARGUMENTS?2:1))),usageError=message=>fail2(AGENT_REASON.INVALID_ARGUMENTS,message,2),failUnexpected=err=>{if(output_manager_default.stopSpinner(),!json)return printError(err),1;let failure=describeLogsApiError(client,err,sourceName);return failure?writeJsonError(client,failure.json,failure.exitCode):writeJsonError(client,{status:"error",reason:AGENT_REASON.API_ERROR,message:(0,import_error_utils2.errorToString)(err)})};if(!formatResult.valid)return usageError(formatResult.error);let legacyOptions=usedLegacyOptions(flags);for(let name of legacyOptions)telemetry.trackCliLegacyOption(name);let legacyError=getLegacyOptionError(flags);if(legacyError)return usageError(legacyError);let positionalDeployment;if(args.length>0){if(telemetry.trackCliArgumentPositional(looksLikeDeployment(args[0])?"deployment":"unknown"),args.length>1||!looksLikeDeployment(args[0]))return usageError(positionalError(args[0],explicitSource));if(deploymentOption!==void 0)return usageError("Pass the deployment once, with --deployment. Remove the deployment argument.");if(nextOption!==void 0)return usageError("A deployment argument can't be combined with --next. The cursor keeps the original target, filter, and time window.");positionalDeployment=args[0]}let upfrontWarnings=[],warn=(reason,message,data)=>{json?upfrontWarnings.push(warningLine({reason,message,data})):output_manager_default.warning(message)};flags["--follow"]&&warn("deprecated","--follow is deprecated and no longer streams logs. Showing a bounded result; remove --follow."),positionalDeployment!==void 0&&warn("deprecated",`Passing a deployment as an argument is deprecated. Use ${deploymentFlag(positionalDeployment)}.`);let limit;if(typeof limitOption=="number"&&Number.isInteger(limitOption)&&limitOption>MAX_LIMIT)limit=MAX_LIMIT,warn("limit_clamped",`--limit ${limitOption} is above the maximum of ${MAX_LIMIT}. Using ${MAX_LIMIT}.`,{requested:limitOption,limit:MAX_LIMIT});else{let limitResult=validateIntegerRangeWithDefault(limitOption,{flag:"--limit",min:1,max:MAX_LIMIT,defaultValue:DEFAULT_LIMIT});if(!limitResult.valid)return usageError(limitResult.message);limit=limitResult.value}let plan;if(nextOption!==void 0){let planResult=await planContinuation();if(typeof planResult=="number")return planResult;plan=planResult}else{let planResult=await planQuery();if(typeof planResult=="number")return planResult;plan=planResult}async function planContinuation(){if(!trimmedNext)return usageError("--next must not be empty.");let invalidCursor=`--next is not a valid cursor. Use the pagination.next value from the summary of a previous ${getCommandName("logs --json")} run.`;if(!continuation||!continuationSource)return usageError(invalidCursor);let parsed=parseContinuation(continuation);if(!parsed)return usageError(invalidCursor);if(explicitSource&&explicitSource!==continuationSource.name)return usageError(`The --next cursor continues a ${continuationSource.name} query. Use ${getCommandName("logs --next <CURSOR>")} without "${explicitSource}".`);for(let flag of CONTINUATION_CONFLICTS)if(flags[flag]!==void 0)return usageError(`${flag} can't be combined with --next. The cursor keeps the original target, filter, and time window.`);if(argvHasScopeFlag(client.argv)&&client.config.currentTeam!==continuation.ownerId)return usageError("The --next cursor belongs to a different team than --scope. Remove --scope to use the team in the cursor.");let{teamId,projectId,timeRange:timeRange2}=parsed;return{source:continuationSource,teamId,projectId,timeRange:timeRange2,filter:continuation.filter,startCursor:continuation.cursor,context:async()=>{let[label,project]=await Promise.all([teamLabel(client,teamId),getProjectByNameOrId(client,projectId,teamId).catch(()=>null)]),projectName=project&&!(project instanceof ProjectNotFound)?project.name:projectId;return`${SOURCE_TITLES[continuationSource.name]} for ${label}/${projectName} (continued), ${formatWindow(timeRange2)}`}}}async function planQuery(){let source2=logsSources[sourceName],filter=queryOption?.trim();if(queryOption!==void 0&&!filter)return usageError("--query must not be empty.");let environment=environmentOption?.trim();if(environmentOption!==void 0&&!environment)return usageError("--environment must not be empty.");let deploymentInput=deploymentOption??positionalDeployment,deployment=deploymentInput?.trim();if(deploymentInput!==void 0&&!deployment)return usageError("--deployment must not be empty.");let project=projectOption?.trim();if(projectOption!==void 0&&!project)return usageError("--project must not be empty.");let timeRangeResult=resolveLogsTimeRange({since:sinceOption,until:untilOption,now:commandStart,wholeSeconds:source2.wholeSecondBounds});if("error"in timeRangeResult)return usageError(timeRangeResult.error);let timeRange2=timeRangeResult.range,targetResult;try{targetResult=await resolveLogsTarget(client,{project,deployment:deployment&&deploymentHost(deployment),deploymentFromArgument:positionalDeployment!==void 0,quiet:json})}catch(err){return failUnexpected(err)}if("error"in targetResult)return fail2(targetResult.reason,targetResult.error,targetResult.exitCode);let{target}=targetResult;return{source:source2,teamId:target.teamId,projectId:target.projectId,timeRange:timeRange2,filter:composeFilter({source:source2,deploymentId:target.deploymentId,environment,filter}),context:async()=>{let details=[target.deploymentId?`deployment ${target.deploymentId}`:void 0,environment?`environment ${environment}`:void 0].filter(Boolean);return`${SOURCE_TITLES[source2.name]} for ${target.teamLabel}/${target.projectName}`+(details.length>0?` (${details.join(", ")})`:"")+`, ${formatWindow(timeRange2)}`}}}let{source,timeRange}=plan,serializedTimeRange=serializeTimeRange(timeRange),tokenFor=cursor=>encodeContinuation({event:source.event,ownerId:plan.teamId,projectIds:[plan.projectId],timeRange:serializedTimeRange,...plan.filter!==void 0?{filter:plan.filter}:{},order:"desc",cursor}),write=async text=>{try{return await writeWithBackpressure(client.stdout,text),!0}catch(err){if(isClosedOutputError(err))return!1;throw err}};json||output_manager_default.print(import_chalk4.default.dim(`${await plan.context()}
73
- `));let pages=fetchEventPages(client,{source,teamId:plan.teamId,projectId:plan.projectId,timeRange,filter:plan.filter},limit,plan.startCursor),renderer=json?void 0:createRenderer(source.name,timeRange),excludedIntervals=new Map,written=0,pagesFetched=0,resumeCursor=plan.startCursor,result;try{if(upfrontWarnings.length>0&&!await write(upfrontWarnings.join("")))return 0;for(;;){!json&&pagesFetched===0&&output_manager_default.spinner(`Fetching ${source.recordsLabel}\u2026`,1e3);let next;try{next=await pages.next()}catch(err){return reportFetchFailure(err)}if(output_manager_default.stopSpinner(),pagesFetched+=1,next.done){result=next.value;break}for(let interval of next.value.excludedIntervals)excludedIntervals.set(`${interval.start}/${interval.end}`,interval);let{events}=next.value,chunk="";if(renderer){written===0&&events.length>0&&(chunk+=`${renderer.header()}
75
+ `),2)}parsedArguments.args[0]==="log"&&warnDeprecatedSubcommand(client,"log","logs");let{flags}=parsedArguments,formatResult=validateJsonOutput(flags),json=!!flags["--json"]||formatResult.valid&&formatResult.jsonOutput||argvRequestsJson(client.argv)||client.nonInteractive,{subcommand,subcommandOriginal,args}=getSubcommand(parsedArguments.args.slice(1),COMMAND_CONFIG),explicitSource=subcommand==="runtime"||subcommand==="requests"?subcommand:void 0;if(flags["--help"])return telemetry.trackCliFlagHelp("logs",explicitSource&&subcommandOriginal),output_manager_default.print(help(explicitSource?SUBCOMMAND_METADATA[explicitSource]:logsCommand,{stream:client.stderr,parent:explicitSource?logsCommand:void 0,columns:client.stderr.columns})),0;let nextOption=flags["--next"],trimmedNext=nextOption?.trim(),continuation=trimmedNext?decodeContinuation(trimmedNext):void 0,continuationSource=continuation?sourceForEvent(continuation.event):void 0,sourceName=explicitSource??continuationSource?.name??"runtime";sourceName==="requests"?telemetry.trackCliSubcommandRequests(subcommandOriginal):telemetry.trackCliSubcommandRuntime(subcommandOriginal);let projectOption=flags["--project"],deploymentOption=flags["--deployment"],environmentOption=flags["--environment"],queryOption=flags["--query"],sinceOption=flags["--since"],untilOption=flags["--until"],limitOption=flags["--limit"];telemetry.trackCliOptionProject(projectOption),telemetry.trackCliOptionDeployment(deploymentOption),telemetry.trackCliOptionEnvironment(environmentOption),telemetry.trackCliOptionQuery(queryOption),telemetry.trackCliOptionSince(sinceOption),telemetry.trackCliOptionUntil(untilOption),telemetry.trackCliOptionLimit(limitOption),telemetry.trackCliOptionNext(nextOption),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliFlagFollow(flags["--follow"]);let fail2=(reason,message,exitCode2,extra={})=>(output_manager_default.stopSpinner(),json?writeJsonError(client,{status:"error",reason,message,...extra},exitCode2):(output_manager_default.error(message),exitCode2??(reason===AGENT_REASON.INVALID_ARGUMENTS?2:1))),usageError=message=>fail2(AGENT_REASON.INVALID_ARGUMENTS,message,2),failUnexpected=err=>{if(output_manager_default.stopSpinner(),!json)return printError(err),1;let failure=describeLogsApiError(client,err,sourceName);return failure?writeJsonError(client,failure.json,failure.exitCode):writeJsonError(client,{status:"error",reason:AGENT_REASON.API_ERROR,message:(0,import_error_utils2.errorToString)(err)})};if(!formatResult.valid)return usageError(formatResult.error);let legacyOptions=usedLegacyOptions(flags);for(let name of legacyOptions)telemetry.trackCliLegacyOption(name);let legacyError=getLegacyOptionError(flags);if(legacyError)return usageError(legacyError);let positionalDeployment;if(args.length>0){if(telemetry.trackCliArgumentPositional(looksLikeDeployment(args[0])?"deployment":"unknown"),args.length>1||!looksLikeDeployment(args[0]))return usageError(positionalError(args[0],explicitSource));if(deploymentOption!==void 0)return usageError("Pass the deployment once, with --deployment. Remove the deployment argument.");if(nextOption!==void 0)return usageError("A deployment argument can't be combined with --next. The cursor keeps the original target, filter, and time window.");positionalDeployment=args[0]}let upfrontWarnings=[],warn=(reason,message,data)=>{json?upfrontWarnings.push(warningLine({reason,message,data})):output_manager_default.warning(message)};flags["--follow"]&&warn("deprecated","--follow is deprecated and no longer streams logs. Showing a bounded result; remove --follow."),positionalDeployment!==void 0&&warn("deprecated",`Passing a deployment as an argument is deprecated. Use ${deploymentFlag(positionalDeployment)}.`);let limit;if(typeof limitOption=="number"&&Number.isInteger(limitOption)&&limitOption>MAX_LIMIT)limit=MAX_LIMIT,warn("limit_clamped",`--limit ${limitOption} is above the maximum of ${MAX_LIMIT}. Using ${MAX_LIMIT}.`,{requested:limitOption,limit:MAX_LIMIT});else{let limitResult=validateIntegerRangeWithDefault(limitOption,{flag:"--limit",min:1,max:MAX_LIMIT,defaultValue:DEFAULT_LIMIT});if(!limitResult.valid)return usageError(limitResult.message);limit=limitResult.value}let plan;if(nextOption!==void 0){let planResult=await planContinuation();if(typeof planResult=="number")return planResult;plan=planResult}else{let planResult=await planQuery();if(typeof planResult=="number")return planResult;plan=planResult}async function planContinuation(){if(!trimmedNext)return usageError("--next must not be empty.");let invalidCursor=`--next is not a valid cursor. Use the pagination.next value from the summary of a previous ${getCommandName("logs --json")} run.`;if(!continuation||!continuationSource)return usageError(invalidCursor);let parsed=parseContinuation(continuation);if(!parsed)return usageError(invalidCursor);if(explicitSource&&explicitSource!==continuationSource.name)return usageError(`The --next cursor continues a ${continuationSource.name} query. Use ${getCommandName("logs --next <CURSOR>")} without "${explicitSource}".`);for(let flag of CONTINUATION_CONFLICTS)if(flags[flag]!==void 0)return usageError(`${flag} can't be combined with --next. The cursor keeps the original target, filter, and time window.`);if(argvHasScopeFlag(client.argv)&&client.config.currentTeam!==continuation.ownerId)return usageError("The --next cursor belongs to a different team than --scope. Remove --scope to use the team in the cursor.");let{teamId,projectId,timeRange:timeRange2}=parsed;return{source:continuationSource,teamId,projectId,timeRange:timeRange2,filter:continuation.filter,startCursor:continuation.cursor,context:async()=>{let[label,project]=await Promise.all([teamLabel(client,teamId),getProjectByNameOrId(client,projectId,teamId).catch(()=>null)]),projectName=project&&!(project instanceof ProjectNotFound)?project.name:projectId;return`${SOURCE_TITLES[continuationSource.name]} for ${label}/${projectName} (continued), ${formatWindow(timeRange2)}`}}}async function planQuery(){let source2=logsSources[sourceName],filter=queryOption?.trim();if(queryOption!==void 0&&!filter)return usageError("--query must not be empty.");let environment=environmentOption?.trim();if(environmentOption!==void 0&&!environment)return usageError("--environment must not be empty.");let deploymentInput=deploymentOption??positionalDeployment,deployment=deploymentInput?.trim();if(deploymentInput!==void 0&&!deployment)return usageError("--deployment must not be empty.");let project=projectOption?.trim();if(projectOption!==void 0&&!project)return usageError("--project must not be empty.");let timeRangeResult=resolveLogsTimeRange({since:sinceOption,until:untilOption,now:commandStart,wholeSeconds:source2.wholeSecondBounds});if("error"in timeRangeResult)return usageError(timeRangeResult.error);let timeRange2=timeRangeResult.range,targetResult;try{targetResult=await resolveLogsTarget(client,{project,deployment:deployment&&deploymentHost(deployment),deploymentFromArgument:positionalDeployment!==void 0,quiet:json})}catch(err){return failUnexpected(err)}if("error"in targetResult)return fail2(targetResult.reason,targetResult.error,targetResult.exitCode);let{target}=targetResult;return{source:source2,teamId:target.teamId,projectId:target.projectId,timeRange:timeRange2,filter:composeFilter({source:source2,deploymentId:target.deploymentId,environment,filter}),context:async()=>{let details=[target.deploymentId?`deployment ${target.deploymentId}`:void 0,environment?`environment ${environment}`:void 0].filter(Boolean);return`${SOURCE_TITLES[source2.name]} for ${target.teamLabel}/${target.projectName}`+(details.length>0?` (${details.join(", ")})`:"")+`, ${formatWindow(timeRange2)}`}}}let{source,timeRange}=plan,serializedTimeRange=serializeTimeRange(timeRange),tokenFor=cursor=>encodeContinuation({event:source.event,ownerId:plan.teamId,projectIds:[plan.projectId],timeRange:serializedTimeRange,...plan.filter!==void 0?{filter:plan.filter}:{},order:"desc",cursor}),write=async text2=>{try{return await writeWithBackpressure(client.stdout,text2),!0}catch(err){if(isClosedOutputError(err))return!1;throw err}};json||output_manager_default.print(import_chalk5.default.dim(`${await plan.context()}
76
+ `));let pages=fetchEventPages2(client,{source,teamId:plan.teamId,projectId:plan.projectId,timeRange,filter:plan.filter},limit,plan.startCursor),renderer=json?void 0:createRenderer(source.name,timeRange),excludedIntervals=new Map,written=0,pagesFetched=0,resumeCursor=plan.startCursor,result;try{if(upfrontWarnings.length>0&&!await write(upfrontWarnings.join("")))return 0;for(;;){!json&&pagesFetched===0&&output_manager_default.spinner(`Fetching ${source.recordsLabel}\u2026`,1e3);let next;try{next=await pages.next()}catch(err){return reportFetchFailure(err)}if(output_manager_default.stopSpinner(),pagesFetched+=1,next.done){result=next.value;break}for(let interval of next.value.excludedIntervals)excludedIntervals.set(`${interval.start}/${interval.end}`,interval);let{events}=next.value,chunk="";if(renderer){written===0&&events.length>0&&(chunk+=`${renderer.header()}
74
77
  `);for(let event of events)chunk+=`${renderer.row(event)}
75
- `}else for(let event of events)chunk+=recordLine(source.recordType,event);if(chunk&&!await write(chunk))return 0;written+=events.length,resumeCursor=next.value.nextCursor??void 0}let intervals=sortIntervals(excludedIntervals.values()),nextToken=result.nextCursor?tokenFor(result.nextCursor):null;if(json){let tail=intervals.map(interval=>warningLine({reason:"stream_gap",message:streamGapMessage(interval),data:{start:interval.start,end:interval.end}})).join("")+summaryLine({recordsReturned:written,timeRange:serializedTimeRange,pagination:{hasMore:result.hasMore,next:nextToken},excludedIntervals:intervals});return await write(tail),0}for(let interval of intervals)output_manager_default.warning(streamGapMessage(interval));if(written===0){let notes=[`No ${source.recordsLabel} found in this window. Use an earlier --since to search further back.`];source.fixedFilters.includes(BACKGROUND_FUNCTION_EXCLUSION)&&notes.push("Background function executions are always excluded."),output_manager_default.print(import_chalk4.default.dim(`${notes.join(`
78
+ `}else for(let event of events)chunk+=recordLine(source.recordType,event);if(chunk&&!await write(chunk))return 0;written+=events.length,resumeCursor=next.value.nextCursor??void 0}let intervals=sortIntervals(excludedIntervals.values()),nextToken=result.nextCursor?tokenFor(result.nextCursor):null;if(json){let tail=intervals.map(interval=>warningLine({reason:"stream_gap",message:streamGapMessage(interval),data:{start:interval.start,end:interval.end}})).join("")+summaryLine({recordsReturned:written,timeRange:serializedTimeRange,pagination:{hasMore:result.hasMore,next:nextToken},excludedIntervals:intervals});return await write(tail),0}for(let interval of intervals)output_manager_default.warning(streamGapMessage(interval));if(written===0){let notes=[`No ${source.recordsLabel} found in this window. Use an earlier --since to search further back.`];source.fixedFilters.includes(BACKGROUND_FUNCTION_EXCLUSION)&&notes.push("Background function executions are always excluded."),output_manager_default.print(import_chalk5.default.dim(`${notes.join(`
76
79
  `)}
77
80
  `))}return result.hasMore&&(output_manager_default.log(`More ${source.recordsLabel} matched.`),nextToken&&(output_manager_default.print(`
78
81
  `),printNextPageCommand(getCommandNamePlain(`logs --next ${nextToken}`))),(!nextToken||limit===MAX_LIMIT)&&output_manager_default.print(`Narrow --query, --since, or --until to see the rest.
@@ -4,7 +4,7 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{FILTER_DEPRECATION_WARNING,alignTimeRangeToGranularity,canonicalResponseToMetricsResponse,createCanonicalMetricsRequest,usesODataSyntax}from"./chunks/chunk-3RXEJWYM.js";import{init_dist,prepareFlagsDefinitions}from"./chunks/chunk-OAM5NJCU.js";import{EncryptJWT,base64url_exports,jwtDecrypt}from"./chunks/chunk-S3L2OHPO.js";import{require_fast_deep_equal}from"./chunks/chunk-MCRKBVZA.js";import{sanitizeForTerminal}from"./chunks/chunk-UUBPAYTG.js";import{getLinkedFlagsProject,getProjectNameFromFlags}from"./chunks/chunk-3DDEBTCC.js";import{parseSubcommandArguments,requireProjectContext}from"./chunks/chunk-GP2FXUFE.js";import{computeGranularity,formatText,generateSparkline}from"./chunks/chunk-Y55DGB3L.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-C4XT3PG4.js";import"./chunks/chunk-IVSSTHB6.js";import"./chunks/chunk-GZNDA6SV.js";import{require_dist}from"./chunks/chunk-JELLVPCM.js";import{readStdinText}from"./chunks/chunk-PSOVLGHP.js";import{require_raw_body}from"./chunks/chunk-XOETL6DB.js";import{findCommandShorthands}from"./chunks/chunk-VBKFCR5W.js";import{STANDARD_ENVIRONMENTS}from"./chunks/chunk-7YKFF6CE.js";import{resolveProjectContext}from"./chunks/chunk-JULKMXVP.js";import{formatProject}from"./chunks/chunk-YRK2BCTJ.js";import{normalizeRepeatableStringFilters,outputError,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-LD42X7ZH.js";import{ellipsizeMiddle,truncateEnd}from"./chunks/chunk-TOTTVS5P.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-ZBJ44DRL.js";import{readOnOffOption}from"./chunks/chunk-APNR444T.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{canPrompt,canPromptOnTerminal}from"./chunks/chunk-IQ7FPAI4.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import"./chunks/chunk-PFD7LETF.js";import{printNextPageCommand}from"./chunks/chunk-B3ETPBO4.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-44XDCARR.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-OTJNOMRV.js";import{getRenamedOption,reportRenamedOptionError,withWarnings}from"./chunks/chunk-2QSNFVB6.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{FLAG_ATTRIBUTE_TYPES,FLAG_CONDITION_LIST_COMPARATORS,FLAG_CONDITION_RHS_OPTIONAL_COMPARATORS,FLAG_EVALUATIONS_DIMENSIONS,FLAG_EVALUATIONS_DIMENSION_NAMES,FLAG_EVALUATIONS_GRANULARITIES,alertsInspectSubcommand,alertsListSubcommand,alertsSubcommand,archiveSubcommand,attackModeDisableSubcommand,attackModeEnableSubcommand,attackModeSubcommand,botManagementSubcommand,cleanupSubcommand,commandsStructs,connectionsAddSubcommand,connectionsListSubcommand,connectionsRemoveSubcommand,connectionsSubcommand,createSubcommand6 as createSubcommand,datafileSubcommand,diffSubcommand,disableSubcommand,discardSubcommand,enableSubcommand2 as enableSubcommand,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,feedbackCommand,firewallCommand,flagsCommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getFlagAttributeType,inspectSubcommand9 as inspectSubcommand,ipBlocksBlockSubcommand,ipBlocksListSubcommand,ipBlocksSubcommand,ipBlocksUnblockSubcommand,isBucketingAttribute,isFlagAttributeType,isFlagEvaluationsDimension,isFlagEvaluationsGranularity,isTimestampAttributeType,labelsListSubcommand,labelsSubcommand,listSubcommand14 as listSubcommand,openSubcommand3 as openSubcommand,overrideSubcommand,overviewSubcommand,persistentActionsInspectSubcommand,persistentActionsListSubcommand,persistentActionsSubcommand,prepareSubcommand,publishSubcommand,removeSubcommand8 as removeSubcommand,rolloutSubcommand,rulesAddSubcommand2 as rulesAddSubcommand,rulesAddSubcommand3 as rulesAddSubcommand2,rulesDisableSubcommand,rulesEditSubcommand2 as rulesEditSubcommand,rulesEnableSubcommand,rulesInspectSubcommand,rulesListSubcommand2 as rulesListSubcommand,rulesListSubcommand3 as rulesListSubcommand2,rulesMoveSubcommand,rulesRemoveSubcommand2 as rulesRemoveSubcommand,rulesRemoveSubcommand3 as rulesRemoveSubcommand2,rulesReorderSubcommand,rulesSubcommand2 as rulesSubcommand,rulesSubcommand3 as rulesSubcommand2,rulesUpdateSubcommand,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setSubcommand2 as setSubcommand,splitSubcommand,staleSubcommand,statusSubcommand,systemBypassAddSubcommand,systemBypassListSubcommand,systemBypassRemoveSubcommand,systemBypassSubcommand,systemMitigationsPauseSubcommand,systemMitigationsResumeSubcommand,systemMitigationsSubcommand,targetingEnableSubcommand,targetingSubcommand,targetsAddSubcommand,targetsListSubcommand,targetsRemoveSubcommand,targetsSubcommand,trafficInspectSubcommand,trafficListSubcommand,trafficSubcommand,unarchiveSubcommand,updateSubcommand5 as updateSubcommand,useTargetingSubcommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand}from"./chunks/chunk-2PYFJXKS.js";import"./chunks/chunk-3KSTUMR6.js";import"./chunks/chunk-EZL4AJXH.js";import"./chunks/chunk-45UDRX4C.js";import"./chunks/chunk-J52UJYOK.js";import"./chunks/chunk-GZWYJT4C.js";import"./chunks/chunk-3AXMZRAB.js";import"./chunks/chunk-FQVSBXRY.js";import"./chunks/chunk-GP5MFCGO.js";import"./chunks/chunk-V5A4EBV3.js";import"./chunks/chunk-IECNFRTK.js";import"./chunks/chunk-A6F3EE2O.js";import"./chunks/chunk-K2R3QPOC.js";import"./chunks/chunk-IHRM7L23.js";import"./chunks/chunk-HTFQFHPR.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-DBV6AB6T.js";import"./chunks/chunk-37DIJCWK.js";import"./chunks/chunk-7E6UJXLR.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-7V2PXIVW.js";import{printError}from"./chunks/chunk-D3GYYGSS.js";import{help,remoteText}from"./chunks/chunk-33U57CNE.js";import{getScope}from"./chunks/chunk-IU6PHFPQ.js";import{TelemetryClient}from"./chunks/chunk-SBBD2Q5A.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,clientObservabilityPlanRecovery,getExitCodeForReason,outputAgentError,shouldEmitNonInteractiveCommandError,writeActionRequired,writeAgentError}from"./chunks/chunk-KAUKCHQF.js";import"./chunks/chunk-QLW5DCM4.js";import{getProjectByNameOrId,isPromptCanceledError,require_pluralize,sleep,ua_default}from"./chunks/chunk-QZEZCUUZ.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-3LQ2ADXO.js";import"./chunks/chunk-MCP63EVQ.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments}from"./chunks/chunk-KIMIK4SG.js";import{quoteArg,teamCache}from"./chunks/chunk-F53OKXYI.js";import{warnDeprecatedInput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-JRBPVMQO.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-OCR5CRTH.js";import"./chunks/chunk-4SAVH3H7.js";import{ProjectNotFound,isAPIError}from"./chunks/chunk-FXEMEIST.js";import{cmd,getCommandName,getCommandNamePlain,packageName}from"./chunks/chunk-JESNVRVR.js";import{output_manager_default,recordCliError}from"./chunks/chunk-ZRJKGAUT.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import{pkg_default}from"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-PUKYAALC.js";import{SDK_KEY_PATTERN,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs}from"./chunks/chunk-YPPDRKVC.js";import"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-5O7CRJE5.js";import{fetch,toNodeReadable}from"./chunks/chunk-U3J7VS56.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_raw_body=__toESM(require_raw_body(),1);var FeedbackTelemetryClient=class extends TelemetryClient{trackCliArgumentNote(note){note!==void 0&&this.trackCliArgument({arg:"note",value:this.redactedValue})}trackCliOptionField(fields){fields?.length&&this.trackCliOption({option:"field",value:this.redactedValue})}};var FEEDBACK_URL="https://vercel.com/api/feedback/cli",MAX_FEEDBACK_BYTES=1024*1024,FETCH_TIMEOUT_MS=1e4;async function feedback(client){let fail=(reason,message,code)=>(recordCliError({code:reason}),output_manager_default.error(message),code),parsed;try{parsed=parseArguments(client.argv.slice(2),getFlagsSpecification(feedbackCommand.options))}catch{return fail(AGENT_REASON.INVALID_ARGUMENTS,"Invalid feedback arguments. Run vercel feedback --help for usage.",2)}let notes=parsed.args.slice(1),fields=parsed.flags["--field"]??[];if(notes.length===0&&fields.length===0)return client.stdout.write(help(feedbackCommand,{stream:client.stdout,columns:client.stdout.columns??client.stderr.columns})),0;if(notes.length>1)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Pass one note. Quote notes containing spaces, or use vercel feedback - to read stdin.",2);let telemetry=new FeedbackTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentNote(notes[0]),telemetry.trackCliOptionField(fields);let data=Object.create(null);for(let field of fields){let separator=field.indexOf("="),key=field.slice(0,separator).trim();if(separator<1||key==="")return fail(AGENT_REASON.INVALID_ARGUMENTS,"Each --field needs a non-empty key followed by =value. Example: vercel feedback --field topic=deploy.",2);data[key]=field.slice(separator+1)}if(notes.length&&Object.hasOwn(data,"note"))return fail(AGENT_REASON.INVALID_ARGUMENTS,"Provide the note once: use a positional note or --field note=..., rather than both.",2);if(notes[0]==="-"){if(client.stdin.isTTY)return fail(AGENT_REASON.INVALID_ARGUMENTS,"No input was piped to stdin. Pipe a note with: cat notes.md | vercel feedback -",2);try{data.note=await readStdinText(client.stdin,MAX_FEEDBACK_BYTES)}catch(error){return error.type==="entity.too.large"?fail(AGENT_REASON.INVALID_ARGUMENTS,"Feedback is too large. Keep the complete submission below 1 MiB.",2):fail(AGENT_REASON.STDIN_ERROR,"Could not read the feedback note from stdin. Check the input pipe and try again.",1)}}else notes[0]!==void 0&&(data.note=notes[0]);for(let key of Object.keys(data))data[key].trim()||delete data[key];if(!Object.keys(data).length)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Provide a note or at least one named field. Run vercel feedback --help for examples.",2);let canSendTelemetry=client.telemetryEventStore?.enabled??!1,body=JSON.stringify({metadata:canSendTelemetry?{agent:client.isAgent,agent_name:client.isAgent?client.agentName:void 0,cli_version:pkg_default.version,operating_system:process.platform,team_id:client.config.currentTeam??null,user_id:client.authConfig.userId??null,invocation_id:client.telemetryEventStore?.currentInvocationId??null,session_id:client.telemetryEventStore?.currentSessionId??null}:null,data});if(Buffer.byteLength(body)>MAX_FEEDBACK_BYTES)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Feedback is too large. Keep the complete submission below 1 MiB.",2);let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),FETCH_TIMEOUT_MS);timeout.unref?.();try{let response=await fetch(FEEDBACK_URL,{method:"POST",headers:{"content-type":"application/json","user-agent":ua_default},body,redirect:"manual",signal:controller.signal});if(!response.ok)return await response.body?.cancel(),fail(response.status===429?AGENT_REASON.RATE_LIMITED:AGENT_REASON.API_ERROR,`Feedback could not be submitted (HTTP ${response.status}). Try again later.`,1);let responseBody=toNodeReadable(response.body);return JSON.parse(await(0,import_raw_body.default)(responseBody,{limit:64*1024,encoding:"utf8"}).finally(()=>responseBody.destroy()))?.success!==!0?fail(AGENT_REASON.UNKNOWN_OUTCOME,"Could not confirm that Vercel accepted the feedback. It may have been submitted; no automatic retry was made.",1):(client.stdout.write(`Feedback sent
7
+ import{FILTER_DEPRECATION_WARNING,alignTimeRangeToGranularity,canonicalResponseToMetricsResponse,createCanonicalMetricsRequest,usesODataSyntax}from"./chunks/chunk-UZTDRGCW.js";import{init_dist,prepareFlagsDefinitions}from"./chunks/chunk-OAM5NJCU.js";import{EncryptJWT,base64url_exports,jwtDecrypt}from"./chunks/chunk-S3L2OHPO.js";import{sanitizeForTerminal}from"./chunks/chunk-UUBPAYTG.js";import{require_fast_deep_equal}from"./chunks/chunk-MCRKBVZA.js";import{getLinkedFlagsProject,getProjectNameFromFlags}from"./chunks/chunk-SNCQOAFU.js";import{parseSubcommandArguments,requireProjectContext}from"./chunks/chunk-SR2SHYJA.js";import{computeGranularity,formatText,generateSparkline}from"./chunks/chunk-UIJYRI3G.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-WKYFWE37.js";import"./chunks/chunk-IVSSTHB6.js";import"./chunks/chunk-GZNDA6SV.js";import{require_dist}from"./chunks/chunk-JELLVPCM.js";import{readStdinText}from"./chunks/chunk-PSOVLGHP.js";import{require_raw_body}from"./chunks/chunk-XOETL6DB.js";import{findCommandShorthands}from"./chunks/chunk-VBKFCR5W.js";import{STANDARD_ENVIRONMENTS}from"./chunks/chunk-7YKFF6CE.js";import{resolveProjectContext}from"./chunks/chunk-QKWJN6OE.js";import{formatProject}from"./chunks/chunk-TD7AL545.js";import{normalizeRepeatableStringFilters,outputError,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-AX3V7N44.js";import{ellipsizeMiddle,truncateEnd}from"./chunks/chunk-TOTTVS5P.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-EBBDSEEU.js";import{readOnOffOption}from"./chunks/chunk-E7DYXF6G.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{canPrompt,canPromptOnTerminal}from"./chunks/chunk-IQ7FPAI4.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import"./chunks/chunk-PFD7LETF.js";import{printNextPageCommand}from"./chunks/chunk-NEUQZYBL.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{formatTable}from"./chunks/chunk-2RXUQ72I.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,reportRenamedOptionError,withWarnings}from"./chunks/chunk-K5YO4UD7.js";import"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{FLAG_ATTRIBUTE_TYPES,FLAG_CONDITION_LIST_COMPARATORS,FLAG_CONDITION_RHS_OPTIONAL_COMPARATORS,FLAG_EVALUATIONS_DIMENSIONS,FLAG_EVALUATIONS_DIMENSION_NAMES,FLAG_EVALUATIONS_GRANULARITIES,alertsInspectSubcommand,alertsListSubcommand,alertsSubcommand,archiveSubcommand,attackModeDisableSubcommand,attackModeEnableSubcommand,attackModeSubcommand,botManagementSubcommand,cleanupSubcommand,commandsStructs,connectionsAddSubcommand,connectionsListSubcommand,connectionsRemoveSubcommand,connectionsSubcommand,createSubcommand6 as createSubcommand,datafileSubcommand,diffSubcommand,disableSubcommand,discardSubcommand,enableSubcommand2 as enableSubcommand,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,feedbackCommand,firewallCommand,flagsCommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getFlagAttributeType,inspectSubcommand9 as inspectSubcommand,ipBlocksBlockSubcommand,ipBlocksListSubcommand,ipBlocksSubcommand,ipBlocksUnblockSubcommand,isBucketingAttribute,isFlagAttributeType,isFlagEvaluationsDimension,isFlagEvaluationsGranularity,isTimestampAttributeType,labelsListSubcommand,labelsSubcommand,listSubcommand14 as listSubcommand,openSubcommand3 as openSubcommand,overrideSubcommand,overviewSubcommand,persistentActionsInspectSubcommand,persistentActionsListSubcommand,persistentActionsSubcommand,prepareSubcommand,publishSubcommand,removeSubcommand8 as removeSubcommand,rolloutSubcommand,rulesAddSubcommand2 as rulesAddSubcommand,rulesAddSubcommand3 as rulesAddSubcommand2,rulesDisableSubcommand,rulesEditSubcommand2 as rulesEditSubcommand,rulesEnableSubcommand,rulesInspectSubcommand,rulesListSubcommand2 as rulesListSubcommand,rulesListSubcommand3 as rulesListSubcommand2,rulesMoveSubcommand,rulesRemoveSubcommand2 as rulesRemoveSubcommand,rulesRemoveSubcommand3 as rulesRemoveSubcommand2,rulesReorderSubcommand,rulesSubcommand2 as rulesSubcommand,rulesSubcommand3 as rulesSubcommand2,rulesUpdateSubcommand,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setSubcommand2 as setSubcommand,splitSubcommand,staleSubcommand,statusSubcommand,systemBypassAddSubcommand,systemBypassListSubcommand,systemBypassRemoveSubcommand,systemBypassSubcommand,systemMitigationsPauseSubcommand,systemMitigationsResumeSubcommand,systemMitigationsSubcommand,targetingEnableSubcommand,targetingSubcommand,targetsAddSubcommand,targetsListSubcommand,targetsRemoveSubcommand,targetsSubcommand,trafficInspectSubcommand,trafficListSubcommand,trafficSubcommand,unarchiveSubcommand,updateSubcommand5 as updateSubcommand,useTargetingSubcommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand}from"./chunks/chunk-NTUDWWSL.js";import"./chunks/chunk-M73W4XNR.js";import"./chunks/chunk-32AS5X7G.js";import"./chunks/chunk-ZBZPCKTW.js";import"./chunks/chunk-TRZDIAX3.js";import"./chunks/chunk-GHEGWXH2.js";import"./chunks/chunk-GCXUSXB4.js";import"./chunks/chunk-2H4DUZJZ.js";import"./chunks/chunk-ECQKK4JU.js";import"./chunks/chunk-JOXGYP5S.js";import"./chunks/chunk-7ULVGK67.js";import"./chunks/chunk-4BZ3DNGM.js";import"./chunks/chunk-R5ZLTWKB.js";import"./chunks/chunk-T5TOBY4D.js";import"./chunks/chunk-H34SGIVS.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-G3LWP5CH.js";import"./chunks/chunk-QQA2OMXJ.js";import"./chunks/chunk-KV2DYFUG.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-GCPPL24C.js";import{printError}from"./chunks/chunk-BWS3ZOHJ.js";import{help,remoteText}from"./chunks/chunk-33U57CNE.js";import{getScope}from"./chunks/chunk-DSNIVABS.js";import{TelemetryClient}from"./chunks/chunk-NAU6URTI.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,buildCommandWithYes,clientObservabilityPlanRecovery,getExitCodeForReason,outputAgentError,shouldEmitNonInteractiveCommandError,writeActionRequired,writeAgentError}from"./chunks/chunk-32NXYHYC.js";import"./chunks/chunk-FWTBSC7Z.js";import{getProjectByNameOrId,isPromptCanceledError,require_pluralize,sleep}from"./chunks/chunk-OZPBJWYU.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-64UCX5JM.js";import{ua_default}from"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-7WY7ASKE.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments}from"./chunks/chunk-CGTD4QFC.js";import{quoteArg,teamCache}from"./chunks/chunk-F53OKXYI.js";import{warnDeprecatedInput,warnDeprecatedOption,warnDeprecatedSubcommand}from"./chunks/chunk-GJCVOEC2.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-4SAVH3H7.js";import{ProjectNotFound,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{cmd,getCommandName,getCommandNamePlain,packageName}from"./chunks/chunk-VRH7LWOC.js";import{pkg_default}from"./chunks/chunk-DBT6PGEH.js";import{output_manager_default,recordCliError}from"./chunks/chunk-W634OFUG.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{SDK_KEY_PATTERN,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs}from"./chunks/chunk-YPPDRKVC.js";import"./chunks/chunk-2BKALEOP.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BULSRTQE.js";import"./chunks/chunk-BRQUZ5NC.js";import"./chunks/chunk-D6REP5QQ.js";import"./chunks/chunk-FBYA6LLM.js";import{fetch,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_raw_body=__toESM(require_raw_body(),1);var FeedbackTelemetryClient=class extends TelemetryClient{trackCliArgumentNote(note){note!==void 0&&this.trackCliArgument({arg:"note",value:this.redactedValue})}trackCliOptionField(fields){fields?.length&&this.trackCliOption({option:"field",value:this.redactedValue})}};var FEEDBACK_URL="https://vercel.com/api/feedback/cli",MAX_FEEDBACK_BYTES=1024*1024,FETCH_TIMEOUT_MS=1e4;async function feedback(client){let fail=(reason,message,code)=>(recordCliError({code:reason}),output_manager_default.error(message),code),parsed;try{parsed=parseArguments(client.argv.slice(2),getFlagsSpecification(feedbackCommand.options))}catch{return fail(AGENT_REASON.INVALID_ARGUMENTS,"Invalid feedback arguments. Run vercel feedback --help for usage.",2)}let notes=parsed.args.slice(1),fields=parsed.flags["--field"]??[];if(notes.length===0&&fields.length===0)return client.stdout.write(help(feedbackCommand,{stream:client.stdout,columns:client.stdout.columns??client.stderr.columns})),0;if(notes.length>1)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Pass one note. Quote notes containing spaces, or use vercel feedback - to read stdin.",2);let telemetry=new FeedbackTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentNote(notes[0]),telemetry.trackCliOptionField(fields);let data=Object.create(null);for(let field of fields){let separator=field.indexOf("="),key=field.slice(0,separator).trim();if(separator<1||key==="")return fail(AGENT_REASON.INVALID_ARGUMENTS,"Each --field needs a non-empty key followed by =value. Example: vercel feedback --field topic=deploy.",2);data[key]=field.slice(separator+1)}if(notes.length&&Object.hasOwn(data,"note"))return fail(AGENT_REASON.INVALID_ARGUMENTS,"Provide the note once: use a positional note or --field note=..., rather than both.",2);if(notes[0]==="-"){if(client.stdin.isTTY)return fail(AGENT_REASON.INVALID_ARGUMENTS,"No input was piped to stdin. Pipe a note with: cat notes.md | vercel feedback -",2);try{data.note=await readStdinText(client.stdin,MAX_FEEDBACK_BYTES)}catch(error){return error.type==="entity.too.large"?fail(AGENT_REASON.INVALID_ARGUMENTS,"Feedback is too large. Keep the complete submission below 1 MiB.",2):fail(AGENT_REASON.STDIN_ERROR,"Could not read the feedback note from stdin. Check the input pipe and try again.",1)}}else notes[0]!==void 0&&(data.note=notes[0]);for(let key of Object.keys(data))data[key].trim()||delete data[key];if(!Object.keys(data).length)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Provide a note or at least one named field. Run vercel feedback --help for examples.",2);let canSendTelemetry=client.telemetryEventStore?.enabled??!1,body=JSON.stringify({metadata:canSendTelemetry?{agent:client.isAgent,agent_name:client.isAgent?client.agentName:void 0,cli_version:pkg_default.version,operating_system:process.platform,team_id:client.config.currentTeam??null,user_id:client.authConfig.userId??null,invocation_id:client.telemetryEventStore?.currentInvocationId??null,session_id:client.telemetryEventStore?.currentSessionId??null}:null,data});if(Buffer.byteLength(body)>MAX_FEEDBACK_BYTES)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Feedback is too large. Keep the complete submission below 1 MiB.",2);let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),FETCH_TIMEOUT_MS);timeout.unref?.();try{let response=await fetch(FEEDBACK_URL,{method:"POST",headers:{"content-type":"application/json","user-agent":ua_default},body,redirect:"manual",signal:controller.signal});if(!response.ok)return await response.body?.cancel(),fail(response.status===429?AGENT_REASON.RATE_LIMITED:AGENT_REASON.API_ERROR,`Feedback could not be submitted (HTTP ${response.status}). Try again later.`,1);let responseBody=toNodeReadable(response.body);return JSON.parse(await(0,import_raw_body.default)(responseBody,{limit:64*1024,encoding:"utf8"}).finally(()=>responseBody.destroy()))?.success!==!0?fail(AGENT_REASON.UNKNOWN_OUTCOME,"Could not confirm that Vercel accepted the feedback. It may have been submitted; no automatic retry was made.",1):(client.stdout.write(`Feedback sent
8
8
  `),0)}catch{return fail(AGENT_REASON.UNKNOWN_OUTCOME,"Could not confirm that Vercel accepted the feedback. Check your connection. It may have been submitted; no automatic retry was made.",1)}finally{clearTimeout(timeout)}}var import_chalk6=__toESM(require_source(),1);var import_chalk2=__toESM(require_source(),1);var import_chalk=__toESM(require_source(),1);var ACTION_COLORS={allow:import_chalk.default.blue,deny:import_chalk.default.red,challenge:import_chalk.default.yellow,log:import_chalk.default.magenta,rate_limit:import_chalk.default.cyan,"rate-limit":import_chalk.default.cyan,bypass:import_chalk.default.green};function labelForAction(action){return action==="rate_limit"||action==="rate-limit"?"Rate Limited":action.split(/[-_]/).filter(Boolean).map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(" ")}var MONTHS=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function formatCount(n){return n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}k`:String(Math.round(n))}function pad2(n){return String(n).padStart(2,"0")}function formatUtcTime(ms9,withDate){let d=new Date(ms9),hm=`${pad2(d.getUTCHours())}:${pad2(d.getUTCMinutes())}`;return withDate?`${MONTHS[d.getUTCMonth()]} ${d.getUTCDate()} ${hm}`:hm}function relativeTime(ts){let diff2=Date.now()-ts;return diff2<6e4?"just now":diff2<36e5?`${Math.floor(diff2/6e4)}m ago`:diff2<864e5?`${Math.floor(diff2/36e5)}h ago`:`${Math.floor(diff2/864e5)}d ago`}function formatUtcDateTime(ms9){return`${formatUtcTime(ms9,!0)} UTC (${relativeTime(ms9)})`}function colorizeDetail(detail){return detail.split(" \xB7 ").map(part=>{let color=ACTION_COLORS[part.toLowerCase().replace(/ /g,"_")];return color?color(part):part}).join(" \xB7 ")}function windowNeedsDate(startMs,endMs){return endMs-startMs>25*36e5}function granularityLabel(granularity){return"minutes"in granularity?`${granularity.minutes}m`:"hours"in granularity?`${granularity.hours}h`:`${granularity.days}d`}function formatActionTrendTable(series){let allTs=new Set;for(let s of series)for(let p of s.timeseries)allTs.add(p.timestamp);let axis=[...allTs].sort(),hasAnyTraffic=series.some(s=>s.total>0||s.timeseries.some(p=>p.value>0));if(series.length===0||axis.length===0||!hasAnyTraffic)return import_chalk.default.dim(" No request data for this period.");let startMs=new Date(axis[0]).getTime(),endMs=new Date(axis[axis.length-1]).getTime(),needsDate=windowNeedsDate(startMs,endMs),rows=[["Action","Trend","Total","Peak","Peak at"].map(h=>import_chalk.default.bold(import_chalk.default.cyan(h)))];for(let s of series){let byTs=new Map(s.timeseries.map(p=>[p.timestamp,p.value])),values=axis.map(t=>byTs.get(t)??0),peak=0,peakTs="";for(let i=0;i<axis.length;i++)values[i]>peak&&(peak=values[i],peakTs=axis[i]);let plain=x=>x,color=s.total>0?ACTION_COLORS[s.action]??plain:import_chalk.default.dim,trend=s.total>0?plain:import_chalk.default.dim;rows.push([color(labelForAction(s.action)),trend(generateSparkline(values)),formatCount(s.total),peak>0?formatCount(peak):"--",peak>0?formatUtcTime(new Date(peakTs).getTime(),needsDate):"--"])}return table(rows,{align:["l","l","r","r","r"],hsep:3}).split(`
9
9
  `).map(line2=>` ${line2}`.trimEnd()).join(`
10
10
  `)}var NO_SERVER_MESSAGE="Response Error";function apiServerMessage(error){let message=isAPIError(error)?error.serverMessage:void 0;return message&&message!==NO_SERVER_MESSAGE?message:void 0}var FIREWALL_O11Y_ALERT_TYPES=["botId_anomaly","firewallSystemRule_anomaly","firewallCustomRule_anomaly"],FIREWALL_ANOMALY_TYPE="firewall_anomaly",SYS_DOS_MITIGATION_RULE_ID="sys_dos_mitigation",SYSTEM_RULE_ANOMALY_TYPE="firewallSystemRule_anomaly",FIREWALL_ACTIVITY_PLAN_MESSAGE="Traffic and alerts need Observability Plus.",FIREWALL_ALERTS_PARTIAL_ERROR_MESSAGE="Couldn't load every alert source.";function reduceAttackAnomaly(anomaly){return Object.keys(anomaly.affectedHostMap).reduce((acc,host)=>{acc.hosts.push(host);let challenged=anomaly.affectedHostMap[host].ddosAlerts?.["sys_dos_mitigation:challenge"]?.totalReqs||0,denied=anomaly.affectedHostMap[host].ddosAlerts?.["sys_dos_mitigation:deny"]?.totalReqs||0;return acc.challenged+=challenged,acc.denied+=denied,acc.count+=challenged+denied,acc},{hosts:[],challenged:0,denied:0,count:0})}function hostsFromAnomaly(anomaly){return Object.entries(anomaly.affectedHostMap).map(([host,data])=>{let challenged=data.ddosAlerts?.["sys_dos_mitigation:challenge"]?.totalReqs||0,denied=data.ddosAlerts?.["sys_dos_mitigation:deny"]?.totalReqs||0;return{name:host,count:challenged+denied}}).filter(row=>row.count>0).sort((a,b)=>b.count-a.count)}function mapAttackAnomaly(anomaly){let reduced=reduceAttackAnomaly(anomaly),parts=["System rule"];return reduced.denied>0&&parts.push(labelForAction("deny")),reduced.challenged>0&&parts.push(labelForAction("challenge")),{id:`${anomaly.ownerId}-${anomaly.projectId}-${anomaly.startTime}`,title:"DDoS Mitigation",type:FIREWALL_ANOMALY_TYPE,startedAt:anomaly.startTime,resolvedAt:anomaly.endTime||void 0,count:reduced.count,detail:parts.join(" \xB7 "),action:reduced.denied>=reduced.challenged?"deny":"challenge",ruleId:SYS_DOS_MITIGATION_RULE_ID,host:reduced.hosts[0]}}function mapO11yAlert(alert){if(!alert.startedAt)return null;let action=alert.data?.action,ruleId=alert.data?.ruleId,detailParts=[alert.type,action?labelForAction(action):void 0,ruleId].filter(Boolean);return{id:alert.id||`${alert.type}-${alert.startedAt}`,title:alert.title||alert.type||"Firewall alert",type:alert.type||"unknown",startedAt:alert.startedAt,resolvedAt:alert.resolvedAt,count:alert.data?.count,detail:detailParts.filter(p=>p!==alert.title).join(" \xB7 ")||void 0,action,ruleId,path:alert.data?.path}}var ATTACK_STATUS_MAX_DAYS=7;async function getAttackStatus(client,opts){let query=new URLSearchParams;if(query.set("projectId",opts.projectId),query.set("teamId",opts.teamId),opts.sinceDays!==void 0){let sinceDays=Math.min(ATTACK_STATUS_MAX_DAYS,Math.max(1,Math.ceil(opts.sinceDays)));query.set("since",String(sinceDays))}return client.fetch(`/v1/security/firewall/attack-status?${query.toString()}`,{accountId:opts.teamId,signal:opts.signal})}var O11Y_ALERTS_LIMIT=200;async function getFirewallO11yAlerts(client,opts){let query=new URLSearchParams;query.set("teamId",opts.teamId),query.set("projectId",opts.projectId),query.set("from",opts.from.toISOString()),query.set("to",opts.to.toISOString()),query.set("limit",String(O11Y_ALERTS_LIMIT));for(let type of FIREWALL_O11Y_ALERT_TYPES)query.append("types",type);return(await client.fetch(`/alerts/v3/groups?${query.toString()}`,{accountId:opts.teamId,signal:opts.signal})).flatMap(g=>g.alerts??[]).map(mapO11yAlert).filter(a=>a!==null)}var ALERTS_TIMEOUT_MS=2e4;function sourceFailureReason(err){return isAPIError(err)&&err.status===408||err instanceof Error&&(err.name==="TimeoutError"||err.name==="AbortError")?"timed out":isAPIError(err)&&err.status===402?"needs Observability Plus":isAPIError(err)&&typeof err.status=="number"?`HTTP ${err.status}`:err instanceof Error&&err.message?err.message:"unknown error"}function resolveAlertsWindow(opts){let now=Date.now(),to=opts.to??new Date(now),from=opts.from??new Date(to.getTime()-864e5*(opts.sinceDays??1)),sinceDays=opts.sinceDays??Math.max(1,Math.ceil((now-from.getTime())/864e5));return{from,to,sinceDays}}function classifyAlertSourceError(err){if(isAPIError(err)&&(err.status===401||err.status===403))throw err;return isAPIError(err)&&err.status===402?{reason:"plan",message:FIREWALL_ACTIVITY_PLAN_MESSAGE}:{reason:"error",message:apiServerMessage(err)||!isAPIError(err)&&err instanceof Error&&err.message||FIREWALL_ALERTS_PARTIAL_ERROR_MESSAGE}}async function getFirewallAlertsDetailed(client,opts){let{from,to,sinceDays}=resolveAlertsWindow(opts),timeoutMs=opts.timeoutMs??ALERTS_TIMEOUT_MS,signal=AbortSignal.timeout(timeoutMs),[o11yResult,attackResult]=await Promise.allSettled([getFirewallO11yAlerts(client,{...opts,from,to,signal}),getAttackStatus(client,{...opts,sinceDays,signal})]),errors=[],o11yAlerts=[],o11y;o11yResult.status==="fulfilled"?o11yAlerts=o11yResult.value:(o11y=classifyAlertSourceError(o11yResult.reason),errors.push({source:"alerts",message:sourceFailureReason(o11yResult.reason)}));let mappedAttacks=[],attackStatus;attackResult.status==="fulfilled"?mappedAttacks=(attackResult.value.anomalies||[]).map(mapAttackAnomaly):(attackStatus=classifyAlertSourceError(attackResult.reason),errors.push({source:"attackStatus",message:sourceFailureReason(attackResult.reason)}));let resolvedCutoff=from.getTime();return{alerts:mappedAttacks.concat(o11yAlerts.filter(a=>!a.resolvedAt||a.resolvedAt>resolvedCutoff)).sort((a,b)=>!a.resolvedAt&&b.resolvedAt?-1:a.resolvedAt&&!b.resolvedAt?1:b.startedAt-a.startedAt),o11y,attackStatus,errors}}function alertsIncompleteMessage(errors){return`Attack count and alerts may be incomplete: ${errors.map(e=>`${e.source==="alerts"?"alerts":"attack history"} ${e.message}`).join("; ")}.`}function countAttacksMitigated(alerts,windowStartMs,windowEndMs){return alerts.filter(alert=>isAttackAlert(alert)&&alertOverlapsWindow(alert,windowStartMs,windowEndMs)).length}function alertOverlapsWindow(alert,windowStartMs,windowEndMs){return alert.startedAt<=windowEndMs&&(alert.resolvedAt??Number.POSITIVE_INFINITY)>=windowStartMs}function isAttackAlert(alert){return alert.type===FIREWALL_ANOMALY_TYPE?!0:alert.type===SYSTEM_RULE_ANOMALY_TYPE&&alert.ruleId===SYS_DOS_MITIGATION_RULE_ID}var O11Y_ALERT_ID_PREFIX="al_",INSPECT_FALLBACK_DAYS=7;function isO11yAlertId(id){return id.startsWith(O11Y_ALERT_ID_PREFIX)}function parseLegacyAlertStartTime(id){let match=id.match(/-(\d{13})$/);return match?Number(match[1]):void 0}function daysCovering(startMs,endMs){return Math.max(1,Math.ceil((endMs-startMs)/864e5))}function mapGroupAsAlert(group,alertId){let nested=(group.alerts??[]).map(mapO11yAlert).filter(a=>a!==null),hit=nested.find(a=>a.id===alertId)??nested[0];if(hit)return hit;let startedAt=group.recordedStartedAt;return startedAt?mapO11yAlert({id:alertId,title:group.title,type:group.type,startedAt,resolvedAt:group.recordedResolvedAt,data:group.alerts?.[0]?.data}):null}async function getO11yAlertById(client,opts){let query=new URLSearchParams;query.set("teamId",opts.teamId),query.set("projectId",opts.projectId);try{let group=await client.fetch(`/alerts/v3/groups/${encodeURIComponent(opts.alertId)}?${query.toString()}`,{accountId:opts.teamId,signal:opts.signal});return mapGroupAsAlert(group,opts.alertId)}catch(err){if(isAPIError(err)&&err.status===404)return null;throw err}}async function findFirewallAlert(client,opts){let timeoutMs=opts.timeoutMs??ALERTS_TIMEOUT_MS,budget=()=>AbortSignal.timeout(timeoutMs),now=Date.now();if(isO11yAlertId(opts.alertId)){let fromGroup2=await getO11yAlertById(client,{...opts,signal:budget()});if(fromGroup2)return{alert:fromGroup2};let from=new Date(now-864e5*INSPECT_FALLBACK_DAYS),hit=(await getFirewallO11yAlerts(client,{projectId:opts.projectId,teamId:opts.teamId,from,to:new Date(now),signal:budget()})).find(a=>a.id===opts.alertId);return hit?{alert:hit}:null}let startTime=parseLegacyAlertStartTime(opts.alertId),sinceDays=startTime?daysCovering(startTime,now)+1:INSPECT_FALLBACK_DAYS,anomaly=((await getAttackStatus(client,{projectId:opts.projectId,teamId:opts.teamId,sinceDays,signal:budget()}).catch(err=>{if(isAPIError(err)&&(err.status===401||err.status===403))throw err;return{anomalies:[]}})).anomalies||[]).find(a=>`${a.ownerId}-${a.projectId}-${a.startTime}`===opts.alertId);if(anomaly)return{alert:mapAttackAnomaly(anomaly),hosts:hostsFromAnomaly(anomaly)};let fromGroup=await getO11yAlertById(client,{...opts,signal:budget()}).catch(err=>{if(isAPIError(err)&&(err.status===401||err.status===403))throw err;return null});return fromGroup?{alert:fromGroup}:null}var AI_BOTS_CATEGORY_ACTIONS=["allow","log","deny"];function getAiBotsCategories(ruleset,catalogGroups){return[...new Set([...Object.keys(catalogGroups??{}),...Object.keys(ruleset?.ruleGroups??{})])].sort().map(ruleGroupId=>({id:ruleGroupId.replace(/_/g,"-"),ruleGroupId,name:catalogGroups?.[ruleGroupId]?.name??formatCategoryName(ruleGroupId)}))}function formatCategoryName(ruleGroupId){return ruleGroupId.split("_").map(word=>word==="ai"?"AI":word[0].toUpperCase()+word.slice(1)).join(" ")}function getAiBotsCategoryAction(ruleset,ruleGroupId){if(!ruleset?.active)return"allow";let group=ruleset.ruleGroups?.[ruleGroupId];return group?.active===!1?"allow":group?.action??ruleset.action??"log"}function getAiBotsCategoryActionAfterEdit(ruleset,ruleGroupId){if(!ruleset)return"log";if(ruleset.active)return getAiBotsCategoryAction(ruleset,ruleGroupId);let group=ruleset.ruleGroups?.[ruleGroupId];return group?.active?group.action??"log":"allow"}function hasAiBotsCategories(ruleset){return Object.keys(ruleset?.ruleGroups??{}).length>0}function getAiBotsCategoryDetails(ruleset){if(hasAiBotsCategories(ruleset))return getAiBotsCategories(ruleset).map(category=>({...category,action:getAiBotsCategoryAction(ruleset,category.ruleGroupId)}))}function aiBotsJsonStatus(ruleset){let categories=getAiBotsCategoryDetails(ruleset);return{enabled:ruleset?.active??!1,action:categories?null:ruleset?.action??null,...categories?{categories}:{}}}var MANAGED_BOT_RULE_IDS=["bot-protection","ai-bots","bot-id"],ALIASES={"bot-protection":"bot-protection","bot protection":"bot-protection",bot_protection:"bot-protection",bot_filter:"bot-protection",managed_bot_protection:"bot-protection",managed_bot_filter:"bot-protection","ai-bots":"ai-bots","ai bots":"ai-bots",ai_bots:"ai-bots",managed_ai_bots:"ai-bots","bot-id":"bot-id",botid:"bot-id",bot_id:"bot-id"},ACTIONS={"bot-protection":["off","log","challenge"],"ai-bots":["allow","log","challenge","deny"],"bot-id":["basic","deep-analysis"]},NAMES={"bot-protection":"Bot Protection","ai-bots":"AI Bots","bot-id":"BotID"},WAF_RULE_IDS={"bot-protection":"managed_bot_protection","ai-bots":"managed_ai_bots"};function resolveManagedBotRuleId(identifier){if(identifier)return ALIASES[identifier.trim().toLowerCase()]}function managedBotActions(id,category){return category?AI_BOTS_CATEGORY_ACTIONS:ACTIONS[id]}function formatManagedBotAction(action){return action==="deep-analysis"?"Deep Analysis":action.charAt(0).toUpperCase()+action.slice(1)}function botProtectionConfig(managedRules){return managedRules?.bot_filter??managedRules?.bot_protection}function currentBotProtectionAction(config){let ruleset=botProtectionConfig(config?.managedRules);return ruleset?.active?ruleset.action==="log"?"log":"challenge":"off"}function currentAiBotsAction(config){let ruleset=config?.managedRules?.ai_bots;return ruleset?.active?ruleset.action==="challenge"?"challenge":ruleset.action==="deny"?"deny":"log":"allow"}function currentBotIdAction(config){return config?.botIdEnabled?"deep-analysis":"basic"}function getManagedBotRule(config,id){let categories=id==="ai-bots"?getAiBotsCategoryDetails(config?.managedRules?.ai_bots):void 0,action=categories?null:id==="bot-protection"?currentBotProtectionAction(config):id==="ai-bots"?currentAiBotsAction(config):currentBotIdAction(config);return{id,name:NAMES[id],action,wafRuleId:WAF_RULE_IDS[id],...categories?{categories}:{}}}function getManagedBotRules(config){return MANAGED_BOT_RULE_IDS.map(id=>getManagedBotRule(config,id))}function parseManagedBotAction(id,raw,category){let action=raw.trim().toLowerCase().replace(/\s+/g,"-"),valid=managedBotActions(id,category);return valid.includes(action)?{action}:{error:`Invalid action "${raw}" for ${category?.name??NAMES[id]}. Use ${valid.join(", ")}.`}}function buildManagedBotPatch(id,action,category){if(category)return{action:"managedRuleGroup.update",id:"ai_bots",value:{[category.ruleGroupId]:action==="allow"?{active:!1}:{active:!0,action}}};if(id==="bot-id")return{action:"botId.toggle",value:action==="deep-analysis"};let patchId=id==="bot-protection"?"bot_protection":"ai_bots";return action==="off"||action==="allow"?{action:"managedRules.update",id:patchId,value:{active:!1}}:{action:"managedRules.update",id:patchId,value:{active:!0,action}}}function suggestedManagedBotAction(rule){return rule.id==="bot-protection"?rule.action==="challenge"?"log":"challenge":rule.id==="ai-bots"?rule.action==="deny"?"allow":"deny":rule.action==="deep-analysis"?"basic":"deep-analysis"}function managedBotTrafficWarning(id,from,to,category){if(id==="ai-bots"&&to==="deny")return category?`Deny blocks known ${category.name} traffic when published.`:"AI Bots deny blocks known AI crawlers from this project.";if(id==="bot-protection"&&from==="off"&&to==="challenge")return"Bot Protection challenge will present a verification page to non-browser traffic."}function managedBotJson(rule){return{id:rule.id,name:rule.name,action:rule.action,wafRuleId:rule.wafRuleId??null,...rule.categories?{categories:rule.categories}:{}}}function suggestedManagedBotEditCommand(rule){let category=rule.categories?.[0];if(rule.id==="ai-bots"&&!category)return"firewall rules update ai-bots";let action=suggestedManagedBotAction(category?{...rule,action:category.action}:rule);return`firewall rules update ${rule.id}${category?` --category ${category.id}`:""} --action ${action}`}function projectScope(project,teamId,teamSlug){return{type:"project",projectId:project.id,teamId,...teamSlug?{teamSlug}:{},displayName:project.name}}function firewallConfigUrl(scope,path=""){let query=new URLSearchParams;return scope.type==="project"?(query.set("projectId",scope.projectId),scope.teamId&&query.set("teamId",scope.teamId),`/v1/security/firewall/config${path}?${query.toString()}`):(query.set("teamId",scope.teamId),`/v1/security/firewall/team-config${path}?${query.toString()}`)}async function listFirewallConfigs(client,scope){return client.fetch(firewallConfigUrl(scope))}async function activateFirewallConfig(client,scope,configVersion){return client.fetch(firewallConfigUrl(scope,`/${configVersion}/activate`),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})})}var PRIORITY_PROJECT_ENABLE_COMMAND="project priority enable",BUY_PRO_COMMAND="buy pro";function withGlobalFlags(client,commandTemplate,scope,options={}){let template=scope?.type==="team"?`${commandTemplate} --team-level`:commandTemplate;return buildCommandWithGlobalFlags(client.argv,template,void 0,{globalFlags:"all",preserveProject:options.preserveProject??!0,excludeFlags:options.excludeFlags})}async function resolveFirewallScope(client,flags){if(flags["--team-level"]&&flags["--project"]){let message="Cannot specify both --team-level and --project. Use one or the other.";return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},2),2):(output_manager_default.error(message),2)}if(flags["--team-level"]){let{team}=await getScope(client);if(!team){let message="Team-level firewall requires a team scope. Personal accounts are not supported. Run `vercel switch` to select a team or pass --scope <team>.";return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.MISSING_SCOPE,message},1),1):(output_manager_default.error(message),1)}return{type:"team",teamId:team.id,displayName:team.slug}}let link=await requireProjectContext(client,"firewall",flags["--project"]);if(typeof link=="number")return link;let{project,org}=link;return{type:"project",projectId:project.id,teamId:org.type==="team"?org.id:void 0,teamSlug:org.type==="team"?org.slug:void 0,displayName:project.name}}function mentionsPriorityProject(message){return/priority\s+project/i.test(message)||/priority\s+tier/i.test(message)}function teamPlan(scope){return scope.teamId?teamCache.get(scope.teamId)?.billing?.plan:void 0}function priorityTeam(scope){let cached=scope.teamId?teamCache.get(scope.teamId):void 0;if(scope.type==="team")return{id:scope.teamId,slug:scope.displayName,name:cached?.name??null,scopeArg:scope.displayName};if(!scope.teamId)return null;let slug=scope.teamSlug??cached?.slug??null;return{id:scope.teamId,slug,name:cached?.name??null,scopeArg:slug??scope.teamId}}function teamLabel(team){return team.name&&team.name!==team.slug?`${team.slug} (${team.name})`:team.slug}function styledCommand(command,plain){return plain?getCommandNamePlain(command):getCommandName(command)}function priorityProjectFix(scope){let excludeFlags=["--non-interactive","--project","--yes","--scope","--team"],project=scope.type==="project"?{id:scope.projectId,name:scope.displayName}:null,team=priorityTeam(scope),plan=teamPlan(scope)??null,data={project,team:team&&{id:team.id,slug:team.slug,name:team.name},plan},projectToken=project?quoteArg(project.name):"<project>",scopeFlag=team?` --scope ${quoteArg(team.scopeArg)}`:"",enable4=`${PRIORITY_PROJECT_ENABLE_COMMAND} ${projectToken}${scopeFlag}`;if(!team){let hint="Priority projects are only available on team accounts. Use --scope to specify one.";return{command:"",hint,plainHint:hint,when:hint,excludeFlags,preserveProject:!1,reason:AGENT_REASON.MISSING_SCOPE,data}}if(plan==="hobby"||plan==="oss"){let upgrade=`${BUY_PRO_COMMAND}${scopeFlag}`,hint=plain2=>`Priority Projects are only available on Pro or Enterprise team plans. Upgrade with ${styledCommand(upgrade,plain2)}, then run ${styledCommand(enable4,plain2)}.`;return{command:upgrade,hint:hint(!1),plainHint:hint(!0),when:"a person has approved upgrading the plan",excludeFlags,preserveProject:!1,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,scope:team.scopeArg,data}}let shown=styledCommand(enable4,!1),plain=styledCommand(enable4,!0),placeholder="Replace <project> with a project on this team.";return{command:enable4,hint:project?shown:`${shown} ${placeholder}`,plainHint:project?plain:`${plain} ${placeholder}`,when:project?"user runs this command in an interactive terminal":"Replace <project> with a project on this team.",excludeFlags,preserveProject:!1,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,scope:team.scopeArg,data}}function mapFirewallApiError(e,scope,fallback){let err=e;return scope.type==="team"&&err.status===403?err.code==="plan_not_supported"?`Team-level firewall requires an Enterprise plan (current team: "${scope.displayName}"). Pass --scope <team> or run \`vercel switch\` to target a different team.`:`You need to be a team owner to manage the team-level firewall for "${scope.displayName}".${err.message?` (${err.message})`:""}`:err.message||fallback}function priorityProjectMessage(scope,fix){let team=fix.data.team,label=team?.slug!=null?teamLabel({slug:team.slug,name:team.name}):void 0;return scope.type==="project"?label?`This rule requires a Priority project for ${scope.displayName} on team ${label}.`:`This rule requires a Priority project. ${fix.hint}`:label?`This rule requires a Priority project on team ${label}.`:"This rule requires a Priority project."}function failPriorityProjectGate(client,error,scope,opts){let serverMessage=apiServerMessage(error);if(!serverMessage||!mentionsPriorityProject(serverMessage))return null;let fix=priorityProjectFix(scope),message=priorityProjectMessage(scope,fix),payload={status:AGENT_STATUS.ERROR,reason:fix.reason,message,userActionRequired:!0,hint:fix.plainHint,retryable:!1,...fix.scope?{scope:fix.scope}:{},data:fix.data,...fix.command?{next:[{command:buildCommandWithGlobalFlags(client.argv,fix.command,packageName,{globalFlags:"all",preserveProject:!1,excludeFlags:fix.excludeFlags}),when:fix.when}]}:{}};return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,payload,1),opts?.json?(output_manager_default.stopSpinner(),writeAgentError(client,payload),1):(output_manager_default.error(message),fix.command&&output_manager_default.log(fix.hint),1)}function getRulePayload(flags){let legacy=flags["--json"];return legacy!==void 0&&flags["--data"]!==void 0?(output_manager_default.error("Can't use --data with --json."),2):(legacy!==void 0&&output_manager_default.warning("--json is deprecated for rule payloads. Use --data."),flags["--data"]??legacy)}async function parseSubcommandArgs(argv,command,client,commandPath){let parsedArgs,fullPath=commandPath||command.name;try{parsedArgs=parseSubcommandArguments(argv,command)}catch(err){if(client?.nonInteractive){let rawMessage=err instanceof Error?err.message:String(err),flags=getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0});return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:rawMessage,next:[{command:getCommandNamePlain(`firewall ${fullPath} ${flags.join(" ")}`.trim()),when:"fix options and retry"}]},2),2}return printError(err),2}return parsedArgs}async function confirmAction(client,skipConfirmation,message,details){return skipConfirmation?!0:client.nonInteractive||!client.stdin.isTTY?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`${message} Re-run with --yes to confirm.`,next:[{command:buildCommandWithYes(client.argv),when:"re-run with --yes to confirm"}]}),process.exit(1),!1):(details&&output_manager_default.print(` ${details}
@@ -265,7 +265,7 @@ ${table2}
265
265
  `);return}output_manager_default.print(`
266
266
  ${formattedDiff}
267
267
 
268
- `)}function formatChangedEnvironments(environments){return environments.length===0?import_chalk49.default.gray("-"):environments.join(", ")}function getVersionAuthor(version){return version.metadata?.creator?.name??version.createdBy??null}function getVersionMessage(version){return version.message?version.message:version.revision===0?"Flag created":null}function getVersionsHelpParent(){return{...versionsSubcommand,name:"flags versions"}}function buildNextPageCommand3(flagArg,flags,nextCursor){let environment=flags["--environment"],baseFlags=getCommandFlags(flags,["_","--next","--cursor","--environment","--json"]),environmentFlag=environment?` --environment ${quoteArg(environment)}`:"";return`flags versions ${quoteArg(flagArg)}${baseFlags}${environmentFlag} --next ${quoteArg(nextCursor)}`}async function getSdkKeys(client,projectId){output_manager_default.debug(`Fetching SDK keys for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return(await client.fetch(url)).data}async function createSdkKey(client,projectId,request){output_manager_default.debug(`Creating SDK key for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return await client.fetch(url,{method:"PUT",body:request})}async function deleteSdkKey(client,projectId,hashKey){output_manager_default.debug(`Deleting SDK key ${hashKey} for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys/${encodeURIComponent(hashKey)}`;await client.fetch(url,{method:"DELETE",json:!1})}var FLAG_EVALUATIONS_METRIC="vercel.flags.evaluation",FLAG_EVALUATIONS_AGGREGATION="sum",EVALUATIONS_TIMEOUT_MS=5e3;async function countFlagEvaluations(client,options){let{ownerId,projectId,flagSlug,startTime,endTime}=options;try{let body={scope:{ownerId,projectIds:[projectId]},timeRange:{start:startTime.toISOString(),end:endTime.toISOString()},metrics:{value:{metric:FLAG_EVALUATIONS_METRIC,aggregation:FLAG_EVALUATIONS_AGGREGATION}},outputs:["value"],filter:`flagKey:${JSON.stringify(flagSlug)}`},response=await client.fetch(OBSERVABILITY_METRICS_PATH,{method:"POST",body:JSON.stringify(body),headers:{"Content-Type":"application/json"},accountId:ownerId,signal:AbortSignal.timeout(EVALUATIONS_TIMEOUT_MS),retry:{retries:0},bailOn429:!0}),total=0;for(let row of response.summary??[]){let value=Number(row.values.value);Number.isFinite(value)&&(total+=value)}return total}catch(err){return output_manager_default.debug(`Could not count evaluations for flag ${flagSlug}: ${err instanceof Error?err.message:String(err)}`),null}}var FlagsEvaluationsTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionGranularity(granularity){granularity&&this.trackCliOption({option:"granularity",value:isFlagEvaluationsGranularity(granularity)?granularity:this.redactedValue})}trackCliOptionGroupBy(groupBy){groupBy&&groupBy.length>0&&this.trackCliOption({option:"group-by",value:groupBy.map(dimension=>isFlagEvaluationsDimension(dimension)?dimension:this.redactedValue).join(",")})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var FLAG_EVALUATIONS_ROLLUP=getRollupColumnName(FLAG_EVALUATIONS_METRIC,FLAG_EVALUATIONS_AGGREGATION),MAX_GROUPS=100,DEFAULT_IN_CODE_VARIANT="Default in Code",PERSONAL_ACCOUNT_MESSAGE="Flag evaluations are available for team-owned projects only. Select a team with --scope <team>.",FORBIDDEN_MESSAGE="You do not have permission to read feature flags for this project, which flag evaluations require.";function getCellValue(cell){return cell==null?"":String(cell)}function sanitizeGroupValue(value){return sanitizeForTerminal(value).replace(/\p{Cc}/gu,"")}function getEvaluationVariantValue(flag,variantId){return variantId?flag.variants.find(variant=>variant.id===variantId)?.value??null:DEFAULT_IN_CODE_VARIANT}function getVariantDisplayName(flag,variantId){if(!variantId||variantId==="(not set)"||variantId===DEFAULT_IN_CODE_VARIANT)return DEFAULT_IN_CODE_VARIANT;let variant=flag.variants.find(item=>item.id===variantId);return variant?formatVariantListSummary(variant):variantId}function getSdkKeyLabel(sdkKey){return sdkKey.label?`${sdkKey.label} (${sdkKey.environment})`:`${sdkKey.environment} ${sdkKey.type} key`}function getSdkKeyDisplayName(sdkKeys2,hashKey){if(!hashKey)return"(not set)";let sdkKey=sdkKeys2.get(hashKey);return sdkKey?getSdkKeyLabel(sdkKey):`${hashKey} (unknown or deleted key)`}function handleCommandError(client,error,jsonOutput){if(!jsonOutput)return printError(error),1;if(isAPIError(error))return outputError(client,!0,error.code||"API_ERROR",error.serverMessage||`API error (${error.status}).`);let message=error instanceof Error?error.message:String(error);return outputError(client,!0,"UNEXPECTED_ERROR",message)}function handleMetricsQueryError(client,error,jsonOutput){if(!isAPIError(error))return handleCommandError(client,error,jsonOutput);let genericForbidden=error.status===403&&(!error.serverMessage||error.serverMessage==="Forbidden"||error.serverMessage==="Response Error");return handleApiError(error,jsonOutput,client,genericForbidden?{403:{code:"FORBIDDEN",message:FORBIDDEN_MESSAGE}}:{})}function getGroupKey(row,fields){return JSON.stringify(fields.map(field=>getCellValue(row[field])))}function limitEvaluationGroups(response,fields){if(response.summary.length<=MAX_GROUPS)return{response,truncated:!1};let summary=response.summary.slice(0,MAX_GROUPS),visibleGroups=new Set(summary.map(row=>getGroupKey(row,fields)));return{response:{...response,summary,data:response.data?.filter(row=>visibleGroups.has(getGroupKey(row,fields)))},truncated:!0}}function formatEvaluationsJson(flag,dimensions,sdkKeys2,response,startTime,endTime,granularity,truncated){return`${JSON.stringify({flag:flag?.slug??null,...flag?{variants:Object.fromEntries(flag.variants.map(({id,value})=>[id,value]))}:{},groupBy:dimensions,startTime:startTime.toISOString(),endTime:endTime.toISOString(),granularity,truncated,buckets:(response.data??[]).map(row=>{let bucket={timestamp:row.timestamp};for(let dimension of dimensions){let value=getCellValue(row[FLAG_EVALUATIONS_DIMENSIONS[dimension].field]);switch(dimension){case"variant":bucket.variantId=value,bucket.variantValue=flag?getEvaluationVariantValue(flag,value):null;break;case"flag":bucket.flagKey=value;break;case"sdk-key":{let sdkKey=sdkKeys2.get(value);bucket.sdkKeyId=value,bucket.sdkKeyLabel=sdkKey?.label??null,bucket.sdkKeyEnvironment=sdkKey?.environment??null;break}case"client":bucket.clientName=value;break;case"environment":bucket.environment=value;break;case"reason":bucket.reason=value;break;case"datafile-revision":bucket.datafileRevision=value;break}}return bucket.evaluations=row[FLAG_EVALUATIONS_ROLLUP]??null,bucket})},null,2)}
268
+ `)}function formatChangedEnvironments(environments){return environments.length===0?import_chalk49.default.gray("-"):environments.join(", ")}function getVersionAuthor(version){return version.metadata?.creator?.name??version.createdBy??null}function getVersionMessage(version){return version.message?version.message:version.revision===0?"Flag created":null}function getVersionsHelpParent(){return{...versionsSubcommand,name:"flags versions"}}function buildNextPageCommand3(flagArg,flags,nextCursor){let environment=flags["--environment"],baseFlags=getCommandFlags(flags,["_","--next","--cursor","--environment","--json"]),environmentFlag=environment?` --environment ${quoteArg(environment)}`:"";return`flags versions ${quoteArg(flagArg)}${baseFlags}${environmentFlag} --next ${quoteArg(nextCursor)}`}async function getSdkKeys(client,projectId){output_manager_default.debug(`Fetching SDK keys for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return(await client.fetch(url)).data}async function createSdkKey(client,projectId,request){output_manager_default.debug(`Creating SDK key for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys`;return await client.fetch(url,{method:"PUT",body:request})}async function deleteSdkKey(client,projectId,hashKey){output_manager_default.debug(`Deleting SDK key ${hashKey} for project ${projectId}`);let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/sdk-keys/${encodeURIComponent(hashKey)}`;await client.fetch(url,{method:"DELETE",json:!1})}var FLAG_EVALUATIONS_METRIC="vercel.flags.evaluation",FLAG_EVALUATIONS_AGGREGATION="sum",EVALUATIONS_TIMEOUT_MS=5e3;function toWholeSecond(date){return new Date(Math.floor(date.getTime()/1e3)*1e3).toISOString()}async function countFlagEvaluations(client,options){let{ownerId,projectId,flagSlug,startTime,endTime}=options;try{let body={scope:{ownerId,projectIds:[projectId]},timeRange:{start:toWholeSecond(startTime),end:toWholeSecond(endTime)},metrics:{value:{metric:FLAG_EVALUATIONS_METRIC,aggregation:FLAG_EVALUATIONS_AGGREGATION}},outputs:["value"],filter:`flagKey:${JSON.stringify(flagSlug)}`},response=await client.fetch(OBSERVABILITY_METRICS_PATH,{method:"POST",body:JSON.stringify(body),headers:{"Content-Type":"application/json"},accountId:ownerId,signal:AbortSignal.timeout(EVALUATIONS_TIMEOUT_MS),retry:{retries:0},bailOn429:!0}),total=0;for(let row of response.summary??[]){let value=Number(row.values.value);Number.isFinite(value)&&(total+=value)}return total}catch(err){return output_manager_default.debug(`Could not count evaluations for flag ${flagSlug}: ${err instanceof Error?err.message:String(err)}`),null}}var FlagsEvaluationsTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionGranularity(granularity){granularity&&this.trackCliOption({option:"granularity",value:isFlagEvaluationsGranularity(granularity)?granularity:this.redactedValue})}trackCliOptionGroupBy(groupBy){groupBy&&groupBy.length>0&&this.trackCliOption({option:"group-by",value:groupBy.map(dimension=>isFlagEvaluationsDimension(dimension)?dimension:this.redactedValue).join(",")})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var FLAG_EVALUATIONS_ROLLUP=getRollupColumnName(FLAG_EVALUATIONS_METRIC,FLAG_EVALUATIONS_AGGREGATION),MAX_GROUPS=100,DEFAULT_IN_CODE_VARIANT="Default in Code",PERSONAL_ACCOUNT_MESSAGE="Flag evaluations are available for team-owned projects only. Select a team with --scope <team>.",FORBIDDEN_MESSAGE="You do not have permission to read feature flags for this project, which flag evaluations require.";function getCellValue(cell){return cell==null?"":String(cell)}function sanitizeGroupValue(value){return sanitizeForTerminal(value).replace(/\p{Cc}/gu,"")}function getEvaluationVariantValue(flag,variantId){return variantId?flag.variants.find(variant=>variant.id===variantId)?.value??null:DEFAULT_IN_CODE_VARIANT}function getVariantDisplayName(flag,variantId){if(!variantId||variantId==="(not set)"||variantId===DEFAULT_IN_CODE_VARIANT)return DEFAULT_IN_CODE_VARIANT;let variant=flag.variants.find(item=>item.id===variantId);return variant?formatVariantListSummary(variant):variantId}function getSdkKeyLabel(sdkKey){return sdkKey.label?`${sdkKey.label} (${sdkKey.environment})`:`${sdkKey.environment} ${sdkKey.type} key`}function getSdkKeyDisplayName(sdkKeys2,hashKey){if(!hashKey)return"(not set)";let sdkKey=sdkKeys2.get(hashKey);return sdkKey?getSdkKeyLabel(sdkKey):`${hashKey} (unknown or deleted key)`}function handleCommandError(client,error,jsonOutput){if(!jsonOutput)return printError(error),1;if(isAPIError(error))return outputError(client,!0,error.code||"API_ERROR",error.serverMessage||`API error (${error.status}).`);let message=error instanceof Error?error.message:String(error);return outputError(client,!0,"UNEXPECTED_ERROR",message)}function handleMetricsQueryError(client,error,jsonOutput){if(!isAPIError(error))return handleCommandError(client,error,jsonOutput);let genericForbidden=error.status===403&&(!error.serverMessage||error.serverMessage==="Forbidden"||error.serverMessage==="Response Error");return handleApiError(error,jsonOutput,client,genericForbidden?{403:{code:"FORBIDDEN",message:FORBIDDEN_MESSAGE}}:{})}function getGroupKey(row,fields){return JSON.stringify(fields.map(field=>getCellValue(row[field])))}function limitEvaluationGroups(response,fields){if(response.summary.length<=MAX_GROUPS)return{response,truncated:!1};let summary=response.summary.slice(0,MAX_GROUPS),visibleGroups=new Set(summary.map(row=>getGroupKey(row,fields)));return{response:{...response,summary,data:response.data?.filter(row=>visibleGroups.has(getGroupKey(row,fields)))},truncated:!0}}function formatEvaluationsJson(flag,dimensions,sdkKeys2,response,startTime,endTime,granularity,truncated){return`${JSON.stringify({flag:flag?.slug??null,...flag?{variants:Object.fromEntries(flag.variants.map(({id,value})=>[id,value]))}:{},groupBy:dimensions,startTime:startTime.toISOString(),endTime:endTime.toISOString(),granularity,truncated,buckets:(response.data??[]).map(row=>{let bucket={timestamp:row.timestamp};for(let dimension of dimensions){let value=getCellValue(row[FLAG_EVALUATIONS_DIMENSIONS[dimension].field]);switch(dimension){case"variant":bucket.variantId=value,bucket.variantValue=flag?getEvaluationVariantValue(flag,value):null;break;case"flag":bucket.flagKey=value;break;case"sdk-key":{let sdkKey=sdkKeys2.get(value);bucket.sdkKeyId=value,bucket.sdkKeyLabel=sdkKey?.label??null,bucket.sdkKeyEnvironment=sdkKey?.environment??null;break}case"client":bucket.clientName=value;break;case"environment":bucket.environment=value;break;case"reason":bucket.reason=value;break;case"datafile-revision":bucket.datafileRevision=value;break}}return bucket.evaluations=row[FLAG_EVALUATIONS_ROLLUP]??null,bucket})},null,2)}
269
269
  `}async function evaluations(client,argv){let telemetry=new FlagsEvaluationsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(evaluationsSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,[flagArgument]=args,projectName=getProjectNameFromFlags(flags),since=flags["--since"],until=flags["--until"],granularity=flags["--granularity"],groupByArguments=flags["--group-by"]??[];telemetry.trackCliArgumentFlag(flagArgument),telemetry.trackCliOptionProject(projectName),telemetry.trackCliOptionSince(since),telemetry.trackCliOptionUntil(until),telemetry.trackCliOptionGranularity(granularity),telemetry.trackCliOptionGroupBy(groupByArguments.length>0?groupByArguments:void 0),telemetry.trackCliFlagJson(flags["--json"]);let jsonOutput=flags["--json"]??!1;if(granularity&&!isFlagEvaluationsGranularity(granularity))return outputError(client,jsonOutput,"INVALID_GRANULARITY",`Invalid granularity "${granularity}". Use one of: ${FLAG_EVALUATIONS_GRANULARITIES.join(", ")}.`);let invalidDimension=groupByArguments.find(dimension=>!isFlagEvaluationsDimension(dimension));if(invalidDimension!==void 0)return outputError(client,jsonOutput,"INVALID_GROUP_BY",`Invalid group-by dimension "${invalidDimension}". Use one of: ${FLAG_EVALUATIONS_DIMENSION_NAMES.join(", ")}.`);let dimensions=Array.from(new Set(groupByArguments.filter(isFlagEvaluationsDimension)));if(dimensions.length===0&&dimensions.push(flagArgument?"variant":"flag"),!flagArgument&&dimensions.includes("variant"))return outputError(client,jsonOutput,"MISSING_FLAG",`Grouping by variant needs a flag, because variants belong to one flag. Pass a flag: ${getCommandName("flags evaluations <flag> --group-by variant")}, or group the whole project by another dimension.`);let startTime,endTime,resolvedGranularity;try{if({startTime,endTime}=resolveTimeRange(since,until),startTime.getTime()>=endTime.getTime())throw new Error("The start time must be before the end time.");resolvedGranularity=computeGranularity(endTime.getTime()-startTime.getTime(),granularity),{startTime,endTime}=alignTimeRangeToGranularity(startTime,endTime,resolvedGranularity.duration)}catch(error){let message=error instanceof Error?error.message:String(error);return outputError(client,jsonOutput,"INVALID_TIME",message)}!jsonOutput&&resolvedGranularity.adjusted&&resolvedGranularity.notice&&output_manager_default.log(`Notice: ${resolvedGranularity.notice}`);let link;try{link=await getLinkedFlagsProject(client,projectName,{projectNotFoundHandling:jsonOutput?"return":"report"})}catch(error){return handleCommandError(client,error,jsonOutput)}if(link.status==="error")return jsonOutput?outputError(client,!0,"PROJECT_RESOLUTION_FAILED","Unable to resolve the requested Vercel project."):link.exitCode;if(link.status==="not_linked"){let code=projectName?"PROJECT_NOT_FOUND":"NOT_LINKED",message=projectName?`Project "${projectName}" was not found in the current scope.`:`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`;return outputError(client,jsonOutput,code,message)}if(link.org.type!=="team")return outputError(client,jsonOutput,"MISSING_SCOPE",PERSONAL_ACCOUNT_MESSAGE);client.config.currentTeam=link.org.id;let{project,org}=link,flag,sdkKeys2=new Map;try{let[resolvedFlag,resolvedSdkKeys]=await Promise.all([flagArgument?getFlag(client,project.id,flagArgument):void 0,dimensions.includes("sdk-key")?getSdkKeys(client,project.id).catch(error=>(output_manager_default.debug(`Could not load SDK keys: ${String(error)}`),jsonOutput||output_manager_default.warn("Could not load SDK key labels; SDK keys are shown as hashes."),[])):[]]);flag=resolvedFlag;for(let sdkKey of resolvedSdkKeys)sdkKeys2.set(sdkKey.hashKey,sdkKey)}catch(error){return handleCommandError(client,error,jsonOutput)}jsonOutput||output_manager_default.spinner("Querying flag evaluations...");let scope={type:"project",ownerId:org.id,projectIds:[project.id]},groupByFields=dimensions.map(dimension=>FLAG_EVALUATIONS_DIMENSIONS[dimension].field),response;try{let body=createCanonicalMetricsRequest({scope,metric:FLAG_EVALUATIONS_METRIC,selection:{metric:FLAG_EVALUATIONS_METRIC,aggregation:FLAG_EVALUATIONS_AGGREGATION},startTime,endTime,granularity:resolvedGranularity.duration,groupBy:groupByFields,filter:flag?`flagKey:${JSON.stringify(flag.slug)}`:void 0,limit:MAX_GROUPS+1,orderBy:"value",orderDirection:"desc"}),canonicalResponse=await client.fetch(OBSERVABILITY_METRICS_PATH,{method:"POST",body:JSON.stringify(body),headers:{"Content-Type":"application/json"},accountId:org.id,bailOn429:!0});response=canonicalResponseToMetricsResponse(canonicalResponse,FLAG_EVALUATIONS_ROLLUP,"value","desc")}catch(error){return handleMetricsQueryError(client,error,jsonOutput)}finally{jsonOutput||output_manager_default.stopSpinner()}let limited=limitEvaluationGroups(response,groupByFields);if(jsonOutput)return client.stdout.write(formatEvaluationsJson(flag,dimensions,sdkKeys2,limited.response,startTime,endTime,resolvedGranularity.duration,limited.truncated)),0;let headings=dimensions.map(dimension=>FLAG_EVALUATIONS_DIMENSIONS[dimension].heading);if(limited.truncated){let subject=headings.length===1?headings[0].toLowerCase():"groups";output_manager_default.warn(`Results are limited to the ${MAX_GROUPS} most evaluated ${subject}.`)}let headingToDimension=new Map(dimensions.map((dimension,index)=>[headings[index],dimension]));return client.stdout.write(formatText({...limited.response,data:limited.response.data?.map(row=>({...row,...Object.fromEntries(dimensions.map((dimension,index)=>[headings[index],getCellValue(row[FLAG_EVALUATIONS_DIMENSIONS[dimension].field])]))}))},{metric:FLAG_EVALUATIONS_METRIC,metricUnit:"count",aggregation:FLAG_EVALUATIONS_AGGREGATION,groupBy:headings,scope,projectName:project.name,teamName:org.slug,periodStart:startTime.toISOString(),periodEnd:endTime.toISOString(),granularity:resolvedGranularity.duration,presentation:{compact:!0,formatGroupValue:(field,value)=>{switch(headingToDimension.get(field)){case"variant":return sanitizeGroupValue(flag?getVariantDisplayName(flag,value):value);case"sdk-key":return sanitizeGroupValue(getSdkKeyDisplayName(sdkKeys2,value));default:return sanitizeGroupValue(value)||"(not set)"}}}})),0}var import_chalk50=__toESM(require_source(),1);async function createFlag(client,projectId,request){let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/flags`;output_manager_default.debug(`Creating feature flag ${request.slug} for project ${projectId}`),output_manager_default.debug(`API endpoint: PUT ${url}`),output_manager_default.debug(`Request body: ${JSON.stringify(request,null,2)}`);try{let response=await client.fetch(url,{method:"PUT",body:request});return output_manager_default.debug(`Response: ${JSON.stringify(response,null,2)}`),response}catch(err){if(output_manager_default.debug("API error occurred"),err instanceof Error){output_manager_default.debug(`Error message: ${err.message}`),output_manager_default.debug(`Error name: ${err.name}`),output_manager_default.debug(`Error stack: ${err.stack}`);let errWithBody=err;errWithBody.status&&output_manager_default.debug(`Error status: ${errWithBody.status}`),errWithBody.body&&output_manager_default.debug(`Error body: ${JSON.stringify(errWithBody.body,null,2)}`)}throw err}}var FlagsCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}trackCliOptionKind(kind){kind&&this.trackCliOption({option:"kind",value:kind})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionVariant(variants){variants?.length&&this.trackCliOption({option:"variant",value:this.redactedValue})}trackCliOptionDefaultVariant(defaultVariant){defaultVariant&&this.trackCliOption({option:"default-variant",value:this.redactedValue})}trackCliOptionEnvironmentVariant(environmentVariants){if(environmentVariants?.length){let environments=environmentVariants.map(input=>input.split("=")[0].trim()),allStandard=environments.every(environment=>STANDARD_ENVIRONMENTS.includes(environment));this.trackCliOption({option:"environment-variant",value:allStandard?STANDARD_ENVIRONMENTS.filter(environment=>environments.includes(environment)).join(","):this.redactedValue})}}};import{randomBytes}from"node:crypto";var VARIANT_ID_ALPHABET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function generateVariantId(size=21){let bytes=randomBytes(size),id="";for(let index=0;index<size;index++)id+=VARIANT_ID_ALPHABET[bytes[index]%VARIANT_ID_ALPHABET.length];return id}function parseVariantInput(input,kind,index){let{rawValue,rawLabel}=splitVariantInput(input,kind),validationError=validateVariantValue(rawValue,kind);if(validationError)throw new Error(`Invalid variant "${input}": ${validationError}`);return{id:generateVariantId(),value:parseVariantValue2(rawValue,kind),label:getVariantLabel(rawLabel,kind,index),description:""}}function validateVariantValue(value,kind){if(!value.trim())return"Variant value cannot be empty";if(kind==="boolean"){let loweredValue=value.toLowerCase();if(loweredValue!=="true"&&loweredValue!=="false")return"Boolean variant values must be true or false"}if(kind==="number"){let parsed=Number(value);if(!Number.isFinite(parsed))return"Number variants must be valid numeric values"}return kind==="json"&&!isValidJsonVariantValue(value)?"JSON variant values must be valid JSON":null}function splitVariantInput(input,kind){if(kind!=="json"){let separatorIndex=input.indexOf("=");return{rawValue:separatorIndex===-1?input.trim():input.slice(0,separatorIndex).trim(),rawLabel:separatorIndex===-1?void 0:input.slice(separatorIndex+1).trim()||void 0}}let trimmed=input.trim();if(isValidJsonVariantValue(trimmed))return{rawValue:trimmed};for(let index=trimmed.length-1;index>=0;index--){if(trimmed[index]!=="=")continue;let rawValue=trimmed.slice(0,index).trim(),rawLabel=trimmed.slice(index+1).trim();if(!(!rawValue||!isValidJsonVariantValue(rawValue)))return{rawValue,rawLabel:rawLabel||void 0}}return{rawValue:trimmed}}function getVariantLabel(rawLabel,kind,index){if(rawLabel)return rawLabel;if(kind==="json")return`Variant ${index+1}`}function parseVariantValue2(value,kind){return kind==="number"?Number(value):kind==="json"?JSON.parse(value):value}function isValidJsonVariantValue(value){try{return JSON.parse(value),!0}catch{return!1}}function normalizeOptionalInput(input){let value=input?.trim();return value||void 0}async function resolveOptionalInput(client,input,defaultValue,promptMessage){let value=normalizeOptionalInput(input);if(value!==void 0)return value;if(!client.stdin.isTTY)return defaultValue;let response=await client.input.text({message:promptMessage,default:defaultValue});return normalizeOptionalInput(response)||defaultValue}async function create(client,argv){let telemetryClient=new FlagsCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,[slug]=args;if(!slug)return output_manager_default.error("Please provide a slug for the feature flag"),output_manager_default.log(`Example: ${getCommandName("flags create my-feature")}`),2;let kind=flags["--kind"]||"boolean",description=flags["--description"],variantInputs=flags["--variant"]||[],defaultVariantSelector=normalizeOptionalInput(flags["--default-variant"]),environmentVariantInputs=flags["--environment-variant"]||[],projectName=getProjectNameFromFlags(flags);if(telemetryClient.trackCliArgumentSlug(slug),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionKind(kind),telemetryClient.trackCliOptionDescription(description),telemetryClient.trackCliOptionVariant(variantInputs),telemetryClient.trackCliOptionDefaultVariant(defaultVariantSelector),telemetryClient.trackCliOptionEnvironmentVariant(environmentVariantInputs),kind!=="boolean"&&kind!=="string"&&kind!=="number"&&kind!=="json")return output_manager_default.error(`Invalid kind: ${kind}. Must be one of: boolean, string, number, json`),2;let environmentVariantSelectors;try{environmentVariantSelectors=parseEnvironmentVariantInputs(environmentVariantInputs)}catch(err){return output_manager_default.error(err.message),2}let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link,projectSlugLink=formatProject(link.org.slug,project.name),variants;try{variants=await getVariants(client,kind,variantInputs)}catch(err){return output_manager_default.error(err.message),1}let environments;try{environments=resolveEnvironments(kind,variants,defaultVariantSelector,environmentVariantSelectors)}catch(err){return output_manager_default.error(err.message),2}let request={slug,kind,description:description||"",variants,environments};try{output_manager_default.spinner("Creating feature flag...");let flag=await createFlag(client,project.id,request);output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk50.default.bold(flag.slug)} created successfully`),printFlagDetails({flag,projectSlugLink,orgSlug:link.org.slug,projectName:project.name,showTimestamps:!1})}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}async function getVariants(client,kind,variantInputs){if(kind==="boolean"){if(variantInputs.length>0)throw new Error("Boolean flags always use true/false variants. Omit --variant when creating a boolean flag.");return getDefaultVariants(kind)}if(variantInputs.length>0)return variantInputs.map((input,index)=>parseVariantInput(input,kind,index));if(!client.stdin.isTTY)throw new Error("Missing required option --variant. Use --variant <value>[=label] (repeat as needed), or run interactively in a terminal.");return collectVariantsInteractively(client,kind)}async function collectVariantsInteractively(client,kind){let variants=[],addAnother=!0;for(;addAnother||variants.length===0;){let variantNumber=variants.length+1,valueInput=await client.input.text({message:kind==="json"?`Enter JSON value for variant ${variantNumber}:`:`Enter value for variant ${variantNumber}:`,validate:value=>{let result=validateVariantValue(value,kind);return result===null?!0:result}}),label=await client.input.text({message:`Enter an optional label for variant ${variantNumber}:`});variants.push(parseVariantInput(formatVariantInput(valueInput,label),kind,variants.length)),addAnother=await client.input.confirm("Add another variant?",!1)}return variants}function parseEnvironmentVariantInputs(inputs){let selectors={};for(let input of inputs){let separatorIndex=input.indexOf("="),environment=separatorIndex===-1?input.trim():input.slice(0,separatorIndex).trim(),variant=separatorIndex===-1?"":input.slice(separatorIndex+1).trim();if(!environment||!variant)throw new Error(`Invalid --environment-variant ${import_chalk50.default.bold(input)}. Use ENVIRONMENT=VARIANT, for example development=true.`);if(!STANDARD_ENVIRONMENTS.includes(environment))throw new Error(`Invalid environment in --environment-variant ${import_chalk50.default.bold(input)}. Must be one of: ${STANDARD_ENVIRONMENTS.join(", ")}`);let standardEnvironment=environment;if(selectors[standardEnvironment]!==void 0)throw new Error(`--environment-variant was passed more than once for ${import_chalk50.default.bold(environment)}. Pass each environment once.`);selectors[standardEnvironment]=variant}return selectors}function resolveEnvironments(kind,variants,defaultVariantSelector,environmentVariantSelectors){let defaultVariant=defaultVariantSelector?resolveVariantOrThrow(defaultVariantSelector,variants,"--default-variant"):void 0,environments={};for(let environment of STANDARD_ENVIRONMENTS){let selector=environmentVariantSelectors[environment],variant=selector?resolveVariantOrThrow(selector,variants,"--environment-variant",`${environment}=${selector}`):defaultVariant??getDefaultEnvironmentVariant(kind,variants,environment);environments[environment]=createEnvironmentConfig(variant.id,variant.id,!1)}return environments}function getDefaultEnvironmentVariant(kind,variants,environment){return kind==="boolean"&&environment==="development"?variants[1]:variants[0]}function createEnvironmentConfig(pausedVariantId,fallthroughVariantId,active){return{revision:0,active,pausedOutcome:{type:"variant",variantId:pausedVariantId},fallthrough:{type:"variant",variantId:fallthroughVariantId},rules:[],reuse:{active:!1,environment:""}}}function formatVariantInput(valueInput,label){let trimmedLabel=label.trim();return trimmedLabel?`${valueInput}=${trimmedLabel}`:valueInput}function getDefaultVariants(kind){switch(kind){case"boolean":return[{id:generateVariantId(),value:!1,label:"Off",description:"not enabled"},{id:generateVariantId(),value:!0,label:"On",description:"enabled"}];case"string":case"number":case"json":throw new Error(`Default variants are not supported for kind: ${kind}`)}}var import_open=__toESM(require_open(),1);var FlagsOpenTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}};async function openFlag(client,argv){let telemetryClient=new FlagsOpenTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(openSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,[flagArg,extraArg]=args,projectName=getProjectNameFromFlags(flags);if(extraArg)return output_manager_default.error(`Too many arguments. Usage: ${getCommandName("flags open [flag]")}`),2;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link;try{let url=getFlagsDashboardUrl(org.slug,project.name),label="feature flags dashboard";if(flagArg){output_manager_default.spinner("Fetching flag...");let flag=await getFlag(client,project.id,flagArg);output_manager_default.stopSpinner(),url=getFlagDashboardUrl(org.slug,project.name,flag.slug),label=`feature flag ${flag.slug}`}client.stdout.isTTY?(output_manager_default.log(`Opening ${label} in your browser...`),output_manager_default.log(`Visit this URL if the browser does not open: ${url}`),(0,import_open.default)(url).catch(()=>{})):client.stdout.write(`${url}
270
270
  `)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function logArchivedFlagNotice(flag){flag.state==="archived"&&output_manager_default.log("This flag remains archived. Changes will not affect flag evaluation until it is unarchived.")}var import_chalk51=__toESM(require_source(),1),import_fast_deep_equal3=__toESM(require_fast_deep_equal(),1);function findVariantReferencePaths(flag,variantIds){let trackedVariantIds=new Set(variantIds),references=new Map;for(let[environmentName,environmentConfig]of Object.entries(flag.environments))collectEnvironmentReferencePaths(environmentName,environmentConfig,trackedVariantIds,references);return new Map(Array.from(references.entries(),([variantId,paths])=>[variantId,Array.from(paths).sort()]))}function collectEnvironmentReferencePaths(environmentName,environmentConfig,trackedVariantIds,references){collectOutcomeReferencePaths(environmentConfig.pausedOutcome,`${environmentName}.pausedOutcome`,trackedVariantIds,references),collectOutcomeReferencePaths(environmentConfig.fallthrough,`${environmentName}.fallthrough`,trackedVariantIds,references);for(let[ruleIndex,rule]of environmentConfig.rules.entries())collectOutcomeReferencePaths(rule.outcome,`${environmentName}.rules[${ruleIndex}].outcome`,trackedVariantIds,references);if(environmentConfig.targets){for(let[variantId,entityKinds]of Object.entries(environmentConfig.targets))if(trackedVariantIds.has(variantId))for(let[entityKind,attributes]of Object.entries(entityKinds))for(let[attribute,values]of Object.entries(attributes))values.length!==0&&addReferencePath(references,variantId,`${environmentName}.targets.${entityKind}.${attribute}`)}}function collectOutcomeReferencePaths(outcome,basePath,trackedVariantIds,references){if(outcome)switch(outcome.type){case"variant":trackedVariantIds.has(outcome.variantId)&&addReferencePath(references,outcome.variantId,basePath);return;case"split":collectSplitOutcomeReferencePaths(outcome,basePath,trackedVariantIds,references);return;case"rollout":collectRolloutOutcomeReferencePaths(outcome,basePath,trackedVariantIds,references);return;default:return}}function collectSplitOutcomeReferencePaths(outcome,basePath,trackedVariantIds,references){trackedVariantIds.has(outcome.defaultVariantId)&&addReferencePath(references,outcome.defaultVariantId,`${basePath}.default`);for(let variantId of Object.keys(outcome.weights))trackedVariantIds.has(variantId)&&addReferencePath(references,variantId,`${basePath}.weights.${variantId}`)}function collectRolloutOutcomeReferencePaths(outcome,basePath,trackedVariantIds,references){trackedVariantIds.has(outcome.rollFromVariantId)&&addReferencePath(references,outcome.rollFromVariantId,`${basePath}.from`),trackedVariantIds.has(outcome.rollToVariantId)&&addReferencePath(references,outcome.rollToVariantId,`${basePath}.to`),trackedVariantIds.has(outcome.defaultVariantId)&&addReferencePath(references,outcome.defaultVariantId,`${basePath}.default`)}function addReferencePath(references,variantId,path){let paths=references.get(variantId);paths||(paths=new Set,references.set(variantId,paths)),paths.add(path)}var FlagsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentFlag(flag){flag&&this.trackCliArgument({arg:"flag",value:this.redactedValue})}trackCliOptionVariant(variant){variant&&this.trackCliOption({option:"variant",value:this.redactedValue})}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionAddVariant(addVariant){addVariant?.length&&this.trackCliOption({option:"add-variant",value:this.redactedValue})}trackCliOptionRemoveVariant(removeVariant){removeVariant?.length&&this.trackCliOption({option:"remove-variant",value:this.redactedValue})}trackCliOptionMessage(message){message&&this.trackCliOption({option:"message",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var DEFAULT_UPDATE_MESSAGE="Updated via CLI";async function update(client,argv){let telemetryClient=new FlagsUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,[flagArg]=args,variantSelector=normalizeOptionalInput(flags["--variant"]),valueInput=normalizeOptionalInput(flags["--value"]),label=normalizeOptionalInput(flags["--label"]),addVariantInputs=flags["--add-variant"]||[],removeVariantSelectors=flags["--remove-variant"]||[],skipConfirmation=flags["--yes"],message=normalizeOptionalInput(flags["--message"]),projectName=getProjectNameFromFlags(flags);if(!flagArg)return output_manager_default.error("Please provide a flag slug or ID to update"),output_manager_default.log(`Example: ${getCommandName('flags update my-feature --variant control --value welcome-back --label "Welcome back"')}`),2;telemetryClient.trackCliArgumentFlag(flagArg),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliOptionVariant(variantSelector),telemetryClient.trackCliOptionValue(valueInput),telemetryClient.trackCliOptionLabel(label),telemetryClient.trackCliOptionAddVariant(addVariantInputs),telemetryClient.trackCliOptionRemoveVariant(removeVariantSelectors),telemetryClient.trackCliOptionMessage(message),telemetryClient.trackCliFlagYes(skipConfirmation);let hasVariantMutations=addVariantInputs.length>0||removeVariantSelectors.length>0;if(hasVariantMutations&&hasLegacyVariantEditOptions(variantSelector,valueInput,label))return output_manager_default.error("Cannot mix --variant, --value, or --label with --add-variant or --remove-variant."),1;let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;try{return hasVariantMutations?await updateFlagVariants(client,project.id,flagArg,{addVariantInputs,removeVariantSelectors,skipConfirmation:skipConfirmation||!1,message}):await updateExistingVariant(client,project.id,flagArg,{selector:variantSelector,valueInput,label,message})}catch(err){return output_manager_default.stopSpinner(),isAPIError(err)&&err.status===412?(output_manager_default.error("Flag changed while updating; re-run the command."),1):(printError(err),1)}}async function updateExistingVariant(client,projectId,flagArg,input){output_manager_default.spinner("Fetching flag...");let{flag,etag}=await fetchFlagForUpdate(client,projectId,flagArg);if(output_manager_default.stopSpinner(),logArchivedFlagNotice(flag),rejectExperimentOwnedVariantUpdate(flag))return 1;let variantUpdate=await collectVariantUpdate(client,flag,input),{variants,changedVariants}=applyVariantUpdates(flag,[variantUpdate]);if(changedVariants.length===0)return output_manager_default.warn(`Flag ${import_chalk51.default.bold(flag.slug)} is already up to date`),0;let updateMessage=await resolveOptionalInput(client,input.message,DEFAULT_UPDATE_MESSAGE,"Enter a message for this update:");output_manager_default.spinner("Updating flag..."),await updateFlag(client,projectId,flagArg,{variants,message:updateMessage},{ifMatch:etag}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk51.default.bold(flag.slug)} has been updated`);for(let variant of changedVariants)output_manager_default.log(` ${import_chalk51.default.dim("Variant:")} ${formatVariantForDisplay(variant)}`);return 0}async function updateFlagVariants(client,projectId,flagArg,input){output_manager_default.spinner("Fetching flag...");let{flag,etag}=await fetchFlagForUpdate(client,projectId,flagArg);if(output_manager_default.stopSpinner(),logArchivedFlagNotice(flag),rejectExperimentOwnedVariantUpdate(flag))return 1;if(flag.kind==="boolean")return output_manager_default.error("Boolean flags do not support --add-variant or --remove-variant."),1;let plan=buildVariantMutationPlan(flag,input.addVariantInputs,input.removeVariantSelectors);if(plan.removedVariants.length>0&&!await confirmVariantRemoval(client,flag,plan.removedVariants,input.skipConfirmation))return output_manager_default.log("Aborted"),0;let updateMessage=await resolveOptionalInput(client,input.message,DEFAULT_UPDATE_MESSAGE,"Enter a message for this update:");output_manager_default.spinner("Updating flag..."),await updateFlag(client,projectId,flagArg,{variants:plan.variants,message:updateMessage},{ifMatch:etag}),output_manager_default.stopSpinner(),output_manager_default.success(`Feature flag ${import_chalk51.default.bold(flag.slug)} has been updated`);for(let variant of plan.addedVariants)output_manager_default.log(` ${import_chalk51.default.dim("Added:")} ${formatVariantForLog(variant)}`);for(let variant of plan.removedVariants)output_manager_default.log(` ${import_chalk51.default.dim("Removed:")} ${formatVariantForLog(variant)}`);return 0}function rejectExperimentOwnedVariantUpdate(flag){if(!flag.experiment)return!1;let experiment=flag.experiment.id?`experiment ${import_chalk51.default.bold(flag.experiment.id)}`:"an experiment";return output_manager_default.error(`Flag ${import_chalk51.default.bold(flag.slug)} is managed by ${experiment}. Update its variants with ${getCommandName("experiments update <experiment> --file <file>")}.`),!0}function hasLegacyVariantEditOptions(variantSelector,valueInput,label){return variantSelector!==void 0||valueInput!==void 0||label!==void 0}function buildVariantMutationPlan(flag,addVariantInputs,removeVariantSelectors){let removedVariants=resolveRemovedVariants(flag.variants,removeVariantSelectors);assertVariantRemovalsAreAllowed(flag,removedVariants);let baseIndex=flag.variants.length-removedVariants.length,addedVariants=parseAddedVariants(flag,addVariantInputs,baseIndex),removedVariantIds=new Set(removedVariants.map(variant=>variant.id)),variants=flag.variants.filter(variant=>!removedVariantIds.has(variant.id)).map(variant=>({...variant}));return variants.push(...addedVariants),assertUniqueVariantValues(variants),{variants,addedVariants,removedVariants}}function parseAddedVariants(flag,addVariantInputs,baseIndex){let kind=flag.kind;if(kind==="boolean")throw new Error("Boolean flags do not support adding variants.");return addVariantInputs.map((input,index)=>parseVariantInput(input,kind,baseIndex+index))}function resolveRemovedVariants(variants,removeVariantSelectors){let removedVariantIds=new Set;return removeVariantSelectors.map(selector=>{let result=resolveVariant(selector,variants);if(result.error||!result.variant)throw new Error(result.error||`Variant "${selector}" not found`);if(removedVariantIds.has(result.variant.id))throw new Error(`Duplicate --remove-variant selector ${import_chalk51.default.bold(selector)} resolves to ${formatVariantForLog(result.variant)}.`);return removedVariantIds.add(result.variant.id),result.variant})}function assertVariantRemovalsAreAllowed(flag,removedVariants){let referencePaths=findVariantReferencePaths(flag,removedVariants.map(variant=>variant.id));if(referencePaths.size===0)return;let referencedVariants=removedVariants.filter(variant=>referencePaths.has(variant.id)),detailLines=referencedVariants.map(variant=>{let paths=referencePaths.get(variant.id)??[];return` - ${formatVariantForLog(variant)} referenced by ${paths.join(", ")}`});throw new Error(`Cannot remove variant${referencedVariants.length===1?"":"s"} because ${referencedVariants.length===1?"it is":"they are"} still referenced:
271
271
  ${detailLines.join(`
@@ -310,7 +310,8 @@ Connect one with: ${import_chalk70.default.cyan(connectionsCommand(client,"flags
310
310
  Ask an owner of the source project to run: ${getCommandName(`flags connections add ${quoteArg(project.name)} --project <source-project>`)}`));else{let count=`${import_chalk70.default.bold(sorted.length)} project${sorted.length===1?"":"s"}`;output_manager_default.log(role==="source"?`${count} may read the flags of ${projectSlugLink}`:`${projectSlugLink} may read the flags of ${count}`),printConnectionsTable(sorted,role,names)}}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function isRole(value){return VALID_ROLES.includes(value)}function otherProjectId(connection,role){return role==="source"?connection.consumerProjectId:connection.sourceProjectId}async function resolveProjectNames(client,connections2,role,accountId){let ids=[...new Set(connections2.map(c=>otherProjectId(c,role)))],entries=await Promise.all(ids.map(async id=>{try{let project=await getProjectByNameOrId(client,id,accountId);return[id,project instanceof Error?id:project.name]}catch{return[id,id]}}));return new Map(entries)}function printConnectionsTable(connections2,role,names){let now=Date.now(),header=role==="source"?"Consumer Project":"Source Project",rows=connections2.map(connection=>{let id=otherProjectId(connection,role),name=names.get(id)??id;return[name===id?id:`${name} ${import_chalk70.default.dim(id)}`,import_chalk70.default.dim(connection.createdBy),(0,import_ms6.default)(now-connection.createdAt)+" ago"]}),table2=formatTable([header,"Created By","Created"],["l","l","l"],[{name:"",rows}]);output_manager_default.print(`
311
311
  ${table2}
312
312
  `)}var import_chalk71=__toESM(require_source(),1);async function connectionsAdd(client,argv){let telemetryClient=new FlagsConnectionsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(connectionsAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,[consumerNameOrId]=args,projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliArgumentConsumerProject(consumerNameOrId),telemetryClient.trackCliOptionProject(projectName);let link=await resolveSourceProject(client,projectName);if(typeof link=="number")return link;let consumer=await resolveConsumerProject(client,link,consumerNameOrId,"flags connections add <consumer-project>");if(typeof consumer=="number")return consumer;let source=link.project;try{output_manager_default.spinner("Connecting project..."),await createConnection(client,source.id,consumer.id),output_manager_default.stopSpinner()}catch(err){return output_manager_default.stopSpinner(),isAPIError(err)&&err.code==="flags_project_connection_exists"?(output_manager_default.log(`${import_chalk71.default.bold(consumer.name)} already may read the flags of ${import_chalk71.default.bold(source.name)}`),0):(printError(err),1)}return output_manager_default.success(`${import_chalk71.default.bold(consumer.name)} may now read the flags of ${import_chalk71.default.bold(source.name)}`),output_manager_default.print(`
313
- `),output_manager_default.print(` ${import_chalk71.default.dim("Source project ID:")} ${source.id}
313
+ `),output_manager_default.print(` Read these flags in the consumer project with @flags-sdk/vercel:
314
+ `),output_manager_default.print(` createVercelAdapter({ projectId: ${JSON.stringify(source.id)} })
314
315
  `),0}var import_chalk72=__toESM(require_source(),1);async function connectionsRm(client,argv){let telemetryClient=new FlagsConnectionsRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(connectionsRemoveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,[consumerNameOrId]=args,skipConfirmation=flags["--yes"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliArgumentConsumerProject(consumerNameOrId),telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagYes(skipConfirmation);let link=await resolveSourceProject(client,projectName);if(typeof link=="number")return link;let consumer=await resolveConsumerProject(client,link,consumerNameOrId,"flags connections remove <consumer-project>");if(typeof consumer=="number")return consumer;let source=link.project;if(!skipConfirmation){if(client.nonInteractive)return connectionsError(client,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Confirm removing the connection of ${consumer.name} to the flags of ${source.name} by adding --yes.`,next:[{command:`flags connections remove ${quoteArg(consumerNameOrId)} --yes`,when:"confirm and remove the connection"}]});if(!await client.input.confirm(`Stop ${import_chalk72.default.bold(consumer.name)} from reading the flags of ${import_chalk72.default.bold(source.name)}? Its deployments lose access right away.`,!1))return output_manager_default.log("Aborted"),0}try{output_manager_default.spinner("Removing connection..."),await deleteConnection(client,source.id,consumer.id),output_manager_default.stopSpinner(),output_manager_default.success(`${import_chalk72.default.bold(consumer.name)} may no longer read the flags of ${import_chalk72.default.bold(source.name)}`)}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}var COMMAND_CONFIG12={ls:getCommandAliases(connectionsListSubcommand),add:getCommandAliases(connectionsAddSubcommand),rm:getCommandAliases(connectionsRemoveSubcommand)};async function connections(client){let telemetry=new FlagsConnectionsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(connectionsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),1}let subArgs=parsedArgs.args.slice(0),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG12),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("flags connections",subcommand),output_manager_default.print(help(connectionsSubcommand,{stream:client.stderr,parent:flagsCommand,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:connectionsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"ls":return needHelp?(telemetry.trackCliFlagHelp("flags connections",subcommandOriginal),printHelp(connectionsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),connectionsLs(client,args));case"add":return needHelp?(telemetry.trackCliFlagHelp("flags connections",subcommandOriginal),printHelp(connectionsAddSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),connectionsAdd(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("flags connections",subcommandOriginal),printHelp(connectionsRemoveSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),connectionsRm(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG12)),output_manager_default.print(help(connectionsSubcommand,{stream:client.stderr,parent:flagsCommand,columns:client.stderr.columns})),2}}var FlagsSegmentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",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})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}},FlagsSegmentsLsTelemetryClient=class extends TelemetryClient{trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsCreateTelemetryClient=class extends TelemetryClient{trackCliArgumentSlug(slug){slug&&this.trackCliArgument({arg:"slug",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionHint(hint){hint&&this.trackCliOption({option:"hint",value:this.redactedValue})}trackCliOptionData(data){data&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionAdd(add3){add3?.length&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliOptionLabel(label){label&&this.trackCliOption({option:"label",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionHint(hint){hint&&this.trackCliOption({option:"hint",value:this.redactedValue})}trackCliOptionData(data){data&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionAdd(add3){add3?.length&&this.trackCliOption({option:"add",value:this.redactedValue})}trackCliOptionRemove(remove3){remove3?.length&&this.trackCliOption({option:"remove",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}},FlagsSegmentsRmTelemetryClient=class extends TelemetryClient{trackCliArgumentSegment(segment){segment&&this.trackCliArgument({arg:"segment",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_chalk73=__toESM(require_source(),1),import_ms7=__toESM(require_ms(),1),import_pluralize5=__toESM(require_pluralize(),1);function getSegmentsUrl(projectId,withMetadata=!1){let url=`/v1/projects/${encodeURIComponent(projectId)}/feature-flags/segments`;return withMetadata?`${url}?withMetadata=true`:url}function getSegmentUrl(projectId,segmentIdOrSlug,withMetadata=!1){let url=`${getSegmentsUrl(projectId)}/${encodeURIComponent(segmentIdOrSlug)}`;return withMetadata?`${url}?withMetadata=true`:url}async function getSegments(client,projectId,withMetadata=!1){return output_manager_default.debug(`Fetching feature flag segments for project ${projectId}`),(await client.fetch(getSegmentsUrl(projectId,withMetadata))).data}async function getSegment(client,projectId,segmentIdOrSlug,withMetadata=!0){return output_manager_default.debug(`Fetching feature flag segment ${segmentIdOrSlug} for project ${projectId}`),client.fetch(getSegmentUrl(projectId,segmentIdOrSlug,withMetadata))}async function createSegment(client,projectId,request){let url=getSegmentsUrl(projectId);return output_manager_default.debug(`Creating feature flag segment ${request.slug} for project ${projectId}`),output_manager_default.debug(`API endpoint: PUT ${url}`),client.fetch(url,{method:"PUT",body:request})}async function updateSegment(client,projectId,segmentIdOrSlug,request){let url=getSegmentUrl(projectId,segmentIdOrSlug);return output_manager_default.debug(`Updating feature flag segment ${segmentIdOrSlug} for project ${projectId}`),client.fetch(url,{method:"PATCH",body:request})}async function deleteSegment(client,projectId,segmentIdOrSlug){let url=getSegmentUrl(projectId,segmentIdOrSlug);output_manager_default.debug(`Deleting feature flag segment ${segmentIdOrSlug} for project ${projectId}`),await client.fetch(url,{method:"DELETE"})}async function segmentsLs(client,argv){let telemetryClient=new FlagsSegmentsLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(segmentsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{flags}=parsedArgs,json=flags["--json"],projectName=getProjectNameFromFlags(flags);telemetryClient.trackCliOptionProject(projectName),telemetryClient.trackCliFlagJson(json);let link=await getLinkedFlagsProject(client,projectName);if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Pass --project <name>, or run ${getCommandName("link")} to link it.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,projectSlugLink=formatProject(org.slug,project.name),lsStamp=stamp_default();output_manager_default.spinner(`Fetching feature flag segments for ${projectSlugLink}`);try{let segments2=await getSegments(client,project.id,!0);output_manager_default.stopSpinner();let sortedSegments=segments2.sort((a,b)=>b.updatedAt-a.updatedAt);json?outputJson5(client,sortedSegments):segments2.length===0?(output_manager_default.log(`No feature flag segments found for ${projectSlugLink} ${import_chalk73.default.gray(lsStamp())}`),output_manager_default.log(`
315
316
  Create one with: ${getCommandName('flags segments create beta-users --label "Beta users" --add include:user.id=user_123')}`)):(output_manager_default.log(`${(0,import_pluralize5.default)("feature flag segment",segments2.length,!0)} found for ${projectSlugLink} ${import_chalk73.default.gray(lsStamp())}`),printSegmentsTable(sortedSegments))}catch(err){return output_manager_default.stopSpinner(),printError(err),1}return 0}function outputJson5(client,segments2){let jsonOutput={segments:segments2.map(segment=>({id:segment.id,slug:segment.slug,label:segment.label,description:segment.description??null,data:segment.data,hint:segment.hint,usedByFlags:segment.usedByFlags??[],usedBySegments:segment.usedBySegments??[],createdAt:segment.createdAt,updatedAt:segment.updatedAt}))};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
316
317
  `)}function printSegmentsTable(segments2){let headers=["Slug","Label","Rules","Values","Used By","Updated"],now=Date.now(),rows=segments2.map(segment=>[import_chalk73.default.bold(segment.slug),segment.label,String(segment.data.rules?.length??0),String(countSegmentValues(segment)),String((segment.usedByFlags?.length??0)+(segment.usedBySegments?.length??0)),(0,import_ms7.default)(now-segment.updatedAt)+" ago"]),table2=formatTable(headers,["l","l","r","r","r","l"],[{name:"",rows}]);output_manager_default.print(`