@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,320 @@
|
|
|
1
|
+
import {
|
|
2
|
+
findCnameConflicts,
|
|
3
|
+
findHostedZone,
|
|
4
|
+
formatValues,
|
|
5
|
+
getRecordSetsAtName,
|
|
6
|
+
hostedZoneLabel,
|
|
7
|
+
listHostedZones,
|
|
8
|
+
normalizeRecordValue,
|
|
9
|
+
planRecordChange,
|
|
10
|
+
resolveRecordName,
|
|
11
|
+
upsertResourceRecordSet,
|
|
12
|
+
withoutTrailingDot
|
|
13
|
+
} from "./33UYMUQD.js";
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_TTL,
|
|
16
|
+
RECORD_TYPES,
|
|
17
|
+
addRecordOptionsSchema
|
|
18
|
+
} from "./IEOGAQYI.js";
|
|
19
|
+
import {
|
|
20
|
+
AwsCliError,
|
|
21
|
+
getCallerIdentity,
|
|
22
|
+
requireCommands
|
|
23
|
+
} from "./FNXUONAV.js";
|
|
24
|
+
import {
|
|
25
|
+
resolveProfile
|
|
26
|
+
} from "./5GIUAFXL.js";
|
|
27
|
+
import {
|
|
28
|
+
prompt,
|
|
29
|
+
promptChoice,
|
|
30
|
+
promptYesNo
|
|
31
|
+
} from "./ZHKVJO2U.js";
|
|
32
|
+
|
|
33
|
+
// src/commands/aws/route53/add-record/handler.js
|
|
34
|
+
import chalk from "chalk";
|
|
35
|
+
import { ZodError } from "zod";
|
|
36
|
+
async function resolveHostedZone(params) {
|
|
37
|
+
const { profile, zoneOption, verbose } = params;
|
|
38
|
+
const zones = listHostedZones({ profile, verbose });
|
|
39
|
+
if (zones.length === 0) {
|
|
40
|
+
throw new Error("No Route53 hosted zones found for this profile.");
|
|
41
|
+
}
|
|
42
|
+
if (zoneOption) {
|
|
43
|
+
const match = findHostedZone({ zones, zoneInput: zoneOption });
|
|
44
|
+
if (!match) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
`No hosted zone matching "${zoneOption}". Available: ${zones.map((z) => withoutTrailingDot(z.name)).join(", ")}`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
return match;
|
|
50
|
+
}
|
|
51
|
+
const index = await promptChoice({
|
|
52
|
+
message: "Choose a hosted zone:",
|
|
53
|
+
options: zones.map((zone) => hostedZoneLabel(zone))
|
|
54
|
+
});
|
|
55
|
+
const chosen = zones[index];
|
|
56
|
+
if (!chosen) {
|
|
57
|
+
throw new Error("No hosted zone selected");
|
|
58
|
+
}
|
|
59
|
+
return chosen;
|
|
60
|
+
}
|
|
61
|
+
async function resolveRecordType(typeOption) {
|
|
62
|
+
if (typeOption) {
|
|
63
|
+
return typeOption.toUpperCase();
|
|
64
|
+
}
|
|
65
|
+
const index = await promptChoice({
|
|
66
|
+
message: "Choose a record type:",
|
|
67
|
+
options: RECORD_TYPES
|
|
68
|
+
});
|
|
69
|
+
const chosen = RECORD_TYPES[index];
|
|
70
|
+
if (!chosen) {
|
|
71
|
+
throw new Error("No record type selected");
|
|
72
|
+
}
|
|
73
|
+
return chosen;
|
|
74
|
+
}
|
|
75
|
+
async function resolveName(params) {
|
|
76
|
+
const { nameOption, zoneName } = params;
|
|
77
|
+
let input = nameOption;
|
|
78
|
+
if (!input) {
|
|
79
|
+
input = await prompt(
|
|
80
|
+
`Record name (relative to ${withoutTrailingDot(zoneName)}, or FQDN; @ for apex): `
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
if (!input) {
|
|
84
|
+
throw new Error("Record name is required");
|
|
85
|
+
}
|
|
86
|
+
return resolveRecordName({ nameInput: input, zoneName });
|
|
87
|
+
}
|
|
88
|
+
async function resolveValue(params) {
|
|
89
|
+
const { valueOption, type } = params;
|
|
90
|
+
let input = valueOption;
|
|
91
|
+
if (!input) {
|
|
92
|
+
const hint = type === "CNAME" ? " (e.g. target.example.com.)" : type === "TXT" ? " (quotes added if omitted)" : "";
|
|
93
|
+
input = await prompt(`Record value${hint}: `);
|
|
94
|
+
}
|
|
95
|
+
if (!input) {
|
|
96
|
+
throw new Error("Record value is required");
|
|
97
|
+
}
|
|
98
|
+
return normalizeRecordValue({ type, value: input });
|
|
99
|
+
}
|
|
100
|
+
async function resolveChangeMode(params) {
|
|
101
|
+
const { existing, type } = params;
|
|
102
|
+
if (type === "CNAME" || existing.values.length <= 1) {
|
|
103
|
+
return "replace";
|
|
104
|
+
}
|
|
105
|
+
console.log("");
|
|
106
|
+
console.log(
|
|
107
|
+
chalk.yellow(
|
|
108
|
+
`Existing ${type} record has ${existing.values.length} values:${formatValues(existing.values)}`
|
|
109
|
+
)
|
|
110
|
+
);
|
|
111
|
+
const append = await promptYesNo({
|
|
112
|
+
message: "Add to the existing values instead of replacing them?",
|
|
113
|
+
defaultYes: false
|
|
114
|
+
});
|
|
115
|
+
return append ? "append" : "replace";
|
|
116
|
+
}
|
|
117
|
+
async function addRecordCommand(options) {
|
|
118
|
+
try {
|
|
119
|
+
const {
|
|
120
|
+
profile: profileOption,
|
|
121
|
+
zone: zoneOption,
|
|
122
|
+
type: typeOption,
|
|
123
|
+
name: nameOption,
|
|
124
|
+
value: valueOption,
|
|
125
|
+
ttl: ttlOption,
|
|
126
|
+
yes,
|
|
127
|
+
dryRun,
|
|
128
|
+
verbose
|
|
129
|
+
} = addRecordOptionsSchema.parse(options);
|
|
130
|
+
const profile = await resolveProfile({ profile: profileOption });
|
|
131
|
+
if (!profile) {
|
|
132
|
+
console.error(chalk.red("Error: pass --profile or set AWS_PROFILE."));
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
requireCommands(["aws"]);
|
|
136
|
+
const identity = getCallerIdentity({ profile, verbose });
|
|
137
|
+
console.log("Caller:");
|
|
138
|
+
console.log(` Account: ${identity.Account}`);
|
|
139
|
+
console.log(` Arn: ${identity.Arn}`);
|
|
140
|
+
console.log("");
|
|
141
|
+
const zone = await resolveHostedZone({
|
|
142
|
+
profile,
|
|
143
|
+
zoneOption,
|
|
144
|
+
verbose
|
|
145
|
+
});
|
|
146
|
+
console.log(`Hosted zone: ${hostedZoneLabel(zone)}`);
|
|
147
|
+
console.log("");
|
|
148
|
+
const type = await resolveRecordType(typeOption);
|
|
149
|
+
const name = await resolveName({ nameOption, zoneName: zone.name });
|
|
150
|
+
const value = await resolveValue({ valueOption, type });
|
|
151
|
+
const ttl = ttlOption ?? DEFAULT_TTL;
|
|
152
|
+
console.log("");
|
|
153
|
+
console.log("Proposed record:");
|
|
154
|
+
console.log(` Name: ${withoutTrailingDot(name)}`);
|
|
155
|
+
console.log(` Type: ${type}`);
|
|
156
|
+
console.log(` TTL: ${ttl}`);
|
|
157
|
+
console.log(` Value: ${value}`);
|
|
158
|
+
console.log("");
|
|
159
|
+
const existingSets = getRecordSetsAtName({
|
|
160
|
+
profile,
|
|
161
|
+
hostedZoneId: zone.id,
|
|
162
|
+
name,
|
|
163
|
+
verbose
|
|
164
|
+
});
|
|
165
|
+
const existing = existingSets.find((set) => set.type === type) ?? null;
|
|
166
|
+
const conflicts = findCnameConflicts({ existingSets, type });
|
|
167
|
+
if (conflicts.length > 0) {
|
|
168
|
+
console.error(
|
|
169
|
+
chalk.red(
|
|
170
|
+
`\u274C Conflict: cannot add a ${type} record at ${withoutTrailingDot(name)}.`
|
|
171
|
+
)
|
|
172
|
+
);
|
|
173
|
+
console.error("");
|
|
174
|
+
console.error(
|
|
175
|
+
chalk.yellow(
|
|
176
|
+
"Route53 does not allow a CNAME and any other record type to coexist at the same name. Conflicting record(s) already exist:"
|
|
177
|
+
)
|
|
178
|
+
);
|
|
179
|
+
for (const conflict of conflicts) {
|
|
180
|
+
console.error(
|
|
181
|
+
` ${conflict.type} ${withoutTrailingDot(conflict.name)}${formatValues(
|
|
182
|
+
conflict.isAlias ? ["(alias)"] : conflict.values
|
|
183
|
+
)}`
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
console.error("");
|
|
187
|
+
console.error(
|
|
188
|
+
chalk.yellow(
|
|
189
|
+
"Remove the conflicting record, then re-create the one you wanted:"
|
|
190
|
+
)
|
|
191
|
+
);
|
|
192
|
+
const zoneName = withoutTrailingDot(zone.name);
|
|
193
|
+
const displayName = withoutTrailingDot(name);
|
|
194
|
+
const quotedValue = /^[A-Za-z0-9._:@/-]+$/.test(value) ? value : `"${value}"`;
|
|
195
|
+
const ttlFlag = ttl === DEFAULT_TTL ? "" : ` --ttl ${ttl}`;
|
|
196
|
+
let step = 1;
|
|
197
|
+
for (const conflict of conflicts) {
|
|
198
|
+
console.error(
|
|
199
|
+
chalk.cyan(
|
|
200
|
+
` ${step++}. mtn aws route53 remove-record -z ${zoneName} -t ${conflict.type} -n ${displayName}`
|
|
201
|
+
)
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
console.error(
|
|
205
|
+
chalk.cyan(
|
|
206
|
+
` ${step}. mtn aws route53 add-record -z ${zoneName} -t ${type} -n ${displayName} --value ${quotedValue}${ttlFlag}`
|
|
207
|
+
)
|
|
208
|
+
);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
if (existing?.isAlias) {
|
|
212
|
+
console.log(
|
|
213
|
+
chalk.yellow(
|
|
214
|
+
"An ALIAS record already exists at this name + type. Continuing will replace it with a standard record set."
|
|
215
|
+
)
|
|
216
|
+
);
|
|
217
|
+
console.log("");
|
|
218
|
+
} else if (existing) {
|
|
219
|
+
console.log(
|
|
220
|
+
chalk.yellow(
|
|
221
|
+
`Existing ${type} record at ${withoutTrailingDot(name)}:${formatValues(existing.values)}`
|
|
222
|
+
)
|
|
223
|
+
);
|
|
224
|
+
if (existing.ttl !== void 0) {
|
|
225
|
+
console.log(` TTL: ${existing.ttl}`);
|
|
226
|
+
}
|
|
227
|
+
console.log("");
|
|
228
|
+
} else {
|
|
229
|
+
console.log(
|
|
230
|
+
chalk.green(
|
|
231
|
+
`No existing ${type} record at ${withoutTrailingDot(name)}.`
|
|
232
|
+
)
|
|
233
|
+
);
|
|
234
|
+
console.log("");
|
|
235
|
+
}
|
|
236
|
+
let mode = "replace";
|
|
237
|
+
if (existing && !existing.isAlias && existing.values.length > 0) {
|
|
238
|
+
mode = await resolveChangeMode({ existing, type });
|
|
239
|
+
}
|
|
240
|
+
const plan = planRecordChange({ existing, newValue: value, mode });
|
|
241
|
+
console.log(plan.summary);
|
|
242
|
+
console.log("");
|
|
243
|
+
if (plan.action === "noop") {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (plan.action === "overwrite" || plan.action === "append") {
|
|
247
|
+
console.log("Final values that will be written:");
|
|
248
|
+
for (const finalValue of plan.finalValues) {
|
|
249
|
+
console.log(` - ${finalValue}`);
|
|
250
|
+
}
|
|
251
|
+
console.log("");
|
|
252
|
+
}
|
|
253
|
+
if (dryRun) {
|
|
254
|
+
console.log(chalk.cyan("Dry run \u2014 no changes made."));
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (!yes) {
|
|
258
|
+
const confirmed = await promptYesNo({
|
|
259
|
+
message: plan.action === "create" ? "Create this record?" : plan.action === "append" ? "Add this value to the existing record?" : "Overwrite the existing record?",
|
|
260
|
+
defaultYes: false
|
|
261
|
+
});
|
|
262
|
+
if (!confirmed) {
|
|
263
|
+
console.log("Aborted.");
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
const changeInfo = upsertResourceRecordSet({
|
|
268
|
+
profile,
|
|
269
|
+
hostedZoneId: zone.id,
|
|
270
|
+
name,
|
|
271
|
+
type,
|
|
272
|
+
ttl: existing?.ttl ?? ttl,
|
|
273
|
+
values: plan.finalValues,
|
|
274
|
+
verbose
|
|
275
|
+
});
|
|
276
|
+
console.log("");
|
|
277
|
+
console.log(
|
|
278
|
+
chalk.green(
|
|
279
|
+
`Done. ${plan.action === "create" ? "Created" : plan.action === "append" ? "Updated (appended)" : "Updated (overwrote)"} ${type} ${withoutTrailingDot(name)}.`
|
|
280
|
+
)
|
|
281
|
+
);
|
|
282
|
+
if (changeInfo?.Id) {
|
|
283
|
+
console.log(` Change ID: ${changeInfo.Id}`);
|
|
284
|
+
console.log(` Status: ${changeInfo.Status ?? "PENDING"}`);
|
|
285
|
+
}
|
|
286
|
+
} catch (error) {
|
|
287
|
+
if (error instanceof ZodError) {
|
|
288
|
+
console.error(chalk.red("\n\u274C Invalid command options:"));
|
|
289
|
+
error.errors.forEach((err) => {
|
|
290
|
+
console.error(chalk.red(` ${err.path.join(".")}: ${err.message}`));
|
|
291
|
+
});
|
|
292
|
+
process.exit(1);
|
|
293
|
+
}
|
|
294
|
+
const verbose = (
|
|
295
|
+
/** @type {any} */
|
|
296
|
+
options?.verbose || false
|
|
297
|
+
);
|
|
298
|
+
console.error(chalk.red("\n\u274C add-record failed:"));
|
|
299
|
+
if (error instanceof AwsCliError || error instanceof Error) {
|
|
300
|
+
console.error(chalk.red(` ${error.message}`));
|
|
301
|
+
if (verbose && error.stack) {
|
|
302
|
+
console.error(chalk.gray("\nStack trace:"));
|
|
303
|
+
console.error(chalk.gray(error.stack));
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
console.error(chalk.red(` ${String(error)}`));
|
|
307
|
+
}
|
|
308
|
+
console.error(
|
|
309
|
+
chalk.yellow("\n\u{1F4A1} Use --verbose for detailed error information\n")
|
|
310
|
+
);
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export {
|
|
316
|
+
resolveHostedZone,
|
|
317
|
+
resolveRecordType,
|
|
318
|
+
resolveName,
|
|
319
|
+
addRecordCommand
|
|
320
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
profileField,
|
|
3
|
+
verboseField
|
|
4
|
+
} from "./73BJG53F.js";
|
|
5
|
+
|
|
6
|
+
// src/commands/aws/route53/add-record/schema.js
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
var RECORD_TYPES = [
|
|
9
|
+
"A",
|
|
10
|
+
"AAAA",
|
|
11
|
+
"CNAME",
|
|
12
|
+
"TXT",
|
|
13
|
+
"MX",
|
|
14
|
+
"NS",
|
|
15
|
+
"SRV",
|
|
16
|
+
"CAA"
|
|
17
|
+
];
|
|
18
|
+
var DEFAULT_TTL = 300;
|
|
19
|
+
var addRecordOptionsSchema = z.object({
|
|
20
|
+
profile: profileField,
|
|
21
|
+
zone: z.string().optional().describe(
|
|
22
|
+
"Hosted zone name or ID (e.g. mountaindev.com or Z123\u2026). Skips the zone picker when set."
|
|
23
|
+
),
|
|
24
|
+
type: z.string().optional().transform(
|
|
25
|
+
(value) => value === void 0 ? void 0 : value.toUpperCase()
|
|
26
|
+
).refine(
|
|
27
|
+
(value) => value === void 0 || typeof value === "string" && RECORD_TYPES.includes(value),
|
|
28
|
+
{
|
|
29
|
+
message: `Record type must be one of: ${RECORD_TYPES.join(", ")}`
|
|
30
|
+
}
|
|
31
|
+
).describe(`DNS record type (${RECORD_TYPES.join(", ")})`),
|
|
32
|
+
name: z.string().optional().describe(
|
|
33
|
+
'Record name relative to the zone (e.g. "redline") or a fully-qualified name'
|
|
34
|
+
),
|
|
35
|
+
value: z.string().optional().describe("Record value (e.g. a CNAME target or A address)"),
|
|
36
|
+
ttl: z.number().int().positive().optional().describe(`TTL in seconds (default: ${DEFAULT_TTL})`),
|
|
37
|
+
yes: z.boolean().optional().default(false).describe("Skip the confirmation prompt"),
|
|
38
|
+
dryRun: z.boolean().optional().default(false).describe("Preview the change without calling Route53"),
|
|
39
|
+
verbose: verboseField
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
RECORD_TYPES,
|
|
44
|
+
DEFAULT_TTL,
|
|
45
|
+
addRecordOptionsSchema
|
|
46
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RECORD_TYPES
|
|
3
|
+
} from "./IEOGAQYI.js";
|
|
4
|
+
import {
|
|
5
|
+
profileField,
|
|
6
|
+
verboseField
|
|
7
|
+
} from "./73BJG53F.js";
|
|
8
|
+
|
|
9
|
+
// src/commands/aws/route53/remove-record/schema.js
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
var removeRecordOptionsSchema = z.object({
|
|
12
|
+
profile: profileField,
|
|
13
|
+
zone: z.string().optional().describe(
|
|
14
|
+
"Hosted zone name or ID (e.g. mountaindev.com or Z123\u2026). Skips the zone picker when set."
|
|
15
|
+
),
|
|
16
|
+
type: z.string().optional().transform(
|
|
17
|
+
(value) => value === void 0 ? void 0 : value.toUpperCase()
|
|
18
|
+
).refine(
|
|
19
|
+
(value) => value === void 0 || typeof value === "string" && RECORD_TYPES.includes(value),
|
|
20
|
+
{
|
|
21
|
+
message: `Record type must be one of: ${RECORD_TYPES.join(", ")}`
|
|
22
|
+
}
|
|
23
|
+
).describe(`DNS record type (${RECORD_TYPES.join(", ")})`),
|
|
24
|
+
name: z.string().optional().describe(
|
|
25
|
+
'Record name relative to the zone (e.g. "redline") or a fully-qualified name'
|
|
26
|
+
),
|
|
27
|
+
yes: z.boolean().optional().default(false).describe("Skip the confirmation prompt"),
|
|
28
|
+
dryRun: z.boolean().optional().default(false).describe("Preview the deletion without calling Route53"),
|
|
29
|
+
verbose: verboseField
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
removeRecordOptionsSchema
|
|
34
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
profileField,
|
|
3
|
+
regionField,
|
|
4
|
+
verboseField
|
|
5
|
+
} from "./73BJG53F.js";
|
|
6
|
+
|
|
7
|
+
// src/commands/aws/ec2/allow-ip/schema.js
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
var DEFAULT_REGION = "us-east-1";
|
|
10
|
+
var SSH_PORT = 22;
|
|
11
|
+
var DEFAULT_ROAMING_NAME = "Declan";
|
|
12
|
+
var allowIpOptionsSchema = z.object({
|
|
13
|
+
profile: profileField,
|
|
14
|
+
region: regionField,
|
|
15
|
+
ruleName: z.string().optional().describe(
|
|
16
|
+
'SSH rule description to update or create (default: "{FirstName} Roaming" derived from the profile/IAM user)'
|
|
17
|
+
),
|
|
18
|
+
verbose: verboseField
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
DEFAULT_REGION,
|
|
23
|
+
SSH_PORT,
|
|
24
|
+
DEFAULT_ROAMING_NAME,
|
|
25
|
+
allowIpOptionsSchema
|
|
26
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {
|
|
2
|
+
usersOptionsSchema
|
|
3
|
+
} from "./XXK32TIM.js";
|
|
4
|
+
import {
|
|
5
|
+
createUsersInteractive
|
|
6
|
+
} from "./3QLI5BDL.js";
|
|
7
|
+
import {
|
|
8
|
+
getCallerIdentity,
|
|
9
|
+
requireCommands
|
|
10
|
+
} from "./FNXUONAV.js";
|
|
11
|
+
import {
|
|
12
|
+
resolveProfile
|
|
13
|
+
} from "./5GIUAFXL.js";
|
|
14
|
+
|
|
15
|
+
// src/commands/aws/iam/users/handler.js
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
import { ZodError } from "zod";
|
|
18
|
+
async function usersCommand(options) {
|
|
19
|
+
try {
|
|
20
|
+
const {
|
|
21
|
+
accountName,
|
|
22
|
+
profile: profileOption,
|
|
23
|
+
verbose
|
|
24
|
+
} = usersOptionsSchema.parse(options);
|
|
25
|
+
requireCommands(["aws"]);
|
|
26
|
+
const profile = await resolveProfile({ profile: profileOption });
|
|
27
|
+
console.log(chalk.blue("\nAWS IAM user management"));
|
|
28
|
+
console.log("");
|
|
29
|
+
console.log("Caller:");
|
|
30
|
+
const identity = getCallerIdentity({ profile, verbose });
|
|
31
|
+
console.log(` Account: ${identity.Account}`);
|
|
32
|
+
console.log(` Arn: ${identity.Arn}`);
|
|
33
|
+
console.log("");
|
|
34
|
+
await createUsersInteractive({
|
|
35
|
+
accountName,
|
|
36
|
+
profile,
|
|
37
|
+
identity,
|
|
38
|
+
verbose
|
|
39
|
+
});
|
|
40
|
+
console.log("Done.");
|
|
41
|
+
} catch (error) {
|
|
42
|
+
if (error instanceof ZodError) {
|
|
43
|
+
console.error(chalk.red("\n\u274C Invalid command options:"));
|
|
44
|
+
error.errors.forEach((err) => {
|
|
45
|
+
console.error(chalk.red(` ${err.path.join(".")}: ${err.message}`));
|
|
46
|
+
});
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
const verbose = (
|
|
50
|
+
/** @type {any} */
|
|
51
|
+
options?.verbose || false
|
|
52
|
+
);
|
|
53
|
+
console.error(chalk.red("\n\u274C iam users failed:"));
|
|
54
|
+
if (error instanceof Error) {
|
|
55
|
+
console.error(chalk.red(` ${error.message}`));
|
|
56
|
+
if (verbose && error.stack) {
|
|
57
|
+
console.error(chalk.gray("\nStack trace:"));
|
|
58
|
+
console.error(chalk.gray(error.stack));
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
console.error(chalk.red(` ${String(error)}`));
|
|
62
|
+
}
|
|
63
|
+
console.error(
|
|
64
|
+
chalk.yellow(
|
|
65
|
+
"\n\u{1F4A1} Requires the AWS CLI and a profile with IAM write access.\n"
|
|
66
|
+
)
|
|
67
|
+
);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export {
|
|
73
|
+
usersCommand
|
|
74
|
+
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// src/commands/doppler/schema.js
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var environmentsBase = z.string().optional().describe(
|
|
4
|
+
'Environments to process, comma-separated (e.g., dev,stg,prd or "all")'
|
|
5
|
+
);
|
|
6
|
+
var commonFields = {
|
|
7
|
+
verbose: z.boolean().optional().default(false).describe("Enable verbose logging for detailed error information"),
|
|
8
|
+
help: z.boolean().optional().default(false).describe("Display help for command")
|
|
9
|
+
};
|
|
10
|
+
var dopplerDownloadSchema = z.object({
|
|
11
|
+
action: z.literal("download"),
|
|
12
|
+
environments: environmentsBase.default("dev"),
|
|
13
|
+
...commonFields
|
|
14
|
+
});
|
|
15
|
+
var dopplerUploadSchema = z.object({
|
|
16
|
+
action: z.literal("upload"),
|
|
17
|
+
environments: environmentsBase.default("all"),
|
|
18
|
+
...commonFields
|
|
19
|
+
});
|
|
20
|
+
var dopplerCloneSchema = z.object({
|
|
21
|
+
action: z.literal("clone"),
|
|
22
|
+
from: z.string({ required_error: "--from <project> is required for clone" }).describe("Source Doppler project name"),
|
|
23
|
+
to: z.string({ required_error: "--to <project> is required for clone" }).describe("Target Doppler project name"),
|
|
24
|
+
force: z.boolean().optional().default(false).describe("Skip confirmation prompts when overwriting existing secrets"),
|
|
25
|
+
environments: environmentsBase.default("all"),
|
|
26
|
+
...commonFields
|
|
27
|
+
});
|
|
28
|
+
var dopplerSetSchema = z.object({
|
|
29
|
+
action: z.literal("set"),
|
|
30
|
+
project: z.string().optional().describe("Doppler project name (prompts when omitted)"),
|
|
31
|
+
environment: z.string().optional().describe(
|
|
32
|
+
'Doppler environment id (e.g. dev, stg, prd) or "all" (prompts when omitted)'
|
|
33
|
+
),
|
|
34
|
+
config: z.string().optional().describe(
|
|
35
|
+
'Config name, comma-separated list, or "all" within the chosen environment (prompts when omitted)'
|
|
36
|
+
),
|
|
37
|
+
name: z.string().optional().describe("Secret name / env var key (e.g. DATABASE_URL)"),
|
|
38
|
+
value: z.string().optional().describe("Secret value (prompts when omitted)"),
|
|
39
|
+
yes: z.boolean().optional().default(false).describe("Skip the confirmation prompt"),
|
|
40
|
+
...commonFields
|
|
41
|
+
});
|
|
42
|
+
var dopplerCommandOptionsSchema = z.discriminatedUnion("action", [
|
|
43
|
+
dopplerDownloadSchema,
|
|
44
|
+
dopplerUploadSchema,
|
|
45
|
+
dopplerCloneSchema,
|
|
46
|
+
dopplerSetSchema
|
|
47
|
+
]);
|
|
48
|
+
var dopplerCommandMetadata = {
|
|
49
|
+
name: "doppler",
|
|
50
|
+
description: `Manage Doppler configurations
|
|
51
|
+
|
|
52
|
+
Subcommands:
|
|
53
|
+
download Download configurations from Doppler to local .env files
|
|
54
|
+
upload Upload local .env files to Doppler (with confirmation prompt)
|
|
55
|
+
clone Clone all secrets from one Doppler project to another
|
|
56
|
+
set Add or update a secret (interactive project/env/config picker)
|
|
57
|
+
|
|
58
|
+
Examples:
|
|
59
|
+
$ @mtndev/cli doppler download # Download dev config
|
|
60
|
+
$ @mtndev/cli doppler download -e all # Download all configs
|
|
61
|
+
$ @mtndev/cli doppler download -e dev,stg # Download dev and stg
|
|
62
|
+
$ @mtndev/cli doppler upload # Upload .env.dev
|
|
63
|
+
$ @mtndev/cli doppler upload -e prd # Upload production config
|
|
64
|
+
$ @mtndev/cli doppler clone --from my-app --to my-app-copy # Clone all configs
|
|
65
|
+
$ @mtndev/cli doppler clone --from my-app --to my-app-copy -e dev,stg # Clone specific envs
|
|
66
|
+
$ @mtndev/cli doppler clone --from my-app --to my-app-copy --force # Clone without prompts
|
|
67
|
+
$ @mtndev/cli doppler set # Interactive set
|
|
68
|
+
$ @mtndev/cli doppler set -p core --environment dev -c dev --name API_KEY --value secret --yes`,
|
|
69
|
+
options: {
|
|
70
|
+
environments: {
|
|
71
|
+
description: dopplerDownloadSchema.shape.environments.description,
|
|
72
|
+
default: "dev",
|
|
73
|
+
alias: "e"
|
|
74
|
+
},
|
|
75
|
+
from: {
|
|
76
|
+
description: dopplerCloneSchema.shape.from.description,
|
|
77
|
+
default: void 0
|
|
78
|
+
},
|
|
79
|
+
to: {
|
|
80
|
+
description: dopplerCloneSchema.shape.to.description,
|
|
81
|
+
default: void 0
|
|
82
|
+
},
|
|
83
|
+
force: {
|
|
84
|
+
description: dopplerCloneSchema.shape.force.description,
|
|
85
|
+
default: false,
|
|
86
|
+
alias: "f"
|
|
87
|
+
},
|
|
88
|
+
project: {
|
|
89
|
+
description: dopplerSetSchema.shape.project.description,
|
|
90
|
+
default: void 0,
|
|
91
|
+
alias: "p"
|
|
92
|
+
},
|
|
93
|
+
environment: {
|
|
94
|
+
description: dopplerSetSchema.shape.environment.description,
|
|
95
|
+
default: void 0
|
|
96
|
+
},
|
|
97
|
+
config: {
|
|
98
|
+
description: dopplerSetSchema.shape.config.description,
|
|
99
|
+
default: void 0,
|
|
100
|
+
alias: "c"
|
|
101
|
+
},
|
|
102
|
+
name: {
|
|
103
|
+
description: dopplerSetSchema.shape.name.description,
|
|
104
|
+
default: void 0
|
|
105
|
+
},
|
|
106
|
+
value: {
|
|
107
|
+
description: dopplerSetSchema.shape.value.description,
|
|
108
|
+
default: void 0
|
|
109
|
+
},
|
|
110
|
+
yes: {
|
|
111
|
+
description: dopplerSetSchema.shape.yes.description,
|
|
112
|
+
default: false,
|
|
113
|
+
alias: "y"
|
|
114
|
+
},
|
|
115
|
+
verbose: {
|
|
116
|
+
description: dopplerDownloadSchema.shape.verbose.description,
|
|
117
|
+
default: false,
|
|
118
|
+
alias: "v"
|
|
119
|
+
},
|
|
120
|
+
help: {
|
|
121
|
+
description: dopplerDownloadSchema.shape.help.description,
|
|
122
|
+
default: false,
|
|
123
|
+
alias: "h"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export {
|
|
129
|
+
dopplerDownloadSchema,
|
|
130
|
+
dopplerUploadSchema,
|
|
131
|
+
dopplerCloneSchema,
|
|
132
|
+
dopplerSetSchema,
|
|
133
|
+
dopplerCommandOptionsSchema,
|
|
134
|
+
dopplerCommandMetadata
|
|
135
|
+
};
|