@padua/cli 1.7.0 → 1.8.0
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/README.md +7 -1
- package/dist/commands/tunnel/aws.d.ts +12 -0
- package/dist/commands/tunnel/aws.d.ts.map +1 -1
- package/dist/commands/tunnel/aws.js +93 -0
- package/dist/commands/tunnel/aws.js.map +1 -1
- package/dist/commands/tunnel/rds.d.ts.map +1 -1
- package/dist/commands/tunnel/rds.js +55 -15
- package/dist/commands/tunnel/rds.js.map +1 -1
- package/dist/commands/tunnel/types.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,6 +54,8 @@ The `init` command will:
|
|
|
54
54
|
|
|
55
55
|
Authenticate to AWS SSO, CodeArtifact (npm), and ECR (Docker) with a single command.
|
|
56
56
|
|
|
57
|
+
Automatically reads `AWS_PROFILE` environment variable when no `--profile` flag is provided (works with `paws`).
|
|
58
|
+
|
|
57
59
|
### Basic Usage
|
|
58
60
|
|
|
59
61
|
```bash
|
|
@@ -146,6 +148,8 @@ This means `padua status` automatically uses the profile set by `paws` or `expor
|
|
|
146
148
|
|
|
147
149
|
Check authentication status for all configured services with detailed AWS identity information.
|
|
148
150
|
|
|
151
|
+
Automatically reads `AWS_PROFILE` environment variable when no `--profile` flag is provided (works with `paws`).
|
|
152
|
+
|
|
149
153
|
### Basic Usage
|
|
150
154
|
|
|
151
155
|
```bash
|
|
@@ -232,12 +236,14 @@ paws # Interactive profile selection
|
|
|
232
236
|
paws paduafg-development # Switch to specific profile
|
|
233
237
|
```
|
|
234
238
|
|
|
235
|
-
The `paws` function sets `AWS_PROFILE`, which is automatically picked up by `padua status`, `padua login`, and other commands.
|
|
239
|
+
The `paws` function sets `AWS_PROFILE`, which is automatically picked up by `padua status`, `padua login`, `padua tunnel`, and other commands.
|
|
236
240
|
|
|
237
241
|
## Tunnel Command
|
|
238
242
|
|
|
239
243
|
Create secure tunnels to RDS databases via SSM Session Manager.
|
|
240
244
|
|
|
245
|
+
Automatically reads `AWS_PROFILE` environment variable when no `--profile` flag is provided (works with `paws`).
|
|
246
|
+
|
|
241
247
|
### Basic Usage
|
|
242
248
|
|
|
243
249
|
```bash
|
|
@@ -14,4 +14,16 @@ export declare function getRdsInstanceEndpoint(instanceName: string, profile: st
|
|
|
14
14
|
* Get RDS endpoint - tries cluster first, then instance
|
|
15
15
|
*/
|
|
16
16
|
export declare function getRdsEndpoint(name: string, profile: string, verbose?: boolean): string;
|
|
17
|
+
/**
|
|
18
|
+
* RDS database info for selection
|
|
19
|
+
*/
|
|
20
|
+
export interface RdsDatabase {
|
|
21
|
+
name: string;
|
|
22
|
+
type: 'cluster' | 'instance';
|
|
23
|
+
engine?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List all available RDS clusters and instances
|
|
27
|
+
*/
|
|
28
|
+
export declare function listRdsDatabases(profile: string, verbose?: boolean): RdsDatabase[];
|
|
17
29
|
//# sourceMappingURL=aws.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/aws.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,CA2CR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,QAAQ,GAAG,QAAmB,EAC5C,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CAuCf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CAsCf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,CAcR"}
|
|
1
|
+
{"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/aws.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,CA2CR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,QAAQ,GAAG,QAAmB,EAC5C,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CAuCf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CAsCf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,CAcR;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,WAAW,EAAE,CAmGf"}
|
|
@@ -4,6 +4,7 @@ exports.getInstanceIdByTag = getInstanceIdByTag;
|
|
|
4
4
|
exports.getRdsClusterEndpoint = getRdsClusterEndpoint;
|
|
5
5
|
exports.getRdsInstanceEndpoint = getRdsInstanceEndpoint;
|
|
6
6
|
exports.getRdsEndpoint = getRdsEndpoint;
|
|
7
|
+
exports.listRdsDatabases = listRdsDatabases;
|
|
7
8
|
const child_process_1 = require("child_process");
|
|
8
9
|
const utils_1 = require("../login/utils");
|
|
9
10
|
const AWS_TIMEOUT_MS = 30000;
|
|
@@ -127,4 +128,96 @@ function getRdsEndpoint(name, profile, verbose) {
|
|
|
127
128
|
}
|
|
128
129
|
throw new Error(`Could not find RDS cluster or instance: ${name}`);
|
|
129
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* List all available RDS clusters and instances
|
|
133
|
+
*/
|
|
134
|
+
function listRdsDatabases(profile, verbose) {
|
|
135
|
+
const databases = [];
|
|
136
|
+
if (verbose) {
|
|
137
|
+
console.log(' [verbose] Fetching available RDS clusters and instances...');
|
|
138
|
+
}
|
|
139
|
+
// Get Aurora clusters
|
|
140
|
+
const clustersResult = (0, child_process_1.spawnSync)('aws', [
|
|
141
|
+
'rds',
|
|
142
|
+
'describe-db-clusters',
|
|
143
|
+
'--query', 'DBClusters[].{name:DBClusterIdentifier,engine:Engine}',
|
|
144
|
+
'--output', 'json',
|
|
145
|
+
'--profile', profile,
|
|
146
|
+
], {
|
|
147
|
+
shell: false,
|
|
148
|
+
timeout: AWS_TIMEOUT_MS,
|
|
149
|
+
maxBuffer: 1024 * 1024,
|
|
150
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
151
|
+
env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
|
|
152
|
+
});
|
|
153
|
+
if (clustersResult.error || clustersResult.status !== 0) {
|
|
154
|
+
if (verbose) {
|
|
155
|
+
const errorMsg = clustersResult.error?.message || clustersResult.stderr?.toString() || 'Unknown error';
|
|
156
|
+
console.log(` [verbose] Failed to list RDS clusters: ${errorMsg}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
try {
|
|
161
|
+
const clusters = JSON.parse(clustersResult.stdout?.toString() || '[]');
|
|
162
|
+
for (const cluster of clusters) {
|
|
163
|
+
if (cluster.name) {
|
|
164
|
+
databases.push({
|
|
165
|
+
name: cluster.name,
|
|
166
|
+
type: 'cluster',
|
|
167
|
+
engine: cluster.engine,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (verbose) {
|
|
174
|
+
console.log(` [verbose] Failed to parse RDS clusters response: ${error instanceof Error ? error.message : String(error)}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Get standalone RDS instances (not part of a cluster)
|
|
179
|
+
const instancesResult = (0, child_process_1.spawnSync)('aws', [
|
|
180
|
+
'rds',
|
|
181
|
+
'describe-db-instances',
|
|
182
|
+
'--query', 'DBInstances[?!DBClusterIdentifier].{name:DBInstanceIdentifier,engine:Engine}',
|
|
183
|
+
'--output', 'json',
|
|
184
|
+
'--profile', profile,
|
|
185
|
+
], {
|
|
186
|
+
shell: false,
|
|
187
|
+
timeout: AWS_TIMEOUT_MS,
|
|
188
|
+
maxBuffer: 1024 * 1024,
|
|
189
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
190
|
+
env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
|
|
191
|
+
});
|
|
192
|
+
if (instancesResult.error || instancesResult.status !== 0) {
|
|
193
|
+
if (verbose) {
|
|
194
|
+
const errorMsg = instancesResult.error?.message || instancesResult.stderr?.toString() || 'Unknown error';
|
|
195
|
+
console.log(` [verbose] Failed to list RDS instances: ${errorMsg}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
try {
|
|
200
|
+
const instances = JSON.parse(instancesResult.stdout?.toString() || '[]');
|
|
201
|
+
for (const instance of instances) {
|
|
202
|
+
if (instance.name) {
|
|
203
|
+
databases.push({
|
|
204
|
+
name: instance.name,
|
|
205
|
+
type: 'instance',
|
|
206
|
+
engine: instance.engine,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (verbose) {
|
|
213
|
+
console.log(` [verbose] Failed to parse RDS instances response: ${error instanceof Error ? error.message : String(error)}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (verbose) {
|
|
218
|
+
console.log(` [verbose] Found ${databases.length} RDS databases`);
|
|
219
|
+
}
|
|
220
|
+
// Sort alphabetically by name
|
|
221
|
+
return databases.sort((a, b) => a.name.localeCompare(b.name));
|
|
222
|
+
}
|
|
130
223
|
//# sourceMappingURL=aws.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/commands/tunnel/aws.ts"],"names":[],"mappings":";;AAQA,gDA+CC;AAKD,sDA4CC;AAKD,wDA0CC;AAKD,wCAkBC;
|
|
1
|
+
{"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/commands/tunnel/aws.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rds.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/rds.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"rds.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/rds.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAOzD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAmNf"}
|
|
@@ -12,6 +12,7 @@ const aws_1 = require("./aws");
|
|
|
12
12
|
const port_1 = require("./port");
|
|
13
13
|
const utils_1 = require("../login/utils");
|
|
14
14
|
const config_1 = require("../login/config");
|
|
15
|
+
const types_2 = require("../login/types");
|
|
15
16
|
/**
|
|
16
17
|
* Start an RDS tunnel via SSM Session Manager
|
|
17
18
|
*/
|
|
@@ -19,7 +20,7 @@ async function startRdsTunnel(system, options) {
|
|
|
19
20
|
const noColor = options.noColor ?? false;
|
|
20
21
|
// Load config and get profile
|
|
21
22
|
const config = await (0, config_1.loadConfig)();
|
|
22
|
-
const profile = options.profile
|
|
23
|
+
const profile = (0, types_2.getEffectiveProfile)({ profile: options.profile }, config ?? undefined);
|
|
23
24
|
// Get system configuration
|
|
24
25
|
const systemConfig = (0, types_1.getSystemConfig)(system);
|
|
25
26
|
// Step 1: Ask for local port
|
|
@@ -68,21 +69,60 @@ async function startRdsTunnel(system, options) {
|
|
|
68
69
|
clusterName = options.cluster;
|
|
69
70
|
}
|
|
70
71
|
else {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
// Fetch available RDS databases
|
|
73
|
+
if (!noColor) {
|
|
74
|
+
console.log(chalk_1.default.gray('Fetching available RDS databases...'));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log('Fetching available RDS databases...');
|
|
78
|
+
}
|
|
79
|
+
const databases = (0, aws_1.listRdsDatabases)(profile, options.verbose);
|
|
80
|
+
if (databases.length === 0) {
|
|
81
|
+
// Fall back to text input if no databases found
|
|
82
|
+
if (!noColor) {
|
|
83
|
+
console.log(chalk_1.default.yellow('No RDS databases found. Please enter the name manually.'));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log('No RDS databases found. Please enter the name manually.');
|
|
87
|
+
}
|
|
88
|
+
const clusterAnswer = await inquirer_1.default.prompt([
|
|
89
|
+
{
|
|
90
|
+
type: 'input',
|
|
91
|
+
name: 'cluster',
|
|
92
|
+
message: 'RDS cluster/instance name:',
|
|
93
|
+
default: systemConfig.defaultCluster,
|
|
94
|
+
validate: (input) => {
|
|
95
|
+
if (!input || input.trim().length === 0) {
|
|
96
|
+
return 'Cluster name is required';
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
},
|
|
82
100
|
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
101
|
+
]);
|
|
102
|
+
clusterName = clusterAnswer.cluster.trim();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Show list of available databases
|
|
106
|
+
const choices = databases.map((db) => ({
|
|
107
|
+
name: `${db.name} (${db.type}${db.engine ? `, ${db.engine}` : ''})`,
|
|
108
|
+
value: db.name,
|
|
109
|
+
}));
|
|
110
|
+
// Find default index if defaultCluster is set
|
|
111
|
+
const defaultIndex = systemConfig.defaultCluster
|
|
112
|
+
? databases.findIndex((db) => db.name === systemConfig.defaultCluster)
|
|
113
|
+
: -1;
|
|
114
|
+
const clusterAnswer = await inquirer_1.default.prompt([
|
|
115
|
+
{
|
|
116
|
+
type: 'list',
|
|
117
|
+
name: 'cluster',
|
|
118
|
+
message: 'Select RDS cluster/instance:',
|
|
119
|
+
choices,
|
|
120
|
+
default: defaultIndex >= 0 ? defaultIndex : undefined,
|
|
121
|
+
pageSize: 15,
|
|
122
|
+
},
|
|
123
|
+
]);
|
|
124
|
+
clusterName = clusterAnswer.cluster;
|
|
125
|
+
}
|
|
86
126
|
}
|
|
87
127
|
// Step 4: Get EC2 instance ID
|
|
88
128
|
if (!noColor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rds.js","sourceRoot":"","sources":["../../../src/commands/tunnel/rds.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"rds.js","sourceRoot":"","sources":["../../../src/commands/tunnel/rds.ts"],"names":[],"mappings":"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"}
|