@zincapp/znvault-cli 2.19.0 → 2.19.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.
Files changed (109) hide show
  1. package/dist/commands/dynamic-secrets/connection.d.ts +17 -0
  2. package/dist/commands/dynamic-secrets/connection.d.ts.map +1 -0
  3. package/dist/commands/dynamic-secrets/connection.js +217 -0
  4. package/dist/commands/dynamic-secrets/connection.js.map +1 -0
  5. package/dist/commands/dynamic-secrets/creds.d.ts +5 -0
  6. package/dist/commands/dynamic-secrets/creds.d.ts.map +1 -0
  7. package/dist/commands/dynamic-secrets/creds.js +39 -0
  8. package/dist/commands/dynamic-secrets/creds.js.map +1 -0
  9. package/dist/commands/dynamic-secrets/helpers.d.ts +5 -0
  10. package/dist/commands/dynamic-secrets/helpers.d.ts.map +1 -0
  11. package/dist/commands/dynamic-secrets/helpers.js +36 -0
  12. package/dist/commands/dynamic-secrets/helpers.js.map +1 -0
  13. package/dist/commands/dynamic-secrets/index.d.ts +7 -0
  14. package/dist/commands/dynamic-secrets/index.d.ts.map +1 -0
  15. package/dist/commands/dynamic-secrets/index.js +173 -0
  16. package/dist/commands/dynamic-secrets/index.js.map +1 -0
  17. package/dist/commands/dynamic-secrets/lease.d.ts +11 -0
  18. package/dist/commands/dynamic-secrets/lease.d.ts.map +1 -0
  19. package/dist/commands/dynamic-secrets/lease.js +137 -0
  20. package/dist/commands/dynamic-secrets/lease.js.map +1 -0
  21. package/dist/commands/dynamic-secrets/role.d.ts +15 -0
  22. package/dist/commands/dynamic-secrets/role.d.ts.map +1 -0
  23. package/dist/commands/dynamic-secrets/role.js +184 -0
  24. package/dist/commands/dynamic-secrets/role.js.map +1 -0
  25. package/dist/commands/dynamic-secrets/types.d.ts +125 -0
  26. package/dist/commands/dynamic-secrets/types.d.ts.map +1 -0
  27. package/dist/commands/dynamic-secrets/types.js +3 -0
  28. package/dist/commands/dynamic-secrets/types.js.map +1 -0
  29. package/dist/commands/dynamic-secrets.d.ts +6 -2
  30. package/dist/commands/dynamic-secrets.d.ts.map +1 -1
  31. package/dist/commands/dynamic-secrets.js +6 -754
  32. package/dist/commands/dynamic-secrets.js.map +1 -1
  33. package/dist/commands/policy/attachments.d.ts +9 -0
  34. package/dist/commands/policy/attachments.d.ts.map +1 -0
  35. package/dist/commands/policy/attachments.js +161 -0
  36. package/dist/commands/policy/attachments.js.map +1 -0
  37. package/dist/commands/policy/crud.d.ts +8 -0
  38. package/dist/commands/policy/crud.d.ts.map +1 -0
  39. package/dist/commands/policy/crud.js +232 -0
  40. package/dist/commands/policy/crud.js.map +1 -0
  41. package/dist/commands/policy/helpers.d.ts +13 -0
  42. package/dist/commands/policy/helpers.d.ts.map +1 -0
  43. package/dist/commands/policy/helpers.js +61 -0
  44. package/dist/commands/policy/helpers.js.map +1 -0
  45. package/dist/commands/policy/index.d.ts +7 -0
  46. package/dist/commands/policy/index.d.ts.map +1 -0
  47. package/dist/commands/policy/index.js +160 -0
  48. package/dist/commands/policy/index.js.map +1 -0
  49. package/dist/commands/policy/io.d.ts +4 -0
  50. package/dist/commands/policy/io.d.ts.map +1 -0
  51. package/dist/commands/policy/io.js +65 -0
  52. package/dist/commands/policy/io.js.map +1 -0
  53. package/dist/commands/policy/list.d.ts +4 -0
  54. package/dist/commands/policy/list.d.ts.map +1 -0
  55. package/dist/commands/policy/list.js +99 -0
  56. package/dist/commands/policy/list.js.map +1 -0
  57. package/dist/commands/policy/test.d.ts +3 -0
  58. package/dist/commands/policy/test.d.ts.map +1 -0
  59. package/dist/commands/policy/test.js +58 -0
  60. package/dist/commands/policy/test.js.map +1 -0
  61. package/dist/commands/policy/types.d.ts +84 -0
  62. package/dist/commands/policy/types.d.ts.map +1 -0
  63. package/dist/commands/policy/types.js +3 -0
  64. package/dist/commands/policy/types.js.map +1 -0
  65. package/dist/commands/policy.d.ts +6 -2
  66. package/dist/commands/policy.d.ts.map +1 -1
  67. package/dist/commands/policy.js +4 -770
  68. package/dist/commands/policy.js.map +1 -1
  69. package/dist/lib/db/audit.d.ts +16 -0
  70. package/dist/lib/db/audit.d.ts.map +1 -0
  71. package/dist/lib/db/audit.js +60 -0
  72. package/dist/lib/db/audit.js.map +1 -0
  73. package/dist/lib/db/client.d.ts +27 -0
  74. package/dist/lib/db/client.d.ts.map +1 -0
  75. package/dist/lib/db/client.js +70 -0
  76. package/dist/lib/db/client.js.map +1 -0
  77. package/dist/lib/db/emergency.d.ts +50 -0
  78. package/dist/lib/db/emergency.d.ts.map +1 -0
  79. package/dist/lib/db/emergency.js +180 -0
  80. package/dist/lib/db/emergency.js.map +1 -0
  81. package/dist/lib/db/health.d.ts +14 -0
  82. package/dist/lib/db/health.d.ts.map +1 -0
  83. package/dist/lib/db/health.js +177 -0
  84. package/dist/lib/db/health.js.map +1 -0
  85. package/dist/lib/db/index.d.ts +56 -0
  86. package/dist/lib/db/index.d.ts.map +1 -0
  87. package/dist/lib/db/index.js +107 -0
  88. package/dist/lib/db/index.js.map +1 -0
  89. package/dist/lib/db/lockdown.d.ts +15 -0
  90. package/dist/lib/db/lockdown.d.ts.map +1 -0
  91. package/dist/lib/db/lockdown.js +67 -0
  92. package/dist/lib/db/lockdown.js.map +1 -0
  93. package/dist/lib/db/tenants.d.ts +14 -0
  94. package/dist/lib/db/tenants.d.ts.map +1 -0
  95. package/dist/lib/db/tenants.js +88 -0
  96. package/dist/lib/db/tenants.js.map +1 -0
  97. package/dist/lib/db/types.d.ts +95 -0
  98. package/dist/lib/db/types.d.ts.map +1 -0
  99. package/dist/lib/db/types.js +3 -0
  100. package/dist/lib/db/types.js.map +1 -0
  101. package/dist/lib/db/users.d.ts +16 -0
  102. package/dist/lib/db/users.d.ts.map +1 -0
  103. package/dist/lib/db/users.js +95 -0
  104. package/dist/lib/db/users.js.map +1 -0
  105. package/dist/lib/db.d.ts +4 -112
  106. package/dist/lib/db.d.ts.map +1 -1
  107. package/dist/lib/db.js +4 -726
  108. package/dist/lib/db.js.map +1 -1
  109. 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":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function generateCredentials(roleId: string, options: {
2
+ ttl?: string;
3
+ json?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=creds.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Dynamic secrets command registration
3
+ */
4
+ import { type Command } from 'commander';
5
+ export * from './types.js';
6
+ export declare function registerDynamicSecretsCommands(program: Command): void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}