@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.
- package/CHANGELOG.md +13 -0
- package/cjs/__chunks/VH7oDXx4.cjs +28 -0
- package/cjs/commands/aws/ec2/allow-ip/handler.cjs +261 -12
- package/cjs/commands/aws/ec2/allow-ip/index.cjs +25 -55
- package/cjs/commands/aws/ec2/allow-ip/schema.cjs +33 -13
- package/cjs/commands/aws/ec2/allow-ip/utils.cjs +379 -39
- package/cjs/commands/aws/iam/admin-group.cjs +111 -15
- package/cjs/commands/aws/iam/break-glass/handler.cjs +127 -12
- package/cjs/commands/aws/iam/break-glass/index.cjs +7 -19
- package/cjs/commands/aws/iam/break-glass/schema.cjs +21 -12
- package/cjs/commands/aws/iam/check-admin/handler.cjs +89 -10
- package/cjs/commands/aws/iam/check-admin/index.cjs +7 -17
- package/cjs/commands/aws/iam/check-admin/schema.cjs +19 -12
- package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
- package/cjs/commands/aws/iam/policies/sts-federation.json +11 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
- package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
- package/cjs/commands/aws/iam/policies/user-admins-write-list.json +117 -0
- package/cjs/commands/aws/iam/remove-admin/handler.cjs +120 -11
- package/cjs/commands/aws/iam/remove-admin/index.cjs +7 -18
- package/cjs/commands/aws/iam/remove-admin/schema.cjs +22 -12
- package/cjs/commands/aws/iam/setup-acl/handler.cjs +227 -14
- package/cjs/commands/aws/iam/setup-acl/index.cjs +13 -33
- package/cjs/commands/aws/iam/setup-acl/schema.cjs +19 -7
- package/cjs/commands/aws/iam/setup-acl/utils.cjs +305 -20
- package/cjs/commands/aws/iam/users/handler.cjs +59 -12
- package/cjs/commands/aws/iam/users/index.cjs +18 -41
- package/cjs/commands/aws/iam/users/schema.cjs +17 -7
- package/cjs/commands/aws/iam/users/utils.cjs +454 -30
- package/cjs/commands/aws/index.cjs +223 -229
- package/cjs/commands/aws/route53/add-record/handler.cjs +264 -18
- package/cjs/commands/aws/route53/add-record/index.cjs +26 -57
- package/cjs/commands/aws/route53/add-record/schema.cjs +43 -11
- package/cjs/commands/aws/route53/add-record/utils.cjs +404 -37
- package/cjs/commands/aws/route53/remove-record/handler.cjs +114 -14
- package/cjs/commands/aws/route53/remove-record/index.cjs +5 -18
- package/cjs/commands/aws/route53/remove-record/schema.cjs +22 -8
- package/cjs/commands/aws/schema.cjs +19 -10
- package/cjs/commands/aws/ses/send-email/handler.cjs +73 -12
- package/cjs/commands/aws/ses/send-email/index.cjs +9 -23
- package/cjs/commands/aws/ses/send-email/schema.cjs +24 -7
- package/cjs/commands/aws/ses/send-email/utils.cjs +87 -11
- package/cjs/commands/aws/ses/smtp-password.cjs +72 -10
- package/cjs/commands/aws/utils/exec-aws.cjs +145 -16
- package/cjs/commands/aws/utils/resolve-policy-path.cjs +15 -6
- package/cjs/commands/aws/utils/resolve-profile.cjs +93 -11
- package/cjs/commands/aws/utils/tty.cjs +54 -10
- package/cjs/commands/db/create-readonly-user/handler.cjs +254 -11
- package/cjs/commands/db/create-readonly-user/index.cjs +18 -40
- package/cjs/commands/db/create-readonly-user/mysql.cjs +102 -9
- package/cjs/commands/db/create-readonly-user/postgres.cjs +209 -9
- package/cjs/commands/db/create-readonly-user/schema.cjs +39 -12
- package/cjs/commands/db/create-readonly-user/utils.cjs +160 -22
- package/cjs/commands/db/index.cjs +46 -44
- package/cjs/commands/doppler/handler.cjs +95 -11
- package/cjs/commands/doppler/index.cjs +33 -68
- package/cjs/commands/doppler/schema.cjs +130 -14
- package/cjs/commands/doppler/set-secret.cjs +378 -19
- package/cjs/commands/doppler/utils/exec.cjs +106 -12
- package/cjs/commands/doppler/utils.cjs +412 -34
- package/cjs/commands/icons/handler.cjs +82 -8
- package/cjs/commands/icons/index.cjs +15 -31
- package/cjs/commands/icons/schema.cjs +101 -13
- package/cjs/commands/icons/utils.cjs +131 -13
- package/cjs/commands/index.cjs +54 -161
- package/cjs/commands/schema.cjs +25 -8
- package/cjs/index.cjs +3 -4
- package/esm/commands/aws/ec2/allow-ip/handler.js +258 -12
- package/esm/commands/aws/ec2/allow-ip/index.js +4 -55
- package/esm/commands/aws/ec2/allow-ip/schema.js +29 -13
- package/esm/commands/aws/ec2/allow-ip/utils.js +363 -39
- package/esm/commands/aws/iam/admin-group.js +104 -15
- package/esm/commands/aws/iam/break-glass/handler.js +124 -12
- package/esm/commands/aws/iam/break-glass/index.js +4 -19
- package/esm/commands/aws/iam/break-glass/schema.js +19 -12
- package/esm/commands/aws/iam/check-admin/handler.js +86 -10
- package/esm/commands/aws/iam/check-admin/index.js +4 -17
- package/esm/commands/aws/iam/check-admin/schema.js +17 -12
- package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
- package/esm/commands/aws/iam/policies/sts-federation.json +11 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
- package/esm/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
- package/esm/commands/aws/iam/policies/user-admins-write-list.json +117 -0
- package/esm/commands/aws/iam/remove-admin/handler.js +117 -11
- package/esm/commands/aws/iam/remove-admin/index.js +4 -18
- package/esm/commands/aws/iam/remove-admin/schema.js +20 -12
- package/esm/commands/aws/iam/setup-acl/handler.js +224 -14
- package/esm/commands/aws/iam/setup-acl/index.js +4 -33
- package/esm/commands/aws/iam/setup-acl/schema.js +18 -7
- package/esm/commands/aws/iam/setup-acl/utils.js +298 -20
- package/esm/commands/aws/iam/users/handler.js +56 -12
- package/esm/commands/aws/iam/users/index.js +4 -41
- package/esm/commands/aws/iam/users/schema.js +16 -7
- package/esm/commands/aws/iam/users/utils.js +440 -30
- package/esm/commands/aws/index.js +142 -229
- package/esm/commands/aws/route53/add-record/handler.js +258 -18
- package/esm/commands/aws/route53/add-record/index.js +4 -57
- package/esm/commands/aws/route53/add-record/schema.js +40 -11
- package/esm/commands/aws/route53/add-record/utils.js +389 -37
- package/esm/commands/aws/route53/remove-record/handler.js +111 -14
- package/esm/commands/aws/route53/remove-record/index.js +3 -18
- package/esm/commands/aws/route53/remove-record/schema.js +21 -8
- package/esm/commands/aws/schema.js +16 -10
- package/esm/commands/aws/ses/send-email/handler.js +70 -12
- package/esm/commands/aws/ses/send-email/index.js +4 -23
- package/esm/commands/aws/ses/send-email/schema.js +23 -7
- package/esm/commands/aws/ses/send-email/utils.js +84 -11
- package/esm/commands/aws/ses/smtp-password.js +69 -10
- package/esm/commands/aws/utils/exec-aws.js +136 -15
- package/esm/commands/aws/utils/resolve-policy-path.js +14 -6
- package/esm/commands/aws/utils/resolve-profile.js +88 -11
- package/esm/commands/aws/utils/tty.js +51 -10
- package/esm/commands/db/create-readonly-user/handler.js +251 -11
- package/esm/commands/db/create-readonly-user/index.js +4 -40
- package/esm/commands/db/create-readonly-user/mysql.js +98 -9
- package/esm/commands/db/create-readonly-user/postgres.js +205 -9
- package/esm/commands/db/create-readonly-user/schema.js +35 -12
- package/esm/commands/db/create-readonly-user/utils.js +151 -22
- package/esm/commands/db/index.js +31 -44
- package/esm/commands/doppler/handler.js +92 -11
- package/esm/commands/doppler/index.js +6 -68
- package/esm/commands/doppler/schema.js +125 -15
- package/esm/commands/doppler/set-secret.js +370 -19
- package/esm/commands/doppler/utils/exec.js +100 -12
- package/esm/commands/doppler/utils.js +396 -34
- package/esm/commands/icons/handler.js +79 -8
- package/esm/commands/icons/index.js +4 -31
- package/esm/commands/icons/schema.js +97 -15
- package/esm/commands/icons/utils.js +125 -13
- package/esm/commands/index.js +47 -155
- package/esm/commands/schema.js +22 -7
- package/esm/index.js +3 -4
- package/package.json +5 -2
- package/vitest.config.ts +11 -0
- package/cjs/__chunks/2FSYDFUV.cjs +0 -146
- package/cjs/__chunks/3A5ZYU5M.cjs +0 -105
- package/cjs/__chunks/3BY5Y4W7.cjs +0 -1
- package/cjs/__chunks/3NOHGUCF.cjs +0 -9
- package/cjs/__chunks/3T2LXW7J.cjs +0 -387
- package/cjs/__chunks/4SFWHCB3.cjs +0 -133
- package/cjs/__chunks/4XT5JEAS.cjs +0 -1
- package/cjs/__chunks/AZEB4H4I.cjs +0 -208
- package/cjs/__chunks/B2KFW7T7.cjs +0 -1
- package/cjs/__chunks/B5ENMOCD.cjs +0 -288
- package/cjs/__chunks/B6XM5KSF.cjs +0 -338
- package/cjs/__chunks/BDU2UCE5.cjs +0 -1
- package/cjs/__chunks/BLMSMR5E.cjs +0 -46
- package/cjs/__chunks/CMUD7LLN.cjs +0 -47
- package/cjs/__chunks/DTQ2LB3I.cjs +0 -49
- package/cjs/__chunks/FM5MVRQF.cjs +0 -23
- package/cjs/__chunks/FRHST54J.cjs +0 -135
- package/cjs/__chunks/FU4VP2LN.cjs +0 -1
- package/cjs/__chunks/G5K4PVIL.cjs +0 -26
- package/cjs/__chunks/GU3R54MK.cjs +0 -127
- package/cjs/__chunks/GUL36IFZ.cjs +0 -61
- package/cjs/__chunks/GZMTNK5N.cjs +0 -1
- package/cjs/__chunks/H74JSDBU.cjs +0 -30
- package/cjs/__chunks/INFOPAHN.cjs +0 -117
- package/cjs/__chunks/J36P6UNE.cjs +0 -75
- package/cjs/__chunks/JB7T7PKQ.cjs +0 -538
- package/cjs/__chunks/JSL2JDMW.cjs +0 -1
- package/cjs/__chunks/K4QNHRTP.cjs +0 -163
- package/cjs/__chunks/KU76LC42.cjs +0 -192
- package/cjs/__chunks/LFDSHANP.cjs +0 -34
- package/cjs/__chunks/LHE24ECK.cjs +0 -192
- package/cjs/__chunks/LIKQ3SI4.cjs +0 -1
- package/cjs/__chunks/LXDF5QVZ.cjs +0 -313
- package/cjs/__chunks/LXOOJR2R.cjs +0 -74
- package/cjs/__chunks/N5MXFOQZ.cjs +0 -167
- package/cjs/__chunks/N7D56LPP.cjs +0 -25
- package/cjs/__chunks/NFXQNOQH.cjs +0 -393
- package/cjs/__chunks/NIMXXHJQ.cjs +0 -92
- package/cjs/__chunks/NLKJIUEX.cjs +0 -126
- package/cjs/__chunks/NT2XXAI6.cjs +0 -89
- package/cjs/__chunks/NWZGFHKH.cjs +0 -121
- package/cjs/__chunks/R3GUC7O7.cjs +0 -110
- package/cjs/__chunks/RPVAXPJ4.cjs +0 -1
- package/cjs/__chunks/S3LVCWPN.cjs +0 -23
- package/cjs/__chunks/SBBNW2BF.cjs +0 -249
- package/cjs/__chunks/T2A7TN4F.cjs +0 -81
- package/cjs/__chunks/TKNNDDIB.cjs +0 -97
- package/cjs/__chunks/TNSRDJPR.cjs +0 -1
- package/cjs/__chunks/UWHPE2GI.cjs +0 -20
- package/cjs/__chunks/W6K7BV74.cjs +0 -1
- package/cjs/__chunks/WBOQ6AUN.cjs +0 -320
- package/cjs/__chunks/WHGN5PZI.cjs +0 -299
- package/cjs/__chunks/WOYF2L6T.cjs +0 -11
- package/cjs/__chunks/X26XY2N6.cjs +0 -18
- package/cjs/__chunks/XMKOKRXZ.cjs +0 -16
- package/cjs/__chunks/XTJPQ3EX.cjs +0 -1
- package/cjs/__chunks/YRHFKTW2.cjs +0 -63
- package/cjs/__chunks/ZMDIOZPT.cjs +0 -22
- package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.cjs +0 -28
- package/cjs/commands/aws/iam/policies/sts-federation.cjs +0 -19
- package/cjs/commands/aws/iam/policies/user-admins-deny-list.cjs +0 -183
- package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.cjs +0 -49
- package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.cjs +0 -64
- package/cjs/commands/aws/iam/policies/user-admins-write-list.cjs +0 -125
- package/esm/__chunks/2FTTEFEK.js +0 -97
- package/esm/__chunks/33UYMUQD.js +0 -338
- package/esm/__chunks/3BKWTHLJ.js +0 -25
- package/esm/__chunks/3HE4BEJX.js +0 -105
- package/esm/__chunks/3QLI5BDL.js +0 -387
- package/esm/__chunks/5GIUAFXL.js +0 -89
- package/esm/__chunks/5ZBVGSOK.js +0 -0
- package/esm/__chunks/6G4PXXKF.js +0 -75
- package/esm/__chunks/73BJG53F.js +0 -11
- 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 +0 -61
- package/esm/__chunks/CVQVHLW5.js +0 -0
- package/esm/__chunks/D62SPZXC.js +0 -0
- package/esm/__chunks/DLEJ25GZ.js +0 -121
- package/esm/__chunks/DMYFNF54.js +0 -192
- package/esm/__chunks/DNFTUMGD.js +0 -23
- package/esm/__chunks/DVKD6YSR.js +0 -49
- package/esm/__chunks/EMSH4P76.js +0 -20
- package/esm/__chunks/FFKFVMIE.js +0 -167
- package/esm/__chunks/FL7AILGH.js +0 -133
- package/esm/__chunks/FNXUONAV.js +0 -110
- package/esm/__chunks/G4NJHFFU.js +0 -320
- package/esm/__chunks/HJSXC6HP.js +0 -117
- package/esm/__chunks/IEOGAQYI.js +0 -46
- package/esm/__chunks/IZFGBYGE.js +0 -34
- package/esm/__chunks/J34UVKLA.js +0 -26
- package/esm/__chunks/JZPBBBIG.js +0 -74
- package/esm/__chunks/KWUJP5MG.js +0 -135
- package/esm/__chunks/M35URMT4.js +0 -313
- package/esm/__chunks/NF3M2L6C.js +0 -81
- package/esm/__chunks/O3CCA76Q.js +0 -22
- package/esm/__chunks/PNPPDYKC.js +0 -299
- package/esm/__chunks/QFXN4EHM.js +0 -393
- package/esm/__chunks/QKDDLIWD.js +0 -146
- package/esm/__chunks/QSE66AKY.js +0 -208
- package/esm/__chunks/QUF7PS4R.js +0 -18
- package/esm/__chunks/S7IJPJ4R.js +0 -126
- package/esm/__chunks/SD3E3EPH.js +0 -163
- package/esm/__chunks/SJXQJ7RS.js +0 -92
- package/esm/__chunks/SNCKIAOR.js +0 -0
- package/esm/__chunks/T3TTUHTW.js +0 -30
- package/esm/__chunks/TIOVE6HR.js +0 -0
- package/esm/__chunks/TXKMEIDQ.js +0 -0
- package/esm/__chunks/U7HAE2RF.js +0 -288
- package/esm/__chunks/UXWY7BYE.js +0 -63
- package/esm/__chunks/VKAKISRG.js +0 -192
- 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 +0 -249
- package/esm/__chunks/XQN2TA4S.js +0 -23
- package/esm/__chunks/XXK32TIM.js +0 -16
- package/esm/__chunks/YGWTVPZE.js +0 -538
- package/esm/__chunks/YRG7PT33.js +0 -127
- package/esm/__chunks/ZHKVJO2U.js +0 -47
- package/esm/__chunks/ZO55YUSY.js +0 -9
- package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.js +0 -28
- package/esm/commands/aws/iam/policies/sts-federation.js +0 -19
- package/esm/commands/aws/iam/policies/user-admins-deny-list.js +0 -183
- package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.js +0 -49
- package/esm/commands/aws/iam/policies/user-admins-self-service-iam.js +0 -64
- package/esm/commands/aws/iam/policies/user-admins-write-list.js +0 -125
package/esm/__chunks/IEOGAQYI.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
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
|
-
};
|
package/esm/__chunks/IZFGBYGE.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
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
|
-
};
|
package/esm/__chunks/J34UVKLA.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
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
|
-
};
|
package/esm/__chunks/JZPBBBIG.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
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
|
-
};
|
package/esm/__chunks/KWUJP5MG.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
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
|
-
};
|
package/esm/__chunks/M35URMT4.js
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
applyMysqlReadonly,
|
|
3
|
-
listMysqlDatabases
|
|
4
|
-
} from "./3HE4BEJX.js";
|
|
5
|
-
import {
|
|
6
|
-
applyPostgresReadonly,
|
|
7
|
-
listPostgresDatabases
|
|
8
|
-
} from "./SD3E3EPH.js";
|
|
9
|
-
import {
|
|
10
|
-
DEFAULT_MYSQL_HOST_PATTERN,
|
|
11
|
-
DEFAULT_READONLY_USERNAME,
|
|
12
|
-
ENGINES,
|
|
13
|
-
createReadonlyUserOptionsSchema
|
|
14
|
-
} from "./T3TTUHTW.js";
|
|
15
|
-
import {
|
|
16
|
-
buildReadonlyUrl,
|
|
17
|
-
detectEngineFromUrl,
|
|
18
|
-
generatePassword,
|
|
19
|
-
parseConnectionUrl,
|
|
20
|
-
resolveAdminUrl
|
|
21
|
-
} from "./DLEJ25GZ.js";
|
|
22
|
-
import {
|
|
23
|
-
prompt,
|
|
24
|
-
promptChoice,
|
|
25
|
-
promptYesNo
|
|
26
|
-
} from "./ZHKVJO2U.js";
|
|
27
|
-
|
|
28
|
-
// src/commands/db/create-readonly-user/handler.js
|
|
29
|
-
import chalk from "chalk";
|
|
30
|
-
import { ZodError } from "zod";
|
|
31
|
-
async function resolveEngine(engineOption, url) {
|
|
32
|
-
if (engineOption) {
|
|
33
|
-
return engineOption;
|
|
34
|
-
}
|
|
35
|
-
if (url) {
|
|
36
|
-
const detected = detectEngineFromUrl(url);
|
|
37
|
-
if (detected) {
|
|
38
|
-
return detected;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
const index = await promptChoice({
|
|
42
|
-
message: "Choose a database engine:",
|
|
43
|
-
options: ["postgres", "mysql"]
|
|
44
|
-
});
|
|
45
|
-
const chosen = ENGINES[index];
|
|
46
|
-
if (!chosen) {
|
|
47
|
-
throw new Error("No engine selected");
|
|
48
|
-
}
|
|
49
|
-
return chosen;
|
|
50
|
-
}
|
|
51
|
-
async function resolveUrl(params) {
|
|
52
|
-
const { urlOption, engine } = params;
|
|
53
|
-
const fromEnv = resolveAdminUrl({ url: urlOption, engine });
|
|
54
|
-
if (fromEnv) {
|
|
55
|
-
return fromEnv;
|
|
56
|
-
}
|
|
57
|
-
const example = engine === "postgres" ? "postgresql://admin:pass@host:5432/postgres" : "mysql://admin:pass@host:3306/";
|
|
58
|
-
const raw = await prompt(` Admin connection URL (e.g. ${example}): `);
|
|
59
|
-
if (!raw) {
|
|
60
|
-
throw new Error(
|
|
61
|
-
"Admin connection URL is required (pass --url or set DATABASE_URL)"
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
return raw;
|
|
65
|
-
}
|
|
66
|
-
async function resolveScope(params) {
|
|
67
|
-
const { databaseOption, databases } = params;
|
|
68
|
-
if (databaseOption) {
|
|
69
|
-
const normalized = databaseOption.trim().toLowerCase();
|
|
70
|
-
if (normalized === "all" || normalized === "*") {
|
|
71
|
-
return { mode: "all", databases };
|
|
72
|
-
}
|
|
73
|
-
if (!databases.includes(databaseOption)) {
|
|
74
|
-
throw new Error(
|
|
75
|
-
`Database "${databaseOption}" not found. Available: ${databases.join(", ") || "(none)"}`
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
return { mode: "one", databases: [databaseOption] };
|
|
79
|
-
}
|
|
80
|
-
if (databases.length === 0) {
|
|
81
|
-
throw new Error("No user databases found to grant access on.");
|
|
82
|
-
}
|
|
83
|
-
const options = [
|
|
84
|
-
...databases.map((name) => name),
|
|
85
|
-
`all (${databases.length} databases)`
|
|
86
|
-
];
|
|
87
|
-
const index = await promptChoice({
|
|
88
|
-
message: "Grant read-only on which database?",
|
|
89
|
-
options
|
|
90
|
-
});
|
|
91
|
-
if (index === options.length - 1) {
|
|
92
|
-
return { mode: "all", databases };
|
|
93
|
-
}
|
|
94
|
-
const chosen = databases[index];
|
|
95
|
-
if (!chosen) {
|
|
96
|
-
throw new Error("No database selected");
|
|
97
|
-
}
|
|
98
|
-
return { mode: "one", databases: [chosen] };
|
|
99
|
-
}
|
|
100
|
-
async function resolveUsername(usernameOption) {
|
|
101
|
-
if (usernameOption) {
|
|
102
|
-
return usernameOption;
|
|
103
|
-
}
|
|
104
|
-
const raw = await prompt(
|
|
105
|
-
` Read-only username [default: ${DEFAULT_READONLY_USERNAME}]: `
|
|
106
|
-
);
|
|
107
|
-
const username = raw || DEFAULT_READONLY_USERNAME;
|
|
108
|
-
if (!/^[A-Za-z0-9_]+$/.test(username)) {
|
|
109
|
-
throw new Error(
|
|
110
|
-
"Username must contain only letters, numbers, and underscores"
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
return username;
|
|
114
|
-
}
|
|
115
|
-
async function resolvePassword(passwordOption) {
|
|
116
|
-
if (passwordOption) {
|
|
117
|
-
return { password: passwordOption, generated: false };
|
|
118
|
-
}
|
|
119
|
-
const generate = await promptYesNo({
|
|
120
|
-
message: " Generate a random password?",
|
|
121
|
-
defaultYes: true
|
|
122
|
-
});
|
|
123
|
-
if (generate) {
|
|
124
|
-
return { password: generatePassword(), generated: true };
|
|
125
|
-
}
|
|
126
|
-
const password = await prompt(" Password: ");
|
|
127
|
-
if (!password) {
|
|
128
|
-
throw new Error("Password is required");
|
|
129
|
-
}
|
|
130
|
-
return { password, generated: false };
|
|
131
|
-
}
|
|
132
|
-
function redactUrl(url) {
|
|
133
|
-
try {
|
|
134
|
-
const parsed = new URL(url);
|
|
135
|
-
if (parsed.password) {
|
|
136
|
-
parsed.password = "***";
|
|
137
|
-
}
|
|
138
|
-
return parsed.toString();
|
|
139
|
-
} catch {
|
|
140
|
-
return url;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
async function createReadonlyUserCommand(options) {
|
|
144
|
-
try {
|
|
145
|
-
const {
|
|
146
|
-
engine: engineOption,
|
|
147
|
-
url: urlOption,
|
|
148
|
-
database: databaseOption,
|
|
149
|
-
username: usernameOption,
|
|
150
|
-
password: passwordOption,
|
|
151
|
-
hostPattern: hostPatternOption,
|
|
152
|
-
ssl: sslOption,
|
|
153
|
-
yes,
|
|
154
|
-
dryRun,
|
|
155
|
-
verbose
|
|
156
|
-
} = createReadonlyUserOptionsSchema.parse(options);
|
|
157
|
-
console.log(chalk.blue("\nCreate read-only database user"));
|
|
158
|
-
console.log("");
|
|
159
|
-
const urlForDetect = resolveAdminUrl({
|
|
160
|
-
url: urlOption,
|
|
161
|
-
engine: engineOption
|
|
162
|
-
});
|
|
163
|
-
const engine = await resolveEngine(engineOption, urlForDetect);
|
|
164
|
-
console.log(`Engine: ${engine}`);
|
|
165
|
-
const url = await resolveUrl({ urlOption, engine });
|
|
166
|
-
const config = parseConnectionUrl({
|
|
167
|
-
url,
|
|
168
|
-
engine,
|
|
169
|
-
sslOption
|
|
170
|
-
});
|
|
171
|
-
console.log(
|
|
172
|
-
`Admin: ${config.user}@${config.host}:${config.port}` + (config.database ? `/${config.database}` : "")
|
|
173
|
-
);
|
|
174
|
-
console.log("");
|
|
175
|
-
const listed = engine === "postgres" ? await listPostgresDatabases(config) : await listMysqlDatabases(config);
|
|
176
|
-
if (verbose) {
|
|
177
|
-
console.log(`Found databases: ${listed.join(", ") || "(none)"}`);
|
|
178
|
-
console.log("");
|
|
179
|
-
}
|
|
180
|
-
const scope = await resolveScope({
|
|
181
|
-
databaseOption,
|
|
182
|
-
databases: listed
|
|
183
|
-
});
|
|
184
|
-
console.log(
|
|
185
|
-
scope.mode === "all" ? `Scope: all (${scope.databases.length} databases)` : `Scope: ${scope.databases[0]}`
|
|
186
|
-
);
|
|
187
|
-
console.log("");
|
|
188
|
-
const username = await resolveUsername(usernameOption);
|
|
189
|
-
const { password, generated } = await resolvePassword(passwordOption);
|
|
190
|
-
const hostPattern = hostPatternOption ?? DEFAULT_MYSQL_HOST_PATTERN;
|
|
191
|
-
console.log("");
|
|
192
|
-
console.log("Plan:");
|
|
193
|
-
console.log(` User: ${username}`);
|
|
194
|
-
console.log(
|
|
195
|
-
` Password: ${generated ? "(generated)" : "(provided)"}${dryRun ? " [dry-run]" : ""}`
|
|
196
|
-
);
|
|
197
|
-
if (engine === "mysql") {
|
|
198
|
-
console.log(` Host: ${hostPattern}`);
|
|
199
|
-
}
|
|
200
|
-
console.log(
|
|
201
|
-
scope.mode === "all" ? ` Grants: SELECT on ALL databases (${scope.databases.length})` : ` Grants: SELECT on ${scope.databases[0]}`
|
|
202
|
-
);
|
|
203
|
-
if (scope.mode === "all" && engine === "postgres") {
|
|
204
|
-
console.log(
|
|
205
|
-
chalk.yellow(
|
|
206
|
-
" Note: Databases created later will NOT get these grants automatically \u2014 re-run this command."
|
|
207
|
-
)
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
|
-
console.log("");
|
|
211
|
-
if (!yes && !dryRun) {
|
|
212
|
-
const confirmed = await promptYesNo({
|
|
213
|
-
message: "Apply these changes?",
|
|
214
|
-
defaultYes: false
|
|
215
|
-
});
|
|
216
|
-
if (!confirmed) {
|
|
217
|
-
console.log("Aborted.");
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
console.log("");
|
|
221
|
-
}
|
|
222
|
-
const result = engine === "postgres" ? await applyPostgresReadonly({
|
|
223
|
-
config,
|
|
224
|
-
username,
|
|
225
|
-
password,
|
|
226
|
-
databases: scope.databases,
|
|
227
|
-
dryRun,
|
|
228
|
-
verbose
|
|
229
|
-
}) : await applyMysqlReadonly({
|
|
230
|
-
config,
|
|
231
|
-
username,
|
|
232
|
-
password,
|
|
233
|
-
databases: scope.mode === "all" ? "all" : scope.databases,
|
|
234
|
-
hostPattern,
|
|
235
|
-
dryRun,
|
|
236
|
-
verbose
|
|
237
|
-
});
|
|
238
|
-
if (dryRun) {
|
|
239
|
-
console.log(chalk.cyan("Dry run \u2014 SQL that would run:"));
|
|
240
|
-
for (const statement of result.statements) {
|
|
241
|
-
console.log(` ${statement}`);
|
|
242
|
-
}
|
|
243
|
-
console.log("");
|
|
244
|
-
console.log(chalk.cyan("No changes made."));
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
console.log(
|
|
248
|
-
chalk.green(
|
|
249
|
-
result.created ? `Created user "${username}" and granted read-only access.` : `Updated user "${username}" password and refreshed read-only grants.`
|
|
250
|
-
)
|
|
251
|
-
);
|
|
252
|
-
console.log("");
|
|
253
|
-
const sampleDb = scope.mode === "one" ? scope.databases[0] ?? "" : scope.databases[0] ?? "";
|
|
254
|
-
const readonlyUrl = buildReadonlyUrl({
|
|
255
|
-
engine,
|
|
256
|
-
host: config.host,
|
|
257
|
-
port: config.port,
|
|
258
|
-
username,
|
|
259
|
-
password,
|
|
260
|
-
database: sampleDb
|
|
261
|
-
});
|
|
262
|
-
console.log("Connection (secret shown once \u2014 copy now):");
|
|
263
|
-
console.log(
|
|
264
|
-
"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
|
|
265
|
-
);
|
|
266
|
-
console.log(readonlyUrl);
|
|
267
|
-
if (scope.mode === "all") {
|
|
268
|
-
console.log("");
|
|
269
|
-
console.log(
|
|
270
|
-
chalk.gray(
|
|
271
|
-
` (URL uses database "${sampleDb}" as an example; user can connect to any granted database.)`
|
|
272
|
-
)
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
console.log(
|
|
276
|
-
"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
|
|
277
|
-
);
|
|
278
|
-
console.log("");
|
|
279
|
-
console.log(chalk.gray(`Admin URL used: ${redactUrl(url)}`));
|
|
280
|
-
} catch (error) {
|
|
281
|
-
if (error instanceof ZodError) {
|
|
282
|
-
console.error(chalk.red("\n\u274C Invalid command options:"));
|
|
283
|
-
error.errors.forEach((err) => {
|
|
284
|
-
console.error(chalk.red(` ${err.path.join(".")}: ${err.message}`));
|
|
285
|
-
});
|
|
286
|
-
process.exit(1);
|
|
287
|
-
}
|
|
288
|
-
const verbose = (
|
|
289
|
-
/** @type {any} */
|
|
290
|
-
options?.verbose || false
|
|
291
|
-
);
|
|
292
|
-
console.error(chalk.red("\n\u274C create-readonly-user failed:"));
|
|
293
|
-
if (error instanceof Error) {
|
|
294
|
-
console.error(chalk.red(` ${error.message}`));
|
|
295
|
-
if (verbose && error.stack) {
|
|
296
|
-
console.error(chalk.gray("\nStack trace:"));
|
|
297
|
-
console.error(chalk.gray(error.stack));
|
|
298
|
-
}
|
|
299
|
-
} else {
|
|
300
|
-
console.error(chalk.red(` ${String(error)}`));
|
|
301
|
-
}
|
|
302
|
-
console.error(
|
|
303
|
-
chalk.yellow(
|
|
304
|
-
"\n\u{1F4A1} Pass --url or set DATABASE_URL. Use --verbose for details.\n"
|
|
305
|
-
)
|
|
306
|
-
);
|
|
307
|
-
process.exit(1);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
export {
|
|
312
|
-
createReadonlyUserCommand
|
|
313
|
-
};
|