@mtndev/cli 0.0.0-dev-20260626045221 → 0.0.0-dev-20260914234436

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 (331) hide show
  1. package/CHANGELOG.md +84 -3
  2. package/cjs/__chunks/2FSYDFUV.cjs +146 -0
  3. package/cjs/__chunks/3A5ZYU5M.cjs +105 -0
  4. package/cjs/__chunks/3NOHGUCF.cjs +9 -0
  5. package/cjs/__chunks/3T2LXW7J.cjs +387 -0
  6. package/cjs/__chunks/4XT5JEAS.cjs +1 -0
  7. package/cjs/__chunks/AZEB4H4I.cjs +208 -0
  8. package/cjs/__chunks/B5ENMOCD.cjs +288 -0
  9. package/cjs/__chunks/B6XM5KSF.cjs +338 -0
  10. package/cjs/__chunks/BDU2UCE5.cjs +1 -0
  11. package/cjs/__chunks/BLMSMR5E.cjs +46 -0
  12. package/cjs/__chunks/CMUD7LLN.cjs +47 -0
  13. package/cjs/__chunks/DTQ2LB3I.cjs +49 -0
  14. package/cjs/__chunks/FM5MVRQF.cjs +23 -0
  15. package/cjs/__chunks/FRHST54J.cjs +135 -0
  16. package/cjs/__chunks/FU4VP2LN.cjs +1 -0
  17. package/cjs/__chunks/G5K4PVIL.cjs +26 -0
  18. package/cjs/__chunks/{IEGW3TSF.cjs → GU3R54MK.cjs} +45 -18
  19. package/cjs/__chunks/GUL36IFZ.cjs +61 -0
  20. package/cjs/__chunks/GZMTNK5N.cjs +1 -0
  21. package/cjs/__chunks/H74JSDBU.cjs +30 -0
  22. package/cjs/__chunks/{EMMC33QA.cjs → JB7T7PKQ.cjs} +170 -33
  23. package/cjs/__chunks/JSL2JDMW.cjs +1 -0
  24. package/cjs/__chunks/K4QNHRTP.cjs +163 -0
  25. package/cjs/__chunks/KU76LC42.cjs +192 -0
  26. package/cjs/__chunks/LFDSHANP.cjs +34 -0
  27. package/cjs/__chunks/LHE24ECK.cjs +192 -0
  28. package/cjs/__chunks/LIKQ3SI4.cjs +1 -0
  29. package/cjs/__chunks/LXDF5QVZ.cjs +313 -0
  30. package/cjs/__chunks/LXOOJR2R.cjs +74 -0
  31. package/cjs/__chunks/N5MXFOQZ.cjs +167 -0
  32. package/cjs/__chunks/N7D56LPP.cjs +25 -0
  33. package/cjs/__chunks/NFXQNOQH.cjs +393 -0
  34. package/cjs/__chunks/NLKJIUEX.cjs +126 -0
  35. package/cjs/__chunks/NT2XXAI6.cjs +89 -0
  36. package/cjs/__chunks/NWZGFHKH.cjs +121 -0
  37. package/cjs/__chunks/R3GUC7O7.cjs +110 -0
  38. package/cjs/__chunks/RPVAXPJ4.cjs +1 -0
  39. package/cjs/__chunks/S3LVCWPN.cjs +23 -0
  40. package/cjs/__chunks/SBBNW2BF.cjs +249 -0
  41. package/cjs/__chunks/T2A7TN4F.cjs +81 -0
  42. package/cjs/__chunks/TKNNDDIB.cjs +97 -0
  43. package/cjs/__chunks/TNSRDJPR.cjs +1 -0
  44. package/cjs/__chunks/UWHPE2GI.cjs +20 -0
  45. package/cjs/__chunks/W6K7BV74.cjs +1 -0
  46. package/cjs/__chunks/WBOQ6AUN.cjs +320 -0
  47. package/cjs/__chunks/WHGN5PZI.cjs +299 -0
  48. package/cjs/__chunks/WOYF2L6T.cjs +11 -0
  49. package/cjs/__chunks/X26XY2N6.cjs +18 -0
  50. package/cjs/__chunks/XMKOKRXZ.cjs +16 -0
  51. package/cjs/__chunks/XTJPQ3EX.cjs +1 -0
  52. package/cjs/__chunks/YRHFKTW2.cjs +63 -0
  53. package/cjs/commands/aws/ec2/allow-ip/handler.cjs +12 -0
  54. package/cjs/commands/aws/ec2/allow-ip/handler.d.ts +6 -0
  55. package/cjs/commands/aws/ec2/allow-ip/index.cjs +55 -0
  56. package/cjs/commands/aws/ec2/allow-ip/index.d.ts +3 -0
  57. package/cjs/commands/aws/ec2/allow-ip/schema.cjs +13 -0
  58. package/cjs/commands/aws/ec2/allow-ip/schema.d.ts +33 -0
  59. package/cjs/commands/aws/ec2/allow-ip/utils.cjs +39 -0
  60. package/cjs/commands/aws/ec2/allow-ip/utils.d.ts +189 -0
  61. package/cjs/commands/aws/iam/admin-group.cjs +15 -0
  62. package/cjs/commands/aws/iam/admin-group.d.ts +55 -0
  63. package/cjs/commands/aws/iam/break-glass/handler.cjs +12 -0
  64. package/cjs/commands/aws/iam/break-glass/handler.d.ts +7 -0
  65. package/cjs/commands/aws/iam/break-glass/index.cjs +19 -0
  66. package/cjs/commands/aws/iam/break-glass/index.d.ts +2 -0
  67. package/cjs/commands/aws/iam/break-glass/schema.cjs +12 -0
  68. package/cjs/commands/aws/iam/break-glass/schema.d.ts +25 -0
  69. package/cjs/commands/aws/iam/check-admin/handler.cjs +10 -0
  70. package/cjs/commands/aws/iam/check-admin/handler.d.ts +5 -0
  71. package/cjs/commands/aws/iam/check-admin/index.cjs +17 -0
  72. package/cjs/commands/aws/iam/check-admin/index.d.ts +2 -0
  73. package/cjs/commands/aws/iam/check-admin/schema.cjs +12 -0
  74. package/cjs/commands/aws/iam/check-admin/schema.d.ts +19 -0
  75. package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.cjs +28 -0
  76. package/cjs/commands/aws/iam/policies/sts-federation.cjs +19 -0
  77. package/cjs/commands/aws/iam/policies/user-admins-deny-list.cjs +183 -0
  78. package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.cjs +49 -0
  79. package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.cjs +64 -0
  80. package/cjs/commands/aws/iam/policies/user-admins-write-list.cjs +125 -0
  81. package/cjs/commands/aws/iam/remove-admin/handler.cjs +11 -0
  82. package/cjs/commands/aws/iam/remove-admin/handler.d.ts +6 -0
  83. package/cjs/commands/aws/iam/remove-admin/index.cjs +18 -0
  84. package/cjs/commands/aws/iam/remove-admin/index.d.ts +2 -0
  85. package/cjs/commands/aws/iam/remove-admin/schema.cjs +12 -0
  86. package/cjs/commands/aws/iam/remove-admin/schema.d.ts +28 -0
  87. package/cjs/commands/aws/iam/setup-acl/handler.cjs +14 -0
  88. package/cjs/commands/aws/iam/setup-acl/handler.d.ts +6 -0
  89. package/cjs/commands/aws/iam/setup-acl/index.cjs +33 -0
  90. package/cjs/commands/aws/iam/setup-acl/index.d.ts +3 -0
  91. package/cjs/commands/aws/iam/setup-acl/schema.cjs +7 -0
  92. package/cjs/commands/aws/iam/setup-acl/schema.d.ts +24 -0
  93. package/cjs/commands/aws/iam/setup-acl/utils.cjs +20 -0
  94. package/cjs/commands/aws/iam/setup-acl/utils.d.ts +61 -0
  95. package/cjs/commands/aws/iam/users/handler.cjs +12 -0
  96. package/cjs/commands/aws/iam/users/handler.d.ts +5 -0
  97. package/cjs/commands/aws/iam/users/index.cjs +41 -0
  98. package/cjs/commands/aws/iam/users/index.d.ts +3 -0
  99. package/cjs/commands/aws/iam/users/schema.cjs +7 -0
  100. package/cjs/commands/aws/iam/users/schema.d.ts +18 -0
  101. package/cjs/commands/aws/iam/users/utils.cjs +30 -0
  102. package/cjs/commands/aws/iam/users/utils.d.ts +119 -0
  103. package/cjs/commands/aws/index.cjs +229 -0
  104. package/cjs/commands/aws/index.d.ts +14 -0
  105. package/cjs/commands/aws/route53/add-record/handler.cjs +18 -0
  106. package/cjs/commands/aws/route53/add-record/handler.d.ts +36 -0
  107. package/cjs/commands/aws/route53/add-record/index.cjs +57 -0
  108. package/cjs/commands/aws/route53/add-record/index.d.ts +3 -0
  109. package/cjs/commands/aws/route53/add-record/schema.cjs +11 -0
  110. package/cjs/commands/aws/route53/add-record/schema.d.ts +45 -0
  111. package/cjs/commands/aws/route53/add-record/utils.cjs +37 -0
  112. package/cjs/commands/aws/route53/add-record/utils.d.ts +216 -0
  113. package/cjs/commands/aws/route53/remove-record/handler.cjs +14 -0
  114. package/cjs/commands/aws/route53/remove-record/handler.d.ts +6 -0
  115. package/cjs/commands/aws/route53/remove-record/index.cjs +18 -0
  116. package/cjs/commands/aws/route53/remove-record/index.d.ts +2 -0
  117. package/cjs/commands/aws/route53/remove-record/schema.cjs +8 -0
  118. package/cjs/commands/aws/route53/remove-record/schema.d.ts +30 -0
  119. package/cjs/commands/aws/schema.cjs +10 -0
  120. package/cjs/commands/aws/schema.d.ts +13 -0
  121. package/cjs/commands/aws/ses/send-email/handler.cjs +12 -0
  122. package/cjs/commands/aws/ses/send-email/handler.d.ts +5 -0
  123. package/cjs/commands/aws/ses/send-email/index.cjs +23 -0
  124. package/cjs/commands/aws/ses/send-email/index.d.ts +3 -0
  125. package/cjs/commands/aws/ses/send-email/schema.cjs +7 -0
  126. package/cjs/commands/aws/ses/send-email/schema.d.ts +39 -0
  127. package/cjs/commands/aws/ses/send-email/utils.cjs +11 -0
  128. package/cjs/commands/aws/ses/send-email/utils.d.ts +47 -0
  129. package/cjs/commands/aws/ses/smtp-password.cjs +10 -0
  130. package/cjs/commands/aws/ses/smtp-password.d.ts +21 -0
  131. package/cjs/commands/aws/utils/exec-aws.cjs +16 -0
  132. package/cjs/commands/aws/utils/exec-aws.d.ts +79 -0
  133. package/cjs/commands/aws/utils/resolve-policy-path.cjs +6 -0
  134. package/cjs/commands/aws/utils/resolve-policy-path.d.ts +8 -0
  135. package/cjs/commands/aws/utils/resolve-profile.cjs +11 -0
  136. package/cjs/commands/aws/utils/resolve-profile.d.ts +28 -0
  137. package/cjs/commands/aws/utils/tty.cjs +10 -0
  138. package/cjs/commands/aws/utils/tty.d.ts +24 -0
  139. package/cjs/commands/db/create-readonly-user/handler.cjs +11 -0
  140. package/cjs/commands/db/create-readonly-user/handler.d.ts +5 -0
  141. package/cjs/commands/db/create-readonly-user/index.cjs +40 -0
  142. package/cjs/commands/db/create-readonly-user/index.d.ts +3 -0
  143. package/cjs/commands/db/create-readonly-user/mysql.cjs +9 -0
  144. package/cjs/commands/db/create-readonly-user/mysql.d.ts +33 -0
  145. package/cjs/commands/db/create-readonly-user/postgres.cjs +9 -0
  146. package/cjs/commands/db/create-readonly-user/postgres.d.ts +31 -0
  147. package/cjs/commands/db/create-readonly-user/schema.cjs +12 -0
  148. package/cjs/commands/db/create-readonly-user/schema.d.ts +55 -0
  149. package/cjs/commands/db/create-readonly-user/utils.cjs +22 -0
  150. package/cjs/commands/db/create-readonly-user/utils.d.ts +112 -0
  151. package/cjs/commands/db/index.cjs +44 -0
  152. package/cjs/commands/db/index.d.ts +6 -0
  153. package/cjs/commands/doppler/handler.cjs +6 -4
  154. package/cjs/commands/doppler/index.cjs +32 -5
  155. package/cjs/commands/doppler/index.d.ts +1 -0
  156. package/cjs/commands/doppler/schema.cjs +10 -2
  157. package/cjs/commands/doppler/schema.d.ts +233 -17
  158. package/cjs/commands/doppler/set-secret.cjs +19 -0
  159. package/cjs/commands/doppler/set-secret.d.ts +113 -0
  160. package/cjs/commands/doppler/utils.cjs +6 -2
  161. package/cjs/commands/doppler/utils.d.ts +32 -8
  162. package/cjs/commands/icons/schema.d.ts +1 -1
  163. package/cjs/commands/index.cjs +91 -12
  164. package/esm/__chunks/2FTTEFEK.js +97 -0
  165. package/esm/__chunks/33UYMUQD.js +338 -0
  166. package/esm/__chunks/3BKWTHLJ.js +25 -0
  167. package/esm/__chunks/3HE4BEJX.js +105 -0
  168. package/esm/__chunks/3QLI5BDL.js +387 -0
  169. package/esm/__chunks/5GIUAFXL.js +89 -0
  170. package/esm/__chunks/73BJG53F.js +11 -0
  171. package/esm/__chunks/7VF4Q43Q.js +0 -0
  172. package/esm/__chunks/AEDEAYF5.js +0 -0
  173. package/esm/__chunks/AZCP3SFJ.js +0 -0
  174. package/esm/__chunks/B2DVQ2UL.js +61 -0
  175. package/esm/__chunks/CVQVHLW5.js +0 -0
  176. package/esm/__chunks/D62SPZXC.js +0 -0
  177. package/esm/__chunks/DLEJ25GZ.js +121 -0
  178. package/esm/__chunks/DMYFNF54.js +192 -0
  179. package/esm/__chunks/DNFTUMGD.js +23 -0
  180. package/esm/__chunks/DVKD6YSR.js +49 -0
  181. package/esm/__chunks/EMSH4P76.js +20 -0
  182. package/esm/__chunks/FFKFVMIE.js +167 -0
  183. package/esm/__chunks/FNXUONAV.js +110 -0
  184. package/esm/__chunks/G4NJHFFU.js +320 -0
  185. package/esm/__chunks/IEOGAQYI.js +46 -0
  186. package/esm/__chunks/IZFGBYGE.js +34 -0
  187. package/esm/__chunks/J34UVKLA.js +26 -0
  188. package/esm/__chunks/JZPBBBIG.js +74 -0
  189. package/esm/__chunks/KWUJP5MG.js +135 -0
  190. package/esm/__chunks/M35URMT4.js +313 -0
  191. package/esm/__chunks/NF3M2L6C.js +81 -0
  192. package/esm/__chunks/PNPPDYKC.js +299 -0
  193. package/esm/__chunks/QFXN4EHM.js +393 -0
  194. package/esm/__chunks/QKDDLIWD.js +146 -0
  195. package/esm/__chunks/QSE66AKY.js +208 -0
  196. package/esm/__chunks/QUF7PS4R.js +18 -0
  197. package/esm/__chunks/S7IJPJ4R.js +126 -0
  198. package/esm/__chunks/SD3E3EPH.js +163 -0
  199. package/esm/__chunks/T3TTUHTW.js +30 -0
  200. package/esm/__chunks/TIOVE6HR.js +0 -0
  201. package/esm/__chunks/TXKMEIDQ.js +0 -0
  202. package/esm/__chunks/U7HAE2RF.js +288 -0
  203. package/esm/__chunks/UXWY7BYE.js +63 -0
  204. package/esm/__chunks/VKAKISRG.js +192 -0
  205. package/esm/__chunks/WD2YR6I7.js +0 -0
  206. package/esm/__chunks/WOZFZKFY.js +0 -0
  207. package/esm/__chunks/XI7GZDE2.js +0 -0
  208. package/esm/__chunks/XOUWDB3T.js +249 -0
  209. package/esm/__chunks/XQN2TA4S.js +23 -0
  210. package/esm/__chunks/XXK32TIM.js +16 -0
  211. package/esm/__chunks/{O262GK4B.js → YGWTVPZE.js} +164 -27
  212. package/esm/__chunks/{XK7EMDSU.js → YRG7PT33.js} +44 -17
  213. package/esm/__chunks/ZHKVJO2U.js +47 -0
  214. package/esm/__chunks/ZO55YUSY.js +9 -0
  215. package/esm/commands/aws/ec2/allow-ip/handler.d.ts +6 -0
  216. package/esm/commands/aws/ec2/allow-ip/handler.js +12 -0
  217. package/esm/commands/aws/ec2/allow-ip/index.d.ts +3 -0
  218. package/esm/commands/aws/ec2/allow-ip/index.js +55 -0
  219. package/esm/commands/aws/ec2/allow-ip/schema.d.ts +33 -0
  220. package/esm/commands/aws/ec2/allow-ip/schema.js +13 -0
  221. package/esm/commands/aws/ec2/allow-ip/utils.d.ts +189 -0
  222. package/esm/commands/aws/ec2/allow-ip/utils.js +39 -0
  223. package/esm/commands/aws/iam/admin-group.d.ts +55 -0
  224. package/esm/commands/aws/iam/admin-group.js +15 -0
  225. package/esm/commands/aws/iam/break-glass/handler.d.ts +7 -0
  226. package/esm/commands/aws/iam/break-glass/handler.js +12 -0
  227. package/esm/commands/aws/iam/break-glass/index.d.ts +2 -0
  228. package/esm/commands/aws/iam/break-glass/index.js +19 -0
  229. package/esm/commands/aws/iam/break-glass/schema.d.ts +25 -0
  230. package/esm/commands/aws/iam/break-glass/schema.js +12 -0
  231. package/esm/commands/aws/iam/check-admin/handler.d.ts +5 -0
  232. package/esm/commands/aws/iam/check-admin/handler.js +10 -0
  233. package/esm/commands/aws/iam/check-admin/index.d.ts +2 -0
  234. package/esm/commands/aws/iam/check-admin/index.js +17 -0
  235. package/esm/commands/aws/iam/check-admin/schema.d.ts +19 -0
  236. package/esm/commands/aws/iam/check-admin/schema.js +12 -0
  237. package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.js +28 -0
  238. package/esm/commands/aws/iam/policies/sts-federation.js +19 -0
  239. package/esm/commands/aws/iam/policies/user-admins-deny-list.js +183 -0
  240. package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.js +49 -0
  241. package/esm/commands/aws/iam/policies/user-admins-self-service-iam.js +64 -0
  242. package/esm/commands/aws/iam/policies/user-admins-write-list.js +125 -0
  243. package/esm/commands/aws/iam/remove-admin/handler.d.ts +6 -0
  244. package/esm/commands/aws/iam/remove-admin/handler.js +11 -0
  245. package/esm/commands/aws/iam/remove-admin/index.d.ts +2 -0
  246. package/esm/commands/aws/iam/remove-admin/index.js +18 -0
  247. package/esm/commands/aws/iam/remove-admin/schema.d.ts +28 -0
  248. package/esm/commands/aws/iam/remove-admin/schema.js +12 -0
  249. package/esm/commands/aws/iam/setup-acl/handler.d.ts +6 -0
  250. package/esm/commands/aws/iam/setup-acl/handler.js +14 -0
  251. package/esm/commands/aws/iam/setup-acl/index.d.ts +3 -0
  252. package/esm/commands/aws/iam/setup-acl/index.js +33 -0
  253. package/esm/commands/aws/iam/setup-acl/schema.d.ts +24 -0
  254. package/esm/commands/aws/iam/setup-acl/schema.js +7 -0
  255. package/esm/commands/aws/iam/setup-acl/utils.d.ts +61 -0
  256. package/esm/commands/aws/iam/setup-acl/utils.js +20 -0
  257. package/esm/commands/aws/iam/users/handler.d.ts +5 -0
  258. package/esm/commands/aws/iam/users/handler.js +12 -0
  259. package/esm/commands/aws/iam/users/index.d.ts +3 -0
  260. package/esm/commands/aws/iam/users/index.js +41 -0
  261. package/esm/commands/aws/iam/users/schema.d.ts +18 -0
  262. package/esm/commands/aws/iam/users/schema.js +7 -0
  263. package/esm/commands/aws/iam/users/utils.d.ts +119 -0
  264. package/esm/commands/aws/iam/users/utils.js +30 -0
  265. package/esm/commands/aws/index.d.ts +14 -0
  266. package/esm/commands/aws/index.js +229 -0
  267. package/esm/commands/aws/route53/add-record/handler.d.ts +36 -0
  268. package/esm/commands/aws/route53/add-record/handler.js +18 -0
  269. package/esm/commands/aws/route53/add-record/index.d.ts +3 -0
  270. package/esm/commands/aws/route53/add-record/index.js +57 -0
  271. package/esm/commands/aws/route53/add-record/schema.d.ts +45 -0
  272. package/esm/commands/aws/route53/add-record/schema.js +11 -0
  273. package/esm/commands/aws/route53/add-record/utils.d.ts +216 -0
  274. package/esm/commands/aws/route53/add-record/utils.js +37 -0
  275. package/esm/commands/aws/route53/remove-record/handler.d.ts +6 -0
  276. package/esm/commands/aws/route53/remove-record/handler.js +14 -0
  277. package/esm/commands/aws/route53/remove-record/index.d.ts +2 -0
  278. package/esm/commands/aws/route53/remove-record/index.js +18 -0
  279. package/esm/commands/aws/route53/remove-record/schema.d.ts +30 -0
  280. package/esm/commands/aws/route53/remove-record/schema.js +8 -0
  281. package/esm/commands/aws/schema.d.ts +13 -0
  282. package/esm/commands/aws/schema.js +10 -0
  283. package/esm/commands/aws/ses/send-email/handler.d.ts +5 -0
  284. package/esm/commands/aws/ses/send-email/handler.js +12 -0
  285. package/esm/commands/aws/ses/send-email/index.d.ts +3 -0
  286. package/esm/commands/aws/ses/send-email/index.js +23 -0
  287. package/esm/commands/aws/ses/send-email/schema.d.ts +39 -0
  288. package/esm/commands/aws/ses/send-email/schema.js +7 -0
  289. package/esm/commands/aws/ses/send-email/utils.d.ts +47 -0
  290. package/esm/commands/aws/ses/send-email/utils.js +11 -0
  291. package/esm/commands/aws/ses/smtp-password.d.ts +21 -0
  292. package/esm/commands/aws/ses/smtp-password.js +10 -0
  293. package/esm/commands/aws/utils/exec-aws.d.ts +79 -0
  294. package/esm/commands/aws/utils/exec-aws.js +16 -0
  295. package/esm/commands/aws/utils/resolve-policy-path.d.ts +8 -0
  296. package/esm/commands/aws/utils/resolve-policy-path.js +6 -0
  297. package/esm/commands/aws/utils/resolve-profile.d.ts +28 -0
  298. package/esm/commands/aws/utils/resolve-profile.js +11 -0
  299. package/esm/commands/aws/utils/tty.d.ts +24 -0
  300. package/esm/commands/aws/utils/tty.js +10 -0
  301. package/esm/commands/db/create-readonly-user/handler.d.ts +5 -0
  302. package/esm/commands/db/create-readonly-user/handler.js +11 -0
  303. package/esm/commands/db/create-readonly-user/index.d.ts +3 -0
  304. package/esm/commands/db/create-readonly-user/index.js +40 -0
  305. package/esm/commands/db/create-readonly-user/mysql.d.ts +33 -0
  306. package/esm/commands/db/create-readonly-user/mysql.js +9 -0
  307. package/esm/commands/db/create-readonly-user/postgres.d.ts +31 -0
  308. package/esm/commands/db/create-readonly-user/postgres.js +9 -0
  309. package/esm/commands/db/create-readonly-user/schema.d.ts +55 -0
  310. package/esm/commands/db/create-readonly-user/schema.js +12 -0
  311. package/esm/commands/db/create-readonly-user/utils.d.ts +112 -0
  312. package/esm/commands/db/create-readonly-user/utils.js +22 -0
  313. package/esm/commands/db/index.d.ts +6 -0
  314. package/esm/commands/db/index.js +44 -0
  315. package/esm/commands/doppler/handler.js +5 -3
  316. package/esm/commands/doppler/index.d.ts +1 -0
  317. package/esm/commands/doppler/index.js +32 -5
  318. package/esm/commands/doppler/schema.d.ts +233 -17
  319. package/esm/commands/doppler/schema.js +11 -3
  320. package/esm/commands/doppler/set-secret.d.ts +113 -0
  321. package/esm/commands/doppler/set-secret.js +19 -0
  322. package/esm/commands/doppler/utils.d.ts +32 -8
  323. package/esm/commands/doppler/utils.js +5 -1
  324. package/esm/commands/icons/schema.d.ts +1 -1
  325. package/esm/commands/index.js +86 -7
  326. package/package.json +12 -2
  327. package/vitest.config.ts +11 -0
  328. package/cjs/__chunks/MFAORPG6.cjs +0 -52
  329. package/esm/__chunks/3KUXVWUE.js +0 -52
  330. /package/cjs/__chunks/{WNJ3ZYLI.cjs → 3BY5Y4W7.cjs} +0 -0
  331. /package/esm/__chunks/{46HGXFME.js → 5ZBVGSOK.js} +0 -0
@@ -0,0 +1,249 @@
1
+ import {
2
+ runAws
3
+ } from "./FNXUONAV.js";
4
+ import {
5
+ resolvePolicyPath
6
+ } from "./ZO55YUSY.js";
7
+
8
+ // src/commands/aws/iam/setup-acl/utils.js
9
+ var ACL_GROUPS = [
10
+ "acl-admin-do-not-use",
11
+ "acl-iam-full-access",
12
+ "acl-power-users",
13
+ "acl-read-only",
14
+ "acl-s3-restrictions"
15
+ ];
16
+ var CUSTOM_POLICIES = [
17
+ { name: "UserAdminsWriteList", fileName: "user-admins-write-list.json" },
18
+ { name: "UserAdminsDenyList", fileName: "user-admins-deny-list.json" },
19
+ {
20
+ name: "UserAdminsSelfServiceIAM",
21
+ fileName: "user-admins-self-service-iam.json"
22
+ },
23
+ {
24
+ name: "UserAdminsDenyRegionsList",
25
+ fileName: "user-admins-deny-regions-list.json"
26
+ },
27
+ { name: "sts-federation", fileName: "sts-federation.json" },
28
+ {
29
+ name: "S3RestrictionsDenyNonS3Services",
30
+ fileName: "s3-restrictions-deny-non-s3-services.json"
31
+ }
32
+ ];
33
+ function ensureGroup(params) {
34
+ const { name, profile, verbose } = params;
35
+ let exists = true;
36
+ try {
37
+ runAws({
38
+ profile,
39
+ args: ["iam", "get-group", "--group-name", name],
40
+ verbose
41
+ });
42
+ } catch {
43
+ exists = false;
44
+ }
45
+ if (exists) {
46
+ console.log(` Group exists: ${name}`);
47
+ return;
48
+ }
49
+ console.log(` Create group: ${name}`);
50
+ runAws({
51
+ profile,
52
+ args: ["iam", "create-group", "--group-name", name, "--path", "/"],
53
+ expectJson: false,
54
+ verbose
55
+ });
56
+ }
57
+ function publishPolicy(params) {
58
+ const { name, fileName, accountId, profile, verbose } = params;
59
+ const arn = `arn:aws:iam::${accountId}:policy/${name}`;
60
+ const file = resolvePolicyPath(fileName);
61
+ let exists = true;
62
+ try {
63
+ runAws({
64
+ profile,
65
+ args: ["iam", "get-policy", "--policy-arn", arn],
66
+ verbose
67
+ });
68
+ } catch {
69
+ exists = false;
70
+ }
71
+ if (!exists) {
72
+ console.log(` Create policy: ${name}`);
73
+ runAws({
74
+ profile,
75
+ args: [
76
+ "iam",
77
+ "create-policy",
78
+ "--policy-name",
79
+ name,
80
+ "--policy-document",
81
+ `file://${file}`,
82
+ "--description",
83
+ `ACL: ${name}`
84
+ ],
85
+ expectJson: false,
86
+ verbose
87
+ });
88
+ return;
89
+ }
90
+ const nonDefaultCount = Number.parseInt(
91
+ runAws({
92
+ profile,
93
+ args: [
94
+ "iam",
95
+ "list-policy-versions",
96
+ "--policy-arn",
97
+ arn,
98
+ "--query",
99
+ "length(Versions[?IsDefaultVersion==`false`])",
100
+ "--output",
101
+ "text"
102
+ ],
103
+ expectJson: false,
104
+ verbose
105
+ }),
106
+ 10
107
+ ) || 0;
108
+ if (nonDefaultCount >= 4) {
109
+ const oldest = runAws({
110
+ profile,
111
+ args: [
112
+ "iam",
113
+ "list-policy-versions",
114
+ "--policy-arn",
115
+ arn,
116
+ "--query",
117
+ "Versions[?IsDefaultVersion==`false`] | sort_by(@, &CreateDate)[0].VersionId",
118
+ "--output",
119
+ "text"
120
+ ],
121
+ expectJson: false,
122
+ verbose
123
+ });
124
+ console.log(` Prune oldest version of ${name}: ${oldest}`);
125
+ runAws({
126
+ profile,
127
+ args: [
128
+ "iam",
129
+ "delete-policy-version",
130
+ "--policy-arn",
131
+ arn,
132
+ "--version-id",
133
+ oldest
134
+ ],
135
+ expectJson: false,
136
+ verbose
137
+ });
138
+ }
139
+ console.log(` Update policy: ${name}`);
140
+ runAws({
141
+ profile,
142
+ args: [
143
+ "iam",
144
+ "create-policy-version",
145
+ "--policy-arn",
146
+ arn,
147
+ "--policy-document",
148
+ `file://${file}`,
149
+ "--set-as-default"
150
+ ],
151
+ expectJson: false,
152
+ verbose
153
+ });
154
+ }
155
+ function isPolicyAttached(params) {
156
+ const { group, arn, profile, verbose } = params;
157
+ const out = runAws({
158
+ profile,
159
+ args: [
160
+ "iam",
161
+ "list-attached-group-policies",
162
+ "--group-name",
163
+ group,
164
+ "--query",
165
+ `AttachedPolicies[?PolicyArn=='${arn}'].PolicyArn`,
166
+ "--output",
167
+ "text"
168
+ ],
169
+ expectJson: false,
170
+ verbose
171
+ });
172
+ return Boolean(out);
173
+ }
174
+ function attach(params) {
175
+ const { group, arn, profile, verbose } = params;
176
+ const policyName = arn.split("/").pop() ?? arn;
177
+ if (isPolicyAttached({ group, arn, profile, verbose })) {
178
+ console.log(` [${group}] already attached: ${policyName}`);
179
+ return;
180
+ }
181
+ console.log(` [${group}] attach: ${policyName}`);
182
+ runAws({
183
+ profile,
184
+ args: [
185
+ "iam",
186
+ "attach-group-policy",
187
+ "--group-name",
188
+ group,
189
+ "--policy-arn",
190
+ arn
191
+ ],
192
+ expectJson: false,
193
+ verbose
194
+ });
195
+ }
196
+ function detach(params) {
197
+ const { group, arn, profile, verbose } = params;
198
+ const policyName = arn.split("/").pop() ?? arn;
199
+ if (!isPolicyAttached({ group, arn, profile, verbose })) {
200
+ return;
201
+ }
202
+ console.log(` [${group}] detach legacy: ${policyName}`);
203
+ runAws({
204
+ profile,
205
+ args: [
206
+ "iam",
207
+ "detach-group-policy",
208
+ "--group-name",
209
+ group,
210
+ "--policy-arn",
211
+ arn
212
+ ],
213
+ expectJson: false,
214
+ verbose
215
+ });
216
+ }
217
+ function printFinalState(params) {
218
+ const { profile, verbose } = params;
219
+ for (const group of ACL_GROUPS) {
220
+ console.log("");
221
+ console.log(`=== ${group} ===`);
222
+ const table = runAws({
223
+ profile,
224
+ args: [
225
+ "iam",
226
+ "list-attached-group-policies",
227
+ "--group-name",
228
+ group,
229
+ "--query",
230
+ "AttachedPolicies[].PolicyName",
231
+ "--output",
232
+ "table"
233
+ ],
234
+ expectJson: false,
235
+ verbose
236
+ });
237
+ console.log(table);
238
+ }
239
+ }
240
+
241
+ export {
242
+ ACL_GROUPS,
243
+ CUSTOM_POLICIES,
244
+ ensureGroup,
245
+ publishPolicy,
246
+ attach,
247
+ detach,
248
+ printFinalState
249
+ };
@@ -0,0 +1,23 @@
1
+ import {
2
+ profileField,
3
+ regionField,
4
+ verboseField
5
+ } from "./73BJG53F.js";
6
+
7
+ // src/commands/aws/iam/setup-acl/schema.js
8
+ import { z } from "zod";
9
+ var setupAclOptionsSchema = z.object({
10
+ restrictRegions: z.enum(["yes", "no"]).optional().describe(
11
+ "Attach the region restriction to acl-power-users (skips the interactive prompt)"
12
+ ),
13
+ createUsers: z.boolean().optional().default(true).describe(
14
+ "Create IAM users after configuring groups (use --no-create-users to skip)"
15
+ ),
16
+ profile: profileField,
17
+ region: regionField,
18
+ verbose: verboseField
19
+ });
20
+
21
+ export {
22
+ setupAclOptionsSchema
23
+ };
@@ -0,0 +1,16 @@
1
+ import {
2
+ profileField,
3
+ verboseField
4
+ } from "./73BJG53F.js";
5
+
6
+ // src/commands/aws/iam/users/schema.js
7
+ import { z } from "zod";
8
+ var usersOptionsSchema = z.object({
9
+ accountName: z.string().optional().describe("AWS account slug used in md-{identifier}-{account}-{role}"),
10
+ profile: profileField,
11
+ verbose: verboseField
12
+ });
13
+
14
+ export {
15
+ usersOptionsSchema
16
+ };
@@ -12,9 +12,16 @@ import {
12
12
  unlinkSync,
13
13
  writeFileSync
14
14
  } from "fs";
15
+ import { tmpdir } from "os";
16
+ import { join } from "path";
15
17
  import { createInterface } from "readline";
16
18
  import chalk from "chalk";
17
19
  var DEFAULT_DOPPLER_ENVIRONMENT = "dev";
20
+ var DOPPLER_INTERNAL_KEYS = /* @__PURE__ */ new Set([
21
+ "DOPPLER_CONFIG",
22
+ "DOPPLER_ENVIRONMENT",
23
+ "DOPPLER_PROJECT"
24
+ ]);
18
25
  function execDoppler(args, parser = "string", silent = false, verbose = false) {
19
26
  const command = `doppler ${args.join(" ")}`;
20
27
  let verbosity = "default";
@@ -29,9 +36,9 @@ function execDoppler(args, parser = "string", silent = false, verbose = false) {
29
36
  throwOnError: true
30
37
  });
31
38
  }
32
- function checkDependencies(verbose = false) {
39
+ function checkDopplerAuth(verbose = false) {
33
40
  if (verbose) {
34
- console.log(chalk.blue("\n\u{1F50D} Checking Doppler dependencies..."));
41
+ console.log(chalk.blue("\n\u{1F50D} Checking Doppler authentication..."));
35
42
  }
36
43
  try {
37
44
  execSync("which doppler", { stdio: "pipe" });
@@ -40,7 +47,7 @@ function checkDependencies(verbose = false) {
40
47
  }
41
48
  } catch {
42
49
  throw new Error(
43
- "Doppler is not installed. Please install Doppler (brew install dopplerhq/cli/doppler), login, setup, and try again."
50
+ "Doppler is not installed. Please install Doppler (brew install dopplerhq/cli/doppler), login, and try again."
44
51
  );
45
52
  }
46
53
  try {
@@ -50,9 +57,15 @@ function checkDependencies(verbose = false) {
50
57
  }
51
58
  } catch {
52
59
  throw new Error(
53
- "Doppler is not logged in. Please run 'doppler login' then 'doppler setup' and try again."
60
+ "Doppler is not logged in. Please run 'doppler login' and try again."
54
61
  );
55
62
  }
63
+ }
64
+ function checkDependencies(verbose = false) {
65
+ checkDopplerAuth(verbose);
66
+ if (verbose) {
67
+ console.log(chalk.blue("\n\u{1F50D} Checking Doppler project setup..."));
68
+ }
56
69
  try {
57
70
  execDoppler(["configs", "--json"], "json", true, verbose);
58
71
  if (verbose) {
@@ -64,21 +77,18 @@ function checkDependencies(verbose = false) {
64
77
  );
65
78
  }
66
79
  }
67
- function getConfigs(environment, verbose = false) {
80
+ function getConfigs(environments, verbose = false, project = null) {
68
81
  if (verbose) {
69
82
  console.log(
70
83
  chalk.blue(
71
84
  `
72
- \u{1F4CB} Resolving configurations for environment: ${chalk.cyan(environment)}`
85
+ \u{1F4CB} Resolving configurations for environments: ${chalk.cyan(environments)}`
73
86
  )
74
87
  );
75
88
  }
76
- const availableConfigs = execDoppler(
77
- ["configs", "--json"],
78
- "json",
79
- true,
80
- verbose
81
- );
89
+ const configArgs = ["configs", "--json"];
90
+ if (project) configArgs.push("--project", project);
91
+ const availableConfigs = execDoppler(configArgs, "json", true, verbose);
82
92
  const configNames = Array.isArray(availableConfigs) ? availableConfigs.map(
83
93
  (config) => config.name
84
94
  ) : [];
@@ -87,7 +97,7 @@ function getConfigs(environment, verbose = false) {
87
97
  chalk.gray(` Available configurations: ${configNames.join(", ")}`)
88
98
  );
89
99
  }
90
- if (environment === "all") {
100
+ if (environments === "all") {
91
101
  if (configNames.length === 0) {
92
102
  throw new Error("No configurations found in Doppler");
93
103
  }
@@ -98,15 +108,21 @@ function getConfigs(environment, verbose = false) {
98
108
  }
99
109
  return configNames;
100
110
  }
101
- if (configNames.length > 0 && !configNames.includes(environment)) {
102
- throw new Error(
103
- `Configuration "${environment}" not found. Available configurations: ${configNames.join(", ")}`
104
- );
111
+ const requested = environments.split(",").map((e) => e.trim());
112
+ if (configNames.length > 0) {
113
+ const missing = requested.filter((e) => !configNames.includes(e));
114
+ if (missing.length > 0) {
115
+ throw new Error(
116
+ `Configurations not found: ${missing.join(", ")}. Available: ${configNames.join(", ")}`
117
+ );
118
+ }
105
119
  }
106
120
  if (verbose) {
107
- console.log(chalk.green(` \u2713 Using configuration: ${environment}`));
121
+ console.log(
122
+ chalk.green(` \u2713 Using configurations: ${requested.join(", ")}`)
123
+ );
108
124
  }
109
- return [environment];
125
+ return requested;
110
126
  }
111
127
  function normalizeEscapeSequences(content) {
112
128
  return content.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\r/g, "\r");
@@ -145,9 +161,9 @@ function promptConfirmation(message) {
145
161
  });
146
162
  }
147
163
  async function downloadConfigs(options) {
148
- const { environment, verbose } = options;
149
- const actualEnvironment = environment ?? DEFAULT_DOPPLER_ENVIRONMENT;
150
- const configs = getConfigs(actualEnvironment, verbose);
164
+ const { environments, verbose } = options;
165
+ const actualEnvironments = environments ?? DEFAULT_DOPPLER_ENVIRONMENT;
166
+ const configs = getConfigs(actualEnvironments, verbose);
151
167
  if (verbose) {
152
168
  console.log(
153
169
  chalk.blue(
@@ -156,9 +172,9 @@ async function downloadConfigs(options) {
156
172
  )
157
173
  );
158
174
  }
159
- if (configs.length === 1 && environment !== "all") {
175
+ if (configs.length === 1 && actualEnvironments !== "all") {
160
176
  console.log(
161
- "You can use -e all to download all configurations, or -e <env> for a specific environment."
177
+ "You can use -e all to download all configurations, or -e dev,stg for specific environments."
162
178
  );
163
179
  }
164
180
  for (const config of configs) {
@@ -228,8 +244,8 @@ async function downloadConfigs(options) {
228
244
  }
229
245
  }
230
246
  async function uploadConfigs(options) {
231
- const { environment, verbose } = options;
232
- const configs = getConfigs(environment, verbose);
247
+ const { environments, verbose } = options;
248
+ const configs = getConfigs(environments, verbose);
233
249
  if (verbose) {
234
250
  console.log(
235
251
  chalk.blue(
@@ -388,14 +404,135 @@ async function uploadConfigs(options) {
388
404
  }
389
405
  }
390
406
  }
407
+ async function cloneProject({ from, to, environments, force, verbose }) {
408
+ if (verbose) {
409
+ console.log(
410
+ chalk.blue(
411
+ `
412
+ \u{1F501} Cloning from ${chalk.cyan(from)} to ${chalk.cyan(to)}...`
413
+ )
414
+ );
415
+ }
416
+ const configsToClone = getConfigs(environments, verbose, from);
417
+ if (configsToClone.length === 0) {
418
+ throw new Error(`No configurations found in source project "${from}"`);
419
+ }
420
+ const targetConfigsRaw = execDoppler(
421
+ ["configs", "--json", "--project", to],
422
+ "json",
423
+ true,
424
+ verbose
425
+ );
426
+ const targetConfigNames = Array.isArray(targetConfigsRaw) ? targetConfigsRaw.map((c) => c.name) : [];
427
+ const missingInTarget = configsToClone.filter(
428
+ (c) => !targetConfigNames.includes(c)
429
+ );
430
+ if (missingInTarget.length > 0) {
431
+ throw new Error(
432
+ `Configs missing in target project "${to}": ${missingInTarget.join(", ")}. Create them in Doppler first.`
433
+ );
434
+ }
435
+ for (const config of configsToClone) {
436
+ if (verbose) {
437
+ console.log(chalk.blue(`
438
+ \u{1F4E6} Processing config: ${chalk.cyan(config)}`));
439
+ }
440
+ const sourceSecrets = execDoppler(
441
+ ["secrets", "--json", "--project", from, "--config", config],
442
+ "json",
443
+ true,
444
+ verbose
445
+ );
446
+ const sourceKeys = sourceSecrets ? Object.keys(sourceSecrets).filter((k) => !DOPPLER_INTERNAL_KEYS.has(k)) : [];
447
+ const targetSecrets = execDoppler(
448
+ ["secrets", "--json", "--project", to, "--config", config],
449
+ "json",
450
+ true,
451
+ verbose
452
+ );
453
+ const targetKeys = targetSecrets ? Object.keys(targetSecrets) : [];
454
+ const conflicts = sourceKeys.filter((k) => targetKeys.includes(k));
455
+ if (conflicts.length > 0) {
456
+ if (process.env["CI"]) {
457
+ throw new Error(
458
+ `Config "${config}" has ${conflicts.length} conflicting key(s) in target: ${conflicts.join(", ")}`
459
+ );
460
+ }
461
+ if (!force) {
462
+ console.log(
463
+ `
464
+ Config ${chalk.cyan(config)}: ${conflicts.length} key(s) already exist in ${chalk.cyan(to)}:`
465
+ );
466
+ conflicts.forEach((k) => console.log(chalk.yellow(` \u2022 ${k}`)));
467
+ const confirmed = await promptConfirmation(
468
+ `
469
+ Overwrite these keys in "${to}/${config}"? (y/n) `
470
+ );
471
+ if (!confirmed) {
472
+ console.log(`Skipped ${chalk.blue(config)}`);
473
+ continue;
474
+ }
475
+ }
476
+ }
477
+ const tmpFile = join(tmpdir(), `doppler-clone-${config}-${Date.now()}.env`);
478
+ try {
479
+ const content = execDoppler(
480
+ [
481
+ "secrets",
482
+ "download",
483
+ "--no-file",
484
+ "--format",
485
+ "env",
486
+ "--project",
487
+ from,
488
+ "--config",
489
+ config
490
+ ],
491
+ "string",
492
+ true,
493
+ verbose
494
+ );
495
+ if (typeof content !== "string" || !content) {
496
+ throw new Error(`No secrets returned for config "${config}"`);
497
+ }
498
+ const filtered = content.split("\n").filter((line) => {
499
+ const key = line.split("=")[0] ?? "";
500
+ return !DOPPLER_INTERNAL_KEYS.has(key);
501
+ }).join("\n");
502
+ writeFileSync(tmpFile, filtered, "utf-8");
503
+ execDoppler(
504
+ [
505
+ "secrets",
506
+ "upload",
507
+ tmpFile,
508
+ "--project",
509
+ to,
510
+ "--config",
511
+ config,
512
+ "--silent"
513
+ ],
514
+ "string",
515
+ true,
516
+ verbose
517
+ );
518
+ console.log(`Config ${chalk.blue(config)}: cloned to ${chalk.green(to)}`);
519
+ } finally {
520
+ if (existsSync(tmpFile)) {
521
+ unlinkSync(tmpFile);
522
+ }
523
+ }
524
+ }
525
+ }
391
526
 
392
527
  export {
393
528
  execDoppler,
529
+ checkDopplerAuth,
394
530
  checkDependencies,
395
531
  getConfigs,
396
532
  normalizeEscapeSequences,
397
533
  createDiff,
398
534
  promptConfirmation,
399
535
  downloadConfigs,
400
- uploadConfigs
536
+ uploadConfigs,
537
+ cloneProject
401
538
  };
@@ -1,50 +1,77 @@
1
+ import {
2
+ setSecretInteractive
3
+ } from "./QFXN4EHM.js";
1
4
  import {
2
5
  checkDependencies,
6
+ checkDopplerAuth,
7
+ cloneProject,
3
8
  downloadConfigs,
4
9
  uploadConfigs
5
- } from "./O262GK4B.js";
10
+ } from "./YGWTVPZE.js";
6
11
  import {
7
12
  dopplerCommandMetadata,
8
13
  dopplerCommandOptionsSchema
9
- } from "./3KUXVWUE.js";
14
+ } from "./KWUJP5MG.js";
10
15
 
11
16
  // src/commands/doppler/handler.js
12
17
  import chalk from "chalk";
13
18
  import { ZodError } from "zod";
14
19
  async function dopplerCommand(options) {
15
20
  try {
16
- const validatedOptions = dopplerCommandOptionsSchema.parse(options);
17
- if (validatedOptions.help || !validatedOptions.action) {
21
+ const rawOptions = (
22
+ /** @type {any} */
23
+ options ?? {}
24
+ );
25
+ if (rawOptions.help || !rawOptions.action) {
18
26
  console.log(
19
27
  chalk.bold(`
20
28
  Usage: @mtndev/cli doppler [options] <action>`)
21
29
  );
22
30
  console.log(dopplerCommandMetadata.description);
23
31
  console.log(chalk.bold("\nOptions:"));
24
- Object.entries(dopplerCommandOptionsSchema.shape).forEach(
25
- ([key, fieldSchema]) => {
26
- if (key === "action") return;
27
- const description = fieldSchema.description || "No description available";
28
- const optionMeta = (
32
+ Object.entries(dopplerCommandMetadata.options).forEach(
33
+ ([key, optionMeta]) => {
34
+ const meta = (
29
35
  /** @type {any} */
30
- dopplerCommandMetadata.options[key]
36
+ optionMeta
31
37
  );
32
- const defaultValue = optionMeta?.default ?? false;
33
- const alias = optionMeta?.alias ? chalk.cyan(`, -${optionMeta.alias}`) : "";
38
+ const alias = meta?.alias ? chalk.cyan(`, -${meta.alias}`) : "";
39
+ const defaultValue = meta?.default ?? false;
34
40
  console.log(
35
- chalk.cyan(` --${key}`) + alias + ` ${description} (default: ${defaultValue})`
41
+ chalk.cyan(` --${key}`) + alias + ` ${meta.description} (default: ${defaultValue})`
36
42
  );
37
43
  }
38
44
  );
39
45
  console.log("");
40
46
  return;
41
47
  }
42
- const { action, environment, verbose } = validatedOptions;
43
- checkDependencies(verbose);
48
+ const validatedOptions = dopplerCommandOptionsSchema.parse(options);
49
+ const { action, verbose } = validatedOptions;
50
+ if (action === "set") {
51
+ checkDopplerAuth(verbose);
52
+ } else {
53
+ checkDependencies(verbose);
54
+ }
44
55
  if (action === "download") {
45
- await downloadConfigs({ environment, verbose });
56
+ const { environments } = validatedOptions;
57
+ await downloadConfigs({ environments, verbose });
46
58
  } else if (action === "upload") {
47
- await uploadConfigs({ environment, verbose });
59
+ const { environments } = validatedOptions;
60
+ await uploadConfigs({ environments, verbose });
61
+ } else if (action === "clone") {
62
+ const { from, to, force, environments } = validatedOptions;
63
+ await cloneProject({ from, to, environments, force, verbose });
64
+ } else if (action === "set") {
65
+ const { project, environment, config, name, value, yes } = validatedOptions;
66
+ await setSecretInteractive({
67
+ project,
68
+ environment,
69
+ config,
70
+ name,
71
+ value,
72
+ yes,
73
+ verbose
74
+ });
48
75
  }
49
76
  console.log(chalk.green(`
50
77
  \u2705 Doppler ${action} completed successfully!`));