@vercel/cli-support 65.10.0 → 65.11.0-snapshot-631b89501c86

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 (260) hide show
  1. package/dist/chunks/add-4R6FUHQT.js +8 -0
  2. package/dist/chunks/add-F3H4BFJZ.js +8 -0
  3. package/dist/chunks/add-TCOJ4SIQ.js +8 -0
  4. package/dist/chunks/alerts-JGRRCQA4.js +8 -0
  5. package/dist/chunks/build-GOLTZF6S.js +7 -0
  6. package/dist/chunks/{chunk-6NUH6ZPE.js → chunk-2J35YKA2.js} +9 -9
  7. package/dist/chunks/{chunk-GQ4CQDIL.js → chunk-3KJ6HWSX.js} +1 -1
  8. package/dist/chunks/{chunk-STKZTUGE.js → chunk-3TDFSO4X.js} +1 -1
  9. package/dist/chunks/chunk-42FOKWGX.js +8 -0
  10. package/dist/chunks/{chunk-T2FCF46I.js → chunk-4DMKP6AO.js} +2 -2
  11. package/dist/chunks/chunk-4HR3I3ML.js +7 -0
  12. package/dist/chunks/{chunk-5MPZSRYG.js → chunk-4T57TXQ3.js} +1 -1
  13. package/dist/chunks/{chunk-SBEWZ65N.js → chunk-4VP57TOJ.js} +1 -1
  14. package/dist/chunks/{chunk-ZEUREQ4E.js → chunk-5B5CLOKM.js} +1 -1
  15. package/dist/chunks/chunk-5FIY443M.js +7 -0
  16. package/dist/chunks/{chunk-AUIV7YJO.js → chunk-5X635INY.js} +2 -2
  17. package/dist/chunks/{chunk-P6J22UJQ.js → chunk-6ORJPXDQ.js} +1 -1
  18. package/dist/chunks/chunk-74VQ7PQV.js +7 -0
  19. package/dist/chunks/{chunk-VU3RBRDH.js → chunk-7JMN657A.js} +1 -1
  20. package/dist/chunks/{chunk-Q46Q4Y4R.js → chunk-7LPNDK2O.js} +1 -1
  21. package/dist/chunks/{chunk-LIEWXPUC.js → chunk-7MZLV3KK.js} +1 -1
  22. package/dist/chunks/{chunk-YGYUPPAL.js → chunk-7NMC4E66.js} +1 -1
  23. package/dist/chunks/chunk-7ZJ7VUIR.js +7 -0
  24. package/dist/chunks/chunk-A3M2BHWR.js +13 -0
  25. package/dist/chunks/{chunk-US7YJ2RQ.js → chunk-AYZ52QDF.js} +1 -1
  26. package/dist/chunks/{chunk-5IZ33FNL.js → chunk-B56SRT5W.js} +1 -1
  27. package/dist/chunks/{chunk-3PKL2PTF.js → chunk-B6QVH6IG.js} +1 -1
  28. package/dist/chunks/{chunk-3QYXC4PH.js → chunk-BUFEV3T4.js} +1 -1
  29. package/dist/chunks/{chunk-ER7L7HYA.js → chunk-BVR6OIU5.js} +1 -1
  30. package/dist/chunks/{chunk-B4XGTAFO.js → chunk-BW25OFQG.js} +1 -1
  31. package/dist/chunks/{chunk-7LSH3MEB.js → chunk-C5QEQSEX.js} +1 -1
  32. package/dist/chunks/{chunk-VQSSVB6V.js → chunk-CD6ZWCKT.js} +1 -1
  33. package/dist/chunks/chunk-CFYLTZSV.js +7 -0
  34. package/dist/chunks/chunk-D3M2JG5C.js +7 -0
  35. package/dist/chunks/chunk-D7BB5BPA.js +10 -0
  36. package/dist/chunks/{chunk-RUBMVRT6.js → chunk-DR6OJB6P.js} +1 -1
  37. package/dist/chunks/chunk-DRZVM7CB.js +12 -0
  38. package/dist/chunks/{chunk-UQNBUXQA.js → chunk-EBIJ26IV.js} +1 -1
  39. package/dist/chunks/chunk-EGTJTCCW.js +7 -0
  40. package/dist/chunks/{chunk-OJWI6QJ3.js → chunk-EICEQXVS.js} +1 -1
  41. package/dist/chunks/{chunk-NAN5IE3B.js → chunk-EIMHC5UY.js} +1 -1
  42. package/dist/chunks/{chunk-CBMWPDOL.js → chunk-EVBGFSK5.js} +1 -1
  43. package/dist/chunks/{chunk-N5AN4JZL.js → chunk-EZLPMOHM.js} +1 -1
  44. package/dist/chunks/{chunk-JLNF2QTR.js → chunk-F2R7L3ZB.js} +1 -1
  45. package/dist/chunks/chunk-FHMCTV5E.js +7 -0
  46. package/dist/chunks/{chunk-DUCCC22H.js → chunk-FNH3T3CF.js} +1 -1
  47. package/dist/chunks/{chunk-RBIHS5QI.js → chunk-FOE3MWES.js} +1 -1
  48. package/dist/chunks/{chunk-KZLRIAAT.js → chunk-FVTRIRML.js} +1 -1
  49. package/dist/chunks/{chunk-PL6IOUKW.js → chunk-GL66K54F.js} +1 -1
  50. package/dist/chunks/{chunk-SXYA7JSX.js → chunk-HDISAMDF.js} +1 -1
  51. package/dist/chunks/chunk-HKU6D7DU.js +8 -0
  52. package/dist/chunks/{chunk-4WXVKR43.js → chunk-HNH3DPIZ.js} +1 -1
  53. package/dist/chunks/{chunk-U2TQFAO3.js → chunk-HYOWFNOP.js} +1 -1
  54. package/dist/chunks/{chunk-OYIDWI5Y.js → chunk-HZEKH3RO.js} +3 -3
  55. package/dist/chunks/{chunk-6RMW63GB.js → chunk-IHCYNUI2.js} +1 -1
  56. package/dist/chunks/chunk-IOTKHTZH.js +7 -0
  57. package/dist/chunks/{chunk-4VF5BZJP.js → chunk-JTAUWH5V.js} +1 -1
  58. package/dist/chunks/{chunk-S535FZTA.js → chunk-JUSNW3IF.js} +1 -1
  59. package/dist/chunks/{chunk-MKTZDEOJ.js → chunk-K4JTCVNW.js} +1 -1
  60. package/dist/chunks/{chunk-FPREO4VS.js → chunk-LALPOYIA.js} +1 -1
  61. package/dist/chunks/{chunk-YKLTNKQJ.js → chunk-MIIHBRKV.js} +1 -1
  62. package/dist/chunks/{chunk-BK3TNLWO.js → chunk-MO2G2ND2.js} +1 -1
  63. package/dist/chunks/{chunk-NLTZGQB2.js → chunk-MUKXOI2K.js} +1 -1
  64. package/dist/chunks/{chunk-PKZK23PR.js → chunk-NDMQVBTV.js} +1 -1
  65. package/dist/chunks/{chunk-DNLE3KPC.js → chunk-NSPW47RU.js} +1 -1
  66. package/dist/chunks/{chunk-K5KVSA2A.js → chunk-NT2N5UR4.js} +1 -1
  67. package/dist/chunks/{chunk-WYGOYE6C.js → chunk-NTDP6RTQ.js} +1 -1
  68. package/dist/chunks/chunk-NUSKXXZZ.js +20 -0
  69. package/dist/chunks/{chunk-Q2JNATRP.js → chunk-NZW3RIQM.js} +1 -1
  70. package/dist/chunks/chunk-Q2QVK3TH.js +7 -0
  71. package/dist/chunks/{chunk-HTPNGLPH.js → chunk-QDHTI5WK.js} +1 -1
  72. package/dist/chunks/chunk-QROI2U32.js +14 -0
  73. package/dist/chunks/chunk-RAQ6EUNL.js +7 -0
  74. package/dist/chunks/chunk-RDWLLSPU.js +7 -0
  75. package/dist/chunks/chunk-RR5SDYNN.js +8 -0
  76. package/dist/chunks/{chunk-BPRGAX62.js → chunk-SLCPSRDR.js} +1 -1
  77. package/dist/chunks/{chunk-5RYQH3XW.js → chunk-TPJV5UNE.js} +1 -1
  78. package/dist/chunks/{chunk-QXL353OB.js → chunk-TUAS3L5I.js} +1 -1
  79. package/dist/chunks/{chunk-7TR6H6NE.js → chunk-UBJVL3NJ.js} +2 -2
  80. package/dist/chunks/{chunk-6YAYCEDT.js → chunk-UCRMJMH6.js} +2 -2
  81. package/dist/chunks/{chunk-XS3MNHFR.js → chunk-UF2E5BDE.js} +1 -1
  82. package/dist/chunks/{chunk-E7WULWMX.js → chunk-UFXIPUNI.js} +1 -1
  83. package/dist/chunks/{chunk-SR7BZA6N.js → chunk-UNPK7LVC.js} +1 -1
  84. package/dist/chunks/{chunk-FXHB7TTL.js → chunk-VAZ7JG2Z.js} +1 -1
  85. package/dist/chunks/{chunk-52X4YVSG.js → chunk-VKCBEW6R.js} +1 -1
  86. package/dist/chunks/{chunk-FSJFWVUY.js → chunk-VWJXV5ZM.js} +1 -1
  87. package/dist/chunks/{chunk-VTITZEPW.js → chunk-W24TLPO5.js} +1 -1
  88. package/dist/chunks/chunk-WBSFE6IE.js +10 -0
  89. package/dist/chunks/{chunk-LE72YLCC.js → chunk-WMWB7QKG.js} +1 -1
  90. package/dist/chunks/{chunk-XFUUALZS.js → chunk-WNDR5HCU.js} +1 -1
  91. package/dist/chunks/{chunk-DQNP7OQ5.js → chunk-XH2R2EIK.js} +1 -1
  92. package/dist/chunks/{chunk-ZPJHONCZ.js → chunk-XQDHMFQY.js} +1 -1
  93. package/dist/chunks/{chunk-JA6IGJ67.js → chunk-YODQLETL.js} +1 -1
  94. package/dist/chunks/{chunk-36XHIIUT.js → chunk-Z64MQIOE.js} +1 -1
  95. package/dist/chunks/chunk-ZPBGAZC2.js +11 -0
  96. package/dist/chunks/{chunk-75DUL7VI.js → chunk-ZTHW5VNH.js} +1 -1
  97. package/dist/chunks/clear-PECHXMV5.js +8 -0
  98. package/dist/chunks/compile-vercel-config-EM3HYOQC.js +7 -0
  99. package/dist/chunks/config-DA2NZUDH.js +8 -0
  100. package/dist/chunks/config-X6O3DT7V.js +7 -0
  101. package/dist/chunks/config-validator.mjs +1 -1
  102. package/dist/chunks/{connect-git-provider-YIX5ZOU6.js → connect-git-provider-GFAJLQLU.js} +1 -1
  103. package/dist/chunks/contract-RHMWRX4W.js +10 -0
  104. package/dist/chunks/delete-5RN5VW5L.js +9 -0
  105. package/dist/chunks/delete-MT6I7R7K.js +10 -0
  106. package/dist/chunks/detect-services-HSA4JHJX.js +7 -0
  107. package/dist/chunks/disable-LXPZDQMC.js +7 -0
  108. package/dist/chunks/discard-PW65T65S.js +14 -0
  109. package/dist/chunks/edit-WFSONASO.js +8 -0
  110. package/dist/chunks/edit-YID3FOJ3.js +9 -0
  111. package/dist/chunks/enable-X2EKQCIY.js +7 -0
  112. package/dist/chunks/{export-YYQ2J5AT.js → export-25TQ3YBT.js} +1 -1
  113. package/dist/chunks/future-DQBK457G.js +7 -0
  114. package/dist/chunks/generate-cert-for-deploy-OMEACY5G.js +7 -0
  115. package/dist/chunks/image-AO2OZG4W.js +7 -0
  116. package/dist/chunks/import-builders-GSDV4K4A.js +7 -0
  117. package/dist/chunks/{inspect-AHHXHIIP.js → inspect-3W3TUJ6P.js} +1 -1
  118. package/dist/chunks/inspect-4244CRHI.js +13 -0
  119. package/dist/chunks/{inspect-SFM3NWDF.js → inspect-BRYVSQBD.js} +1 -1
  120. package/dist/chunks/inspect-C43IV7X4.js +9 -0
  121. package/dist/chunks/inspect-RP5KXOYQ.js +8 -0
  122. package/dist/chunks/{inspect-RPCDGIP3.js → inspect-TN2QY3BP.js} +1 -1
  123. package/dist/chunks/list-2SY6PZLC.js +12 -0
  124. package/dist/chunks/{list-7WWUYCE6.js → list-6W4UQBY4.js} +1 -1
  125. package/dist/chunks/{list-NXZXKKAR.js → list-WA6Q7DUN.js} +1 -1
  126. package/dist/chunks/list-WBKZGIMQ.js +8 -0
  127. package/dist/chunks/login-K6XBWOFD.js +9 -0
  128. package/dist/chunks/login-OGMXEW5N.js +7 -0
  129. package/dist/chunks/logs-R3ZERQ7M.js +7 -0
  130. package/dist/chunks/{ls-LCUOBWY2.js → ls-4WP6LHLL.js} +1 -1
  131. package/dist/chunks/{ls-ITWXAWSZ.js → ls-EVAQD3LI.js} +1 -1
  132. package/dist/chunks/{ls-5SKRXNSI.js → ls-L5LLKZBV.js} +1 -1
  133. package/dist/chunks/{ls-FOFJU2JJ.js → ls-MAJ4QZTY.js} +1 -1
  134. package/dist/chunks/ls-O5DKK3TY.js +8 -0
  135. package/dist/chunks/ls-PTHGXQLK.js +11 -0
  136. package/dist/chunks/{ls-OY5YTZGN.js → ls-UXE5RSZN.js} +1 -1
  137. package/dist/chunks/mutate-EKZWPQQJ.js +9 -0
  138. package/dist/chunks/{notifications-XAPB2F2T.js → notifications-F5S3RKZF.js} +1 -1
  139. package/dist/chunks/open-KGVG54NN.js +7 -0
  140. package/dist/chunks/{openapi-UUFKDKGC.js → openapi-7TPDTMCU.js} +1 -1
  141. package/dist/chunks/{permissions-FU5OET67.js → permissions-5K7JZOMB.js} +1 -1
  142. package/dist/chunks/{plugin-offer-E5JOW442.js → plugin-offer-JUYWL4I7.js} +1 -1
  143. package/dist/chunks/prompt-missing-credentials-DX2KJB5X.js +7 -0
  144. package/dist/chunks/publish-KIRTO2ZO.js +15 -0
  145. package/dist/chunks/pull-3CRJK7BX.js +7 -0
  146. package/dist/chunks/purchase-domain-if-available-55IXEF43.js +7 -0
  147. package/dist/chunks/push-4YG5HKSD.js +7 -0
  148. package/dist/chunks/{query-VMKIOI3W.js → query-67KQVLTR.js} +1 -1
  149. package/dist/chunks/reauthenticate-SWSBFGDU.js +7 -0
  150. package/dist/chunks/remove-SYTIFVWW.js +9 -0
  151. package/dist/chunks/reorder-TX5MXJEB.js +10 -0
  152. package/dist/chunks/reply-XVK33N5T.js +9 -0
  153. package/dist/chunks/resolve-JZ262ZF4.js +12 -0
  154. package/dist/chunks/resolve-agent-team-BG5YW55B.js +7 -0
  155. package/dist/chunks/restore-IPFL7TKT.js +16 -0
  156. package/dist/chunks/rm-2BCAZGQU.js +8 -0
  157. package/dist/chunks/rm-3CCU3CE6.js +8 -0
  158. package/dist/chunks/rm-5CQV5LYG.js +8 -0
  159. package/dist/chunks/rm-OV4OU6H2.js +8 -0
  160. package/dist/chunks/rm-WFGMOZ3G.js +8 -0
  161. package/dist/chunks/rule-inspect-RFJIIXZH.js +8 -0
  162. package/dist/chunks/{schema-AKVIKCFT.js → schema-753JMRZA.js} +1 -1
  163. package/dist/chunks/schema-SUNFQGUL.js +14 -0
  164. package/dist/chunks/select-org-MPHPWWPU.js +7 -0
  165. package/dist/chunks/set-BR6EEOPB.js +7 -0
  166. package/dist/chunks/set-I3NWZRSI.js +9 -0
  167. package/dist/chunks/setup-and-link-MRTKVOWD.js +7 -0
  168. package/dist/chunks/{skills-JG4MGVKX.js → skills-QZ4AMS2K.js} +28 -16
  169. package/dist/chunks/{tags-4Y4UBA5S.js → tags-7DIZEAVE.js} +1 -1
  170. package/dist/chunks/{types-DSN6Q6HW.js → types-NPUAHKSK.js} +1 -1
  171. package/dist/chunks/{update-R42CXSVE.js → update-7XH7HM5F.js} +1 -1
  172. package/dist/chunks/usage-3BS7JCCU.js +13 -0
  173. package/dist/chunks/{validate-config-XWZ7ZZ3G.js → validate-config-LAD7BU3B.js} +1 -1
  174. package/dist/commands/build/index.js +1 -1
  175. package/dist/commands/deploy/index.js +4 -4
  176. package/dist/commands/dev/index.js +2 -2
  177. package/dist/commands/env/index.js +1 -1
  178. package/dist/commands/link/index.js +1 -1
  179. package/dist/commands/list/index.js +1 -1
  180. package/dist/commands/project/index.js +1 -1
  181. package/dist/commands-account.js +82 -93
  182. package/dist/commands-ai.js +13 -12
  183. package/dist/commands-blob.js +1 -1
  184. package/dist/commands-core.js +56 -59
  185. package/dist/commands-deployments.js +1 -1
  186. package/dist/commands-flags.js +6 -6
  187. package/dist/commands-integrations.js +12 -18
  188. package/dist/commands-observability.js +7 -7
  189. package/dist/commands-routing.js +2 -2
  190. package/dist/help.js +1 -1
  191. package/dist/index.js +7 -7
  192. package/dist/internal-build.js +1 -1
  193. package/dist/launcher-errors.js +1 -1
  194. package/dist/package.json +25 -25
  195. package/dist/root-help-commands.mjs +1 -1
  196. package/dist/version.mjs +1 -1
  197. package/package.json +16 -16
  198. package/dist/chunks/add-4MTUAI2X.js +0 -8
  199. package/dist/chunks/add-JYLWBVVQ.js +0 -8
  200. package/dist/chunks/add-T5ERJ62Z.js +0 -8
  201. package/dist/chunks/build-OGWTTFLG.js +0 -7
  202. package/dist/chunks/chunk-3QFBVAHL.js +0 -8
  203. package/dist/chunks/chunk-5RSSGN2Q.js +0 -8
  204. package/dist/chunks/chunk-BIRSJSAO.js +0 -7
  205. package/dist/chunks/chunk-FOWAVQOH.js +0 -8
  206. package/dist/chunks/chunk-JBU72NEQ.js +0 -7
  207. package/dist/chunks/chunk-NZRBJB6T.js +0 -7
  208. package/dist/chunks/chunk-OII46FDN.js +0 -12
  209. package/dist/chunks/chunk-SNNJRKD6.js +0 -10
  210. package/dist/chunks/chunk-TILI4QBL.js +0 -11
  211. package/dist/chunks/chunk-WKIDCYKL.js +0 -10
  212. package/dist/chunks/chunk-ZCUUCYID.js +0 -13
  213. package/dist/chunks/chunk-ZIC7VWFC.js +0 -14
  214. package/dist/chunks/clear-Z5OO6URI.js +0 -8
  215. package/dist/chunks/compile-vercel-config-ZKUTSDWV.js +0 -7
  216. package/dist/chunks/config-AUTTHXQO.js +0 -8
  217. package/dist/chunks/config-RJ7PLFQD.js +0 -7
  218. package/dist/chunks/delete-QQOC63HV.js +0 -9
  219. package/dist/chunks/delete-WIGSOZR3.js +0 -10
  220. package/dist/chunks/detect-services-J4LGLAHC.js +0 -7
  221. package/dist/chunks/disable-L54VGY5A.js +0 -7
  222. package/dist/chunks/discard-Q5UPTZR2.js +0 -14
  223. package/dist/chunks/edit-FRGMYBW3.js +0 -9
  224. package/dist/chunks/edit-QEDNQ33T.js +0 -8
  225. package/dist/chunks/enable-TGQZWSBG.js +0 -7
  226. package/dist/chunks/future-RYEYLPCG.js +0 -7
  227. package/dist/chunks/generate-cert-for-deploy-Y4KDIFF2.js +0 -7
  228. package/dist/chunks/image-PDPRURMH.js +0 -7
  229. package/dist/chunks/import-builders-H54QCMQ4.js +0 -7
  230. package/dist/chunks/inspect-6IBPIBIJ.js +0 -9
  231. package/dist/chunks/inspect-Q7FYDFL7.js +0 -13
  232. package/dist/chunks/list-GSVERG4S.js +0 -12
  233. package/dist/chunks/login-HEHHQO3F.js +0 -9
  234. package/dist/chunks/login-XKLPSZNN.js +0 -7
  235. package/dist/chunks/logs-NJ46ZSNZ.js +0 -7
  236. package/dist/chunks/ls-MWGIT2YH.js +0 -8
  237. package/dist/chunks/ls-TZN53EJL.js +0 -11
  238. package/dist/chunks/mutate-ZYXVL22A.js +0 -9
  239. package/dist/chunks/open-WPRHI6ND.js +0 -7
  240. package/dist/chunks/prompt-missing-credentials-ZZVTEQQB.js +0 -7
  241. package/dist/chunks/publish-R5IV2BH2.js +0 -15
  242. package/dist/chunks/pull-CQVHIIAN.js +0 -7
  243. package/dist/chunks/purchase-domain-if-available-VMWCMYC2.js +0 -7
  244. package/dist/chunks/push-Y5CUOISM.js +0 -7
  245. package/dist/chunks/reauthenticate-5K7LBTOW.js +0 -7
  246. package/dist/chunks/reorder-W3MXHSGZ.js +0 -10
  247. package/dist/chunks/reply-YH7HRIWQ.js +0 -9
  248. package/dist/chunks/resolve-FWVMWJTG.js +0 -12
  249. package/dist/chunks/resolve-agent-team-6L7AQUA2.js +0 -7
  250. package/dist/chunks/restore-I7L3EOS4.js +0 -16
  251. package/dist/chunks/rm-AWUMNWQU.js +0 -8
  252. package/dist/chunks/rm-HVGUK55W.js +0 -8
  253. package/dist/chunks/rm-M3EMCKSN.js +0 -8
  254. package/dist/chunks/rm-RFCTWU5R.js +0 -8
  255. package/dist/chunks/rm-VREBRM5D.js +0 -8
  256. package/dist/chunks/rule-inspect-SQUCRRGA.js +0 -8
  257. package/dist/chunks/schema-S36QQNJP.js +0 -14
  258. package/dist/chunks/select-org-PRWYXAWW.js +0 -7
  259. package/dist/chunks/set-ZJAC44LV.js +0 -7
  260. package/dist/chunks/setup-and-link-VD53JFQI.js +0 -7
@@ -4,10 +4,10 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{require_ajv}from"./chunks/chunk-5CVEW3HD.js";import{CHECKBOX_INSTRUCTIONS}from"./chunks/chunk-OFDTADPQ.js";import{selectOrg}from"./chunks/chunk-3QFBVAHL.js";import{ENV_PULL_FAILED_MESSAGE,VALID_ENVIRONMENTS,connectResourceToProject,getLinkedProjectField,postProvisionSetup,validateEnvironments}from"./chunks/chunk-52X4YVSG.js";import{sanitizeForTerminal}from"./chunks/chunk-UUBPAYTG.js";import"./chunks/chunk-MCRKBVZA.js";import"./chunks/chunk-BK3TNLWO.js";import{getCustomEnvironments,pickCustomEnvironment}from"./chunks/chunk-F7AVGV4Y.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import"./chunks/chunk-5RYQH3XW.js";import"./chunks/chunk-6Y2ZL5XJ.js";import"./chunks/chunk-YZKARZ2B.js";import{extractDatePortion}from"./chunks/chunk-ECQIO5K3.js";import{applyDeprecatedGitBranchFlag}from"./chunks/chunk-KBVYN635.js";import"./chunks/chunk-7YKFF6CE.js";import{resolveProjectContext}from"./chunks/chunk-SR7BZA6N.js";import"./chunks/chunk-NE6PKR2J.js";import"./chunks/chunk-5MPZSRYG.js";import"./chunks/chunk-25565AGS.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{validateLsArgs}from"./chunks/chunk-42J2KCDF.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import"./chunks/chunk-PFD7LETF.js";import{normalizeRepeatableStringFilters}from"./chunks/chunk-5RSSGN2Q.js";import{printNextPageCommand,quoteShellArg}from"./chunks/chunk-TZE4CS4K.js";import{canPrompt,canPromptOnTerminal}from"./chunks/chunk-IQ7FPAI4.js";import"./chunks/chunk-6YAYCEDT.js";import"./chunks/chunk-VU3RBRDH.js";import"./chunks/chunk-4VF5BZJP.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-S535FZTA.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,reportRenamedOptionError,withWarnings}from"./chunks/chunk-GQ4CQDIL.js";import{elapsed}from"./chunks/chunk-Q7D7RGXM.js";import{getSubcommand as getSubcommand2}from"./chunks/chunk-ETV3C2CV.js";import"./chunks/chunk-BPRGAX62.js";import{STORAGE_PROVIDERS,acceptTermsSubcommand,addSubcommand6 as addSubcommand,attachSubcommand,balanceSubcommand,categoriesSubcommand,categoriesSubcommand2,claimSubcommand,connectSubcommand2 as connectSubcommand,connectSubcommand3 as connectSubcommand2,connexCommand,contactsAddSubcommand,contactsSubcommand,createSubcommand2 as createSubcommand,createSubcommand9 as createSubcommand2,createThresholdSubcommand,deleteSubcommand4 as deleteSubcommand,detachSubcommand,disconnectSubcommand2 as disconnectSubcommand,disconnectSubcommand3 as disconnectSubcommand2,discoverSubcommand,discoverSubcommand2,findForeignCreateFlags,findOverlappingConnections,getCommandAliases,getConnections,getStorageProvider,getStorageStore,getStorageStores,getSubcommand3 as getSubcommand,guideSubcommand,inspectSubcommand10 as inspectSubcommand,installCommand,installationsSubcommand,integrationCommand,integrationResourceCommand,listStorageProviderTypes,listSubcommand16 as listSubcommand2,listSubcommand22 as listSubcommand3,listSubcommand7 as listSubcommand,loadStoreDetails,openSubcommand,openSubcommand4 as openSubcommand2,removeSubcommand10 as removeSubcommand2,removeSubcommand11 as removeSubcommand3,removeSubcommand5 as removeSubcommand,resolveProjectConnection,resolveStore,resourceSubcommand,revokeTokensSubcommand,statusSubcommand5 as statusSubcommand,storageCommand,storeMatchesType,storeProductLabel,storeSupportsOidc,storeTypeName,tokenSubcommand,updateSubcommand,updateSubcommand12 as updateSubcommand3,updateSubcommand7 as updateSubcommand2,usageCommand}from"./chunks/chunk-ZIC7VWFC.js";import"./chunks/chunk-M3Z6NSC2.js";import"./chunks/chunk-IHTWZEQW.js";import"./chunks/chunk-ECFLIVEE.js";import"./chunks/chunk-WTFD4MDT.js";import"./chunks/chunk-SNGM6NSO.js";import"./chunks/chunk-P24YBQ6H.js";import"./chunks/chunk-NMIZSQDN.js";import"./chunks/chunk-K7ARJYAG.js";import"./chunks/chunk-V5TOMLK4.js";import"./chunks/chunk-M3R7F2N4.js";import"./chunks/chunk-4E6BGQWR.js";import"./chunks/chunk-6UMVJ7RL.js";import"./chunks/chunk-IIGNDMLO.js";import"./chunks/chunk-N65H4JMJ.js";import"./chunks/chunk-EJN55YDV.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-4U6ACPA4.js";import"./chunks/chunk-7VGBGUX7.js";import"./chunks/chunk-CU3LNJZV.js";import"./chunks/chunk-JALVF3C2.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-BZIC36KP.js";import{printError}from"./chunks/chunk-PKZK23PR.js";import{buildCommandDocumentationLines,buildCommandExampleLines,createHelpTheme,help,helpColumns,helpHeading,helpRows,helpSection,helpSyntaxWidth,helpUsage,remoteText,wrapHelpText}from"./chunks/chunk-OYIDWI5Y.js";import"./chunks/chunk-3G3FQYMW.js";import{getScope}from"./chunks/chunk-DNLE3KPC.js";import{TelemetryClient}from"./chunks/chunk-MBXLL2HF.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError}from"./chunks/chunk-AUIV7YJO.js";import"./chunks/chunk-FYE7ILRR.js";import{getLinkedProject,getProjectByNameOrId,getProjectLink,isJSONObject,isPromptCanceledError,sleep}from"./chunks/chunk-6NUH6ZPE.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-PKNEWN4W.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-PL6IOUKW.js";import"./chunks/chunk-4NTBYNFR.js";import{getTypedOptionName,isArgumentError,parseArguments}from"./chunks/chunk-US7YJ2RQ.js";import"./chunks/chunk-2VBFQZ72.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedSubcommand}from"./chunks/chunk-SDYCW5JM.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-4SAVH3H7.js";import{APIError,ProjectNotFound,isAPIError}from"./chunks/chunk-T2FCF46I.js";import{getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{output_manager_default}from"./chunks/chunk-GZLYNPNU.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{getFlagsSpecification,globalCommandOptions,quoteArg}from"./chunks/chunk-AMPJ6RWT.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"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,getExitCodeForReason}from"./chunks/chunk-JBU72NEQ.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";function serviceTelemetryValue(value){let trimmed=value.trim();if(!trimmed)return null;let authority=trimmed.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"").split(/[/?#]/,1)[0],atIndex=authority.lastIndexOf("@"),hostPort=atIndex===-1?authority:authority.slice(atIndex+1),host;if(hostPort.startsWith("[")){let end=hostPort.indexOf("]");host=end===-1?hostPort:hostPort.slice(0,end+1)}else host=hostPort.split(":",1)[0];return host?host.toLowerCase():null}var HEX_COLOR_REGEX=/^#[0-9a-fA-F]{6}$/;function isValidHexColor(value){return HEX_COLOR_REGEX.test(value)}function validateHexColor(value,label){if(value!==void 0&&!isValidHexColor(value))throw new Error(`Invalid ${label} "${value}". Expected 6-digit hex like #1A2B3C.`)}var ConnexTelemetryClient=class extends TelemetryClient{trackCliSubcommandDiscover(actual){this.trackCliSubcommand({subcommand:"discover",value:actual})}trackCliSubcommandCategories(actual){this.trackCliSubcommand({subcommand:"categories",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandContacts(actual){this.trackCliSubcommand({subcommand:"contacts",value:actual})}trackCliSubcommandAttach(actual){this.trackCliSubcommand({subcommand:"attach",value:actual})}trackCliSubcommandDetach(actual){this.trackCliSubcommand({subcommand:"detach",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRevokeTokens(actual){this.trackCliSubcommand({subcommand:"revoke-tokens",value:actual})}trackCliArgumentClient(v){v&&this.trackCliArgument({arg:"client",value:this.redactedValue})}trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliArgumentService(v){if(v){let value=serviceTelemetryValue(v);this.trackCliArgument({arg:"service",value:value??this.redactedValue})}}trackCliOptionName(v){v&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionSubject(v){v&&this.trackCliOption({option:"subject",value:v==="user"||v==="app"?v:this.redactedValue})}trackCliOptionInstallation(v){v&&this.trackCliOption({option:"installation",value:this.redactedValue})}trackCliOptionInstallationId(v){v&&this.trackCliOption({option:"installation-id",value:this.redactedValue})}trackCliOptionScopes(v){v&&this.trackCliOption({option:"scopes",value:this.redactedValue})}trackCliFlagNoDefaultScopes(v){v&&this.trackCliFlag("no-default-scopes")}trackCliOptionIcon(v){v&&this.trackCliOption({option:"icon",value:this.redactedValue})}trackCliOptionBackgroundColor(v){v&&this.trackCliOption({option:"background-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionAccentColor(v){v&&this.trackCliOption({option:"accent-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionData(v){v!==void 0&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionConnectorType(v){v&&this.trackCliOption({option:"connector-type",value:v})}trackCliOptionConnectionMethod(v){for(let value of[v??[]].flat())value&&this.trackCliOption({option:"connection-method",value})}trackCliOptionTarget(v){for(let value of[v??[]].flat())value&&this.trackCliOption({option:"target",value})}trackCliArgumentQuery(v){v&&this.trackCliArgument({arg:"query",value:this.redactedValue})}trackCliOptionCategory(v){for(let raw of v??[])for(let category of raw.split(","))category.trim()&&this.trackCliOption({option:"category",value:this.redactedValue})}trackCliFlagSupportsTriggers(v){v&&this.trackCliFlag("supports-triggers")}trackCliOptionParam(v){!v||v.length===0||this.trackCliOption({option:"param",value:String(v.length)})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagDisconnectAll(v){v&&this.trackCliFlag("disconnect-all")}trackCliFlagTriggers(v){v&&this.trackCliFlag("triggers")}trackCliOptionTriggerEvent(v){v&&v.length>0&&this.trackCliOption({option:"trigger-event",value:String(v.length)})}trackCliOptionGitBranch(v){v&&this.trackCliOption({option:"git-branch",value:this.redactedValue})}trackCliOptionTriggerBranch(v){v&&this.trackCliOption({option:"trigger-branch",value:this.redactedValue})}trackCliOptionTriggerEnvironment(v){v&&this.trackCliOption({option:"trigger-environment",value:this.redactedValue})}trackCliOptionTriggerPath(v){v&&this.trackCliOption({option:"trigger-path",value:this.redactedValue})}trackCliOptionTriggerProject(v){v&&this.trackCliOption({option:"trigger-project",value:this.redactedValue})}trackCliFlagMyTokens(v){v&&this.trackCliFlag("my-tokens")}trackCliFlagAllTokens(v){v&&this.trackCliFlag("all-tokens")}trackCliFlagAllProjects(v){v&&this.trackCliFlag("all-projects")}trackCliOptionLimit(v){v!==void 0&&this.trackCliOption({option:"limit",value:String(v)})}trackCliOptionNext(v){v&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionQuery(v){v&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionService(v){if(!(!v||v.length===0))for(let raw of v)for(let svc of raw.split(","))svc.trim()&&this.trackCliOption({option:"service",value:this.redactedValue})}trackCliOptionType(v){if(!(!v||v.length===0))for(let raw of v)for(let t of raw.split(",")){let trimmed=t.trim();trimmed&&this.trackCliOption({option:"type",value:trimmed})}}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliOptionEnvironment(v){if(!(!v||v.length===0))for(let raw of v)for(let env of raw.split(",")){let trimmed=env.trim();trimmed&&this.trackCliOption({option:"environment",value:this.redactedTargetName(trimmed)})}}};var import_chalk=__toESM(require_source(),1);var DEFAULT_LIMIT=50,MAX_LIMIT=500;function splitValues(values){return(values??[]).flatMap(v=>v.split(",").map(s2=>s2.trim())).filter(Boolean)}async function discover(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(args.length>1)return output_manager_default.error(`Too many arguments. Usage: \`${packageName} connect discover [query]\``),2;let query=args[0],limit=flags["--limit"]??DEFAULT_LIMIT;if(!Number.isInteger(limit)||limit<1)return output_manager_default.error("--limit must be a whole number of 1 or more."),2;limit>MAX_LIMIT&&(output_manager_default.warning(`--limit is capped at ${MAX_LIMIT}. Showing ${MAX_LIMIT}.`),limit=MAX_LIMIT);let categories3=splitValues(flags["--category"]),connectionMethods=splitValues(flags["--connection-method"]),targets=splitValues(flags["--target"]),params=new URLSearchParams;query&&params.set("query",query),categories3.length&&params.set("category",categories3.join(",")),connectionMethods.length&&params.set("connectionMethod",connectionMethods.join(",")),targets.length&&params.set("target",targets.join(",")),flags["--supports-triggers"]&&params.set("supportsTriggers","true"),params.set("limit",String(limit)),flags["--next"]&&params.set("cursor",flags["--next"]),output_manager_default.spinner("Fetching services\u2026");let response;try{response=await client.fetch(`/v1/connect/services?${params}`,{teamOptional:!0})}catch(err){return output_manager_default.stopSpinner(),printError(err,client),1}output_manager_default.stopSpinner();let services=response.services??[],next=response.pagination?.next??null;if(services.length===0){let unknown=await unknownCategories(client,categories3);if(unknown.length>0)return output_manager_default.error(`Unknown ${unknown.length===1?"category":"categories"}: ${unknown.map(c=>`"${sanitizeForTerminal(c)}"`).join(", ")}. Run \`${packageName} connect categories\` to see the valid slugs.`),2}if(asJson){let jsonServices=services.map(s2=>({service:s2.service,name:s2.name,description:s2.description??null,categories:s2.categories,connectionMethods:(s2.connectionMethods??[]).map(m=>m.connectionMethod),targets:(s2.targets??[]).map(t=>t.target),supportsTriggers:s2.supportsTriggers,beta:s2.beta===!0,website:s2.website??null,docsite:s2.docsite??null}));return client.stdout.write(`${JSON.stringify({services:jsonServices,pagination:{next}},null,2)}
7
+ import{require_ajv}from"./chunks/chunk-5CVEW3HD.js";import{CHECKBOX_INSTRUCTIONS}from"./chunks/chunk-OFDTADPQ.js";import{selectOrg}from"./chunks/chunk-RR5SDYNN.js";import{ENV_PULL_FAILED_MESSAGE,VALID_ENVIRONMENTS,connectResourceToProject,getLinkedProjectField,postProvisionSetup,validateEnvironments}from"./chunks/chunk-VKCBEW6R.js";import{sanitizeForTerminal}from"./chunks/chunk-UUBPAYTG.js";import"./chunks/chunk-MCRKBVZA.js";import"./chunks/chunk-MO2G2ND2.js";import{getCustomEnvironments,pickCustomEnvironment}from"./chunks/chunk-F7AVGV4Y.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import"./chunks/chunk-TPJV5UNE.js";import"./chunks/chunk-6Y2ZL5XJ.js";import"./chunks/chunk-YZKARZ2B.js";import{applyDeprecatedGitBranchFlag}from"./chunks/chunk-KBVYN635.js";import"./chunks/chunk-7YKFF6CE.js";import{resolveProjectContext}from"./chunks/chunk-UNPK7LVC.js";import"./chunks/chunk-NE6PKR2J.js";import{normalizeRepeatableStringFilters}from"./chunks/chunk-42FOKWGX.js";import"./chunks/chunk-4T57TXQ3.js";import"./chunks/chunk-25565AGS.js";import{require_execa}from"./chunks/chunk-RCUDI7OF.js";import"./chunks/chunk-GD7AV7BO.js";import{validateLsArgs}from"./chunks/chunk-42J2KCDF.js";import{formatDate}from"./chunks/chunk-HRR57QNP.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import"./chunks/chunk-PFD7LETF.js";import"./chunks/chunk-D3M2JG5C.js";import{printNextPageCommand,quoteShellArg}from"./chunks/chunk-TZE4CS4K.js";import{canPrompt,canPromptOnTerminal}from"./chunks/chunk-IQ7FPAI4.js";import"./chunks/chunk-UCRMJMH6.js";import"./chunks/chunk-7JMN657A.js";import"./chunks/chunk-JTAUWH5V.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import"./chunks/chunk-JUSNW3IF.js";import{table}from"./chunks/chunk-375JVQYK.js";import{getRenamedOption,reportRenamedOptionError,withWarnings}from"./chunks/chunk-3KJ6HWSX.js";import{getSubcommand as getSubcommand2}from"./chunks/chunk-ETV3C2CV.js";import"./chunks/chunk-SLCPSRDR.js";import{STORAGE_PROVIDERS,acceptTermsSubcommand,addSubcommand6 as addSubcommand,attachSubcommand,balanceSubcommand,categoriesSubcommand,categoriesSubcommand2,claimSubcommand,connectSubcommand2 as connectSubcommand,connectSubcommand3 as connectSubcommand2,connexCommand,contactsAddSubcommand,contactsSubcommand,createSubcommand2 as createSubcommand,createSubcommand9 as createSubcommand2,createThresholdSubcommand,deleteSubcommand4 as deleteSubcommand,detachSubcommand,disconnectSubcommand2 as disconnectSubcommand,disconnectSubcommand3 as disconnectSubcommand2,discoverSubcommand,discoverSubcommand2,findForeignCreateFlags,findOverlappingConnections,getCommandAliases,getConnections,getStorageProvider,getStorageStore,getStorageStores,getSubcommand3 as getSubcommand,guideSubcommand,inspectSubcommand10 as inspectSubcommand,installCommand,installationsSubcommand,integrationCommand,integrationResourceCommand,listStorageProviderTypes,listSubcommand16 as listSubcommand2,listSubcommand22 as listSubcommand3,listSubcommand7 as listSubcommand,loadStoreDetails,openSubcommand,openSubcommand4 as openSubcommand2,removeSubcommand10 as removeSubcommand2,removeSubcommand11 as removeSubcommand3,removeSubcommand5 as removeSubcommand,resolveProjectConnection,resolveStore,resourceSubcommand,revokeTokensSubcommand,statusSubcommand5 as statusSubcommand,storageCommand,storeMatchesType,storeProductLabel,storeSupportsOidc,storeTypeName,tokenSubcommand,updateSubcommand,updateSubcommand12 as updateSubcommand3,updateSubcommand7 as updateSubcommand2}from"./chunks/chunk-QROI2U32.js";import"./chunks/chunk-M3Z6NSC2.js";import"./chunks/chunk-ECFLIVEE.js";import"./chunks/chunk-RDWLLSPU.js";import"./chunks/chunk-7ZJ7VUIR.js";import"./chunks/chunk-WTFD4MDT.js";import"./chunks/chunk-IHTWZEQW.js";import"./chunks/chunk-74VQ7PQV.js";import"./chunks/chunk-SNGM6NSO.js";import"./chunks/chunk-P24YBQ6H.js";import"./chunks/chunk-NMIZSQDN.js";import"./chunks/chunk-K7ARJYAG.js";import"./chunks/chunk-V5TOMLK4.js";import"./chunks/chunk-M3R7F2N4.js";import"./chunks/chunk-4E6BGQWR.js";import"./chunks/chunk-6UMVJ7RL.js";import"./chunks/chunk-IIGNDMLO.js";import"./chunks/chunk-N65H4JMJ.js";import"./chunks/chunk-EJN55YDV.js";import"./chunks/chunk-5DXC4TE2.js";import"./chunks/chunk-4U6ACPA4.js";import"./chunks/chunk-7VGBGUX7.js";import"./chunks/chunk-CU3LNJZV.js";import"./chunks/chunk-JALVF3C2.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-BZIC36KP.js";import{printError}from"./chunks/chunk-NDMQVBTV.js";import{buildCommandDocumentationLines,buildCommandExampleLines,createHelpTheme,help,helpColumns,helpHeading,helpRows,helpSection,helpSyntaxWidth,helpUsage,remoteText,wrapHelpText}from"./chunks/chunk-HZEKH3RO.js";import"./chunks/chunk-3G3FQYMW.js";import{getScope}from"./chunks/chunk-NSPW47RU.js";import{TelemetryClient}from"./chunks/chunk-MBXLL2HF.js";import"./chunks/chunk-2EYYB6YN.js";import"./chunks/chunk-NWGBDBZI.js";import{buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError}from"./chunks/chunk-5X635INY.js";import"./chunks/chunk-FYE7ILRR.js";import{getLinkedProject,getProjectByNameOrId,getProjectLink,isJSONObject,isPromptCanceledError,sleep}from"./chunks/chunk-2J35YKA2.js";import"./chunks/chunk-4HR3I3ML.js";import{formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-PKNEWN4W.js";import"./chunks/chunk-ITQPDXXA.js";import"./chunks/chunk-GL66K54F.js";import"./chunks/chunk-4NTBYNFR.js";import{getTypedOptionName,isArgumentError,parseArguments}from"./chunks/chunk-AYZ52QDF.js";import"./chunks/chunk-2VBFQZ72.js";import{validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedSubcommand}from"./chunks/chunk-SDYCW5JM.js";import"./chunks/chunk-LUX4PBJL.js";import"./chunks/chunk-OPORM35X.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-ZS2WS4AM.js";import"./chunks/chunk-4SAVH3H7.js";import{APIError,ProjectNotFound,isAPIError}from"./chunks/chunk-4DMKP6AO.js";import{getCommandName,getCommandNamePlain,packageName,require_lib}from"./chunks/chunk-VRH7LWOC.js";import"./chunks/chunk-DBT6PGEH.js";import{output_manager_default}from"./chunks/chunk-GZLYNPNU.js";import"./chunks/chunk-BLUPZPAS.js";import"./chunks/chunk-5MDNVAE6.js";import"./chunks/chunk-OCR5CRTH.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-YHPPP3SF.js";import"./chunks/chunk-PUKYAALC.js";import{getFlagsSpecification,globalCommandOptions,quoteArg}from"./chunks/chunk-AMPJ6RWT.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"./chunks/chunk-MY4MONOH.js";import"./chunks/chunk-7EJQLVWX.js";import"./chunks/chunk-SCV7XEEO.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,getExitCodeForReason}from"./chunks/chunk-Q2QVK3TH.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";function serviceTelemetryValue(value){let trimmed=value.trim();if(!trimmed)return null;let authority=trimmed.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,"").split(/[/?#]/,1)[0],atIndex=authority.lastIndexOf("@"),hostPort=atIndex===-1?authority:authority.slice(atIndex+1),host;if(hostPort.startsWith("[")){let end=hostPort.indexOf("]");host=end===-1?hostPort:hostPort.slice(0,end+1)}else host=hostPort.split(":",1)[0];return host?host.toLowerCase():null}var HEX_COLOR_REGEX=/^#[0-9a-fA-F]{6}$/;function isValidHexColor(value){return HEX_COLOR_REGEX.test(value)}function validateHexColor(value,label){if(value!==void 0&&!isValidHexColor(value))throw new Error(`Invalid ${label} "${value}". Expected 6-digit hex like #1A2B3C.`)}var ConnexTelemetryClient=class extends TelemetryClient{trackCliSubcommandDiscover(actual){this.trackCliSubcommand({subcommand:"discover",value:actual})}trackCliSubcommandCategories(actual){this.trackCliSubcommand({subcommand:"categories",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandOpen(actual){this.trackCliSubcommand({subcommand:"open",value:actual})}trackCliSubcommandContacts(actual){this.trackCliSubcommand({subcommand:"contacts",value:actual})}trackCliSubcommandAttach(actual){this.trackCliSubcommand({subcommand:"attach",value:actual})}trackCliSubcommandDetach(actual){this.trackCliSubcommand({subcommand:"detach",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandRevokeTokens(actual){this.trackCliSubcommand({subcommand:"revoke-tokens",value:actual})}trackCliArgumentClient(v){v&&this.trackCliArgument({arg:"client",value:this.redactedValue})}trackCliArgumentId(v){v&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliArgumentService(v){if(v){let value=serviceTelemetryValue(v);this.trackCliArgument({arg:"service",value:value??this.redactedValue})}}trackCliOptionName(v){v&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionSubject(v){v&&this.trackCliOption({option:"subject",value:v==="user"||v==="app"?v:this.redactedValue})}trackCliOptionInstallation(v){v&&this.trackCliOption({option:"installation",value:this.redactedValue})}trackCliOptionInstallationId(v){v&&this.trackCliOption({option:"installation-id",value:this.redactedValue})}trackCliOptionScopes(v){v&&this.trackCliOption({option:"scopes",value:this.redactedValue})}trackCliFlagNoDefaultScopes(v){v&&this.trackCliFlag("no-default-scopes")}trackCliOptionIcon(v){v&&this.trackCliOption({option:"icon",value:this.redactedValue})}trackCliOptionBackgroundColor(v){v&&this.trackCliOption({option:"background-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionAccentColor(v){v&&this.trackCliOption({option:"accent-color",value:isValidHexColor(v)?v:this.redactedValue})}trackCliOptionData(v){v!==void 0&&this.trackCliOption({option:"data",value:this.redactedValue})}trackCliOptionConnectorType(v){v&&this.trackCliOption({option:"connector-type",value:v})}trackCliOptionConnectionMethod(v){for(let value of[v??[]].flat())value&&this.trackCliOption({option:"connection-method",value})}trackCliOptionTarget(v){for(let value of[v??[]].flat())value&&this.trackCliOption({option:"target",value})}trackCliArgumentQuery(v){v&&this.trackCliArgument({arg:"query",value:this.redactedValue})}trackCliOptionCategory(v){for(let raw of v??[])for(let category of raw.split(","))category.trim()&&this.trackCliOption({option:"category",value:this.redactedValue})}trackCliFlagSupportsTriggers(v){v&&this.trackCliFlag("supports-triggers")}trackCliOptionParam(v){!v||v.length===0||this.trackCliOption({option:"param",value:String(v.length)})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagDisconnectAll(v){v&&this.trackCliFlag("disconnect-all")}trackCliFlagTriggers(v){v&&this.trackCliFlag("triggers")}trackCliOptionTriggerEvent(v){v&&v.length>0&&this.trackCliOption({option:"trigger-event",value:String(v.length)})}trackCliOptionGitBranch(v){v&&this.trackCliOption({option:"git-branch",value:this.redactedValue})}trackCliOptionTriggerBranch(v){v&&this.trackCliOption({option:"trigger-branch",value:this.redactedValue})}trackCliOptionTriggerEnvironment(v){v&&this.trackCliOption({option:"trigger-environment",value:this.redactedValue})}trackCliOptionTriggerPath(v){v&&this.trackCliOption({option:"trigger-path",value:this.redactedValue})}trackCliOptionTriggerProject(v){v&&this.trackCliOption({option:"trigger-project",value:this.redactedValue})}trackCliFlagMyTokens(v){v&&this.trackCliFlag("my-tokens")}trackCliFlagAllTokens(v){v&&this.trackCliFlag("all-tokens")}trackCliFlagAllProjects(v){v&&this.trackCliFlag("all-projects")}trackCliOptionLimit(v){v!==void 0&&this.trackCliOption({option:"limit",value:String(v)})}trackCliOptionNext(v){v&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionQuery(v){v&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(v){v&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionService(v){if(!(!v||v.length===0))for(let raw of v)for(let svc of raw.split(","))svc.trim()&&this.trackCliOption({option:"service",value:this.redactedValue})}trackCliOptionType(v){if(!(!v||v.length===0))for(let raw of v)for(let t of raw.split(",")){let trimmed=t.trim();trimmed&&this.trackCliOption({option:"type",value:trimmed})}}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliOptionEnvironment(v){if(!(!v||v.length===0))for(let raw of v)for(let env of raw.split(",")){let trimmed=env.trim();trimmed&&this.trackCliOption({option:"environment",value:this.redactedTargetName(trimmed)})}}};var import_chalk=__toESM(require_source(),1);var DEFAULT_LIMIT=50,MAX_LIMIT=500;function splitValues(values){return(values??[]).flatMap(v=>v.split(",").map(s=>s.trim())).filter(Boolean)}async function discover(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(args.length>1)return output_manager_default.error(`Too many arguments. Usage: \`${packageName} connect discover [query]\``),2;let query=args[0],limit=flags["--limit"]??DEFAULT_LIMIT;if(!Number.isInteger(limit)||limit<1)return output_manager_default.error("--limit must be a whole number of 1 or more."),2;limit>MAX_LIMIT&&(output_manager_default.warning(`--limit is capped at ${MAX_LIMIT}. Showing ${MAX_LIMIT}.`),limit=MAX_LIMIT);let categories3=splitValues(flags["--category"]),connectionMethods=splitValues(flags["--connection-method"]),targets=splitValues(flags["--target"]),params=new URLSearchParams;query&&params.set("query",query),categories3.length&&params.set("category",categories3.join(",")),connectionMethods.length&&params.set("connectionMethod",connectionMethods.join(",")),targets.length&&params.set("target",targets.join(",")),flags["--supports-triggers"]&&params.set("supportsTriggers","true"),params.set("limit",String(limit)),flags["--next"]&&params.set("cursor",flags["--next"]),output_manager_default.spinner("Fetching services\u2026");let response;try{response=await client.fetch(`/v1/connect/services?${params}`,{teamOptional:!0})}catch(err){return output_manager_default.stopSpinner(),printError(err,client),1}output_manager_default.stopSpinner();let services=response.services??[],next=response.pagination?.next??null;if(services.length===0){let unknown=await unknownCategories(client,categories3);if(unknown.length>0)return output_manager_default.error(`Unknown ${unknown.length===1?"category":"categories"}: ${unknown.map(c=>`"${sanitizeForTerminal(c)}"`).join(", ")}. Run \`${packageName} connect categories\` to see the valid slugs.`),2}if(asJson){let jsonServices=services.map(s=>({service:s.service,name:s.name,description:s.description??null,categories:s.categories,connectionMethods:(s.connectionMethods??[]).map(m=>m.connectionMethod),targets:(s.targets??[]).map(t=>t.target),supportsTriggers:s.supportsTriggers,beta:s.beta===!0,website:s.website??null,docsite:s.docsite??null}));return client.stdout.write(`${JSON.stringify({services:jsonServices,pagination:{next}},null,2)}
8
8
  `),0}if(services.length===0)return output_manager_default.log(query?`No services matching "${sanitizeForTerminal(query)}" found.`:"No services found."),0;let useCompactFormat=client.stderr.columns>0&&client.stderr.columns<120;if(output_manager_default.print(`${useCompactFormat?formatCompactList(services):formatTable(services)}
9
9
  `),output_manager_default.log(`Run \`${packageName} connect create <service>\` to create a connector.`),next){let parts=[`${packageName} connect discover`];query&&parts.push(JSON.stringify(query));for(let c of categories3)parts.push(`--category ${c}`);for(let m of connectionMethods)parts.push(`--connection-method ${m}`);for(let t of targets)parts.push(`--target ${t}`);flags["--supports-triggers"]&&parts.push("--supports-triggers"),flags["--limit"]!==void 0&&parts.push(`--limit ${limit}`),parts.push(`--next ${next}`),output_manager_default.print(`
10
- `),printNextPageCommand(parts.join(" "))}return 0}function methodsOf(s2){let methods=(s2.connectionMethods??[]).map(m=>m.connectionMethod);return methods.length?methods.join(", "):import_chalk.default.gray("\u2013")}async function unknownCategories(client,categories3){if(categories3.length===0)return[];try{let response=await client.fetch("/v1/connect/services/categories",{teamOptional:!0}),known=new Set((response.categories??[]).map(c=>c.slug));return categories3.filter(c=>!known.has(c))}catch{return[]}}function formatTable(services){return table([["Service","Name","Methods","Description"].map(h=>import_chalk.default.bold(import_chalk.default.cyan(h))),...services.map(s2=>[sanitizeForTerminal(s2.service),sanitizeForTerminal(s2.name),methodsOf(s2),s2.description?sanitizeForTerminal(s2.description):import_chalk.default.gray("\u2013")])],{hsep:4})}function formatCompactList(services){return services.map(s2=>[`${import_chalk.default.bold(sanitizeForTerminal(s2.name))} (${sanitizeForTerminal(s2.service)})`,` Methods: ${methodsOf(s2)}`,` Description: ${s2.description?sanitizeForTerminal(s2.description):"\u2013"}`].join(`
10
+ `),printNextPageCommand(parts.join(" "))}return 0}function methodsOf(s){let methods=(s.connectionMethods??[]).map(m=>m.connectionMethod);return methods.length?methods.join(", "):import_chalk.default.gray("\u2013")}async function unknownCategories(client,categories3){if(categories3.length===0)return[];try{let response=await client.fetch("/v1/connect/services/categories",{teamOptional:!0}),known=new Set((response.categories??[]).map(c=>c.slug));return categories3.filter(c=>!known.has(c))}catch{return[]}}function formatTable(services){return table([["Service","Name","Methods","Description"].map(h=>import_chalk.default.bold(import_chalk.default.cyan(h))),...services.map(s=>[sanitizeForTerminal(s.service),sanitizeForTerminal(s.name),methodsOf(s),s.description?sanitizeForTerminal(s.description):import_chalk.default.gray("\u2013")])],{hsep:4})}function formatCompactList(services){return services.map(s=>[`${import_chalk.default.bold(sanitizeForTerminal(s.name))} (${sanitizeForTerminal(s.service)})`,` Methods: ${methodsOf(s)}`,` Description: ${s.description?sanitizeForTerminal(s.description):"\u2013"}`].join(`
11
11
  `)).join(`
12
12
 
13
13
  `)}var import_chalk2=__toESM(require_source(),1);async function categories(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(args.length>0)return output_manager_default.error(`Too many arguments. Usage: \`${packageName} connect categories\``),2;output_manager_default.spinner("Fetching categories\u2026");let fetched;try{fetched=(await client.fetch("/v1/connect/services/categories",{teamOptional:!0})).categories??[]}catch(err){return output_manager_default.stopSpinner(),printError(err,client),1}return output_manager_default.stopSpinner(),formatResult.jsonOutput?(client.stdout.write(`${JSON.stringify({categories:fetched},null,2)}
@@ -46,7 +46,7 @@ ${JSON.stringify(schema,null,2)}`:"";throw new ConnexMethodError(`Connection met
46
46
  `),0}await delay(2e3,void 0,{signal:controller.signal})}}catch{}finally{clearTimeout(timeout),process.off("SIGINT",onInterrupt),process.off("SIGTERM",onTerminate),process.off("SIGHUP",onHangup)}return canceled?(printTriggerText(client,"Stopped waiting for trigger verification details."),canceled):(output_manager_default.error(timedOut?"Timed out waiting for trigger verification details.":"Could not retrieve trigger verification details. Check your access and finish setup in the dashboard."),1)}function printTriggerText(client,text2){if(!text2.trim()){output_manager_default.print(`
47
47
  `);return}let width=client.stderr.columns||80,marker=text2.match(/^\d+\.\s+/)?.[0]??"",continuation=" ".repeat(2+marker.length),lines=[],line=` ${marker}`,hasWord=!1;for(let word of text2.slice(marker.length).trim().split(/\s+/))hasWord&&line.length+word.length+1>width?(lines.push(line),line=`${continuation}${word}`):line+=hasWord?` ${word}`:word,hasWord=!0;lines.push(line),output_manager_default.print(`${lines.join(`
48
48
  `)}
49
- `)}async function collectTriggerInput(client,schema,options){if(!schema)return{};let properties=isJSONObject(schema.properties)?schema.properties:{},required=Array.isArray(schema.required)?schema.required:[],fields=Object.entries(properties).filter(([key,field])=>required.includes(key)&&isJSONObject(field)&&field.readOnly!==!0);if(fields.length>0&&(!canPromptOnTerminal(client)||options.json||options.stdinPayload))return{error:`Trigger ${options.kind} requires interactive input. Run this command in a terminal without --json or --format=json, and supply connector credentials without piping stdin.`};let ajv=new import_ajv.default({logger:!1}),validate,validators;try{validate=ajv.compile(schema),validators=fields.map(([,field])=>ajv.compile(field))}catch{return{error:`The API returned an unsupported trigger ${options.kind} schema.`}}let input={};for(let[index,[key,field]]of fields.entries()){if(!isJSONObject(field))continue;options.beginStep();let label=remoteText(typeof field.title=="string"?field.title:key);typeof field.description=="string"&&printTriggerText(client,remoteText(connexMarkdownToPlainText(field.description)));let parse2=value=>field.type==="string"?value:JSON.parse(value),prompt={message:field.type==="string"?`${label}:`:`${label} (JSON):`,validate:value=>{try{return validators[index](parse2(value))===!0||"Enter a value matching the required field format."}catch{return"Enter valid JSON matching the required field format."}}},secret=field.encrypted===!0||/secret|token|password|key/i.test(key);try{let choices=!secret&&field.type==="array"&&Array.isArray(field.options)?field.options.flatMap(option=>isJSONObject(option)&&typeof option.value=="string"?[{name:remoteText(typeof option.label=="string"?option.label:option.value),value:option.value}]:[]):[];if(choices.length>0){input[key]=await client.withEscapePromptCancellation(()=>client.input.checkbox({message:`${label}:`,instructions:CHECKBOX_INSTRUCTIONS,choices,validate:items=>validators[index](items.map(item=>"value"in item?item.value:void 0))===!0||"Select values matching the required field format."}));continue}let value=await client.withEscapePromptCancellation(()=>client.input.text({...prompt,...secret?{transformer:value2=>"*".repeat(value2.length)}:{}}));input[key]=parse2(value)}catch(error){if(isPromptCanceledError(error))return{error:`Trigger ${options.kind} canceled.`,exitCode:130};throw error}}return validate(input)!==!0?{error:`Trigger ${options.kind} fields do not match the API schema. Check the provider requirements and try again.`}:Object.keys(input).length>0?{input}:{}}async function create(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,service=args[0];if(!service)return output_manager_default.error("Missing service. Usage: vercel connect create <service>"),2;let branchError=applyDeprecatedGitBranchFlag(client,flags,"--trigger-branch");if(branchError)return reportRenamedOptionError(client,branchError,{json:asJson});if(flags["--trigger-event"]&&!flags["--triggers"])return output_manager_default.error("The --trigger-event option requires --triggers."),2;let triggerPath=flags["--trigger-path"],triggerProject=flags["--trigger-project"],triggerBranch=flags["--git-branch"],triggerEnvironment=flags["--trigger-environment"];if(!flags["--triggers"]&&(triggerPath!==void 0||triggerProject!==void 0||triggerBranch!==void 0||triggerEnvironment!==void 0))return output_manager_default.error("The --trigger-project, --trigger-path, --git-branch, and --trigger-environment options require --triggers."),1;if(triggerBranch!==void 0&&triggerEnvironment!==void 0)return output_manager_default.error("The --git-branch and --trigger-environment options are mutually exclusive."),2;if(triggerProject!==void 0&&triggerProject.trim()==="")return output_manager_default.error("The --trigger-project value must not be empty."),1;if(triggerPath!==void 0&&(triggerPath.length===0||triggerPath.length>2048))return output_manager_default.error("The --trigger-path value must be between 1 and 2048 characters."),2;if(triggerBranch!==void 0&&triggerBranch.trim()==="")return output_manager_default.error("The --git-branch value must not be empty."),1;if(triggerEnvironment!==void 0&&triggerEnvironment.trim()==="")return output_manager_default.error("The --trigger-environment value must not be empty."),1;let dataFlag=flags["--data"],connectorType=flags["--connector-type"],connectionMethodFlag=flags["--connection-method"],targetFlag=flags["--target"];if(connectorType&&dataFlag===void 0)return output_manager_default.error("The --connector-type option requires --data."),2;if(connectorType&&connectionMethodFlag)return output_manager_default.error("The --connector-type and --connection-method options cannot be combined. The connection method decides the connector type."),1;let hasDataFlag=dataFlag!==void 0,isDataOnlyCreate=hasDataFlag&&!connectionMethodFlag,suppliedParams={};try{let parsed=parseConnexParams(flags["--param"]);suppliedParams=parsed.params;for(let warning of parsed.warnings)output_manager_default.warn(warning)}catch(err){return output_manager_default.error(err.message),1}if(isDataOnlyCreate&&Object.keys(suppliedParams).length>0)return output_manager_default.error("The --param option requires --connection-method."),2;if(isDataOnlyCreate&&targetFlag)return output_manager_default.error("The --target option requires --connection-method."),2;let suppliedData,isDataFlagEmpty=!1;if(dataFlag!==void 0)try{let rawData=await resolveDataFlag(dataFlag,client);rawData.trim().length===0?isDataFlagEmpty=!0:(suppliedData=parseDataFlag(rawData),dataFlag.startsWith("@")||warnInlineSecret(suppliedData))}catch(err){return output_manager_default.error(err.message),1}let iconFlag=flags["--icon"],backgroundColor=flags["--background-color"],accentColor=flags["--accent-color"];if(iconFlag!==void 0&&iconFlag.length===0)return output_manager_default.error("Icon path cannot be empty."),1;try{validateHexColor(backgroundColor,"background color"),validateHexColor(accentColor,"accent color")}catch(err){return output_manager_default.error(err.message),1}let preparedIcon;if(iconFlag)try{preparedIcon=await prepareConnexIcon(iconFlag,client.cwd)}catch(err){return output_manager_default.error(err.message),1}await selectConnexTeam(client,"Select the team where you want to create this connector");let link=await getProjectLink(client,client.cwd),triggerProjectId;if(triggerProject!==void 0){output_manager_default.spinner("Looking up trigger destination project\u2026");try{let resolvedProject=await getProjectByNameOrId(client,triggerProject,client.config.currentTeam);if(output_manager_default.stopSpinner(),resolvedProject instanceof ProjectNotFound)return output_manager_default.error(`Trigger destination project ${triggerProject} was not found. Check the name/ID and try again.`),1;triggerProjectId=resolvedProject.id}catch(err){return output_manager_default.stopSpinner(),printError(err,client),1}}let destinationProjectId=triggerProjectId??link?.projectId;if((triggerPath!==void 0||triggerProject!==void 0||triggerBranch!==void 0||triggerEnvironment!==void 0)&&!destinationProjectId)return output_manager_default.error("Trigger destination options require a linked project. Run `vercel link` first."),1;let customEnvironmentId;if(triggerEnvironment!==void 0&&destinationProjectId)try{let customEnvironments=await getCustomEnvironments(client,destinationProjectId),customEnvironment=pickCustomEnvironment(customEnvironments,triggerEnvironment);if(!customEnvironment)return output_manager_default.error(`Unknown trigger environment ${triggerEnvironment} for project ${destinationProjectId}. Use a custom environment slug or stable ID from that project.`),1;customEnvironmentId=customEnvironment.id}catch(err){return printError(err,client),1}if(isDataFlagEmpty&&isDataOnlyCreate)return await outputMissingDataError(client,service,connectorType);let interactive=!!client.stdin.isTTY&&!client.nonInteractive,name=flags["--name"];if(!name){if(!interactive)return output_manager_default.error("Missing required option --name. In non-interactive mode, provide --name for the connector."),2;name=await client.input.text({message:`What would you like to name your ${service} app?`,validate:val=>val.trim().length>0||"Name cannot be empty"})}let selection,serviceName=service;if(!isDataOnlyCreate){let serviceInfo;try{asJson||output_manager_default.spinner("Loading connection methods\u2026"),serviceInfo=await fetchConnexServiceInfo(client,service)}catch(err){if(connectionMethodFlag)return output_manager_default.stopSpinner(),printError(err,client),1;output_manager_default.debug(`Failed to load connection methods: ${err.message}`)}finally{output_manager_default.stopSpinner()}serviceName=serviceInfo?.name??service;let methods=serviceInfo?.connectionMethods??[];if(methods.length===0){let unusable=connectionMethodFlag?"--connection-method":targetFlag?"--target":Object.keys(suppliedParams).length>0?"--param":void 0;if(unusable)return output_manager_default.error(`"${service}" doesn't publish connection methods, so ${unusable} can't be used.`),1}else try{selection=await resolveConnexConnectionMethod(client,{service,serviceName,methods,targets:serviceInfo?.targets,connectionMethodFlag,targetFlag,resolvedConnectionMethod:serviceInfo?.resolvedConnectionMethod,interactive,skipConfirm:flags["--yes"]===!0})}catch(err){if(err instanceof ConnexMethodError)return output_manager_default.error(err.message),1;throw err}}let useManagedMethodCreate=selection!==void 0&&selection.method.create.managed===!0&&!hasDataFlag,useManualMethodCreate=selection!==void 0&&!useManagedMethodCreate,methodParams={},methodData={};if(useManualMethodCreate&&selection)try{let{method}=selection;methodParams=await collectTemplateParams(client,method,suppliedParams,interactive),methodData=await collectMethodCredentials(client,method,suppliedData,interactive,()=>printMethodGuidance(method,serviceName))}catch(err){if(err instanceof ConnexMethodError)return output_manager_default.error(err.message),1;throw err}else if(useManagedMethodCreate&&Object.keys(suppliedParams).length>0&&selection)return output_manager_default.error(`Connection method "${selection.method.connectionMethod}" is registered automatically and takes no --param values.`),1;let triggerVerificationInput,triggerRegistrationInput,manualSetupInstructions,postCreationSchema;if(flags["--triggers"]){let triggerSetup=await prepareTriggerSetup(client,{service,serviceName,methodType:selection?.method.type,connectorType,json:asJson,stdinPayload:dataFlag==="@-"});if(triggerSetup.exitCode!==void 0)return triggerSetup.exitCode;triggerVerificationInput=triggerSetup.input,triggerRegistrationInput=triggerSetup.registrationInput,manualSetupInstructions=triggerSetup.manualSetupInstructions,postCreationSchema=triggerSetup.postCreationSchema,serviceName=triggerSetup.serviceName}let iconSha;if(preparedIcon){try{output_manager_default.spinner("Uploading icon\u2026"),iconSha=await uploadConnexIcon(client,preparedIcon)}catch(err){return output_manager_default.stopSpinner(),output_manager_default.error(err.message),1}output_manager_default.stopSpinner()}let body={service,name};link?.projectId&&(body.projectId=link.projectId),body.triggers={enabled:flags["--triggers"]===!0},triggerVerificationInput!==void 0&&(body.triggerVerificationInput=triggerVerificationInput),triggerRegistrationInput!==void 0&&(body.triggerRegistrationInput=triggerRegistrationInput),flags["--trigger-event"]!==void 0&&(body.events=flags["--trigger-event"]),(triggerPath!==void 0||triggerProject!==void 0||triggerBranch!==void 0||triggerEnvironment!==void 0)&&(body.triggerDestination={...triggerProjectId!==void 0?{projectId:triggerProjectId}:{},...triggerPath!==void 0?{path:triggerPath}:{},...triggerBranch!==void 0?{branch:triggerBranch}:{},...customEnvironmentId!==void 0?{customEnvironmentId}:{}}),iconSha&&(body.icon=iconSha),backgroundColor&&(body.backgroundColor=backgroundColor),accentColor&&(body.accentColor=accentColor),selection&&(body.connectionMethod=selection.method.connectionMethod,selection.target!==void 0&&(body.target=selection.target)),asJson||output_manager_default.spinner("Setting up\u2026");let createdClient=null,browserUrl,hasTriggerInput=triggerVerificationInput!==void 0||triggerRegistrationInput!==void 0;function reportCreateError(error){hasTriggerInput?printTriggerSetupError(client,error,asJson):printError(error,client)}let verifier;if(useManualMethodCreate){Object.keys(methodParams).length>0&&(body.params=methodParams),body.data=methodData;try{createdClient=await client.fetch("/v1/connect/connectors",{method:"POST",body})}catch(err){return output_manager_default.stopSpinner(),!hasTriggerInput&&err.status===404?(output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(reportCreateError(err),1)}}else if(isDataOnlyCreate)try{let serviceInfo=connectorType===void 0||connectorType==="oauth"?await fetchConnexServiceInfo(client,service):void 0,resolvedConnectorType=connectorType??defaultConnectorType(serviceInfo)??"oauth";body.data=withDiscoveredServerUrl(suppliedData,resolvedConnectorType,serviceInfo),body.type=resolvedConnectorType,createdClient=await client.fetch("/v1/connect/connectors",{method:"POST",body})}catch(err){return!hasTriggerInput&&err.status===404?(output_manager_default.stopSpinner(),output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(output_manager_default.stopSpinner(),reportCreateError(err),1)}else{let request=generateRequestCode();verifier=request.verifier,body.request_code=request.requestCode;try{createdClient=await client.fetch("/v1/connect/connectors/managed?autoinstall=true",{method:"POST",body})}catch(err){let apiErr=err;if(apiErr.status===422&&apiErr.registerUrl)browserUrl=apiErr.registerUrl;else return!hasTriggerInput&&apiErr.status===404?(output_manager_default.stopSpinner(),output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(output_manager_default.stopSpinner(),reportCreateError(err),1)}}output_manager_default.stopSpinner();let hasBeenInstalled=!1,brandingPatchFailed=!1;if(browserUrl){if(hasTriggerInput)return asJson?(reportCreateError(new Error("Trigger setup requires browser registration")),1):(output_manager_default.error("This connection method requires browser setup, which cannot accept trigger setup input. Complete connector setup in the dashboard."),1);let urlWithBranding=new URL(browserUrl);iconSha&&urlWithBranding.searchParams.set("icon",iconSha),backgroundColor&&urlWithBranding.searchParams.set("backgroundColor",backgroundColor),accentColor&&urlWithBranding.searchParams.set("accentColor",accentColor);let finalBrowserUrl=urlWithBranding.toString();if(output_manager_default.log(`Opening browser for ${service} app setup\u2026`),output_manager_default.log(`If the browser doesn't open, visit:
49
+ `)}async function collectTriggerInput(client,schema,options){if(!schema)return{};let properties=isJSONObject(schema.properties)?schema.properties:{},required=Array.isArray(schema.required)?schema.required:[],fields=Object.entries(properties).filter(([key,field])=>required.includes(key)&&isJSONObject(field)&&field.readOnly!==!0);if(fields.length>0&&(!canPromptOnTerminal(client)||options.json||options.stdinPayload))return{error:`Trigger ${options.kind} requires interactive input. Run this command in a terminal without --json or --format=json, and supply connector credentials without piping stdin.`};let ajv=new import_ajv.default({logger:!1}),validate,validators;try{validate=ajv.compile(schema),validators=fields.map(([,field])=>ajv.compile(field))}catch{return{error:`The API returned an unsupported trigger ${options.kind} schema.`}}let input={};for(let[index,[key,field]]of fields.entries()){if(!isJSONObject(field))continue;options.beginStep();let label=remoteText(typeof field.title=="string"?field.title:key);typeof field.description=="string"&&printTriggerText(client,remoteText(connexMarkdownToPlainText(field.description)));let parse=value=>field.type==="string"?value:JSON.parse(value),prompt={message:field.type==="string"?`${label}:`:`${label} (JSON):`,validate:value=>{try{return validators[index](parse(value))===!0||"Enter a value matching the required field format."}catch{return"Enter valid JSON matching the required field format."}}},secret=field.encrypted===!0||/secret|token|password|key/i.test(key);try{let choices=!secret&&field.type==="array"&&Array.isArray(field.options)?field.options.flatMap(option=>isJSONObject(option)&&typeof option.value=="string"?[{name:remoteText(typeof option.label=="string"?option.label:option.value),value:option.value}]:[]):[];if(choices.length>0){input[key]=await client.withEscapePromptCancellation(()=>client.input.checkbox({message:`${label}:`,instructions:CHECKBOX_INSTRUCTIONS,choices,validate:items=>validators[index](items.map(item=>"value"in item?item.value:void 0))===!0||"Select values matching the required field format."}));continue}let value=await client.withEscapePromptCancellation(()=>client.input.text({...prompt,...secret?{transformer:value2=>"*".repeat(value2.length)}:{}}));input[key]=parse(value)}catch(error){if(isPromptCanceledError(error))return{error:`Trigger ${options.kind} canceled.`,exitCode:130};throw error}}return validate(input)!==!0?{error:`Trigger ${options.kind} fields do not match the API schema. Check the provider requirements and try again.`}:Object.keys(input).length>0?{input}:{}}async function create(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,service=args[0];if(!service)return output_manager_default.error("Missing service. Usage: vercel connect create <service>"),2;let branchError=applyDeprecatedGitBranchFlag(client,flags,"--trigger-branch");if(branchError)return reportRenamedOptionError(client,branchError,{json:asJson});if(flags["--trigger-event"]&&!flags["--triggers"])return output_manager_default.error("The --trigger-event option requires --triggers."),2;let triggerPath=flags["--trigger-path"],triggerProject=flags["--trigger-project"],triggerBranch=flags["--git-branch"],triggerEnvironment=flags["--trigger-environment"];if(!flags["--triggers"]&&(triggerPath!==void 0||triggerProject!==void 0||triggerBranch!==void 0||triggerEnvironment!==void 0))return output_manager_default.error("The --trigger-project, --trigger-path, --git-branch, and --trigger-environment options require --triggers."),1;if(triggerBranch!==void 0&&triggerEnvironment!==void 0)return output_manager_default.error("The --git-branch and --trigger-environment options are mutually exclusive."),2;if(triggerProject!==void 0&&triggerProject.trim()==="")return output_manager_default.error("The --trigger-project value must not be empty."),1;if(triggerPath!==void 0&&(triggerPath.length===0||triggerPath.length>2048))return output_manager_default.error("The --trigger-path value must be between 1 and 2048 characters."),2;if(triggerBranch!==void 0&&triggerBranch.trim()==="")return output_manager_default.error("The --git-branch value must not be empty."),1;if(triggerEnvironment!==void 0&&triggerEnvironment.trim()==="")return output_manager_default.error("The --trigger-environment value must not be empty."),1;let dataFlag=flags["--data"],connectorType=flags["--connector-type"],connectionMethodFlag=flags["--connection-method"],targetFlag=flags["--target"];if(connectorType&&dataFlag===void 0)return output_manager_default.error("The --connector-type option requires --data."),2;if(connectorType&&connectionMethodFlag)return output_manager_default.error("The --connector-type and --connection-method options cannot be combined. The connection method decides the connector type."),1;let hasDataFlag=dataFlag!==void 0,isDataOnlyCreate=hasDataFlag&&!connectionMethodFlag,suppliedParams={};try{let parsed=parseConnexParams(flags["--param"]);suppliedParams=parsed.params;for(let warning of parsed.warnings)output_manager_default.warn(warning)}catch(err){return output_manager_default.error(err.message),1}if(isDataOnlyCreate&&Object.keys(suppliedParams).length>0)return output_manager_default.error("The --param option requires --connection-method."),2;if(isDataOnlyCreate&&targetFlag)return output_manager_default.error("The --target option requires --connection-method."),2;let suppliedData,isDataFlagEmpty=!1;if(dataFlag!==void 0)try{let rawData=await resolveDataFlag(dataFlag,client);rawData.trim().length===0?isDataFlagEmpty=!0:(suppliedData=parseDataFlag(rawData),dataFlag.startsWith("@")||warnInlineSecret(suppliedData))}catch(err){return output_manager_default.error(err.message),1}let iconFlag=flags["--icon"],backgroundColor=flags["--background-color"],accentColor=flags["--accent-color"];if(iconFlag!==void 0&&iconFlag.length===0)return output_manager_default.error("Icon path cannot be empty."),1;try{validateHexColor(backgroundColor,"background color"),validateHexColor(accentColor,"accent color")}catch(err){return output_manager_default.error(err.message),1}let preparedIcon;if(iconFlag)try{preparedIcon=await prepareConnexIcon(iconFlag,client.cwd)}catch(err){return output_manager_default.error(err.message),1}await selectConnexTeam(client,"Select the team where you want to create this connector");let link=await getProjectLink(client,client.cwd),triggerProjectId;if(triggerProject!==void 0){output_manager_default.spinner("Looking up trigger destination project\u2026");try{let resolvedProject=await getProjectByNameOrId(client,triggerProject,client.config.currentTeam);if(output_manager_default.stopSpinner(),resolvedProject instanceof ProjectNotFound)return output_manager_default.error(`Trigger destination project ${triggerProject} was not found. Check the name/ID and try again.`),1;triggerProjectId=resolvedProject.id}catch(err){return output_manager_default.stopSpinner(),printError(err,client),1}}let destinationProjectId=triggerProjectId??link?.projectId;if((triggerPath!==void 0||triggerProject!==void 0||triggerBranch!==void 0||triggerEnvironment!==void 0)&&!destinationProjectId)return output_manager_default.error("Trigger destination options require a linked project. Run `vercel link` first."),1;let customEnvironmentId;if(triggerEnvironment!==void 0&&destinationProjectId)try{let customEnvironments=await getCustomEnvironments(client,destinationProjectId),customEnvironment=pickCustomEnvironment(customEnvironments,triggerEnvironment);if(!customEnvironment)return output_manager_default.error(`Unknown trigger environment ${triggerEnvironment} for project ${destinationProjectId}. Use a custom environment slug or stable ID from that project.`),1;customEnvironmentId=customEnvironment.id}catch(err){return printError(err,client),1}if(isDataFlagEmpty&&isDataOnlyCreate)return await outputMissingDataError(client,service,connectorType);let interactive=!!client.stdin.isTTY&&!client.nonInteractive,name=flags["--name"];if(!name){if(!interactive)return output_manager_default.error("Missing required option --name. In non-interactive mode, provide --name for the connector."),2;name=await client.input.text({message:`What would you like to name your ${service} app?`,validate:val=>val.trim().length>0||"Name cannot be empty"})}let selection,serviceName=service;if(!isDataOnlyCreate){let serviceInfo;try{asJson||output_manager_default.spinner("Loading connection methods\u2026"),serviceInfo=await fetchConnexServiceInfo(client,service)}catch(err){if(connectionMethodFlag)return output_manager_default.stopSpinner(),printError(err,client),1;output_manager_default.debug(`Failed to load connection methods: ${err.message}`)}finally{output_manager_default.stopSpinner()}serviceName=serviceInfo?.name??service;let methods=serviceInfo?.connectionMethods??[];if(methods.length===0){let unusable=connectionMethodFlag?"--connection-method":targetFlag?"--target":Object.keys(suppliedParams).length>0?"--param":void 0;if(unusable)return output_manager_default.error(`"${service}" doesn't publish connection methods, so ${unusable} can't be used.`),1}else try{selection=await resolveConnexConnectionMethod(client,{service,serviceName,methods,targets:serviceInfo?.targets,connectionMethodFlag,targetFlag,resolvedConnectionMethod:serviceInfo?.resolvedConnectionMethod,interactive,skipConfirm:flags["--yes"]===!0})}catch(err){if(err instanceof ConnexMethodError)return output_manager_default.error(err.message),1;throw err}}let useManagedMethodCreate=selection!==void 0&&selection.method.create.managed===!0&&!hasDataFlag,useManualMethodCreate=selection!==void 0&&!useManagedMethodCreate,methodParams={},methodData={};if(useManualMethodCreate&&selection)try{let{method}=selection;methodParams=await collectTemplateParams(client,method,suppliedParams,interactive),methodData=await collectMethodCredentials(client,method,suppliedData,interactive,()=>printMethodGuidance(method,serviceName))}catch(err){if(err instanceof ConnexMethodError)return output_manager_default.error(err.message),1;throw err}else if(useManagedMethodCreate&&Object.keys(suppliedParams).length>0&&selection)return output_manager_default.error(`Connection method "${selection.method.connectionMethod}" is registered automatically and takes no --param values.`),1;let triggerVerificationInput,triggerRegistrationInput,manualSetupInstructions,postCreationSchema;if(flags["--triggers"]){let triggerSetup=await prepareTriggerSetup(client,{service,serviceName,methodType:selection?.method.type,connectorType,json:asJson,stdinPayload:dataFlag==="@-"});if(triggerSetup.exitCode!==void 0)return triggerSetup.exitCode;triggerVerificationInput=triggerSetup.input,triggerRegistrationInput=triggerSetup.registrationInput,manualSetupInstructions=triggerSetup.manualSetupInstructions,postCreationSchema=triggerSetup.postCreationSchema,serviceName=triggerSetup.serviceName}let iconSha;if(preparedIcon){try{output_manager_default.spinner("Uploading icon\u2026"),iconSha=await uploadConnexIcon(client,preparedIcon)}catch(err){return output_manager_default.stopSpinner(),output_manager_default.error(err.message),1}output_manager_default.stopSpinner()}let body={service,name};link?.projectId&&(body.projectId=link.projectId),body.triggers={enabled:flags["--triggers"]===!0},triggerVerificationInput!==void 0&&(body.triggerVerificationInput=triggerVerificationInput),triggerRegistrationInput!==void 0&&(body.triggerRegistrationInput=triggerRegistrationInput),flags["--trigger-event"]!==void 0&&(body.events=flags["--trigger-event"]),(triggerPath!==void 0||triggerProject!==void 0||triggerBranch!==void 0||triggerEnvironment!==void 0)&&(body.triggerDestination={...triggerProjectId!==void 0?{projectId:triggerProjectId}:{},...triggerPath!==void 0?{path:triggerPath}:{},...triggerBranch!==void 0?{branch:triggerBranch}:{},...customEnvironmentId!==void 0?{customEnvironmentId}:{}}),iconSha&&(body.icon=iconSha),backgroundColor&&(body.backgroundColor=backgroundColor),accentColor&&(body.accentColor=accentColor),selection&&(body.connectionMethod=selection.method.connectionMethod,selection.target!==void 0&&(body.target=selection.target)),asJson||output_manager_default.spinner("Setting up\u2026");let createdClient=null,browserUrl,hasTriggerInput=triggerVerificationInput!==void 0||triggerRegistrationInput!==void 0;function reportCreateError(error){hasTriggerInput?printTriggerSetupError(client,error,asJson):printError(error,client)}let verifier;if(useManualMethodCreate){Object.keys(methodParams).length>0&&(body.params=methodParams),body.data=methodData;try{createdClient=await client.fetch("/v1/connect/connectors",{method:"POST",body})}catch(err){return output_manager_default.stopSpinner(),!hasTriggerInput&&err.status===404?(output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(reportCreateError(err),1)}}else if(isDataOnlyCreate)try{let serviceInfo=connectorType===void 0||connectorType==="oauth"?await fetchConnexServiceInfo(client,service):void 0,resolvedConnectorType=connectorType??defaultConnectorType(serviceInfo)??"oauth";body.data=withDiscoveredServerUrl(suppliedData,resolvedConnectorType,serviceInfo),body.type=resolvedConnectorType,createdClient=await client.fetch("/v1/connect/connectors",{method:"POST",body})}catch(err){return!hasTriggerInput&&err.status===404?(output_manager_default.stopSpinner(),output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(output_manager_default.stopSpinner(),reportCreateError(err),1)}else{let request=generateRequestCode();verifier=request.verifier,body.request_code=request.requestCode;try{createdClient=await client.fetch("/v1/connect/connectors/managed?autoinstall=true",{method:"POST",body})}catch(err){let apiErr=err;if(apiErr.status===422&&apiErr.registerUrl)browserUrl=apiErr.registerUrl;else return!hasTriggerInput&&apiErr.status===404?(output_manager_default.stopSpinner(),output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(output_manager_default.stopSpinner(),reportCreateError(err),1)}}output_manager_default.stopSpinner();let hasBeenInstalled=!1,brandingPatchFailed=!1;if(browserUrl){if(hasTriggerInput)return asJson?(reportCreateError(new Error("Trigger setup requires browser registration")),1):(output_manager_default.error("This connection method requires browser setup, which cannot accept trigger setup input. Complete connector setup in the dashboard."),1);let urlWithBranding=new URL(browserUrl);iconSha&&urlWithBranding.searchParams.set("icon",iconSha),backgroundColor&&urlWithBranding.searchParams.set("backgroundColor",backgroundColor),accentColor&&urlWithBranding.searchParams.set("accentColor",accentColor);let finalBrowserUrl=urlWithBranding.toString();if(output_manager_default.log(`Opening browser for ${service} app setup\u2026`),output_manager_default.log(`If the browser doesn't open, visit:
50
50
  ${finalBrowserUrl}`),(0,import_open.default)(finalBrowserUrl).catch(err=>output_manager_default.debug(`Failed to open browser: ${err}`)),output_manager_default.spinner("Waiting for you to complete setup in the browser\u2026"),!verifier)return output_manager_default.stopSpinner(),output_manager_default.error("Missing browser setup verifier."),1;let resultFromBrowser=await awaitConnexResult(client,verifier);if(output_manager_default.stopSpinner(),resultFromBrowser&&"clientId"in resultFromBrowser&&typeof resultFromBrowser.clientId=="string"){let clientId=resultFromBrowser.clientId;if(createdClient=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(clientId)}`),!!(iconSha||backgroundColor||accentColor)){let brandingBody={};iconSha&&(brandingBody.icon=iconSha),backgroundColor&&(brandingBody.backgroundColor=backgroundColor),accentColor&&(brandingBody.accentColor=accentColor);try{output_manager_default.spinner("Applying branding\u2026"),createdClient=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(clientId)}`,{method:"PATCH",body:brandingBody})}catch(err){output_manager_default.stopSpinner(),output_manager_default.warn(`Failed to apply branding: ${err.message}. The connector was created but branding was not applied.`),brandingPatchFailed=!0}output_manager_default.stopSpinner()}}resultFromBrowser&&"installationId"in resultFromBrowser&&resultFromBrowser.installationId&&(hasBeenInstalled=!0)}if(!createdClient)return 1;if(manualSetupInstructions!==void 0){let exitCode=await completeTriggerSetup(client,createdClient.id,manualSetupInstructions,serviceName,postCreationSchema);if(exitCode!==0)return exitCode}if(asJson)client.stdout.write(`${JSON.stringify({id:createdClient.id,uid:createdClient.uid,type:createdClient.type,name:createdClient.name,supportedSubjectTypes:createdClient.supportedSubjectTypes,icon:createdClient.icon??null,backgroundColor:createdClient.backgroundColor??null,accentColor:createdClient.accentColor??null,service:createdClient.service??null,connectionMethod:createdClient.connectionMethod??null,target:createdClient.target??null},null,2)}
51
51
  `);else{let via=selection?` via ${selection.method.label}`:"",created=hasBeenInstalled?`${service} connector created and installed${via}`:`${service} connector created${via}`;output_manager_default.success(`${created}: ${createdClient.id} (UID ${createdClient.uid})`)}return brandingPatchFailed?1:0}function printMethodGuidance(method,serviceName){let lines=buildMethodGuidance(method,serviceName);if(lines.length!==0){output_manager_default.print(`
52
52
  `);for(let line of lines)output_manager_default.print(` ${line}
@@ -63,11 +63,11 @@ ${documentationLines}
63
63
  `)}function formatExamples(service,methods,columns,theme){let examples=[];for(let method of methods){let parts=[packageName,COMMAND,exampleIdentifier(service,"SERVICE"),"--connection-method",exampleIdentifier(method.connectionMethod,"METHOD")];for(let field of method.templateFields??[])parts.push("--param",`${exampleIdentifier(field.key,"KEY")}=${exampleIdentifier(field.default,"VALUE")}`);parts.push("--name",`${exampleIdentifier(service,"SERVICE")}-${exampleIdentifier(method.connectionMethod,"METHOD")}`),!(method.create.managed===!0)&&method.create.manual&&parts.push("--data",'"@<CREDENTIALS_FILE>"'),examples.push({name:`Connect with ${remoteText(method.label)}`,placeholders:[...new Set(parts.flatMap(part=>part.match(/<(?:SERVICE|METHOD|KEY|VALUE|CREDENTIALS_FILE)>/g)??[]))],value:parts.join(" ")})}return examples.push({name:"Show all command options",value:`${packageName} ${COMMAND} --help`}),`
64
64
  ${buildCommandExampleLines({examples},columns,theme)}
65
65
  `}function describeLines(description,docsUrl,width){let lines=[];return description&&lines.push(wrapHelpText(description,width," ")),docsUrl&&lines.push(wrapHelpText(`Docs: ${docsUrl}`,width," ")),lines}function exampleIdentifier(value,placeholder){return value&&/^[a-zA-Z0-9][a-zA-Z0-9._:/-]*$/.test(value)?value:`<${placeholder}>`}var import_chalk5=__toESM(require_source(),1);async function update(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,clientIdOrUid=args[0];if(!clientIdOrUid)return output_manager_default.error("Missing connector ID or UID. Usage: vercel connect update <id>"),2;let iconFlag=flags["--icon"],backgroundColor=flags["--background-color"],accentColor=flags["--accent-color"];if(iconFlag!==void 0&&iconFlag.length===0)return output_manager_default.error("Icon path cannot be empty."),1;try{validateHexColor(backgroundColor,"background color"),validateHexColor(accentColor,"accent color")}catch(err){return output_manager_default.error(err.message),1}if(iconFlag===void 0&&backgroundColor===void 0&&accentColor===void 0)return output_manager_default.error("Specify at least one of: --icon, --background-color, --accent-color."),2;let preparedIcon;if(iconFlag)try{preparedIcon=await prepareConnexIcon(iconFlag,client.cwd)}catch(err){return output_manager_default.error(err.message),1}if(await selectConnexTeam(client,"Select the team for this connector"),preparedIcon){try{output_manager_default.spinner("Verifying connector..."),await client.fetch(`/v1/connect/connectors/${encodeURIComponent(clientIdOrUid)}`)}catch(err){return output_manager_default.stopSpinner(),err.status===404?output_manager_default.error(`Connector not found: ${import_chalk5.default.bold(clientIdOrUid)}`):output_manager_default.error(`Failed to verify ${import_chalk5.default.bold(clientIdOrUid)}: ${err.message}`),1}output_manager_default.stopSpinner()}let iconSha;if(preparedIcon){try{output_manager_default.spinner("Uploading icon..."),iconSha=await uploadConnexIcon(client,preparedIcon)}catch(err){return output_manager_default.stopSpinner(),output_manager_default.error(err.message),1}output_manager_default.stopSpinner()}let body={};iconSha&&(body.icon=iconSha),backgroundColor&&(body.backgroundColor=backgroundColor),accentColor&&(body.accentColor=accentColor);let updated;try{output_manager_default.spinner("Updating connector..."),updated=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(clientIdOrUid)}`,{method:"PATCH",body})}catch(err){return output_manager_default.stopSpinner(),err.status===404?(output_manager_default.error(`Connector not found: ${import_chalk5.default.bold(clientIdOrUid)}`),1):(output_manager_default.error(`Failed to update ${import_chalk5.default.bold(clientIdOrUid)}: ${err.message}`),1)}if(output_manager_default.stopSpinner(),asJson)client.stdout.write(`${JSON.stringify({id:updated.id,uid:updated.uid,type:updated.type,name:updated.name,icon:updated.icon??null,backgroundColor:updated.backgroundColor??null,accentColor:updated.accentColor??null},null,2)}
66
- `);else{let displayName=updated.uid||updated.id;output_manager_default.success(`Connector ${import_chalk5.default.bold(displayName)} updated.`)}return 0}var import_chalk6=__toESM(require_source(),1);async function list(client,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,allProjects=flags["--all-projects"]===!0,types=(flags["--type"]??[]).flatMap(v=>v.split(",").map(s2=>s2.trim().toLowerCase())).filter(Boolean),services=(flags["--service"]??[]).flatMap(v=>v.split(",").map(s2=>s2.trim().toLowerCase())).filter(Boolean),search=getRenamedOption(flags,"--query","--search",{json:asJson});if("error"in search)return reportRenamedOptionError(client,search.error,{json:asJson});let searchQuery=search.value,projectId,projectName;if(!allProjects){let linked=await getLinkedProject(client);if(linked.status==="error")return linked.exitCode;linked.status==="linked"&&(linked.org.type==="team"?client.config.currentTeam=linked.org.id:client.config.currentTeam=void 0,projectId=linked.project.id,projectName=linked.project.name)}let unscoped=!projectId;unscoped&&await selectConnexTeam(client,"Select the team whose connectors you want to list");let params=new URLSearchParams;flags["--limit"]!==void 0&&params.set("limit",String(flags["--limit"])),flags["--next"]&&params.set("cursor",flags["--next"]),unscoped?params.set("include","projects"):projectId&&params.set("projectId",projectId),types.length>0&&params.set("type",types.join(",")),services.length>0&&params.set("service",services.join(",")),searchQuery&&params.set("search",searchQuery);let query=params.toString(),url=`/v1/connect/connectors${query?`?${query}`:""}`;output_manager_default.spinner("Fetching connectors\u2026");let response;try{response=await client.fetch(url)}catch(err){return output_manager_default.stopSpinner(),err.status===404?(output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(printError(err,client),1)}output_manager_default.stopSpinner();let clients=response.clients??[];if(asJson){let jsonClients=clients.map(c=>{let item={uid:c.uid,id:c.id,name:c.name,type:c.type,typeName:c.typeName,createdAt:c.createdAt,icon:c.icon??null,backgroundColor:c.backgroundColor??null,accentColor:c.accentColor??null};if(unscoped){let projectsInclude=c.includes?.projects;item.projects=(projectsInclude?.items??[]).map(p=>p.project).filter(p=>!!p),item.hasMoreProjects=projectsInclude?.hasMore===!0}return item});return client.stdout.write(`${JSON.stringify(withWarnings({connectors:jsonClients,cursor:response.cursor,pagination:{next:response.cursor??null}},[search.warning]),null,2)}
67
- `),0}if(clients.length===0)return unscoped?output_manager_default.log(`No connectors found. Create one with \`${packageName} connect create <type>\`.`):output_manager_default.log(`No connectors linked to ${import_chalk6.default.bold(projectName??"this project")}. Run \`${packageName} connect list --all-projects\` to see every connector in the team.`),0;!unscoped&&projectName&&output_manager_default.log(`Connectors linked to ${import_chalk6.default.bold(projectName)}:`);let headers=["UID","ID","Name","Type"];unscoped&&headers.push("Projects");let rows=clients.map(c=>{let row=[sanitizeForTerminal(c.uid||"")||import_chalk6.default.gray("\u2013"),c.id,sanitizeForTerminal(c.name||"")||import_chalk6.default.gray("\u2013"),sanitizeForTerminal(c.typeName||c.type)];if(unscoped){let projectsInclude=c.includes?.projects,names=(projectsInclude?.items??[]).map(p=>p.project?.name).filter(n2=>!!n2).map(sanitizeForTerminal),more=projectsInclude?.hasMore===!0,cell;if(names.length===0&&!more)cell=import_chalk6.default.gray("\u2013");else{let parts=[];names.length&&parts.push(names.join(", ")),more&&parts.push(import_chalk6.default.gray("+ more")),cell=parts.join(" ")}row.push(cell)}return row});if(output_manager_default.print(`${table([headers.map(h=>import_chalk6.default.bold(import_chalk6.default.cyan(h))),...rows],{hsep:4})}
68
- `),response.cursor){let parts=[`${packageName} connect list`];allProjects&&parts.push("--all-projects");for(let t of types)parts.push(`--type ${t}`);for(let s2 of services)parts.push(`--service ${s2}`);searchQuery&&parts.push(`--query "${searchQuery}"`),parts.push(`--next ${response.cursor}`),output_manager_default.print(`
66
+ `);else{let displayName=updated.uid||updated.id;output_manager_default.success(`Connector ${import_chalk5.default.bold(displayName)} updated.`)}return 0}var import_chalk6=__toESM(require_source(),1);async function list(client,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,allProjects=flags["--all-projects"]===!0,types=(flags["--type"]??[]).flatMap(v=>v.split(",").map(s=>s.trim().toLowerCase())).filter(Boolean),services=(flags["--service"]??[]).flatMap(v=>v.split(",").map(s=>s.trim().toLowerCase())).filter(Boolean),search=getRenamedOption(flags,"--query","--search",{json:asJson});if("error"in search)return reportRenamedOptionError(client,search.error,{json:asJson});let searchQuery=search.value,projectId,projectName;if(!allProjects){let linked=await getLinkedProject(client);if(linked.status==="error")return linked.exitCode;linked.status==="linked"&&(linked.org.type==="team"?client.config.currentTeam=linked.org.id:client.config.currentTeam=void 0,projectId=linked.project.id,projectName=linked.project.name)}let unscoped=!projectId;unscoped&&await selectConnexTeam(client,"Select the team whose connectors you want to list");let params=new URLSearchParams;flags["--limit"]!==void 0&&params.set("limit",String(flags["--limit"])),flags["--next"]&&params.set("cursor",flags["--next"]),unscoped?params.set("include","projects"):projectId&&params.set("projectId",projectId),types.length>0&&params.set("type",types.join(",")),services.length>0&&params.set("service",services.join(",")),searchQuery&&params.set("search",searchQuery);let query=params.toString(),url=`/v1/connect/connectors${query?`?${query}`:""}`;output_manager_default.spinner("Fetching connectors\u2026");let response;try{response=await client.fetch(url)}catch(err){return output_manager_default.stopSpinner(),err.status===404?(output_manager_default.error("Connect is not enabled for this team. Contact support to enable it."),1):(printError(err,client),1)}output_manager_default.stopSpinner();let clients=response.clients??[];if(asJson){let jsonClients=clients.map(c=>{let item={uid:c.uid,id:c.id,name:c.name,type:c.type,typeName:c.typeName,createdAt:c.createdAt,icon:c.icon??null,backgroundColor:c.backgroundColor??null,accentColor:c.accentColor??null};if(unscoped){let projectsInclude=c.includes?.projects;item.projects=(projectsInclude?.items??[]).map(p=>p.project).filter(p=>!!p),item.hasMoreProjects=projectsInclude?.hasMore===!0}return item});return client.stdout.write(`${JSON.stringify(withWarnings({connectors:jsonClients,cursor:response.cursor,pagination:{next:response.cursor??null}},[search.warning]),null,2)}
67
+ `),0}if(clients.length===0)return unscoped?output_manager_default.log(`No connectors found. Create one with \`${packageName} connect create <type>\`.`):output_manager_default.log(`No connectors linked to ${import_chalk6.default.bold(projectName??"this project")}. Run \`${packageName} connect list --all-projects\` to see every connector in the team.`),0;!unscoped&&projectName&&output_manager_default.log(`Connectors linked to ${import_chalk6.default.bold(projectName)}:`);let headers=["UID","ID","Name","Type"];unscoped&&headers.push("Projects");let rows=clients.map(c=>{let row=[sanitizeForTerminal(c.uid||"")||import_chalk6.default.gray("\u2013"),c.id,sanitizeForTerminal(c.name||"")||import_chalk6.default.gray("\u2013"),sanitizeForTerminal(c.typeName||c.type)];if(unscoped){let projectsInclude=c.includes?.projects,names=(projectsInclude?.items??[]).map(p=>p.project?.name).filter(n=>!!n).map(sanitizeForTerminal),more=projectsInclude?.hasMore===!0,cell;if(names.length===0&&!more)cell=import_chalk6.default.gray("\u2013");else{let parts=[];names.length&&parts.push(names.join(", ")),more&&parts.push(import_chalk6.default.gray("+ more")),cell=parts.join(" ")}row.push(cell)}return row});if(output_manager_default.print(`${table([headers.map(h=>import_chalk6.default.bold(import_chalk6.default.cyan(h))),...rows],{hsep:4})}
68
+ `),response.cursor){let parts=[`${packageName} connect list`];allProjects&&parts.push("--all-projects");for(let t of types)parts.push(`--type ${t}`);for(let s of services)parts.push(`--service ${s}`);searchQuery&&parts.push(`--query "${searchQuery}"`),parts.push(`--next ${response.cursor}`),output_manager_default.print(`
69
69
  `),printNextPageCommand(parts.join(" "))}return 0}var import_open2=__toESM(require_open(),1);async function token(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,installation=getRenamedOption(flags,"--installation","--installation-id",{json:asJson});if("error"in installation)return reportRenamedOptionError(client,installation.error,{json:asJson});let clientId=args[0];if(!clientId)return output_manager_default.error("Missing connector ID or UID. Usage: vercel connect token <id>"),2;let subject=flags["--subject"];if(subject&&subject!=="app"&&subject!=="user")return output_manager_default.error('Invalid --subject value. Must be "app" or "user".'),2;await selectConnexTeam(client,"Select the team for this token request");let tokenParams={};installation.value&&(tokenParams.installationId=installation.value),flags["--scopes"]?tokenParams.scopes=parseScopes(flags["--scopes"]):flags["--no-default-scopes"]||(tokenParams.scopes=["*"]);let body={...tokenParams};subject==="app"?body.subject={type:"app"}:subject==="user"&&(body.subject={type:"user",id:client.authConfig.userId}),output_manager_default.spinner("Fetching token...");let result=await fetchToken(client,clientId,body);if(output_manager_default.stopSpinner(),result.ok)return printTokenResult(client,result.data,asJson,[installation.warning]);let errorCode=result.errorCode,errorMessage=result.errorMessage??"Failed to get token";if(errorCode==="not_found")return output_manager_default.error("Connector not found or Connect is not enabled for this team."),1;if(errorCode==="unresolved_token")return output_manager_default.error(`${errorMessage} This connector does not support getting a token for the requested subject.`),1;if(!isActionable(errorCode))return output_manager_default.error(errorMessage),1;let teamId=client.config.currentTeam;if(!teamId)return output_manager_default.error(`${errorMessage} Unable to build recovery URL: no team resolved.`),1;let actionLabel=errorCode==="user_authorization_required"?"authorization":"installation",isInteractive=!!(client.stdin.isTTY&&client.stdout.isTTY);if(!(!!flags["--yes"]||isInteractive)){let{requestCode:requestCode2}=generateRequestCode(),actionUrl2=buildActionUrl(errorCode,clientId,teamId,requestCode2,tokenParams);return output_manager_default.error(errorMessage),output_manager_default.log(`To ${actionLabel}, open: ${actionUrl2}`),output_manager_default.log(`Or re-run with --yes to open the browser automatically: vercel connect token ${clientId} --yes`),1}if(output_manager_default.error(errorMessage),!flags["--yes"]&&isInteractive&&!await client.input.confirm(`Open browser to ${actionLabel}?`,!0))return 0;let{verifier,requestCode}=generateRequestCode(),actionUrl=buildActionUrl(errorCode,clientId,teamId,requestCode,tokenParams);output_manager_default.log(`Opening browser for ${actionLabel}...`),output_manager_default.log(`If the browser doesn't open, visit:
70
- ${actionUrl}`),(0,import_open2.default)(actionUrl).catch(err=>output_manager_default.debug(`Failed to open browser: ${err}`)),output_manager_default.spinner(`Waiting for ${actionLabel} to complete in the browser...`);let pollData=await awaitConnexResult(client,verifier);if(output_manager_default.stopSpinner(),!pollData)return 1;let retryBody={...body};pollData.installationId&&!retryBody.installationId&&(retryBody.installationId=pollData.installationId),output_manager_default.spinner("Fetching token...");let retryResult=await fetchToken(client,clientId,retryBody);return output_manager_default.stopSpinner(),retryResult.ok?printTokenResult(client,retryResult.data,asJson,[installation.warning]):(output_manager_default.error(retryResult.errorMessage??`Failed to get token after ${actionLabel}`),1)}function parseScopes(raw){return raw.split(/[\s,]+/).map(s2=>s2.trim()).filter(Boolean)}function isActionable(code){return code==="user_authorization_required"||code==="client_installation_required"}function buildActionUrl(code,clientId,teamId,requestCode,tokenParams){let path=code==="user_authorization_required"?"authorize":"install",params=new URLSearchParams({teamId,request_code:requestCode});for(let[key,value]of Object.entries(tokenParams))value!==void 0&&params.set(key,Array.isArray(value)?value.join(","):value);return`https://vercel.com/api/v1/connect/${path}/${encodeURIComponent(clientId)}?${params.toString()}`}function printTokenResult(client,data,asJson,warnings){return asJson?client.stdout.write(`${JSON.stringify(withWarnings(data,warnings),null,2)}
70
+ ${actionUrl}`),(0,import_open2.default)(actionUrl).catch(err=>output_manager_default.debug(`Failed to open browser: ${err}`)),output_manager_default.spinner(`Waiting for ${actionLabel} to complete in the browser...`);let pollData=await awaitConnexResult(client,verifier);if(output_manager_default.stopSpinner(),!pollData)return 1;let retryBody={...body};pollData.installationId&&!retryBody.installationId&&(retryBody.installationId=pollData.installationId),output_manager_default.spinner("Fetching token...");let retryResult=await fetchToken(client,clientId,retryBody);return output_manager_default.stopSpinner(),retryResult.ok?printTokenResult(client,retryResult.data,asJson,[installation.warning]):(output_manager_default.error(retryResult.errorMessage??`Failed to get token after ${actionLabel}`),1)}function parseScopes(raw){return raw.split(/[\s,]+/).map(s=>s.trim()).filter(Boolean)}function isActionable(code){return code==="user_authorization_required"||code==="client_installation_required"}function buildActionUrl(code,clientId,teamId,requestCode,tokenParams){let path=code==="user_authorization_required"?"authorize":"install",params=new URLSearchParams({teamId,request_code:requestCode});for(let[key,value]of Object.entries(tokenParams))value!==void 0&&params.set(key,Array.isArray(value)?value.join(","):value);return`https://vercel.com/api/v1/connect/${path}/${encodeURIComponent(clientId)}?${params.toString()}`}function printTokenResult(client,data,asJson,warnings){return asJson?client.stdout.write(`${JSON.stringify(withWarnings(data,warnings),null,2)}
71
71
  `):client.stdout.write(`${data.token}
72
72
  `),0}async function fetchToken(client,clientId,body){try{return{ok:!0,data:await client.fetch(`/v1/connect/token/${encodeURIComponent(clientId)}`,{method:"POST",body:JSON.stringify(body),headers:{"Content-Type":"application/json"}})}}catch(err){let serverError=extractApiError(err);return{ok:!1,errorCode:serverError.code,errorMessage:serverError.message}}}function extractApiError(err){if(typeof err=="object"&&err!==null){let errObj=err,code=typeof errObj.code=="string"?errObj.code:void 0,message=typeof errObj.serverMessage=="string"?errObj.serverMessage:typeof errObj.message=="string"?errObj.message:"Unknown error";return{code,message}}return{message:"Unknown error"}}var import_chalk8=__toESM(require_source(),1);var import_chalk7=__toESM(require_source(),1),MAX_TRIGGER_DESTINATIONS=3;function destinationsMatch(a,b){return a.projectId===b.projectId&&(a.customEnvironmentId??null)===(b.customEnvironmentId??null)&&(a.branch??null)===(b.branch??null)&&(a.path??null)===(b.path??null)}function findMatchingDestination(destinations,desired){return destinations.find(d=>destinationsMatch(d,desired))}function buildTriggerDestination(input){if(input.branch!==void 0&&input.customEnvironmentId!==void 0)throw new Error("Trigger destinations cannot target both a branch and a custom environment.");let dest={projectId:input.projectId};return input.customEnvironmentId!==void 0&&(dest.customEnvironmentId=input.customEnvironmentId),input.branch!==void 0&&(dest.branch=input.branch),input.path!==void 0&&(dest.path=input.path),dest}function formatDestination(d){let target=d.customEnvironmentId?`custom environment ${import_chalk7.default.bold(d.customEnvironmentId)}`:`branch ${import_chalk7.default.bold(d.branch??"production")}`;return[`project ${import_chalk7.default.bold(d.projectId)}`,target,`path ${import_chalk7.default.bold(d.path??"<default>")}`].join(", ")}function toJsonDestination(d){let entry={projectId:d.projectId};return d.customEnvironmentId!==void 0&&(entry.customEnvironmentId=d.customEnvironmentId),d.branch!==void 0&&(entry.branch=d.branch),d.path!==void 0&&(entry.path=d.path),entry}async function patchTriggerDestinations(client,connectorId,destinations){let body=destinations.map(toJsonDestination);await client.fetch(`/v1/connect/connectors/${encodeURIComponent(connectorId)}/trigger-destinations`,{method:"PATCH",body:{destinations:body}})}var ALL_ENVS=["production","preview","development"];async function resolveRequestedEnvironments(client,projectId,projectName,requestedEnvironments){if(requestedEnvironments.length===0)return[...ALL_ENVS];let customEnvironments=requestedEnvironments.filter(environment=>!isValidEnvTarget(environment)).length>0?await getCustomEnvironments(client,projectId):[],resolvedEnvironments=new Set;for(let environment of requestedEnvironments){if(isValidEnvTarget(environment)){resolvedEnvironments.add(environment);continue}let customEnvironment=pickCustomEnvironment(customEnvironments,environment);if(!customEnvironment){output_manager_default.error(`Invalid environment ${import_chalk8.default.bold(environment)} for project ${import_chalk8.default.bold(projectName)}. Use ${envTargetChoices.map(choice=>choice.value).join(", ")}, or a custom environment slug or ID from that project.`);return}resolvedEnvironments.add(customEnvironment.id)}return[...resolvedEnvironments]}function envSetsEqual(a,b){if(a.length!==b.length)return!1;let aSet=new Set(a);return b.every(env=>aSet.has(env))}function getAttachmentEnvironments(requestedEnvironments,projectId,destinations){let environments=new Set(requestedEnvironments);for(let destination of destinations)destination.projectId===projectId&&destination.customEnvironmentId!==void 0&&environments.add(destination.customEnvironmentId);return[...environments]}async function attach(client,args,flags){let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,branchError=applyDeprecatedGitBranchFlag(client,flags,"--trigger-branch");if(branchError)return reportRenamedOptionError(client,branchError,{json:asJson});let skipConfirmation=!!flags["--yes"],withTriggers=!!flags["--triggers"],triggerBranch=flags["--git-branch"],triggerEnvironment=flags["--trigger-environment"],triggerPath=flags["--trigger-path"];if(asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),2;if(!withTriggers&&(triggerBranch!==void 0||triggerEnvironment!==void 0||triggerPath!==void 0))return output_manager_default.error("--git-branch, --trigger-environment, and --trigger-path require --triggers to also be set."),1;if(triggerBranch!==void 0&&triggerEnvironment!==void 0)return output_manager_default.error("--git-branch and --trigger-environment are mutually exclusive."),2;if(triggerEnvironment!==void 0&&triggerEnvironment.trim()==="")return output_manager_default.error("--trigger-environment must not be empty."),1;let clientIdOrUid=args[0];if(!clientIdOrUid)return output_manager_default.error("Missing connector ID or UID. Usage: vercel connect attach <connector>"),2;let requestedEnvsRaw=normalizeRepeatableStringFilters(flags["--environment"]),projectId,projectName,projectFlag=flags["--project"];if(projectFlag){await selectConnexTeam(client,"Select the team that owns this project");let team=client.config.currentTeam;output_manager_default.spinner("Looking up project\u2026");let resolvedProject;try{resolvedProject=await getProjectByNameOrId(client,projectFlag,team)}catch(err){return output_manager_default.stopSpinner(),printError(err,client),1}if(output_manager_default.stopSpinner(),resolvedProject instanceof ProjectNotFound)return output_manager_default.error(`Project ${import_chalk8.default.bold(projectFlag)} was not found. Check the name/ID and try again.`),1;projectId=resolvedProject.id,projectName=sanitizeForTerminal(resolvedProject.name)}else{let linked=await getLinkedProject(client);if(linked.status==="error")return linked.exitCode;if(linked.status==="not_linked")return output_manager_default.error(`No linked project found. Run \`${packageName} link\` first or pass --project=<name_or_id>.`),1;linked.org.type==="team"?client.config.currentTeam=linked.org.id:client.config.currentTeam=void 0,projectId=linked.project.id,projectName=sanitizeForTerminal(linked.project.name)}let environments;try{environments=await resolveRequestedEnvironments(client,projectId,projectName,requestedEnvsRaw)}catch(err){return printError(err,client),1}if(!environments)return 1;output_manager_default.spinner("Retrieving connector\u2026");let target;try{target=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(clientIdOrUid)}`)}catch(err){return output_manager_default.stopSpinner(),err.status===404?(output_manager_default.error(`No connector found for ${import_chalk8.default.bold(clientIdOrUid)}.`),1):(printError(err,client),1)}output_manager_default.stopSpinner();let displayName=sanitizeForTerminal(target.uid||target.name||target.id),desiredDestination,triggerAlreadyRegistered=!1,triggersEnabledOnConnector=!0;if(withTriggers){if(target.supportsTriggers===!1)return output_manager_default.error(`Connector ${import_chalk8.default.bold(displayName)} does not support triggers (only Slack supports incoming webhooks today).`),1;triggersEnabledOnConnector=target.triggers?.enabled===!0;let customEnvironmentId;if(triggerEnvironment!==void 0){let customEnvironments;try{customEnvironments=await getCustomEnvironments(client,projectId)}catch(err){return printError(err,client),1}let customEnvironment=pickCustomEnvironment(customEnvironments,triggerEnvironment);if(!customEnvironment)return output_manager_default.error(`Unknown trigger environment ${import_chalk8.default.bold(triggerEnvironment)} for project ${import_chalk8.default.bold(projectName)}. Use a custom environment slug or stable ID from that project.`),1;customEnvironmentId=customEnvironment.id}desiredDestination=buildTriggerDestination({projectId,customEnvironmentId,branch:triggerBranch,path:triggerPath});let currentDestinations=target.triggerDestinations??[];if(triggerAlreadyRegistered=findMatchingDestination(currentDestinations,desiredDestination)!==void 0,!triggerAlreadyRegistered&&currentDestinations.length>=MAX_TRIGGER_DESTINATIONS)return output_manager_default.error(`Connector ${import_chalk8.default.bold(displayName)} already has ${MAX_TRIGGER_DESTINATIONS} trigger destinations. Remove one in the dashboard before adding a new one.`),1}let existingAttachment;try{existingAttachment=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(target.id)}/projects/${encodeURIComponent(projectId)}`)}catch(err){if(err.status!==404)return printError(err,client),1}let attachmentEnvironments=getAttachmentEnvironments(environments,projectId,target.triggerDestinations??[]),shouldAttach=!(existingAttachment!==void 0&&envSetsEqual(existingAttachment.environments??[],attachmentEnvironments)),shouldRegisterTrigger=withTriggers&&!triggerAlreadyRegistered;if(!shouldAttach&&!shouldRegisterTrigger){if(asJson)return client.stdout.write(`${JSON.stringify({clientId:target.id,uid:target.uid,projectId,environments:attachmentEnvironments,triggerDestination:withTriggers?desiredDestination:void 0,unchanged:!0},null,2)}
73
73
  `),0;let triggerPart=withTriggers?" (trigger destination already registered)":"";return output_manager_default.log(`Connector ${import_chalk8.default.bold(displayName)} is already attached to ${import_chalk8.default.bold(projectName)} for environments: ${attachmentEnvironments.join(", ")}${triggerPart}. Nothing to do.`),0}if(!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation){if(shouldAttach)if(existingAttachment){let current=(existingAttachment.environments??[]).join(", ")||"\u2014",next=attachmentEnvironments.join(", ");output_manager_default.log(`Connector ${import_chalk8.default.bold(displayName)} is already attached to ${import_chalk8.default.bold(projectName)}.`),output_manager_default.log(` Current: ${current}`),output_manager_default.log(` Will set: ${next}`)}else output_manager_default.log(`Connector ${import_chalk8.default.bold(displayName)} will be attached to ${import_chalk8.default.bold(projectName)} for environments: ${attachmentEnvironments.join(", ")}.`);if(shouldRegisterTrigger&&desiredDestination&&(output_manager_default.log(`Will register as trigger destination: ${formatDestination(desiredDestination)}.`),triggersEnabledOnConnector||output_manager_default.warn("Triggers are not enabled on this connector. The destination will be registered, but no events will flow until the connector is recreated with triggers enabled.")),!await client.input.confirm("Continue?",!1))return output_manager_default.log("Canceled"),0}if(shouldAttach){output_manager_default.spinner("Attaching project\u2026");try{await client.fetch(`/v1/connect/connectors/${encodeURIComponent(target.id)}/projects/${encodeURIComponent(projectId)}`,{method:"POST",body:{environments:attachmentEnvironments}})}catch(err){output_manager_default.stopSpinner();let status2=err.status;return status2===403?(output_manager_default.error("You don't have permission to attach projects on this team. Owner or Member role required."),1):status2===404?(output_manager_default.error(`No connector found for ${import_chalk8.default.bold(displayName)}, or project ${import_chalk8.default.bold(projectName)} is no longer accessible.`),1):(printError(err,client),1)}output_manager_default.stopSpinner()}if(shouldRegisterTrigger&&desiredDestination){let merged=[...target.triggerDestinations??[],desiredDestination];output_manager_default.spinner("Registering trigger destination\u2026");try{await patchTriggerDestinations(client,target.id,merged)}catch(err){output_manager_default.stopSpinner();let status2=err.status;return status2===403?(output_manager_default.error("You don't have permission to update trigger destinations on this team. Owner or Member role required."),1):status2===404?(output_manager_default.error("Trigger destinations are not available for this team (the connex-triggers feature is not enabled)."),1):(printError(err,client),1)}output_manager_default.stopSpinner()}return asJson?(client.stdout.write(`${JSON.stringify({clientId:target.id,uid:target.uid,projectId,environments:attachmentEnvironments,triggerDestination:withTriggers?desiredDestination:void 0},null,2)}
@@ -80,14 +80,14 @@ ${actionUrl}`),(0,import_open2.default)(actionUrl).catch(err=>output_manager_def
80
80
  `),0):client.stdout.isTTY?(output_manager_default.print(`Opening connector ${import_chalk12.default.bold(clientIdOrUid)} in the dashboard\u2026
81
81
  `),(0,import_open3.default)(url),0):(client.stdout.write(`${url}
82
82
  `),0)}var ContactsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}},ContactsAddTelemetryClient=class extends TelemetryClient{trackCliArgumentConnector(v){v&&this.trackCliArgument({arg:"connector",value:this.redactedValue})}trackCliOptionPhoneNumber(v){v&&this.trackCliOption({option:"phone-number",value:this.redactedValue})}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliFlagJson(v){v&&this.trackCliFlag("json")}};var import_chalk13=__toESM(require_source(),1);async function add(client,argv){let telemetry=new ContactsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(contactsAddSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs;telemetry.trackCliArgumentConnector(args[0]),telemetry.trackCliOptionPhoneNumber(flags["--phone-number"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]);let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let connector=args[0];if(!connector)return output_manager_default.error("Missing connector ID or UID. Usage: vercel connect contacts add <connector> --phone-number <phone-number>"),2;let phoneNumber=flags["--phone-number"];if(!phoneNumber)return output_manager_default.error("Missing phone number. Provide one with `--phone-number`."),2;if(!/^\+[1-9]\d{1,14}$/.test(phoneNumber))return output_manager_default.error("Invalid phone number. Provide an E.164 number (e.g. +12025551234)."),2;await selectConnexTeam(client,"Select the team for this connector"),output_manager_default.spinner("Adding contact\u2026");let verification;try{verification=await client.fetch(`/v1/connect/connectors/${encodeURIComponent(connector)}/contacts`,{method:"POST",body:{phoneNumber}})}catch(err){return output_manager_default.stopSpinner(),printError(err),1}if(output_manager_default.stopSpinner(),formatResult.jsonOutput)return client.stdout.write(`${JSON.stringify(verification,null,2)}
83
- `),0;let safePhoneNumber=sanitizeForTerminal(phoneNumber);return output_manager_default.success(`Contact ${import_chalk13.default.bold(safePhoneNumber)} added.`),verification.instructions&&output_manager_default.log(sanitizeForTerminal(verification.instructions)),0}var COMMAND_CONFIG={add:getCommandAliases(contactsAddSubcommand)};async function contacts(client){let telemetry=new ContactsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(contactsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args:subArgs}=getSubcommand2(parsedArgs.args,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("connect contacts"),output_manager_default.print(help(contactsSubcommand,{stream:client.stderr,parent:connexCommand,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:contactsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("connect contacts",subcommandOriginal),printHelp(contactsAddSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add(client,subArgs));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG)),output_manager_default.print(help(contactsSubcommand,{stream:client.stderr,parent:connexCommand,columns:client.stderr.columns})),2}}var COMMAND_CONFIG2={discover:getCommandAliases(discoverSubcommand),categories:getCommandAliases(categoriesSubcommand),create:getCommandAliases(createSubcommand),update:getCommandAliases(updateSubcommand),list:getCommandAliases(listSubcommand),token:getCommandAliases(tokenSubcommand),attach:getCommandAliases(attachSubcommand),detach:getCommandAliases(detachSubcommand),delete:getCommandAliases(removeSubcommand),"revoke-tokens":getCommandAliases(revokeTokensSubcommand),open:getCommandAliases(openSubcommand),contacts:getCommandAliases(contactsSubcommand)};async function connex(client){let telemetry=new ConnexTelemetryClient({opts:{store:client.telemetryEventStore}}),{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(connexCommand.options),{permissive:!0}),{subcommand,subcommandOriginal,args:subArgs}=getSubcommand2(args.slice(1),COMMAND_CONFIG2),needHelp=flags["--help"];function printHelp(command,options){output_manager_default.print(help(command,{...options,columns:client.stderr.columns,stream:client.stderr,parent:connexCommand}))}function printHelpToStdout(command,options){client.stdout.write(help(command,{...options,columns:client.stdout.columns??client.stderr.columns,stream:client.stdout,parent:connexCommand}))}if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("connect"),output_manager_default.print(help(connexCommand,{columns:client.stderr.columns,stream:client.stderr})),0;try{switch(subcommand){case"create":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),await printCreateDynamicHelp(client,findHelpServiceArg(subArgs),createSubcommand,printHelpToStdout)||printHelpToStdout(createSubcommand),0;telemetry.trackCliSubcommandCreate(subcommandOriginal);let createFlagsSpec=getFlagsSpecification(createSubcommand.options),createParsedArgs=parseArguments(normalizeCreateDataArgs(subArgs),createFlagsSpec);return telemetry.trackCliArgumentService(createParsedArgs.args[0]),telemetry.trackCliOptionName(createParsedArgs.flags["--name"]),telemetry.trackCliOptionIcon(createParsedArgs.flags["--icon"]),telemetry.trackCliOptionBackgroundColor(createParsedArgs.flags["--background-color"]),telemetry.trackCliOptionAccentColor(createParsedArgs.flags["--accent-color"]),telemetry.trackCliOptionData(createParsedArgs.flags["--data"]),telemetry.trackCliOptionConnectorType(createParsedArgs.flags["--connector-type"]),telemetry.trackCliOptionTriggerEvent(createParsedArgs.flags["--trigger-event"]),telemetry.trackCliOptionConnectionMethod(createParsedArgs.flags["--connection-method"]),telemetry.trackCliOptionTarget(createParsedArgs.flags["--target"]),telemetry.trackCliOptionParam(createParsedArgs.flags["--param"]),telemetry.trackCliFlagYes(createParsedArgs.flags["--yes"]),telemetry.trackCliFlagTriggers(createParsedArgs.flags["--triggers"]),telemetry.trackCliOptionTriggerPath(createParsedArgs.flags["--trigger-path"]),telemetry.trackCliOptionTriggerProject(createParsedArgs.flags["--trigger-project"]),telemetry.trackCliOptionGitBranch(createParsedArgs.flags["--git-branch"]),telemetry.trackCliOptionTriggerBranch(createParsedArgs.flags["--trigger-branch"]),telemetry.trackCliOptionTriggerEnvironment(createParsedArgs.flags["--trigger-environment"]),telemetry.trackCliOptionFormat(createParsedArgs.flags["--format"]),await create(client,createParsedArgs.args,createParsedArgs.flags)}case"update":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(updateSubcommand),0;telemetry.trackCliSubcommandUpdate(subcommandOriginal);let updateFlagsSpec=getFlagsSpecification(updateSubcommand.options),updateParsedArgs=parseArguments(subArgs,updateFlagsSpec);return telemetry.trackCliArgumentId(updateParsedArgs.args[0]),telemetry.trackCliOptionIcon(updateParsedArgs.flags["--icon"]),telemetry.trackCliOptionBackgroundColor(updateParsedArgs.flags["--background-color"]),telemetry.trackCliOptionAccentColor(updateParsedArgs.flags["--accent-color"]),telemetry.trackCliOptionFormat(updateParsedArgs.flags["--format"]),await update(client,updateParsedArgs.args,updateParsedArgs.flags)}case"discover":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(discoverSubcommand),0;telemetry.trackCliSubcommandDiscover(subcommandOriginal);let discoverParsedArgs=parseArguments(subArgs,getFlagsSpecification(discoverSubcommand.options));return telemetry.trackCliArgumentQuery(discoverParsedArgs.args[0]),telemetry.trackCliOptionCategory(discoverParsedArgs.flags["--category"]),telemetry.trackCliOptionConnectionMethod(discoverParsedArgs.flags["--connection-method"]),telemetry.trackCliOptionTarget(discoverParsedArgs.flags["--target"]),telemetry.trackCliFlagSupportsTriggers(discoverParsedArgs.flags["--supports-triggers"]),telemetry.trackCliOptionLimit(discoverParsedArgs.flags["--limit"]),telemetry.trackCliOptionNext(discoverParsedArgs.flags["--next"]),telemetry.trackCliOptionFormat(discoverParsedArgs.flags["--format"]),await discover(client,discoverParsedArgs.args,discoverParsedArgs.flags)}case"categories":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(categoriesSubcommand),0;telemetry.trackCliSubcommandCategories(subcommandOriginal);let categoriesParsedArgs=parseArguments(subArgs,getFlagsSpecification(categoriesSubcommand.options));return telemetry.trackCliOptionFormat(categoriesParsedArgs.flags["--format"]),await categories(client,categoriesParsedArgs.args,categoriesParsedArgs.flags)}case"list":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(listSubcommand),0;telemetry.trackCliSubcommandList(subcommandOriginal);let listFlagsSpec=getFlagsSpecification(listSubcommand.options),listParsedArgs=parseArguments(subArgs,listFlagsSpec);return telemetry.trackCliFlagAllProjects(listParsedArgs.flags["--all-projects"]),telemetry.trackCliOptionLimit(listParsedArgs.flags["--limit"]),telemetry.trackCliOptionNext(listParsedArgs.flags["--next"]),telemetry.trackCliOptionQuery(listParsedArgs.flags["--query"]),telemetry.trackCliOptionSearch(listParsedArgs.flags["--search"]),telemetry.trackCliOptionService(listParsedArgs.flags["--service"]),telemetry.trackCliOptionType(listParsedArgs.flags["--type"]),telemetry.trackCliOptionFormat(listParsedArgs.flags["--format"]),await list(client,listParsedArgs.flags)}case"token":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(tokenSubcommand),0;telemetry.trackCliSubcommandToken(subcommandOriginal);let tokenFlagsSpec=getFlagsSpecification(tokenSubcommand.options),tokenParsedArgs=parseArguments(subArgs,tokenFlagsSpec);return telemetry.trackCliArgumentId(tokenParsedArgs.args[0]),telemetry.trackCliOptionSubject(tokenParsedArgs.flags["--subject"]),telemetry.trackCliOptionInstallation(tokenParsedArgs.flags["--installation"]),telemetry.trackCliOptionInstallationId(tokenParsedArgs.flags["--installation-id"]),telemetry.trackCliOptionScopes(tokenParsedArgs.flags["--scopes"]),telemetry.trackCliFlagNoDefaultScopes(tokenParsedArgs.flags["--no-default-scopes"]),telemetry.trackCliFlagYes(tokenParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(tokenParsedArgs.flags["--format"]),await token(client,tokenParsedArgs.args,tokenParsedArgs.flags)}case"attach":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(attachSubcommand),0;telemetry.trackCliSubcommandAttach(subcommandOriginal);let attachFlagsSpec=getFlagsSpecification(attachSubcommand.options),attachParsedArgs=parseArguments(subArgs,attachFlagsSpec);return telemetry.trackCliArgumentClient(attachParsedArgs.args[0]),telemetry.trackCliOptionEnvironment(attachParsedArgs.flags["--environment"]),telemetry.trackCliOptionProject(attachParsedArgs.flags["--project"]),telemetry.trackCliFlagTriggers(attachParsedArgs.flags["--triggers"]),telemetry.trackCliOptionGitBranch(attachParsedArgs.flags["--git-branch"]),telemetry.trackCliOptionTriggerBranch(attachParsedArgs.flags["--trigger-branch"]),telemetry.trackCliOptionTriggerEnvironment(attachParsedArgs.flags["--trigger-environment"]),telemetry.trackCliOptionTriggerPath(attachParsedArgs.flags["--trigger-path"]),telemetry.trackCliFlagYes(attachParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(attachParsedArgs.flags["--format"]),await attach(client,attachParsedArgs.args,attachParsedArgs.flags)}case"detach":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(detachSubcommand),0;telemetry.trackCliSubcommandDetach(subcommandOriginal);let detachFlagsSpec=getFlagsSpecification(detachSubcommand.options),detachParsedArgs=parseArguments(subArgs,detachFlagsSpec);return telemetry.trackCliArgumentClient(detachParsedArgs.args[0]),telemetry.trackCliOptionProject(detachParsedArgs.flags["--project"]),telemetry.trackCliFlagYes(detachParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(detachParsedArgs.flags["--format"]),await detach(client,detachParsedArgs.args,detachParsedArgs.flags)}case"delete":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(removeSubcommand),0;telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"connect remove","connect delete");let removeFlagsSpec=getFlagsSpecification(removeSubcommand.options),removeParsedArgs=parseArguments(subArgs,removeFlagsSpec);return telemetry.trackCliArgumentClient(removeParsedArgs.args[0]),telemetry.trackCliFlagYes(removeParsedArgs.flags["--yes"]),telemetry.trackCliFlagDisconnectAll(removeParsedArgs.flags["--disconnect-all"]),telemetry.trackCliOptionFormat(removeParsedArgs.flags["--format"]),await remove(client,removeParsedArgs.args,removeParsedArgs.flags)}case"revoke-tokens":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(revokeTokensSubcommand),0;telemetry.trackCliSubcommandRevokeTokens(subcommandOriginal);let revokeTokensFlagsSpec=getFlagsSpecification(revokeTokensSubcommand.options),revokeTokensParsedArgs=parseArguments(subArgs,revokeTokensFlagsSpec);return telemetry.trackCliArgumentId(revokeTokensParsedArgs.args[0]),telemetry.trackCliFlagMyTokens(revokeTokensParsedArgs.flags["--my-tokens"]),telemetry.trackCliFlagAllTokens(revokeTokensParsedArgs.flags["--all-tokens"]),telemetry.trackCliFlagYes(revokeTokensParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(revokeTokensParsedArgs.flags["--format"]),await revokeTokens(client,revokeTokensParsedArgs.args,revokeTokensParsedArgs.flags)}case"contacts":return telemetry.trackCliSubcommandContacts(subcommandOriginal),await contacts(client);case"open":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(openSubcommand),0;telemetry.trackCliSubcommandOpen(subcommandOriginal);let openFlagsSpec=getFlagsSpecification(openSubcommand.options),openParsedArgs=parseArguments(subArgs,openFlagsSpec);return telemetry.trackCliOptionFormat(openParsedArgs.flags["--format"]),await openClient(client,openParsedArgs.args,openParsedArgs.flags)}default:{let validSubcommands=Object.keys(COMMAND_CONFIG2).join(" | "),missingSubcommand=subArgs.length===0,message=missingSubcommand?`Please specify a valid subcommand: ${validSubcommands}`:`Unknown subcommand "${subArgs[0]}". Valid subcommands: ${validSubcommands}`;return outputAgentError(client,{status:"error",reason:missingSubcommand?AGENT_REASON.MISSING_ARGUMENTS:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"connect --help",packageName,{prependGlobalFlags:!0}),when:"Show all connect subcommands and options"}]},2),output_manager_default.error(message),2}}}catch(err){return printError(err,client),isArgumentError(err)?2:1}}function findHelpServiceArg(subArgs){try{let{args}=parseArguments(normalizeCreateDataArgs(subArgs),getFlagsSpecification(createSubcommand.options),{permissive:!0});return args.find(arg=>!arg.startsWith("-"))}catch{return}}function normalizeCreateDataArgs(args){let normalized=[];for(let i=0;i<args.length;i++){let arg=args[i];if(normalized.push(arg),arg==="--data"){let next=args[i+1];(next===void 0||next.startsWith("-"))&&normalized.push("")}}return normalized}var import_chalk17=__toESM(require_source(),1),import_execa=__toESM(require_execa(),1),import_error_utils=__toESM(require_dist(),1),import_open7=__toESM(require_open(),1);function isAutoProvisionFallback(error){return typeof error=="object"&&error!==null&&"kind"in error&&error.kind!=="provisioned"&&"url"in error&&"integration"in error&&"product"in error}async function autoProvisionResource(client,integrationSlug,productSlug,name,metadata,acceptedPolicies,billingPlanId,installationId,installationMetadata){let endpoint=`/v1/integrations/integration/${encodeURIComponent(integrationSlug)}/marketplace/auto-provision/${encodeURIComponent(productSlug)}`,body={name,metadata,acceptedPolicies,source:"cli",...billingPlanId?{billingPlanId}:{},...installationId?{installationId}:{},...installationMetadata&&Object.keys(installationMetadata).length>0?{installationMetadata}:{}};output_manager_default.debug(`Auto-provision request: POST ${endpoint}`),output_manager_default.debug(`Auto-provision body: ${JSON.stringify(body,null,2)}`);try{let res=await client.fetch(endpoint,{method:"POST",json:!1,body});if(res.ok)return res.json();throw new Error(`Auto-provision failed: ${res.status}`)}catch(error){if(error instanceof APIError&&error.status===422&&isAutoProvisionFallback(error))return output_manager_default.debug("Auto-provision returned 422 fallback response"),error;throw output_manager_default.debug(`Auto-provision error: ${error}`),error}}var import_chalk14=__toESM(require_source(),1);async function fetchMarketplaceIntegrationsList(client,categories3){let params=new URLSearchParams({integrationType:"marketplace"});if(categories3?.length)for(let category of categories3)params.append("category",category);return client.fetch(`/v2/integrations/integrations?${params.toString()}`,{json:!0})}async function fetchIntegration(client,slug){return client.fetch(`/v2/integrations/integration/${slug}`,{json:!0})}function toDiscoverEntries(integrations){let entries=[];for(let integration of integrations){if(!integration.isMarketplace||!integration.canInstall)continue;let integrationTags=integration.tagIds??[],products=integration.products??[];if(products.length===0){entries.push({name:integration.name,slug:integration.slug,provider:integration.name,description:integration.shortDescription??"",tags:integrationTags});continue}for(let product of products){let needsCompoundSlug=products.length>1||product.slug!==integration.slug;entries.push({name:product.name,slug:needsCompoundSlug?`${integration.slug}/${product.slug}`:integration.slug,provider:integration.name,description:product.shortDescription??integration.shortDescription??"",tags:[...integrationTags,...product.tags??[]]})}}return entries}function matchesSearchTerm(entry,term){let lower=term.toLowerCase();return entry.name.toLowerCase().includes(lower)||entry.slug.toLowerCase().includes(lower)||entry.provider.toLowerCase().includes(lower)||entry.description.toLowerCase().includes(lower)||entry.tags.some(tag=>tag.toLowerCase().includes(lower))}async function resolveAndFetchIntegration(client,slug,telemetry){let directError;try{let integration=await fetchIntegration(client,slug);return telemetry.trackCliArgumentIntegration(slug,!0),integration}catch(error){directError=error}output_manager_default.spinner("Searching marketplace integrations...",500);let entries;try{let integrations=await fetchMarketplaceIntegrationsList(client);entries=toDiscoverEntries(integrations)}catch(discoverError){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to get integration "${slug}": ${directError?.message??discoverError.message}`),telemetry.trackCliArgumentIntegration(slug,!1),null}output_manager_default.stopSpinner();let matches=entries.filter(entry=>matchesSearchTerm(entry,slug));if(!matches.length)return output_manager_default.error(`No integration found matching "${slug}". Run ${import_chalk14.default.cyan("vercel integration discover")} to browse available integrations.`),telemetry.trackCliArgumentIntegration(slug,!1),null;if(matches.length===1){let match2=matches[0];if(client.stdin.isTTY===!0&&!await client.input.confirm(`Install ${import_chalk14.default.bold(match2.name)} (${match2.slug})?`,!0))return telemetry.trackCliArgumentIntegration(slug,!1),null;slug=match2.slug}else{if(client.stdin.isTTY!==!0)return output_manager_default.error(`Found ${matches.length} integrations matching "${slug}". Available integrations:
83
+ `),0;let safePhoneNumber=sanitizeForTerminal(phoneNumber);return output_manager_default.success(`Contact ${import_chalk13.default.bold(safePhoneNumber)} added.`),verification.instructions&&output_manager_default.log(sanitizeForTerminal(verification.instructions)),0}var COMMAND_CONFIG={add:getCommandAliases(contactsAddSubcommand)};async function contacts(client){let telemetry=new ContactsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(contactsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(4),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,subcommandOriginal,args:subArgs}=getSubcommand2(parsedArgs.args,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("connect contacts"),output_manager_default.print(help(contactsSubcommand,{stream:client.stderr,parent:connexCommand,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,parent:contactsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("connect contacts",subcommandOriginal),printHelp(contactsAddSubcommand),0):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add(client,subArgs));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG)),output_manager_default.print(help(contactsSubcommand,{stream:client.stderr,parent:connexCommand,columns:client.stderr.columns})),2}}var COMMAND_CONFIG2={discover:getCommandAliases(discoverSubcommand),categories:getCommandAliases(categoriesSubcommand),create:getCommandAliases(createSubcommand),update:getCommandAliases(updateSubcommand),list:getCommandAliases(listSubcommand),token:getCommandAliases(tokenSubcommand),attach:getCommandAliases(attachSubcommand),detach:getCommandAliases(detachSubcommand),delete:getCommandAliases(removeSubcommand),"revoke-tokens":getCommandAliases(revokeTokensSubcommand),open:getCommandAliases(openSubcommand),contacts:getCommandAliases(contactsSubcommand)};async function connex(client){let telemetry=new ConnexTelemetryClient({opts:{store:client.telemetryEventStore}}),{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(connexCommand.options),{permissive:!0}),{subcommand,subcommandOriginal,args:subArgs}=getSubcommand2(args.slice(1),COMMAND_CONFIG2),needHelp=flags["--help"];function printHelp(command,options){output_manager_default.print(help(command,{...options,columns:client.stderr.columns,stream:client.stderr,parent:connexCommand}))}function printHelpToStdout(command,options){client.stdout.write(help(command,{...options,columns:client.stdout.columns??client.stderr.columns,stream:client.stdout,parent:connexCommand}))}if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("connect"),output_manager_default.print(help(connexCommand,{columns:client.stderr.columns,stream:client.stderr})),0;try{switch(subcommand){case"create":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),await printCreateDynamicHelp(client,findHelpServiceArg(subArgs),createSubcommand,printHelpToStdout)||printHelpToStdout(createSubcommand),0;telemetry.trackCliSubcommandCreate(subcommandOriginal);let createFlagsSpec=getFlagsSpecification(createSubcommand.options),createParsedArgs=parseArguments(normalizeCreateDataArgs(subArgs),createFlagsSpec);return telemetry.trackCliArgumentService(createParsedArgs.args[0]),telemetry.trackCliOptionName(createParsedArgs.flags["--name"]),telemetry.trackCliOptionIcon(createParsedArgs.flags["--icon"]),telemetry.trackCliOptionBackgroundColor(createParsedArgs.flags["--background-color"]),telemetry.trackCliOptionAccentColor(createParsedArgs.flags["--accent-color"]),telemetry.trackCliOptionData(createParsedArgs.flags["--data"]),telemetry.trackCliOptionConnectorType(createParsedArgs.flags["--connector-type"]),telemetry.trackCliOptionTriggerEvent(createParsedArgs.flags["--trigger-event"]),telemetry.trackCliOptionConnectionMethod(createParsedArgs.flags["--connection-method"]),telemetry.trackCliOptionTarget(createParsedArgs.flags["--target"]),telemetry.trackCliOptionParam(createParsedArgs.flags["--param"]),telemetry.trackCliFlagYes(createParsedArgs.flags["--yes"]),telemetry.trackCliFlagTriggers(createParsedArgs.flags["--triggers"]),telemetry.trackCliOptionTriggerPath(createParsedArgs.flags["--trigger-path"]),telemetry.trackCliOptionTriggerProject(createParsedArgs.flags["--trigger-project"]),telemetry.trackCliOptionGitBranch(createParsedArgs.flags["--git-branch"]),telemetry.trackCliOptionTriggerBranch(createParsedArgs.flags["--trigger-branch"]),telemetry.trackCliOptionTriggerEnvironment(createParsedArgs.flags["--trigger-environment"]),telemetry.trackCliOptionFormat(createParsedArgs.flags["--format"]),await create(client,createParsedArgs.args,createParsedArgs.flags)}case"update":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(updateSubcommand),0;telemetry.trackCliSubcommandUpdate(subcommandOriginal);let updateFlagsSpec=getFlagsSpecification(updateSubcommand.options),updateParsedArgs=parseArguments(subArgs,updateFlagsSpec);return telemetry.trackCliArgumentId(updateParsedArgs.args[0]),telemetry.trackCliOptionIcon(updateParsedArgs.flags["--icon"]),telemetry.trackCliOptionBackgroundColor(updateParsedArgs.flags["--background-color"]),telemetry.trackCliOptionAccentColor(updateParsedArgs.flags["--accent-color"]),telemetry.trackCliOptionFormat(updateParsedArgs.flags["--format"]),await update(client,updateParsedArgs.args,updateParsedArgs.flags)}case"discover":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(discoverSubcommand),0;telemetry.trackCliSubcommandDiscover(subcommandOriginal);let discoverParsedArgs=parseArguments(subArgs,getFlagsSpecification(discoverSubcommand.options));return telemetry.trackCliArgumentQuery(discoverParsedArgs.args[0]),telemetry.trackCliOptionCategory(discoverParsedArgs.flags["--category"]),telemetry.trackCliOptionConnectionMethod(discoverParsedArgs.flags["--connection-method"]),telemetry.trackCliOptionTarget(discoverParsedArgs.flags["--target"]),telemetry.trackCliFlagSupportsTriggers(discoverParsedArgs.flags["--supports-triggers"]),telemetry.trackCliOptionLimit(discoverParsedArgs.flags["--limit"]),telemetry.trackCliOptionNext(discoverParsedArgs.flags["--next"]),telemetry.trackCliOptionFormat(discoverParsedArgs.flags["--format"]),await discover(client,discoverParsedArgs.args,discoverParsedArgs.flags)}case"categories":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(categoriesSubcommand),0;telemetry.trackCliSubcommandCategories(subcommandOriginal);let categoriesParsedArgs=parseArguments(subArgs,getFlagsSpecification(categoriesSubcommand.options));return telemetry.trackCliOptionFormat(categoriesParsedArgs.flags["--format"]),await categories(client,categoriesParsedArgs.args,categoriesParsedArgs.flags)}case"list":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(listSubcommand),0;telemetry.trackCliSubcommandList(subcommandOriginal);let listFlagsSpec=getFlagsSpecification(listSubcommand.options),listParsedArgs=parseArguments(subArgs,listFlagsSpec);return telemetry.trackCliFlagAllProjects(listParsedArgs.flags["--all-projects"]),telemetry.trackCliOptionLimit(listParsedArgs.flags["--limit"]),telemetry.trackCliOptionNext(listParsedArgs.flags["--next"]),telemetry.trackCliOptionQuery(listParsedArgs.flags["--query"]),telemetry.trackCliOptionSearch(listParsedArgs.flags["--search"]),telemetry.trackCliOptionService(listParsedArgs.flags["--service"]),telemetry.trackCliOptionType(listParsedArgs.flags["--type"]),telemetry.trackCliOptionFormat(listParsedArgs.flags["--format"]),await list(client,listParsedArgs.flags)}case"token":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(tokenSubcommand),0;telemetry.trackCliSubcommandToken(subcommandOriginal);let tokenFlagsSpec=getFlagsSpecification(tokenSubcommand.options),tokenParsedArgs=parseArguments(subArgs,tokenFlagsSpec);return telemetry.trackCliArgumentId(tokenParsedArgs.args[0]),telemetry.trackCliOptionSubject(tokenParsedArgs.flags["--subject"]),telemetry.trackCliOptionInstallation(tokenParsedArgs.flags["--installation"]),telemetry.trackCliOptionInstallationId(tokenParsedArgs.flags["--installation-id"]),telemetry.trackCliOptionScopes(tokenParsedArgs.flags["--scopes"]),telemetry.trackCliFlagNoDefaultScopes(tokenParsedArgs.flags["--no-default-scopes"]),telemetry.trackCliFlagYes(tokenParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(tokenParsedArgs.flags["--format"]),await token(client,tokenParsedArgs.args,tokenParsedArgs.flags)}case"attach":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(attachSubcommand),0;telemetry.trackCliSubcommandAttach(subcommandOriginal);let attachFlagsSpec=getFlagsSpecification(attachSubcommand.options),attachParsedArgs=parseArguments(subArgs,attachFlagsSpec);return telemetry.trackCliArgumentClient(attachParsedArgs.args[0]),telemetry.trackCliOptionEnvironment(attachParsedArgs.flags["--environment"]),telemetry.trackCliOptionProject(attachParsedArgs.flags["--project"]),telemetry.trackCliFlagTriggers(attachParsedArgs.flags["--triggers"]),telemetry.trackCliOptionGitBranch(attachParsedArgs.flags["--git-branch"]),telemetry.trackCliOptionTriggerBranch(attachParsedArgs.flags["--trigger-branch"]),telemetry.trackCliOptionTriggerEnvironment(attachParsedArgs.flags["--trigger-environment"]),telemetry.trackCliOptionTriggerPath(attachParsedArgs.flags["--trigger-path"]),telemetry.trackCliFlagYes(attachParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(attachParsedArgs.flags["--format"]),await attach(client,attachParsedArgs.args,attachParsedArgs.flags)}case"detach":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(detachSubcommand),0;telemetry.trackCliSubcommandDetach(subcommandOriginal);let detachFlagsSpec=getFlagsSpecification(detachSubcommand.options),detachParsedArgs=parseArguments(subArgs,detachFlagsSpec);return telemetry.trackCliArgumentClient(detachParsedArgs.args[0]),telemetry.trackCliOptionProject(detachParsedArgs.flags["--project"]),telemetry.trackCliFlagYes(detachParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(detachParsedArgs.flags["--format"]),await detach(client,detachParsedArgs.args,detachParsedArgs.flags)}case"delete":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(removeSubcommand),0;telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"connect remove","connect delete");let removeFlagsSpec=getFlagsSpecification(removeSubcommand.options),removeParsedArgs=parseArguments(subArgs,removeFlagsSpec);return telemetry.trackCliArgumentClient(removeParsedArgs.args[0]),telemetry.trackCliFlagYes(removeParsedArgs.flags["--yes"]),telemetry.trackCliFlagDisconnectAll(removeParsedArgs.flags["--disconnect-all"]),telemetry.trackCliOptionFormat(removeParsedArgs.flags["--format"]),await remove(client,removeParsedArgs.args,removeParsedArgs.flags)}case"revoke-tokens":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(revokeTokensSubcommand),0;telemetry.trackCliSubcommandRevokeTokens(subcommandOriginal);let revokeTokensFlagsSpec=getFlagsSpecification(revokeTokensSubcommand.options),revokeTokensParsedArgs=parseArguments(subArgs,revokeTokensFlagsSpec);return telemetry.trackCliArgumentId(revokeTokensParsedArgs.args[0]),telemetry.trackCliFlagMyTokens(revokeTokensParsedArgs.flags["--my-tokens"]),telemetry.trackCliFlagAllTokens(revokeTokensParsedArgs.flags["--all-tokens"]),telemetry.trackCliFlagYes(revokeTokensParsedArgs.flags["--yes"]),telemetry.trackCliOptionFormat(revokeTokensParsedArgs.flags["--format"]),await revokeTokens(client,revokeTokensParsedArgs.args,revokeTokensParsedArgs.flags)}case"contacts":return telemetry.trackCliSubcommandContacts(subcommandOriginal),await contacts(client);case"open":{if(needHelp)return telemetry.trackCliFlagHelp("connect",subcommandOriginal),printHelp(openSubcommand),0;telemetry.trackCliSubcommandOpen(subcommandOriginal);let openFlagsSpec=getFlagsSpecification(openSubcommand.options),openParsedArgs=parseArguments(subArgs,openFlagsSpec);return telemetry.trackCliOptionFormat(openParsedArgs.flags["--format"]),await openClient(client,openParsedArgs.args,openParsedArgs.flags)}default:{let validSubcommands=Object.keys(COMMAND_CONFIG2).join(" | "),missingSubcommand=subArgs.length===0,message=missingSubcommand?`Please specify a valid subcommand: ${validSubcommands}`:`Unknown subcommand "${subArgs[0]}". Valid subcommands: ${validSubcommands}`;return outputAgentError(client,{status:"error",reason:missingSubcommand?AGENT_REASON.MISSING_ARGUMENTS:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"connect --help",packageName,{prependGlobalFlags:!0}),when:"Show all connect subcommands and options"}]},2),output_manager_default.error(message),2}}}catch(err){return printError(err,client),isArgumentError(err)?2:1}}function findHelpServiceArg(subArgs){try{let{args}=parseArguments(normalizeCreateDataArgs(subArgs),getFlagsSpecification(createSubcommand.options),{permissive:!0});return args.find(arg=>!arg.startsWith("-"))}catch{return}}function normalizeCreateDataArgs(args){let normalized=[];for(let i=0;i<args.length;i++){let arg=args[i];if(normalized.push(arg),arg==="--data"){let next=args[i+1];(next===void 0||next.startsWith("-"))&&normalized.push("")}}return normalized}var import_chalk17=__toESM(require_source(),1),import_execa=__toESM(require_execa(),1),import_error_utils=__toESM(require_dist(),1),import_open7=__toESM(require_open(),1);function isAutoProvisionFallback(error){return typeof error=="object"&&error!==null&&"kind"in error&&error.kind!=="provisioned"&&"url"in error&&"integration"in error&&"product"in error}async function autoProvisionResource(client,integrationSlug,productSlug,name,metadata,acceptedPolicies,billingPlanId,installationId,installationMetadata){let endpoint=`/v1/integrations/integration/${encodeURIComponent(integrationSlug)}/marketplace/auto-provision/${encodeURIComponent(productSlug)}`,body={name,metadata,acceptedPolicies,source:"cli",...billingPlanId?{billingPlanId}:{},...installationId?{installationId}:{},...installationMetadata&&Object.keys(installationMetadata).length>0?{installationMetadata}:{}};output_manager_default.debug(`Auto-provision request: POST ${endpoint}`),output_manager_default.debug(`Auto-provision body: ${JSON.stringify(body,null,2)}`);try{let res=await client.fetch(endpoint,{method:"POST",json:!1,body});if(res.ok)return res.json();throw new Error(`Auto-provision failed: ${res.status}`)}catch(error){if(error instanceof APIError&&error.status===422&&isAutoProvisionFallback(error))return output_manager_default.debug("Auto-provision returned 422 fallback response"),error;throw output_manager_default.debug(`Auto-provision error: ${error}`),error}}var import_chalk14=__toESM(require_source(),1);async function fetchMarketplaceIntegrationsList(client,categories3){let params=new URLSearchParams({integrationType:"marketplace"});if(categories3?.length)for(let category of categories3)params.append("category",category);return client.fetch(`/v2/integrations/integrations?${params.toString()}`,{json:!0})}async function fetchIntegration(client,slug){return client.fetch(`/v2/integrations/integration/${slug}`,{json:!0})}function toDiscoverEntries(integrations){let entries=[];for(let integration of integrations){if(!integration.isMarketplace||!integration.canInstall)continue;let integrationTags=integration.tagIds??[],products=integration.products??[];if(products.length===0){entries.push({name:integration.name,slug:integration.slug,provider:integration.name,description:integration.shortDescription??"",tags:integrationTags});continue}for(let product of products){let needsCompoundSlug=products.length>1||product.slug!==integration.slug;entries.push({name:product.name,slug:needsCompoundSlug?`${integration.slug}/${product.slug}`:integration.slug,provider:integration.name,description:product.shortDescription??integration.shortDescription??"",tags:[...integrationTags,...product.tags??[]]})}}return entries}function matchesSearchTerm(entry,term){let lower=term.toLowerCase();return entry.name.toLowerCase().includes(lower)||entry.slug.toLowerCase().includes(lower)||entry.provider.toLowerCase().includes(lower)||entry.description.toLowerCase().includes(lower)||entry.tags.some(tag=>tag.toLowerCase().includes(lower))}async function resolveAndFetchIntegration(client,slug,telemetry){let directError;try{let integration=await fetchIntegration(client,slug);return telemetry.trackCliArgumentIntegration(slug,!0),integration}catch(error){directError=error}output_manager_default.spinner("Searching marketplace integrations...",500);let entries;try{let integrations=await fetchMarketplaceIntegrationsList(client);entries=toDiscoverEntries(integrations)}catch(discoverError){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to get integration "${slug}": ${directError?.message??discoverError.message}`),telemetry.trackCliArgumentIntegration(slug,!1),null}output_manager_default.stopSpinner();let matches=entries.filter(entry=>matchesSearchTerm(entry,slug));if(!matches.length)return output_manager_default.error(`No integration found matching "${slug}". Run ${import_chalk14.default.cyan("vercel integration discover")} to browse available integrations.`),telemetry.trackCliArgumentIntegration(slug,!1),null;if(matches.length===1){let match=matches[0];if(client.stdin.isTTY===!0&&!await client.input.confirm(`Install ${import_chalk14.default.bold(match.name)} (${match.slug})?`,!0))return telemetry.trackCliArgumentIntegration(slug,!1),null;slug=match.slug}else{if(client.stdin.isTTY!==!0)return output_manager_default.error(`Found ${matches.length} integrations matching "${slug}". Available integrations:
84
84
  ${matches.map(m=>`- ${m.slug}: ${m.description}`).join(`
85
85
  `)}`),telemetry.trackCliArgumentIntegration(slug,!1),null;slug=await client.input.select({message:`Found ${matches.length} integrations matching "${slug}". Pick one to install:`,choices:matches.map(m=>({name:`${m.name} (${m.slug})${m.description?` - ${m.description}`:""}`,value:m.slug}))})}let integrationSlug,productSlug,slashIndex=slug.indexOf("/");slashIndex!==-1?(integrationSlug=slug.substring(0,slashIndex),productSlug=slug.substring(slashIndex+1)):integrationSlug=slug;try{let integration=await fetchIntegration(client,integrationSlug);return telemetry.trackCliArgumentIntegration(integrationSlug,!0),{...integration,productSlug}}catch(error){return output_manager_default.error(`Failed to get integration "${integrationSlug}": ${error.message}`),telemetry.trackCliArgumentIntegration(integrationSlug,!1),null}}async function fetchInstallations(client,integration){let searchParams=new URLSearchParams;return searchParams.set("view","account"),searchParams.set("installationType","marketplace"),searchParams.set("integrationIdOrSlug",integration.id),client.fetch(`/v2/integrations/configurations?${searchParams}`,{json:!0})}var import_open5=__toESM(require_open(),1);var import_chalk15=__toESM(require_source(),1);var MARKETPLACE_ADDENDUM_URL="https://vercel.com/legal/integration-marketplace-end-users-addendum";function getMarketplacePolicyLinks(integration){let links={marketplace_addendum:MARKETPLACE_ADDENDUM_URL};return integration.privacyDocUri&&(links.integration_privacy_policy=integration.privacyDocUri),integration.eulaDocUri&&(links.integration_eula=integration.eulaDocUri),links}async function promptForTermAcceptance(client,integration){if(client.isAgent)return output_manager_default.error("Term acceptance cannot be performed by an AI agent. Run this command directly in your terminal."),null;if(!client.stdin.isTTY)return output_manager_default.error("Term acceptance requires an interactive terminal. Run this command in a TTY."),null;let documents=[{label:"Vercel Marketplace End User Addendum",url:MARKETPLACE_ADDENDUM_URL}];integration.privacyDocUri&&documents.push({label:"Privacy Policy",url:integration.privacyDocUri}),integration.eulaDocUri&&documents.push({label:"Terms of Service",url:integration.eulaDocUri}),output_manager_default.print(`
86
86
  `),output_manager_default.log(`Installing ${import_chalk15.default.bold(integration.name)} requires accepting the following:`),output_manager_default.print(`
87
87
  `);for(let{label,url}of documents)output_manager_default.print(` ${import_chalk15.default.bold(label)}
88
88
  `),output_manager_default.print(` ${import_chalk15.default.dim(url)}
89
89
  `),output_manager_default.print(`
90
- `);return await client.input.confirm("Accept all of the documents listed above?",!1)?buildAcceptedPolicies(integration):(output_manager_default.error("All of the listed documents must be accepted to continue."),null)}function buildAcceptedPolicies(integration){let acceptedAt=new Date().toISOString(),acceptedPolicies={toc:acceptedAt};return integration.privacyDocUri&&(acceptedPolicies.privacy=acceptedAt),integration.eulaDocUri&&(acceptedPolicies.eula=acceptedAt),acceptedPolicies}var POLL_INTERVAL_MS2=2e3,DEFAULT_TIMEOUT_MS=5*60*1e3;async function acceptTermsViaBrowser(client,integration,teamId,teamSlug,timeoutMs=DEFAULT_TIMEOUT_MS){let url=new URL(`https://vercel.com/${encodeURIComponent(teamSlug)}/~/integrations/accept-terms/${encodeURIComponent(integration.slug)}`);if(url.searchParams.set("source","cli"),shouldEmitNonInteractiveCommandError(client)){let tail=buildIntegrationCommandTailFromArgv(client.argv),policyLinks=getMarketplacePolicyLinks(integration);outputActionRequired(client,{status:"action_required",reason:AGENT_REASON.INTEGRATION_TERMS_ACCEPTANCE_REQUIRED,message:`Accept marketplace terms for "${integration.name}" in your browser before this install can finish. Open verification_uri to start. This command does not wait for acceptance in non-interactive mode.`,verification_uri:url.href,policy_links:policyLinks,userActionRequired:!0,hint:`Read policy_links, complete verification_uri in the browser, then retry install from next[]. Confirm with ${packageName} integration installations.`,next:[{command:buildCommandWithGlobalFlags(client.argv,tail,packageName,{prependGlobalFlags:!0}),when:"Retry install after terms are accepted (browser or dashboard)"}]},1)}output_manager_default.log("Opening browser for terms acceptance. Accept the terms to continue..."),output_manager_default.log(`Visit this URL if the browser does not open: ${url.href}`);try{await(0,import_open5.default)(url.href)}catch(err){output_manager_default.debug(`Failed to open browser: ${err}`)}output_manager_default.spinner("Waiting for terms acceptance in browser...");let deadline=Date.now()+timeoutMs;for(;Date.now()<deadline;){await sleep(POLL_INTERVAL_MS2);try{let teamInstallation=(await fetchInstallations(client,integration)).find(i=>i.ownerId===teamId&&i.installationType==="marketplace");if(teamInstallation)return output_manager_default.stopSpinner(),output_manager_default.success("Terms accepted in browser."),teamInstallation}catch(error){output_manager_default.debug(`Polling error (will retry): ${error}`)}}return output_manager_default.stopSpinner(),output_manager_default.error("Timed out waiting for terms acceptance. Please try again and accept terms in the browser within 5 minutes."),null}async function selectProduct(client,products,productSlug){if(productSlug){let match2=products.find(p=>p.slug===productSlug);if(!match2){let available=products.map(p=>p.slug).join(", ");output_manager_default.error(`Product "${productSlug}" not found. Available products: ${available}`);return}return match2}return products.length===1?products[0]:client.input.select({message:"Select a product",choices:products.map(p=>({name:p.name,value:p,description:p.shortDescription}))})}function resolveProductSkills(product){let resolved=[];for(let entry of product.agentSkills??[]){let skill=resolveSkillFromUrl(entry);skill&&resolved.push(skill)}return resolved}function resolveSkillFromUrl(value){let url;try{url=new URL(value)}catch{return null}if(url.hostname.replace(/^www\./,"")!=="github.com")return null;let[owner,repo,kind,,...rest]=url.pathname.split("/").filter(Boolean);if(!owner||!repo)return null;let repoUrl=`https://github.com/${owner.toLowerCase()}/${repo.toLowerCase()}`,skill;if(kind==="blob"||kind==="tree"){let parts=rest.filter(part=>part.toLowerCase()!=="skill.md");skill=parts[parts.length-1]}let command=skill?`npx skills add ${repoUrl} --skill ${skill}`:`npx skills add ${repoUrl}`;return{repoUrl,skill,command}}var import_chalk16=__toESM(require_source(),1),import_open6=__toESM(require_open(),1);async function getResources(client){return(await client.fetch("/v1/storage/stores",{json:!0})).stores}var ClaimUrlError=class extends Error{constructor(message,code,status2){super(message);this.code=code,this.status=status2}};async function createClaimUrl(client,resource){let installationId=resource.product?.integrationConfigurationId;if(!installationId)throw new ClaimUrlError(`Resource "${resource.name}" is not associated with a marketplace installation and cannot be claimed.`,"not_marketplace");try{return await client.fetch(`/v1/integrations/installations/${encodeURIComponent(installationId)}/resources/${encodeURIComponent(resource.id)}/sandbox/claim-url`,{method:"POST",json:!0,body:{source:"cli"}})}catch(error){throw mapClaimUrlError(error,resource)}}function mapClaimUrlError(error,resource){if(!isAPIError(error))return error instanceof Error?new ClaimUrlError(`Provider could not generate a claim URL: ${error.message}`,"unknown"):new ClaimUrlError("Provider could not generate a claim URL.","unknown");let status2=error.status,serverMessage=(error.serverMessage||error.message||"").toString(),messageLower=serverMessage.toLowerCase();if(status2===403)return new ClaimUrlError("You don't have permission to claim resources in this team.","forbidden",status2);if(status2===404)return messageLower.includes("installation")?new ClaimUrlError("Integration installation not found. Run `vercel integration list`.","installation_not_found",status2):new ClaimUrlError(`No resource named '${resource.name}' found.`,"resource_not_found",status2);if(status2===400){if(messageLower.includes("sandbox")||messageLower.includes("ownership"))return new ClaimUrlError(`'${resource.name}' can no longer be claimed (likely already claimed). Run \`${packageName} integration list\` to refresh.`,"not_sandbox",status2);if(messageLower.includes("marketplace")||messageLower.includes("integration"))return new ClaimUrlError("This integration doesn't support claiming.","not_marketplace",status2)}return new ClaimUrlError(`Provider could not generate a claim URL: ${serverMessage||"unknown error"}`,"partner_error",status2)}var import_ms=__toESM(require_ms(),1);async function getResource(client,resourceId){let{store}=await client.fetch(`/v1/storage/stores/${encodeURIComponent(resourceId)}`,{json:!0});return store}var POLL_INTERVAL_MS3=2e3,DEFAULT_TIMEOUT_MS2=5*60*1e3,SANDBOX_CLAIM_IN_PROGRESS_MSG="Claim still in progress \u2014 finish in your browser, then run `vercel integration list` to verify.";async function pollForClaim(client,resourceId,options={}){let timeoutMs=options.timeoutMs??DEFAULT_TIMEOUT_MS2,cancelled=!1,resolveCancelled,cancelledSignal=new Promise(resolve3=>{resolveCancelled=resolve3}),onSigint=()=>{cancelled=!0,resolveCancelled?.()};process.on("SIGINT",onSigint);try{output_manager_default.spinner("Waiting for claim to complete in browser...");let deadline=Date.now()+timeoutMs;for(;Date.now()<deadline&&!cancelled&&(await Promise.race([sleep(POLL_INTERVAL_MS3),cancelledSignal]),!cancelled);)try{let updated=await getResource(client,resourceId);if(updated.ownership&&updated.ownership!=="sandbox")return output_manager_default.stopSpinner(),{status:"claimed",resource:updated}}catch(error){output_manager_default.debug(`Polling error (will retry): ${error}`)}return output_manager_default.stopSpinner(),cancelled?(output_manager_default.print(`
90
+ `);return await client.input.confirm("Accept all of the documents listed above?",!1)?buildAcceptedPolicies(integration):(output_manager_default.error("All of the listed documents must be accepted to continue."),null)}function buildAcceptedPolicies(integration){let acceptedAt=new Date().toISOString(),acceptedPolicies={toc:acceptedAt};return integration.privacyDocUri&&(acceptedPolicies.privacy=acceptedAt),integration.eulaDocUri&&(acceptedPolicies.eula=acceptedAt),acceptedPolicies}var POLL_INTERVAL_MS2=2e3,DEFAULT_TIMEOUT_MS=5*60*1e3;async function acceptTermsViaBrowser(client,integration,teamId,teamSlug,timeoutMs=DEFAULT_TIMEOUT_MS){let url=new URL(`https://vercel.com/${encodeURIComponent(teamSlug)}/~/integrations/accept-terms/${encodeURIComponent(integration.slug)}`);if(url.searchParams.set("source","cli"),shouldEmitNonInteractiveCommandError(client)){let tail=buildIntegrationCommandTailFromArgv(client.argv),policyLinks=getMarketplacePolicyLinks(integration);outputActionRequired(client,{status:"action_required",reason:AGENT_REASON.INTEGRATION_TERMS_ACCEPTANCE_REQUIRED,message:`Accept marketplace terms for "${integration.name}" in your browser before this install can finish. Open verification_uri to start. This command does not wait for acceptance in non-interactive mode.`,verification_uri:url.href,policy_links:policyLinks,userActionRequired:!0,hint:`Read policy_links, complete verification_uri in the browser, then retry install from next[]. Confirm with ${packageName} integration installations.`,next:[{command:buildCommandWithGlobalFlags(client.argv,tail,packageName,{prependGlobalFlags:!0}),when:"Retry install after terms are accepted (browser or dashboard)"}]},1)}output_manager_default.log("Opening browser for terms acceptance. Accept the terms to continue..."),output_manager_default.log(`Visit this URL if the browser does not open: ${url.href}`);try{await(0,import_open5.default)(url.href)}catch(err){output_manager_default.debug(`Failed to open browser: ${err}`)}output_manager_default.spinner("Waiting for terms acceptance in browser...");let deadline=Date.now()+timeoutMs;for(;Date.now()<deadline;){await sleep(POLL_INTERVAL_MS2);try{let teamInstallation=(await fetchInstallations(client,integration)).find(i=>i.ownerId===teamId&&i.installationType==="marketplace");if(teamInstallation)return output_manager_default.stopSpinner(),output_manager_default.success("Terms accepted in browser."),teamInstallation}catch(error){output_manager_default.debug(`Polling error (will retry): ${error}`)}}return output_manager_default.stopSpinner(),output_manager_default.error("Timed out waiting for terms acceptance. Please try again and accept terms in the browser within 5 minutes."),null}async function selectProduct(client,products,productSlug){if(productSlug){let match=products.find(p=>p.slug===productSlug);if(!match){let available=products.map(p=>p.slug).join(", ");output_manager_default.error(`Product "${productSlug}" not found. Available products: ${available}`);return}return match}return products.length===1?products[0]:client.input.select({message:"Select a product",choices:products.map(p=>({name:p.name,value:p,description:p.shortDescription}))})}function resolveProductSkills(product){let resolved=[];for(let entry of product.agentSkills??[]){let skill=resolveSkillFromUrl(entry);skill&&resolved.push(skill)}return resolved}function resolveSkillFromUrl(value){let url;try{url=new URL(value)}catch{return null}if(url.hostname.replace(/^www\./,"")!=="github.com")return null;let[owner,repo,kind,,...rest]=url.pathname.split("/").filter(Boolean);if(!owner||!repo)return null;let repoUrl=`https://github.com/${owner.toLowerCase()}/${repo.toLowerCase()}`,skill;if(kind==="blob"||kind==="tree"){let parts=rest.filter(part=>part.toLowerCase()!=="skill.md");skill=parts[parts.length-1]}let command=skill?`npx skills add ${repoUrl} --skill ${skill}`:`npx skills add ${repoUrl}`;return{repoUrl,skill,command}}var import_chalk16=__toESM(require_source(),1),import_open6=__toESM(require_open(),1);async function getResources(client){return(await client.fetch("/v1/storage/stores",{json:!0})).stores}var ClaimUrlError=class extends Error{constructor(message,code,status2){super(message);this.code=code,this.status=status2}};async function createClaimUrl(client,resource){let installationId=resource.product?.integrationConfigurationId;if(!installationId)throw new ClaimUrlError(`Resource "${resource.name}" is not associated with a marketplace installation and cannot be claimed.`,"not_marketplace");try{return await client.fetch(`/v1/integrations/installations/${encodeURIComponent(installationId)}/resources/${encodeURIComponent(resource.id)}/sandbox/claim-url`,{method:"POST",json:!0,body:{source:"cli"}})}catch(error){throw mapClaimUrlError(error,resource)}}function mapClaimUrlError(error,resource){if(!isAPIError(error))return error instanceof Error?new ClaimUrlError(`Provider could not generate a claim URL: ${error.message}`,"unknown"):new ClaimUrlError("Provider could not generate a claim URL.","unknown");let status2=error.status,serverMessage=(error.serverMessage||error.message||"").toString(),messageLower=serverMessage.toLowerCase();if(status2===403)return new ClaimUrlError("You don't have permission to claim resources in this team.","forbidden",status2);if(status2===404)return messageLower.includes("installation")?new ClaimUrlError("Integration installation not found. Run `vercel integration list`.","installation_not_found",status2):new ClaimUrlError(`No resource named '${resource.name}' found.`,"resource_not_found",status2);if(status2===400){if(messageLower.includes("sandbox")||messageLower.includes("ownership"))return new ClaimUrlError(`'${resource.name}' can no longer be claimed (likely already claimed). Run \`${packageName} integration list\` to refresh.`,"not_sandbox",status2);if(messageLower.includes("marketplace")||messageLower.includes("integration"))return new ClaimUrlError("This integration doesn't support claiming.","not_marketplace",status2)}return new ClaimUrlError(`Provider could not generate a claim URL: ${serverMessage||"unknown error"}`,"partner_error",status2)}var import_ms=__toESM(require_ms(),1);async function getResource(client,resourceId){let{store}=await client.fetch(`/v1/storage/stores/${encodeURIComponent(resourceId)}`,{json:!0});return store}var POLL_INTERVAL_MS3=2e3,DEFAULT_TIMEOUT_MS2=5*60*1e3,SANDBOX_CLAIM_IN_PROGRESS_MSG="Claim still in progress \u2014 finish in your browser, then run `vercel integration list` to verify.";async function pollForClaim(client,resourceId,options={}){let timeoutMs=options.timeoutMs??DEFAULT_TIMEOUT_MS2,cancelled=!1,resolveCancelled,cancelledSignal=new Promise(resolve3=>{resolveCancelled=resolve3}),onSigint=()=>{cancelled=!0,resolveCancelled?.()};process.on("SIGINT",onSigint);try{output_manager_default.spinner("Waiting for claim to complete in browser...");let deadline=Date.now()+timeoutMs;for(;Date.now()<deadline&&!cancelled&&(await Promise.race([sleep(POLL_INTERVAL_MS3),cancelledSignal]),!cancelled);)try{let updated=await getResource(client,resourceId);if(updated.ownership&&updated.ownership!=="sandbox")return output_manager_default.stopSpinner(),{status:"claimed",resource:updated}}catch(error){output_manager_default.debug(`Polling error (will retry): ${error}`)}return output_manager_default.stopSpinner(),cancelled?(output_manager_default.print(`
91
91
  `),output_manager_default.log(SANDBOX_CLAIM_IN_PROGRESS_MSG),{status:"cancelled"}):(output_manager_default.error(`Claim did not complete within ${(0,import_ms.default)(timeoutMs,{long:!0})}.`),output_manager_default.log(SANDBOX_CLAIM_IN_PROGRESS_MSG),{status:"timeout"})}finally{process.off("SIGINT",onSigint)}}function isSandboxResource(resource){return resource.ownership==="sandbox"}var IntegrationResourceClaimTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagNoWait(v){v&&this.trackCliFlag("no-wait")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function claim(client,argv){let telemetry=new IntegrationResourceClaimTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(claimSubcommand.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"],noWait=!!parsedArguments.flags["--no-wait"];if(telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetry.trackCliFlagYes(skipConfirmation),telemetry.trackCliFlagNoWait(noWait),parsedArguments.args.length>1)return output_manager_default.error("Too many arguments. Usage: `vercel integration resource claim [name]`."),2;let resourceNameArg=parsedArguments.args[0];telemetry.trackCliArgumentResource(resourceNameArg);let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;client.config.currentTeam=team.id,output_manager_default.spinner("Retrieving resources\u2026",500);let allResources;try{allResources=await getResources(client)}catch(error){return output_manager_default.stopSpinner(),output_manager_default.error(`Failed to fetch resources: ${error.message}`),1}output_manager_default.stopSpinner();let targetResource;if(resourceNameArg){if(targetResource=allResources.find(r=>r.name===resourceNameArg),!targetResource)return output_manager_default.error(`No resource named '${resourceNameArg}' found.`),1}else{if(!client.stdin.isTTY)return output_manager_default.error("Missing resource name. Run `vercel integration list` to see available resources."),1;let sandboxResources=allResources.filter(isSandboxResource);if(sandboxResources.length===0)return output_manager_default.log("No sandbox resources to claim in the current project."),0;if(sandboxResources.length===1){let only=sandboxResources[0];if(skipConfirmation)targetResource=only;else{let productLabel=only.product?.name?` (${only.product.name} sandbox)`:"";if(!await client.input.confirm(`Claim ${import_chalk16.default.bold(only.name)}${productLabel}?`,!0))return output_manager_default.log("Canceled"),0;targetResource=only}}else{let choice=await client.input.select({message:"Which sandbox resource would you like to claim?",choices:sandboxResources.map(r=>({name:r.product?.name?`${r.name} (${r.product.name})`:r.name,value:r.id}))});if(targetResource=sandboxResources.find(r=>r.id===choice),!targetResource)return output_manager_default.error("No resource selected."),1}}return runClaimForResource(client,targetResource,{asJson,noWait})}async function runClaimForResource(client,targetResource,options={}){let{asJson,noWait,suppressActionRequired}=options;if(!isSandboxResource(targetResource)){let alreadyClaimed=targetResource.ownership==="owned"||targetResource.ownership==="linked";return output_manager_default.error(alreadyClaimed?`'${targetResource.name}' can no longer be claimed (already claimed). Run \`${packageName} integration list\` to refresh.`:`'${targetResource.name}' is not a sandbox resource and cannot be claimed.`),1}output_manager_default.spinner("Requesting claim URL\u2026",500);let claimUrl;try{claimUrl=(await createClaimUrl(client,targetResource)).claimUrl}catch(error){return output_manager_default.stopSpinner(),error instanceof ClaimUrlError?(output_manager_default.error(error.message),1):(output_manager_default.error(`A problem occurred while requesting the claim URL: ${error.message}`),1)}if(output_manager_default.stopSpinner(),!suppressActionRequired&&shouldEmitNonInteractiveCommandError(client)&&outputActionRequired(client,{status:"action_required",reason:AGENT_REASON.INTEGRATION_SANDBOX_CLAIM_REQUIRED,message:`Claim "${targetResource.name}" in your browser to finish provisioning. Open verification_uri to start. This command does not wait for the claim in non-interactive mode.`,verification_uri:claimUrl,userActionRequired:!0,hint:`Open verification_uri in a browser, complete the provider's claim flow, then run \`${packageName} integration list\` to confirm \`ownership\` flipped from sandbox to linked.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration list",packageName,{prependGlobalFlags:!0}),when:"After claiming in the browser, verify ownership flipped to linked"}]},1),noWait){if(asJson){let json={resource:{id:targetResource.id,name:targetResource.name},claimUrl,status:"url_generated"};client.stdout.write(`${JSON.stringify(json,null,2)}
92
92
  `)}else output_manager_default.log(`Visit this URL to claim ${import_chalk16.default.bold(targetResource.name)}: ${claimUrl}`),output_manager_default.log(`Re-run \`${packageName} integration list\` after claiming to verify.`);return 0}if(!client.stdin.isTTY){if(asJson){let json={resource:{id:targetResource.id,name:targetResource.name},claimUrl,status:"url_generated"};client.stdout.write(`${JSON.stringify(json,null,2)}
93
93
  `)}else output_manager_default.log(`Visit this URL to claim ${import_chalk16.default.bold(targetResource.name)}: ${claimUrl}`),output_manager_default.log(`Re-run \`${packageName} integration list\` after claiming to verify.`);return suppressActionRequired?0:1}output_manager_default.log(`Opening browser to claim ${import_chalk16.default.bold(targetResource.name)}\u2026`),output_manager_default.log(`Visit this URL if the browser does not open: ${claimUrl}`);try{await(0,import_open6.default)(claimUrl)}catch(err){output_manager_default.debug(`Failed to open browser: ${err}`)}let result=await pollForClaim(client,targetResource.id);if(result.status==="cancelled")return 130;if(result.status==="timeout"){if(asJson){let json={resource:{id:targetResource.id,name:targetResource.name},claimUrl,status:"timeout"};client.stdout.write(`${JSON.stringify(json,null,2)}
@@ -130,12 +130,12 @@ ${documentation}
130
130
  `),projects.length===0)output_manager_default.log(import_chalk23.default.gray("No connected projects."));else{output_manager_default.log("Connected projects:");for(let project of projects){let envs=project.environments?.length?import_chalk23.default.gray(` (${project.environments.join(", ")})`):"";output_manager_default.print(` ${project.name}${envs}
131
131
  `)}}return isSandbox&&(output_manager_default.print(`
132
132
  `),output_manager_default.log(`This is a sandbox resource. Run \`${packageName} integration resource claim ${resource.name}\` to claim it.`)),0}function integrationLink(resource,team){let slug=resource.product?.slug;if(!slug)return;let configurationId=resource.product?.integrationConfigurationId;if(!configurationId)return slug;let boldName=import_chalk23.default.bold(slug);return output_manager_default.link(boldName,buildSSOLink(team,configurationId),{fallback:()=>boldName,color:!1})}var import_chalk24=__toESM(require_source(),1);async function deleteResource(client,resource){return client.fetch(`/v1/storage/stores/integration/${resource.id}`,{json:!0,method:"DELETE"})}var IntegrationResourceRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliFlagDisconnectAll(v){v&&this.trackCliFlag("disconnect-all")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var suggestRemoveOpts={prependGlobalFlags:!0,excludeFlags:["--yes","-y"]};async function remove2(client,argv){let telemetry=new IntegrationResourceRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(removeSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"];if(telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]),asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;if(client.config.currentTeam=team.id,parsedArguments.args.length<1){let message="You must specify a resource. See `--help` for details.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message,hint:"Put global options first, then `integration resource delete <resource> --yes`. Use `--disconnect-all` to detach projects before delete.",next:[{command:buildCommandWithGlobalFlags(client.argv,"integration resource delete <resource> --yes",packageName,suggestRemoveOpts),when:"Replace <resource> with the store name (angle brackets are not part of the command)"}]},2),output_manager_default.error(message),2}if(parsedArguments.args.length>1){let message="Cannot specify more than one resource at a time.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,hint:`One resource per invocation: \`${packageName} [global options] integration resource delete <resource> [--disconnect-all] --yes\`.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration resource delete <resource> --disconnect-all --yes",packageName,suggestRemoveOpts),when:"Single resource name in place of <resource>"}]},2),output_manager_default.error(message),2}let disconnectAll=!!parsedArguments.flags["--disconnect-all"],resourceReference=parsedArguments.args[0];telemetry.trackCliArgumentResource(resourceReference),telemetry.trackCliFlagDisconnectAll(disconnectAll),telemetry.trackCliFlagYes(skipConfirmation),output_manager_default.spinner("Retrieving resource\u2026",500);let resources=await getResources(client),targetedResource=resources.find(resource=>resource.name===resourceReference)??resources.find(resource=>resource.id===resourceReference);if(output_manager_default.stopSpinner(),!targetedResource)return output_manager_default.error(`No resource ${import_chalk24.default.bold(resourceReference)} found.`),1;if(disconnectAll)try{await handleDisconnectAllProjects(client,targetedResource,skipConfirmation,asJson)}catch(error){if(error instanceof CancelledError)return output_manager_default.log(error.message),0;if(error instanceof FailedError)return output_manager_default.error(error.message),1;throw error}return await handleDeleteResource(client,targetedResource,{skipConfirmation,skipProjectCheck:disconnectAll,asJson})}async function handleDeleteResource(client,resource,options){let hasProjects=resource.projectsMetadata&&resource.projectsMetadata?.length>0;if(!options?.skipProjectCheck&&hasProjects)return output_manager_default.error(`Cannot delete resource ${import_chalk24.default.bold(resource.name)} while it has connected projects. Please disconnect any projects using this resource first or use the \`--disconnect-all\` option.`),1;if(!options?.skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!options?.skipConfirmation&&!await confirmDeleteResource(client,resource))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Deleting resource\u2026",500),await deleteResource(client,resource)}catch(error){return output_manager_default.error(`A problem occurred when attempting to delete ${import_chalk24.default.bold(resource.name)}: ${error.message}`),1}return options?.asJson?(output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({resource:resource.name,removed:!0},null,2)}
133
- `),0):(output_manager_default.success(`${import_chalk24.default.bold(resource.name)} successfully deleted.`),0)}async function confirmDeleteResource(client,resource){return output_manager_default.log(`${import_chalk24.default.bold(resource.name)} will be deleted permanently.`),client.input.confirm(`${import_chalk24.default.red("Are you sure?")}`,!1)}var COMMAND_CONFIG3={delete:getCommandAliases(removeSubcommand2),disconnect:getCommandAliases(disconnectSubcommand),connect:getCommandAliases(connectSubcommand),"create-threshold":getCommandAliases(createThresholdSubcommand),claim:getCommandAliases(claimSubcommand),inspect:getCommandAliases(inspectSubcommand)},CREATE_GUESSES=new Set(["create","add","new"]),INTEGRATION_SLUG=/^[a-z0-9][a-z0-9-]*(\/[a-z0-9][a-z0-9-]*)?$/i;function buildInstallRedirect(args){let parsed;try{parsed=parseArguments(args,getFlagsSpecification(addSubcommand.options),{warnDeprecated:!1})}catch{return}let[integration,...extra]=parsed.args;if(extra.length>0||integration!==void 0&&!INTEGRATION_SLUG.test(integration))return;let flags=parsed.flags,tokens=["install",integration??"<integration>"];for(let option of addSubcommand.options){let name=`--${option.name}`,value=flags[name];if(!(value===void 0||value===!1)){if(value===!0){tokens.push(name);continue}for(let item of Array.isArray(value)?value:[value])tokens.push(name,quoteShellArg(String(item)))}}return tokens.join(" ")}async function dispatchResourceSubcommand(client,subArgs,needHelp,options){let telemetry=new IntegrationResourceTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal,args:innerArgs}=getSubcommand2(subArgs,COMMAND_CONFIG3);if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp(options.helpBreadcrumb),output_manager_default.print(help(integrationResourceCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,columns:client.stderr.columns,parent:options.parentForChildHelp}))}switch(subcommand){case"create-threshold":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(createThresholdSubcommand),0):(telemetry.trackCliSubcommandCreateThreshold(subcommandOriginal),createThreshold(client,innerArgs));case"delete":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(removeSubcommand2),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,`${options.helpBreadcrumb} remove`,"integration resource delete"),remove2(client,innerArgs));case"disconnect":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(disconnectSubcommand),0):(telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,innerArgs));case"connect":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(connectSubcommand),0):(telemetry.trackCliSubcommandConnect(subcommandOriginal),connect(client,innerArgs));case"claim":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(claimSubcommand),0):(telemetry.trackCliSubcommandClaim(subcommandOriginal),claim(client,innerArgs));case"inspect":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="status"&&warnDeprecatedSubcommand(client,`${options.helpBreadcrumb} status`,"integration resource inspect"),inspect(client,innerArgs));default:{if(CREATE_GUESSES.has(subArgs[0])){let install2=buildInstallRedirect(subArgs.slice(1)),message=`Resources are created with \`vercel install <integration>\`, not \`vercel ${options.helpBreadcrumb} ${subArgs[0]}\`.`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[install2?{command:buildCommandWithGlobalFlags(client.argv,install2),when:install2.includes("<integration>")?"create a resource (replace <integration>)":"create the resource"}:{command:buildCommandWithGlobalFlags(client.argv,"install --help"),when:"see the options for creating a resource"},{command:buildCommandWithGlobalFlags(client.argv,"integration discover"),when:"find integration and product slugs"}]},2),output_manager_default.error(message),2}return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG3)),2}}}async function main(client){let{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(integrationResourceCommand.options),{permissive:!0});return(args[0]==="integration-resource"||args[0]==="ir")&&warnDeprecatedSubcommand(client,args[0],"integration resource"),dispatchResourceSubcommand(client,args.slice(1),!!flags["--help"],{helpBreadcrumb:"integration-resource",parentForChildHelp:integrationResourceCommand})}var import_chalk25=__toESM(require_source(),1);var IntegrationListTelemetryClient=class extends TelemetryClient{trackCliArgumentProject(v){v&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliOptionIntegration(v,known){v&&this.trackCliOption({option:"integration",value:known?v:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list2(client){let parsedArguments=null,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArguments=parseArguments(client.argv.slice(3),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new IntegrationListTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentProject(parsedArguments.args[1]),telemetry.trackCliFlagAll(parsedArguments.flags["--all"]),telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]);let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,validationResult=validateLsArgs({commandName:"integration list [project]",args:parsedArguments.args,maxArgs:2,exitCode:1});if(validationResult!==0)return validationResult;let project;if(parsedArguments.args.length===2){if(parsedArguments.flags["--all"])return output_manager_default.error("Cannot specify a project when using the `--all` option."),2;project={name:parsedArguments.args[1]}}let{contextName,team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;if(client.config.currentTeam=team.id,!project&&!parsedArguments.flags["--all"]&&(project=await getLinkedProject(client).then(result=>{if(result.status==="linked")return result.project}),!project))return output_manager_default.error("No project linked. Either use `vc link` to link a project, or the `--all` option to list all resources."),1;let resources;try{output_manager_default.spinner("Retrieving resources\u2026",500),resources=await getResources(client)}catch(error){return output_manager_default.error(`Failed to fetch resources: ${error.message}`),1}let filterIntegration=parsedArguments.flags["--integration"]?.toLocaleLowerCase();function resourceIsFromMarketplace(resource){return resource.type==="integration"}let knownIntegration=!1;function filterOnIntegration(resource){if(!filterIntegration)return!0;let match2=filterIntegration===resource.product?.slug;return match2&&(knownIntegration=!0),match2}function filterOnProject(resource){return!project||!!resource.projectsMetadata?.find(metadata=>metadata.projectId===project?.id||metadata.name===project?.name)}function filterOnFlags(resource){return filterOnIntegration(resource)&&filterOnProject(resource)}let results=resources.filter(resourceIsFromMarketplace).filter(filterOnFlags).map(resource=>({id:resource.id,name:resource.name,status:resource.status,product:resource.product?.name,integration:resource.product?.slug,configurationId:resource.product?.integrationConfigurationId,projects:resource.projectsMetadata?.map(project2=>project2.name),isSandbox:isSandboxResource(resource)})),sandboxCount=results.filter(r=>r.isSandbox).length;if(telemetry.trackCliOptionIntegration(parsedArguments.flags["--integration"],knownIntegration),asJson){output_manager_default.stopSpinner();let jsonResources=results.map(result=>{let obj={id:result.id,name:result.name,status:result.status,product:result.product,installationId:result.configurationId,projects:result.projects};return result.isSandbox&&(obj.claim_status="sandbox"),obj});return client.stdout.write(`${JSON.stringify({resources:jsonResources},null,2)}
133
+ `),0):(output_manager_default.success(`${import_chalk24.default.bold(resource.name)} successfully deleted.`),0)}async function confirmDeleteResource(client,resource){return output_manager_default.log(`${import_chalk24.default.bold(resource.name)} will be deleted permanently.`),client.input.confirm(`${import_chalk24.default.red("Are you sure?")}`,!1)}var COMMAND_CONFIG3={delete:getCommandAliases(removeSubcommand2),disconnect:getCommandAliases(disconnectSubcommand),connect:getCommandAliases(connectSubcommand),"create-threshold":getCommandAliases(createThresholdSubcommand),claim:getCommandAliases(claimSubcommand),inspect:getCommandAliases(inspectSubcommand)},CREATE_GUESSES=new Set(["create","add","new"]),INTEGRATION_SLUG=/^[a-z0-9][a-z0-9-]*(\/[a-z0-9][a-z0-9-]*)?$/i;function buildInstallRedirect(args){let parsed;try{parsed=parseArguments(args,getFlagsSpecification(addSubcommand.options),{warnDeprecated:!1})}catch{return}let[integration,...extra]=parsed.args;if(extra.length>0||integration!==void 0&&!INTEGRATION_SLUG.test(integration))return;let flags=parsed.flags,tokens=["install",integration??"<integration>"];for(let option of addSubcommand.options){let name=`--${option.name}`,value=flags[name];if(!(value===void 0||value===!1)){if(value===!0){tokens.push(name);continue}for(let item of Array.isArray(value)?value:[value])tokens.push(name,quoteShellArg(String(item)))}}return tokens.join(" ")}async function dispatchResourceSubcommand(client,subArgs,needHelp,options){let telemetry=new IntegrationResourceTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,subcommandOriginal,args:innerArgs}=getSubcommand2(subArgs,COMMAND_CONFIG3);if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp(options.helpBreadcrumb),output_manager_default.print(help(integrationResourceCommand,{stream:client.stderr,columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,columns:client.stderr.columns,parent:options.parentForChildHelp}))}switch(subcommand){case"create-threshold":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(createThresholdSubcommand),0):(telemetry.trackCliSubcommandCreateThreshold(subcommandOriginal),createThreshold(client,innerArgs));case"delete":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(removeSubcommand2),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,`${options.helpBreadcrumb} remove`,"integration resource delete"),remove2(client,innerArgs));case"disconnect":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(disconnectSubcommand),0):(telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect(client,innerArgs));case"connect":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(connectSubcommand),0):(telemetry.trackCliSubcommandConnect(subcommandOriginal),connect(client,innerArgs));case"claim":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(claimSubcommand),0):(telemetry.trackCliSubcommandClaim(subcommandOriginal),claim(client,innerArgs));case"inspect":return needHelp?(telemetry.trackCliFlagHelp(options.helpBreadcrumb,subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="status"&&warnDeprecatedSubcommand(client,`${options.helpBreadcrumb} status`,"integration resource inspect"),inspect(client,innerArgs));default:{if(CREATE_GUESSES.has(subArgs[0])){let install2=buildInstallRedirect(subArgs.slice(1)),message=`Resources are created with \`vercel install <integration>\`, not \`vercel ${options.helpBreadcrumb} ${subArgs[0]}\`.`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[install2?{command:buildCommandWithGlobalFlags(client.argv,install2),when:install2.includes("<integration>")?"create a resource (replace <integration>)":"create the resource"}:{command:buildCommandWithGlobalFlags(client.argv,"install --help"),when:"see the options for creating a resource"},{command:buildCommandWithGlobalFlags(client.argv,"integration discover"),when:"find integration and product slugs"}]},2),output_manager_default.error(message),2}return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG3)),2}}}async function main(client){let{args,flags}=parseArguments(client.argv.slice(2),getFlagsSpecification(integrationResourceCommand.options),{permissive:!0});return(args[0]==="integration-resource"||args[0]==="ir")&&warnDeprecatedSubcommand(client,args[0],"integration resource"),dispatchResourceSubcommand(client,args.slice(1),!!flags["--help"],{helpBreadcrumb:"integration-resource",parentForChildHelp:integrationResourceCommand})}var import_chalk25=__toESM(require_source(),1);var IntegrationListTelemetryClient=class extends TelemetryClient{trackCliArgumentProject(v){v&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliOptionIntegration(v,known){v&&this.trackCliOption({option:"integration",value:known?v:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list2(client){let parsedArguments=null,flagsSpecification=getFlagsSpecification(listSubcommand2.options);try{parsedArguments=parseArguments(client.argv.slice(3),flagsSpecification)}catch(error){return printError(error),2}let telemetry=new IntegrationListTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliArgumentProject(parsedArguments.args[1]),telemetry.trackCliFlagAll(parsedArguments.flags["--all"]),telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]);let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,validationResult=validateLsArgs({commandName:"integration list [project]",args:parsedArguments.args,maxArgs:2,exitCode:1});if(validationResult!==0)return validationResult;let project;if(parsedArguments.args.length===2){if(parsedArguments.flags["--all"])return output_manager_default.error("Cannot specify a project when using the `--all` option."),2;project={name:parsedArguments.args[1]}}let{contextName,team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;if(client.config.currentTeam=team.id,!project&&!parsedArguments.flags["--all"]&&(project=await getLinkedProject(client).then(result=>{if(result.status==="linked")return result.project}),!project))return output_manager_default.error("No project linked. Either use `vc link` to link a project, or the `--all` option to list all resources."),1;let resources;try{output_manager_default.spinner("Retrieving resources\u2026",500),resources=await getResources(client)}catch(error){return output_manager_default.error(`Failed to fetch resources: ${error.message}`),1}let filterIntegration=parsedArguments.flags["--integration"]?.toLocaleLowerCase();function resourceIsFromMarketplace(resource){return resource.type==="integration"}let knownIntegration=!1;function filterOnIntegration(resource){if(!filterIntegration)return!0;let match=filterIntegration===resource.product?.slug;return match&&(knownIntegration=!0),match}function filterOnProject(resource){return!project||!!resource.projectsMetadata?.find(metadata=>metadata.projectId===project?.id||metadata.name===project?.name)}function filterOnFlags(resource){return filterOnIntegration(resource)&&filterOnProject(resource)}let results=resources.filter(resourceIsFromMarketplace).filter(filterOnFlags).map(resource=>({id:resource.id,name:resource.name,status:resource.status,product:resource.product?.name,integration:resource.product?.slug,configurationId:resource.product?.integrationConfigurationId,projects:resource.projectsMetadata?.map(project2=>project2.name),isSandbox:isSandboxResource(resource)})),sandboxCount=results.filter(r=>r.isSandbox).length;if(telemetry.trackCliOptionIntegration(parsedArguments.flags["--integration"],knownIntegration),asJson){output_manager_default.stopSpinner();let jsonResources=results.map(result=>{let obj={id:result.id,name:result.name,status:result.status,product:result.product,installationId:result.configurationId,projects:result.projects};return result.isSandbox&&(obj.claim_status="sandbox"),obj});return client.stdout.write(`${JSON.stringify({resources:jsonResources},null,2)}
134
134
  `),0}if(results.length===0)return output_manager_default.log("No resources found."),0;let headerMessage=project?`Integration resources for project ${import_chalk25.default.bold(project.name)} in ${import_chalk25.default.bold(contextName)}:`:`Integrations in ${import_chalk25.default.bold(contextName)}:`;if(output_manager_default.log(`${headerMessage}
135
135
  ${table([["Name","Status","Product","Integration","Projects"].map(header=>import_chalk25.default.bold(import_chalk25.default.cyan(header))),...results.map(result=>[resourceLink(contextName,result)??import_chalk25.default.gray("\u2013"),resourceStatus(result.status??"\u2013",result.isSandbox),result.product??import_chalk25.default.gray("\u2013"),integrationLink2(result,team)??import_chalk25.default.gray("\u2013"),import_chalk25.default.grey(result.projects?.length?result.projects.join(", "):"\u2013")])],{hsep:8})}`),sandboxCount>0){let noun=sandboxCount===1?"resource":"resources";output_manager_default.log(`${sandboxCount} sandbox ${noun} can be claimed.`),output_manager_default.print(` Run \`${packageName} integration resource claim <name>\` to claim one.
136
136
  `)}return 0}function integrationLink2(integration,team){if(!integration.integration)return;if(!integration.configurationId)return integration.integration;let boldName=import_chalk25.default.bold(integration.integration),integrationDeepLink=buildSSOLink(team,integration.configurationId);return output_manager_default.link(boldName,integrationDeepLink,{fallback:()=>boldName,color:!1})}var import_chalk26=__toESM(require_source(),1),import_open8=__toESM(require_open(),1);var IntegrationOpenTelemetryClient=class extends TelemetryClient{trackCliArgumentName(v,known){this.trackCliArgument({arg:"name",value:known?v:this.redactedValue})}trackCliArgumentResource(v){v&&this.trackCliArgument({arg:"resource",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function openIntegration(client,subArgs){let telemetry=new IntegrationOpenTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(openSubcommand2.options),parsedArguments;try{parsedArguments=parseArguments(subArgs,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArguments,formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]),args.length>2)return output_manager_default.error("Too many arguments. Usage: integration open <name> [resource]"),2;let integrationSlug=args[0],resourceName=args[1];if(!integrationSlug)return output_manager_default.error("You must pass an integration name"),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found"),1;client.config.currentTeam=team.id;let configuration,knownIntegrationSlug=!1;try{configuration=await getFirstConfiguration(client,integrationSlug),knownIntegrationSlug=!!configuration}catch(error){return output_manager_default.error(`Failed to fetch configuration for ${import_chalk26.default.bold(`"${integrationSlug}"`)}: ${error.message}`),1}finally{telemetry.trackCliArgumentName(integrationSlug,knownIntegrationSlug),resourceName&&telemetry.trackCliArgumentResource(resourceName)}if(!configuration)return output_manager_default.error(`No configuration found for ${import_chalk26.default.bold(`"${integrationSlug}"`)}.`),1;let configurationId=configuration.id;if(resourceName){let resources;try{resources=await getResources(client)}catch(error){return output_manager_default.error(`Failed to fetch resources: ${error.message}`),1}let resource=resources.find(r=>r.name===resourceName&&r.product?.integrationConfigurationId===configurationId);if(!resource)return output_manager_default.error(`Resource ${import_chalk26.default.bold(`"${resourceName}"`)} not found for integration ${import_chalk26.default.bold(`"${integrationSlug}"`)}.`),1;let link2=buildSSOLink(team,configurationId,resource.externalResourceId);return outputLink(client,link2,asJson,resourceName,!0),0}let link=buildSSOLink(team,configurationId);return outputLink(client,link,asJson,integrationSlug,!1),0}function outputLink(client,link,json,name,isResource){if(json)client.stdout.write(`${JSON.stringify({url:link},null,2)}
137
137
  `);else if(client.stdout.isTTY){let label=isResource?`Opening the ${import_chalk26.default.bold(name)} resource dashboard...`:`Opening the ${import_chalk26.default.bold(name)} dashboard...`;output_manager_default.print(label),(0,import_open8.default)(link)}else client.stdout.write(`${link}
138
- `)}var import_chalk27=__toESM(require_source(),1);async function removeIntegration(client,configuration){return client.fetch(`/v2/integrations/installations/${configuration.id}/uninstall`,{json:!0,body:{},method:"POST"})}var IntegrationRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentIntegration(v,known){v&&this.trackCliArgument({arg:"integration",value:known?v:this.redactedValue})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function remove3(client,argv){let telemetry=new IntegrationRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(removeSubcommand3.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"];if(telemetry.trackCliFlagYes(skipConfirmation),telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]),asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;if(client.config.currentTeam=team.id,parsedArguments.args.length<1){let message="You must specify an integration. See `--help` for details.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message,hint:"Put global options (`--cwd`, `--non-interactive`, etc.) first, then `integration remove <slug> --yes`. Replace `<slug>` with your integration; non-interactive removal requires `--yes`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"integration installations",packageName,{prependGlobalFlags:!0}),when:"List integration slugs for this team"},{command:buildCommandWithGlobalFlags(client.argv,"integration remove <slug> --yes",packageName,{prependGlobalFlags:!0}),when:"Substitute your integration slug for <slug> (angle brackets are not part of the command)"}]},2),output_manager_default.error(message),2}if(parsedArguments.args.length>1){let message="Cannot specify more than one integration at a time.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,hint:`Use one slug only: \`${packageName} [global options] integration remove <slug> --yes\`. Global options belong before \`integration\`.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration remove <slug> --yes",packageName,{prependGlobalFlags:!0}),when:"Single slug in place of <slug>; keep one integration remove invocation"}]},2),output_manager_default.error(message),2}let integrationName=parsedArguments.args[0];output_manager_default.spinner("Retrieving integration\u2026",500);let integrationConfiguration=await getFirstConfiguration(client,integrationName);if(output_manager_default.stopSpinner(),!integrationConfiguration)return output_manager_default.error(`No integration ${import_chalk27.default.bold(integrationName)} found.`),telemetry.trackCliArgumentIntegration(integrationName,!1),1;if(telemetry.trackCliArgumentIntegration(integrationName,!0),!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!await confirmIntegrationRemoval(client,integrationConfiguration.slug,team))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Removing integration\u2026",1e3),await removeIntegration(client,integrationConfiguration)}catch(error){if(isAPIError(error)&&error.status===403&&error.serverMessage.includes("resources")){let resourceNames=[];try{let searchParams=new URLSearchParams;searchParams.set("teamId",team.id),searchParams.set("integrationConfigurationId",integrationConfiguration.id),searchParams.set("skip-metadata","true");let{stores}=await client.fetch(`/v1/storage/stores?${searchParams}`,{json:!0});resourceNames=stores.map(s2=>s2.name)}catch{}if(asJson||shouldEmitNonInteractiveCommandError(client)){output_manager_default.stopSpinner();let approvalHint="Delete each resource with --disconnect-all (non-interactive: include --yes). Get user approval before deleting resources.",resourceTail=asJson?"--disconnect-all --yes --json":"--disconnect-all --yes",integrationRemoveTail=asJson?"--yes --json":"--yes",suggestNextOpts={prependGlobalFlags:!0,excludeFlags:["--yes","-y"]},payload={status:"error",reason:AGENT_REASON.HAS_RESOURCES,integration:integrationName,removed:!1,error:"has_resources",message:`Cannot remove ${integrationName} because it still has resources.`,resources:resourceNames,hint:client.isAgent?`${approvalHint} Agents must obtain explicit user approval before running integration resource delete.`:approvalHint,userActionRequired:client.isAgent?!0:void 0,next:resourceNames.map(name=>({command:buildCommandWithGlobalFlags(client.argv,`integration resource delete ${name} ${resourceTail}`,packageName,suggestNextOpts),when:`Disconnect and remove resource ${name}; substitute the real resource name if different`})),retry:buildCommandWithGlobalFlags(client.argv,`integration remove ${integrationName} ${integrationRemoveTail}`,packageName,suggestNextOpts)};return client.stdout.write(`${JSON.stringify(payload,null,2)}
138
+ `)}var import_chalk27=__toESM(require_source(),1);async function removeIntegration(client,configuration){return client.fetch(`/v2/integrations/installations/${configuration.id}/uninstall`,{json:!0,body:{},method:"POST"})}var IntegrationRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentIntegration(v,known){v&&this.trackCliArgument({arg:"integration",value:known?v:this.redactedValue})}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function remove3(client,argv){let telemetry=new IntegrationRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(removeSubcommand3.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,skipConfirmation=!!parsedArguments.flags["--yes"];if(telemetry.trackCliFlagYes(skipConfirmation),telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]),asJson&&!skipConfirmation)return output_manager_default.error("--json requires --yes to skip confirmation prompts"),2;let{team}=await getScope(client);if(!team)return output_manager_default.error("Team not found."),1;if(client.config.currentTeam=team.id,parsedArguments.args.length<1){let message="You must specify an integration. See `--help` for details.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message,hint:"Put global options (`--cwd`, `--non-interactive`, etc.) first, then `integration remove <slug> --yes`. Replace `<slug>` with your integration; non-interactive removal requires `--yes`.",next:[{command:buildCommandWithGlobalFlags(client.argv,"integration installations",packageName,{prependGlobalFlags:!0}),when:"List integration slugs for this team"},{command:buildCommandWithGlobalFlags(client.argv,"integration remove <slug> --yes",packageName,{prependGlobalFlags:!0}),when:"Substitute your integration slug for <slug> (angle brackets are not part of the command)"}]},2),output_manager_default.error(message),2}if(parsedArguments.args.length>1){let message="Cannot specify more than one integration at a time.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,hint:`Use one slug only: \`${packageName} [global options] integration remove <slug> --yes\`. Global options belong before \`integration\`.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration remove <slug> --yes",packageName,{prependGlobalFlags:!0}),when:"Single slug in place of <slug>; keep one integration remove invocation"}]},2),output_manager_default.error(message),2}let integrationName=parsedArguments.args[0];output_manager_default.spinner("Retrieving integration\u2026",500);let integrationConfiguration=await getFirstConfiguration(client,integrationName);if(output_manager_default.stopSpinner(),!integrationConfiguration)return output_manager_default.error(`No integration ${import_chalk27.default.bold(integrationName)} found.`),telemetry.trackCliArgumentIntegration(integrationName,!1),1;if(telemetry.trackCliArgumentIntegration(integrationName,!0),!skipConfirmation&&!client.stdin.isTTY)return output_manager_default.error("Confirmation required. Use `--yes` to skip the confirmation prompt."),1;if(!skipConfirmation&&!await confirmIntegrationRemoval(client,integrationConfiguration.slug,team))return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Removing integration\u2026",1e3),await removeIntegration(client,integrationConfiguration)}catch(error){if(isAPIError(error)&&error.status===403&&error.serverMessage.includes("resources")){let resourceNames=[];try{let searchParams=new URLSearchParams;searchParams.set("teamId",team.id),searchParams.set("integrationConfigurationId",integrationConfiguration.id),searchParams.set("skip-metadata","true");let{stores}=await client.fetch(`/v1/storage/stores?${searchParams}`,{json:!0});resourceNames=stores.map(s=>s.name)}catch{}if(asJson||shouldEmitNonInteractiveCommandError(client)){output_manager_default.stopSpinner();let approvalHint="Delete each resource with --disconnect-all (non-interactive: include --yes). Get user approval before deleting resources.",resourceTail=asJson?"--disconnect-all --yes --json":"--disconnect-all --yes",integrationRemoveTail=asJson?"--yes --json":"--yes",suggestNextOpts={prependGlobalFlags:!0,excludeFlags:["--yes","-y"]},payload={status:"error",reason:AGENT_REASON.HAS_RESOURCES,integration:integrationName,removed:!1,error:"has_resources",message:`Cannot remove ${integrationName} because it still has resources.`,resources:resourceNames,hint:client.isAgent?`${approvalHint} Agents must obtain explicit user approval before running integration resource delete.`:approvalHint,userActionRequired:client.isAgent?!0:void 0,next:resourceNames.map(name=>({command:buildCommandWithGlobalFlags(client.argv,`integration resource delete ${name} ${resourceTail}`,packageName,suggestNextOpts),when:`Disconnect and remove resource ${name}; substitute the real resource name if different`})),retry:buildCommandWithGlobalFlags(client.argv,`integration remove ${integrationName} ${integrationRemoveTail}`,packageName,suggestNextOpts)};return client.stdout.write(`${JSON.stringify(payload,null,2)}
139
139
  `),1}if(output_manager_default.error(`Cannot remove ${import_chalk27.default.bold(integrationName)} because it still has resources.`),resourceNames.length>0){output_manager_default.log(""),output_manager_default.log("Resources that must be removed first:");for(let name of resourceNames)output_manager_default.log(` ${import_chalk27.default.gray("-")} ${name}`);output_manager_default.log("")}return client.isAgent&&output_manager_default.log("AGENT: You must get user approval before running any resource removal commands."),output_manager_default.log(`Delete and disconnect all resources first with: ${import_chalk27.default.cyan(`${packageName} integration resource delete <resource-name> --disconnect-all`)}`),output_manager_default.log(`Then retry: ${import_chalk27.default.cyan(`${packageName} integration remove ${integrationName}`)}`),1}return output_manager_default.error(import_chalk27.default.red(`Failed to remove ${import_chalk27.default.bold(integrationName)}: ${error.message}`)),1}return asJson?(output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({integration:integrationName,removed:!0},null,2)}
140
140
  `),0):(output_manager_default.success(`${import_chalk27.default.bold(integrationName)} successfully removed.`),0)}async function confirmIntegrationRemoval(client,integration,team){return output_manager_default.log(`The ${import_chalk27.default.bold(integration)} integration will be removed permanently from team ${import_chalk27.default.bold(team.name)}.`),client.input.confirm(`${import_chalk27.default.red("Are you sure?")}`,!1)}var import_chalk28=__toESM(require_source(),1);async function patchIntegrationConfiguration(client,configurationId,body){return client.fetch(`/v1/integrations/configuration/${encodeURIComponent(configurationId)}`,{method:"PATCH",body,json:!0})}var IntegrationUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentIntegration(v,known){v&&this.trackCliArgument({arg:"integration",value:known?v:this.redactedValue})}trackCliOptionBillingPlan(v){v&&this.trackCliOption({option:"billing-plan",value:this.redactedValue})}trackCliOptionPlan(v){v&&this.trackCliOption({option:"plan",value:this.redactedValue})}trackCliOptionAuthorization(v){v&&this.trackCliOption({option:"authorization",value:this.redactedValue})}trackCliOptionAuthorizationId(v){v&&this.trackCliOption({option:"authorization-id",value:this.redactedValue})}trackCliOptionProjects(v){v?.length&&this.trackCliOption({option:"projects",value:this.redactedValue})}trackCliOptionInstallation(v){v&&this.trackCliOption({option:"installation",value:this.redactedValue})}trackCliOptionInstallationId(v){v&&this.trackCliOption({option:"installation-id",value:this.redactedValue})}trackCliOptionFormat(v){v&&this.trackCliOption({option:"format",value:v})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function selectConfiguration(configurations,integrationSlug,installationId){if(configurations.length===0)return{ok:!1,reason:AGENT_REASON.NOT_FOUND,message:`No integration "${integrationSlug}" found.`};if(installationId){let found=configurations.find(c=>c.id===installationId);if(!found){let known=configurations.map(c=>c.id).join(", ");return{ok:!1,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`No installation matching --installation ${installationId}. Known configuration IDs: ${known}`}}return{ok:!0,configuration:found}}if(configurations.length>1){let list4=configurations.map(c=>c.id).join(", ");return{ok:!1,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Multiple installations found for "${integrationSlug}": ${list4}. Re-run with --installation <id> to select one. Run \`${packageName} integration installations\` to list installation IDs for this team.`}}return{ok:!0,configuration:configurations[0]}}function buildProjectsBody(raw){return!raw||raw.length===0?{error:'Expected at least one --projects value (use "all" or project IDs).'}:raw.length===1&&raw[0]==="all"?{projects:"all"}:raw.includes("all")?{error:'Cannot mix "all" with specific project IDs. Use only --projects all, or repeat --projects for each project ID.'}:{projects:raw}}function emitUpdateCliError(client,message,reason,exitCode,extra){outputAgentError(client,{status:"error",reason,message,...extra},exitCode),output_manager_default.error(message)}async function update2(client,argv){let telemetry=new IntegrationUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments,flagsSpecification=getFlagsSpecification(updateSubcommand2.options);try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){let msg=error instanceof Error?error.message:String(error);return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg},2),printError(error),2}let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return emitUpdateCliError(client,formatResult.error,AGENT_REASON.INVALID_ARGUMENTS,2),2;let preferJson=formatResult.jsonOutput||!!client.nonInteractive,{flags}=parsedArguments,json=preferJson,billingPlan=getRenamedOption(flags,"--billing-plan","--plan",{json,typedName:getTypedOptionName(argv,getFlagsSpecification(updateSubcommand2.options),"--plan")}),authorization=getRenamedOption(flags,"--authorization","--authorization-id",{json}),installation=getRenamedOption(flags,"--installation","--installation-id",{json});if("error"in billingPlan)return emitUpdateCliError(client,billingPlan.error,AGENT_REASON.INVALID_ARGUMENTS,2),2;if("error"in authorization)return emitUpdateCliError(client,authorization.error,AGENT_REASON.INVALID_ARGUMENTS,2),2;if("error"in installation)return emitUpdateCliError(client,installation.error,AGENT_REASON.INVALID_ARGUMENTS,2),2;let plan=billingPlan.value,projectsRaw=parsedArguments.flags["--projects"],authorizationId=authorization.value,installationId=installation.value;if(parsedArguments.args.length<1){let hadSubcommandOptsFirst=projectsRaw!==void 0&&projectsRaw.length>0||plan!==void 0,msg=hadSubcommandOptsFirst?`Put the integration slug immediately after \`update\`, before \`--projects\`, \`--billing-plan\`, or other subcommand options. Example: \`${packageName} integration update neon --projects all\`.`:`You must specify an integration slug after \`update\`. Example: \`${packageName} integration update neon --projects all\` or \`${packageName} integration update neon --billing-plan <plan-id>\`.`;return emitUpdateCliError(client,msg,AGENT_REASON.MISSING_ARGUMENTS,2,{hint:hadSubcommandOptsFirst?`You used \`--projects\` or \`--billing-plan\` without a preceding integration name. Use \`${packageName} integration update <integration> --projects \u2026\`. Global options such as \`--cwd\` may appear anywhere.`:`Run \`${packageName} integration installations\` to list slugs and installation IDs for your team.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"integration update neon --projects all",packageName,{prependGlobalFlags:!0}),when:"Correct order: integration slug first, then --projects (replace neon)"},{command:buildCommandWithGlobalFlags(client.argv,"integration installations",packageName,{prependGlobalFlags:!0}),when:"Discover which integration slug to use"}]}),2}if(parsedArguments.args.length>1)return emitUpdateCliError(client,"Cannot specify more than one integration at a time.",AGENT_REASON.INVALID_ARGUMENTS,2),2;let integrationSlug=parsedArguments.args[0],hasPlan=plan!==void 0,projectsOutcome=projectsRaw!==void 0?buildProjectsBody(projectsRaw):null;if(hasPlan&&projectsRaw!==void 0&&projectsRaw.length>0)return emitUpdateCliError(client,"Pass either --billing-plan or --projects, not both. See `vercel integration update --help`.",AGENT_REASON.INVALID_ARGUMENTS,2),2;if(!hasPlan&&!projectsOutcome)return emitUpdateCliError(client,"Nothing to update. Pass --billing-plan to change billing plan, or --projects to change project access.",AGENT_REASON.MISSING_ARGUMENTS,2,{hint:`Example: \`${packageName} integration update ${integrationSlug} --projects all\``}),2;if(projectsOutcome&&"error"in projectsOutcome)return emitUpdateCliError(client,projectsOutcome.error,AGENT_REASON.INVALID_ARGUMENTS,2),2;let hasProjects=!!(projectsOutcome&&!("error"in projectsOutcome));telemetry.trackCliOptionBillingPlan(flags["--billing-plan"]),telemetry.trackCliOptionPlan(flags["--plan"]),telemetry.trackCliOptionAuthorization(flags["--authorization"]),telemetry.trackCliOptionAuthorizationId(flags["--authorization-id"]),telemetry.trackCliOptionProjects(projectsRaw),telemetry.trackCliOptionInstallation(flags["--installation"]),telemetry.trackCliOptionInstallationId(flags["--installation-id"]),telemetry.trackCliOptionFormat(parsedArguments.flags["--format"]);let{team}=await getScope(client);if(!team)return emitUpdateCliError(client,"Team not found.",AGENT_REASON.MISSING_SCOPE,1,{next:[{command:buildCommandWithGlobalFlags(client.argv,"teams switch",packageName,{prependGlobalFlags:!0}),when:"Switch to a team that has this integration"}]}),1;client.config.currentTeam=team.id,output_manager_default.spinner("Retrieving integration\u2026",500);let configurations=await fetchMarketplaceIntegrations(client,integrationSlug);output_manager_default.stopSpinner();let selected=selectConfiguration(configurations,integrationSlug,installationId);if(!selected.ok)return emitUpdateCliError(client,selected.message,selected.reason,1),telemetry.trackCliArgumentIntegration(integrationSlug,!1),1;telemetry.trackCliArgumentIntegration(integrationSlug,!0);let body=hasPlan?{billingPlanId:plan,...authorizationId?{authorizationId}:{}}:projectsOutcome;try{output_manager_default.spinner("Updating integration\u2026",1e3),await patchIntegrationConfiguration(client,selected.configuration.id,body),output_manager_default.stopSpinner()}catch(error){output_manager_default.stopSpinner();let apiMsg=isAPIError(error)&&error.serverMessage||error.message;return emitUpdateCliError(client,`Failed to update ${integrationSlug}: ${apiMsg}`,AGENT_REASON.API_ERROR,1),1}return preferJson?(client.stdout.write(`${JSON.stringify(withWarnings({integration:integrationSlug,configurationId:selected.configuration.id,updated:!0,...hasPlan?{billingPlanId:plan}:{},...hasProjects?{projects:body.projects}:{}},[billingPlan.warning,authorization.warning,installation.warning]),null,2)}
141
141
  `),0):(output_manager_default.success(`${import_chalk28.default.bold(integrationSlug)} installation updated successfully.`),0)}var import_chalk29=__toESM(require_source(),1);async function fetchIntegrationCategories(client){return client.fetch("/v2/integrations/categories",{json:!0})}async function categories2(client,args){let parsedArguments=null,flagsSpecification=getFlagsSpecification(categoriesSubcommand2.options);try{parsedArguments=parseArguments(args,flagsSpecification)}catch(error){return printError(error),2}if(parsedArguments.args.length>0)return output_manager_default.error("Invalid number of arguments. Usage: `vercel integration categories`"),2;let formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;output_manager_default.spinner("Fetching integration categories...",500);let fetched;try{fetched=await fetchIntegrationCategories(client)}catch(error){return output_manager_default.error(`Failed to fetch integration categories: ${error.message}`),1}output_manager_default.stopSpinner();let projected=fetched.map(({slug,title:title3})=>({slug,title:title3}));if(asJson)return client.stdout.write(`${JSON.stringify({categories:projected},null,2)}
@@ -173,10 +173,4 @@ ${table(lines,{hsep:2}).replace(/^/gm," ")}
173
173
  `)}var import_chalk42=__toESM(require_source(),1);var StorageStatusTelemetryClient=class extends TelemetryClient{trackCliArgumentStore(v){v&&this.trackCliArgument({arg:"store",value:this.redactedValue})}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliFlagJson(v){v&&this.trackCliFlag("json")}};async function status(client,argv){let telemetry=new StorageStatusTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(statusSubcommand.options),parsedArguments;try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArguments,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,all=flags["--all"]??!1,storeIdentifier=args[0];if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliFlagAll(all),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliArgumentStore(storeIdentifier),args.length>1)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:"Too many arguments. Usage: `vercel storage status [store]`."});if(all&&flags["--project"])return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:"--all and --project cannot be combined."});let needsProject=!!flags["--project"]||!all&&!storeIdentifier,accountId,project;if(needsProject){let scope=await resolveStorageScope(client,flags["--project"]);if(typeof scope=="number")return scope;accountId=scope.accountId,project=scope.project}else{let{team}=await getScope(client);client.config.currentTeam=team?.id,accountId=team?.id}let stores;if(storeIdentifier){let store=await resolveStorageStore(client,storeIdentifier,accountId);if(typeof store=="number")return store;stores=[store]}else{output_manager_default.spinner("Retrieving storage resources\u2026",500);try{stores=await getStorageStores(client,{accountId})}catch(error){return output_manager_default.stopSpinner(),printError(error),1}output_manager_default.stopSpinner()}let scopedProjectId=project?.id,summaries=stores.map(store=>summarizeStore3(store,scopedProjectId)).filter(summary=>all||storeIdentifier||summary.connections.length>0);return asJson?(client.stdout.write(`${JSON.stringify({stores:summaries},null,2)}
174
174
  `),0):summaries.length===0?(output_manager_default.log(project?`No storage resources are connected to ${import_chalk42.default.bold(project.name)}. Use ${getCommandName("storage status --all")} to list every resource in this scope.`:"No storage resources found in this scope."),0):(printStatusTable(summaries),0)}function summarizeStore3(store,projectId){let connections=getConnections(store).filter(connection=>!projectId||connection.projectId===projectId);return{id:store.id,name:store.name,type:store.type??"unknown",product:storeProductLabel(store),status:store.status??null,connections:connections.map(connection=>summarizeConnection(store,connection))}}function summarizeConnection(store,connection){return{id:connection.id,project:{id:connection.projectId,name:connection.name},environments:connection.environments,envVarPrefix:connection.envVarPrefix??null,auth:inferConnectionAuth(store,connection.environmentVariables),environmentVariables:connection.environmentVariables??null}}function formatAuthCell(connection){return connection.auth==="unknown"?import_chalk42.default.dim("unknown"):describeStorageAuth({effective:connection.auth,readWriteToken:(connection.environmentVariables??[]).some(name=>name.endsWith("_READ_WRITE_TOKEN"))})}function printStatusTable(summaries){let rows=[["Store","Product","Project","Environments","Credentials","Env vars"].map(header=>import_chalk42.default.bold(import_chalk42.default.cyan(header)))];for(let store of summaries){if(store.connections.length===0){rows.push([store.name,store.product,import_chalk42.default.dim("not connected"),import_chalk42.default.dim("\u2013"),import_chalk42.default.dim("\u2013"),import_chalk42.default.dim("\u2013")]);continue}for(let[index,connection]of store.connections.entries())rows.push([index===0?store.name:"",index===0?store.product:"",connection.project.name,connection.environments.join(", "),formatAuthCell(connection),connection.environmentVariables?.length?connection.environmentVariables.join(", "):import_chalk42.default.dim("\u2013")])}output_manager_default.print(`${table(rows,{hsep:3}).replace(/^/gm," ")}
175
175
 
176
- `)}var import_chalk43=__toESM(require_source(),1);var StorageUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentStore(v){v&&this.trackCliArgument({arg:"store",value:this.redactedValue})}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliOptionEnvironment(v){v?.length&&this.trackCliOption({option:"environment",value:this.redactedValue})}trackCliOptionAuth(v){v&&this.trackCliOption({option:"auth",value:STORAGE_AUTH_MODES.includes(v.toLowerCase())?v.toLowerCase():this.redactedValue})}trackCliFlagAddRwToken(v){v&&this.trackCliFlag("add-rw-token")}trackCliOptionPrefix(v){v&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliFlagDryRun(v){v&&this.trackCliFlag("dry-run")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(v){v&&this.trackCliFlag("json")}};function sameEnvironments(a,b){if(a.length!==b.length)return!1;let left=new Set(a);return b.every(value=>left.has(value))}async function update3(client,argv){let telemetry=new StorageUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(updateSubcommand3.options),parsedArguments;try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArguments,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,dryRun=flags["--dry-run"]??!1,skipConfirmation=flags["--yes"]??!1,addRwTokenFlag=flags["--add-rw-token"]??!1;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliFlagYes(skipConfirmation),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagAddRwToken(addRwTokenFlag),telemetry.trackCliOptionAuth(flags["--auth"]),telemetry.trackCliOptionPrefix(flags["--prefix"]),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliOptionEnvironment(flags["--environment"]),telemetry.trackCliArgumentStore(args[0]),args.length<1)return failWith(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"You must specify a storage resource. See `--help` for details."});if(args.length>1)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:"Too many arguments. Usage: `vercel storage update <store> [--project <name-or-id>]`."});if(asJson&&!skipConfirmation&&!dryRun)return output_manager_default.error("--json requires --yes or --dry-run to skip confirmation prompts"),2;let authMode=parseAuthMode(flags["--auth"]);if(!authMode.valid)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:authMode.error});let environmentsFlag=resolveEnvironments(flags["--environment"]);if(!environmentsFlag.valid)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:environmentsFlag.message});let prefixFlag=resolvePrefix(flags["--prefix"]);if(!prefixFlag.valid)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:prefixFlag.message});let scope=await resolveStorageScope(client,flags["--project"]);if(typeof scope=="number")return scope;let store=await resolveStorageStore(client,args[0],scope.accountId);if(typeof store=="number")return store;let target=resolveProjectConnection(store,scope.project.id,environmentsFlag.explicit?environmentsFlag.environments:void 0);if(target.status==="not_found")return failWith(client,{reason:AGENT_REASON.NOT_FOUND,message:`${store.name} is not connected to ${scope.project.name}.`,next:[{command:getCommandNamePlain(`storage connect ${store.name}`),when:"create the connection"}]});if(target.status==="ambiguous")return failWith(client,{reason:"ambiguous_connection",message:`${scope.project.name} has more than one connection to ${store.name} (${target.connections.map(connection2=>connection2.environments.join("+")).join(", ")}). Pass --environment to pick one.`});let connection=target.connection,currentEnvVars=connection.environmentVariables??[],currentAuth=inferConnectionAuth(store,connection.environmentVariables),hasOidcVars=currentEnvVars.some(name=>name.endsWith("_STORE_ID")),hasRwTokenNow=currentEnvVars.some(name=>name.endsWith("_READ_WRITE_TOKEN")),requestedMode=authMode.explicit?authMode.mode:currentAuth==="token"?"token":"oidc",addRwToken=addRwTokenFlag||!authMode.explicit&&hasRwTokenNow,auth=resolveStorageAuth({store,mode:requestedMode,addRwToken});if(!auth.valid)return failWith(client,{reason:auth.reason,message:auth.error,hint:auth.hint});let environments=environmentsFlag.explicit?environmentsFlag.environments:connection.environments,currentPrefix=normalizeEnvVarPrefix(connection.envVarPrefix),prefix=prefixFlag.prefix!==void 0?prefixFlag.prefix:currentPrefix,environmentsChanged=environmentsFlag.explicit&&!sameEnvironments(environments,connection.environments),prefixChanged=flags["--prefix"]!==void 0&&prefix!==currentPrefix,needsOidcUpgrade=storeSupportsOidc(store)&&auth.auth.effective==="oidc"&&!hasOidcVars,rwTokenChanged=storeSupportsOidc(store)&&auth.auth.readWriteToken!==hasRwTokenNow;if(!environmentsChanged&&!prefixChanged&&!needsOidcUpgrade&&!rwTokenChanged)return failWith(client,{reason:AGENT_REASON.NO_CHANGES_REQUESTED,message:`Nothing to update: ${store.name} on ${scope.project.name} already matches the requested configuration.`,next:[{command:getCommandNamePlain(`storage status ${store.name}`),when:"inspect the current connection"}]});let plan=buildStoragePlan({action:"update",dryRun,store,projects:[scope.project],environments,envVarPrefix:prefix,auth:auth.auth,envVars:planUpdateEnvVars({store,auth:auth.auth,prefix,connection,prefixChanged})});if(dryRun)return writeStorageResult(client,plan,{applied:!1,asJson}),0;asJson||printStoragePlan(client,plan,!1);let confirmed=await confirmStorageChange(client,{skipConfirmation,question:"Apply this change?"});if(typeof confirmed=="number")return confirmed;if(!confirmed)return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Updating storage connection\u2026",500),needsOidcUpgrade&&await upgradeStoreConnectionToOidc(client,{store,connectionId:connection.id,auth:auth.auth,accountId:scope.accountId});let patchEnvironments=environmentsChanged?environments:void 0,patchPrefix=prefixChanged?prefix??null:void 0,patchSkipReadWriteToken=storeSupportsOidc(store)?!auth.auth.readWriteToken:void 0;(patchEnvironments!==void 0||patchPrefix!==void 0||patchSkipReadWriteToken!==void 0)&&await updateStoreConnection(client,{store,connectionId:connection.id,accountId:scope.accountId,environments:patchEnvironments,envVarPrefix:patchPrefix,skipReadWriteToken:patchSkipReadWriteToken})}catch(error){return output_manager_default.stopSpinner(),failWith(client,{reason:AGENT_REASON.API_ERROR,message:`A problem occurred while updating the connection: ${error.message}`})}output_manager_default.stopSpinner();let verified=await readBackConnectionEnvVars(client,{store,projectId:scope.project.id,environments,accountId:scope.accountId}),appliedPlan=verified?buildStoragePlan({action:"update",dryRun:!1,store,projects:[scope.project],environments,envVarPrefix:prefix,auth:auth.auth,envVars:diffEnvVarNames(currentEnvVars,verified)}):plan;return writeStorageResult(client,appliedPlan,{applied:!0,asJson,message:`Updated ${import_chalk43.default.bold(store.name)} on ${import_chalk43.default.bold(scope.project.name)} (${environments.join(", ")})`,next:getStorageEnvPullNext(client,scope,[...connection.environments,...environments])}),0}var COMMAND_CONFIG5={list:getCommandAliases(listSubcommand3),create:getCommandAliases(createSubcommand2),inspect:getCommandAliases(getSubcommand),delete:getCommandAliases(deleteSubcommand),connect:getCommandAliases(connectSubcommand2),status:getCommandAliases(statusSubcommand),update:getCommandAliases(updateSubcommand3),disconnect:getCommandAliases(disconnectSubcommand2)};async function main3(client){let telemetry=new StorageTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),getFlagsSpecification(storageCommand.options),{permissive:!0})}catch(error){return printError(error),2}let needHelp=!!parsedArguments.flags["--help"],subArgs=parsedArguments.args.slice(1),{subcommand,subcommandOriginal,args}=getSubcommand2(subArgs,COMMAND_CONFIG5);if(!subcommand)return needHelp?(telemetry.trackCliFlagHelp("storage"),output_manager_default.print(help(storageCommand,{stream:client.stderr,columns:client.stderr.columns})),0):subArgs.length>0?(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG5)),2):(output_manager_default.print(help(storageCommand,{stream:client.stderr,columns:client.stderr.columns})),2);function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,columns:client.stderr.columns,parent:storageCommand}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(listSubcommand3),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"create":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(createSubcommand2),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),create2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(getSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"storage get","storage inspect"),get(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(deleteSubcommand),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),deleteStore(client,args));case"connect":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(connectSubcommand2),0):(telemetry.trackCliSubcommandConnect(subcommandOriginal),connect2(client,args));case"status":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(statusSubcommand),0):(telemetry.trackCliSubcommandStatus(subcommandOriginal),status(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(updateSubcommand3),0):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),update3(client,args));case"disconnect":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(disconnectSubcommand2),0):(telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect2(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG5)),2}}var import_chalk48=__toESM(require_source(),1);var UsageTelemetryClient=class extends TelemetryClient{trackCliOptionSince(since){since&&this.trackCliOption({option:"since",value:this.redactedValue})}trackCliOptionUntil(until){until&&this.trackCliOption({option:"until",value:this.redactedValue})}trackCliOptionFrom(from){from&&this.trackCliOption({option:"from",value:this.redactedValue})}trackCliOptionTo(to){to&&this.trackCliOption({option:"to",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionBreakdown(breakdown){breakdown&&this.trackCliOption({option:"breakdown",value:breakdown})}trackCliOptionGroupBy(groupBy){groupBy&&this.trackCliOption({option:"group-by",value:groupBy})}};var import_error_utils2=__toESM(require_dist(),1);var LuxonError=class extends Error{},InvalidDateTimeError=class extends LuxonError{constructor(reason){super(`Invalid DateTime: ${reason.toMessage()}`)}},InvalidIntervalError=class extends LuxonError{constructor(reason){super(`Invalid Interval: ${reason.toMessage()}`)}},InvalidDurationError=class extends LuxonError{constructor(reason){super(`Invalid Duration: ${reason.toMessage()}`)}},ConflictingSpecificationError=class extends LuxonError{},InvalidUnitError=class extends LuxonError{constructor(unit){super(`Invalid unit ${unit}`)}},InvalidArgumentError=class extends LuxonError{},ZoneIsAbstractError=class extends LuxonError{constructor(){super("Zone is an abstract class")}},n="numeric",s="short",l="long",DATE_SHORT={year:n,month:n,day:n},DATE_MED={year:n,month:s,day:n},DATE_MED_WITH_WEEKDAY={year:n,month:s,day:n,weekday:s},DATE_FULL={year:n,month:l,day:n},DATE_HUGE={year:n,month:l,day:n,weekday:l},TIME_SIMPLE={hour:n,minute:n},TIME_WITH_SECONDS={hour:n,minute:n,second:n},TIME_WITH_SHORT_OFFSET={hour:n,minute:n,second:n,timeZoneName:s},TIME_WITH_LONG_OFFSET={hour:n,minute:n,second:n,timeZoneName:l},TIME_24_SIMPLE={hour:n,minute:n,hourCycle:"h23"},TIME_24_WITH_SECONDS={hour:n,minute:n,second:n,hourCycle:"h23"},TIME_24_WITH_SHORT_OFFSET={hour:n,minute:n,second:n,hourCycle:"h23",timeZoneName:s},TIME_24_WITH_LONG_OFFSET={hour:n,minute:n,second:n,hourCycle:"h23",timeZoneName:l},DATETIME_SHORT={year:n,month:n,day:n,hour:n,minute:n},DATETIME_SHORT_WITH_SECONDS={year:n,month:n,day:n,hour:n,minute:n,second:n},DATETIME_MED={year:n,month:s,day:n,hour:n,minute:n},DATETIME_MED_WITH_SECONDS={year:n,month:s,day:n,hour:n,minute:n,second:n},DATETIME_MED_WITH_WEEKDAY={year:n,month:s,day:n,weekday:s,hour:n,minute:n},DATETIME_FULL={year:n,month:l,day:n,hour:n,minute:n,timeZoneName:s},DATETIME_FULL_WITH_SECONDS={year:n,month:l,day:n,hour:n,minute:n,second:n,timeZoneName:s},DATETIME_HUGE={year:n,month:l,day:n,weekday:l,hour:n,minute:n,timeZoneName:l},DATETIME_HUGE_WITH_SECONDS={year:n,month:l,day:n,weekday:l,hour:n,minute:n,second:n,timeZoneName:l},Zone=class{get type(){throw new ZoneIsAbstractError}get name(){throw new ZoneIsAbstractError}get ianaName(){return this.name}get isUniversal(){throw new ZoneIsAbstractError}offsetName(ts,opts){throw new ZoneIsAbstractError}formatOffset(ts,format){throw new ZoneIsAbstractError}offset(ts){throw new ZoneIsAbstractError}equals(otherZone){throw new ZoneIsAbstractError}get isValid(){throw new ZoneIsAbstractError}},singleton$1=null,SystemZone=class _SystemZone extends Zone{static get instance(){return singleton$1===null&&(singleton$1=new _SystemZone),singleton$1}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(ts,{format,locale}){return parseZoneInfo(ts,format,locale)}formatOffset(ts,format){return formatOffset(this.offset(ts),format)}offset(ts){return-new Date(ts).getTimezoneOffset()}equals(otherZone){return otherZone.type==="system"}get isValid(){return!0}},dtfCache=new Map;function makeDTF(zoneName){let dtf=dtfCache.get(zoneName);return dtf===void 0&&(dtf=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:zoneName,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"}),dtfCache.set(zoneName,dtf)),dtf}var typeToPos={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function hackyOffset(dtf,date){let formatted=dtf.format(date).replace(/\u200E/g,""),parsed=/(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted),[,fMonth,fDay,fYear,fadOrBc,fHour,fMinute,fSecond]=parsed;return[fYear,fMonth,fDay,fadOrBc,fHour,fMinute,fSecond]}function partsOffset(dtf,date){let formatted=dtf.formatToParts(date),filled=[];for(let i=0;i<formatted.length;i++){let{type,value}=formatted[i],pos=typeToPos[type];type==="era"?filled[pos]=value:isUndefined(pos)||(filled[pos]=parseInt(value,10))}return filled}var ianaZoneCache=new Map,IANAZone=class _IANAZone extends Zone{static create(name){let zone=ianaZoneCache.get(name);return zone===void 0&&ianaZoneCache.set(name,zone=new _IANAZone(name)),zone}static resetCache(){ianaZoneCache.clear(),dtfCache.clear()}static isValidSpecifier(s2){return this.isValidZone(s2)}static isValidZone(zone){if(!zone)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:zone}).format(),!0}catch{return!1}}constructor(name){super(),this.zoneName=name,this.valid=_IANAZone.isValidZone(name)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(ts,{format,locale}){return parseZoneInfo(ts,format,locale,this.name)}formatOffset(ts,format){return formatOffset(this.offset(ts),format)}offset(ts){if(!this.valid)return NaN;let date=new Date(ts);if(isNaN(date))return NaN;let dtf=makeDTF(this.name),[year,month,day,adOrBc,hour,minute,second]=dtf.formatToParts?partsOffset(dtf,date):hackyOffset(dtf,date);adOrBc==="BC"&&(year=-Math.abs(year)+1);let asUTC=objToLocalTS({year,month,day,hour:hour===24?0:hour,minute,second,millisecond:0}),asTS=+date,over=asTS%1e3;return asTS-=over>=0?over:1e3+over,(asUTC-asTS)/(60*1e3)}equals(otherZone){return otherZone.type==="iana"&&otherZone.name===this.name}get isValid(){return this.valid}},intlLFCache={};function getCachedLF(locString,opts={}){let key=JSON.stringify([locString,opts]),dtf=intlLFCache[key];return dtf||(dtf=new Intl.ListFormat(locString,opts),intlLFCache[key]=dtf),dtf}var intlDTCache=new Map;function getCachedDTF(locString,opts={}){let key=JSON.stringify([locString,opts]),dtf=intlDTCache.get(key);return dtf===void 0&&(dtf=new Intl.DateTimeFormat(locString,opts),intlDTCache.set(key,dtf)),dtf}var intlNumCache=new Map;function getCachedINF(locString,opts={}){let key=JSON.stringify([locString,opts]),inf=intlNumCache.get(key);return inf===void 0&&(inf=new Intl.NumberFormat(locString,opts),intlNumCache.set(key,inf)),inf}var intlRelCache=new Map;function getCachedRTF(locString,opts={}){let{base,...cacheKeyOpts}=opts,key=JSON.stringify([locString,cacheKeyOpts]),inf=intlRelCache.get(key);return inf===void 0&&(inf=new Intl.RelativeTimeFormat(locString,opts),intlRelCache.set(key,inf)),inf}var sysLocaleCache=null;function systemLocale(){return sysLocaleCache||(sysLocaleCache=new Intl.DateTimeFormat().resolvedOptions().locale,sysLocaleCache)}var intlResolvedOptionsCache=new Map;function getCachedIntResolvedOptions(locString){let opts=intlResolvedOptionsCache.get(locString);return opts===void 0&&(opts=new Intl.DateTimeFormat(locString).resolvedOptions(),intlResolvedOptionsCache.set(locString,opts)),opts}var weekInfoCache=new Map;function getCachedWeekInfo(locString){let data=weekInfoCache.get(locString);if(!data){let locale=new Intl.Locale(locString);data="getWeekInfo"in locale?locale.getWeekInfo():locale.weekInfo,"minimalDays"in data||(data={...fallbackWeekSettings,...data}),weekInfoCache.set(locString,data)}return data}function parseLocaleString(localeStr){let xIndex=localeStr.indexOf("-x-");xIndex!==-1&&(localeStr=localeStr.substring(0,xIndex));let uIndex=localeStr.indexOf("-u-");if(uIndex===-1)return[localeStr];{let options,selectedStr;try{options=getCachedDTF(localeStr).resolvedOptions(),selectedStr=localeStr}catch{let smaller=localeStr.substring(0,uIndex);options=getCachedDTF(smaller).resolvedOptions(),selectedStr=smaller}let{numberingSystem,calendar}=options;return[selectedStr,numberingSystem,calendar]}}function intlConfigString(localeStr,numberingSystem,outputCalendar){return(outputCalendar||numberingSystem)&&(localeStr.includes("-u-")||(localeStr+="-u"),outputCalendar&&(localeStr+=`-ca-${outputCalendar}`),numberingSystem&&(localeStr+=`-nu-${numberingSystem}`)),localeStr}function mapMonths(f){let ms3=[];for(let i=1;i<=12;i++){let dt=DateTime.utc(2009,i,1);ms3.push(f(dt))}return ms3}function mapWeekdays(f){let ms3=[];for(let i=1;i<=7;i++){let dt=DateTime.utc(2016,11,13+i);ms3.push(f(dt))}return ms3}function listStuff(loc,length,englishFn,intlFn){let mode=loc.listingMode();return mode==="error"?null:mode==="en"?englishFn(length):intlFn(length)}function supportsFastNumbers(loc){return loc.numberingSystem&&loc.numberingSystem!=="latn"?!1:loc.numberingSystem==="latn"||!loc.locale||loc.locale.startsWith("en")||getCachedIntResolvedOptions(loc.locale).numberingSystem==="latn"}var PolyNumberFormatter=class{constructor(intl,forceSimple,opts){this.padTo=opts.padTo||0,this.floor=opts.floor||!1;let{padTo,floor,...otherOpts}=opts;if(!forceSimple||Object.keys(otherOpts).length>0){let intlOpts={useGrouping:!1,...opts};opts.padTo>0&&(intlOpts.minimumIntegerDigits=opts.padTo),this.inf=getCachedINF(intl,intlOpts)}}format(i){if(this.inf){let fixed=this.floor?Math.floor(i):i;return this.inf.format(fixed)}else{let fixed=this.floor?Math.floor(i):roundTo(i,3);return padStart(fixed,this.padTo)}}},PolyDateFormatter=class{constructor(dt,intl,opts){this.opts=opts,this.originalZone=void 0;let z;if(this.opts.timeZone)this.dt=dt;else if(dt.zone.type==="fixed"){let gmtOffset=-1*(dt.offset/60),offsetZ=gmtOffset>=0?`Etc/GMT+${gmtOffset}`:`Etc/GMT${gmtOffset}`;dt.offset!==0&&IANAZone.create(offsetZ).valid?(z=offsetZ,this.dt=dt):(z="UTC",this.dt=dt.offset===0?dt:dt.setZone("UTC").plus({minutes:dt.offset}),this.originalZone=dt.zone)}else dt.zone.type==="system"?this.dt=dt:dt.zone.type==="iana"?(this.dt=dt,z=dt.zone.name):(z="UTC",this.dt=dt.setZone("UTC").plus({minutes:dt.offset}),this.originalZone=dt.zone);let intlOpts={...this.opts};intlOpts.timeZone=intlOpts.timeZone||z,this.dtf=getCachedDTF(intl,intlOpts)}format(){return this.originalZone?this.formatToParts().map(({value})=>value).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let parts=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?parts.map(part=>{if(part.type==="timeZoneName"){let offsetName=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...part,value:offsetName}}else return part}):parts}resolvedOptions(){return this.dtf.resolvedOptions()}},PolyRelFormatter=class{constructor(intl,isEnglish,opts){this.opts={style:"long",...opts},!isEnglish&&hasRelative()&&(this.rtf=getCachedRTF(intl,opts))}format(count,unit){return this.rtf?this.rtf.format(count,unit):formatRelativeTime(unit,count,this.opts.numeric,this.opts.style!=="long")}formatToParts(count,unit){return this.rtf?this.rtf.formatToParts(count,unit):[]}},fallbackWeekSettings={firstDay:1,minimalDays:4,weekend:[6,7]},Locale=class _Locale{static fromOpts(opts){return _Locale.create(opts.locale,opts.numberingSystem,opts.outputCalendar,opts.weekSettings,opts.defaultToEN)}static create(locale,numberingSystem,outputCalendar,weekSettings,defaultToEN=!1){let specifiedLocale=locale||Settings.defaultLocale,localeR=specifiedLocale||(defaultToEN?"en-US":systemLocale()),numberingSystemR=numberingSystem||Settings.defaultNumberingSystem,outputCalendarR=outputCalendar||Settings.defaultOutputCalendar,weekSettingsR=validateWeekSettings(weekSettings)||Settings.defaultWeekSettings;return new _Locale(localeR,numberingSystemR,outputCalendarR,weekSettingsR,specifiedLocale)}static resetCache(){sysLocaleCache=null,intlDTCache.clear(),intlNumCache.clear(),intlRelCache.clear(),intlResolvedOptionsCache.clear(),weekInfoCache.clear()}static fromObject({locale,numberingSystem,outputCalendar,weekSettings}={}){return _Locale.create(locale,numberingSystem,outputCalendar,weekSettings)}constructor(locale,numbering,outputCalendar,weekSettings,specifiedLocale){let[parsedLocale,parsedNumberingSystem,parsedOutputCalendar]=parseLocaleString(locale);this.locale=parsedLocale,this.numberingSystem=numbering||parsedNumberingSystem||null,this.outputCalendar=outputCalendar||parsedOutputCalendar||null,this.weekSettings=weekSettings,this.intl=intlConfigString(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=specifiedLocale,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=supportsFastNumbers(this)),this.fastNumbersCached}listingMode(){let isActuallyEn=this.isEnglish(),hasNoWeirdness=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return isActuallyEn&&hasNoWeirdness?"en":"intl"}clone(alts){return!alts||Object.getOwnPropertyNames(alts).length===0?this:_Locale.create(alts.locale||this.specifiedLocale,alts.numberingSystem||this.numberingSystem,alts.outputCalendar||this.outputCalendar,validateWeekSettings(alts.weekSettings)||this.weekSettings,alts.defaultToEN||!1)}redefaultToEN(alts={}){return this.clone({...alts,defaultToEN:!0})}redefaultToSystem(alts={}){return this.clone({...alts,defaultToEN:!1})}months(length,format=!1){return listStuff(this,length,months,()=>{let monthSpecialCase=this.intl==="ja"||this.intl.startsWith("ja-");format&=!monthSpecialCase;let intl=format?{month:length,day:"numeric"}:{month:length},formatStr=format?"format":"standalone";if(!this.monthsCache[formatStr][length]){let mapper=monthSpecialCase?dt=>this.dtFormatter(dt,intl).format():dt=>this.extract(dt,intl,"month");this.monthsCache[formatStr][length]=mapMonths(mapper)}return this.monthsCache[formatStr][length]})}weekdays(length,format=!1){return listStuff(this,length,weekdays,()=>{let intl=format?{weekday:length,year:"numeric",month:"long",day:"numeric"}:{weekday:length},formatStr=format?"format":"standalone";return this.weekdaysCache[formatStr][length]||(this.weekdaysCache[formatStr][length]=mapWeekdays(dt=>this.extract(dt,intl,"weekday"))),this.weekdaysCache[formatStr][length]})}meridiems(){return listStuff(this,void 0,()=>meridiems,()=>{if(!this.meridiemCache){let intl={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[DateTime.utc(2016,11,13,9),DateTime.utc(2016,11,13,19)].map(dt=>this.extract(dt,intl,"dayperiod"))}return this.meridiemCache})}eras(length){return listStuff(this,length,eras,()=>{let intl={era:length};return this.eraCache[length]||(this.eraCache[length]=[DateTime.utc(-40,1,1),DateTime.utc(2017,1,1)].map(dt=>this.extract(dt,intl,"era"))),this.eraCache[length]})}extract(dt,intlOpts,field){let df=this.dtFormatter(dt,intlOpts),results=df.formatToParts(),matching=results.find(m=>m.type.toLowerCase()===field);return matching?matching.value:null}numberFormatter(opts={}){return new PolyNumberFormatter(this.intl,opts.forceSimple||this.fastNumbers,opts)}dtFormatter(dt,intlOpts={}){return new PolyDateFormatter(dt,this.intl,intlOpts)}relFormatter(opts={}){return new PolyRelFormatter(this.intl,this.isEnglish(),opts)}listFormatter(opts={}){return getCachedLF(this.intl,opts)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||getCachedIntResolvedOptions(this.intl).locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:hasLocaleWeekInfo()?getCachedWeekInfo(this.locale):fallbackWeekSettings}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(other){return this.locale===other.locale&&this.numberingSystem===other.numberingSystem&&this.outputCalendar===other.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}},singleton=null,FixedOffsetZone=class _FixedOffsetZone extends Zone{static get utcInstance(){return singleton===null&&(singleton=new _FixedOffsetZone(0)),singleton}static instance(offset2){return offset2===0?_FixedOffsetZone.utcInstance:new _FixedOffsetZone(offset2)}static parseSpecifier(s2){if(s2){let r=s2.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(r)return new _FixedOffsetZone(signedOffset(r[1],r[2]))}return null}constructor(offset2){super(),this.fixed=offset2}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${formatOffset(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${formatOffset(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(ts,format){return formatOffset(this.fixed,format)}get isUniversal(){return!0}offset(){return this.fixed}equals(otherZone){return otherZone.type==="fixed"&&otherZone.fixed===this.fixed}get isValid(){return!0}},InvalidZone=class extends Zone{constructor(zoneName){super(),this.zoneName=zoneName}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function normalizeZone(input,defaultZone2){if(isUndefined(input)||input===null)return defaultZone2;if(input instanceof Zone)return input;if(isString(input)){let lowered=input.toLowerCase();return lowered==="default"?defaultZone2:lowered==="local"||lowered==="system"?SystemZone.instance:lowered==="utc"||lowered==="gmt"?FixedOffsetZone.utcInstance:FixedOffsetZone.parseSpecifier(lowered)||IANAZone.create(input)}else return isNumber(input)?FixedOffsetZone.instance(input):typeof input=="object"&&"offset"in input&&typeof input.offset=="function"?input:new InvalidZone(input)}var numberingSystems={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},numberingSystemsUTF16={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},hanidecChars=numberingSystems.hanidec.replace(/[\[|\]]/g,"").split("");function parseDigits(str){let value=parseInt(str,10);if(isNaN(value)){value="";for(let i=0;i<str.length;i++){let code=str.charCodeAt(i);if(str[i].search(numberingSystems.hanidec)!==-1)value+=hanidecChars.indexOf(str[i]);else for(let key in numberingSystemsUTF16){let[min,max]=numberingSystemsUTF16[key];code>=min&&code<=max&&(value+=code-min)}}return parseInt(value,10)}else return value}var digitRegexCache=new Map;function resetDigitRegexCache(){digitRegexCache.clear()}function digitRegex({numberingSystem},append=""){let ns=numberingSystem||"latn",appendCache=digitRegexCache.get(ns);appendCache===void 0&&(appendCache=new Map,digitRegexCache.set(ns,appendCache));let regex=appendCache.get(append);return regex===void 0&&(regex=new RegExp(`${numberingSystems[ns]}${append}`),appendCache.set(append,regex)),regex}var now=()=>Date.now(),defaultZone="system",defaultLocale=null,defaultNumberingSystem=null,defaultOutputCalendar=null,twoDigitCutoffYear=60,throwOnInvalid,defaultWeekSettings=null,Settings=class{static get now(){return now}static set now(n2){now=n2}static set defaultZone(zone){defaultZone=zone}static get defaultZone(){return normalizeZone(defaultZone,SystemZone.instance)}static get defaultLocale(){return defaultLocale}static set defaultLocale(locale){defaultLocale=locale}static get defaultNumberingSystem(){return defaultNumberingSystem}static set defaultNumberingSystem(numberingSystem){defaultNumberingSystem=numberingSystem}static get defaultOutputCalendar(){return defaultOutputCalendar}static set defaultOutputCalendar(outputCalendar){defaultOutputCalendar=outputCalendar}static get defaultWeekSettings(){return defaultWeekSettings}static set defaultWeekSettings(weekSettings){defaultWeekSettings=validateWeekSettings(weekSettings)}static get twoDigitCutoffYear(){return twoDigitCutoffYear}static set twoDigitCutoffYear(cutoffYear){twoDigitCutoffYear=cutoffYear%100}static get throwOnInvalid(){return throwOnInvalid}static set throwOnInvalid(t){throwOnInvalid=t}static resetCaches(){Locale.resetCache(),IANAZone.resetCache(),DateTime.resetCache(),resetDigitRegexCache()}},Invalid=class{constructor(reason,explanation){this.reason=reason,this.explanation=explanation}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}},nonLeapLadder=[0,31,59,90,120,151,181,212,243,273,304,334],leapLadder=[0,31,60,91,121,152,182,213,244,274,305,335];function unitOutOfRange(unit,value){return new Invalid("unit out of range",`you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`)}function dayOfWeek(year,month,day){let d=new Date(Date.UTC(year,month-1,day));year<100&&year>=0&&d.setUTCFullYear(d.getUTCFullYear()-1900);let js=d.getUTCDay();return js===0?7:js}function computeOrdinal(year,month,day){return day+(isLeapYear(year)?leapLadder:nonLeapLadder)[month-1]}function uncomputeOrdinal(year,ordinal){let table2=isLeapYear(year)?leapLadder:nonLeapLadder,month0=table2.findIndex(i=>i<ordinal),day=ordinal-table2[month0];return{month:month0+1,day}}function isoWeekdayToLocal(isoWeekday,startOfWeek){return(isoWeekday-startOfWeek+7)%7+1}function gregorianToWeek(gregObj,minDaysInFirstWeek=4,startOfWeek=1){let{year,month,day}=gregObj,ordinal=computeOrdinal(year,month,day),weekday=isoWeekdayToLocal(dayOfWeek(year,month,day),startOfWeek),weekNumber=Math.floor((ordinal-weekday+14-minDaysInFirstWeek)/7),weekYear;return weekNumber<1?(weekYear=year-1,weekNumber=weeksInWeekYear(weekYear,minDaysInFirstWeek,startOfWeek)):weekNumber>weeksInWeekYear(year,minDaysInFirstWeek,startOfWeek)?(weekYear=year+1,weekNumber=1):weekYear=year,{weekYear,weekNumber,weekday,...timeObject(gregObj)}}function weekToGregorian(weekData,minDaysInFirstWeek=4,startOfWeek=1){let{weekYear,weekNumber,weekday}=weekData,weekdayOfJan4=isoWeekdayToLocal(dayOfWeek(weekYear,1,minDaysInFirstWeek),startOfWeek),yearInDays=daysInYear(weekYear),ordinal=weekNumber*7+weekday-weekdayOfJan4-7+minDaysInFirstWeek,year;ordinal<1?(year=weekYear-1,ordinal+=daysInYear(year)):ordinal>yearInDays?(year=weekYear+1,ordinal-=daysInYear(weekYear)):year=weekYear;let{month,day}=uncomputeOrdinal(year,ordinal);return{year,month,day,...timeObject(weekData)}}function gregorianToOrdinal(gregData){let{year,month,day}=gregData,ordinal=computeOrdinal(year,month,day);return{year,ordinal,...timeObject(gregData)}}function ordinalToGregorian(ordinalData){let{year,ordinal}=ordinalData,{month,day}=uncomputeOrdinal(year,ordinal);return{year,month,day,...timeObject(ordinalData)}}function usesLocalWeekValues(obj,loc){if(!isUndefined(obj.localWeekday)||!isUndefined(obj.localWeekNumber)||!isUndefined(obj.localWeekYear)){if(!isUndefined(obj.weekday)||!isUndefined(obj.weekNumber)||!isUndefined(obj.weekYear))throw new ConflictingSpecificationError("Cannot mix locale-based week fields with ISO-based week fields");return isUndefined(obj.localWeekday)||(obj.weekday=obj.localWeekday),isUndefined(obj.localWeekNumber)||(obj.weekNumber=obj.localWeekNumber),isUndefined(obj.localWeekYear)||(obj.weekYear=obj.localWeekYear),delete obj.localWeekday,delete obj.localWeekNumber,delete obj.localWeekYear,{minDaysInFirstWeek:loc.getMinDaysInFirstWeek(),startOfWeek:loc.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function hasInvalidWeekData(obj,minDaysInFirstWeek=4,startOfWeek=1){let validYear=isInteger(obj.weekYear),validWeek=integerBetween(obj.weekNumber,1,weeksInWeekYear(obj.weekYear,minDaysInFirstWeek,startOfWeek)),validWeekday=integerBetween(obj.weekday,1,7);return validYear?validWeek?validWeekday?!1:unitOutOfRange("weekday",obj.weekday):unitOutOfRange("week",obj.weekNumber):unitOutOfRange("weekYear",obj.weekYear)}function hasInvalidOrdinalData(obj){let validYear=isInteger(obj.year),validOrdinal=integerBetween(obj.ordinal,1,daysInYear(obj.year));return validYear?validOrdinal?!1:unitOutOfRange("ordinal",obj.ordinal):unitOutOfRange("year",obj.year)}function hasInvalidGregorianData(obj){let validYear=isInteger(obj.year),validMonth=integerBetween(obj.month,1,12),validDay=integerBetween(obj.day,1,daysInMonth(obj.year,obj.month));return validYear?validMonth?validDay?!1:unitOutOfRange("day",obj.day):unitOutOfRange("month",obj.month):unitOutOfRange("year",obj.year)}function hasInvalidTimeData(obj){let{hour,minute,second,millisecond}=obj,validHour=integerBetween(hour,0,23)||hour===24&&minute===0&&second===0&&millisecond===0,validMinute=integerBetween(minute,0,59),validSecond=integerBetween(second,0,59),validMillisecond=integerBetween(millisecond,0,999);return validHour?validMinute?validSecond?validMillisecond?!1:unitOutOfRange("millisecond",millisecond):unitOutOfRange("second",second):unitOutOfRange("minute",minute):unitOutOfRange("hour",hour)}function isUndefined(o){return typeof o>"u"}function isNumber(o){return typeof o=="number"}function isInteger(o){return typeof o=="number"&&o%1===0}function isString(o){return typeof o=="string"}function isDate(o){return Object.prototype.toString.call(o)==="[object Date]"}function hasRelative(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function hasLocaleWeekInfo(){try{return typeof Intl<"u"&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch{return!1}}function maybeArray(thing){return Array.isArray(thing)?thing:[thing]}function bestBy(arr,by,compare){if(arr.length!==0)return arr.reduce((best,next)=>{let pair=[by(next),next];return best&&compare(best[0],pair[0])===best[0]?best:pair},null)[1]}function pick(obj,keys){return keys.reduce((a,k)=>(a[k]=obj[k],a),{})}function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}function validateWeekSettings(settings){if(settings==null)return null;if(typeof settings!="object")throw new InvalidArgumentError("Week settings must be an object");if(!integerBetween(settings.firstDay,1,7)||!integerBetween(settings.minimalDays,1,7)||!Array.isArray(settings.weekend)||settings.weekend.some(v=>!integerBetween(v,1,7)))throw new InvalidArgumentError("Invalid week settings");return{firstDay:settings.firstDay,minimalDays:settings.minimalDays,weekend:Array.from(settings.weekend)}}function integerBetween(thing,bottom,top){return isInteger(thing)&&thing>=bottom&&thing<=top}function floorMod(x,n2){return x-n2*Math.floor(x/n2)}function padStart(input,n2=2){let isNeg=input<0,padded;return isNeg?padded="-"+(""+-input).padStart(n2,"0"):padded=(""+input).padStart(n2,"0"),padded}function parseInteger(string){if(!(isUndefined(string)||string===null||string===""))return parseInt(string,10)}function parseFloating(string){if(!(isUndefined(string)||string===null||string===""))return parseFloat(string)}function parseMillis(fraction){if(!(isUndefined(fraction)||fraction===null||fraction==="")){let f=parseFloat("0."+fraction)*1e3;return Math.floor(f)}}function roundTo(number,digits,rounding="round"){let factor=10**digits;switch(rounding){case"expand":return number>0?Math.ceil(number*factor)/factor:Math.floor(number*factor)/factor;case"trunc":return Math.trunc(number*factor)/factor;case"round":return Math.round(number*factor)/factor;case"floor":return Math.floor(number*factor)/factor;case"ceil":return Math.ceil(number*factor)/factor;default:throw new RangeError(`Value rounding ${rounding} is out of range`)}}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function daysInYear(year){return isLeapYear(year)?366:365}function daysInMonth(year,month){let modMonth=floorMod(month-1,12)+1,modYear=year+(month-modMonth)/12;return modMonth===2?isLeapYear(modYear)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][modMonth-1]}function objToLocalTS(obj){let d=Date.UTC(obj.year,obj.month-1,obj.day,obj.hour,obj.minute,obj.second,obj.millisecond);return obj.year<100&&obj.year>=0&&(d=new Date(d),d.setUTCFullYear(obj.year,obj.month-1,obj.day)),+d}function firstWeekOffset(year,minDaysInFirstWeek,startOfWeek){return-isoWeekdayToLocal(dayOfWeek(year,1,minDaysInFirstWeek),startOfWeek)+minDaysInFirstWeek-1}function weeksInWeekYear(weekYear,minDaysInFirstWeek=4,startOfWeek=1){let weekOffset=firstWeekOffset(weekYear,minDaysInFirstWeek,startOfWeek),weekOffsetNext=firstWeekOffset(weekYear+1,minDaysInFirstWeek,startOfWeek);return(daysInYear(weekYear)-weekOffset+weekOffsetNext)/7}function untruncateYear(year){return year>99?year:year>Settings.twoDigitCutoffYear?1900+year:2e3+year}function parseZoneInfo(ts,offsetFormat,locale,timeZone=null){let date=new Date(ts),intlOpts={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};timeZone&&(intlOpts.timeZone=timeZone);let modified={timeZoneName:offsetFormat,...intlOpts},parsed=new Intl.DateTimeFormat(locale,modified).formatToParts(date).find(m=>m.type.toLowerCase()==="timezonename");return parsed?parsed.value:null}function signedOffset(offHourStr,offMinuteStr){let offHour=parseInt(offHourStr,10);Number.isNaN(offHour)&&(offHour=0);let offMin=parseInt(offMinuteStr,10)||0,offMinSigned=offHour<0||Object.is(offHour,-0)?-offMin:offMin;return offHour*60+offMinSigned}function asNumber(value){let numericValue=Number(value);if(typeof value=="boolean"||value===""||!Number.isFinite(numericValue))throw new InvalidArgumentError(`Invalid unit value ${value}`);return numericValue}function normalizeObject(obj,normalizer){let normalized={};for(let u in obj)if(hasOwnProperty(obj,u)){let v=obj[u];if(v==null)continue;normalized[normalizer(u)]=asNumber(v)}return normalized}function formatOffset(offset2,format){let hours=Math.trunc(Math.abs(offset2/60)),minutes=Math.trunc(Math.abs(offset2%60)),sign=offset2>=0?"+":"-";switch(format){case"short":return`${sign}${padStart(hours,2)}:${padStart(minutes,2)}`;case"narrow":return`${sign}${hours}${minutes>0?`:${minutes}`:""}`;case"techie":return`${sign}${padStart(hours,2)}${padStart(minutes,2)}`;default:throw new RangeError(`Value format ${format} is out of range for property format`)}}function timeObject(obj){return pick(obj,["hour","minute","second","millisecond"])}var monthsLong=["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],monthsNarrow=["J","F","M","A","M","J","J","A","S","O","N","D"];function months(length){switch(length){case"narrow":return[...monthsNarrow];case"short":return[...monthsShort];case"long":return[...monthsLong];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var weekdaysLong=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],weekdaysShort=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],weekdaysNarrow=["M","T","W","T","F","S","S"];function weekdays(length){switch(length){case"narrow":return[...weekdaysNarrow];case"short":return[...weekdaysShort];case"long":return[...weekdaysLong];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var meridiems=["AM","PM"],erasLong=["Before Christ","Anno Domini"],erasShort=["BC","AD"],erasNarrow=["B","A"];function eras(length){switch(length){case"narrow":return[...erasNarrow];case"short":return[...erasShort];case"long":return[...erasLong];default:return null}}function meridiemForDateTime(dt){return meridiems[dt.hour<12?0:1]}function weekdayForDateTime(dt,length){return weekdays(length)[dt.weekday-1]}function monthForDateTime(dt,length){return months(length)[dt.month-1]}function eraForDateTime(dt,length){return eras(length)[dt.year<0?0:1]}function formatRelativeTime(unit,count,numeric="always",narrow=!1){let units={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},lastable=["hours","minutes","seconds"].indexOf(unit)===-1;if(numeric==="auto"&&lastable){let isDay=unit==="days";switch(count){case 1:return isDay?"tomorrow":`next ${units[unit][0]}`;case-1:return isDay?"yesterday":`last ${units[unit][0]}`;case 0:return isDay?"today":`this ${units[unit][0]}`}}let isInPast=Object.is(count,-0)||count<0,fmtValue=Math.abs(count),singular=fmtValue===1,lilUnits=units[unit],fmtUnit=narrow?singular?lilUnits[1]:lilUnits[2]||lilUnits[1]:singular?units[unit][0]:unit;return isInPast?`${fmtValue} ${fmtUnit} ago`:`in ${fmtValue} ${fmtUnit}`}function stringifyTokens(splits,tokenToString){let s2="";for(let token2 of splits)token2.literal?s2+=token2.val:s2+=tokenToString(token2.val);return s2}var macroTokenToFormatOpts={D:DATE_SHORT,DD:DATE_MED,DDD:DATE_FULL,DDDD:DATE_HUGE,t:TIME_SIMPLE,tt:TIME_WITH_SECONDS,ttt:TIME_WITH_SHORT_OFFSET,tttt:TIME_WITH_LONG_OFFSET,T:TIME_24_SIMPLE,TT:TIME_24_WITH_SECONDS,TTT:TIME_24_WITH_SHORT_OFFSET,TTTT:TIME_24_WITH_LONG_OFFSET,f:DATETIME_SHORT,ff:DATETIME_MED,fff:DATETIME_FULL,ffff:DATETIME_HUGE,F:DATETIME_SHORT_WITH_SECONDS,FF:DATETIME_MED_WITH_SECONDS,FFF:DATETIME_FULL_WITH_SECONDS,FFFF:DATETIME_HUGE_WITH_SECONDS},Formatter=class _Formatter{static create(locale,opts={}){return new _Formatter(locale,opts)}static parseFormat(fmt){let current=null,currentFull="",bracketed=!1,splits=[];for(let i=0;i<fmt.length;i++){let c=fmt.charAt(i);c==="'"?((currentFull.length>0||bracketed)&&splits.push({literal:bracketed||/^\s+$/.test(currentFull),val:currentFull===""?"'":currentFull}),current=null,currentFull="",bracketed=!bracketed):bracketed||c===current?currentFull+=c:(currentFull.length>0&&splits.push({literal:/^\s+$/.test(currentFull),val:currentFull}),currentFull=c,current=c)}return currentFull.length>0&&splits.push({literal:bracketed||/^\s+$/.test(currentFull),val:currentFull}),splits}static macroTokenToFormatOpts(token2){return macroTokenToFormatOpts[token2]}constructor(locale,formatOpts){this.opts=formatOpts,this.loc=locale,this.systemLoc=null}formatWithSystemDefault(dt,opts){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(dt,{...this.opts,...opts}).format()}dtFormatter(dt,opts={}){return this.loc.dtFormatter(dt,{...this.opts,...opts})}formatDateTime(dt,opts){return this.dtFormatter(dt,opts).format()}formatDateTimeParts(dt,opts){return this.dtFormatter(dt,opts).formatToParts()}formatInterval(interval,opts){return this.dtFormatter(interval.start,opts).dtf.formatRange(interval.start.toJSDate(),interval.end.toJSDate())}resolvedOptions(dt,opts){return this.dtFormatter(dt,opts).resolvedOptions()}num(n2,p=0,signDisplay=void 0){if(this.opts.forceSimple)return padStart(n2,p);let opts={...this.opts};return p>0&&(opts.padTo=p),signDisplay&&(opts.signDisplay=signDisplay),this.loc.numberFormatter(opts).format(n2)}formatDateTimeFromString(dt,fmt){let knownEnglish=this.loc.listingMode()==="en",useDateTimeFormatter=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",string=(opts,extract)=>this.loc.extract(dt,opts,extract),formatOffset2=opts=>dt.isOffsetFixed&&dt.offset===0&&opts.allowZ?"Z":dt.isValid?dt.zone.formatOffset(dt.ts,opts.format):"",meridiem=()=>knownEnglish?meridiemForDateTime(dt):string({hour:"numeric",hourCycle:"h12"},"dayperiod"),month=(length,standalone)=>knownEnglish?monthForDateTime(dt,length):string(standalone?{month:length}:{month:length,day:"numeric"},"month"),weekday=(length,standalone)=>knownEnglish?weekdayForDateTime(dt,length):string(standalone?{weekday:length}:{weekday:length,month:"long",day:"numeric"},"weekday"),maybeMacro=token2=>{let formatOpts=_Formatter.macroTokenToFormatOpts(token2);return formatOpts?this.formatWithSystemDefault(dt,formatOpts):token2},era=length=>knownEnglish?eraForDateTime(dt,length):string({era:length},"era"),tokenToString=token2=>{switch(token2){case"S":return this.num(dt.millisecond);case"u":case"SSS":return this.num(dt.millisecond,3);case"s":return this.num(dt.second);case"ss":return this.num(dt.second,2);case"uu":return this.num(Math.floor(dt.millisecond/10),2);case"uuu":return this.num(Math.floor(dt.millisecond/100));case"m":return this.num(dt.minute);case"mm":return this.num(dt.minute,2);case"h":return this.num(dt.hour%12===0?12:dt.hour%12);case"hh":return this.num(dt.hour%12===0?12:dt.hour%12,2);case"H":return this.num(dt.hour);case"HH":return this.num(dt.hour,2);case"Z":return formatOffset2({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return formatOffset2({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return formatOffset2({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return dt.zone.offsetName(dt.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return dt.zone.offsetName(dt.ts,{format:"long",locale:this.loc.locale});case"z":return dt.zoneName;case"a":return meridiem();case"d":return useDateTimeFormatter?string({day:"numeric"},"day"):this.num(dt.day);case"dd":return useDateTimeFormatter?string({day:"2-digit"},"day"):this.num(dt.day,2);case"c":return this.num(dt.weekday);case"ccc":return weekday("short",!0);case"cccc":return weekday("long",!0);case"ccccc":return weekday("narrow",!0);case"E":return this.num(dt.weekday);case"EEE":return weekday("short",!1);case"EEEE":return weekday("long",!1);case"EEEEE":return weekday("narrow",!1);case"L":return useDateTimeFormatter?string({month:"numeric",day:"numeric"},"month"):this.num(dt.month);case"LL":return useDateTimeFormatter?string({month:"2-digit",day:"numeric"},"month"):this.num(dt.month,2);case"LLL":return month("short",!0);case"LLLL":return month("long",!0);case"LLLLL":return month("narrow",!0);case"M":return useDateTimeFormatter?string({month:"numeric"},"month"):this.num(dt.month);case"MM":return useDateTimeFormatter?string({month:"2-digit"},"month"):this.num(dt.month,2);case"MMM":return month("short",!1);case"MMMM":return month("long",!1);case"MMMMM":return month("narrow",!1);case"y":return useDateTimeFormatter?string({year:"numeric"},"year"):this.num(dt.year);case"yy":return useDateTimeFormatter?string({year:"2-digit"},"year"):this.num(dt.year.toString().slice(-2),2);case"yyyy":return useDateTimeFormatter?string({year:"numeric"},"year"):this.num(dt.year,4);case"yyyyyy":return useDateTimeFormatter?string({year:"numeric"},"year"):this.num(dt.year,6);case"G":return era("short");case"GG":return era("long");case"GGGGG":return era("narrow");case"kk":return this.num(dt.weekYear.toString().slice(-2),2);case"kkkk":return this.num(dt.weekYear,4);case"W":return this.num(dt.weekNumber);case"WW":return this.num(dt.weekNumber,2);case"n":return this.num(dt.localWeekNumber);case"nn":return this.num(dt.localWeekNumber,2);case"ii":return this.num(dt.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(dt.localWeekYear,4);case"o":return this.num(dt.ordinal);case"ooo":return this.num(dt.ordinal,3);case"q":return this.num(dt.quarter);case"qq":return this.num(dt.quarter,2);case"X":return this.num(Math.floor(dt.ts/1e3));case"x":return this.num(dt.ts);default:return maybeMacro(token2)}};return stringifyTokens(_Formatter.parseFormat(fmt),tokenToString)}formatDurationFromString(dur,fmt){let invertLargest=this.opts.signMode==="negativeLargestOnly"?-1:1,tokenToField=token2=>{switch(token2[0]){case"S":return"milliseconds";case"s":return"seconds";case"m":return"minutes";case"h":return"hours";case"d":return"days";case"w":return"weeks";case"M":return"months";case"y":return"years";default:return null}},tokenToString=(lildur,info)=>token2=>{let mapped=tokenToField(token2);if(mapped){let inversionFactor=info.isNegativeDuration&&mapped!==info.largestUnit?invertLargest:1,signDisplay;return this.opts.signMode==="negativeLargestOnly"&&mapped!==info.largestUnit?signDisplay="never":this.opts.signMode==="all"?signDisplay="always":signDisplay="auto",this.num(lildur.get(mapped)*inversionFactor,token2.length,signDisplay)}else return token2},tokens=_Formatter.parseFormat(fmt),realTokens=tokens.reduce((found,{literal,val})=>literal?found:found.concat(val),[]),collapsed=dur.shiftTo(...realTokens.map(tokenToField).filter(t=>t)),durationInfo={isNegativeDuration:collapsed<0,largestUnit:Object.keys(collapsed.values)[0]};return stringifyTokens(tokens,tokenToString(collapsed,durationInfo))}},ianaRegex=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function combineRegexes(...regexes){let full=regexes.reduce((f,r)=>f+r.source,"");return RegExp(`^${full}$`)}function combineExtractors(...extractors){return m=>extractors.reduce(([mergedVals,mergedZone,cursor],ex)=>{let[val,zone,next]=ex(m,cursor);return[{...mergedVals,...val},zone||mergedZone,next]},[{},null,1]).slice(0,2)}function parse(s2,...patterns){if(s2==null)return[null,null];for(let[regex,extractor]of patterns){let m=regex.exec(s2);if(m)return extractor(m)}return[null,null]}function simpleParse(...keys){return(match2,cursor)=>{let ret={},i;for(i=0;i<keys.length;i++)ret[keys[i]]=parseInteger(match2[cursor+i]);return[ret,null,cursor+i]}}var offsetRegex=/(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/,isoExtendedZone=`(?:${offsetRegex.source}?(?:\\[(${ianaRegex.source})\\])?)?`,isoTimeBaseRegex=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,isoTimeRegex=RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`),isoTimeExtensionRegex=RegExp(`(?:[Tt]${isoTimeRegex.source})?`),isoYmdRegex=/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,isoWeekRegex=/(\d{4})-?W(\d\d)(?:-?(\d))?/,isoOrdinalRegex=/(\d{4})-?(\d{3})/,extractISOWeekData=simpleParse("weekYear","weekNumber","weekDay"),extractISOOrdinalData=simpleParse("year","ordinal"),sqlYmdRegex=/(\d{4})-(\d\d)-(\d\d)/,sqlTimeRegex=RegExp(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`),sqlTimeExtensionRegex=RegExp(`(?: ${sqlTimeRegex.source})?`);function int(match2,pos,fallback){let m=match2[pos];return isUndefined(m)?fallback:parseInteger(m)}function extractISOYmd(match2,cursor){return[{year:int(match2,cursor),month:int(match2,cursor+1,1),day:int(match2,cursor+2,1)},null,cursor+3]}function extractISOTime(match2,cursor){return[{hours:int(match2,cursor,0),minutes:int(match2,cursor+1,0),seconds:int(match2,cursor+2,0),milliseconds:parseMillis(match2[cursor+3])},null,cursor+4]}function extractISOOffset(match2,cursor){let local=!match2[cursor]&&!match2[cursor+1],fullOffset=signedOffset(match2[cursor+1],match2[cursor+2]),zone=local?null:FixedOffsetZone.instance(fullOffset);return[{},zone,cursor+3]}function extractIANAZone(match2,cursor){let zone=match2[cursor]?IANAZone.create(match2[cursor]):null;return[{},zone,cursor+1]}var isoTimeOnly=RegExp(`^T?${isoTimeBaseRegex.source}$`),isoDuration=/^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;function extractISODuration(match2){let[s2,yearStr,monthStr,weekStr,dayStr,hourStr,minuteStr,secondStr,millisecondsStr]=match2,hasNegativePrefix=s2[0]==="-",negativeSeconds=secondStr&&secondStr[0]==="-",maybeNegate=(num,force=!1)=>num!==void 0&&(force||num&&hasNegativePrefix)?-num:num;return[{years:maybeNegate(parseFloating(yearStr)),months:maybeNegate(parseFloating(monthStr)),weeks:maybeNegate(parseFloating(weekStr)),days:maybeNegate(parseFloating(dayStr)),hours:maybeNegate(parseFloating(hourStr)),minutes:maybeNegate(parseFloating(minuteStr)),seconds:maybeNegate(parseFloating(secondStr),secondStr==="-0"),milliseconds:maybeNegate(parseMillis(millisecondsStr),negativeSeconds)}]}var obsOffsets={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function fromStrings(weekdayStr,yearStr,monthStr,dayStr,hourStr,minuteStr,secondStr){let result={year:yearStr.length===2?untruncateYear(parseInteger(yearStr)):parseInteger(yearStr),month:monthsShort.indexOf(monthStr)+1,day:parseInteger(dayStr),hour:parseInteger(hourStr),minute:parseInteger(minuteStr)};return secondStr&&(result.second=parseInteger(secondStr)),weekdayStr&&(result.weekday=weekdayStr.length>3?weekdaysLong.indexOf(weekdayStr)+1:weekdaysShort.indexOf(weekdayStr)+1),result}var rfc2822=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function extractRFC2822(match2){let[,weekdayStr,dayStr,monthStr,yearStr,hourStr,minuteStr,secondStr,obsOffset,milOffset,offHourStr,offMinuteStr]=match2,result=fromStrings(weekdayStr,yearStr,monthStr,dayStr,hourStr,minuteStr,secondStr),offset2;return obsOffset?offset2=obsOffsets[obsOffset]:milOffset?offset2=0:offset2=signedOffset(offHourStr,offMinuteStr),[result,new FixedOffsetZone(offset2)]}function preprocessRFC2822(s2){return s2.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var rfc1123=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,rfc850=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,ascii=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function extractRFC1123Or850(match2){let[,weekdayStr,dayStr,monthStr,yearStr,hourStr,minuteStr,secondStr]=match2;return[fromStrings(weekdayStr,yearStr,monthStr,dayStr,hourStr,minuteStr,secondStr),FixedOffsetZone.utcInstance]}function extractASCII(match2){let[,weekdayStr,monthStr,dayStr,hourStr,minuteStr,secondStr,yearStr]=match2;return[fromStrings(weekdayStr,yearStr,monthStr,dayStr,hourStr,minuteStr,secondStr),FixedOffsetZone.utcInstance]}var isoYmdWithTimeExtensionRegex=combineRegexes(isoYmdRegex,isoTimeExtensionRegex),isoWeekWithTimeExtensionRegex=combineRegexes(isoWeekRegex,isoTimeExtensionRegex),isoOrdinalWithTimeExtensionRegex=combineRegexes(isoOrdinalRegex,isoTimeExtensionRegex),isoTimeCombinedRegex=combineRegexes(isoTimeRegex),extractISOYmdTimeAndOffset=combineExtractors(extractISOYmd,extractISOTime,extractISOOffset,extractIANAZone),extractISOWeekTimeAndOffset=combineExtractors(extractISOWeekData,extractISOTime,extractISOOffset,extractIANAZone),extractISOOrdinalDateAndTime=combineExtractors(extractISOOrdinalData,extractISOTime,extractISOOffset,extractIANAZone),extractISOTimeAndOffset=combineExtractors(extractISOTime,extractISOOffset,extractIANAZone);function parseISODate(s2){return parse(s2,[isoYmdWithTimeExtensionRegex,extractISOYmdTimeAndOffset],[isoWeekWithTimeExtensionRegex,extractISOWeekTimeAndOffset],[isoOrdinalWithTimeExtensionRegex,extractISOOrdinalDateAndTime],[isoTimeCombinedRegex,extractISOTimeAndOffset])}function parseRFC2822Date(s2){return parse(preprocessRFC2822(s2),[rfc2822,extractRFC2822])}function parseHTTPDate(s2){return parse(s2,[rfc1123,extractRFC1123Or850],[rfc850,extractRFC1123Or850],[ascii,extractASCII])}function parseISODuration(s2){return parse(s2,[isoDuration,extractISODuration])}var extractISOTimeOnly=combineExtractors(extractISOTime);function parseISOTimeOnly(s2){return parse(s2,[isoTimeOnly,extractISOTimeOnly])}var sqlYmdWithTimeExtensionRegex=combineRegexes(sqlYmdRegex,sqlTimeExtensionRegex),sqlTimeCombinedRegex=combineRegexes(sqlTimeRegex),extractISOTimeOffsetAndIANAZone=combineExtractors(extractISOTime,extractISOOffset,extractIANAZone);function parseSQL(s2){return parse(s2,[sqlYmdWithTimeExtensionRegex,extractISOYmdTimeAndOffset],[sqlTimeCombinedRegex,extractISOTimeOffsetAndIANAZone])}var INVALID$2="Invalid Duration",lowOrderMatrix={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},casualMatrix={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...lowOrderMatrix},daysInYearAccurate=146097/400,daysInMonthAccurate=146097/4800,accurateMatrix={years:{quarters:4,months:12,weeks:daysInYearAccurate/7,days:daysInYearAccurate,hours:daysInYearAccurate*24,minutes:daysInYearAccurate*24*60,seconds:daysInYearAccurate*24*60*60,milliseconds:daysInYearAccurate*24*60*60*1e3},quarters:{months:3,weeks:daysInYearAccurate/28,days:daysInYearAccurate/4,hours:daysInYearAccurate*24/4,minutes:daysInYearAccurate*24*60/4,seconds:daysInYearAccurate*24*60*60/4,milliseconds:daysInYearAccurate*24*60*60*1e3/4},months:{weeks:daysInMonthAccurate/7,days:daysInMonthAccurate,hours:daysInMonthAccurate*24,minutes:daysInMonthAccurate*24*60,seconds:daysInMonthAccurate*24*60*60,milliseconds:daysInMonthAccurate*24*60*60*1e3},...lowOrderMatrix},orderedUnits$1=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],reverseUnits=orderedUnits$1.slice(0).reverse();function clone$1(dur,alts,clear=!1){let conf={values:clear?alts.values:{...dur.values,...alts.values||{}},loc:dur.loc.clone(alts.loc),conversionAccuracy:alts.conversionAccuracy||dur.conversionAccuracy,matrix:alts.matrix||dur.matrix};return new Duration(conf)}function durationToMillis(matrix,vals){let sum=vals.milliseconds??0;for(let unit of reverseUnits.slice(1))vals[unit]&&(sum+=vals[unit]*matrix[unit].milliseconds);return sum}function normalizeValues(matrix,vals){let factor=durationToMillis(matrix,vals)<0?-1:1;orderedUnits$1.reduceRight((previous,current)=>{if(isUndefined(vals[current]))return previous;if(previous){let previousVal=vals[previous]*factor,conv=matrix[current][previous],rollUp=Math.floor(previousVal/conv);vals[current]+=rollUp*factor,vals[previous]-=rollUp*conv*factor}return current},null),orderedUnits$1.reduce((previous,current)=>{if(isUndefined(vals[current]))return previous;if(previous){let fraction=vals[previous]%1;vals[previous]-=fraction,vals[current]+=fraction*matrix[previous][current]}return current},null)}function removeZeroes(vals){let newVals={};for(let[key,value]of Object.entries(vals))value!==0&&(newVals[key]=value);return newVals}var Duration=class _Duration{constructor(config){let accurate=config.conversionAccuracy==="longterm"||!1,matrix=accurate?accurateMatrix:casualMatrix;config.matrix&&(matrix=config.matrix),this.values=config.values,this.loc=config.loc||Locale.create(),this.conversionAccuracy=accurate?"longterm":"casual",this.invalid=config.invalid||null,this.matrix=matrix,this.isLuxonDuration=!0}static fromMillis(count,opts){return _Duration.fromObject({milliseconds:count},opts)}static fromObject(obj,opts={}){if(obj==null||typeof obj!="object")throw new InvalidArgumentError(`Duration.fromObject: argument expected to be an object, got ${obj===null?"null":typeof obj}`);return new _Duration({values:normalizeObject(obj,_Duration.normalizeUnit),loc:Locale.fromObject(opts),conversionAccuracy:opts.conversionAccuracy,matrix:opts.matrix})}static fromDurationLike(durationLike){if(isNumber(durationLike))return _Duration.fromMillis(durationLike);if(_Duration.isDuration(durationLike))return durationLike;if(typeof durationLike=="object")return _Duration.fromObject(durationLike);throw new InvalidArgumentError(`Unknown duration argument ${durationLike} of type ${typeof durationLike}`)}static fromISO(text2,opts){let[parsed]=parseISODuration(text2);return parsed?_Duration.fromObject(parsed,opts):_Duration.invalid("unparsable",`the input "${text2}" can't be parsed as ISO 8601`)}static fromISOTime(text2,opts){let[parsed]=parseISOTimeOnly(text2);return parsed?_Duration.fromObject(parsed,opts):_Duration.invalid("unparsable",`the input "${text2}" can't be parsed as ISO 8601`)}static invalid(reason,explanation=null){if(!reason)throw new InvalidArgumentError("need to specify a reason the Duration is invalid");let invalid=reason instanceof Invalid?reason:new Invalid(reason,explanation);if(Settings.throwOnInvalid)throw new InvalidDurationError(invalid);return new _Duration({invalid})}static normalizeUnit(unit){let normalized={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[unit&&unit.toLowerCase()];if(!normalized)throw new InvalidUnitError(unit);return normalized}static isDuration(o){return o&&o.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(fmt,opts={}){let fmtOpts={...opts,floor:opts.round!==!1&&opts.floor!==!1};return this.isValid?Formatter.create(this.loc,fmtOpts).formatDurationFromString(this,fmt):INVALID$2}toHuman(opts={}){if(!this.isValid)return INVALID$2;let showZeros=opts.showZeros!==!1,l2=orderedUnits$1.map(unit=>{let val=this.values[unit];return isUndefined(val)||val===0&&!showZeros?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...opts,unit:unit.slice(0,-1)}).format(val)}).filter(n2=>n2);return this.loc.listFormatter({type:"conjunction",style:opts.listStyle||"narrow",...opts}).format(l2)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let s2="P";return this.years!==0&&(s2+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(s2+=this.months+this.quarters*3+"M"),this.weeks!==0&&(s2+=this.weeks+"W"),this.days!==0&&(s2+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(s2+="T"),this.hours!==0&&(s2+=this.hours+"H"),this.minutes!==0&&(s2+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(s2+=roundTo(this.seconds+this.milliseconds/1e3,3)+"S"),s2==="P"&&(s2+="T0S"),s2}toISOTime(opts={}){if(!this.isValid)return null;let millis=this.toMillis();return millis<0||millis>=864e5?null:(opts={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...opts,includeOffset:!1},DateTime.fromMillis(millis,{zone:"UTC"}).toISOTime(opts))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?durationToMillis(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(duration){if(!this.isValid)return this;let dur=_Duration.fromDurationLike(duration),result={};for(let k of orderedUnits$1)(hasOwnProperty(dur.values,k)||hasOwnProperty(this.values,k))&&(result[k]=dur.get(k)+this.get(k));return clone$1(this,{values:result},!0)}minus(duration){if(!this.isValid)return this;let dur=_Duration.fromDurationLike(duration);return this.plus(dur.negate())}mapUnits(fn){if(!this.isValid)return this;let result={};for(let k of Object.keys(this.values))result[k]=asNumber(fn(this.values[k],k));return clone$1(this,{values:result},!0)}get(unit){return this[_Duration.normalizeUnit(unit)]}set(values){if(!this.isValid)return this;let mixed={...this.values,...normalizeObject(values,_Duration.normalizeUnit)};return clone$1(this,{values:mixed})}reconfigure({locale,numberingSystem,conversionAccuracy,matrix}={}){let opts={loc:this.loc.clone({locale,numberingSystem}),matrix,conversionAccuracy};return clone$1(this,opts)}as(unit){return this.isValid?this.shiftTo(unit).get(unit):NaN}normalize(){if(!this.isValid)return this;let vals=this.toObject();return normalizeValues(this.matrix,vals),clone$1(this,{values:vals},!0)}rescale(){if(!this.isValid)return this;let vals=removeZeroes(this.normalize().shiftToAll().toObject());return clone$1(this,{values:vals},!0)}shiftTo(...units){if(!this.isValid)return this;if(units.length===0)return this;units=units.map(u=>_Duration.normalizeUnit(u));let built={},accumulated={},vals=this.toObject(),lastUnit;for(let k of orderedUnits$1)if(units.indexOf(k)>=0){lastUnit=k;let own=0;for(let ak in accumulated)own+=this.matrix[ak][k]*accumulated[ak],accumulated[ak]=0;isNumber(vals[k])&&(own+=vals[k]);let i=Math.trunc(own);built[k]=i,accumulated[k]=(own*1e3-i*1e3)/1e3}else isNumber(vals[k])&&(accumulated[k]=vals[k]);for(let key in accumulated)accumulated[key]!==0&&(built[lastUnit]+=key===lastUnit?accumulated[key]:accumulated[key]/this.matrix[lastUnit][key]);return normalizeValues(this.matrix,built),clone$1(this,{values:built},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let negated={};for(let k of Object.keys(this.values))negated[k]=this.values[k]===0?0:-this.values[k];return clone$1(this,{values:negated},!0)}removeZeros(){if(!this.isValid)return this;let vals=removeZeroes(this.values);return clone$1(this,{values:vals},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(other){if(!this.isValid||!other.isValid||!this.loc.equals(other.loc))return!1;function eq(v1,v2){return v1===void 0||v1===0?v2===void 0||v2===0:v1===v2}for(let u of orderedUnits$1)if(!eq(this.values[u],other.values[u]))return!1;return!0}},INVALID$1="Invalid Interval";function validateStartEnd(start,end){return!start||!start.isValid?Interval.invalid("missing or invalid start"):!end||!end.isValid?Interval.invalid("missing or invalid end"):end<start?Interval.invalid("end before start",`The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`):null}var Interval=class _Interval{constructor(config){this.s=config.start,this.e=config.end,this.invalid=config.invalid||null,this.isLuxonInterval=!0}static invalid(reason,explanation=null){if(!reason)throw new InvalidArgumentError("need to specify a reason the Interval is invalid");let invalid=reason instanceof Invalid?reason:new Invalid(reason,explanation);if(Settings.throwOnInvalid)throw new InvalidIntervalError(invalid);return new _Interval({invalid})}static fromDateTimes(start,end){let builtStart=friendlyDateTime(start),builtEnd=friendlyDateTime(end),validateError=validateStartEnd(builtStart,builtEnd);return validateError??new _Interval({start:builtStart,end:builtEnd})}static after(start,duration){let dur=Duration.fromDurationLike(duration),dt=friendlyDateTime(start);return _Interval.fromDateTimes(dt,dt.plus(dur))}static before(end,duration){let dur=Duration.fromDurationLike(duration),dt=friendlyDateTime(end);return _Interval.fromDateTimes(dt.minus(dur),dt)}static fromISO(text2,opts){let[s2,e]=(text2||"").split("/",2);if(s2&&e){let start,startIsValid;try{start=DateTime.fromISO(s2,opts),startIsValid=start.isValid}catch{startIsValid=!1}let end,endIsValid;try{end=DateTime.fromISO(e,opts),endIsValid=end.isValid}catch{endIsValid=!1}if(startIsValid&&endIsValid)return _Interval.fromDateTimes(start,end);if(startIsValid){let dur=Duration.fromISO(e,opts);if(dur.isValid)return _Interval.after(start,dur)}else if(endIsValid){let dur=Duration.fromISO(s2,opts);if(dur.isValid)return _Interval.before(end,dur)}}return _Interval.invalid("unparsable",`the input "${text2}" can't be parsed as ISO 8601`)}static isInterval(o){return o&&o.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get lastDateTime(){return this.isValid&&this.e?this.e.minus(1):null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(unit="milliseconds"){return this.isValid?this.toDuration(unit).get(unit):NaN}count(unit="milliseconds",opts){if(!this.isValid)return NaN;let start=this.start.startOf(unit,opts),end;return opts?.useLocaleWeeks?end=this.end.reconfigure({locale:start.locale}):end=this.end,end=end.startOf(unit,opts),Math.floor(end.diff(start,unit).get(unit))+(end.valueOf()!==this.end.valueOf())}hasSame(unit){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,unit):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(dateTime){return this.isValid?this.s>dateTime:!1}isBefore(dateTime){return this.isValid?this.e<=dateTime:!1}contains(dateTime){return this.isValid?this.s<=dateTime&&this.e>dateTime:!1}set({start,end}={}){return this.isValid?_Interval.fromDateTimes(start||this.s,end||this.e):this}splitAt(...dateTimes){if(!this.isValid)return[];let sorted2=dateTimes.map(friendlyDateTime).filter(d=>this.contains(d)).sort((a,b)=>a.toMillis()-b.toMillis()),results=[],{s:s2}=this,i=0;for(;s2<this.e;){let added=sorted2[i]||this.e,next=+added>+this.e?this.e:added;results.push(_Interval.fromDateTimes(s2,next)),s2=next,i+=1}return results}splitBy(duration){let dur=Duration.fromDurationLike(duration);if(!this.isValid||!dur.isValid||dur.as("milliseconds")===0)return[];let{s:s2}=this,idx=1,next,results=[];for(;s2<this.e;){let added=this.start.plus(dur.mapUnits(x=>x*idx));next=+added>+this.e?this.e:added,results.push(_Interval.fromDateTimes(s2,next)),s2=next,idx+=1}return results}divideEqually(numberOfParts){return this.isValid?this.splitBy(this.length()/numberOfParts).slice(0,numberOfParts):[]}overlaps(other){return this.e>other.s&&this.s<other.e}abutsStart(other){return this.isValid?+this.e==+other.s:!1}abutsEnd(other){return this.isValid?+other.e==+this.s:!1}engulfs(other){return this.isValid?this.s<=other.s&&this.e>=other.e:!1}equals(other){return!this.isValid||!other.isValid?!1:this.s.equals(other.s)&&this.e.equals(other.e)}intersection(other){if(!this.isValid)return this;let s2=this.s>other.s?this.s:other.s,e=this.e<other.e?this.e:other.e;return s2>=e?null:_Interval.fromDateTimes(s2,e)}union(other){if(!this.isValid)return this;let s2=this.s<other.s?this.s:other.s,e=this.e>other.e?this.e:other.e;return _Interval.fromDateTimes(s2,e)}static merge(intervals){let[found,final]=intervals.sort((a,b)=>a.s-b.s).reduce(([sofar,current],item)=>current?current.overlaps(item)||current.abutsStart(item)?[sofar,current.union(item)]:[sofar.concat([current]),item]:[sofar,item],[[],null]);return final&&found.push(final),found}static xor(intervals){let start=null,currentCount=0,results=[],ends=intervals.map(i=>[{time:i.s,type:"s"},{time:i.e,type:"e"}]),flattened=Array.prototype.concat(...ends),arr=flattened.sort((a,b)=>a.time-b.time);for(let i of arr)currentCount+=i.type==="s"?1:-1,currentCount===1?start=i.time:(start&&+start!=+i.time&&results.push(_Interval.fromDateTimes(start,i.time)),start=null);return _Interval.merge(results)}difference(...intervals){return _Interval.xor([this].concat(intervals)).map(i=>this.intersection(i)).filter(i=>i&&!i.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:INVALID$1}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(formatOpts=DATE_SHORT,opts={}){return this.isValid?Formatter.create(this.s.loc.clone(opts),formatOpts).formatInterval(this):INVALID$1}toISO(opts){return this.isValid?`${this.s.toISO(opts)}/${this.e.toISO(opts)}`:INVALID$1}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:INVALID$1}toISOTime(opts){return this.isValid?`${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`:INVALID$1}toFormat(dateFormat,{separator=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`:INVALID$1}toDuration(unit,opts){return this.isValid?this.e.diff(this.s,unit,opts):Duration.invalid(this.invalidReason)}mapEndpoints(mapFn){return _Interval.fromDateTimes(mapFn(this.s),mapFn(this.e))}},Info=class{static hasDST(zone=Settings.defaultZone){let proto=DateTime.now().setZone(zone).set({month:12});return!zone.isUniversal&&proto.offset!==proto.set({month:6}).offset}static isValidIANAZone(zone){return IANAZone.isValidZone(zone)}static normalizeZone(input){return normalizeZone(input,Settings.defaultZone)}static getStartOfWeek({locale=null,locObj=null}={}){return(locObj||Locale.create(locale)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale=null,locObj=null}={}){return(locObj||Locale.create(locale)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale=null,locObj=null}={}){return(locObj||Locale.create(locale)).getWeekendDays().slice()}static months(length="long",{locale=null,numberingSystem=null,locObj=null,outputCalendar="gregory"}={}){return(locObj||Locale.create(locale,numberingSystem,outputCalendar)).months(length)}static monthsFormat(length="long",{locale=null,numberingSystem=null,locObj=null,outputCalendar="gregory"}={}){return(locObj||Locale.create(locale,numberingSystem,outputCalendar)).months(length,!0)}static weekdays(length="long",{locale=null,numberingSystem=null,locObj=null}={}){return(locObj||Locale.create(locale,numberingSystem,null)).weekdays(length)}static weekdaysFormat(length="long",{locale=null,numberingSystem=null,locObj=null}={}){return(locObj||Locale.create(locale,numberingSystem,null)).weekdays(length,!0)}static meridiems({locale=null}={}){return Locale.create(locale).meridiems()}static eras(length="short",{locale=null}={}){return Locale.create(locale,null,"gregory").eras(length)}static features(){return{relative:hasRelative(),localeWeek:hasLocaleWeekInfo()}}};function dayDiff(earlier,later){let utcDayStart=dt=>dt.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),ms3=utcDayStart(later)-utcDayStart(earlier);return Math.floor(Duration.fromMillis(ms3).as("days"))}function highOrderDiffs(cursor,later,units){let differs=[["years",(a,b)=>b.year-a.year],["quarters",(a,b)=>b.quarter-a.quarter+(b.year-a.year)*4],["months",(a,b)=>b.month-a.month+(b.year-a.year)*12],["weeks",(a,b)=>{let days=dayDiff(a,b);return(days-days%7)/7}],["days",dayDiff]],results={},earlier=cursor,lowestOrder,highWater;for(let[unit,differ]of differs)units.indexOf(unit)>=0&&(lowestOrder=unit,results[unit]=differ(cursor,later),highWater=earlier.plus(results),highWater>later?(results[unit]--,cursor=earlier.plus(results),cursor>later&&(highWater=cursor,results[unit]--,cursor=earlier.plus(results))):cursor=highWater);return[cursor,results,highWater,lowestOrder]}function diff(earlier,later,units,opts){let[cursor,results,highWater,lowestOrder]=highOrderDiffs(earlier,later,units),remainingMillis=later-cursor,lowerOrderUnits=units.filter(u=>["hours","minutes","seconds","milliseconds"].indexOf(u)>=0);lowerOrderUnits.length===0&&(highWater<later&&(highWater=cursor.plus({[lowestOrder]:1})),highWater!==cursor&&(results[lowestOrder]=(results[lowestOrder]||0)+remainingMillis/(highWater-cursor)));let duration=Duration.fromObject(results,opts);return lowerOrderUnits.length>0?Duration.fromMillis(remainingMillis,opts).shiftTo(...lowerOrderUnits).plus(duration):duration}var MISSING_FTP="missing Intl.DateTimeFormat.formatToParts support";function intUnit(regex,post=i=>i){return{regex,deser:([s2])=>post(parseDigits(s2))}}var NBSP=String.fromCharCode(160),spaceOrNBSP=`[ ${NBSP}]`,spaceOrNBSPRegExp=new RegExp(spaceOrNBSP,"g");function fixListRegex(s2){return s2.replace(/\./g,"\\.?").replace(spaceOrNBSPRegExp,spaceOrNBSP)}function stripInsensitivities(s2){return s2.replace(/\./g,"").replace(spaceOrNBSPRegExp," ").toLowerCase()}function oneOf(strings,startIndex){return strings===null?null:{regex:RegExp(strings.map(fixListRegex).join("|")),deser:([s2])=>strings.findIndex(i=>stripInsensitivities(s2)===stripInsensitivities(i))+startIndex}}function offset(regex,groups){return{regex,deser:([,h,m])=>signedOffset(h,m),groups}}function simple(regex){return{regex,deser:([s2])=>s2}}function escapeToken(value){return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function unitForToken(token2,loc){let one=digitRegex(loc),two=digitRegex(loc,"{2}"),three=digitRegex(loc,"{3}"),four=digitRegex(loc,"{4}"),six=digitRegex(loc,"{6}"),oneOrTwo=digitRegex(loc,"{1,2}"),oneToThree=digitRegex(loc,"{1,3}"),oneToSix=digitRegex(loc,"{1,6}"),oneToNine=digitRegex(loc,"{1,9}"),twoToFour=digitRegex(loc,"{2,4}"),fourToSix=digitRegex(loc,"{4,6}"),literal=t=>({regex:RegExp(escapeToken(t.val)),deser:([s2])=>s2,literal:!0}),unit=(t=>{if(token2.literal)return literal(t);switch(t.val){case"G":return oneOf(loc.eras("short"),0);case"GG":return oneOf(loc.eras("long"),0);case"y":return intUnit(oneToSix);case"yy":return intUnit(twoToFour,untruncateYear);case"yyyy":return intUnit(four);case"yyyyy":return intUnit(fourToSix);case"yyyyyy":return intUnit(six);case"M":return intUnit(oneOrTwo);case"MM":return intUnit(two);case"MMM":return oneOf(loc.months("short",!0),1);case"MMMM":return oneOf(loc.months("long",!0),1);case"L":return intUnit(oneOrTwo);case"LL":return intUnit(two);case"LLL":return oneOf(loc.months("short",!1),1);case"LLLL":return oneOf(loc.months("long",!1),1);case"d":return intUnit(oneOrTwo);case"dd":return intUnit(two);case"o":return intUnit(oneToThree);case"ooo":return intUnit(three);case"HH":return intUnit(two);case"H":return intUnit(oneOrTwo);case"hh":return intUnit(two);case"h":return intUnit(oneOrTwo);case"mm":return intUnit(two);case"m":return intUnit(oneOrTwo);case"q":return intUnit(oneOrTwo);case"qq":return intUnit(two);case"s":return intUnit(oneOrTwo);case"ss":return intUnit(two);case"S":return intUnit(oneToThree);case"SSS":return intUnit(three);case"u":return simple(oneToNine);case"uu":return simple(oneOrTwo);case"uuu":return intUnit(one);case"a":return oneOf(loc.meridiems(),0);case"kkkk":return intUnit(four);case"kk":return intUnit(twoToFour,untruncateYear);case"W":return intUnit(oneOrTwo);case"WW":return intUnit(two);case"E":case"c":return intUnit(one);case"EEE":return oneOf(loc.weekdays("short",!1),1);case"EEEE":return oneOf(loc.weekdays("long",!1),1);case"ccc":return oneOf(loc.weekdays("short",!0),1);case"cccc":return oneOf(loc.weekdays("long",!0),1);case"Z":case"ZZ":return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`),2);case"ZZZ":return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`),2);case"z":return simple(/[a-z_+-/]{1,256}?/i);case" ":return simple(/[^\S\n\r]/);default:return literal(t)}})(token2)||{invalidReason:MISSING_FTP};return unit.token=token2,unit}var partTypeStyleToTokenVal={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function tokenForPart(part,formatOpts,resolvedOpts){let{type,value}=part;if(type==="literal"){let isSpace=/^\s+$/.test(value);return{literal:!isSpace,val:isSpace?" ":value}}let style=formatOpts[type],actualType=type;type==="hour"&&(formatOpts.hour12!=null?actualType=formatOpts.hour12?"hour12":"hour24":formatOpts.hourCycle!=null?formatOpts.hourCycle==="h11"||formatOpts.hourCycle==="h12"?actualType="hour12":actualType="hour24":actualType=resolvedOpts.hour12?"hour12":"hour24");let val=partTypeStyleToTokenVal[actualType];if(typeof val=="object"&&(val=val[style]),val)return{literal:!1,val}}function buildRegex(units){return[`^${units.map(u=>u.regex).reduce((f,r)=>`${f}(${r.source})`,"")}$`,units]}function match(input,regex,handlers){let matches=input.match(regex);if(matches){let all={},matchIndex=1;for(let i in handlers)if(hasOwnProperty(handlers,i)){let h=handlers[i],groups=h.groups?h.groups+1:1;!h.literal&&h.token&&(all[h.token.val[0]]=h.deser(matches.slice(matchIndex,matchIndex+groups))),matchIndex+=groups}return[matches,all]}else return[matches,{}]}function dateTimeFromMatches(matches){let toField=token2=>{switch(token2){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},zone=null,specificOffset;return isUndefined(matches.z)||(zone=IANAZone.create(matches.z)),isUndefined(matches.Z)||(zone||(zone=new FixedOffsetZone(matches.Z)),specificOffset=matches.Z),isUndefined(matches.q)||(matches.M=(matches.q-1)*3+1),isUndefined(matches.h)||(matches.h<12&&matches.a===1?matches.h+=12:matches.h===12&&matches.a===0&&(matches.h=0)),matches.G===0&&matches.y&&(matches.y=-matches.y),isUndefined(matches.u)||(matches.S=parseMillis(matches.u)),[Object.keys(matches).reduce((r,k)=>{let f=toField(k);return f&&(r[f]=matches[k]),r},{}),zone,specificOffset]}var dummyDateTimeCache=null;function getDummyDateTime(){return dummyDateTimeCache||(dummyDateTimeCache=DateTime.fromMillis(1555555555555)),dummyDateTimeCache}function maybeExpandMacroToken(token2,locale){if(token2.literal)return token2;let formatOpts=Formatter.macroTokenToFormatOpts(token2.val),tokens=formatOptsToTokens(formatOpts,locale);return tokens==null||tokens.includes(void 0)?token2:tokens}function expandMacroTokens(tokens,locale){return Array.prototype.concat(...tokens.map(t=>maybeExpandMacroToken(t,locale)))}var TokenParser=class{constructor(locale,format){if(this.locale=locale,this.format=format,this.tokens=expandMacroTokens(Formatter.parseFormat(format),locale),this.units=this.tokens.map(t=>unitForToken(t,locale)),this.disqualifyingUnit=this.units.find(t=>t.invalidReason),!this.disqualifyingUnit){let[regexString,handlers]=buildRegex(this.units);this.regex=RegExp(regexString,"i"),this.handlers=handlers}}explainFromTokens(input){if(this.isValid){let[rawMatches,matches]=match(input,this.regex,this.handlers),[result,zone,specificOffset]=matches?dateTimeFromMatches(matches):[null,null,void 0];if(hasOwnProperty(matches,"a")&&hasOwnProperty(matches,"H"))throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format");return{input,tokens:this.tokens,regex:this.regex,rawMatches,matches,result,zone,specificOffset}}else return{input,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}};function explainFromTokens(locale,input,format){return new TokenParser(locale,format).explainFromTokens(input)}function parseFromTokens(locale,input,format){let{result,zone,specificOffset,invalidReason}=explainFromTokens(locale,input,format);return[result,zone,specificOffset,invalidReason]}function formatOptsToTokens(formatOpts,locale){if(!formatOpts)return null;let df=Formatter.create(locale,formatOpts).dtFormatter(getDummyDateTime()),parts=df.formatToParts(),resolvedOpts=df.resolvedOptions();return parts.map(p=>tokenForPart(p,formatOpts,resolvedOpts))}var INVALID="Invalid DateTime",MAX_DATE=864e13;function unsupportedZone(zone){return new Invalid("unsupported zone",`the zone "${zone.name}" is not supported`)}function possiblyCachedWeekData(dt){return dt.weekData===null&&(dt.weekData=gregorianToWeek(dt.c)),dt.weekData}function possiblyCachedLocalWeekData(dt){return dt.localWeekData===null&&(dt.localWeekData=gregorianToWeek(dt.c,dt.loc.getMinDaysInFirstWeek(),dt.loc.getStartOfWeek())),dt.localWeekData}function clone(inst,alts){let current={ts:inst.ts,zone:inst.zone,c:inst.c,o:inst.o,loc:inst.loc,invalid:inst.invalid};return new DateTime({...current,...alts,old:current})}function fixOffset(localTS,o,tz){let utcGuess=localTS-o*60*1e3,o2=tz.offset(utcGuess);if(o===o2)return[utcGuess,o];utcGuess-=(o2-o)*60*1e3;let o3=tz.offset(utcGuess);return o2===o3?[utcGuess,o2]:[localTS-Math.min(o2,o3)*60*1e3,Math.max(o2,o3)]}function tsToObj(ts,offset2){ts+=offset2*60*1e3;let d=new Date(ts);return{year:d.getUTCFullYear(),month:d.getUTCMonth()+1,day:d.getUTCDate(),hour:d.getUTCHours(),minute:d.getUTCMinutes(),second:d.getUTCSeconds(),millisecond:d.getUTCMilliseconds()}}function objToTS(obj,offset2,zone){return fixOffset(objToLocalTS(obj),offset2,zone)}function adjustTime(inst,dur){let oPre=inst.o,year=inst.c.year+Math.trunc(dur.years),month=inst.c.month+Math.trunc(dur.months)+Math.trunc(dur.quarters)*3,c={...inst.c,year,month,day:Math.min(inst.c.day,daysInMonth(year,month))+Math.trunc(dur.days)+Math.trunc(dur.weeks)*7},millisToAdd=Duration.fromObject({years:dur.years-Math.trunc(dur.years),quarters:dur.quarters-Math.trunc(dur.quarters),months:dur.months-Math.trunc(dur.months),weeks:dur.weeks-Math.trunc(dur.weeks),days:dur.days-Math.trunc(dur.days),hours:dur.hours,minutes:dur.minutes,seconds:dur.seconds,milliseconds:dur.milliseconds}).as("milliseconds"),localTS=objToLocalTS(c),[ts,o]=fixOffset(localTS,oPre,inst.zone);return millisToAdd!==0&&(ts+=millisToAdd,o=inst.zone.offset(ts)),{ts,o}}function parseDataToDateTime(parsed,parsedZone,opts,format,text2,specificOffset){let{setZone,zone}=opts;if(parsed&&Object.keys(parsed).length!==0||parsedZone){let interpretationZone=parsedZone||zone,inst=DateTime.fromObject(parsed,{...opts,zone:interpretationZone,specificOffset});return setZone?inst:inst.setZone(zone)}else return DateTime.invalid(new Invalid("unparsable",`the input "${text2}" can't be parsed as ${format}`))}function toTechFormat(dt,format,allowZ=!0){return dt.isValid?Formatter.create(Locale.create("en-US"),{allowZ,forceSimple:!0}).formatDateTimeFromString(dt,format):null}function toISODate(o,extended,precision){let longFormat=o.c.year>9999||o.c.year<0,c="";if(longFormat&&o.c.year>=0&&(c+="+"),c+=padStart(o.c.year,longFormat?6:4),precision==="year")return c;if(extended){if(c+="-",c+=padStart(o.c.month),precision==="month")return c;c+="-"}else if(c+=padStart(o.c.month),precision==="month")return c;return c+=padStart(o.c.day),c}function toISOTime(o,extended,suppressSeconds,suppressMilliseconds,includeOffset,extendedZone,precision){let showSeconds=!suppressSeconds||o.c.millisecond!==0||o.c.second!==0,c="";switch(precision){case"day":case"month":case"year":break;default:if(c+=padStart(o.c.hour),precision==="hour")break;if(extended){if(c+=":",c+=padStart(o.c.minute),precision==="minute")break;showSeconds&&(c+=":",c+=padStart(o.c.second))}else{if(c+=padStart(o.c.minute),precision==="minute")break;showSeconds&&(c+=padStart(o.c.second))}if(precision==="second")break;showSeconds&&(!suppressMilliseconds||o.c.millisecond!==0)&&(c+=".",c+=padStart(o.c.millisecond,3))}return includeOffset&&(o.isOffsetFixed&&o.offset===0&&!extendedZone?c+="Z":o.o<0?(c+="-",c+=padStart(Math.trunc(-o.o/60)),c+=":",c+=padStart(Math.trunc(-o.o%60))):(c+="+",c+=padStart(Math.trunc(o.o/60)),c+=":",c+=padStart(Math.trunc(o.o%60)))),extendedZone&&(c+="["+o.zone.ianaName+"]"),c}var defaultUnitValues={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},defaultWeekUnitValues={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},defaultOrdinalUnitValues={ordinal:1,hour:0,minute:0,second:0,millisecond:0},orderedUnits=["year","month","day","hour","minute","second","millisecond"],orderedWeekUnits=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],orderedOrdinalUnits=["year","ordinal","hour","minute","second","millisecond"];function normalizeUnit(unit){let normalized={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[unit.toLowerCase()];if(!normalized)throw new InvalidUnitError(unit);return normalized}function normalizeUnitWithLocalWeeks(unit){switch(unit.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return normalizeUnit(unit)}}function guessOffsetForZone(zone){if(zoneOffsetTs===void 0&&(zoneOffsetTs=Settings.now()),zone.type!=="iana")return zone.offset(zoneOffsetTs);let zoneName=zone.name,offsetGuess=zoneOffsetGuessCache.get(zoneName);return offsetGuess===void 0&&(offsetGuess=zone.offset(zoneOffsetTs),zoneOffsetGuessCache.set(zoneName,offsetGuess)),offsetGuess}function quickDT(obj,opts){let zone=normalizeZone(opts.zone,Settings.defaultZone);if(!zone.isValid)return DateTime.invalid(unsupportedZone(zone));let loc=Locale.fromObject(opts),ts,o;if(isUndefined(obj.year))ts=Settings.now();else{for(let u of orderedUnits)isUndefined(obj[u])&&(obj[u]=defaultUnitValues[u]);let invalid=hasInvalidGregorianData(obj)||hasInvalidTimeData(obj);if(invalid)return DateTime.invalid(invalid);let offsetProvis=guessOffsetForZone(zone);[ts,o]=objToTS(obj,offsetProvis,zone)}return new DateTime({ts,zone,loc,o})}function diffRelative(start,end,opts){let round=isUndefined(opts.round)?!0:opts.round,rounding=isUndefined(opts.rounding)?"trunc":opts.rounding,format=(c,unit)=>(c=roundTo(c,round||opts.calendary?0:2,opts.calendary?"round":rounding),end.loc.clone(opts).relFormatter(opts).format(c,unit)),differ=unit=>opts.calendary?end.hasSame(start,unit)?0:end.startOf(unit).diff(start.startOf(unit),unit).get(unit):end.diff(start,unit).get(unit);if(opts.unit)return format(differ(opts.unit),opts.unit);for(let unit of opts.units){let count=differ(unit);if(Math.abs(count)>=1)return format(count,unit)}return format(start>end?-0:0,opts.units[opts.units.length-1])}function lastOpts(argList){let opts={},args;return argList.length>0&&typeof argList[argList.length-1]=="object"?(opts=argList[argList.length-1],args=Array.from(argList).slice(0,argList.length-1)):args=Array.from(argList),[opts,args]}var zoneOffsetTs,zoneOffsetGuessCache=new Map,DateTime=class _DateTime{constructor(config){let zone=config.zone||Settings.defaultZone,invalid=config.invalid||(Number.isNaN(config.ts)?new Invalid("invalid input"):null)||(zone.isValid?null:unsupportedZone(zone));this.ts=isUndefined(config.ts)?Settings.now():config.ts;let c=null,o=null;if(!invalid)if(config.old&&config.old.ts===this.ts&&config.old.zone.equals(zone))[c,o]=[config.old.c,config.old.o];else{let ot=isNumber(config.o)&&!config.old?config.o:zone.offset(this.ts);c=tsToObj(this.ts,ot),invalid=Number.isNaN(c.year)?new Invalid("invalid input"):null,c=invalid?null:c,o=invalid?null:ot}this._zone=zone,this.loc=config.loc||Locale.create(),this.invalid=invalid,this.weekData=null,this.localWeekData=null,this.c=c,this.o=o,this.isLuxonDateTime=!0}static now(){return new _DateTime({})}static local(){let[opts,args]=lastOpts(arguments),[year,month,day,hour,minute,second,millisecond]=args;return quickDT({year,month,day,hour,minute,second,millisecond},opts)}static utc(){let[opts,args]=lastOpts(arguments),[year,month,day,hour,minute,second,millisecond]=args;return opts.zone=FixedOffsetZone.utcInstance,quickDT({year,month,day,hour,minute,second,millisecond},opts)}static fromJSDate(date,options={}){let ts=isDate(date)?date.valueOf():NaN;if(Number.isNaN(ts))return _DateTime.invalid("invalid input");let zoneToUse=normalizeZone(options.zone,Settings.defaultZone);return zoneToUse.isValid?new _DateTime({ts,zone:zoneToUse,loc:Locale.fromObject(options)}):_DateTime.invalid(unsupportedZone(zoneToUse))}static fromMillis(milliseconds,options={}){if(isNumber(milliseconds))return milliseconds<-MAX_DATE||milliseconds>MAX_DATE?_DateTime.invalid("Timestamp out of range"):new _DateTime({ts:milliseconds,zone:normalizeZone(options.zone,Settings.defaultZone),loc:Locale.fromObject(options)});throw new InvalidArgumentError(`fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`)}static fromSeconds(seconds,options={}){if(isNumber(seconds))return new _DateTime({ts:seconds*1e3,zone:normalizeZone(options.zone,Settings.defaultZone),loc:Locale.fromObject(options)});throw new InvalidArgumentError("fromSeconds requires a numerical input")}static fromObject(obj,opts={}){obj=obj||{};let zoneToUse=normalizeZone(opts.zone,Settings.defaultZone);if(!zoneToUse.isValid)return _DateTime.invalid(unsupportedZone(zoneToUse));let loc=Locale.fromObject(opts),normalized=normalizeObject(obj,normalizeUnitWithLocalWeeks),{minDaysInFirstWeek,startOfWeek}=usesLocalWeekValues(normalized,loc),tsNow=Settings.now(),offsetProvis=isUndefined(opts.specificOffset)?zoneToUse.offset(tsNow):opts.specificOffset,containsOrdinal=!isUndefined(normalized.ordinal),containsGregorYear=!isUndefined(normalized.year),containsGregorMD=!isUndefined(normalized.month)||!isUndefined(normalized.day),containsGregor=containsGregorYear||containsGregorMD,definiteWeekDef=normalized.weekYear||normalized.weekNumber;if((containsGregor||containsOrdinal)&&definiteWeekDef)throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(containsGregorMD&&containsOrdinal)throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");let useWeekData=definiteWeekDef||normalized.weekday&&!containsGregor,units,defaultValues,objNow=tsToObj(tsNow,offsetProvis);useWeekData?(units=orderedWeekUnits,defaultValues=defaultWeekUnitValues,objNow=gregorianToWeek(objNow,minDaysInFirstWeek,startOfWeek)):containsOrdinal?(units=orderedOrdinalUnits,defaultValues=defaultOrdinalUnitValues,objNow=gregorianToOrdinal(objNow)):(units=orderedUnits,defaultValues=defaultUnitValues);let foundFirst=!1;for(let u of units){let v=normalized[u];isUndefined(v)?foundFirst?normalized[u]=defaultValues[u]:normalized[u]=objNow[u]:foundFirst=!0}let higherOrderInvalid=useWeekData?hasInvalidWeekData(normalized,minDaysInFirstWeek,startOfWeek):containsOrdinal?hasInvalidOrdinalData(normalized):hasInvalidGregorianData(normalized),invalid=higherOrderInvalid||hasInvalidTimeData(normalized);if(invalid)return _DateTime.invalid(invalid);let gregorian=useWeekData?weekToGregorian(normalized,minDaysInFirstWeek,startOfWeek):containsOrdinal?ordinalToGregorian(normalized):normalized,[tsFinal,offsetFinal]=objToTS(gregorian,offsetProvis,zoneToUse),inst=new _DateTime({ts:tsFinal,zone:zoneToUse,o:offsetFinal,loc});return normalized.weekday&&containsGregor&&obj.weekday!==inst.weekday?_DateTime.invalid("mismatched weekday",`you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`):inst.isValid?inst:_DateTime.invalid(inst.invalid)}static fromISO(text2,opts={}){let[vals,parsedZone]=parseISODate(text2);return parseDataToDateTime(vals,parsedZone,opts,"ISO 8601",text2)}static fromRFC2822(text2,opts={}){let[vals,parsedZone]=parseRFC2822Date(text2);return parseDataToDateTime(vals,parsedZone,opts,"RFC 2822",text2)}static fromHTTP(text2,opts={}){let[vals,parsedZone]=parseHTTPDate(text2);return parseDataToDateTime(vals,parsedZone,opts,"HTTP",opts)}static fromFormat(text2,fmt,opts={}){if(isUndefined(text2)||isUndefined(fmt))throw new InvalidArgumentError("fromFormat requires an input string and a format");let{locale=null,numberingSystem=null}=opts,localeToUse=Locale.fromOpts({locale,numberingSystem,defaultToEN:!0}),[vals,parsedZone,specificOffset,invalid]=parseFromTokens(localeToUse,text2,fmt);return invalid?_DateTime.invalid(invalid):parseDataToDateTime(vals,parsedZone,opts,`format ${fmt}`,text2,specificOffset)}static fromString(text2,fmt,opts={}){return _DateTime.fromFormat(text2,fmt,opts)}static fromSQL(text2,opts={}){let[vals,parsedZone]=parseSQL(text2);return parseDataToDateTime(vals,parsedZone,opts,"SQL",text2)}static invalid(reason,explanation=null){if(!reason)throw new InvalidArgumentError("need to specify a reason the DateTime is invalid");let invalid=reason instanceof Invalid?reason:new Invalid(reason,explanation);if(Settings.throwOnInvalid)throw new InvalidDateTimeError(invalid);return new _DateTime({invalid})}static isDateTime(o){return o&&o.isLuxonDateTime||!1}static parseFormatForOpts(formatOpts,localeOpts={}){let tokenList=formatOptsToTokens(formatOpts,Locale.fromObject(localeOpts));return tokenList?tokenList.map(t=>t?t.val:null).join(""):null}static expandFormat(fmt,localeOpts={}){return expandMacroTokens(Formatter.parseFormat(fmt),Locale.fromObject(localeOpts)).map(t=>t.val).join("")}static resetCache(){zoneOffsetTs=void 0,zoneOffsetGuessCache.clear()}get(unit){return this[unit]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?possiblyCachedWeekData(this).weekYear:NaN}get weekNumber(){return this.isValid?possiblyCachedWeekData(this).weekNumber:NaN}get weekday(){return this.isValid?possiblyCachedWeekData(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?possiblyCachedLocalWeekData(this).weekday:NaN}get localWeekNumber(){return this.isValid?possiblyCachedLocalWeekData(this).weekNumber:NaN}get localWeekYear(){return this.isValid?possiblyCachedLocalWeekData(this).weekYear:NaN}get ordinal(){return this.isValid?gregorianToOrdinal(this.c).ordinal:NaN}get monthShort(){return this.isValid?Info.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Info.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Info.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Info.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let dayMs=864e5,minuteMs=6e4,localTS=objToLocalTS(this.c),oEarlier=this.zone.offset(localTS-dayMs),oLater=this.zone.offset(localTS+dayMs),o1=this.zone.offset(localTS-oEarlier*minuteMs),o2=this.zone.offset(localTS-oLater*minuteMs);if(o1===o2)return[this];let ts1=localTS-o1*minuteMs,ts2=localTS-o2*minuteMs,c1=tsToObj(ts1,o1),c2=tsToObj(ts2,o2);return c1.hour===c2.hour&&c1.minute===c2.minute&&c1.second===c2.second&&c1.millisecond===c2.millisecond?[clone(this,{ts:ts1}),clone(this,{ts:ts2})]:[this]}get isInLeapYear(){return isLeapYear(this.year)}get daysInMonth(){return daysInMonth(this.year,this.month)}get daysInYear(){return this.isValid?daysInYear(this.year):NaN}get weeksInWeekYear(){return this.isValid?weeksInWeekYear(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?weeksInWeekYear(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(opts={}){let{locale,numberingSystem,calendar}=Formatter.create(this.loc.clone(opts),opts).resolvedOptions(this);return{locale,numberingSystem,outputCalendar:calendar}}toUTC(offset2=0,opts={}){return this.setZone(FixedOffsetZone.instance(offset2),opts)}toLocal(){return this.setZone(Settings.defaultZone)}setZone(zone,{keepLocalTime=!1,keepCalendarTime=!1}={}){if(zone=normalizeZone(zone,Settings.defaultZone),zone.equals(this.zone))return this;if(zone.isValid){let newTS=this.ts;if(keepLocalTime||keepCalendarTime){let offsetGuess=zone.offset(this.ts),asObj=this.toObject();[newTS]=objToTS(asObj,offsetGuess,zone)}return clone(this,{ts:newTS,zone})}else return _DateTime.invalid(unsupportedZone(zone))}reconfigure({locale,numberingSystem,outputCalendar}={}){let loc=this.loc.clone({locale,numberingSystem,outputCalendar});return clone(this,{loc})}setLocale(locale){return this.reconfigure({locale})}set(values){if(!this.isValid)return this;let normalized=normalizeObject(values,normalizeUnitWithLocalWeeks),{minDaysInFirstWeek,startOfWeek}=usesLocalWeekValues(normalized,this.loc),settingWeekStuff=!isUndefined(normalized.weekYear)||!isUndefined(normalized.weekNumber)||!isUndefined(normalized.weekday),containsOrdinal=!isUndefined(normalized.ordinal),containsGregorYear=!isUndefined(normalized.year),containsGregorMD=!isUndefined(normalized.month)||!isUndefined(normalized.day),containsGregor=containsGregorYear||containsGregorMD,definiteWeekDef=normalized.weekYear||normalized.weekNumber;if((containsGregor||containsOrdinal)&&definiteWeekDef)throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(containsGregorMD&&containsOrdinal)throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");let mixed;settingWeekStuff?mixed=weekToGregorian({...gregorianToWeek(this.c,minDaysInFirstWeek,startOfWeek),...normalized},minDaysInFirstWeek,startOfWeek):isUndefined(normalized.ordinal)?(mixed={...this.toObject(),...normalized},isUndefined(normalized.day)&&(mixed.day=Math.min(daysInMonth(mixed.year,mixed.month),mixed.day))):mixed=ordinalToGregorian({...gregorianToOrdinal(this.c),...normalized});let[ts,o]=objToTS(mixed,this.o,this.zone);return clone(this,{ts,o})}plus(duration){if(!this.isValid)return this;let dur=Duration.fromDurationLike(duration);return clone(this,adjustTime(this,dur))}minus(duration){if(!this.isValid)return this;let dur=Duration.fromDurationLike(duration).negate();return clone(this,adjustTime(this,dur))}startOf(unit,{useLocaleWeeks=!1}={}){if(!this.isValid)return this;let o={},normalizedUnit=Duration.normalizeUnit(unit);switch(normalizedUnit){case"years":o.month=1;case"quarters":case"months":o.day=1;case"weeks":case"days":o.hour=0;case"hours":o.minute=0;case"minutes":o.second=0;case"seconds":o.millisecond=0;break}if(normalizedUnit==="weeks")if(useLocaleWeeks){let startOfWeek=this.loc.getStartOfWeek(),{weekday}=this;weekday<startOfWeek&&(o.weekNumber=this.weekNumber-1),o.weekday=startOfWeek}else o.weekday=1;if(normalizedUnit==="quarters"){let q=Math.ceil(this.month/3);o.month=(q-1)*3+1}return this.set(o)}endOf(unit,opts){return this.isValid?this.plus({[unit]:1}).startOf(unit,opts).minus(1):this}toFormat(fmt,opts={}){return this.isValid?Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this,fmt):INVALID}toLocaleString(formatOpts=DATE_SHORT,opts={}){return this.isValid?Formatter.create(this.loc.clone(opts),formatOpts).formatDateTime(this):INVALID}toLocaleParts(opts={}){return this.isValid?Formatter.create(this.loc.clone(opts),opts).formatDateTimeParts(this):[]}toISO({format="extended",suppressSeconds=!1,suppressMilliseconds=!1,includeOffset=!0,extendedZone=!1,precision="milliseconds"}={}){if(!this.isValid)return null;precision=normalizeUnit(precision);let ext=format==="extended",c=toISODate(this,ext,precision);return orderedUnits.indexOf(precision)>=3&&(c+="T"),c+=toISOTime(this,ext,suppressSeconds,suppressMilliseconds,includeOffset,extendedZone,precision),c}toISODate({format="extended",precision="day"}={}){return this.isValid?toISODate(this,format==="extended",normalizeUnit(precision)):null}toISOWeekDate(){return toTechFormat(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds=!1,suppressSeconds=!1,includeOffset=!0,includePrefix=!1,extendedZone=!1,format="extended",precision="milliseconds"}={}){return this.isValid?(precision=normalizeUnit(precision),(includePrefix&&orderedUnits.indexOf(precision)>=3?"T":"")+toISOTime(this,format==="extended",suppressSeconds,suppressMilliseconds,includeOffset,extendedZone,precision)):null}toRFC2822(){return toTechFormat(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return toTechFormat(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?toISODate(this,!0):null}toSQLTime({includeOffset=!0,includeZone=!1,includeOffsetSpace=!0}={}){let fmt="HH:mm:ss.SSS";return(includeZone||includeOffset)&&(includeOffsetSpace&&(fmt+=" "),includeZone?fmt+="z":includeOffset&&(fmt+="ZZ")),toTechFormat(this,fmt,!0)}toSQL(opts={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(opts)}`:null}toString(){return this.isValid?this.toISO():INVALID}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(opts={}){if(!this.isValid)return{};let base={...this.c};return opts.includeConfig&&(base.outputCalendar=this.outputCalendar,base.numberingSystem=this.loc.numberingSystem,base.locale=this.loc.locale),base}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(otherDateTime,unit="milliseconds",opts={}){if(!this.isValid||!otherDateTime.isValid)return Duration.invalid("created by diffing an invalid DateTime");let durOpts={locale:this.locale,numberingSystem:this.numberingSystem,...opts},units=maybeArray(unit).map(Duration.normalizeUnit),otherIsLater=otherDateTime.valueOf()>this.valueOf(),earlier=otherIsLater?this:otherDateTime,later=otherIsLater?otherDateTime:this,diffed=diff(earlier,later,units,durOpts);return otherIsLater?diffed.negate():diffed}diffNow(unit="milliseconds",opts={}){return this.diff(_DateTime.now(),unit,opts)}until(otherDateTime){return this.isValid?Interval.fromDateTimes(this,otherDateTime):this}hasSame(otherDateTime,unit,opts){if(!this.isValid)return!1;let inputMs=otherDateTime.valueOf(),adjustedToZone=this.setZone(otherDateTime.zone,{keepLocalTime:!0});return adjustedToZone.startOf(unit,opts)<=inputMs&&inputMs<=adjustedToZone.endOf(unit,opts)}equals(other){return this.isValid&&other.isValid&&this.valueOf()===other.valueOf()&&this.zone.equals(other.zone)&&this.loc.equals(other.loc)}toRelative(options={}){if(!this.isValid)return null;let base=options.base||_DateTime.fromObject({},{zone:this.zone}),padding=options.padding?this<base?-options.padding:options.padding:0,units=["years","months","days","hours","minutes","seconds"],unit=options.unit;return Array.isArray(options.unit)&&(units=options.unit,unit=void 0),diffRelative(base,this.plus(padding),{...options,numeric:"always",units,unit})}toRelativeCalendar(options={}){return this.isValid?diffRelative(options.base||_DateTime.fromObject({},{zone:this.zone}),this,{...options,numeric:"auto",units:["years","months","days"],calendary:!0}):null}static min(...dateTimes){if(!dateTimes.every(_DateTime.isDateTime))throw new InvalidArgumentError("min requires all arguments be DateTimes");return bestBy(dateTimes,i=>i.valueOf(),Math.min)}static max(...dateTimes){if(!dateTimes.every(_DateTime.isDateTime))throw new InvalidArgumentError("max requires all arguments be DateTimes");return bestBy(dateTimes,i=>i.valueOf(),Math.max)}static fromFormatExplain(text2,fmt,options={}){let{locale=null,numberingSystem=null}=options,localeToUse=Locale.fromOpts({locale,numberingSystem,defaultToEN:!0});return explainFromTokens(localeToUse,text2,fmt)}static fromStringExplain(text2,fmt,options={}){return _DateTime.fromFormatExplain(text2,fmt,options)}static buildFormatParser(fmt,options={}){let{locale=null,numberingSystem=null}=options,localeToUse=Locale.fromOpts({locale,numberingSystem,defaultToEN:!0});return new TokenParser(localeToUse,fmt)}static fromFormatParser(text2,formatParser,opts={}){if(isUndefined(text2)||isUndefined(formatParser))throw new InvalidArgumentError("fromFormatParser requires an input string and a format parser");let{locale=null,numberingSystem=null}=opts,localeToUse=Locale.fromOpts({locale,numberingSystem,defaultToEN:!0});if(!localeToUse.equals(formatParser.locale))throw new InvalidArgumentError(`fromFormatParser called with a locale of ${localeToUse}, but the format parser was created for ${formatParser.locale}`);let{result,zone,specificOffset,invalidReason}=formatParser.explainFromTokens(text2);return invalidReason?_DateTime.invalid(invalidReason):parseDataToDateTime(result,zone,opts,`format ${formatParser.format}`,text2,specificOffset)}static get DATE_SHORT(){return DATE_SHORT}static get DATE_MED(){return DATE_MED}static get DATE_MED_WITH_WEEKDAY(){return DATE_MED_WITH_WEEKDAY}static get DATE_FULL(){return DATE_FULL}static get DATE_HUGE(){return DATE_HUGE}static get TIME_SIMPLE(){return TIME_SIMPLE}static get TIME_WITH_SECONDS(){return TIME_WITH_SECONDS}static get TIME_WITH_SHORT_OFFSET(){return TIME_WITH_SHORT_OFFSET}static get TIME_WITH_LONG_OFFSET(){return TIME_WITH_LONG_OFFSET}static get TIME_24_SIMPLE(){return TIME_24_SIMPLE}static get TIME_24_WITH_SECONDS(){return TIME_24_WITH_SECONDS}static get TIME_24_WITH_SHORT_OFFSET(){return TIME_24_WITH_SHORT_OFFSET}static get TIME_24_WITH_LONG_OFFSET(){return TIME_24_WITH_LONG_OFFSET}static get DATETIME_SHORT(){return DATETIME_SHORT}static get DATETIME_SHORT_WITH_SECONDS(){return DATETIME_SHORT_WITH_SECONDS}static get DATETIME_MED(){return DATETIME_MED}static get DATETIME_MED_WITH_SECONDS(){return DATETIME_MED_WITH_SECONDS}static get DATETIME_MED_WITH_WEEKDAY(){return DATETIME_MED_WITH_WEEKDAY}static get DATETIME_FULL(){return DATETIME_FULL}static get DATETIME_FULL_WITH_SECONDS(){return DATETIME_FULL_WITH_SECONDS}static get DATETIME_HUGE(){return DATETIME_HUGE}static get DATETIME_HUGE_WITH_SECONDS(){return DATETIME_HUGE_WITH_SECONDS}};function friendlyDateTime(dateTimeish){if(DateTime.isDateTime(dateTimeish))return dateTimeish;if(dateTimeish&&dateTimeish.valueOf&&isNumber(dateTimeish.valueOf()))return DateTime.fromJSDate(dateTimeish);if(dateTimeish&&typeof dateTimeish=="object")return DateTime.fromObject(dateTimeish);throw new InvalidArgumentError(`Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`)}var import_ms2=__toESM(require_ms(),1),LA_TIMEZONE="America/Los_Angeles";function toISOOrThrow(dt){if(!dt.isValid)throw new Error(`Invalid DateTime: ${dt.invalidReason}`);let iso=dt.toISO();if(!iso)throw new Error("Failed to convert DateTime to ISO");return iso}function getDefaultFromDateTime(){return DateTime.now().setZone(LA_TIMEZONE).startOf("month")}function getDefaultToDateTime(){return DateTime.utc()}function getDefaultFromDate(){let dt=getDefaultFromDateTime();return toISOOrThrow(dt.toUTC())}function getDefaultToDate(){let dt=getDefaultToDateTime();return toISOOrThrow(dt.toUTC())}function isRelativeTime(input){return(0,import_ms2.default)(input)!==void 0}function parseBillingDate(dateStr,isEndDate=!1){let relativeMs=(0,import_ms2.default)(dateStr);if(relativeMs!==void 0)return new Date(Date.now()-relativeMs).toISOString();if(dateStr.includes("T")){if(!DateTime.fromISO(dateStr).isValid)throw new Error(`Invalid date: "${dateStr}". Expected YYYY-MM-DD, ISO 8601 (YYYY-MM-DDTHH:mm:ss), or relative (7d)`);return dateStr}let laDateTime=DateTime.fromISO(dateStr,{zone:LA_TIMEZONE}).startOf("day");if(!laDateTime.isValid)throw new Error(`Invalid date: "${dateStr}". Expected YYYY-MM-DD, ISO 8601, or relative (7d)`);let finalDateTime=isEndDate?laDateTime.plus({days:1}):laDateTime;return toISOOrThrow(finalDateTime.toUTC())}function getISOWeekNumber(dateStr){let date=new Date(dateStr);date.setUTCDate(date.getUTCDate()+4-(date.getUTCDay()||7));let yearStart=new Date(Date.UTC(date.getUTCFullYear(),0,1));return Math.ceil(((date.getTime()-yearStart.getTime())/864e5+1)/7)}function getISOWeekYear(dateStr){let date=new Date(dateStr);return date.setUTCDate(date.getUTCDate()+4-(date.getUTCDay()||7)),date.getUTCFullYear()}function getPeriodKey(chargePeriodStart,breakdownPeriod){if(!chargePeriodStart)return"Unknown";switch(breakdownPeriod){case"daily":return chargePeriodStart.substring(0,10);case"weekly":{let weekYear=getISOWeekYear(chargePeriodStart),weekNum=getISOWeekNumber(chargePeriodStart);return`${weekYear}-W${weekNum.toString().padStart(2,"0")}`}case"monthly":return chargePeriodStart.substring(0,7);default:return chargePeriodStart.substring(0,10)}}var VALID_BREAKDOWN_PERIODS=["daily","weekly","monthly"];function isValidBreakdownPeriod(value){return value!==void 0&&VALID_BREAKDOWN_PERIODS.includes(value)}var VALID_GROUP_BY_DIMENSIONS=["project","region"];function isValidGroupByDimension(value){return value!==void 0&&VALID_GROUP_BY_DIMENSIONS.includes(value)}var import_chalk45=__toESM(require_source(),1);function formatUsageAmount(amount,unit){if(unit==="managed_infrastructure_units")return formatUsageQuantity(amount,"MIUs",{showSmallValues:!0});let formattedAmount=amount.toFixed(2);return amount!==0&&Number(formattedAmount)===0?amount>0?"<$0.01":">-$0.01":`$${formattedAmount}`}function formatUsageQuantity(quantity,unit="",options={}){let displayUnit=quantity===1&&options.singularUnit?options.singularUnit:unit;if(options.unitKind==="digitalStorage")return formatStorageQuantity(quantity,unit,options.showSmallValues);let formatter=new Intl.NumberFormat("en-US",{maximumFractionDigits:2,notation:options.compact&&Math.abs(quantity)>=1e3?"compact":"standard"}),formattedQuantity=formatter.format(quantity),roundsToZero=formatter.format(Math.abs(quantity))===formatter.format(0),displayQuantity=options.showSmallValues&&quantity!==0&&roundsToZero?quantity>0?`<${formatter.format(.01)}`:`>${formatter.format(-.01)}`:formattedQuantity;return displayUnit?`${displayQuantity} ${displayUnit}`:displayQuantity}function formatStorageQuantity(quantity,unit,showSmallValues=!1){let units=["byte","kilobyte","megabyte","gigabyte","terabyte"],symbols=["B","KB","MB","GB","TB"],startIndex=units.indexOf(unit.toLowerCase());if(startIndex===-1)return formatUsageQuantity(quantity,unit,{showSmallValues});let value=quantity,unitIndex=startIndex;for(;Math.abs(value)>=1e3&&unitIndex<symbols.length-1;)value/=1e3,unitIndex++;return formatUsageQuantity(value,symbols[unitIndex],{showSmallValues})}var import_chalk44=__toESM(require_source(),1);function formatServiceName(name,service){return service.included?`${name} (Flat Rate CDN)`:name}function formatServiceCost(service,costUnit){return service.included?"Included":formatUsageAmount(service.cost,costUnit)}function isEmptyService(service){return(service.category==="subscription"||service.quantity===0)&&service.cost===0}function visibleServices(services){return[...services.values()].filter(service=>!isEmptyService(service)).map(service=>[service.name,service])}function outputUsageHeader(data,title3,elapsedSuffix){let{log}=output_manager_default;log(`${title3} for ${data.contextType} ${import_chalk44.default.bold(data.contextName)} ${elapsedSuffix}`),log(""),data.usingDefaults?log(`${import_chalk44.default.gray("Billing cycle:")} ${formatRange(data.fromDisplay,data.toDisplay)}`):log(`${import_chalk44.default.gray("Period:")} ${formatRange(data.fromDisplay,data.toDisplay)}`),log(import_chalk44.default.gray(`Accrued through ${formatDate2(data.usageThrough)} in ${data.costUnit==="managed_infrastructure_units"?"MIUs":"USD"}, before credits and discounts.`)),log("")}function outputHiddenServicesHint(hiddenCount){hiddenCount<=0||output_manager_default.log(import_chalk44.default.gray(`${hiddenCount} ${hiddenCount===1?"service":"services"} with no usage hidden. Add --json to include ${hiddenCount===1?"it":"them"}.`))}function formatRange(from,to){let start=parseDate(from),end=parseDate(to);if(!start||!end)return`${from} to ${to}`;let sameYear=start.year===end.year;return`${start.toFormat(sameYear?"LLL d":"LLL d, yyyy")}\u2013${end.toFormat("LLL d, yyyy")}`}function formatDate2(value){return parseDate(value)?.toFormat("LLL d, yyyy")??value}function parseDate(value){let date=DateTime.fromISO(value,{zone:"utc"});return date.isValid?date:null}function outputAggregated({data,startTime}){let{print,log}=output_manager_default;if(outputUsageHeader(data,"Usage",elapsed(Date.now()-startTime)),data.creditBalance){log(import_chalk45.default.bold("Current credit balance")),data.creditBalance.cadence&&log(` ${import_chalk45.default.gray("Cadence")} ${formatCadence(data.creditBalance.cadence)}`),log(` ${import_chalk45.default.gray("Used")} ${formatCredit(data.creditBalance.used,data.creditBalance.currency)} of ${formatCredit(data.creditBalance.allocated,data.creditBalance.currency)}`),log(` ${import_chalk45.default.gray("Remaining")} ${formatCredit(data.creditBalance.remaining,data.creditBalance.currency)}`);let progress=data.creditBalance.allocated>0?data.creditBalance.used/data.creditBalance.allocated*100:0;log(` ${import_chalk45.default.gray("Progress")} ${Math.round(progress)}%`),log("")}let allServices=[...data.services.entries()],sortedServices=visibleServices(data.services).sort((a,b)=>b[1].cost-a[1].cost);if(sortedServices.length===0){log("No usage data found for this period."),outputHiddenServicesHint(allServices.length);return}let usage2=sortedServices.filter(([,service])=>service.category==="usage"),subscriptions=sortedServices.filter(([,service])=>service.category==="subscription");usage2.length>0&&(log(import_chalk45.default.bold("Infrastructure")),printTable(print,usage2,"Infrastructure subtotal",data.costUnit),log("")),subscriptions.length>0&&(log(import_chalk45.default.bold("Subscription licenses")),printTable(print,subscriptions,"Subscriptions subtotal",data.costUnit),log("")),printCostSummary(print,usage2,subscriptions,data.costUnit),outputHiddenServicesHint(allServices.length-sortedServices.length)}function formatCadence(cadence){return cadence.split("_").map(word=>word[0].toUpperCase()+word.slice(1)).join(" ")}function formatCredit(amount,currency){return formatUsageAmount(amount,currency)}function printCostSummary(print,usage2,subscriptions,costUnit){let subscriptionCost=sumCost(subscriptions),infrastructureCost=sumCost(usage2),rows=[["Subscriptions",formatUsageAmount(subscriptionCost,costUnit)],["Infrastructure usage",formatUsageAmount(infrastructureCost,costUnit)],[import_chalk45.default.bold("Estimated total"),import_chalk45.default.bold(formatUsageAmount(subscriptionCost+infrastructureCost,costUnit))]],tablePrint=table(rows,{hsep:4,align:["l","r"]}).replace(/^/gm," ");print(`${tablePrint}
177
- `)}function sumCost(services){return services.reduce((total,[,service])=>total+service.cost,0)}function printTable(print,services,subtotalLabel,costUnit){let headers=["Service","Usage","Cost"],rows=services.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:service.category==="usage",singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,costUnit)]),subtotal=services.reduce((total,[,service])=>total+service.cost,0);rows.push([import_chalk45.default.bold(subtotalLabel),"",import_chalk45.default.bold(formatUsageAmount(subtotal,costUnit))]);let tablePrint=table([headers.map(header=>import_chalk45.default.bold(import_chalk45.default.cyan(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`
178
- ${tablePrint}
179
- `)}var import_chalk46=__toESM(require_source(),1);function getPeriodLabel(period){switch(period){case"daily":return"Daily";case"weekly":return"Weekly";case"monthly":return"Monthly"}}function outputBreakdown({data,breakdownPeriod,startTime}){let{print,log}=output_manager_default,periodLabel=getPeriodLabel(breakdownPeriod);outputUsageHeader(data,`${periodLabel} usage`,elapsed(Date.now()-startTime));let sortedPeriods=[...data.periodUsage.keys()].sort();if(sortedPeriods.length===0){log("No usage data found for this period.");return}let hiddenCount=0;for(let periodKey of sortedPeriods){let periodData=data.periodUsage.get(periodKey),allServices=[...periodData.services.entries()],sortedServices=visibleServices(periodData.services).sort((a,b)=>b[1].cost-a[1].cost);if(hiddenCount+=allServices.length-sortedServices.length,sortedServices.length===0)continue;log(`${import_chalk46.default.bold(import_chalk46.default.cyan(periodKey))} (${formatUsageAmount(periodData.totalCost,data.costUnit)})`);let rows=sortedServices.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:!0,singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,data.costUnit)]),tablePrint=table([["Service","Usage","Cost"].map(header=>import_chalk46.default.bold(import_chalk46.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
180
- `)}outputHiddenServicesHint(hiddenCount)}var import_chalk47=__toESM(require_source(),1);function getDimensionLabel(dimension){return dimension==="project"?"Project":"Region"}function outputGroupBy({data,groupByDimension,startTime}){let{print,log}=output_manager_default,dimensionLabel=getDimensionLabel(groupByDimension);outputUsageHeader(data,`Usage by ${dimensionLabel}`,elapsed(Date.now()-startTime));let sortedGroups=[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalCost-a[1].totalCost);if(sortedGroups.length===0){log("No usage data found for this period.");return}let hiddenCount=0;for(let[groupName,groupData]of sortedGroups){let allServices=[...groupData.services.entries()],services=visibleServices(groupData.services).sort((a,b)=>b[1].cost-a[1].cost);if(hiddenCount+=allServices.length-services.length,services.length===0)continue;log(`${import_chalk47.default.bold(import_chalk47.default.cyan(groupName))} (${formatUsageAmount(groupData.totalCost,data.costUnit)})`);let rows=services.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:!0,singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,data.costUnit)]),tablePrint=table([["Service","Usage","Cost"].map(header=>import_chalk47.default.bold(import_chalk47.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
181
- `)}log(""),log(`${import_chalk47.default.gray("Estimated total:")} ${import_chalk47.default.bold(formatUsageAmount(data.totalCost,data.costUnit))}`),outputHiddenServicesHint(hiddenCount)}function serializeService(service){return{name:service.name,product:service.product,quantity:service.quantity,unit:service.unit,cost:service.cost,included:service.included,category:service.category}}function outputJson(client,{data,fromDate,toDate,breakdownPeriod,groupByDimension}){let sortedServices=[...data.services.entries()].sort((a,b)=>b[1].cost-a[1].cost),jsonOutput={period:{from:fromDate,to:toDate},context:data.contextName,costUnit:data.costUnit};data.creditBalance&&(jsonOutput.creditBalance=data.creditBalance),breakdownPeriod&&(jsonOutput.breakdown={period:breakdownPeriod,data:[...data.periodUsage.keys()].sort().map(periodKey=>{let period=data.periodUsage.get(periodKey);return{periodKey,services:[...period.services.entries()].sort((a,b)=>b[1].cost-a[1].cost).map(([,service])=>serializeService(service)),totals:{cost:period.totalCost}}})}),groupByDimension&&(jsonOutput.groupBy={dimension:groupByDimension,data:[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalCost-a[1].totalCost).map(([name,group])=>({name,services:[...group.services.entries()].sort((a,b)=>b[1].cost-a[1].cost).map(([,service])=>serializeService(service)),totals:{cost:group.totalCost}}))}),jsonOutput.services=sortedServices.map(([,service])=>serializeService(service)),jsonOutput.totals={cost:data.totalCost},client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
182
- `)}var GROSS_COST_METRIC="gross_cost",SUMMARY_VIEW="byProduct",DETAIL_VIEW="byProductRegionProject";function getCostViews(groupByDimension){let views={};return groupByDimension&&(views[DETAIL_VIEW]={groupBy:["product","region","project"]}),views[SUMMARY_VIEW]={groupBy:["product"]},{views,summaryViewName:SUMMARY_VIEW,detailViewName:groupByDimension?DETAIL_VIEW:void 0}}async function usage(client){let{print,error,debug,spinner,warn}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry=new UsageTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("usage"),print(help(usageCommand,{stream:client.stderr,columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(fromFlag!==void 0&&parsedArgs.flags["--since"]!==void 0)return error("Pass only one of --since or --from. (--from is deprecated.)"),2;if(toFlag!==void 0&&parsedArgs.flags["--until"]!==void 0)return error("Pass only one of --until or --to. (--to is deprecated.)"),2;fromFlag!==void 0&&warn("`--from` is deprecated, please use `--since` instead"),toFlag!==void 0&&warn("`--to` is deprecated, please use `--until` instead");let sinceFlag=parsedArgs.flags["--since"]??fromFlag,untilFlag=parsedArgs.flags["--until"]??toFlag;if(untilFlag&&!sinceFlag)return error("--until requires --since. Omit both to show the current billing cycle."),2;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),2;let breakdownPeriod=breakdownFlag,groupByFlag=parsedArgs.flags["--group-by"];if(groupByFlag&&!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),2;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),2;let sinceDate,untilDate;try{sinceDate=sinceFlag?parseBillingDate(sinceFlag,!1):void 0,untilDate=untilFlag?parseBillingDate(untilFlag,!0):void 0}catch(err){return error(err.message),2}telemetry.trackCliOptionSince(parsedArgs.flags["--since"]),telemetry.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry.trackCliOptionFrom(fromFlag),telemetry.trackCliOptionTo(toFlag),telemetry.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry.trackCliFlagJson(parsedArgs.flags["--json"]),telemetry.trackCliOptionBreakdown(breakdownFlag),telemetry.trackCliOptionGroupBy(groupByFlag);let contextName,contextType,teamId,billingPeriod,hasPrecommitment=!1;try{let scope=await getScope(client),owner=scope.team??scope.user;contextName=scope.contextName,contextType=scope.team?"team":"personal account",teamId=scope.team?.id;let billing=owner?.billing;billingPeriod=billing?.subscriptions?.find(subscription=>subscription.frequency.interval==="month"&&subscription.frequency.intervalCount===1)?.period??billing?.period,hasPrecommitment=billing?.plan==="enterprise"||billing?.planIteration==="plus"||billing?.plan==="pro"&&billing?.planIteration==="flex"}catch(err){if((0,import_error_utils2.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!sinceFlag,fromDate=sinceDate??(billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate()),toDate=untilDate??(sinceFlag?new Date().toISOString():billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()),fromDisplay=sinceFlag&&!isRelativeTime(sinceFlag)?sinceFlag:extractDatePortion(fromDate),toDisplay=untilFlag&&!isRelativeTime(untilFlag)?untilFlag:extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk48.default.bold(contextName)}`);try{let query=new URLSearchParams;teamId&&query.set("teamId",teamId);let viewPlan=getCostViews(groupByDimension),queryString=query.toString(),costsRequest=client.fetch(`/v2/billing/costs${queryString?`?${queryString}`:""}`,{method:"POST",body:{from:fromDate,to:toDate,metrics:[GROSS_COST_METRIC,"quantity"],format:"timeseries",views:viewPlan.views,userAgent:"vercel-cli.usage"},useCurrentTeam:!1}),commitmentRequest=usingDefaults&&teamId&&hasPrecommitment?client.fetch(`/v1/invoices/pre-commitment-usage?teamId=${encodeURIComponent(teamId)}`,{useCurrentTeam:!1}).catch(err=>(debug(`Unable to fetch infrastructure credit: ${String(err)}`),null)):Promise.resolve(null),[response,commitmentUsage]=await Promise.all([costsRequest,commitmentRequest]),usageData=processCosts(response,{summaryView:response.results.views[viewPlan.summaryViewName],detailView:viewPlan.detailViewName?response.results.views[viewPlan.detailViewName]:void 0,contextName,contextType,scope:parsedArgs.flags["--scope"],fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension});return attachCredit(usageData,commitmentUsage),asJson?(outputJson(client,{data:usageData,fromDate,toDate,breakdownPeriod,groupByDimension}),0):(groupByDimension?outputGroupBy({data:usageData,groupByDimension,startTime:start}):breakdownPeriod?outputBreakdown({data:usageData,breakdownPeriod,startTime:start}):outputAggregated({data:usageData,startTime:start}),0)}catch(err){return isAPIError(err)&&err.status===404&&err.code==="costs_not_found"?error(`Billing cost data is unavailable for ${fromDisplay} through ${toDisplay}. This does not mean usage was zero. It usually means the team has no active subscription for that range, or the range is before the team's billing data starts. Check that the selected team and date range are correct.`):output_manager_default.prettyError(err),1}}function roundToHundredths(value){return Math.round((value+Number.EPSILON)*100)/100}function getUsageThrough(queriedAt,toDisplay){let queriedDate=extractDatePortion(queriedAt);return queriedDate<toDisplay?queriedDate:toDisplay}function attachCredit(usageData,commitmentUsage){if(!commitmentUsage)return;let creditLedger=commitmentUsage.creditLedgers.find(ledger=>ledger.currency===usageData.costUnit);if(!creditLedger)return;let used=roundToHundredths(creditLedger.total-creditLedger.remaining);usageData.creditBalance={cadence:commitmentUsage.cadence,currency:creditLedger.currency,allocated:creditLedger.total,used,remaining:creditLedger.remaining}}function processCosts(response,options){let{summaryView,detailView,contextName,contextType,scope,fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension}=options;if(!summaryView)throw new Error("The billing API did not return the requested usage summary.");let costUnit=getCostUnit(response);if(response.availableCurrencies?.some(currency=>currency!==costUnit))throw new Error("Can't show complete costs for this date range because some costs use a different billing currency. Choose a date range within the current billing currency or view usage in the dashboard.");let products=response.results.dimensionsMeta.product?.values??{},projects=response.results.dimensionsMeta.project?.values??{},regions=response.results.dimensionsMeta.region?.values??{};if(groupByDimension&&(!detailView||!detailView.groupBy.includes(groupByDimension)))throw new Error(`Usage cannot be grouped by ${groupByDimension} for this team.`);let services=new Map,periodUsage=new Map,groupByUsage=new Map,totalCost=0;for(let result of summaryView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses");if(addService(services,serviceName,aggregation),totalCost+=aggregation.cost,breakdownPeriod)for(let index=0;index<response.results.times.length;index++){let periodKey=getPeriodKey(response.results.times[index],breakdownPeriod),period=periodUsage.get(periodKey)??emptyAggregation(),sample=aggregateResult(result,product,serviceName,response.metrics,index,productMetadata?.category==="Subscription Licenses");addService(period.services,serviceName,sample),period.totalCost+=sample.cost,periodUsage.set(periodKey,period)}}if(groupByDimension)for(let result of detailView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses"),id=result.dimensionValues[groupByDimension],groupName=id?(groupByDimension==="project"?projects:regions)[id]?.title??id:groupByDimension==="project"?"(unattributed)":"(global)",group=groupByUsage.get(groupName)??emptyAggregation();addService(group.services,serviceName,aggregation),group.totalCost+=aggregation.cost,groupByUsage.set(groupName,group)}return{contextName,contextType,scope,fromDisplay,toDisplay,usageThrough:getUsageThrough(response.queriedAt,toDisplay),usingDefaults,costUnit,services,periodUsage,groupByUsage,totalCost}}function getCostUnit(response){let unit=response.metrics.find(metric=>metric.slug===GROSS_COST_METRIC)?.unit;return unit?.singular==="MIU"||unit?.plural==="MIUs"?"managed_infrastructure_units":"USD"}function aggregateResult(result,product,name,metrics,sampleIndex,isSubscription=!1){let grossCostIndex=result.metrics.indexOf(GROSS_COST_METRIC),quantityIndex=result.metrics.findIndex(metric=>metric!==GROSS_COST_METRIC),quantityMetric=metrics.find(metric=>metric.slug===result.metrics[quantityIndex]),values=sampleIndex===void 0?result.totalValue:result.values[sampleIndex]??[],cost=grossCostIndex===-1?0:values[grossCostIndex]??0,included=result.flatRate===!0,rawQuantity=quantityIndex===-1?0:values[quantityIndex]??0,quantity=isSubscription&&sampleIndex===void 0&&quantityIndex!==-1?result.values.reduce((maximum,sample)=>Math.max(maximum,sample[quantityIndex]??0),0):rawQuantity,units=getQuantityUnits(quantityMetric,product,isSubscription);return{name,product,quantity,...units,cost,included,category:isSubscription?"subscription":"usage"}}function getQuantityUnits(metric,product,isSubscription){if(isSubscription)return{unit:"licenses",singularUnit:"license"};if(!metric?.unit)return{};if(metric.unit.kind==="custom"){let singularUnit=metric.unit.singular,unit2=metric.unit.plural??singularUnit;return!unit2||singularUnit===metric.title||unit2===metric.title?{}:{unit:unit2,singularUnit}}if(metric.unit.kind==="digitalStorage"&&metric.unit.name)return{unit:metric.unit.name,unitKind:metric.unit.kind};let unit=metric.unit.name;return!unit||unit===metric.title||unit===product?{}:{unit,unitKind:metric.unit.kind}}function addService(services,name,value){let key=JSON.stringify([value.product,value.included]),existing=services.get(key);if(!existing){services.set(key,{...value,name});return}let previousQuantity=existing.quantity;existing.quantity=existing.category==="subscription"?Math.max(previousQuantity,value.quantity):previousQuantity+value.quantity,existing.cost+=value.cost}function emptyAggregation(){return{services:new Map,totalCost:0}}export{connex,install,main2 as integration,main as integrationResource,main3 as storage,usage};
176
+ `)}var import_chalk43=__toESM(require_source(),1);var StorageUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentStore(v){v&&this.trackCliArgument({arg:"store",value:this.redactedValue})}trackCliOptionProject(v){v&&this.trackCliOption({option:"project",value:this.redactedValue})}trackCliOptionEnvironment(v){v?.length&&this.trackCliOption({option:"environment",value:this.redactedValue})}trackCliOptionAuth(v){v&&this.trackCliOption({option:"auth",value:STORAGE_AUTH_MODES.includes(v.toLowerCase())?v.toLowerCase():this.redactedValue})}trackCliFlagAddRwToken(v){v&&this.trackCliFlag("add-rw-token")}trackCliOptionPrefix(v){v&&this.trackCliOption({option:"prefix",value:this.redactedValue})}trackCliFlagDryRun(v){v&&this.trackCliFlag("dry-run")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}trackCliFlagJson(v){v&&this.trackCliFlag("json")}};function sameEnvironments(a,b){if(a.length!==b.length)return!1;let left=new Set(a);return b.every(value=>left.has(value))}async function update3(client,argv){let telemetry=new StorageUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(updateSubcommand3.options),parsedArguments;try{parsedArguments=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArguments,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,dryRun=flags["--dry-run"]??!1,skipConfirmation=flags["--yes"]??!1,addRwTokenFlag=flags["--add-rw-token"]??!1;if(telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliFlagYes(skipConfirmation),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagAddRwToken(addRwTokenFlag),telemetry.trackCliOptionAuth(flags["--auth"]),telemetry.trackCliOptionPrefix(flags["--prefix"]),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliOptionEnvironment(flags["--environment"]),telemetry.trackCliArgumentStore(args[0]),args.length<1)return failWith(client,{reason:AGENT_REASON.MISSING_ARGUMENTS,message:"You must specify a storage resource. See `--help` for details."});if(args.length>1)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:"Too many arguments. Usage: `vercel storage update <store> [--project <name-or-id>]`."});if(asJson&&!skipConfirmation&&!dryRun)return output_manager_default.error("--json requires --yes or --dry-run to skip confirmation prompts"),2;let authMode=parseAuthMode(flags["--auth"]);if(!authMode.valid)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:authMode.error});let environmentsFlag=resolveEnvironments(flags["--environment"]);if(!environmentsFlag.valid)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:environmentsFlag.message});let prefixFlag=resolvePrefix(flags["--prefix"]);if(!prefixFlag.valid)return failWith(client,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:prefixFlag.message});let scope=await resolveStorageScope(client,flags["--project"]);if(typeof scope=="number")return scope;let store=await resolveStorageStore(client,args[0],scope.accountId);if(typeof store=="number")return store;let target=resolveProjectConnection(store,scope.project.id,environmentsFlag.explicit?environmentsFlag.environments:void 0);if(target.status==="not_found")return failWith(client,{reason:AGENT_REASON.NOT_FOUND,message:`${store.name} is not connected to ${scope.project.name}.`,next:[{command:getCommandNamePlain(`storage connect ${store.name}`),when:"create the connection"}]});if(target.status==="ambiguous")return failWith(client,{reason:"ambiguous_connection",message:`${scope.project.name} has more than one connection to ${store.name} (${target.connections.map(connection2=>connection2.environments.join("+")).join(", ")}). Pass --environment to pick one.`});let connection=target.connection,currentEnvVars=connection.environmentVariables??[],currentAuth=inferConnectionAuth(store,connection.environmentVariables),hasOidcVars=currentEnvVars.some(name=>name.endsWith("_STORE_ID")),hasRwTokenNow=currentEnvVars.some(name=>name.endsWith("_READ_WRITE_TOKEN")),requestedMode=authMode.explicit?authMode.mode:currentAuth==="token"?"token":"oidc",addRwToken=addRwTokenFlag||!authMode.explicit&&hasRwTokenNow,auth=resolveStorageAuth({store,mode:requestedMode,addRwToken});if(!auth.valid)return failWith(client,{reason:auth.reason,message:auth.error,hint:auth.hint});let environments=environmentsFlag.explicit?environmentsFlag.environments:connection.environments,currentPrefix=normalizeEnvVarPrefix(connection.envVarPrefix),prefix=prefixFlag.prefix!==void 0?prefixFlag.prefix:currentPrefix,environmentsChanged=environmentsFlag.explicit&&!sameEnvironments(environments,connection.environments),prefixChanged=flags["--prefix"]!==void 0&&prefix!==currentPrefix,needsOidcUpgrade=storeSupportsOidc(store)&&auth.auth.effective==="oidc"&&!hasOidcVars,rwTokenChanged=storeSupportsOidc(store)&&auth.auth.readWriteToken!==hasRwTokenNow;if(!environmentsChanged&&!prefixChanged&&!needsOidcUpgrade&&!rwTokenChanged)return failWith(client,{reason:AGENT_REASON.NO_CHANGES_REQUESTED,message:`Nothing to update: ${store.name} on ${scope.project.name} already matches the requested configuration.`,next:[{command:getCommandNamePlain(`storage status ${store.name}`),when:"inspect the current connection"}]});let plan=buildStoragePlan({action:"update",dryRun,store,projects:[scope.project],environments,envVarPrefix:prefix,auth:auth.auth,envVars:planUpdateEnvVars({store,auth:auth.auth,prefix,connection,prefixChanged})});if(dryRun)return writeStorageResult(client,plan,{applied:!1,asJson}),0;asJson||printStoragePlan(client,plan,!1);let confirmed=await confirmStorageChange(client,{skipConfirmation,question:"Apply this change?"});if(typeof confirmed=="number")return confirmed;if(!confirmed)return output_manager_default.log("Canceled"),0;try{output_manager_default.spinner("Updating storage connection\u2026",500),needsOidcUpgrade&&await upgradeStoreConnectionToOidc(client,{store,connectionId:connection.id,auth:auth.auth,accountId:scope.accountId});let patchEnvironments=environmentsChanged?environments:void 0,patchPrefix=prefixChanged?prefix??null:void 0,patchSkipReadWriteToken=storeSupportsOidc(store)?!auth.auth.readWriteToken:void 0;(patchEnvironments!==void 0||patchPrefix!==void 0||patchSkipReadWriteToken!==void 0)&&await updateStoreConnection(client,{store,connectionId:connection.id,accountId:scope.accountId,environments:patchEnvironments,envVarPrefix:patchPrefix,skipReadWriteToken:patchSkipReadWriteToken})}catch(error){return output_manager_default.stopSpinner(),failWith(client,{reason:AGENT_REASON.API_ERROR,message:`A problem occurred while updating the connection: ${error.message}`})}output_manager_default.stopSpinner();let verified=await readBackConnectionEnvVars(client,{store,projectId:scope.project.id,environments,accountId:scope.accountId}),appliedPlan=verified?buildStoragePlan({action:"update",dryRun:!1,store,projects:[scope.project],environments,envVarPrefix:prefix,auth:auth.auth,envVars:diffEnvVarNames(currentEnvVars,verified)}):plan;return writeStorageResult(client,appliedPlan,{applied:!0,asJson,message:`Updated ${import_chalk43.default.bold(store.name)} on ${import_chalk43.default.bold(scope.project.name)} (${environments.join(", ")})`,next:getStorageEnvPullNext(client,scope,[...connection.environments,...environments])}),0}var COMMAND_CONFIG5={list:getCommandAliases(listSubcommand3),create:getCommandAliases(createSubcommand2),inspect:getCommandAliases(getSubcommand),delete:getCommandAliases(deleteSubcommand),connect:getCommandAliases(connectSubcommand2),status:getCommandAliases(statusSubcommand),update:getCommandAliases(updateSubcommand3),disconnect:getCommandAliases(disconnectSubcommand2)};async function main3(client){let telemetry=new StorageTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),getFlagsSpecification(storageCommand.options),{permissive:!0})}catch(error){return printError(error),2}let needHelp=!!parsedArguments.flags["--help"],subArgs=parsedArguments.args.slice(1),{subcommand,subcommandOriginal,args}=getSubcommand2(subArgs,COMMAND_CONFIG5);if(!subcommand)return needHelp?(telemetry.trackCliFlagHelp("storage"),output_manager_default.print(help(storageCommand,{stream:client.stderr,columns:client.stderr.columns})),0):subArgs.length>0?(output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG5)),2):(output_manager_default.print(help(storageCommand,{stream:client.stderr,columns:client.stderr.columns})),2);function printHelp(command){output_manager_default.print(help(command,{stream:client.stderr,columns:client.stderr.columns,parent:storageCommand}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(listSubcommand3),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"create":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(createSubcommand2),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),create2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(getSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),subcommandOriginal==="get"&&warnDeprecatedSubcommand(client,"storage get","storage inspect"),get(client,args));case"delete":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(deleteSubcommand),0):(telemetry.trackCliSubcommandDelete(subcommandOriginal),deleteStore(client,args));case"connect":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(connectSubcommand2),0):(telemetry.trackCliSubcommandConnect(subcommandOriginal),connect2(client,args));case"status":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(statusSubcommand),0):(telemetry.trackCliSubcommandStatus(subcommandOriginal),status(client,args));case"update":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(updateSubcommand3),0):(telemetry.trackCliSubcommandUpdate(subcommandOriginal),update3(client,args));case"disconnect":return needHelp?(telemetry.trackCliFlagHelp("storage",subcommandOriginal),printHelp(disconnectSubcommand2),0):(telemetry.trackCliSubcommandDisconnect(subcommandOriginal),disconnect2(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG5)),2}}export{connex,install,main2 as integration,main as integrationResource,main3 as storage};