@mtndev/cli 0.0.0-dev-20260626045346 → 0.0.0-pr-20-20261020022402
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.
- package/CHANGELOG.md +86 -1
- package/cjs/__chunks/2FSYDFUV.cjs +146 -0
- package/cjs/__chunks/3A5ZYU5M.cjs +105 -0
- package/cjs/__chunks/3NOHGUCF.cjs +9 -0
- package/cjs/__chunks/3T2LXW7J.cjs +387 -0
- package/cjs/__chunks/4XT5JEAS.cjs +1 -0
- package/cjs/__chunks/AZEB4H4I.cjs +208 -0
- package/cjs/__chunks/B5ENMOCD.cjs +288 -0
- package/cjs/__chunks/B6XM5KSF.cjs +338 -0
- package/cjs/__chunks/BDU2UCE5.cjs +1 -0
- package/cjs/__chunks/BLMSMR5E.cjs +46 -0
- package/cjs/__chunks/CMUD7LLN.cjs +47 -0
- package/cjs/__chunks/DTQ2LB3I.cjs +49 -0
- package/cjs/__chunks/FM5MVRQF.cjs +23 -0
- package/cjs/__chunks/FRHST54J.cjs +135 -0
- package/cjs/__chunks/FU4VP2LN.cjs +1 -0
- package/cjs/__chunks/G5K4PVIL.cjs +26 -0
- package/cjs/__chunks/{NSRFG4DF.cjs → GU3R54MK.cjs} +45 -18
- package/cjs/__chunks/GUL36IFZ.cjs +61 -0
- package/cjs/__chunks/GZMTNK5N.cjs +1 -0
- package/cjs/__chunks/H74JSDBU.cjs +30 -0
- package/cjs/__chunks/{EMMC33QA.cjs → JB7T7PKQ.cjs} +170 -33
- package/cjs/__chunks/JSL2JDMW.cjs +1 -0
- package/cjs/__chunks/K4QNHRTP.cjs +163 -0
- package/cjs/__chunks/KU76LC42.cjs +192 -0
- package/cjs/__chunks/LFDSHANP.cjs +34 -0
- package/cjs/__chunks/LHE24ECK.cjs +192 -0
- package/cjs/__chunks/LIKQ3SI4.cjs +1 -0
- package/cjs/__chunks/LXDF5QVZ.cjs +313 -0
- package/cjs/__chunks/LXOOJR2R.cjs +74 -0
- package/cjs/__chunks/N5MXFOQZ.cjs +167 -0
- package/cjs/__chunks/N7D56LPP.cjs +25 -0
- package/cjs/__chunks/NFXQNOQH.cjs +393 -0
- package/cjs/__chunks/NLKJIUEX.cjs +126 -0
- package/cjs/__chunks/NT2XXAI6.cjs +89 -0
- package/cjs/__chunks/NWZGFHKH.cjs +121 -0
- package/cjs/__chunks/R3GUC7O7.cjs +110 -0
- package/cjs/__chunks/RPVAXPJ4.cjs +1 -0
- package/cjs/__chunks/S3LVCWPN.cjs +23 -0
- package/cjs/__chunks/SBBNW2BF.cjs +249 -0
- package/cjs/__chunks/T2A7TN4F.cjs +81 -0
- package/cjs/__chunks/TKNNDDIB.cjs +97 -0
- package/cjs/__chunks/TNSRDJPR.cjs +1 -0
- package/cjs/__chunks/UWHPE2GI.cjs +20 -0
- package/cjs/__chunks/W6K7BV74.cjs +1 -0
- package/cjs/__chunks/WBOQ6AUN.cjs +320 -0
- package/cjs/__chunks/WHGN5PZI.cjs +299 -0
- package/cjs/__chunks/WOYF2L6T.cjs +11 -0
- package/cjs/__chunks/X26XY2N6.cjs +18 -0
- package/cjs/__chunks/XMKOKRXZ.cjs +16 -0
- package/cjs/__chunks/XTJPQ3EX.cjs +1 -0
- package/cjs/__chunks/YRHFKTW2.cjs +63 -0
- package/cjs/commands/aws/ec2/allow-ip/handler.cjs +12 -0
- package/cjs/commands/aws/ec2/allow-ip/handler.d.ts +6 -0
- package/cjs/commands/aws/ec2/allow-ip/index.cjs +55 -0
- package/cjs/commands/aws/ec2/allow-ip/index.d.ts +3 -0
- package/cjs/commands/aws/ec2/allow-ip/schema.cjs +13 -0
- package/cjs/commands/aws/ec2/allow-ip/schema.d.ts +33 -0
- package/cjs/commands/aws/ec2/allow-ip/utils.cjs +39 -0
- package/cjs/commands/aws/ec2/allow-ip/utils.d.ts +189 -0
- package/cjs/commands/aws/iam/admin-group.cjs +15 -0
- package/cjs/commands/aws/iam/admin-group.d.ts +55 -0
- package/cjs/commands/aws/iam/break-glass/handler.cjs +12 -0
- package/cjs/commands/aws/iam/break-glass/handler.d.ts +7 -0
- package/cjs/commands/aws/iam/break-glass/index.cjs +19 -0
- package/cjs/commands/aws/iam/break-glass/index.d.ts +2 -0
- package/cjs/commands/aws/iam/break-glass/schema.cjs +12 -0
- package/cjs/commands/aws/iam/break-glass/schema.d.ts +25 -0
- package/cjs/commands/aws/iam/check-admin/handler.cjs +10 -0
- package/cjs/commands/aws/iam/check-admin/handler.d.ts +5 -0
- package/cjs/commands/aws/iam/check-admin/index.cjs +17 -0
- package/cjs/commands/aws/iam/check-admin/index.d.ts +2 -0
- package/cjs/commands/aws/iam/check-admin/schema.cjs +12 -0
- package/cjs/commands/aws/iam/check-admin/schema.d.ts +19 -0
- package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.cjs +28 -0
- package/cjs/commands/aws/iam/policies/sts-federation.cjs +19 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-list.cjs +183 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.cjs +49 -0
- package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.cjs +64 -0
- package/cjs/commands/aws/iam/policies/user-admins-write-list.cjs +125 -0
- package/cjs/commands/aws/iam/remove-admin/handler.cjs +11 -0
- package/cjs/commands/aws/iam/remove-admin/handler.d.ts +6 -0
- package/cjs/commands/aws/iam/remove-admin/index.cjs +18 -0
- package/cjs/commands/aws/iam/remove-admin/index.d.ts +2 -0
- package/cjs/commands/aws/iam/remove-admin/schema.cjs +12 -0
- package/cjs/commands/aws/iam/remove-admin/schema.d.ts +28 -0
- package/cjs/commands/aws/iam/setup-acl/handler.cjs +14 -0
- package/cjs/commands/aws/iam/setup-acl/handler.d.ts +6 -0
- package/cjs/commands/aws/iam/setup-acl/index.cjs +33 -0
- package/cjs/commands/aws/iam/setup-acl/index.d.ts +3 -0
- package/cjs/commands/aws/iam/setup-acl/schema.cjs +7 -0
- package/cjs/commands/aws/iam/setup-acl/schema.d.ts +24 -0
- package/cjs/commands/aws/iam/setup-acl/utils.cjs +20 -0
- package/cjs/commands/aws/iam/setup-acl/utils.d.ts +61 -0
- package/cjs/commands/aws/iam/users/handler.cjs +12 -0
- package/cjs/commands/aws/iam/users/handler.d.ts +5 -0
- package/cjs/commands/aws/iam/users/index.cjs +41 -0
- package/cjs/commands/aws/iam/users/index.d.ts +3 -0
- package/cjs/commands/aws/iam/users/schema.cjs +7 -0
- package/cjs/commands/aws/iam/users/schema.d.ts +18 -0
- package/cjs/commands/aws/iam/users/utils.cjs +30 -0
- package/cjs/commands/aws/iam/users/utils.d.ts +119 -0
- package/cjs/commands/aws/index.cjs +229 -0
- package/cjs/commands/aws/index.d.ts +14 -0
- package/cjs/commands/aws/route53/add-record/handler.cjs +18 -0
- package/cjs/commands/aws/route53/add-record/handler.d.ts +36 -0
- package/cjs/commands/aws/route53/add-record/index.cjs +57 -0
- package/cjs/commands/aws/route53/add-record/index.d.ts +3 -0
- package/cjs/commands/aws/route53/add-record/schema.cjs +11 -0
- package/cjs/commands/aws/route53/add-record/schema.d.ts +45 -0
- package/cjs/commands/aws/route53/add-record/utils.cjs +37 -0
- package/cjs/commands/aws/route53/add-record/utils.d.ts +216 -0
- package/cjs/commands/aws/route53/remove-record/handler.cjs +14 -0
- package/cjs/commands/aws/route53/remove-record/handler.d.ts +6 -0
- package/cjs/commands/aws/route53/remove-record/index.cjs +18 -0
- package/cjs/commands/aws/route53/remove-record/index.d.ts +2 -0
- package/cjs/commands/aws/route53/remove-record/schema.cjs +8 -0
- package/cjs/commands/aws/route53/remove-record/schema.d.ts +30 -0
- package/cjs/commands/aws/schema.cjs +10 -0
- package/cjs/commands/aws/schema.d.ts +13 -0
- package/cjs/commands/aws/ses/send-email/handler.cjs +12 -0
- package/cjs/commands/aws/ses/send-email/handler.d.ts +5 -0
- package/cjs/commands/aws/ses/send-email/index.cjs +23 -0
- package/cjs/commands/aws/ses/send-email/index.d.ts +3 -0
- package/cjs/commands/aws/ses/send-email/schema.cjs +7 -0
- package/cjs/commands/aws/ses/send-email/schema.d.ts +39 -0
- package/cjs/commands/aws/ses/send-email/utils.cjs +11 -0
- package/cjs/commands/aws/ses/send-email/utils.d.ts +47 -0
- package/cjs/commands/aws/ses/smtp-password.cjs +10 -0
- package/cjs/commands/aws/ses/smtp-password.d.ts +21 -0
- package/cjs/commands/aws/utils/exec-aws.cjs +16 -0
- package/cjs/commands/aws/utils/exec-aws.d.ts +79 -0
- package/cjs/commands/aws/utils/resolve-policy-path.cjs +6 -0
- package/cjs/commands/aws/utils/resolve-policy-path.d.ts +8 -0
- package/cjs/commands/aws/utils/resolve-profile.cjs +11 -0
- package/cjs/commands/aws/utils/resolve-profile.d.ts +28 -0
- package/cjs/commands/aws/utils/tty.cjs +10 -0
- package/cjs/commands/aws/utils/tty.d.ts +24 -0
- package/cjs/commands/db/create-readonly-user/handler.cjs +11 -0
- package/cjs/commands/db/create-readonly-user/handler.d.ts +5 -0
- package/cjs/commands/db/create-readonly-user/index.cjs +40 -0
- package/cjs/commands/db/create-readonly-user/index.d.ts +3 -0
- package/cjs/commands/db/create-readonly-user/mysql.cjs +9 -0
- package/cjs/commands/db/create-readonly-user/mysql.d.ts +33 -0
- package/cjs/commands/db/create-readonly-user/postgres.cjs +9 -0
- package/cjs/commands/db/create-readonly-user/postgres.d.ts +31 -0
- package/cjs/commands/db/create-readonly-user/schema.cjs +12 -0
- package/cjs/commands/db/create-readonly-user/schema.d.ts +55 -0
- package/cjs/commands/db/create-readonly-user/utils.cjs +22 -0
- package/cjs/commands/db/create-readonly-user/utils.d.ts +112 -0
- package/cjs/commands/db/index.cjs +44 -0
- package/cjs/commands/db/index.d.ts +6 -0
- package/cjs/commands/doppler/handler.cjs +6 -4
- package/cjs/commands/doppler/index.cjs +32 -5
- package/cjs/commands/doppler/index.d.ts +1 -0
- package/cjs/commands/doppler/schema.cjs +10 -2
- package/cjs/commands/doppler/schema.d.ts +233 -17
- package/cjs/commands/doppler/set-secret.cjs +19 -0
- package/cjs/commands/doppler/set-secret.d.ts +113 -0
- package/cjs/commands/doppler/utils.cjs +6 -2
- package/cjs/commands/doppler/utils.d.ts +32 -8
- package/cjs/commands/icons/schema.d.ts +1 -1
- package/cjs/commands/index.cjs +91 -12
- package/esm/__chunks/2FTTEFEK.js +97 -0
- package/esm/__chunks/33UYMUQD.js +338 -0
- package/esm/__chunks/3BKWTHLJ.js +25 -0
- package/esm/__chunks/3HE4BEJX.js +105 -0
- package/esm/__chunks/3QLI5BDL.js +387 -0
- package/esm/__chunks/5GIUAFXL.js +89 -0
- package/esm/__chunks/73BJG53F.js +11 -0
- package/esm/__chunks/7VF4Q43Q.js +0 -0
- package/esm/__chunks/AEDEAYF5.js +0 -0
- package/esm/__chunks/AZCP3SFJ.js +0 -0
- package/esm/__chunks/B2DVQ2UL.js +61 -0
- package/esm/__chunks/CVQVHLW5.js +0 -0
- package/esm/__chunks/D62SPZXC.js +0 -0
- package/esm/__chunks/DLEJ25GZ.js +121 -0
- package/esm/__chunks/DMYFNF54.js +192 -0
- package/esm/__chunks/DNFTUMGD.js +23 -0
- package/esm/__chunks/DVKD6YSR.js +49 -0
- package/esm/__chunks/EMSH4P76.js +20 -0
- package/esm/__chunks/FFKFVMIE.js +167 -0
- package/esm/__chunks/FNXUONAV.js +110 -0
- package/esm/__chunks/G4NJHFFU.js +320 -0
- package/esm/__chunks/IEOGAQYI.js +46 -0
- package/esm/__chunks/IZFGBYGE.js +34 -0
- package/esm/__chunks/J34UVKLA.js +26 -0
- package/esm/__chunks/JZPBBBIG.js +74 -0
- package/esm/__chunks/KWUJP5MG.js +135 -0
- package/esm/__chunks/M35URMT4.js +313 -0
- package/esm/__chunks/NF3M2L6C.js +81 -0
- package/esm/__chunks/PNPPDYKC.js +299 -0
- package/esm/__chunks/QFXN4EHM.js +393 -0
- package/esm/__chunks/QKDDLIWD.js +146 -0
- package/esm/__chunks/QSE66AKY.js +208 -0
- package/esm/__chunks/QUF7PS4R.js +18 -0
- package/esm/__chunks/S7IJPJ4R.js +126 -0
- package/esm/__chunks/SD3E3EPH.js +163 -0
- package/esm/__chunks/T3TTUHTW.js +30 -0
- package/esm/__chunks/TIOVE6HR.js +0 -0
- package/esm/__chunks/TXKMEIDQ.js +0 -0
- package/esm/__chunks/U7HAE2RF.js +288 -0
- package/esm/__chunks/UXWY7BYE.js +63 -0
- package/esm/__chunks/VKAKISRG.js +192 -0
- package/esm/__chunks/WD2YR6I7.js +0 -0
- package/esm/__chunks/WOZFZKFY.js +0 -0
- package/esm/__chunks/XI7GZDE2.js +0 -0
- package/esm/__chunks/XOUWDB3T.js +249 -0
- package/esm/__chunks/XQN2TA4S.js +23 -0
- package/esm/__chunks/XXK32TIM.js +16 -0
- package/esm/__chunks/{O262GK4B.js → YGWTVPZE.js} +164 -27
- package/esm/__chunks/{6L5RNR7G.js → YRG7PT33.js} +44 -17
- package/esm/__chunks/ZHKVJO2U.js +47 -0
- package/esm/__chunks/ZO55YUSY.js +9 -0
- package/esm/commands/aws/ec2/allow-ip/handler.d.ts +6 -0
- package/esm/commands/aws/ec2/allow-ip/handler.js +12 -0
- package/esm/commands/aws/ec2/allow-ip/index.d.ts +3 -0
- package/esm/commands/aws/ec2/allow-ip/index.js +55 -0
- package/esm/commands/aws/ec2/allow-ip/schema.d.ts +33 -0
- package/esm/commands/aws/ec2/allow-ip/schema.js +13 -0
- package/esm/commands/aws/ec2/allow-ip/utils.d.ts +189 -0
- package/esm/commands/aws/ec2/allow-ip/utils.js +39 -0
- package/esm/commands/aws/iam/admin-group.d.ts +55 -0
- package/esm/commands/aws/iam/admin-group.js +15 -0
- package/esm/commands/aws/iam/break-glass/handler.d.ts +7 -0
- package/esm/commands/aws/iam/break-glass/handler.js +12 -0
- package/esm/commands/aws/iam/break-glass/index.d.ts +2 -0
- package/esm/commands/aws/iam/break-glass/index.js +19 -0
- package/esm/commands/aws/iam/break-glass/schema.d.ts +25 -0
- package/esm/commands/aws/iam/break-glass/schema.js +12 -0
- package/esm/commands/aws/iam/check-admin/handler.d.ts +5 -0
- package/esm/commands/aws/iam/check-admin/handler.js +10 -0
- package/esm/commands/aws/iam/check-admin/index.d.ts +2 -0
- package/esm/commands/aws/iam/check-admin/index.js +17 -0
- package/esm/commands/aws/iam/check-admin/schema.d.ts +19 -0
- package/esm/commands/aws/iam/check-admin/schema.js +12 -0
- package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.js +28 -0
- package/esm/commands/aws/iam/policies/sts-federation.js +19 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-list.js +183 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.js +49 -0
- package/esm/commands/aws/iam/policies/user-admins-self-service-iam.js +64 -0
- package/esm/commands/aws/iam/policies/user-admins-write-list.js +125 -0
- package/esm/commands/aws/iam/remove-admin/handler.d.ts +6 -0
- package/esm/commands/aws/iam/remove-admin/handler.js +11 -0
- package/esm/commands/aws/iam/remove-admin/index.d.ts +2 -0
- package/esm/commands/aws/iam/remove-admin/index.js +18 -0
- package/esm/commands/aws/iam/remove-admin/schema.d.ts +28 -0
- package/esm/commands/aws/iam/remove-admin/schema.js +12 -0
- package/esm/commands/aws/iam/setup-acl/handler.d.ts +6 -0
- package/esm/commands/aws/iam/setup-acl/handler.js +14 -0
- package/esm/commands/aws/iam/setup-acl/index.d.ts +3 -0
- package/esm/commands/aws/iam/setup-acl/index.js +33 -0
- package/esm/commands/aws/iam/setup-acl/schema.d.ts +24 -0
- package/esm/commands/aws/iam/setup-acl/schema.js +7 -0
- package/esm/commands/aws/iam/setup-acl/utils.d.ts +61 -0
- package/esm/commands/aws/iam/setup-acl/utils.js +20 -0
- package/esm/commands/aws/iam/users/handler.d.ts +5 -0
- package/esm/commands/aws/iam/users/handler.js +12 -0
- package/esm/commands/aws/iam/users/index.d.ts +3 -0
- package/esm/commands/aws/iam/users/index.js +41 -0
- package/esm/commands/aws/iam/users/schema.d.ts +18 -0
- package/esm/commands/aws/iam/users/schema.js +7 -0
- package/esm/commands/aws/iam/users/utils.d.ts +119 -0
- package/esm/commands/aws/iam/users/utils.js +30 -0
- package/esm/commands/aws/index.d.ts +14 -0
- package/esm/commands/aws/index.js +229 -0
- package/esm/commands/aws/route53/add-record/handler.d.ts +36 -0
- package/esm/commands/aws/route53/add-record/handler.js +18 -0
- package/esm/commands/aws/route53/add-record/index.d.ts +3 -0
- package/esm/commands/aws/route53/add-record/index.js +57 -0
- package/esm/commands/aws/route53/add-record/schema.d.ts +45 -0
- package/esm/commands/aws/route53/add-record/schema.js +11 -0
- package/esm/commands/aws/route53/add-record/utils.d.ts +216 -0
- package/esm/commands/aws/route53/add-record/utils.js +37 -0
- package/esm/commands/aws/route53/remove-record/handler.d.ts +6 -0
- package/esm/commands/aws/route53/remove-record/handler.js +14 -0
- package/esm/commands/aws/route53/remove-record/index.d.ts +2 -0
- package/esm/commands/aws/route53/remove-record/index.js +18 -0
- package/esm/commands/aws/route53/remove-record/schema.d.ts +30 -0
- package/esm/commands/aws/route53/remove-record/schema.js +8 -0
- package/esm/commands/aws/schema.d.ts +13 -0
- package/esm/commands/aws/schema.js +10 -0
- package/esm/commands/aws/ses/send-email/handler.d.ts +5 -0
- package/esm/commands/aws/ses/send-email/handler.js +12 -0
- package/esm/commands/aws/ses/send-email/index.d.ts +3 -0
- package/esm/commands/aws/ses/send-email/index.js +23 -0
- package/esm/commands/aws/ses/send-email/schema.d.ts +39 -0
- package/esm/commands/aws/ses/send-email/schema.js +7 -0
- package/esm/commands/aws/ses/send-email/utils.d.ts +47 -0
- package/esm/commands/aws/ses/send-email/utils.js +11 -0
- package/esm/commands/aws/ses/smtp-password.d.ts +21 -0
- package/esm/commands/aws/ses/smtp-password.js +10 -0
- package/esm/commands/aws/utils/exec-aws.d.ts +79 -0
- package/esm/commands/aws/utils/exec-aws.js +16 -0
- package/esm/commands/aws/utils/resolve-policy-path.d.ts +8 -0
- package/esm/commands/aws/utils/resolve-policy-path.js +6 -0
- package/esm/commands/aws/utils/resolve-profile.d.ts +28 -0
- package/esm/commands/aws/utils/resolve-profile.js +11 -0
- package/esm/commands/aws/utils/tty.d.ts +24 -0
- package/esm/commands/aws/utils/tty.js +10 -0
- package/esm/commands/db/create-readonly-user/handler.d.ts +5 -0
- package/esm/commands/db/create-readonly-user/handler.js +11 -0
- package/esm/commands/db/create-readonly-user/index.d.ts +3 -0
- package/esm/commands/db/create-readonly-user/index.js +40 -0
- package/esm/commands/db/create-readonly-user/mysql.d.ts +33 -0
- package/esm/commands/db/create-readonly-user/mysql.js +9 -0
- package/esm/commands/db/create-readonly-user/postgres.d.ts +31 -0
- package/esm/commands/db/create-readonly-user/postgres.js +9 -0
- package/esm/commands/db/create-readonly-user/schema.d.ts +55 -0
- package/esm/commands/db/create-readonly-user/schema.js +12 -0
- package/esm/commands/db/create-readonly-user/utils.d.ts +112 -0
- package/esm/commands/db/create-readonly-user/utils.js +22 -0
- package/esm/commands/db/index.d.ts +6 -0
- package/esm/commands/db/index.js +44 -0
- package/esm/commands/doppler/handler.js +5 -3
- package/esm/commands/doppler/index.d.ts +1 -0
- package/esm/commands/doppler/index.js +32 -5
- package/esm/commands/doppler/schema.d.ts +233 -17
- package/esm/commands/doppler/schema.js +11 -3
- package/esm/commands/doppler/set-secret.d.ts +113 -0
- package/esm/commands/doppler/set-secret.js +19 -0
- package/esm/commands/doppler/utils.d.ts +32 -8
- package/esm/commands/doppler/utils.js +5 -1
- package/esm/commands/icons/schema.d.ts +1 -1
- package/esm/commands/index.js +86 -7
- package/package.json +13 -3
- package/vitest.config.ts +11 -0
- package/cjs/__chunks/4GFJUCSP.cjs +0 -52
- package/esm/__chunks/X3R5PSWH.js +0 -52
- /package/cjs/__chunks/{WNJ3ZYLI.cjs → 3BY5Y4W7.cjs} +0 -0
- /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
|
|
39
|
+
function checkDopplerAuth(verbose = false) {
|
|
33
40
|
if (verbose) {
|
|
34
|
-
console.log(chalk.blue("\n\u{1F50D} Checking Doppler
|
|
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,
|
|
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'
|
|
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(
|
|
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
|
|
85
|
+
\u{1F4CB} Resolving configurations for environments: ${chalk.cyan(environments)}`
|
|
73
86
|
)
|
|
74
87
|
);
|
|
75
88
|
}
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
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 (
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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(
|
|
121
|
+
console.log(
|
|
122
|
+
chalk.green(` \u2713 Using configurations: ${requested.join(", ")}`)
|
|
123
|
+
);
|
|
108
124
|
}
|
|
109
|
-
return
|
|
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 {
|
|
149
|
-
const
|
|
150
|
-
const configs = getConfigs(
|
|
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 &&
|
|
175
|
+
if (configs.length === 1 && actualEnvironments !== "all") {
|
|
160
176
|
console.log(
|
|
161
|
-
"You can use -e all to download all configurations, or -e
|
|
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 {
|
|
232
|
-
const configs = getConfigs(
|
|
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 "./
|
|
10
|
+
} from "./YGWTVPZE.js";
|
|
6
11
|
import {
|
|
7
12
|
dopplerCommandMetadata,
|
|
8
13
|
dopplerCommandOptionsSchema
|
|
9
|
-
} from "./
|
|
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
|
|
17
|
-
|
|
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(
|
|
25
|
-
([key,
|
|
26
|
-
|
|
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
|
-
|
|
36
|
+
optionMeta
|
|
31
37
|
);
|
|
32
|
-
const
|
|
33
|
-
const
|
|
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
|
|
43
|
-
|
|
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
|
-
|
|
56
|
+
const { environments } = validatedOptions;
|
|
57
|
+
await downloadConfigs({ environments, verbose });
|
|
46
58
|
} else if (action === "upload") {
|
|
47
|
-
|
|
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!`));
|