@zincapp/znvault-cli 2.19.0 → 2.19.2
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/dist/commands/dynamic-secrets/connection.d.ts +17 -0
- package/dist/commands/dynamic-secrets/connection.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/connection.js +217 -0
- package/dist/commands/dynamic-secrets/connection.js.map +1 -0
- package/dist/commands/dynamic-secrets/creds.d.ts +5 -0
- package/dist/commands/dynamic-secrets/creds.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/creds.js +39 -0
- package/dist/commands/dynamic-secrets/creds.js.map +1 -0
- package/dist/commands/dynamic-secrets/helpers.d.ts +5 -0
- package/dist/commands/dynamic-secrets/helpers.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/helpers.js +36 -0
- package/dist/commands/dynamic-secrets/helpers.js.map +1 -0
- package/dist/commands/dynamic-secrets/index.d.ts +7 -0
- package/dist/commands/dynamic-secrets/index.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/index.js +173 -0
- package/dist/commands/dynamic-secrets/index.js.map +1 -0
- package/dist/commands/dynamic-secrets/lease.d.ts +11 -0
- package/dist/commands/dynamic-secrets/lease.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/lease.js +137 -0
- package/dist/commands/dynamic-secrets/lease.js.map +1 -0
- package/dist/commands/dynamic-secrets/role.d.ts +15 -0
- package/dist/commands/dynamic-secrets/role.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/role.js +184 -0
- package/dist/commands/dynamic-secrets/role.js.map +1 -0
- package/dist/commands/dynamic-secrets/types.d.ts +125 -0
- package/dist/commands/dynamic-secrets/types.d.ts.map +1 -0
- package/dist/commands/dynamic-secrets/types.js +3 -0
- package/dist/commands/dynamic-secrets/types.js.map +1 -0
- package/dist/commands/dynamic-secrets.d.ts +6 -2
- package/dist/commands/dynamic-secrets.d.ts.map +1 -1
- package/dist/commands/dynamic-secrets.js +6 -754
- package/dist/commands/dynamic-secrets.js.map +1 -1
- package/dist/commands/policy/attachments.d.ts +9 -0
- package/dist/commands/policy/attachments.d.ts.map +1 -0
- package/dist/commands/policy/attachments.js +161 -0
- package/dist/commands/policy/attachments.js.map +1 -0
- package/dist/commands/policy/crud.d.ts +8 -0
- package/dist/commands/policy/crud.d.ts.map +1 -0
- package/dist/commands/policy/crud.js +232 -0
- package/dist/commands/policy/crud.js.map +1 -0
- package/dist/commands/policy/helpers.d.ts +13 -0
- package/dist/commands/policy/helpers.d.ts.map +1 -0
- package/dist/commands/policy/helpers.js +61 -0
- package/dist/commands/policy/helpers.js.map +1 -0
- package/dist/commands/policy/index.d.ts +7 -0
- package/dist/commands/policy/index.d.ts.map +1 -0
- package/dist/commands/policy/index.js +160 -0
- package/dist/commands/policy/index.js.map +1 -0
- package/dist/commands/policy/io.d.ts +4 -0
- package/dist/commands/policy/io.d.ts.map +1 -0
- package/dist/commands/policy/io.js +65 -0
- package/dist/commands/policy/io.js.map +1 -0
- package/dist/commands/policy/list.d.ts +4 -0
- package/dist/commands/policy/list.d.ts.map +1 -0
- package/dist/commands/policy/list.js +99 -0
- package/dist/commands/policy/list.js.map +1 -0
- package/dist/commands/policy/test.d.ts +3 -0
- package/dist/commands/policy/test.d.ts.map +1 -0
- package/dist/commands/policy/test.js +58 -0
- package/dist/commands/policy/test.js.map +1 -0
- package/dist/commands/policy/types.d.ts +84 -0
- package/dist/commands/policy/types.d.ts.map +1 -0
- package/dist/commands/policy/types.js +3 -0
- package/dist/commands/policy/types.js.map +1 -0
- package/dist/commands/policy.d.ts +6 -2
- package/dist/commands/policy.d.ts.map +1 -1
- package/dist/commands/policy.js +4 -770
- package/dist/commands/policy.js.map +1 -1
- package/dist/lib/config/index.d.ts +1 -1
- package/dist/lib/config/index.d.ts.map +1 -1
- package/dist/lib/config/index.js +1 -1
- package/dist/lib/config/index.js.map +1 -1
- package/dist/lib/config/store.d.ts +10 -0
- package/dist/lib/config/store.d.ts.map +1 -1
- package/dist/lib/config/store.js +49 -10
- package/dist/lib/config/store.js.map +1 -1
- package/dist/lib/db/audit.d.ts +16 -0
- package/dist/lib/db/audit.d.ts.map +1 -0
- package/dist/lib/db/audit.js +60 -0
- package/dist/lib/db/audit.js.map +1 -0
- package/dist/lib/db/client.d.ts +27 -0
- package/dist/lib/db/client.d.ts.map +1 -0
- package/dist/lib/db/client.js +70 -0
- package/dist/lib/db/client.js.map +1 -0
- package/dist/lib/db/emergency.d.ts +50 -0
- package/dist/lib/db/emergency.d.ts.map +1 -0
- package/dist/lib/db/emergency.js +180 -0
- package/dist/lib/db/emergency.js.map +1 -0
- package/dist/lib/db/health.d.ts +14 -0
- package/dist/lib/db/health.d.ts.map +1 -0
- package/dist/lib/db/health.js +177 -0
- package/dist/lib/db/health.js.map +1 -0
- package/dist/lib/db/index.d.ts +56 -0
- package/dist/lib/db/index.d.ts.map +1 -0
- package/dist/lib/db/index.js +107 -0
- package/dist/lib/db/index.js.map +1 -0
- package/dist/lib/db/lockdown.d.ts +15 -0
- package/dist/lib/db/lockdown.d.ts.map +1 -0
- package/dist/lib/db/lockdown.js +67 -0
- package/dist/lib/db/lockdown.js.map +1 -0
- package/dist/lib/db/tenants.d.ts +14 -0
- package/dist/lib/db/tenants.d.ts.map +1 -0
- package/dist/lib/db/tenants.js +88 -0
- package/dist/lib/db/tenants.js.map +1 -0
- package/dist/lib/db/types.d.ts +95 -0
- package/dist/lib/db/types.d.ts.map +1 -0
- package/dist/lib/db/types.js +3 -0
- package/dist/lib/db/types.js.map +1 -0
- package/dist/lib/db/users.d.ts +16 -0
- package/dist/lib/db/users.d.ts.map +1 -0
- package/dist/lib/db/users.js +95 -0
- package/dist/lib/db/users.js.map +1 -0
- package/dist/lib/db.d.ts +4 -112
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +4 -726
- package/dist/lib/db.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ConnectionCreateOptions, ConnectionUpdateOptions } from './types.js';
|
|
2
|
+
export declare function listConnections(options: {
|
|
3
|
+
json?: boolean;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function getConnection(nameOrId: string, options: {
|
|
6
|
+
json?: boolean;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function createConnection(options: ConnectionCreateOptions): Promise<void>;
|
|
9
|
+
export declare function updateConnection(nameOrId: string, options: ConnectionUpdateOptions): Promise<void>;
|
|
10
|
+
export declare function deleteConnection(nameOrId: string, options: {
|
|
11
|
+
force?: boolean;
|
|
12
|
+
json?: boolean;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
export declare function testConnection(nameOrId: string, options: {
|
|
15
|
+
json?: boolean;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/connection.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAsC,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAGvH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChF;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChG;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDtF;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxG;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpH;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBjG"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
// Path: src/commands/dynamic-secrets/connection.ts
|
|
2
|
+
/**
|
|
3
|
+
* Connection commands for dynamic secrets
|
|
4
|
+
*/
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import Table from 'cli-table3';
|
|
7
|
+
import inquirer from 'inquirer';
|
|
8
|
+
import { client } from '../../lib/client.js';
|
|
9
|
+
import * as output from '../../lib/output.js';
|
|
10
|
+
import { formatStatus, formatDate, formatTtl } from './helpers.js';
|
|
11
|
+
export async function listConnections(options) {
|
|
12
|
+
const spinner = ora('Fetching connections...').start();
|
|
13
|
+
try {
|
|
14
|
+
const response = await client.get('/v1/dynamic-secrets/connections');
|
|
15
|
+
spinner.stop();
|
|
16
|
+
if (options.json) {
|
|
17
|
+
output.json(response);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (response.length === 0) {
|
|
21
|
+
output.info('No database connections found.');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const table = new Table({
|
|
25
|
+
head: ['Name', 'Type', 'Status', 'Default TTL', 'Max TTL', 'Roles', 'Active Leases'],
|
|
26
|
+
style: { head: ['cyan'] },
|
|
27
|
+
});
|
|
28
|
+
for (const conn of response) {
|
|
29
|
+
table.push([
|
|
30
|
+
conn.name,
|
|
31
|
+
conn.connectionType,
|
|
32
|
+
formatStatus(conn.status),
|
|
33
|
+
formatTtl(conn.defaultTtlSeconds),
|
|
34
|
+
formatTtl(conn.maxTtlSeconds),
|
|
35
|
+
String(conn.roleCount ?? 0),
|
|
36
|
+
String(conn.activeLeases ?? 0),
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
console.log(table.toString());
|
|
40
|
+
output.info(`${response.length} connection(s) found`);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
spinner.fail('Failed to list connections');
|
|
44
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export async function getConnection(nameOrId, options) {
|
|
49
|
+
const spinner = ora('Fetching connection...').start();
|
|
50
|
+
try {
|
|
51
|
+
const response = await client.get(`/v1/dynamic-secrets/connections/${nameOrId}`);
|
|
52
|
+
spinner.stop();
|
|
53
|
+
if (options.json) {
|
|
54
|
+
output.json(response);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
output.keyValue({
|
|
58
|
+
'ID': response.id,
|
|
59
|
+
'Name': response.name,
|
|
60
|
+
'Description': response.description ?? '-',
|
|
61
|
+
'Type': response.connectionType,
|
|
62
|
+
'Status': formatStatus(response.status),
|
|
63
|
+
'Max Connections': response.maxOpenConnections,
|
|
64
|
+
'Timeout': `${response.connectionTimeoutSeconds}s`,
|
|
65
|
+
'Default TTL': formatTtl(response.defaultTtlSeconds),
|
|
66
|
+
'Max TTL': formatTtl(response.maxTtlSeconds),
|
|
67
|
+
'Last Health Check': formatDate(response.lastHealthCheck),
|
|
68
|
+
'Health Status': response.lastHealthCheckStatus === null ? '-' : (response.lastHealthCheckStatus ? 'Healthy' : 'Unhealthy'),
|
|
69
|
+
'Roles': String(response.roleCount ?? 0),
|
|
70
|
+
'Active Leases': String(response.activeLeases ?? 0),
|
|
71
|
+
'Created': formatDate(response.createdAt),
|
|
72
|
+
'Updated': formatDate(response.updatedAt),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
spinner.fail('Failed to get connection');
|
|
77
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function createConnection(options) {
|
|
82
|
+
// Interactive prompts if options not provided
|
|
83
|
+
const name = options.name ?? (await inquirer.prompt([{
|
|
84
|
+
type: 'input',
|
|
85
|
+
name: 'name',
|
|
86
|
+
message: 'Connection name:',
|
|
87
|
+
validate: (input) => input.trim() ? true : 'Name is required',
|
|
88
|
+
}])).name;
|
|
89
|
+
const connectionType = options.type?.toUpperCase() ?? (await inquirer.prompt([{
|
|
90
|
+
type: 'list',
|
|
91
|
+
name: 'type',
|
|
92
|
+
message: 'Database type:',
|
|
93
|
+
choices: ['POSTGRESQL', 'MYSQL'],
|
|
94
|
+
}])).type;
|
|
95
|
+
const connectionString = options.connectionString ?? (await inquirer.prompt([{
|
|
96
|
+
type: 'password',
|
|
97
|
+
name: 'connectionString',
|
|
98
|
+
message: 'Connection string:',
|
|
99
|
+
mask: '*',
|
|
100
|
+
validate: (input) => input.trim() ? true : 'Connection string is required',
|
|
101
|
+
}])).connectionString;
|
|
102
|
+
const spinner = ora('Creating connection...').start();
|
|
103
|
+
try {
|
|
104
|
+
const body = {
|
|
105
|
+
name,
|
|
106
|
+
connectionType,
|
|
107
|
+
connectionString,
|
|
108
|
+
};
|
|
109
|
+
if (options.description)
|
|
110
|
+
body.description = options.description;
|
|
111
|
+
if (options.maxConnections)
|
|
112
|
+
body.maxOpenConnections = parseInt(options.maxConnections, 10);
|
|
113
|
+
if (options.timeout)
|
|
114
|
+
body.connectionTimeoutSeconds = parseInt(options.timeout, 10);
|
|
115
|
+
if (options.defaultTtl)
|
|
116
|
+
body.defaultTtlSeconds = parseInt(options.defaultTtl, 10);
|
|
117
|
+
if (options.maxTtl)
|
|
118
|
+
body.maxTtlSeconds = parseInt(options.maxTtl, 10);
|
|
119
|
+
const response = await client.post('/v1/dynamic-secrets/connections', body);
|
|
120
|
+
spinner.succeed('Connection created');
|
|
121
|
+
if (options.json) {
|
|
122
|
+
output.json(response);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
output.success(`Connection "${response.name}" created with ID: ${response.id}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
spinner.fail('Failed to create connection');
|
|
130
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export async function updateConnection(nameOrId, options) {
|
|
135
|
+
const spinner = ora('Updating connection...').start();
|
|
136
|
+
try {
|
|
137
|
+
const body = {};
|
|
138
|
+
if (options.description !== undefined)
|
|
139
|
+
body.description = options.description;
|
|
140
|
+
if (options.maxConnections)
|
|
141
|
+
body.maxOpenConnections = parseInt(options.maxConnections, 10);
|
|
142
|
+
if (options.timeout)
|
|
143
|
+
body.connectionTimeoutSeconds = parseInt(options.timeout, 10);
|
|
144
|
+
if (options.defaultTtl)
|
|
145
|
+
body.defaultTtlSeconds = parseInt(options.defaultTtl, 10);
|
|
146
|
+
if (options.maxTtl)
|
|
147
|
+
body.maxTtlSeconds = parseInt(options.maxTtl, 10);
|
|
148
|
+
if (options.status)
|
|
149
|
+
body.status = options.status.toUpperCase();
|
|
150
|
+
const response = await client.patch(`/v1/dynamic-secrets/connections/${nameOrId}`, body);
|
|
151
|
+
spinner.succeed('Connection updated');
|
|
152
|
+
if (options.json) {
|
|
153
|
+
output.json(response);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
output.success(`Connection "${response.name}" updated`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
spinner.fail('Failed to update connection');
|
|
161
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export async function deleteConnection(nameOrId, options) {
|
|
166
|
+
if (!options.force) {
|
|
167
|
+
const { confirm } = await inquirer.prompt([{
|
|
168
|
+
type: 'confirm',
|
|
169
|
+
name: 'confirm',
|
|
170
|
+
message: `Are you sure you want to delete connection "${nameOrId}"? This will also delete all associated roles.`,
|
|
171
|
+
default: false,
|
|
172
|
+
}]);
|
|
173
|
+
if (!confirm) {
|
|
174
|
+
output.info('Cancelled');
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const spinner = ora('Deleting connection...').start();
|
|
179
|
+
try {
|
|
180
|
+
await client.delete(`/v1/dynamic-secrets/connections/${nameOrId}`);
|
|
181
|
+
spinner.succeed(`Connection "${nameOrId}" deleted`);
|
|
182
|
+
if (options.json) {
|
|
183
|
+
output.json({ success: true, id: nameOrId });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
spinner.fail('Failed to delete connection');
|
|
188
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export async function testConnection(nameOrId, options) {
|
|
193
|
+
const spinner = ora('Testing connection...').start();
|
|
194
|
+
try {
|
|
195
|
+
const response = await client.post(`/v1/dynamic-secrets/connections/${nameOrId}/test`, {});
|
|
196
|
+
if (response.success) {
|
|
197
|
+
spinner.succeed('Connection test successful');
|
|
198
|
+
if (options.json) {
|
|
199
|
+
output.json(response);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
spinner.fail('Connection test failed');
|
|
204
|
+
output.error(response.error ?? 'Unknown error');
|
|
205
|
+
if (options.json) {
|
|
206
|
+
output.json(response);
|
|
207
|
+
}
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
spinner.fail('Failed to test connection');
|
|
213
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/connection.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD;;GAEG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA2B;IAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,iCAAiC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC;YACpF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;SAC1B,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,CAAC,IAAI;gBACT,IAAI,CAAC,cAAc;gBACnB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACjC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,sBAAsB,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,OAA2B;IAC/E,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAe,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC;YACd,IAAI,EAAE,QAAQ,CAAC,EAAE;YACjB,MAAM,EAAE,QAAQ,CAAC,IAAI;YACrB,aAAa,EAAE,QAAQ,CAAC,WAAW,IAAI,GAAG;YAC1C,MAAM,EAAE,QAAQ,CAAC,cAAc;YAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB;YAC9C,SAAS,EAAE,GAAG,QAAQ,CAAC,wBAAwB,GAAG;YAClD,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpD,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5C,mBAAmB,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzD,eAAe,EAAE,QAAQ,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3H,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;YACxC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;YACnD,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;YACzC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgC;IACrE,8CAA8C;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;SACtE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEV,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5E,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;SACjC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEV,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,oBAAoB;YAC7B,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B;SACnF,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEtB,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B;YACpC,IAAI;YACJ,cAAc;YACd,gBAAgB;SACjB,CAAC;QAEF,IAAI,OAAO,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAChE,IAAI,OAAO,CAAC,cAAc;YAAE,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAe,iCAAiC,EAAE,IAAI,CAAC,CAAC;QAC1F,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,eAAe,QAAQ,CAAC,IAAI,sBAAsB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAgC;IACvF,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC9E,IAAI,OAAO,CAAC,cAAc;YAAE,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAE/D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAe,mCAAmC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACvG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,eAAe,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAA4C;IACnG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,+CAA+C,QAAQ,gDAAgD;gBAChH,OAAO,EAAE,KAAK;aACf,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,OAAO,CAAC,eAAe,QAAQ,WAAW,CAAC,CAAC;QAEpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,OAA2B;IAChF,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAuB,mCAAmC,QAAQ,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjH,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creds.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/creds.ts"],"names":[],"mappings":"AAYA,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Path: src/commands/dynamic-secrets/creds.ts
|
|
2
|
+
/**
|
|
3
|
+
* Credential generation commands for dynamic secrets
|
|
4
|
+
*/
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { client } from '../../lib/client.js';
|
|
7
|
+
import * as output from '../../lib/output.js';
|
|
8
|
+
import { formatDuration, formatDate } from './helpers.js';
|
|
9
|
+
export async function generateCredentials(roleId, options) {
|
|
10
|
+
const spinner = ora('Generating credentials...').start();
|
|
11
|
+
try {
|
|
12
|
+
const body = {};
|
|
13
|
+
if (options.ttl)
|
|
14
|
+
body.ttlSeconds = parseInt(options.ttl, 10);
|
|
15
|
+
const response = await client.post(`/v1/dynamic-secrets/roles/${roleId}/credentials`, body);
|
|
16
|
+
spinner.succeed('Credentials generated');
|
|
17
|
+
if (options.json) {
|
|
18
|
+
output.json(response);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
console.log('');
|
|
22
|
+
output.keyValue({
|
|
23
|
+
'Lease ID': response.leaseId,
|
|
24
|
+
'Username': response.username,
|
|
25
|
+
'Password': response.password,
|
|
26
|
+
'TTL': formatDuration(response.ttlSeconds),
|
|
27
|
+
'Expires At': formatDate(response.expiresAt),
|
|
28
|
+
'Max Expires At': formatDate(response.maxExpiresAt),
|
|
29
|
+
});
|
|
30
|
+
console.log('');
|
|
31
|
+
output.warn('The password is shown only once. Store it securely or use it immediately.');
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
spinner.fail('Failed to generate credentials');
|
|
35
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=creds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creds.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/creds.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C;;GAEG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAGzD;IACC,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG;YAAE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAsB,6BAA6B,MAAM,cAAc,EAAE,IAAI,CAAC,CAAC;QACjH,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAEzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,QAAQ,CAAC;YACd,UAAU,EAAE,QAAQ,CAAC,OAAO;YAC5B,UAAU,EAAE,QAAQ,CAAC,QAAQ;YAC7B,UAAU,EAAE,QAAQ,CAAC,QAAQ;YAC7B,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC1C,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5C,gBAAgB,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;SACpD,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function formatDuration(seconds: number): string;
|
|
2
|
+
export declare function formatStatus(status: string): string;
|
|
3
|
+
export declare function formatDate(dateStr: string | null): string;
|
|
4
|
+
export declare function formatTtl(seconds: number | null): string;
|
|
5
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/helpers.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGzD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGxD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Path: src/commands/dynamic-secrets/helpers.ts
|
|
2
|
+
/**
|
|
3
|
+
* Helper functions for dynamic secrets commands
|
|
4
|
+
*/
|
|
5
|
+
import * as output from '../../lib/output.js';
|
|
6
|
+
export function formatDuration(seconds) {
|
|
7
|
+
if (seconds < 60)
|
|
8
|
+
return `${seconds}s`;
|
|
9
|
+
if (seconds < 3600)
|
|
10
|
+
return `${Math.floor(seconds / 60)}m`;
|
|
11
|
+
if (seconds < 86400)
|
|
12
|
+
return `${Math.floor(seconds / 3600)}h`;
|
|
13
|
+
return `${Math.floor(seconds / 86400)}d`;
|
|
14
|
+
}
|
|
15
|
+
export function formatStatus(status) {
|
|
16
|
+
switch (status) {
|
|
17
|
+
case 'ACTIVE': return output.isPlainMode() ? 'ACTIVE' : '\x1b[32mACTIVE\x1b[0m';
|
|
18
|
+
case 'DISABLED': return output.isPlainMode() ? 'DISABLED' : '\x1b[33mDISABLED\x1b[0m';
|
|
19
|
+
case 'FAILED': return output.isPlainMode() ? 'FAILED' : '\x1b[31mFAILED\x1b[0m';
|
|
20
|
+
case 'TESTING': return output.isPlainMode() ? 'TESTING' : '\x1b[36mTESTING\x1b[0m';
|
|
21
|
+
case 'EXPIRED': return output.isPlainMode() ? 'EXPIRED' : '\x1b[33mEXPIRED\x1b[0m';
|
|
22
|
+
case 'REVOKED': return output.isPlainMode() ? 'REVOKED' : '\x1b[31mREVOKED\x1b[0m';
|
|
23
|
+
default: return status;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function formatDate(dateStr) {
|
|
27
|
+
if (!dateStr)
|
|
28
|
+
return '-';
|
|
29
|
+
return new Date(dateStr).toLocaleString();
|
|
30
|
+
}
|
|
31
|
+
export function formatTtl(seconds) {
|
|
32
|
+
if (seconds === null)
|
|
33
|
+
return 'inherit';
|
|
34
|
+
return formatDuration(seconds);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/helpers.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD;;GAEG;AAEH,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC;IAC1D,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAC7D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAChF,KAAK,UAAU,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC;QACtF,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAChF,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACnF,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACnF,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACnF,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAsB;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAsB;IAC9C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,cAAc,YAAY,CAAC;AAE3B,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwLrE"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// Path: src/commands/dynamic-secrets/index.ts
|
|
2
|
+
import { listConnections, getConnection, createConnection, updateConnection, deleteConnection, testConnection, } from './connection.js';
|
|
3
|
+
import { listRoles, getRole, createRole, updateRole, deleteRole, } from './role.js';
|
|
4
|
+
import { generateCredentials } from './creds.js';
|
|
5
|
+
import { listLeases, getLease, renewLease, revokeLease, } from './lease.js';
|
|
6
|
+
// Re-export types
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export function registerDynamicSecretsCommands(program) {
|
|
9
|
+
const dynasec = program
|
|
10
|
+
.command('dynasec')
|
|
11
|
+
.description('Dynamic secrets management (on-demand database credentials)')
|
|
12
|
+
.addHelpText('after', `
|
|
13
|
+
Examples:
|
|
14
|
+
# List all database connections
|
|
15
|
+
znvault dynasec connection list
|
|
16
|
+
|
|
17
|
+
# Create a PostgreSQL connection
|
|
18
|
+
znvault dynasec connection create --name my-pg --type postgresql \\
|
|
19
|
+
--connection-string "postgresql://admin:pass@localhost:5432/mydb"
|
|
20
|
+
|
|
21
|
+
# Create a role for the connection
|
|
22
|
+
znvault dynasec role create <connection-id> --name readonly \\
|
|
23
|
+
--creation-statements "CREATE ROLE \\"{{username}}\\" WITH LOGIN PASSWORD '{{password}}'" \\
|
|
24
|
+
--revocation-statements "DROP ROLE IF EXISTS \\"{{username}}\\""
|
|
25
|
+
|
|
26
|
+
# Generate credentials
|
|
27
|
+
znvault dynasec creds generate <role-id> --ttl 3600
|
|
28
|
+
|
|
29
|
+
# List active leases
|
|
30
|
+
znvault dynasec lease list --status active
|
|
31
|
+
|
|
32
|
+
# Revoke a lease
|
|
33
|
+
znvault dynasec lease revoke <lease-id> --reason "No longer needed"
|
|
34
|
+
`);
|
|
35
|
+
// -------------------------------------------------------------------------
|
|
36
|
+
// Connection Commands
|
|
37
|
+
// -------------------------------------------------------------------------
|
|
38
|
+
const connection = dynasec.command('connection').alias('conn').description('Manage database connections');
|
|
39
|
+
connection
|
|
40
|
+
.command('list')
|
|
41
|
+
.alias('ls')
|
|
42
|
+
.description('List all database connections')
|
|
43
|
+
.option('--json', 'Output as JSON')
|
|
44
|
+
.action(listConnections);
|
|
45
|
+
connection
|
|
46
|
+
.command('get <name-or-id>')
|
|
47
|
+
.description('Get connection details')
|
|
48
|
+
.option('--json', 'Output as JSON')
|
|
49
|
+
.action(getConnection);
|
|
50
|
+
connection
|
|
51
|
+
.command('create')
|
|
52
|
+
.description('Create a new database connection')
|
|
53
|
+
.option('--name <name>', 'Connection name')
|
|
54
|
+
.option('--type <type>', 'Database type (POSTGRESQL or MYSQL)')
|
|
55
|
+
.option('--connection-string <string>', 'Database connection string')
|
|
56
|
+
.option('--description <desc>', 'Connection description')
|
|
57
|
+
.option('--max-connections <n>', 'Maximum open connections')
|
|
58
|
+
.option('--timeout <seconds>', 'Connection timeout in seconds')
|
|
59
|
+
.option('--default-ttl <seconds>', 'Default credential TTL')
|
|
60
|
+
.option('--max-ttl <seconds>', 'Maximum credential TTL')
|
|
61
|
+
.option('--json', 'Output as JSON')
|
|
62
|
+
.action(createConnection);
|
|
63
|
+
connection
|
|
64
|
+
.command('update <name-or-id>')
|
|
65
|
+
.description('Update a database connection')
|
|
66
|
+
.option('--description <desc>', 'Connection description')
|
|
67
|
+
.option('--max-connections <n>', 'Maximum open connections')
|
|
68
|
+
.option('--timeout <seconds>', 'Connection timeout in seconds')
|
|
69
|
+
.option('--default-ttl <seconds>', 'Default credential TTL')
|
|
70
|
+
.option('--max-ttl <seconds>', 'Maximum credential TTL')
|
|
71
|
+
.option('--status <status>', 'Connection status (ACTIVE or DISABLED)')
|
|
72
|
+
.option('--json', 'Output as JSON')
|
|
73
|
+
.action(updateConnection);
|
|
74
|
+
connection
|
|
75
|
+
.command('delete <name-or-id>')
|
|
76
|
+
.alias('rm')
|
|
77
|
+
.description('Delete a database connection')
|
|
78
|
+
.option('--force', 'Skip confirmation')
|
|
79
|
+
.option('--json', 'Output as JSON')
|
|
80
|
+
.action(deleteConnection);
|
|
81
|
+
connection
|
|
82
|
+
.command('test <name-or-id>')
|
|
83
|
+
.description('Test a database connection')
|
|
84
|
+
.option('--json', 'Output as JSON')
|
|
85
|
+
.action(testConnection);
|
|
86
|
+
// -------------------------------------------------------------------------
|
|
87
|
+
// Role Commands
|
|
88
|
+
// -------------------------------------------------------------------------
|
|
89
|
+
const role = dynasec.command('role').description('Manage credential roles');
|
|
90
|
+
role
|
|
91
|
+
.command('list')
|
|
92
|
+
.alias('ls')
|
|
93
|
+
.description('List all roles')
|
|
94
|
+
.option('--connection <id>', 'Filter by connection ID')
|
|
95
|
+
.option('--json', 'Output as JSON')
|
|
96
|
+
.action(listRoles);
|
|
97
|
+
role
|
|
98
|
+
.command('get <role-id>')
|
|
99
|
+
.description('Get role details')
|
|
100
|
+
.option('--json', 'Output as JSON')
|
|
101
|
+
.action(getRole);
|
|
102
|
+
role
|
|
103
|
+
.command('create <connection-id>')
|
|
104
|
+
.description('Create a new role for a connection')
|
|
105
|
+
.option('--name <name>', 'Role name')
|
|
106
|
+
.option('--description <desc>', 'Role description')
|
|
107
|
+
.option('--creation-statements <sql>', 'SQL statements to create credentials (semicolon-separated)')
|
|
108
|
+
.option('--revocation-statements <sql>', 'SQL statements to revoke credentials (semicolon-separated)')
|
|
109
|
+
.option('--renew-statements <sql>', 'SQL statements to renew credentials (semicolon-separated)')
|
|
110
|
+
.option('--default-ttl <seconds>', 'Default credential TTL')
|
|
111
|
+
.option('--max-ttl <seconds>', 'Maximum credential TTL')
|
|
112
|
+
.option('--username-template <template>', 'Username template (e.g., v_{{role}}_{{random:8}})')
|
|
113
|
+
.option('--json', 'Output as JSON')
|
|
114
|
+
.action(createRole);
|
|
115
|
+
role
|
|
116
|
+
.command('update <role-id>')
|
|
117
|
+
.description('Update a role')
|
|
118
|
+
.option('--description <desc>', 'Role description')
|
|
119
|
+
.option('--default-ttl <seconds>', 'Default credential TTL')
|
|
120
|
+
.option('--max-ttl <seconds>', 'Maximum credential TTL')
|
|
121
|
+
.option('--enabled <bool>', 'Enable or disable role (true/false)')
|
|
122
|
+
.option('--json', 'Output as JSON')
|
|
123
|
+
.action(updateRole);
|
|
124
|
+
role
|
|
125
|
+
.command('delete <role-id>')
|
|
126
|
+
.alias('rm')
|
|
127
|
+
.description('Delete a role')
|
|
128
|
+
.option('--force', 'Skip confirmation')
|
|
129
|
+
.option('--json', 'Output as JSON')
|
|
130
|
+
.action(deleteRole);
|
|
131
|
+
// -------------------------------------------------------------------------
|
|
132
|
+
// Credentials Commands
|
|
133
|
+
// -------------------------------------------------------------------------
|
|
134
|
+
const creds = dynasec.command('creds').alias('credentials').description('Generate database credentials');
|
|
135
|
+
creds
|
|
136
|
+
.command('generate <role-id>')
|
|
137
|
+
.alias('gen')
|
|
138
|
+
.description('Generate new database credentials')
|
|
139
|
+
.option('--ttl <seconds>', 'Credential TTL in seconds')
|
|
140
|
+
.option('--json', 'Output as JSON')
|
|
141
|
+
.action(generateCredentials);
|
|
142
|
+
// -------------------------------------------------------------------------
|
|
143
|
+
// Lease Commands
|
|
144
|
+
// -------------------------------------------------------------------------
|
|
145
|
+
const lease = dynasec.command('lease').description('Manage credential leases');
|
|
146
|
+
lease
|
|
147
|
+
.command('list')
|
|
148
|
+
.alias('ls')
|
|
149
|
+
.description('List credential leases')
|
|
150
|
+
.option('--role <id>', 'Filter by role ID')
|
|
151
|
+
.option('--status <status>', 'Filter by status (ACTIVE, EXPIRED, REVOKED)')
|
|
152
|
+
.option('--json', 'Output as JSON')
|
|
153
|
+
.action(listLeases);
|
|
154
|
+
lease
|
|
155
|
+
.command('get <lease-id>')
|
|
156
|
+
.description('Get lease details')
|
|
157
|
+
.option('--json', 'Output as JSON')
|
|
158
|
+
.action(getLease);
|
|
159
|
+
lease
|
|
160
|
+
.command('renew <lease-id>')
|
|
161
|
+
.description('Renew a lease')
|
|
162
|
+
.option('--ttl <seconds>', 'New TTL in seconds')
|
|
163
|
+
.option('--json', 'Output as JSON')
|
|
164
|
+
.action(renewLease);
|
|
165
|
+
lease
|
|
166
|
+
.command('revoke <lease-id>')
|
|
167
|
+
.description('Revoke a lease (immediately revokes database credentials)')
|
|
168
|
+
.option('--reason <reason>', 'Revocation reason')
|
|
169
|
+
.option('--force', 'Skip confirmation')
|
|
170
|
+
.option('--json', 'Output as JSON')
|
|
171
|
+
.action(revokeLease);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LeaseListOptions, LeaseRevokeOptions } from './types.js';
|
|
2
|
+
export declare function listLeases(options: LeaseListOptions): Promise<void>;
|
|
3
|
+
export declare function getLease(leaseId: string, options: {
|
|
4
|
+
json?: boolean;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
export declare function renewLease(leaseId: string, options: {
|
|
7
|
+
ttl?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
export declare function revokeLease(leaseId: string, options: LeaseRevokeOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/lease.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAA0B,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG/F,wBAAsB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CzE;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1F;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B7F"}
|