@zincapp/znvault-cli 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +84 -0
  2. package/dist/commands/agent.d.ts +1 -1
  3. package/dist/commands/agent.d.ts.map +1 -1
  4. package/dist/commands/agent.js +71 -71
  5. package/dist/commands/agent.js.map +1 -1
  6. package/dist/commands/apikey.d.ts +1 -1
  7. package/dist/commands/apikey.d.ts.map +1 -1
  8. package/dist/commands/apikey.js +47 -85
  9. package/dist/commands/apikey.js.map +1 -1
  10. package/dist/commands/audit.d.ts +1 -1
  11. package/dist/commands/audit.d.ts.map +1 -1
  12. package/dist/commands/audit.js +2 -2
  13. package/dist/commands/audit.js.map +1 -1
  14. package/dist/commands/auth.d.ts +1 -1
  15. package/dist/commands/auth.d.ts.map +1 -1
  16. package/dist/commands/auth.js +18 -14
  17. package/dist/commands/auth.js.map +1 -1
  18. package/dist/commands/backup.d.ts +3 -0
  19. package/dist/commands/backup.d.ts.map +1 -0
  20. package/dist/commands/backup.js +393 -0
  21. package/dist/commands/backup.js.map +1 -0
  22. package/dist/commands/cert.d.ts +1 -1
  23. package/dist/commands/cert.d.ts.map +1 -1
  24. package/dist/commands/cert.js +2 -2
  25. package/dist/commands/cert.js.map +1 -1
  26. package/dist/commands/cluster.d.ts +1 -1
  27. package/dist/commands/cluster.d.ts.map +1 -1
  28. package/dist/commands/cluster.js +2 -2
  29. package/dist/commands/cluster.js.map +1 -1
  30. package/dist/commands/emergency.d.ts +1 -1
  31. package/dist/commands/emergency.d.ts.map +1 -1
  32. package/dist/commands/emergency.js +19 -18
  33. package/dist/commands/emergency.js.map +1 -1
  34. package/dist/commands/health.d.ts +1 -1
  35. package/dist/commands/health.d.ts.map +1 -1
  36. package/dist/commands/health.js +75 -77
  37. package/dist/commands/health.js.map +1 -1
  38. package/dist/commands/kms.d.ts +3 -0
  39. package/dist/commands/kms.d.ts.map +1 -0
  40. package/dist/commands/kms.js +536 -0
  41. package/dist/commands/kms.js.map +1 -0
  42. package/dist/commands/lockdown.d.ts +1 -1
  43. package/dist/commands/lockdown.d.ts.map +1 -1
  44. package/dist/commands/lockdown.js +6 -6
  45. package/dist/commands/lockdown.js.map +1 -1
  46. package/dist/commands/notification.d.ts +3 -0
  47. package/dist/commands/notification.d.ts.map +1 -0
  48. package/dist/commands/notification.js +394 -0
  49. package/dist/commands/notification.js.map +1 -0
  50. package/dist/commands/permissions.d.ts +1 -1
  51. package/dist/commands/permissions.d.ts.map +1 -1
  52. package/dist/commands/permissions.js +7 -7
  53. package/dist/commands/permissions.js.map +1 -1
  54. package/dist/commands/policy.d.ts +1 -1
  55. package/dist/commands/policy.d.ts.map +1 -1
  56. package/dist/commands/policy.js +14 -14
  57. package/dist/commands/policy.js.map +1 -1
  58. package/dist/commands/role.d.ts +3 -0
  59. package/dist/commands/role.d.ts.map +1 -0
  60. package/dist/commands/role.js +400 -0
  61. package/dist/commands/role.js.map +1 -0
  62. package/dist/commands/secret.d.ts +3 -0
  63. package/dist/commands/secret.d.ts.map +1 -0
  64. package/dist/commands/secret.js +694 -0
  65. package/dist/commands/secret.js.map +1 -0
  66. package/dist/commands/self-update.d.ts +8 -0
  67. package/dist/commands/self-update.d.ts.map +1 -0
  68. package/dist/commands/self-update.js +114 -0
  69. package/dist/commands/self-update.js.map +1 -0
  70. package/dist/commands/superadmin.d.ts +1 -1
  71. package/dist/commands/superadmin.d.ts.map +1 -1
  72. package/dist/commands/superadmin.js +3 -3
  73. package/dist/commands/superadmin.js.map +1 -1
  74. package/dist/commands/tenant.d.ts +1 -1
  75. package/dist/commands/tenant.d.ts.map +1 -1
  76. package/dist/commands/tenant.js +16 -18
  77. package/dist/commands/tenant.js.map +1 -1
  78. package/dist/commands/tui.d.ts +3 -0
  79. package/dist/commands/tui.d.ts.map +1 -0
  80. package/dist/commands/tui.js +66 -0
  81. package/dist/commands/tui.js.map +1 -0
  82. package/dist/commands/update.d.ts +1 -1
  83. package/dist/commands/update.d.ts.map +1 -1
  84. package/dist/commands/update.js +8 -8
  85. package/dist/commands/update.js.map +1 -1
  86. package/dist/commands/user.d.ts +1 -1
  87. package/dist/commands/user.d.ts.map +1 -1
  88. package/dist/commands/user.js +7 -7
  89. package/dist/commands/user.js.map +1 -1
  90. package/dist/index.js +33 -3
  91. package/dist/index.js.map +1 -1
  92. package/dist/lib/cli-update.d.ts +43 -0
  93. package/dist/lib/cli-update.d.ts.map +1 -0
  94. package/dist/lib/cli-update.js +257 -0
  95. package/dist/lib/cli-update.js.map +1 -0
  96. package/dist/lib/client.d.ts +48 -61
  97. package/dist/lib/client.d.ts.map +1 -1
  98. package/dist/lib/client.js +57 -30
  99. package/dist/lib/client.js.map +1 -1
  100. package/dist/lib/config.d.ts.map +1 -1
  101. package/dist/lib/config.js +42 -37
  102. package/dist/lib/config.js.map +1 -1
  103. package/dist/lib/db.d.ts.map +1 -1
  104. package/dist/lib/db.js +23 -23
  105. package/dist/lib/db.js.map +1 -1
  106. package/dist/lib/local.d.ts.map +1 -1
  107. package/dist/lib/local.js +9 -9
  108. package/dist/lib/local.js.map +1 -1
  109. package/dist/lib/mode.d.ts +1 -1
  110. package/dist/lib/mode.d.ts.map +1 -1
  111. package/dist/lib/mode.js +4 -7
  112. package/dist/lib/mode.js.map +1 -1
  113. package/dist/lib/output-mode.d.ts +31 -0
  114. package/dist/lib/output-mode.d.ts.map +1 -0
  115. package/dist/lib/output-mode.js +81 -0
  116. package/dist/lib/output-mode.js.map +1 -0
  117. package/dist/lib/output.d.ts +55 -5
  118. package/dist/lib/output.d.ts.map +1 -1
  119. package/dist/lib/output.js +279 -30
  120. package/dist/lib/output.js.map +1 -1
  121. package/dist/lib/prompts.d.ts +2 -2
  122. package/dist/lib/prompts.d.ts.map +1 -1
  123. package/dist/lib/prompts.js.map +1 -1
  124. package/dist/lib/visual.d.ts +71 -0
  125. package/dist/lib/visual.d.ts.map +1 -0
  126. package/dist/lib/visual.js +266 -0
  127. package/dist/lib/visual.js.map +1 -0
  128. package/dist/services/auto-update-daemon.d.ts.map +1 -1
  129. package/dist/services/auto-update-daemon.js +39 -19
  130. package/dist/services/auto-update-daemon.js.map +1 -1
  131. package/dist/services/signature-verifier.d.ts +0 -1
  132. package/dist/services/signature-verifier.d.ts.map +1 -1
  133. package/dist/services/signature-verifier.js +4 -8
  134. package/dist/services/signature-verifier.js.map +1 -1
  135. package/dist/services/update-checker.d.ts.map +1 -1
  136. package/dist/services/update-checker.js +3 -3
  137. package/dist/services/update-checker.js.map +1 -1
  138. package/dist/services/update-installer.d.ts.map +1 -1
  139. package/dist/services/update-installer.js +5 -5
  140. package/dist/services/update-installer.js.map +1 -1
  141. package/dist/tui/App.d.ts +9 -0
  142. package/dist/tui/App.d.ts.map +1 -0
  143. package/dist/tui/App.js +63 -0
  144. package/dist/tui/App.js.map +1 -0
  145. package/dist/tui/components/Header.d.ts +9 -0
  146. package/dist/tui/components/Header.d.ts.map +1 -0
  147. package/dist/tui/components/Header.js +9 -0
  148. package/dist/tui/components/Header.js.map +1 -0
  149. package/dist/tui/components/List.d.ts +61 -0
  150. package/dist/tui/components/List.d.ts.map +1 -0
  151. package/dist/tui/components/List.js +85 -0
  152. package/dist/tui/components/List.js.map +1 -0
  153. package/dist/tui/components/StatusCard.d.ts +29 -0
  154. package/dist/tui/components/StatusCard.d.ts.map +1 -0
  155. package/dist/tui/components/StatusCard.js +46 -0
  156. package/dist/tui/components/StatusCard.js.map +1 -0
  157. package/dist/tui/components/Table.d.ts +29 -0
  158. package/dist/tui/components/Table.d.ts.map +1 -0
  159. package/dist/tui/components/Table.js +131 -0
  160. package/dist/tui/components/Table.js.map +1 -0
  161. package/dist/tui/components/UpdateBanner.d.ts +9 -0
  162. package/dist/tui/components/UpdateBanner.d.ts.map +1 -0
  163. package/dist/tui/components/UpdateBanner.js +6 -0
  164. package/dist/tui/components/UpdateBanner.js.map +1 -0
  165. package/dist/tui/hooks/useApi.d.ts +75 -0
  166. package/dist/tui/hooks/useApi.d.ts.map +1 -0
  167. package/dist/tui/hooks/useApi.js +79 -0
  168. package/dist/tui/hooks/useApi.js.map +1 -0
  169. package/dist/tui/screens/Dashboard.d.ts +9 -0
  170. package/dist/tui/screens/Dashboard.d.ts.map +1 -0
  171. package/dist/tui/screens/Dashboard.js +66 -0
  172. package/dist/tui/screens/Dashboard.js.map +1 -0
  173. package/dist/types/index.d.ts +5 -5
  174. package/dist/types/index.d.ts.map +1 -1
  175. package/dist/utils/platform.js +1 -1
  176. package/package.json +29 -13
@@ -0,0 +1,394 @@
1
+ // Path: znvault-cli/src/commands/notification.ts
2
+ // CLI commands for notification (email) configuration
3
+ import ora from 'ora';
4
+ import Table from 'cli-table3';
5
+ import inquirer from 'inquirer';
6
+ import { client } from '../lib/client.js';
7
+ import * as output from '../lib/output.js';
8
+ // ============================================================================
9
+ // Command Implementations
10
+ // ============================================================================
11
+ async function showStatus(options) {
12
+ const spinner = ora('Checking notification status...').start();
13
+ try {
14
+ const status = await client.get('/v1/admin/notifications/status');
15
+ spinner.stop();
16
+ if (options.json) {
17
+ output.json(status);
18
+ return;
19
+ }
20
+ if (status.configured) {
21
+ output.success('Email notifications are configured');
22
+ }
23
+ else {
24
+ output.warn('Email notifications are NOT configured');
25
+ }
26
+ console.log(` ${status.message}`);
27
+ }
28
+ catch (error) {
29
+ spinner.fail('Failed to get status');
30
+ output.error(error.message);
31
+ process.exit(1);
32
+ }
33
+ }
34
+ async function showConfig(options) {
35
+ const spinner = ora('Fetching SMTP configuration...').start();
36
+ try {
37
+ const response = await client.get('/v1/admin/notifications/config');
38
+ spinner.stop();
39
+ if (options.json) {
40
+ output.json(response.config);
41
+ return;
42
+ }
43
+ const config = response.config;
44
+ const table = new Table({
45
+ colWidths: [20, 50],
46
+ });
47
+ table.push(['Host', config.host], ['Port', String(config.port)], ['Secure (TLS)', config.secure ? 'Yes' : 'No'], ['Username', config.auth.user], ['Password', config.auth.pass], // Already redacted by server
48
+ ['From Address', config.from], ['From Name', config.fromName || '-']);
49
+ console.log('\nSMTP Configuration:');
50
+ console.log(table.toString());
51
+ }
52
+ catch (error) {
53
+ spinner.fail('Failed to get configuration');
54
+ if (error.message.includes('404')) {
55
+ output.info('No SMTP configuration found. Use "znvault notification setup" to configure.');
56
+ }
57
+ else {
58
+ output.error(error.message);
59
+ }
60
+ process.exit(1);
61
+ }
62
+ }
63
+ async function setupConfig(options) {
64
+ let host = options.host;
65
+ let port = parseInt(options.port, 10);
66
+ let secure = options.secure ?? true;
67
+ let user = options.user;
68
+ let password = options.password;
69
+ let from = options.from;
70
+ let fromName = options.fromName;
71
+ // Interactive mode if not all required options provided
72
+ if (!host || !port || !user || !from) {
73
+ output.info('Interactive SMTP configuration setup\n');
74
+ const answers = await inquirer.prompt([
75
+ {
76
+ type: 'input',
77
+ name: 'host',
78
+ message: 'SMTP Host:',
79
+ default: host || 'smtp.gmail.com',
80
+ validate: (input) => input.length > 0 || 'Host is required',
81
+ },
82
+ {
83
+ type: 'number',
84
+ name: 'port',
85
+ message: 'SMTP Port:',
86
+ default: port || 587,
87
+ validate: (input) => (input > 0 && input < 65536) || 'Port must be between 1 and 65535',
88
+ },
89
+ {
90
+ type: 'confirm',
91
+ name: 'secure',
92
+ message: 'Use TLS/SSL?',
93
+ default: secure,
94
+ },
95
+ {
96
+ type: 'input',
97
+ name: 'user',
98
+ message: 'SMTP Username:',
99
+ default: user,
100
+ validate: (input) => input.length > 0 || 'Username is required',
101
+ },
102
+ {
103
+ type: 'password',
104
+ name: 'password',
105
+ message: 'SMTP Password:',
106
+ mask: '*',
107
+ validate: (input) => input.length > 0 || 'Password is required',
108
+ },
109
+ {
110
+ type: 'input',
111
+ name: 'from',
112
+ message: 'From Address (e.g., noreply@example.com):',
113
+ default: from,
114
+ validate: (input) => input.includes('@') || 'Must be a valid email address',
115
+ },
116
+ {
117
+ type: 'input',
118
+ name: 'fromName',
119
+ message: 'From Name (optional):',
120
+ default: fromName || 'ZN-Vault',
121
+ },
122
+ ]);
123
+ host = answers.host;
124
+ port = answers.port;
125
+ secure = answers.secure;
126
+ user = answers.user;
127
+ password = answers.password;
128
+ from = answers.from;
129
+ fromName = answers.fromName;
130
+ }
131
+ if (!password) {
132
+ const { pwd } = await inquirer.prompt([
133
+ {
134
+ type: 'password',
135
+ name: 'pwd',
136
+ message: 'SMTP Password:',
137
+ mask: '*',
138
+ validate: (input) => input.length > 0 || 'Password is required',
139
+ },
140
+ ]);
141
+ password = pwd;
142
+ }
143
+ const spinner = ora('Saving SMTP configuration...').start();
144
+ try {
145
+ const body = {
146
+ host,
147
+ port,
148
+ secure,
149
+ auth: {
150
+ user,
151
+ pass: password,
152
+ },
153
+ from,
154
+ fromName: fromName || undefined,
155
+ };
156
+ const result = await client.patch('/v1/admin/notifications/config', body);
157
+ spinner.stop();
158
+ if (options.json) {
159
+ output.json(result);
160
+ return;
161
+ }
162
+ output.success('SMTP configuration saved successfully!');
163
+ // Offer to test
164
+ const { testNow } = await inquirer.prompt([
165
+ {
166
+ type: 'confirm',
167
+ name: 'testNow',
168
+ message: 'Send a test email now?',
169
+ default: true,
170
+ },
171
+ ]);
172
+ if (testNow) {
173
+ await testEmail({});
174
+ }
175
+ }
176
+ catch (error) {
177
+ spinner.fail('Failed to save configuration');
178
+ output.error(error.message);
179
+ process.exit(1);
180
+ }
181
+ }
182
+ async function testEmail(options) {
183
+ const spinner = ora('Sending test email...').start();
184
+ try {
185
+ const body = {};
186
+ if (options.email)
187
+ body.to = options.email;
188
+ const result = await client.post('/v1/admin/notifications/test', body);
189
+ spinner.stop();
190
+ output.success(result.message);
191
+ }
192
+ catch (error) {
193
+ spinner.fail('Failed to send test email');
194
+ output.error(error.message);
195
+ process.exit(1);
196
+ }
197
+ }
198
+ async function removeConfig() {
199
+ const { confirm } = await inquirer.prompt([
200
+ {
201
+ type: 'confirm',
202
+ name: 'confirm',
203
+ message: 'Remove SMTP configuration and disable email notifications?',
204
+ default: false,
205
+ },
206
+ ]);
207
+ if (!confirm) {
208
+ output.info('Cancelled');
209
+ return;
210
+ }
211
+ const spinner = ora('Removing SMTP configuration...').start();
212
+ try {
213
+ const result = await client.delete('/v1/admin/notifications/config');
214
+ spinner.stop();
215
+ output.success(result.message);
216
+ }
217
+ catch (error) {
218
+ spinner.fail('Failed to remove configuration');
219
+ output.error(error.message);
220
+ process.exit(1);
221
+ }
222
+ }
223
+ async function showRecipients(options) {
224
+ const spinner = ora('Fetching recipients...').start();
225
+ try {
226
+ const response = await client.get('/v1/admin/notifications/recipients');
227
+ spinner.stop();
228
+ if (options.json) {
229
+ output.json(response);
230
+ return;
231
+ }
232
+ if (!response.recipients || response.recipients.length === 0) {
233
+ output.info('No notification recipients configured');
234
+ return;
235
+ }
236
+ const emails = response.recipients.split(',').map(e => e.trim()).filter(e => e);
237
+ console.log('\nNotification Recipients:');
238
+ for (const email of emails) {
239
+ console.log(` - ${email}`);
240
+ }
241
+ console.log(`\nTotal: ${emails.length} recipient(s)`);
242
+ }
243
+ catch (error) {
244
+ spinner.fail('Failed to get recipients');
245
+ output.error(error.message);
246
+ process.exit(1);
247
+ }
248
+ }
249
+ async function setRecipients(emails) {
250
+ // Validate emails
251
+ const emailList = emails.split(',').map(e => e.trim()).filter(e => e);
252
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
253
+ for (const email of emailList) {
254
+ if (!emailRegex.test(email)) {
255
+ output.error(`Invalid email format: ${email}`);
256
+ process.exit(1);
257
+ }
258
+ }
259
+ const spinner = ora('Updating recipients...').start();
260
+ try {
261
+ const result = await client.patch('/v1/admin/notifications/recipients', {
262
+ recipients: emails,
263
+ });
264
+ spinner.stop();
265
+ output.success(result.message);
266
+ console.log(` Recipients: ${emailList.join(', ')}`);
267
+ }
268
+ catch (error) {
269
+ spinner.fail('Failed to update recipients');
270
+ output.error(error.message);
271
+ process.exit(1);
272
+ }
273
+ }
274
+ async function addRecipient(email) {
275
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
276
+ if (!emailRegex.test(email)) {
277
+ output.error(`Invalid email format: ${email}`);
278
+ process.exit(1);
279
+ }
280
+ const spinner = ora('Adding recipient...').start();
281
+ try {
282
+ // Get current recipients
283
+ const response = await client.get('/v1/admin/notifications/recipients');
284
+ const currentEmails = response.recipients ? response.recipients.split(',').map(e => e.trim()).filter(e => e) : [];
285
+ if (currentEmails.includes(email)) {
286
+ spinner.stop();
287
+ output.info(`${email} is already a recipient`);
288
+ return;
289
+ }
290
+ currentEmails.push(email);
291
+ await client.patch('/v1/admin/notifications/recipients', {
292
+ recipients: currentEmails.join(','),
293
+ });
294
+ spinner.stop();
295
+ output.success(`Added ${email} to notification recipients`);
296
+ }
297
+ catch (error) {
298
+ spinner.fail('Failed to add recipient');
299
+ output.error(error.message);
300
+ process.exit(1);
301
+ }
302
+ }
303
+ async function removeRecipient(email) {
304
+ const spinner = ora('Removing recipient...').start();
305
+ try {
306
+ // Get current recipients
307
+ const response = await client.get('/v1/admin/notifications/recipients');
308
+ const currentEmails = response.recipients ? response.recipients.split(',').map(e => e.trim()).filter(e => e) : [];
309
+ const index = currentEmails.indexOf(email);
310
+ if (index === -1) {
311
+ spinner.stop();
312
+ output.info(`${email} is not in the recipients list`);
313
+ return;
314
+ }
315
+ currentEmails.splice(index, 1);
316
+ await client.patch('/v1/admin/notifications/recipients', {
317
+ recipients: currentEmails.join(','),
318
+ });
319
+ spinner.stop();
320
+ output.success(`Removed ${email} from notification recipients`);
321
+ }
322
+ catch (error) {
323
+ spinner.fail('Failed to remove recipient');
324
+ output.error(error.message);
325
+ process.exit(1);
326
+ }
327
+ }
328
+ // ============================================================================
329
+ // Command Registration
330
+ // ============================================================================
331
+ export function registerNotificationCommands(program) {
332
+ const notification = program
333
+ .command('notification')
334
+ .description('Email notification configuration');
335
+ // Show status
336
+ notification
337
+ .command('status')
338
+ .description('Check if email notifications are configured')
339
+ .option('--json', 'Output as JSON')
340
+ .action(showStatus);
341
+ // Show config
342
+ notification
343
+ .command('config')
344
+ .description('Show current SMTP configuration')
345
+ .option('--json', 'Output as JSON')
346
+ .action(showConfig);
347
+ // Setup/update config
348
+ notification
349
+ .command('setup')
350
+ .description('Configure SMTP settings (interactive)')
351
+ .option('--host <host>', 'SMTP host')
352
+ .option('--port <port>', 'SMTP port')
353
+ .option('--secure', 'Use TLS/SSL')
354
+ .option('--no-secure', 'Do not use TLS/SSL')
355
+ .option('--user <user>', 'SMTP username')
356
+ .option('--password <pass>', 'SMTP password')
357
+ .option('--from <email>', 'From email address')
358
+ .option('--from-name <name>', 'From display name')
359
+ .option('--json', 'Output as JSON')
360
+ .action(setupConfig);
361
+ // Test email
362
+ notification
363
+ .command('test')
364
+ .description('Send a test email')
365
+ .option('--email <address>', 'Send test to specific address')
366
+ .action(testEmail);
367
+ // Remove config
368
+ notification
369
+ .command('remove')
370
+ .description('Remove SMTP configuration (disable notifications)')
371
+ .action(removeConfig);
372
+ // Show recipients
373
+ notification
374
+ .command('recipients')
375
+ .description('Show notification recipients')
376
+ .option('--json', 'Output as JSON')
377
+ .action(showRecipients);
378
+ // Set recipients
379
+ notification
380
+ .command('set-recipients <emails>')
381
+ .description('Set notification recipients (comma-separated)')
382
+ .action(setRecipients);
383
+ // Add recipient
384
+ notification
385
+ .command('add-recipient <email>')
386
+ .description('Add a notification recipient')
387
+ .action(addRecipient);
388
+ // Remove recipient
389
+ notification
390
+ .command('remove-recipient <email>')
391
+ .description('Remove a notification recipient')
392
+ .action(removeRecipient);
393
+ }
394
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/commands/notification.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
1
+ import { type Command } from 'commander';
2
2
  export declare function registerPermissionsCommands(program: Command): void;
3
3
  //# sourceMappingURL=permissions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmLlE"}
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmLlE"}
@@ -30,16 +30,16 @@ export function registerPermissionsCommands(program) {
30
30
  // Group by category for display
31
31
  const byCategory = new Map();
32
32
  for (const perm of result.permissions) {
33
- const list = byCategory.get(perm.category) || [];
33
+ const list = byCategory.get(perm.category) ?? [];
34
34
  list.push(perm);
35
35
  byCategory.set(perm.category, list);
36
36
  }
37
37
  // Display sorted by category
38
38
  const sortedCategories = [...byCategory.keys()].sort();
39
39
  for (const category of sortedCategories) {
40
- const perms = byCategory.get(category) || [];
40
+ const categoryPerms = byCategory.get(category) ?? [];
41
41
  console.log(chalk.cyan.bold(` ${category.toUpperCase()}`));
42
- for (const perm of perms) {
42
+ for (const perm of categoryPerms) {
43
43
  const desc = perm.description ? chalk.gray(` - ${perm.description}`) : '';
44
44
  console.log(` ${chalk.white(perm.permission)}${desc}`);
45
45
  }
@@ -96,23 +96,23 @@ export function registerPermissionsCommands(program) {
96
96
  }
97
97
  console.log();
98
98
  if (result.allValid) {
99
- console.log(chalk.green.bold('All permissions are valid'));
99
+ console.log(chalk.green.bold('All permissions are valid'));
100
100
  }
101
101
  else {
102
- console.log(chalk.red.bold('Some permissions are invalid'));
102
+ console.log(chalk.red.bold('Some permissions are invalid'));
103
103
  }
104
104
  console.log();
105
105
  if (result.valid.length > 0) {
106
106
  console.log(chalk.green('Valid:'));
107
107
  for (const perm of result.valid) {
108
- console.log(` ${perm}`);
108
+ console.log(` ${perm}`);
109
109
  }
110
110
  }
111
111
  if (result.invalid.length > 0) {
112
112
  console.log();
113
113
  console.log(chalk.red('Invalid:'));
114
114
  for (const perm of result.invalid) {
115
- console.log(` ${perm}`);
115
+ console.log(` ${perm}`);
116
116
  }
117
117
  }
118
118
  console.log();
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
1
+ import { type Command } from 'commander';
2
2
  export declare function registerPolicyCommands(program: Command): void;
3
3
  //# sourceMappingURL=policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6sB7D"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA+FzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6sB7D"}
@@ -43,7 +43,7 @@ export function registerPolicyCommands(program) {
43
43
  p.priority.toString(),
44
44
  p.actions.length > 2 ? `${p.actions.slice(0, 2).join(', ')}...` : p.actions.join(', '),
45
45
  p.isActive ? 'Enabled' : 'Disabled',
46
- p.tenantId || '-',
46
+ p.tenantId ?? '-',
47
47
  ]));
48
48
  output.info(`Total: ${result.total} policy(s)`);
49
49
  }
@@ -71,18 +71,18 @@ export function registerPolicyCommands(program) {
71
71
  output.keyValue({
72
72
  'ID': result.id,
73
73
  'Name': result.name,
74
- 'Description': result.description || '-',
74
+ 'Description': result.description ?? '-',
75
75
  'Effect': result.effect.toUpperCase(),
76
76
  'Priority': result.priority.toString(),
77
77
  'Status': result.isActive ? 'Enabled' : 'Disabled',
78
- 'Tenant': result.tenantId || 'Global',
78
+ 'Tenant': result.tenantId ?? 'Global',
79
79
  'Created': output.formatDate(result.createdAt),
80
80
  'Updated': output.formatDate(result.updatedAt),
81
81
  });
82
82
  console.log();
83
83
  output.section('Actions');
84
84
  for (const action of result.actions) {
85
- console.log(` ${action}`);
85
+ console.log(` - ${action}`);
86
86
  }
87
87
  if (result.resources && result.resources.length > 0) {
88
88
  console.log();
@@ -95,7 +95,7 @@ export function registerPolicyCommands(program) {
95
95
  parts.push(`tenant: ${resource.tenantId}`);
96
96
  if (resource.tags)
97
97
  parts.push(`tags: ${JSON.stringify(resource.tags)}`);
98
- console.log(` ${parts.join(', ')}`);
98
+ console.log(` - ${parts.join(', ')}`);
99
99
  }
100
100
  }
101
101
  if (result.conditions && result.conditions.length > 0) {
@@ -103,7 +103,7 @@ export function registerPolicyCommands(program) {
103
103
  output.section('Conditions');
104
104
  for (const condition of result.conditions) {
105
105
  const op = condition.operator ? ` ${condition.operator}` : '';
106
- console.log(` ${condition.type}${op}: ${JSON.stringify(condition.value)}`);
106
+ console.log(` - ${condition.type}${op}: ${JSON.stringify(condition.value)}`);
107
107
  }
108
108
  }
109
109
  console.log();
@@ -343,7 +343,7 @@ export function registerPolicyCommands(program) {
343
343
  spinner.fail('Policy validation failed');
344
344
  if (result.errors) {
345
345
  for (const error of result.errors) {
346
- output.error(` ${error}`);
346
+ output.error(` - ${error}`);
347
347
  }
348
348
  }
349
349
  process.exit(1);
@@ -375,8 +375,8 @@ export function registerPolicyCommands(program) {
375
375
  if (result.users.length > 0) {
376
376
  output.section('Attached Users');
377
377
  output.table(['User ID', 'Username', 'Attached At'], result.users.map(a => [
378
- a.userId?.substring(0, 8) || '-',
379
- a.username || '-',
378
+ a.userId?.substring(0, 8) ?? '-',
379
+ a.username ?? '-',
380
380
  output.formatDate(a.attachedAt),
381
381
  ]));
382
382
  }
@@ -384,8 +384,8 @@ export function registerPolicyCommands(program) {
384
384
  console.log();
385
385
  output.section('Attached Roles');
386
386
  output.table(['Role ID', 'Role Name', 'Attached At'], result.roles.map(a => [
387
- a.roleId?.substring(0, 8) || '-',
388
- a.roleName || '-',
387
+ a.roleId?.substring(0, 8) ?? '-',
388
+ a.roleName ?? '-',
389
389
  output.formatDate(a.attachedAt),
390
390
  ]));
391
391
  }
@@ -549,9 +549,9 @@ export function registerPolicyCommands(program) {
549
549
  id: options.resourceId,
550
550
  tenantId: options.resourceTenant,
551
551
  } : undefined,
552
- requestContext: (options.ip || options.mfa) ? {
552
+ requestContext: (options.ip !== undefined || options.mfa !== undefined) ? {
553
553
  ip: options.ip,
554
- mfaVerified: options.mfa || false,
554
+ mfaVerified: options.mfa ?? false,
555
555
  } : undefined,
556
556
  };
557
557
  const result = await client.testPolicy(request);
@@ -561,7 +561,7 @@ export function registerPolicyCommands(program) {
561
561
  return;
562
562
  }
563
563
  // Display result with color
564
- const statusIcon = result.allowed ? '' : '';
564
+ const statusIcon = result.allowed ? '[OK]' : '[X]';
565
565
  const statusText = result.allowed ? 'ALLOWED' : 'DENIED';
566
566
  console.log();
567
567
  console.log(` ${statusIcon} Access: ${statusText}`);