@mtndev/cli 2.0.0 → 2.0.1

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 (264) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/__chunks/VH7oDXx4.cjs +28 -0
  3. package/cjs/commands/aws/ec2/allow-ip/handler.cjs +261 -12
  4. package/cjs/commands/aws/ec2/allow-ip/index.cjs +25 -55
  5. package/cjs/commands/aws/ec2/allow-ip/schema.cjs +33 -13
  6. package/cjs/commands/aws/ec2/allow-ip/utils.cjs +379 -39
  7. package/cjs/commands/aws/iam/admin-group.cjs +111 -15
  8. package/cjs/commands/aws/iam/break-glass/handler.cjs +127 -12
  9. package/cjs/commands/aws/iam/break-glass/index.cjs +7 -19
  10. package/cjs/commands/aws/iam/break-glass/schema.cjs +21 -12
  11. package/cjs/commands/aws/iam/check-admin/handler.cjs +89 -10
  12. package/cjs/commands/aws/iam/check-admin/index.cjs +7 -17
  13. package/cjs/commands/aws/iam/check-admin/schema.cjs +19 -12
  14. package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
  15. package/cjs/commands/aws/iam/policies/sts-federation.json +11 -0
  16. package/cjs/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
  17. package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
  18. package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
  19. package/cjs/commands/aws/iam/policies/user-admins-write-list.json +117 -0
  20. package/cjs/commands/aws/iam/remove-admin/handler.cjs +120 -11
  21. package/cjs/commands/aws/iam/remove-admin/index.cjs +7 -18
  22. package/cjs/commands/aws/iam/remove-admin/schema.cjs +22 -12
  23. package/cjs/commands/aws/iam/setup-acl/handler.cjs +227 -14
  24. package/cjs/commands/aws/iam/setup-acl/index.cjs +13 -33
  25. package/cjs/commands/aws/iam/setup-acl/schema.cjs +19 -7
  26. package/cjs/commands/aws/iam/setup-acl/utils.cjs +305 -20
  27. package/cjs/commands/aws/iam/users/handler.cjs +59 -12
  28. package/cjs/commands/aws/iam/users/index.cjs +18 -41
  29. package/cjs/commands/aws/iam/users/schema.cjs +17 -7
  30. package/cjs/commands/aws/iam/users/utils.cjs +454 -30
  31. package/cjs/commands/aws/index.cjs +223 -229
  32. package/cjs/commands/aws/route53/add-record/handler.cjs +264 -18
  33. package/cjs/commands/aws/route53/add-record/index.cjs +26 -57
  34. package/cjs/commands/aws/route53/add-record/schema.cjs +43 -11
  35. package/cjs/commands/aws/route53/add-record/utils.cjs +404 -37
  36. package/cjs/commands/aws/route53/remove-record/handler.cjs +114 -14
  37. package/cjs/commands/aws/route53/remove-record/index.cjs +5 -18
  38. package/cjs/commands/aws/route53/remove-record/schema.cjs +22 -8
  39. package/cjs/commands/aws/schema.cjs +19 -10
  40. package/cjs/commands/aws/ses/send-email/handler.cjs +73 -12
  41. package/cjs/commands/aws/ses/send-email/index.cjs +9 -23
  42. package/cjs/commands/aws/ses/send-email/schema.cjs +24 -7
  43. package/cjs/commands/aws/ses/send-email/utils.cjs +87 -11
  44. package/cjs/commands/aws/ses/smtp-password.cjs +72 -10
  45. package/cjs/commands/aws/utils/exec-aws.cjs +145 -16
  46. package/cjs/commands/aws/utils/resolve-policy-path.cjs +15 -6
  47. package/cjs/commands/aws/utils/resolve-profile.cjs +93 -11
  48. package/cjs/commands/aws/utils/tty.cjs +54 -10
  49. package/cjs/commands/db/create-readonly-user/handler.cjs +254 -11
  50. package/cjs/commands/db/create-readonly-user/index.cjs +18 -40
  51. package/cjs/commands/db/create-readonly-user/mysql.cjs +102 -9
  52. package/cjs/commands/db/create-readonly-user/postgres.cjs +209 -9
  53. package/cjs/commands/db/create-readonly-user/schema.cjs +39 -12
  54. package/cjs/commands/db/create-readonly-user/utils.cjs +160 -22
  55. package/cjs/commands/db/index.cjs +46 -44
  56. package/cjs/commands/doppler/handler.cjs +95 -11
  57. package/cjs/commands/doppler/index.cjs +33 -68
  58. package/cjs/commands/doppler/schema.cjs +130 -14
  59. package/cjs/commands/doppler/set-secret.cjs +378 -19
  60. package/cjs/commands/doppler/utils/exec.cjs +106 -12
  61. package/cjs/commands/doppler/utils.cjs +412 -34
  62. package/cjs/commands/icons/handler.cjs +82 -8
  63. package/cjs/commands/icons/index.cjs +15 -31
  64. package/cjs/commands/icons/schema.cjs +101 -13
  65. package/cjs/commands/icons/utils.cjs +131 -13
  66. package/cjs/commands/index.cjs +54 -161
  67. package/cjs/commands/schema.cjs +25 -8
  68. package/cjs/index.cjs +3 -4
  69. package/esm/commands/aws/ec2/allow-ip/handler.js +258 -12
  70. package/esm/commands/aws/ec2/allow-ip/index.js +4 -55
  71. package/esm/commands/aws/ec2/allow-ip/schema.js +29 -13
  72. package/esm/commands/aws/ec2/allow-ip/utils.js +363 -39
  73. package/esm/commands/aws/iam/admin-group.js +104 -15
  74. package/esm/commands/aws/iam/break-glass/handler.js +124 -12
  75. package/esm/commands/aws/iam/break-glass/index.js +4 -19
  76. package/esm/commands/aws/iam/break-glass/schema.js +19 -12
  77. package/esm/commands/aws/iam/check-admin/handler.js +86 -10
  78. package/esm/commands/aws/iam/check-admin/index.js +4 -17
  79. package/esm/commands/aws/iam/check-admin/schema.js +17 -12
  80. package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
  81. package/esm/commands/aws/iam/policies/sts-federation.json +11 -0
  82. package/esm/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
  83. package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
  84. package/esm/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
  85. package/esm/commands/aws/iam/policies/user-admins-write-list.json +117 -0
  86. package/esm/commands/aws/iam/remove-admin/handler.js +117 -11
  87. package/esm/commands/aws/iam/remove-admin/index.js +4 -18
  88. package/esm/commands/aws/iam/remove-admin/schema.js +20 -12
  89. package/esm/commands/aws/iam/setup-acl/handler.js +224 -14
  90. package/esm/commands/aws/iam/setup-acl/index.js +4 -33
  91. package/esm/commands/aws/iam/setup-acl/schema.js +18 -7
  92. package/esm/commands/aws/iam/setup-acl/utils.js +298 -20
  93. package/esm/commands/aws/iam/users/handler.js +56 -12
  94. package/esm/commands/aws/iam/users/index.js +4 -41
  95. package/esm/commands/aws/iam/users/schema.js +16 -7
  96. package/esm/commands/aws/iam/users/utils.js +440 -30
  97. package/esm/commands/aws/index.js +142 -229
  98. package/esm/commands/aws/route53/add-record/handler.js +258 -18
  99. package/esm/commands/aws/route53/add-record/index.js +4 -57
  100. package/esm/commands/aws/route53/add-record/schema.js +40 -11
  101. package/esm/commands/aws/route53/add-record/utils.js +389 -37
  102. package/esm/commands/aws/route53/remove-record/handler.js +111 -14
  103. package/esm/commands/aws/route53/remove-record/index.js +3 -18
  104. package/esm/commands/aws/route53/remove-record/schema.js +21 -8
  105. package/esm/commands/aws/schema.js +16 -10
  106. package/esm/commands/aws/ses/send-email/handler.js +70 -12
  107. package/esm/commands/aws/ses/send-email/index.js +4 -23
  108. package/esm/commands/aws/ses/send-email/schema.js +23 -7
  109. package/esm/commands/aws/ses/send-email/utils.js +84 -11
  110. package/esm/commands/aws/ses/smtp-password.js +69 -10
  111. package/esm/commands/aws/utils/exec-aws.js +136 -15
  112. package/esm/commands/aws/utils/resolve-policy-path.js +14 -6
  113. package/esm/commands/aws/utils/resolve-profile.js +88 -11
  114. package/esm/commands/aws/utils/tty.js +51 -10
  115. package/esm/commands/db/create-readonly-user/handler.js +251 -11
  116. package/esm/commands/db/create-readonly-user/index.js +4 -40
  117. package/esm/commands/db/create-readonly-user/mysql.js +98 -9
  118. package/esm/commands/db/create-readonly-user/postgres.js +205 -9
  119. package/esm/commands/db/create-readonly-user/schema.js +35 -12
  120. package/esm/commands/db/create-readonly-user/utils.js +151 -22
  121. package/esm/commands/db/index.js +31 -44
  122. package/esm/commands/doppler/handler.js +92 -11
  123. package/esm/commands/doppler/index.js +6 -68
  124. package/esm/commands/doppler/schema.js +125 -15
  125. package/esm/commands/doppler/set-secret.js +370 -19
  126. package/esm/commands/doppler/utils/exec.js +100 -12
  127. package/esm/commands/doppler/utils.js +396 -34
  128. package/esm/commands/icons/handler.js +79 -8
  129. package/esm/commands/icons/index.js +4 -31
  130. package/esm/commands/icons/schema.js +97 -15
  131. package/esm/commands/icons/utils.js +125 -13
  132. package/esm/commands/index.js +47 -155
  133. package/esm/commands/schema.js +22 -7
  134. package/esm/index.js +3 -4
  135. package/package.json +5 -2
  136. package/vitest.config.ts +11 -0
  137. package/cjs/__chunks/2FSYDFUV.cjs +0 -146
  138. package/cjs/__chunks/3A5ZYU5M.cjs +0 -105
  139. package/cjs/__chunks/3BY5Y4W7.cjs +0 -1
  140. package/cjs/__chunks/3NOHGUCF.cjs +0 -9
  141. package/cjs/__chunks/3T2LXW7J.cjs +0 -387
  142. package/cjs/__chunks/4SFWHCB3.cjs +0 -133
  143. package/cjs/__chunks/4XT5JEAS.cjs +0 -1
  144. package/cjs/__chunks/AZEB4H4I.cjs +0 -208
  145. package/cjs/__chunks/B2KFW7T7.cjs +0 -1
  146. package/cjs/__chunks/B5ENMOCD.cjs +0 -288
  147. package/cjs/__chunks/B6XM5KSF.cjs +0 -338
  148. package/cjs/__chunks/BDU2UCE5.cjs +0 -1
  149. package/cjs/__chunks/BLMSMR5E.cjs +0 -46
  150. package/cjs/__chunks/CMUD7LLN.cjs +0 -47
  151. package/cjs/__chunks/DTQ2LB3I.cjs +0 -49
  152. package/cjs/__chunks/FM5MVRQF.cjs +0 -23
  153. package/cjs/__chunks/FRHST54J.cjs +0 -135
  154. package/cjs/__chunks/FU4VP2LN.cjs +0 -1
  155. package/cjs/__chunks/G5K4PVIL.cjs +0 -26
  156. package/cjs/__chunks/GU3R54MK.cjs +0 -127
  157. package/cjs/__chunks/GUL36IFZ.cjs +0 -61
  158. package/cjs/__chunks/GZMTNK5N.cjs +0 -1
  159. package/cjs/__chunks/H74JSDBU.cjs +0 -30
  160. package/cjs/__chunks/INFOPAHN.cjs +0 -117
  161. package/cjs/__chunks/J36P6UNE.cjs +0 -75
  162. package/cjs/__chunks/JB7T7PKQ.cjs +0 -538
  163. package/cjs/__chunks/JSL2JDMW.cjs +0 -1
  164. package/cjs/__chunks/K4QNHRTP.cjs +0 -163
  165. package/cjs/__chunks/KU76LC42.cjs +0 -192
  166. package/cjs/__chunks/LFDSHANP.cjs +0 -34
  167. package/cjs/__chunks/LHE24ECK.cjs +0 -192
  168. package/cjs/__chunks/LIKQ3SI4.cjs +0 -1
  169. package/cjs/__chunks/LXDF5QVZ.cjs +0 -313
  170. package/cjs/__chunks/LXOOJR2R.cjs +0 -74
  171. package/cjs/__chunks/N5MXFOQZ.cjs +0 -167
  172. package/cjs/__chunks/N7D56LPP.cjs +0 -25
  173. package/cjs/__chunks/NFXQNOQH.cjs +0 -393
  174. package/cjs/__chunks/NIMXXHJQ.cjs +0 -92
  175. package/cjs/__chunks/NLKJIUEX.cjs +0 -126
  176. package/cjs/__chunks/NT2XXAI6.cjs +0 -89
  177. package/cjs/__chunks/NWZGFHKH.cjs +0 -121
  178. package/cjs/__chunks/R3GUC7O7.cjs +0 -110
  179. package/cjs/__chunks/RPVAXPJ4.cjs +0 -1
  180. package/cjs/__chunks/S3LVCWPN.cjs +0 -23
  181. package/cjs/__chunks/SBBNW2BF.cjs +0 -249
  182. package/cjs/__chunks/T2A7TN4F.cjs +0 -81
  183. package/cjs/__chunks/TKNNDDIB.cjs +0 -97
  184. package/cjs/__chunks/TNSRDJPR.cjs +0 -1
  185. package/cjs/__chunks/UWHPE2GI.cjs +0 -20
  186. package/cjs/__chunks/W6K7BV74.cjs +0 -1
  187. package/cjs/__chunks/WBOQ6AUN.cjs +0 -320
  188. package/cjs/__chunks/WHGN5PZI.cjs +0 -299
  189. package/cjs/__chunks/WOYF2L6T.cjs +0 -11
  190. package/cjs/__chunks/X26XY2N6.cjs +0 -18
  191. package/cjs/__chunks/XMKOKRXZ.cjs +0 -16
  192. package/cjs/__chunks/XTJPQ3EX.cjs +0 -1
  193. package/cjs/__chunks/YRHFKTW2.cjs +0 -63
  194. package/cjs/__chunks/ZMDIOZPT.cjs +0 -22
  195. package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.cjs +0 -28
  196. package/cjs/commands/aws/iam/policies/sts-federation.cjs +0 -19
  197. package/cjs/commands/aws/iam/policies/user-admins-deny-list.cjs +0 -183
  198. package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.cjs +0 -49
  199. package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.cjs +0 -64
  200. package/cjs/commands/aws/iam/policies/user-admins-write-list.cjs +0 -125
  201. package/esm/__chunks/2FTTEFEK.js +0 -97
  202. package/esm/__chunks/33UYMUQD.js +0 -338
  203. package/esm/__chunks/3BKWTHLJ.js +0 -25
  204. package/esm/__chunks/3HE4BEJX.js +0 -105
  205. package/esm/__chunks/3QLI5BDL.js +0 -387
  206. package/esm/__chunks/5GIUAFXL.js +0 -89
  207. package/esm/__chunks/5ZBVGSOK.js +0 -0
  208. package/esm/__chunks/6G4PXXKF.js +0 -75
  209. package/esm/__chunks/73BJG53F.js +0 -11
  210. package/esm/__chunks/7VF4Q43Q.js +0 -0
  211. package/esm/__chunks/AEDEAYF5.js +0 -0
  212. package/esm/__chunks/AZCP3SFJ.js +0 -0
  213. package/esm/__chunks/B2DVQ2UL.js +0 -61
  214. package/esm/__chunks/CVQVHLW5.js +0 -0
  215. package/esm/__chunks/D62SPZXC.js +0 -0
  216. package/esm/__chunks/DLEJ25GZ.js +0 -121
  217. package/esm/__chunks/DMYFNF54.js +0 -192
  218. package/esm/__chunks/DNFTUMGD.js +0 -23
  219. package/esm/__chunks/DVKD6YSR.js +0 -49
  220. package/esm/__chunks/EMSH4P76.js +0 -20
  221. package/esm/__chunks/FFKFVMIE.js +0 -167
  222. package/esm/__chunks/FL7AILGH.js +0 -133
  223. package/esm/__chunks/FNXUONAV.js +0 -110
  224. package/esm/__chunks/G4NJHFFU.js +0 -320
  225. package/esm/__chunks/HJSXC6HP.js +0 -117
  226. package/esm/__chunks/IEOGAQYI.js +0 -46
  227. package/esm/__chunks/IZFGBYGE.js +0 -34
  228. package/esm/__chunks/J34UVKLA.js +0 -26
  229. package/esm/__chunks/JZPBBBIG.js +0 -74
  230. package/esm/__chunks/KWUJP5MG.js +0 -135
  231. package/esm/__chunks/M35URMT4.js +0 -313
  232. package/esm/__chunks/NF3M2L6C.js +0 -81
  233. package/esm/__chunks/O3CCA76Q.js +0 -22
  234. package/esm/__chunks/PNPPDYKC.js +0 -299
  235. package/esm/__chunks/QFXN4EHM.js +0 -393
  236. package/esm/__chunks/QKDDLIWD.js +0 -146
  237. package/esm/__chunks/QSE66AKY.js +0 -208
  238. package/esm/__chunks/QUF7PS4R.js +0 -18
  239. package/esm/__chunks/S7IJPJ4R.js +0 -126
  240. package/esm/__chunks/SD3E3EPH.js +0 -163
  241. package/esm/__chunks/SJXQJ7RS.js +0 -92
  242. package/esm/__chunks/SNCKIAOR.js +0 -0
  243. package/esm/__chunks/T3TTUHTW.js +0 -30
  244. package/esm/__chunks/TIOVE6HR.js +0 -0
  245. package/esm/__chunks/TXKMEIDQ.js +0 -0
  246. package/esm/__chunks/U7HAE2RF.js +0 -288
  247. package/esm/__chunks/UXWY7BYE.js +0 -63
  248. package/esm/__chunks/VKAKISRG.js +0 -192
  249. package/esm/__chunks/WD2YR6I7.js +0 -0
  250. package/esm/__chunks/WOZFZKFY.js +0 -0
  251. package/esm/__chunks/XI7GZDE2.js +0 -0
  252. package/esm/__chunks/XOUWDB3T.js +0 -249
  253. package/esm/__chunks/XQN2TA4S.js +0 -23
  254. package/esm/__chunks/XXK32TIM.js +0 -16
  255. package/esm/__chunks/YGWTVPZE.js +0 -538
  256. package/esm/__chunks/YRG7PT33.js +0 -127
  257. package/esm/__chunks/ZHKVJO2U.js +0 -47
  258. package/esm/__chunks/ZO55YUSY.js +0 -9
  259. package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.js +0 -28
  260. package/esm/commands/aws/iam/policies/sts-federation.js +0 -19
  261. package/esm/commands/aws/iam/policies/user-admins-deny-list.js +0 -183
  262. package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.js +0 -49
  263. package/esm/commands/aws/iam/policies/user-admins-self-service-iam.js +0 -64
  264. package/esm/commands/aws/iam/policies/user-admins-write-list.js +0 -125
@@ -1,20 +1,305 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
- var _SBBNW2BFcjs = require('../../../../__chunks/SBBNW2BF.cjs');
10
- require('../../../../__chunks/R3GUC7O7.cjs');
11
- require('../../../../__chunks/3NOHGUCF.cjs');
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
- exports.ACL_GROUPS = _SBBNW2BFcjs.ACL_GROUPS; exports.CUSTOM_POLICIES = _SBBNW2BFcjs.CUSTOM_POLICIES; exports.attach = _SBBNW2BFcjs.attach; exports.detach = _SBBNW2BFcjs.detach; exports.ensureGroup = _SBBNW2BFcjs.ensureGroup; exports.printFinalState = _SBBNW2BFcjs.printFinalState; exports.publishPolicy = _SBBNW2BFcjs.publishPolicy;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_commands_aws_utils_exec_aws = require("../../utils/exec-aws.cjs");
3
+ const require_commands_aws_utils_resolve_policy_path = require("../../utils/resolve-policy-path.cjs");
4
+ //#region src/commands/aws/iam/setup-acl/utils.js
5
+ /**
6
+ * The five ACL groups managed by setup-acl.
7
+ */
8
+ const ACL_GROUPS = [
9
+ "acl-admin-do-not-use",
10
+ "acl-iam-full-access",
11
+ "acl-power-users",
12
+ "acl-read-only",
13
+ "acl-s3-restrictions"
14
+ ];
15
+ /**
16
+ * Custom managed policies published from bundled JSON documents.
17
+ * @type {Array<{ name: string; fileName: string }>}
18
+ */
19
+ const CUSTOM_POLICIES = [
20
+ {
21
+ name: "UserAdminsWriteList",
22
+ fileName: "user-admins-write-list.json"
23
+ },
24
+ {
25
+ name: "UserAdminsDenyList",
26
+ fileName: "user-admins-deny-list.json"
27
+ },
28
+ {
29
+ name: "UserAdminsSelfServiceIAM",
30
+ fileName: "user-admins-self-service-iam.json"
31
+ },
32
+ {
33
+ name: "UserAdminsDenyRegionsList",
34
+ fileName: "user-admins-deny-regions-list.json"
35
+ },
36
+ {
37
+ name: "sts-federation",
38
+ fileName: "sts-federation.json"
39
+ },
40
+ {
41
+ name: "S3RestrictionsDenyNonS3Services",
42
+ fileName: "s3-restrictions-deny-non-s3-services.json"
43
+ }
44
+ ];
45
+ /**
46
+ * Create an IAM group if it does not already exist.
47
+ * @param {{ name: string; profile?: string; verbose?: boolean }} params
48
+ */
49
+ function ensureGroup(params) {
50
+ const { name, profile, verbose } = params;
51
+ let exists = true;
52
+ try {
53
+ require_commands_aws_utils_exec_aws.runAws({
54
+ profile,
55
+ args: [
56
+ "iam",
57
+ "get-group",
58
+ "--group-name",
59
+ name
60
+ ],
61
+ verbose
62
+ });
63
+ } catch {
64
+ exists = false;
65
+ }
66
+ if (exists) {
67
+ console.log(` Group exists: ${name}`);
68
+ return;
69
+ }
70
+ console.log(` Create group: ${name}`);
71
+ require_commands_aws_utils_exec_aws.runAws({
72
+ profile,
73
+ args: [
74
+ "iam",
75
+ "create-group",
76
+ "--group-name",
77
+ name,
78
+ "--path",
79
+ "/"
80
+ ],
81
+ expectJson: false,
82
+ verbose
83
+ });
84
+ }
85
+ /**
86
+ * Create or update a customer-managed policy from a bundled JSON document.
87
+ * Handles the IAM five-version limit by pruning the oldest non-default version.
88
+ * @param {{ name: string; fileName: string; accountId: string; profile?: string; verbose?: boolean }} params
89
+ */
90
+ function publishPolicy(params) {
91
+ const { name, fileName, accountId, profile, verbose } = params;
92
+ const arn = `arn:aws:iam::${accountId}:policy/${name}`;
93
+ const file = require_commands_aws_utils_resolve_policy_path.resolvePolicyPath(fileName);
94
+ let exists = true;
95
+ try {
96
+ require_commands_aws_utils_exec_aws.runAws({
97
+ profile,
98
+ args: [
99
+ "iam",
100
+ "get-policy",
101
+ "--policy-arn",
102
+ arn
103
+ ],
104
+ verbose
105
+ });
106
+ } catch {
107
+ exists = false;
108
+ }
109
+ if (!exists) {
110
+ console.log(` Create policy: ${name}`);
111
+ require_commands_aws_utils_exec_aws.runAws({
112
+ profile,
113
+ args: [
114
+ "iam",
115
+ "create-policy",
116
+ "--policy-name",
117
+ name,
118
+ "--policy-document",
119
+ `file://${file}`,
120
+ "--description",
121
+ `ACL: ${name}`
122
+ ],
123
+ expectJson: false,
124
+ verbose
125
+ });
126
+ return;
127
+ }
128
+ if ((Number.parseInt(require_commands_aws_utils_exec_aws.runAws({
129
+ profile,
130
+ args: [
131
+ "iam",
132
+ "list-policy-versions",
133
+ "--policy-arn",
134
+ arn,
135
+ "--query",
136
+ "length(Versions[?IsDefaultVersion==`false`])",
137
+ "--output",
138
+ "text"
139
+ ],
140
+ expectJson: false,
141
+ verbose
142
+ }), 10) || 0) >= 4) {
143
+ const oldest = require_commands_aws_utils_exec_aws.runAws({
144
+ profile,
145
+ args: [
146
+ "iam",
147
+ "list-policy-versions",
148
+ "--policy-arn",
149
+ arn,
150
+ "--query",
151
+ "Versions[?IsDefaultVersion==`false`] | sort_by(@, &CreateDate)[0].VersionId",
152
+ "--output",
153
+ "text"
154
+ ],
155
+ expectJson: false,
156
+ verbose
157
+ });
158
+ console.log(` Prune oldest version of ${name}: ${oldest}`);
159
+ require_commands_aws_utils_exec_aws.runAws({
160
+ profile,
161
+ args: [
162
+ "iam",
163
+ "delete-policy-version",
164
+ "--policy-arn",
165
+ arn,
166
+ "--version-id",
167
+ oldest
168
+ ],
169
+ expectJson: false,
170
+ verbose
171
+ });
172
+ }
173
+ console.log(` Update policy: ${name}`);
174
+ require_commands_aws_utils_exec_aws.runAws({
175
+ profile,
176
+ args: [
177
+ "iam",
178
+ "create-policy-version",
179
+ "--policy-arn",
180
+ arn,
181
+ "--policy-document",
182
+ `file://${file}`,
183
+ "--set-as-default"
184
+ ],
185
+ expectJson: false,
186
+ verbose
187
+ });
188
+ }
189
+ /**
190
+ * @param {{ group: string; arn: string; profile?: string; verbose?: boolean }} params
191
+ * @returns {boolean}
192
+ */
193
+ function isPolicyAttached(params) {
194
+ const { group, arn, profile, verbose } = params;
195
+ const out = require_commands_aws_utils_exec_aws.runAws({
196
+ profile,
197
+ args: [
198
+ "iam",
199
+ "list-attached-group-policies",
200
+ "--group-name",
201
+ group,
202
+ "--query",
203
+ `AttachedPolicies[?PolicyArn=='${arn}'].PolicyArn`,
204
+ "--output",
205
+ "text"
206
+ ],
207
+ expectJson: false,
208
+ verbose
209
+ });
210
+ return Boolean(out);
211
+ }
212
+ /**
213
+ * Attach a policy to a group if not already attached.
214
+ * @param {{ group: string; arn: string; profile?: string; verbose?: boolean }} params
215
+ */
216
+ function attach(params) {
217
+ const { group, arn, profile, verbose } = params;
218
+ const policyName = arn.split("/").pop() ?? arn;
219
+ if (isPolicyAttached({
220
+ group,
221
+ arn,
222
+ profile,
223
+ verbose
224
+ })) {
225
+ console.log(` [${group}] already attached: ${policyName}`);
226
+ return;
227
+ }
228
+ console.log(` [${group}] attach: ${policyName}`);
229
+ require_commands_aws_utils_exec_aws.runAws({
230
+ profile,
231
+ args: [
232
+ "iam",
233
+ "attach-group-policy",
234
+ "--group-name",
235
+ group,
236
+ "--policy-arn",
237
+ arn
238
+ ],
239
+ expectJson: false,
240
+ verbose
241
+ });
242
+ }
243
+ /**
244
+ * Detach a (legacy) policy from a group if it is currently attached.
245
+ * @param {{ group: string; arn: string; profile?: string; verbose?: boolean }} params
246
+ */
247
+ function detach(params) {
248
+ const { group, arn, profile, verbose } = params;
249
+ const policyName = arn.split("/").pop() ?? arn;
250
+ if (!isPolicyAttached({
251
+ group,
252
+ arn,
253
+ profile,
254
+ verbose
255
+ })) return;
256
+ console.log(` [${group}] detach legacy: ${policyName}`);
257
+ require_commands_aws_utils_exec_aws.runAws({
258
+ profile,
259
+ args: [
260
+ "iam",
261
+ "detach-group-policy",
262
+ "--group-name",
263
+ group,
264
+ "--policy-arn",
265
+ arn
266
+ ],
267
+ expectJson: false,
268
+ verbose
269
+ });
270
+ }
271
+ /**
272
+ * Print the attached policies for each ACL group.
273
+ * @param {{ profile?: string; verbose?: boolean }} params
274
+ */
275
+ function printFinalState(params) {
276
+ const { profile, verbose } = params;
277
+ for (const group of ACL_GROUPS) {
278
+ console.log("");
279
+ console.log(`=== ${group} ===`);
280
+ const table = require_commands_aws_utils_exec_aws.runAws({
281
+ profile,
282
+ args: [
283
+ "iam",
284
+ "list-attached-group-policies",
285
+ "--group-name",
286
+ group,
287
+ "--query",
288
+ "AttachedPolicies[].PolicyName",
289
+ "--output",
290
+ "table"
291
+ ],
292
+ expectJson: false,
293
+ verbose
294
+ });
295
+ console.log(table);
296
+ }
297
+ }
298
+ //#endregion
299
+ exports.ACL_GROUPS = ACL_GROUPS;
300
+ exports.CUSTOM_POLICIES = CUSTOM_POLICIES;
301
+ exports.attach = attach;
302
+ exports.detach = detach;
303
+ exports.ensureGroup = ensureGroup;
304
+ exports.printFinalState = printFinalState;
305
+ exports.publishPolicy = publishPolicy;
@@ -1,12 +1,59 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _LXOOJR2Rcjs = require('../../../../__chunks/LXOOJR2R.cjs');
4
- require('../../../../__chunks/XMKOKRXZ.cjs');
5
- require('../../../../__chunks/3T2LXW7J.cjs');
6
- require('../../../../__chunks/R3GUC7O7.cjs');
7
- require('../../../../__chunks/NT2XXAI6.cjs');
8
- require('../../../../__chunks/WOYF2L6T.cjs');
9
- require('../../../../__chunks/CMUD7LLN.cjs');
10
-
11
-
12
- exports.usersCommand = _LXOOJR2Rcjs.usersCommand;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_rolldown_runtime = require("../../../../__chunks/VH7oDXx4.cjs");
3
+ const require_commands_aws_utils_exec_aws = require("../../utils/exec-aws.cjs");
4
+ const require_commands_aws_utils_resolve_profile = require("../../utils/resolve-profile.cjs");
5
+ const require_commands_aws_iam_users_schema = require("./schema.cjs");
6
+ const require_commands_aws_iam_users_utils = require("./utils.cjs");
7
+ let chalk = require("chalk");
8
+ chalk = require_rolldown_runtime.__toESM(chalk, 1);
9
+ let zod = require("zod");
10
+ //#region src/commands/aws/iam/users/handler.js
11
+ /**
12
+ * `aws iam users` handler: interactively create IAM users and assign ACL groups.
13
+ * @param {unknown} options
14
+ */
15
+ async function usersCommand(options) {
16
+ try {
17
+ const { accountName, profile: profileOption, verbose } = require_commands_aws_iam_users_schema.usersOptionsSchema.parse(options);
18
+ require_commands_aws_utils_exec_aws.requireCommands(["aws"]);
19
+ const profile = await require_commands_aws_utils_resolve_profile.resolveProfile({ profile: profileOption });
20
+ console.log(chalk.default.blue("\nAWS IAM user management"));
21
+ console.log("");
22
+ console.log("Caller:");
23
+ const identity = require_commands_aws_utils_exec_aws.getCallerIdentity({
24
+ profile,
25
+ verbose
26
+ });
27
+ console.log(` Account: ${identity.Account}`);
28
+ console.log(` Arn: ${identity.Arn}`);
29
+ console.log("");
30
+ await require_commands_aws_iam_users_utils.createUsersInteractive({
31
+ accountName,
32
+ profile,
33
+ identity,
34
+ verbose
35
+ });
36
+ console.log("Done.");
37
+ } catch (error) {
38
+ if (error instanceof zod.ZodError) {
39
+ console.error(chalk.default.red("\n❌ Invalid command options:"));
40
+ error.errors.forEach((err) => {
41
+ console.error(chalk.default.red(` ${err.path.join(".")}: ${err.message}`));
42
+ });
43
+ process.exit(1);
44
+ }
45
+ const verbose = options?.verbose || false;
46
+ console.error(chalk.default.red("\n❌ iam users failed:"));
47
+ if (error instanceof Error) {
48
+ console.error(chalk.default.red(` ${error.message}`));
49
+ if (verbose && error.stack) {
50
+ console.error(chalk.default.gray("\nStack trace:"));
51
+ console.error(chalk.default.gray(error.stack));
52
+ }
53
+ } else console.error(chalk.default.red(` ${String(error)}`));
54
+ console.error(chalk.default.yellow("\n💡 Requires the AWS CLI and a profile with IAM write access.\n"));
55
+ process.exit(1);
56
+ }
57
+ }
58
+ //#endregion
59
+ exports.usersCommand = usersCommand;
@@ -1,41 +1,18 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../../../../__chunks/RPVAXPJ4.cjs');
2
-
3
-
4
- var _LXOOJR2Rcjs = require('../../../../__chunks/LXOOJR2R.cjs');
5
-
6
-
7
- var _XMKOKRXZcjs = require('../../../../__chunks/XMKOKRXZ.cjs');
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
- var _3T2LXW7Jcjs = require('../../../../__chunks/3T2LXW7J.cjs');
22
- require('../../../../__chunks/R3GUC7O7.cjs');
23
- require('../../../../__chunks/NT2XXAI6.cjs');
24
- require('../../../../__chunks/WOYF2L6T.cjs');
25
- require('../../../../__chunks/CMUD7LLN.cjs');
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
- exports.buildUsername = _3T2LXW7Jcjs.buildUsername; exports.createCliAccessKey = _3T2LXW7Jcjs.createCliAccessKey; exports.createUsersInteractive = _3T2LXW7Jcjs.createUsersInteractive; exports.ensureAclGroupsExist = _3T2LXW7Jcjs.ensureAclGroupsExist; exports.ensureUser = _3T2LXW7Jcjs.ensureUser; exports.ensureUserInGroup = _3T2LXW7Jcjs.ensureUserInGroup; exports.inferAccountName = _3T2LXW7Jcjs.inferAccountName; exports.isValidSlug = _3T2LXW7Jcjs.isValidSlug; exports.normalizeIdentifier = _3T2LXW7Jcjs.normalizeIdentifier; exports.normalizeSlug = _3T2LXW7Jcjs.normalizeSlug; exports.parseMdUsername = _3T2LXW7Jcjs.parseMdUsername; exports.roleToGroup = _3T2LXW7Jcjs.roleToGroup; exports.usersCommand = _LXOOJR2Rcjs.usersCommand; exports.usersOptionsSchema = _XMKOKRXZcjs.usersOptionsSchema;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_commands_aws_iam_users_schema = require("./schema.cjs");
3
+ const require_commands_aws_iam_users_utils = require("./utils.cjs");
4
+ const require_commands_aws_iam_users_handler = require("./handler.cjs");
5
+ exports.buildUsername = require_commands_aws_iam_users_utils.buildUsername;
6
+ exports.createCliAccessKey = require_commands_aws_iam_users_utils.createCliAccessKey;
7
+ exports.createUsersInteractive = require_commands_aws_iam_users_utils.createUsersInteractive;
8
+ exports.ensureAclGroupsExist = require_commands_aws_iam_users_utils.ensureAclGroupsExist;
9
+ exports.ensureUser = require_commands_aws_iam_users_utils.ensureUser;
10
+ exports.ensureUserInGroup = require_commands_aws_iam_users_utils.ensureUserInGroup;
11
+ exports.inferAccountName = require_commands_aws_iam_users_utils.inferAccountName;
12
+ exports.isValidSlug = require_commands_aws_iam_users_utils.isValidSlug;
13
+ exports.normalizeIdentifier = require_commands_aws_iam_users_utils.normalizeIdentifier;
14
+ exports.normalizeSlug = require_commands_aws_iam_users_utils.normalizeSlug;
15
+ exports.parseMdUsername = require_commands_aws_iam_users_utils.parseMdUsername;
16
+ exports.roleToGroup = require_commands_aws_iam_users_utils.roleToGroup;
17
+ exports.usersCommand = require_commands_aws_iam_users_handler.usersCommand;
18
+ exports.usersOptionsSchema = require_commands_aws_iam_users_schema.usersOptionsSchema;
@@ -1,7 +1,17 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _XMKOKRXZcjs = require('../../../../__chunks/XMKOKRXZ.cjs');
4
- require('../../../../__chunks/WOYF2L6T.cjs');
5
-
6
-
7
- exports.usersOptionsSchema = _XMKOKRXZcjs.usersOptionsSchema;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_commands_aws_schema = require("../../schema.cjs");
3
+ let zod = require("zod");
4
+ //#region src/commands/aws/iam/users/schema.js
5
+ /**
6
+ * Zod schema for `aws iam users` options.
7
+ */
8
+ const usersOptionsSchema = zod.z.object({
9
+ accountName: zod.z.string().optional().describe("AWS account slug used in md-{identifier}-{account}-{role}"),
10
+ profile: require_commands_aws_schema.profileField,
11
+ verbose: require_commands_aws_schema.verboseField
12
+ });
13
+ /**
14
+ * @typedef {z.infer<typeof usersOptionsSchema>} UsersOptions
15
+ */
16
+ //#endregion
17
+ exports.usersOptionsSchema = usersOptionsSchema;