@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.
Files changed (117) 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/config/index.d.ts +1 -1
  70. package/dist/lib/config/index.d.ts.map +1 -1
  71. package/dist/lib/config/index.js +1 -1
  72. package/dist/lib/config/index.js.map +1 -1
  73. package/dist/lib/config/store.d.ts +10 -0
  74. package/dist/lib/config/store.d.ts.map +1 -1
  75. package/dist/lib/config/store.js +49 -10
  76. package/dist/lib/config/store.js.map +1 -1
  77. package/dist/lib/db/audit.d.ts +16 -0
  78. package/dist/lib/db/audit.d.ts.map +1 -0
  79. package/dist/lib/db/audit.js +60 -0
  80. package/dist/lib/db/audit.js.map +1 -0
  81. package/dist/lib/db/client.d.ts +27 -0
  82. package/dist/lib/db/client.d.ts.map +1 -0
  83. package/dist/lib/db/client.js +70 -0
  84. package/dist/lib/db/client.js.map +1 -0
  85. package/dist/lib/db/emergency.d.ts +50 -0
  86. package/dist/lib/db/emergency.d.ts.map +1 -0
  87. package/dist/lib/db/emergency.js +180 -0
  88. package/dist/lib/db/emergency.js.map +1 -0
  89. package/dist/lib/db/health.d.ts +14 -0
  90. package/dist/lib/db/health.d.ts.map +1 -0
  91. package/dist/lib/db/health.js +177 -0
  92. package/dist/lib/db/health.js.map +1 -0
  93. package/dist/lib/db/index.d.ts +56 -0
  94. package/dist/lib/db/index.d.ts.map +1 -0
  95. package/dist/lib/db/index.js +107 -0
  96. package/dist/lib/db/index.js.map +1 -0
  97. package/dist/lib/db/lockdown.d.ts +15 -0
  98. package/dist/lib/db/lockdown.d.ts.map +1 -0
  99. package/dist/lib/db/lockdown.js +67 -0
  100. package/dist/lib/db/lockdown.js.map +1 -0
  101. package/dist/lib/db/tenants.d.ts +14 -0
  102. package/dist/lib/db/tenants.d.ts.map +1 -0
  103. package/dist/lib/db/tenants.js +88 -0
  104. package/dist/lib/db/tenants.js.map +1 -0
  105. package/dist/lib/db/types.d.ts +95 -0
  106. package/dist/lib/db/types.d.ts.map +1 -0
  107. package/dist/lib/db/types.js +3 -0
  108. package/dist/lib/db/types.js.map +1 -0
  109. package/dist/lib/db/users.d.ts +16 -0
  110. package/dist/lib/db/users.d.ts.map +1 -0
  111. package/dist/lib/db/users.js +95 -0
  112. package/dist/lib/db/users.js.map +1 -0
  113. package/dist/lib/db.d.ts +4 -112
  114. package/dist/lib/db.d.ts.map +1 -1
  115. package/dist/lib/db.js +4 -726
  116. package/dist/lib/db.js.map +1 -1
  117. package/package.json +1 -1
@@ -0,0 +1,137 @@
1
+ // Path: src/commands/dynamic-secrets/lease.ts
2
+ /**
3
+ * Lease 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, formatDuration } from './helpers.js';
11
+ export async function listLeases(options) {
12
+ const spinner = ora('Fetching leases...').start();
13
+ try {
14
+ const params = new URLSearchParams();
15
+ if (options.role)
16
+ params.append('roleId', options.role);
17
+ if (options.status)
18
+ params.append('status', options.status.toUpperCase());
19
+ const paramString = params.toString();
20
+ const url = `/v1/dynamic-secrets/leases${paramString ? '?' + paramString : ''}`;
21
+ const response = await client.get(url);
22
+ spinner.stop();
23
+ if (options.json) {
24
+ output.json(response);
25
+ return;
26
+ }
27
+ if (response.length === 0) {
28
+ output.info('No leases found.');
29
+ return;
30
+ }
31
+ const table = new Table({
32
+ head: ['Lease ID', 'Username', 'Role', 'Status', 'TTL Remaining', 'Renewals'],
33
+ style: { head: ['cyan'] },
34
+ });
35
+ for (const lease of response) {
36
+ table.push([
37
+ lease.id.substring(0, 12),
38
+ lease.username,
39
+ lease.roleName ?? lease.roleId.substring(0, 8),
40
+ formatStatus(lease.status),
41
+ lease.status === 'ACTIVE' ? formatDuration(lease.ttlRemaining) : '-',
42
+ String(lease.renewalCount),
43
+ ]);
44
+ }
45
+ console.log(table.toString());
46
+ output.info(`${response.length} lease(s) found`);
47
+ }
48
+ catch (err) {
49
+ spinner.fail('Failed to list leases');
50
+ output.error(err instanceof Error ? err.message : String(err));
51
+ process.exit(1);
52
+ }
53
+ }
54
+ export async function getLease(leaseId, options) {
55
+ const spinner = ora('Fetching lease...').start();
56
+ try {
57
+ const response = await client.get(`/v1/dynamic-secrets/leases/${leaseId}`);
58
+ spinner.stop();
59
+ if (options.json) {
60
+ output.json(response);
61
+ return;
62
+ }
63
+ output.keyValue({
64
+ 'Lease ID': response.id,
65
+ 'Username': response.username,
66
+ 'Role': response.roleName ?? response.roleId,
67
+ 'Connection': response.connectionName ?? response.connectionId,
68
+ 'Status': formatStatus(response.status),
69
+ 'TTL Remaining': response.status === 'ACTIVE' ? formatDuration(response.ttlRemaining) : '-',
70
+ 'Renewal Count': String(response.renewalCount),
71
+ 'Issued At': formatDate(response.issuedAt),
72
+ 'Expires At': formatDate(response.expiresAt),
73
+ 'Max Expires At': formatDate(response.maxExpiresAt),
74
+ 'Last Renewed': formatDate(response.lastRenewedAt),
75
+ 'Revoked At': formatDate(response.revokedAt),
76
+ 'Revoked By': response.revokedBy ?? '-',
77
+ 'Revoke Reason': response.revokeReason ?? '-',
78
+ });
79
+ }
80
+ catch (err) {
81
+ spinner.fail('Failed to get lease');
82
+ output.error(err instanceof Error ? err.message : String(err));
83
+ process.exit(1);
84
+ }
85
+ }
86
+ export async function renewLease(leaseId, options) {
87
+ const spinner = ora('Renewing lease...').start();
88
+ try {
89
+ const body = {};
90
+ if (options.ttl)
91
+ body.ttlSeconds = parseInt(options.ttl, 10);
92
+ const response = await client.post(`/v1/dynamic-secrets/leases/${leaseId}/renew`, body);
93
+ spinner.succeed('Lease renewed');
94
+ if (options.json) {
95
+ output.json(response);
96
+ }
97
+ else {
98
+ output.success(`Lease renewed. New TTL: ${formatDuration(response.ttlSeconds)}, Renewal count: ${response.renewalCount}`);
99
+ }
100
+ }
101
+ catch (err) {
102
+ spinner.fail('Failed to renew lease');
103
+ output.error(err instanceof Error ? err.message : String(err));
104
+ process.exit(1);
105
+ }
106
+ }
107
+ export async function revokeLease(leaseId, options) {
108
+ if (!options.force) {
109
+ const { confirm } = await inquirer.prompt([{
110
+ type: 'confirm',
111
+ name: 'confirm',
112
+ message: `Are you sure you want to revoke lease "${leaseId}"? This will immediately revoke the database credentials.`,
113
+ default: false,
114
+ }]);
115
+ if (!confirm) {
116
+ output.info('Cancelled');
117
+ return;
118
+ }
119
+ }
120
+ const spinner = ora('Revoking lease...').start();
121
+ try {
122
+ const body = {};
123
+ if (options.reason)
124
+ body.reason = options.reason;
125
+ await client.post(`/v1/dynamic-secrets/leases/${leaseId}/revoke`, body);
126
+ spinner.succeed('Lease revoked');
127
+ if (options.json) {
128
+ output.json({ success: true, leaseId });
129
+ }
130
+ }
131
+ catch (err) {
132
+ spinner.fail('Failed to revoke lease');
133
+ output.error(err instanceof Error ? err.message : String(err));
134
+ process.exit(1);
135
+ }
136
+ }
137
+ //# sourceMappingURL=lease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/lease.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { RoleCreateOptions, RoleUpdateOptions } from './types.js';
2
+ export declare function listRoles(options: {
3
+ connection?: string;
4
+ json?: boolean;
5
+ }): Promise<void>;
6
+ export declare function getRole(roleId: string, options: {
7
+ json?: boolean;
8
+ }): Promise<void>;
9
+ export declare function createRole(connectionId: string, options: RoleCreateOptions): Promise<void>;
10
+ export declare function updateRole(roleId: string, options: RoleUpdateOptions): Promise<void>;
11
+ export declare function deleteRole(roleId: string, options: {
12
+ force?: boolean;
13
+ json?: boolean;
14
+ }): Promise<void>;
15
+ //# sourceMappingURL=role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/role.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAU,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/E,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C/F;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BxF;AAED,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDhG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB1F;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5G"}
@@ -0,0 +1,184 @@
1
+ // Path: src/commands/dynamic-secrets/role.ts
2
+ /**
3
+ * Role 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 { formatDate, formatTtl } from './helpers.js';
11
+ export async function listRoles(options) {
12
+ const spinner = ora('Fetching roles...').start();
13
+ try {
14
+ let url = '/v1/dynamic-secrets/roles';
15
+ if (options.connection) {
16
+ url = `/v1/dynamic-secrets/connections/${options.connection}/roles`;
17
+ }
18
+ const response = await client.get(url);
19
+ spinner.stop();
20
+ if (options.json) {
21
+ output.json(response);
22
+ return;
23
+ }
24
+ if (response.length === 0) {
25
+ output.info('No roles found.');
26
+ return;
27
+ }
28
+ const table = new Table({
29
+ head: ['Name', 'Connection', 'Enabled', 'Default TTL', 'Max TTL', 'Active Leases'],
30
+ style: { head: ['cyan'] },
31
+ });
32
+ for (const role of response) {
33
+ table.push([
34
+ role.name,
35
+ role.connectionName ?? role.connectionId.substring(0, 8),
36
+ role.isEnabled ? 'Yes' : 'No',
37
+ formatTtl(role.defaultTtlSeconds),
38
+ formatTtl(role.maxTtlSeconds),
39
+ String(role.activeLeases ?? 0),
40
+ ]);
41
+ }
42
+ console.log(table.toString());
43
+ output.info(`${response.length} role(s) found`);
44
+ }
45
+ catch (err) {
46
+ spinner.fail('Failed to list roles');
47
+ output.error(err instanceof Error ? err.message : String(err));
48
+ process.exit(1);
49
+ }
50
+ }
51
+ export async function getRole(roleId, options) {
52
+ const spinner = ora('Fetching role...').start();
53
+ try {
54
+ const response = await client.get(`/v1/dynamic-secrets/roles/${roleId}`);
55
+ spinner.stop();
56
+ if (options.json) {
57
+ output.json(response);
58
+ return;
59
+ }
60
+ output.keyValue({
61
+ 'ID': response.id,
62
+ 'Name': response.name,
63
+ 'Description': response.description ?? '-',
64
+ 'Connection': response.connectionName ?? response.connectionId,
65
+ 'Enabled': response.isEnabled ? 'Yes' : 'No',
66
+ 'Username Template': response.usernameTemplate,
67
+ 'Default TTL': formatTtl(response.defaultTtlSeconds),
68
+ 'Max TTL': formatTtl(response.maxTtlSeconds),
69
+ 'Active Leases': String(response.activeLeases ?? 0),
70
+ 'Created': formatDate(response.createdAt),
71
+ 'Updated': formatDate(response.updatedAt),
72
+ });
73
+ }
74
+ catch (err) {
75
+ spinner.fail('Failed to get role');
76
+ output.error(err instanceof Error ? err.message : String(err));
77
+ process.exit(1);
78
+ }
79
+ }
80
+ export async function createRole(connectionId, options) {
81
+ // Interactive prompts if options not provided
82
+ const name = options.name ?? (await inquirer.prompt([{
83
+ type: 'input',
84
+ name: 'name',
85
+ message: 'Role name:',
86
+ validate: (input) => input.trim() ? true : 'Name is required',
87
+ }])).name;
88
+ const creationStatements = options.creationStatements?.split(';').filter(s => s.trim()) ?? (await inquirer.prompt([{
89
+ type: 'editor',
90
+ name: 'statements',
91
+ message: 'Creation SQL statements (one per line, use {{username}} and {{password}} placeholders):',
92
+ }])).statements.split('\n').filter((s) => s.trim());
93
+ const revocationStatements = options.revocationStatements?.split(';').filter(s => s.trim()) ?? (await inquirer.prompt([{
94
+ type: 'editor',
95
+ name: 'statements',
96
+ message: 'Revocation SQL statements (one per line, use {{username}} placeholder):',
97
+ }])).statements.split('\n').filter((s) => s.trim());
98
+ const spinner = ora('Creating role...').start();
99
+ try {
100
+ const body = {
101
+ name,
102
+ creationStatements,
103
+ revocationStatements,
104
+ };
105
+ if (options.description)
106
+ body.description = options.description;
107
+ if (options.renewStatements)
108
+ body.renewStatements = options.renewStatements.split(';').filter(s => s.trim());
109
+ if (options.defaultTtl)
110
+ body.defaultTtlSeconds = parseInt(options.defaultTtl, 10);
111
+ if (options.maxTtl)
112
+ body.maxTtlSeconds = parseInt(options.maxTtl, 10);
113
+ if (options.usernameTemplate)
114
+ body.usernameTemplate = options.usernameTemplate;
115
+ const response = await client.post(`/v1/dynamic-secrets/connections/${connectionId}/roles`, body);
116
+ spinner.succeed('Role created');
117
+ if (options.json) {
118
+ output.json(response);
119
+ }
120
+ else {
121
+ output.success(`Role "${response.name}" created with ID: ${response.id}`);
122
+ }
123
+ }
124
+ catch (err) {
125
+ spinner.fail('Failed to create role');
126
+ output.error(err instanceof Error ? err.message : String(err));
127
+ process.exit(1);
128
+ }
129
+ }
130
+ export async function updateRole(roleId, options) {
131
+ const spinner = ora('Updating role...').start();
132
+ try {
133
+ const body = {};
134
+ if (options.description !== undefined)
135
+ body.description = options.description;
136
+ if (options.defaultTtl)
137
+ body.defaultTtlSeconds = parseInt(options.defaultTtl, 10);
138
+ if (options.maxTtl)
139
+ body.maxTtlSeconds = parseInt(options.maxTtl, 10);
140
+ if (options.enabled !== undefined)
141
+ body.isEnabled = options.enabled === 'true';
142
+ const response = await client.patch(`/v1/dynamic-secrets/roles/${roleId}`, body);
143
+ spinner.succeed('Role updated');
144
+ if (options.json) {
145
+ output.json(response);
146
+ }
147
+ else {
148
+ output.success(`Role "${response.name}" updated`);
149
+ }
150
+ }
151
+ catch (err) {
152
+ spinner.fail('Failed to update role');
153
+ output.error(err instanceof Error ? err.message : String(err));
154
+ process.exit(1);
155
+ }
156
+ }
157
+ export async function deleteRole(roleId, options) {
158
+ if (!options.force) {
159
+ const { confirm } = await inquirer.prompt([{
160
+ type: 'confirm',
161
+ name: 'confirm',
162
+ message: `Are you sure you want to delete this role? Active leases will be revoked.`,
163
+ default: false,
164
+ }]);
165
+ if (!confirm) {
166
+ output.info('Cancelled');
167
+ return;
168
+ }
169
+ }
170
+ const spinner = ora('Deleting role...').start();
171
+ try {
172
+ await client.delete(`/v1/dynamic-secrets/roles/${roleId}`);
173
+ spinner.succeed('Role deleted');
174
+ if (options.json) {
175
+ output.json({ success: true, roleId });
176
+ }
177
+ }
178
+ catch (err) {
179
+ spinner.fail('Failed to delete role');
180
+ output.error(err instanceof Error ? err.message : String(err));
181
+ process.exit(1);
182
+ }
183
+ }
184
+ //# sourceMappingURL=role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/role.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C;;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,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgD;IAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,IAAI,GAAG,GAAG,2BAA2B,CAAC;QACtC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,GAAG,GAAG,mCAAmC,OAAO,CAAC,UAAU,QAAQ,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAW,GAAG,CAAC,CAAC;QACjD,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,iBAAiB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC;YAClF,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,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC7B,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACjC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC7B,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,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,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,OAAO,CAAC,MAAc,EAAE,OAA2B;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAS,6BAA6B,MAAM,EAAE,CAAC,CAAC;QACjF,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,YAAY,EAAE,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,YAAY;YAC9D,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAC5C,mBAAmB,EAAE,QAAQ,CAAC,gBAAgB;YAC9C,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpD,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5C,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,oBAAoB,CAAC,CAAC;QACnC,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,UAAU,CAAC,YAAoB,EAAE,OAA0B;IAC/E,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,YAAY;YACrB,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,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjH,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,yFAAyF;SACnG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrH,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,yEAAyE;SACnF,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B;YACpC,IAAI;YACJ,kBAAkB;YAClB,oBAAoB;SACrB,CAAC;QAEF,IAAI,OAAO,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAChE,IAAI,OAAO,CAAC,eAAe;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7G,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,gBAAgB;YAAE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAE/E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAS,mCAAmC,YAAY,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1G,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,SAAS,QAAQ,CAAC,IAAI,sBAAsB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,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,UAAU,CAAC,MAAc,EAAE,OAA0B;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,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,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,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC;QAE/E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAS,6BAA6B,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QACzF,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,SAAS,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,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,UAAU,CAAC,MAAc,EAAE,OAA4C;IAC3F,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,2EAA2E;gBACpF,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,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,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,125 @@
1
+ /**
2
+ * Type definitions for dynamic secrets commands
3
+ */
4
+ export interface DbConnection {
5
+ id: string;
6
+ tenantId: string;
7
+ name: string;
8
+ description: string | null;
9
+ connectionType: 'POSTGRESQL' | 'MYSQL';
10
+ maxOpenConnections: number;
11
+ connectionTimeoutSeconds: number;
12
+ status: 'ACTIVE' | 'DISABLED' | 'FAILED' | 'TESTING';
13
+ lastHealthCheck: string | null;
14
+ lastHealthCheckStatus: boolean | null;
15
+ defaultTtlSeconds: number;
16
+ maxTtlSeconds: number;
17
+ createdBy: string | null;
18
+ createdAt: string;
19
+ updatedAt: string;
20
+ roleCount?: number;
21
+ activeLeases?: number;
22
+ }
23
+ export interface DbRole {
24
+ id: string;
25
+ tenantId: string;
26
+ connectionId: string;
27
+ connectionName?: string;
28
+ name: string;
29
+ description: string | null;
30
+ defaultTtlSeconds: number | null;
31
+ maxTtlSeconds: number | null;
32
+ usernameTemplate: string;
33
+ isEnabled: boolean;
34
+ createdBy: string | null;
35
+ createdAt: string;
36
+ updatedAt: string;
37
+ activeLeases?: number;
38
+ }
39
+ export interface DbLease {
40
+ id: string;
41
+ tenantId: string;
42
+ connectionId: string;
43
+ connectionName?: string;
44
+ roleId: string;
45
+ roleName?: string;
46
+ username: string;
47
+ issuedAt: string;
48
+ expiresAt: string;
49
+ lastRenewedAt: string | null;
50
+ renewalCount: number;
51
+ maxExpiresAt: string;
52
+ status: 'ACTIVE' | 'EXPIRED' | 'REVOKED' | 'FAILED';
53
+ revokedAt: string | null;
54
+ revokedBy: string | null;
55
+ revokeReason: string | null;
56
+ ttlRemaining: number;
57
+ }
58
+ export interface GeneratedCredential {
59
+ leaseId: string;
60
+ username: string;
61
+ password: string;
62
+ expiresAt: string;
63
+ maxExpiresAt: string;
64
+ ttlSeconds: number;
65
+ renewalCount: number;
66
+ }
67
+ export interface TestConnectionResult {
68
+ success: boolean;
69
+ error?: string;
70
+ }
71
+ export interface RenewalResult {
72
+ leaseId: string;
73
+ expiresAt: string;
74
+ renewalCount: number;
75
+ ttlSeconds: number;
76
+ }
77
+ export interface ConnectionCreateOptions {
78
+ name?: string;
79
+ type?: string;
80
+ connectionString?: string;
81
+ description?: string;
82
+ maxConnections?: string;
83
+ timeout?: string;
84
+ defaultTtl?: string;
85
+ maxTtl?: string;
86
+ json?: boolean;
87
+ }
88
+ export interface ConnectionUpdateOptions {
89
+ description?: string;
90
+ maxConnections?: string;
91
+ timeout?: string;
92
+ defaultTtl?: string;
93
+ maxTtl?: string;
94
+ status?: string;
95
+ json?: boolean;
96
+ }
97
+ export interface RoleCreateOptions {
98
+ name?: string;
99
+ description?: string;
100
+ creationStatements?: string;
101
+ revocationStatements?: string;
102
+ renewStatements?: string;
103
+ defaultTtl?: string;
104
+ maxTtl?: string;
105
+ usernameTemplate?: string;
106
+ json?: boolean;
107
+ }
108
+ export interface RoleUpdateOptions {
109
+ description?: string;
110
+ defaultTtl?: string;
111
+ maxTtl?: string;
112
+ enabled?: string;
113
+ json?: boolean;
114
+ }
115
+ export interface LeaseListOptions {
116
+ role?: string;
117
+ status?: string;
118
+ json?: boolean;
119
+ }
120
+ export interface LeaseRevokeOptions {
121
+ reason?: string;
122
+ force?: boolean;
123
+ json?: boolean;
124
+ }
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // Path: src/commands/dynamic-secrets/types.ts
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/dynamic-secrets/types.ts"],"names":[],"mappings":"AAAA,8CAA8C"}
@@ -1,3 +1,7 @@
1
- import { type Command } from 'commander';
2
- export declare function registerDynamicSecretsCommands(program: Command): void;
1
+ /**
2
+ * Dynamic secrets command re-exports for backward compatibility.
3
+ * The actual implementation has been modularized into src/commands/dynamic-secrets/
4
+ */
5
+ export { registerDynamicSecretsCommands } from './dynamic-secrets/index.js';
6
+ export type { DbConnection, DbRole, DbLease, GeneratedCredential, TestConnectionResult, RenewalResult, } from './dynamic-secrets/types.js';
3
7
  //# sourceMappingURL=dynamic-secrets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-secrets.d.ts","sourceRoot":"","sources":["../../src/commands/dynamic-secrets.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA8vBzC,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwLrE"}
1
+ {"version":3,"file":"dynamic-secrets.d.ts","sourceRoot":"","sources":["../../src/commands/dynamic-secrets.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAG5E,YAAY,EACV,YAAY,EACZ,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,GACd,MAAM,4BAA4B,CAAC"}