@mtndev/cli 0.0.0-dev-20260626045346 → 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 +86 -1
  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/{NSRFG4DF.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/{6L5RNR7G.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/4GFJUCSP.cjs +0 -52
  329. package/esm/__chunks/X3R5PSWH.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,387 @@
1
+ import {
2
+ runAws
3
+ } from "./FNXUONAV.js";
4
+ import {
5
+ prompt,
6
+ promptYesNo
7
+ } from "./ZHKVJO2U.js";
8
+
9
+ // src/commands/aws/iam/users/utils.js
10
+ import chalk from "chalk";
11
+ var KNOWN_ROLES = ["read-only", "iam-admin", "power-user"];
12
+ var REQUIRED_ACL_GROUPS = [
13
+ "acl-read-only",
14
+ "acl-iam-full-access",
15
+ "acl-power-users"
16
+ ];
17
+ function roleToGroup(role) {
18
+ switch (role) {
19
+ case "read-only":
20
+ return "acl-read-only";
21
+ case "iam-admin":
22
+ return "acl-iam-full-access";
23
+ case "power-user":
24
+ return "acl-power-users";
25
+ default:
26
+ throw new Error(`Unknown role: ${role}`);
27
+ }
28
+ }
29
+ function normalizeSlug(value) {
30
+ return value.toLowerCase().replace(/ /g, "-");
31
+ }
32
+ function isValidSlug(value) {
33
+ return /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(value);
34
+ }
35
+ function buildUsername(params) {
36
+ const { identifier, accountName, role } = params;
37
+ return `md-${identifier}-${accountName}-${role}`;
38
+ }
39
+ function normalizeIdentifier(params) {
40
+ const { raw, accountName, role } = params;
41
+ let identifier = normalizeSlug(raw);
42
+ if (identifier.startsWith("md-")) {
43
+ identifier = identifier.slice(3);
44
+ }
45
+ if (identifier.endsWith(`-${role}`)) {
46
+ identifier = identifier.slice(0, -(role.length + 1));
47
+ } else {
48
+ for (const knownRole of KNOWN_ROLES) {
49
+ if (identifier.endsWith(`-${knownRole}`)) {
50
+ identifier = identifier.slice(0, -(knownRole.length + 1));
51
+ break;
52
+ }
53
+ }
54
+ }
55
+ if (identifier.endsWith(`-${accountName}`)) {
56
+ identifier = identifier.slice(0, -(accountName.length + 1));
57
+ }
58
+ return identifier;
59
+ }
60
+ function parseMdUsername(name) {
61
+ let value = normalizeSlug(name);
62
+ if (!value.startsWith("md-")) {
63
+ return null;
64
+ }
65
+ value = value.slice(3);
66
+ const rolesByLength = [...KNOWN_ROLES].sort((a, b) => b.length - a.length);
67
+ let role = null;
68
+ for (const knownRole of rolesByLength) {
69
+ if (value.endsWith(`-${knownRole}`)) {
70
+ role = knownRole;
71
+ value = value.slice(0, -(knownRole.length + 1));
72
+ break;
73
+ }
74
+ }
75
+ if (!role) {
76
+ return null;
77
+ }
78
+ const dash = value.indexOf("-");
79
+ if (dash <= 0 || dash === value.length - 1) {
80
+ return null;
81
+ }
82
+ const identifier = value.slice(0, dash);
83
+ const accountName = value.slice(dash + 1);
84
+ if (!isValidSlug(identifier) || !isValidSlug(accountName)) {
85
+ return null;
86
+ }
87
+ return { identifier, accountName, role };
88
+ }
89
+ function inferAccountName(params) {
90
+ const { profile, identity } = params;
91
+ const arn = identity?.Arn ?? "";
92
+ const username = arn.includes("/") ? arn.split("/").pop() ?? "" : "";
93
+ for (const candidate of [username, profile ?? ""]) {
94
+ if (!candidate) {
95
+ continue;
96
+ }
97
+ const parsed = parseMdUsername(candidate);
98
+ if (parsed) {
99
+ return parsed.accountName;
100
+ }
101
+ }
102
+ return null;
103
+ }
104
+ function userExists(params) {
105
+ const { username, profile, verbose } = params;
106
+ try {
107
+ runAws({
108
+ profile,
109
+ args: ["iam", "get-user", "--user-name", username],
110
+ verbose
111
+ });
112
+ return true;
113
+ } catch {
114
+ return false;
115
+ }
116
+ }
117
+ function ensureUser(params) {
118
+ const { username, profile, verbose } = params;
119
+ if (userExists({ username, profile, verbose })) {
120
+ console.log(` User exists: ${username}`);
121
+ return;
122
+ }
123
+ console.log(` Create user: ${username}`);
124
+ runAws({
125
+ profile,
126
+ args: ["iam", "create-user", "--user-name", username, "--path", "/"],
127
+ verbose
128
+ });
129
+ }
130
+ function ensureUserInGroup(params) {
131
+ const { username, group, profile, verbose } = params;
132
+ const existing = runAws({
133
+ profile,
134
+ args: [
135
+ "iam",
136
+ "get-group",
137
+ "--group-name",
138
+ group,
139
+ "--query",
140
+ `Users[?UserName=='${username}'].UserName`,
141
+ "--output",
142
+ "text"
143
+ ],
144
+ expectJson: false,
145
+ verbose
146
+ });
147
+ if (existing) {
148
+ console.log(` Already in group: ${group}`);
149
+ return;
150
+ }
151
+ console.log(` Add to group: ${group}`);
152
+ runAws({
153
+ profile,
154
+ args: [
155
+ "iam",
156
+ "add-user-to-group",
157
+ "--user-name",
158
+ username,
159
+ "--group-name",
160
+ group
161
+ ],
162
+ expectJson: false,
163
+ verbose
164
+ });
165
+ }
166
+ function createCliAccessKey(params) {
167
+ const { username, profile, verbose } = params;
168
+ const keyCountRaw = runAws({
169
+ profile,
170
+ args: [
171
+ "iam",
172
+ "list-access-keys",
173
+ "--user-name",
174
+ username,
175
+ "--query",
176
+ "length(AccessKeyMetadata)",
177
+ "--output",
178
+ "text"
179
+ ],
180
+ expectJson: false,
181
+ verbose
182
+ });
183
+ const keyCount = Number.parseInt(keyCountRaw, 10) || 0;
184
+ if (keyCount >= 2) {
185
+ console.log(
186
+ chalk.yellow(
187
+ ` WARNING: ${username} already has 2 access keys (AWS max).`
188
+ )
189
+ );
190
+ console.log(
191
+ chalk.yellow(" Delete an existing key before creating a new one.")
192
+ );
193
+ return false;
194
+ }
195
+ const created = runAws({
196
+ profile,
197
+ args: [
198
+ "iam",
199
+ "create-access-key",
200
+ "--user-name",
201
+ username,
202
+ "--query",
203
+ "AccessKey.[AccessKeyId,SecretAccessKey]",
204
+ "--output",
205
+ "text"
206
+ ],
207
+ expectJson: false,
208
+ verbose
209
+ });
210
+ const [accessKeyId, secretAccessKey] = created.split(/\s+/);
211
+ if (!accessKeyId || !secretAccessKey) {
212
+ throw new Error("Failed to parse the newly created access key");
213
+ }
214
+ const setupCmd = ` export AWS_ACCESS_KEY_ID='${accessKeyId}' AWS_SECRET_ACCESS_KEY='${secretAccessKey}' && aws-vault add ${username} --env --add-config && aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID" --profile ${username} && aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY" --profile ${username} && aws configure set region us-east-1 --profile ${username}`;
215
+ console.log("");
216
+ console.log(
217
+ ` CLI credentials for ${username} (secret shown once \u2014 copy now):`
218
+ );
219
+ console.log(
220
+ " \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
221
+ );
222
+ console.log(
223
+ " YOU MUST run the command below with a LEADING SPACE so it is not saved"
224
+ );
225
+ console.log(' to shell history \u2014 same idea as: TEST="a" && echo $TEST');
226
+ console.log("");
227
+ console.log(setupCmd);
228
+ console.log(
229
+ " \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
230
+ );
231
+ console.log("");
232
+ return true;
233
+ }
234
+ function ensureAclGroupsExist(params) {
235
+ const { profile, verbose } = params;
236
+ const missing = REQUIRED_ACL_GROUPS.filter((group) => {
237
+ try {
238
+ runAws({
239
+ profile,
240
+ args: ["iam", "get-group", "--group-name", group],
241
+ verbose
242
+ });
243
+ return false;
244
+ } catch {
245
+ return true;
246
+ }
247
+ });
248
+ if (missing.length > 0) {
249
+ missing.forEach((group) => console.log(` Missing group: ${group}`));
250
+ console.log("");
251
+ console.log(
252
+ " Run `mtn aws iam setup-acl` first to create ACL groups and policies."
253
+ );
254
+ return false;
255
+ }
256
+ return true;
257
+ }
258
+ async function promptAccountName(params) {
259
+ const { accountName, inferredAccountName } = params;
260
+ if (accountName) {
261
+ const slug = normalizeSlug(accountName);
262
+ if (isValidSlug(slug)) {
263
+ console.log(` Account name: ${slug}`);
264
+ return slug;
265
+ }
266
+ console.log(" Invalid account name option \u2014 falling back to prompt.");
267
+ }
268
+ const defaultSlug = inferredAccountName && isValidSlug(normalizeSlug(inferredAccountName)) ? normalizeSlug(inferredAccountName) : null;
269
+ for (; ; ) {
270
+ const hint = defaultSlug ? ` [default: ${defaultSlug}]` : " (e.g. vincent)";
271
+ const raw = await prompt(
272
+ ` AWS account name${hint} \u2014 used in md-{identifier}-{account}-{role}: `
273
+ );
274
+ if (raw === "" && defaultSlug) {
275
+ console.log(` \u2192 account name: ${defaultSlug}`);
276
+ return defaultSlug;
277
+ }
278
+ const slug = normalizeSlug(raw);
279
+ if (isValidSlug(slug)) {
280
+ if (raw !== slug) {
281
+ console.log(` \u2192 account name: ${slug}`);
282
+ }
283
+ return slug;
284
+ }
285
+ console.log(
286
+ " Invalid account name \u2014 use lowercase letters, numbers, and hyphens" + (defaultSlug ? ", or press Enter to accept the default." : ".")
287
+ );
288
+ }
289
+ }
290
+ async function promptRole() {
291
+ for (; ; ) {
292
+ console.log(" Role (username will be md-{identifier}-{account}-{role}):");
293
+ console.log(" 1) read-only \u2192 acl-read-only");
294
+ console.log(" 2) iam-admin \u2192 acl-iam-full-access");
295
+ console.log(" 3) power-user \u2192 acl-power-users");
296
+ const choice = await prompt(" Choice [1-3]: ");
297
+ switch (choice) {
298
+ case "1":
299
+ case "read-only":
300
+ return "read-only";
301
+ case "2":
302
+ case "iam-admin":
303
+ return "iam-admin";
304
+ case "3":
305
+ case "power-user":
306
+ return "power-user";
307
+ default:
308
+ console.log(" Invalid choice \u2014 enter 1, 2, 3, or the role name.");
309
+ }
310
+ }
311
+ }
312
+ async function promptIdentifier(params) {
313
+ const { accountName, role } = params;
314
+ const exampleUser = buildUsername({
315
+ identifier: "declan",
316
+ accountName,
317
+ role
318
+ });
319
+ for (; ; ) {
320
+ const raw = await prompt(
321
+ ` Identifier (e.g. declan, or full ${exampleUser}): `
322
+ );
323
+ const lowerRaw = normalizeSlug(raw);
324
+ const identifier = normalizeIdentifier({ raw, accountName, role });
325
+ if (isValidSlug(identifier)) {
326
+ if (lowerRaw !== identifier) {
327
+ console.log(` \u2192 parsed identifier: ${identifier}`);
328
+ }
329
+ return identifier;
330
+ }
331
+ console.log(
332
+ " Invalid identifier \u2014 use lowercase letters, numbers, and hyphens."
333
+ );
334
+ console.log(" Tip: enter just the short name (e.g. declan).");
335
+ }
336
+ }
337
+ async function createUsersInteractive(params) {
338
+ const { accountName: accountNameOption, profile, identity, verbose } = params;
339
+ if (!ensureAclGroupsExist({ profile, verbose })) {
340
+ return;
341
+ }
342
+ console.log("");
343
+ const inferredAccountName = inferAccountName({ profile, identity });
344
+ const accountName = await promptAccountName({
345
+ accountName: accountNameOption,
346
+ inferredAccountName
347
+ });
348
+ console.log("");
349
+ while (await promptYesNo({ message: " Create another user?", defaultYes: false })) {
350
+ console.log("");
351
+ const role = await promptRole();
352
+ const identifier = await promptIdentifier({ accountName, role });
353
+ const username = buildUsername({ identifier, accountName, role });
354
+ const group = roleToGroup(role);
355
+ console.log("");
356
+ console.log(` \u2192 user: ${username}`);
357
+ console.log(` \u2192 group: ${group}`);
358
+ console.log("");
359
+ ensureUser({ username, profile, verbose });
360
+ ensureUserInGroup({ username, group, profile, verbose });
361
+ try {
362
+ createCliAccessKey({ username, profile, verbose });
363
+ } catch (error) {
364
+ console.log(
365
+ chalk.yellow(
366
+ ` Could not create access key: ${error instanceof Error ? error.message : String(error)}`
367
+ )
368
+ );
369
+ }
370
+ console.log("");
371
+ }
372
+ }
373
+
374
+ export {
375
+ roleToGroup,
376
+ normalizeSlug,
377
+ isValidSlug,
378
+ buildUsername,
379
+ normalizeIdentifier,
380
+ parseMdUsername,
381
+ inferAccountName,
382
+ ensureUser,
383
+ ensureUserInGroup,
384
+ createCliAccessKey,
385
+ ensureAclGroupsExist,
386
+ createUsersInteractive
387
+ };
@@ -0,0 +1,89 @@
1
+ import {
2
+ prompt,
3
+ promptChoice
4
+ } from "./ZHKVJO2U.js";
5
+
6
+ // src/commands/aws/utils/resolve-profile.js
7
+ import { readFileSync } from "fs";
8
+ import { homedir } from "os";
9
+ import { join } from "path";
10
+ import chalk from "chalk";
11
+ var MAX_LISTED = 30;
12
+ function listConfigProfiles() {
13
+ const configPath = process.env.AWS_CONFIG_FILE ?? join(homedir(), ".aws", "config");
14
+ let contents;
15
+ try {
16
+ contents = readFileSync(configPath, "utf-8");
17
+ } catch {
18
+ return [];
19
+ }
20
+ const profiles = [];
21
+ const profileRe = /^\[profile\s+(.+?)\]$/;
22
+ for (const rawLine of contents.split("\n")) {
23
+ const line = rawLine.trim();
24
+ const match = profileRe.exec(line);
25
+ if (match?.[1]) {
26
+ profiles.push(match[1].trim());
27
+ } else if (line === "[default]") {
28
+ profiles.push("default");
29
+ }
30
+ }
31
+ return profiles;
32
+ }
33
+ async function pickProfileInteractive(profiles) {
34
+ for (; ; ) {
35
+ const filter = (await prompt(chalk.cyan("Filter profiles (substring, Enter for all): "))).trim().toLowerCase();
36
+ const matches = filter ? profiles.filter((name) => name.toLowerCase().includes(filter)) : profiles;
37
+ if (matches.length === 0) {
38
+ console.log(chalk.yellow(` No profiles match "${filter}". Try again.`));
39
+ continue;
40
+ }
41
+ if (matches.length === 1) {
42
+ const only = matches[0] ?? "";
43
+ console.log(chalk.green(` \u2192 ${only}`));
44
+ return only;
45
+ }
46
+ if (matches.length > MAX_LISTED) {
47
+ console.log(
48
+ chalk.yellow(
49
+ ` ${matches.length} profiles match \u2014 narrow the filter (over ${MAX_LISTED} to list).`
50
+ )
51
+ );
52
+ continue;
53
+ }
54
+ const index = await promptChoice({
55
+ message: chalk.cyan("Select a profile:"),
56
+ options: matches
57
+ });
58
+ return matches[index] ?? "";
59
+ }
60
+ }
61
+ async function resolveProfile(params) {
62
+ const explicit = params.profile ?? process.env.AWS_PROFILE;
63
+ if (explicit) {
64
+ return explicit;
65
+ }
66
+ const interactive = params.interactive ?? Boolean(process.stdin.isTTY);
67
+ if (!interactive) {
68
+ return void 0;
69
+ }
70
+ const profiles = listConfigProfiles();
71
+ if (profiles.length === 0) {
72
+ return void 0;
73
+ }
74
+ console.log(
75
+ chalk.yellow(
76
+ "\nNo AWS profile selected (--profile and AWS_PROFILE are unset)."
77
+ )
78
+ );
79
+ const chosen = await pickProfileInteractive(profiles);
80
+ console.log(chalk.gray(`Using profile "${chosen}" for this command.
81
+ `));
82
+ return chosen;
83
+ }
84
+
85
+ export {
86
+ listConfigProfiles,
87
+ pickProfileInteractive,
88
+ resolveProfile
89
+ };
@@ -0,0 +1,11 @@
1
+ // src/commands/aws/schema.js
2
+ import { z } from "zod";
3
+ var profileField = z.string().optional().describe("AWS profile (defaults to the AWS_PROFILE environment variable)");
4
+ var regionField = z.string().optional().describe("AWS region");
5
+ var verboseField = z.boolean().optional().default(false).describe("Enable verbose logging for detailed output and error traces");
6
+
7
+ export {
8
+ profileField,
9
+ regionField,
10
+ verboseField
11
+ };
File without changes
File without changes
File without changes
@@ -0,0 +1,61 @@
1
+ // src/commands/aws/ses/smtp-password.js
2
+ import { createHmac } from "crypto";
3
+ var SMTP_REGIONS = /* @__PURE__ */ new Set([
4
+ "us-east-2",
5
+ "us-east-1",
6
+ "us-west-1",
7
+ "us-west-2",
8
+ "ap-south-1",
9
+ "ap-northeast-2",
10
+ "ap-southeast-1",
11
+ "ap-southeast-2",
12
+ "ap-northeast-1",
13
+ "ca-central-1",
14
+ "eu-central-1",
15
+ "eu-west-1",
16
+ "eu-west-2",
17
+ "eu-west-3",
18
+ "eu-south-1",
19
+ "eu-north-1",
20
+ "sa-east-1",
21
+ "us-gov-west-1",
22
+ "us-gov-east-1",
23
+ "me-south-1",
24
+ "af-south-1",
25
+ "il-central-1"
26
+ ]);
27
+ var DATE = "11111111";
28
+ var SERVICE = "ses";
29
+ var MESSAGE = "SendRawEmail";
30
+ var TERMINAL = "aws4_request";
31
+ var VERSION = 4;
32
+ function sign(key, message) {
33
+ return createHmac("sha256", key).update(message, "utf8").digest();
34
+ }
35
+ function calculateSmtpPassword(params) {
36
+ const { secretAccessKey, region } = params;
37
+ if (!SMTP_REGIONS.has(region)) {
38
+ throw new Error(
39
+ `calculateSmtpPassword: region "${region}" has no SES SMTP endpoint`
40
+ );
41
+ }
42
+ let signature = sign(Buffer.from(`AWS4${secretAccessKey}`, "utf8"), DATE);
43
+ signature = sign(signature, region);
44
+ signature = sign(signature, SERVICE);
45
+ signature = sign(signature, TERMINAL);
46
+ signature = sign(signature, MESSAGE);
47
+ const signatureAndVersion = Buffer.concat([
48
+ Buffer.from([VERSION]),
49
+ signature
50
+ ]);
51
+ return signatureAndVersion.toString("base64");
52
+ }
53
+ function smtpEndpoint(region) {
54
+ return `email-smtp.${region}.amazonaws.com`;
55
+ }
56
+
57
+ export {
58
+ SMTP_REGIONS,
59
+ calculateSmtpPassword,
60
+ smtpEndpoint
61
+ };
File without changes
File without changes
@@ -0,0 +1,121 @@
1
+ // src/commands/db/create-readonly-user/utils.js
2
+ import { randomBytes } from "crypto";
3
+ function generatePassword(params = {}) {
4
+ const { length = 24 } = params;
5
+ const alphabet = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!@#$%^&*";
6
+ const bytes = randomBytes(length);
7
+ let result = "";
8
+ for (let i = 0; i < length; i += 1) {
9
+ const byte = bytes[i] ?? 0;
10
+ result += alphabet[byte % alphabet.length];
11
+ }
12
+ return result;
13
+ }
14
+ function detectEngineFromUrl(url) {
15
+ const trimmed = url.trim().toLowerCase();
16
+ if (trimmed.startsWith("postgres://") || trimmed.startsWith("postgresql://")) {
17
+ return "postgres";
18
+ }
19
+ if (trimmed.startsWith("mysql://") || trimmed.startsWith("mysql2://")) {
20
+ return "mysql";
21
+ }
22
+ return null;
23
+ }
24
+ function resolveAdminUrl(params) {
25
+ const { url, engine } = params;
26
+ if (url) {
27
+ return url;
28
+ }
29
+ if (engine === "mysql") {
30
+ return process.env.MYSQL_URL ?? process.env.DATABASE_URL ?? process.env.MYSQL_DATABASE_URL ?? null;
31
+ }
32
+ if (engine === "postgres") {
33
+ return process.env.DATABASE_URL ?? process.env.POSTGRES_URL ?? process.env.POSTGRESQL_URL ?? null;
34
+ }
35
+ return process.env.DATABASE_URL ?? process.env.POSTGRES_URL ?? process.env.POSTGRESQL_URL ?? process.env.MYSQL_URL ?? process.env.MYSQL_DATABASE_URL ?? null;
36
+ }
37
+ function resolveSsl(params) {
38
+ const { host, sslOption } = params;
39
+ if (sslOption === true) {
40
+ return { rejectUnauthorized: false };
41
+ }
42
+ if (sslOption === false) {
43
+ return false;
44
+ }
45
+ const local = host === "localhost" || host === "127.0.0.1" || host === "::1" || host === "0.0.0.0";
46
+ if (local) {
47
+ return false;
48
+ }
49
+ return { rejectUnauthorized: false };
50
+ }
51
+ function parseConnectionUrl(params) {
52
+ const { url, engine: engineOption, sslOption } = params;
53
+ const engine = engineOption ?? detectEngineFromUrl(url);
54
+ if (!engine) {
55
+ throw new Error(
56
+ `Could not detect engine from URL. Pass --engine postgres|mysql. URL starts with: ${url.slice(0, 24)}\u2026`
57
+ );
58
+ }
59
+ let parsed;
60
+ try {
61
+ parsed = new URL(url);
62
+ } catch {
63
+ throw new Error(`Invalid connection URL: ${url}`);
64
+ }
65
+ const defaultPort = engine === "postgres" ? 5432 : 3306;
66
+ const port = parsed.port ? Number.parseInt(parsed.port, 10) : defaultPort;
67
+ const database = decodeURIComponent(parsed.pathname.replace(/^\//, "")) || (engine === "postgres" ? "postgres" : "");
68
+ const host = parsed.hostname || "localhost";
69
+ const user = decodeURIComponent(parsed.username || "");
70
+ const password = decodeURIComponent(parsed.password || "");
71
+ if (!user) {
72
+ throw new Error("Connection URL is missing a username");
73
+ }
74
+ return {
75
+ engine,
76
+ host,
77
+ port: Number.isFinite(port) ? port : defaultPort,
78
+ user,
79
+ password,
80
+ database,
81
+ ssl: resolveSsl({ host, sslOption }),
82
+ url
83
+ };
84
+ }
85
+ function buildReadonlyUrl(params) {
86
+ const { engine, host, port, username, password, database } = params;
87
+ const scheme = engine === "postgres" ? "postgresql" : "mysql";
88
+ const auth = `${encodeURIComponent(username)}:${encodeURIComponent(password)}`;
89
+ const dbPath = database ? `/${encodeURIComponent(database)}` : "/";
90
+ return `${scheme}://${auth}@${host}:${port}${dbPath}`;
91
+ }
92
+ function quoteIdent(params) {
93
+ const { engine, name } = params;
94
+ if (engine === "postgres") {
95
+ return `"${name.replace(/"/g, '""')}"`;
96
+ }
97
+ return `\`${name.replace(/`/g, "``")}\``;
98
+ }
99
+ function quoteLiteral(value) {
100
+ return `'${value.replace(/'/g, "''")}'`;
101
+ }
102
+ function isSystemDatabase(params) {
103
+ const { engine, name } = params;
104
+ const lower = name.toLowerCase();
105
+ if (engine === "postgres") {
106
+ return lower === "template0" || lower === "template1" || lower === "rdsadmin" || lower === "cloudsqladmin";
107
+ }
108
+ return lower === "information_schema" || lower === "performance_schema" || lower === "mysql" || lower === "sys" || lower === "innodb" || lower === "#mysql50#lost+found";
109
+ }
110
+
111
+ export {
112
+ generatePassword,
113
+ detectEngineFromUrl,
114
+ resolveAdminUrl,
115
+ resolveSsl,
116
+ parseConnectionUrl,
117
+ buildReadonlyUrl,
118
+ quoteIdent,
119
+ quoteLiteral,
120
+ isSystemDatabase
121
+ };