@zincapp/znvault-cli 2.1.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 (122) hide show
  1. package/README.md +310 -0
  2. package/dist/commands/agent.d.ts +3 -0
  3. package/dist/commands/agent.d.ts.map +1 -0
  4. package/dist/commands/agent.js +660 -0
  5. package/dist/commands/agent.js.map +1 -0
  6. package/dist/commands/apikey.d.ts +3 -0
  7. package/dist/commands/apikey.d.ts.map +1 -0
  8. package/dist/commands/apikey.js +767 -0
  9. package/dist/commands/apikey.js.map +1 -0
  10. package/dist/commands/audit.d.ts +3 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +147 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/auth.d.ts +3 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +426 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/cert.d.ts +3 -0
  19. package/dist/commands/cert.d.ts.map +1 -0
  20. package/dist/commands/cert.js +398 -0
  21. package/dist/commands/cert.js.map +1 -0
  22. package/dist/commands/cluster.d.ts +3 -0
  23. package/dist/commands/cluster.d.ts.map +1 -0
  24. package/dist/commands/cluster.js +228 -0
  25. package/dist/commands/cluster.js.map +1 -0
  26. package/dist/commands/emergency.d.ts +3 -0
  27. package/dist/commands/emergency.d.ts.map +1 -0
  28. package/dist/commands/emergency.js +223 -0
  29. package/dist/commands/emergency.js.map +1 -0
  30. package/dist/commands/health.d.ts +3 -0
  31. package/dist/commands/health.d.ts.map +1 -0
  32. package/dist/commands/health.js +188 -0
  33. package/dist/commands/health.js.map +1 -0
  34. package/dist/commands/lockdown.d.ts +3 -0
  35. package/dist/commands/lockdown.d.ts.map +1 -0
  36. package/dist/commands/lockdown.js +232 -0
  37. package/dist/commands/lockdown.js.map +1 -0
  38. package/dist/commands/permissions.d.ts +3 -0
  39. package/dist/commands/permissions.d.ts.map +1 -0
  40. package/dist/commands/permissions.js +168 -0
  41. package/dist/commands/permissions.js.map +1 -0
  42. package/dist/commands/policy.d.ts +3 -0
  43. package/dist/commands/policy.d.ts.map +1 -0
  44. package/dist/commands/policy.js +660 -0
  45. package/dist/commands/policy.js.map +1 -0
  46. package/dist/commands/superadmin.d.ts +3 -0
  47. package/dist/commands/superadmin.d.ts.map +1 -0
  48. package/dist/commands/superadmin.js +203 -0
  49. package/dist/commands/superadmin.js.map +1 -0
  50. package/dist/commands/tenant.d.ts +3 -0
  51. package/dist/commands/tenant.d.ts.map +1 -0
  52. package/dist/commands/tenant.js +277 -0
  53. package/dist/commands/tenant.js.map +1 -0
  54. package/dist/commands/update.d.ts +9 -0
  55. package/dist/commands/update.d.ts.map +1 -0
  56. package/dist/commands/update.js +359 -0
  57. package/dist/commands/update.js.map +1 -0
  58. package/dist/commands/user.d.ts +3 -0
  59. package/dist/commands/user.d.ts.map +1 -0
  60. package/dist/commands/user.js +363 -0
  61. package/dist/commands/user.js.map +1 -0
  62. package/dist/index.d.ts +3 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +82 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/lib/client.d.ts +246 -0
  67. package/dist/lib/client.d.ts.map +1 -0
  68. package/dist/lib/client.js +734 -0
  69. package/dist/lib/client.js.map +1 -0
  70. package/dist/lib/config.d.ts +130 -0
  71. package/dist/lib/config.d.ts.map +1 -0
  72. package/dist/lib/config.js +342 -0
  73. package/dist/lib/config.js.map +1 -0
  74. package/dist/lib/db.d.ts +111 -0
  75. package/dist/lib/db.d.ts.map +1 -0
  76. package/dist/lib/db.js +698 -0
  77. package/dist/lib/db.js.map +1 -0
  78. package/dist/lib/local.d.ts +41 -0
  79. package/dist/lib/local.d.ts.map +1 -0
  80. package/dist/lib/local.js +236 -0
  81. package/dist/lib/local.js.map +1 -0
  82. package/dist/lib/mode.d.ts +210 -0
  83. package/dist/lib/mode.d.ts.map +1 -0
  84. package/dist/lib/mode.js +389 -0
  85. package/dist/lib/mode.js.map +1 -0
  86. package/dist/lib/output.d.ts +61 -0
  87. package/dist/lib/output.d.ts.map +1 -0
  88. package/dist/lib/output.js +190 -0
  89. package/dist/lib/output.js.map +1 -0
  90. package/dist/lib/prompts.d.ts +32 -0
  91. package/dist/lib/prompts.d.ts.map +1 -0
  92. package/dist/lib/prompts.js +96 -0
  93. package/dist/lib/prompts.js.map +1 -0
  94. package/dist/services/auto-update-daemon.d.ts +48 -0
  95. package/dist/services/auto-update-daemon.d.ts.map +1 -0
  96. package/dist/services/auto-update-daemon.js +296 -0
  97. package/dist/services/auto-update-daemon.js.map +1 -0
  98. package/dist/services/signature-verifier.d.ts +38 -0
  99. package/dist/services/signature-verifier.d.ts.map +1 -0
  100. package/dist/services/signature-verifier.js +209 -0
  101. package/dist/services/signature-verifier.js.map +1 -0
  102. package/dist/services/update-checker.d.ts +39 -0
  103. package/dist/services/update-checker.d.ts.map +1 -0
  104. package/dist/services/update-checker.js +198 -0
  105. package/dist/services/update-checker.js.map +1 -0
  106. package/dist/services/update-installer.d.ts +54 -0
  107. package/dist/services/update-installer.d.ts.map +1 -0
  108. package/dist/services/update-installer.js +360 -0
  109. package/dist/services/update-installer.js.map +1 -0
  110. package/dist/types/index.d.ts +411 -0
  111. package/dist/types/index.d.ts.map +1 -0
  112. package/dist/types/index.js +2 -0
  113. package/dist/types/index.js.map +1 -0
  114. package/dist/types/update.d.ts +137 -0
  115. package/dist/types/update.d.ts.map +1 -0
  116. package/dist/types/update.js +27 -0
  117. package/dist/types/update.js.map +1 -0
  118. package/dist/utils/platform.d.ts +35 -0
  119. package/dist/utils/platform.d.ts.map +1 -0
  120. package/dist/utils/platform.js +115 -0
  121. package/dist/utils/platform.js.map +1 -0
  122. package/package.json +59 -0
@@ -0,0 +1,426 @@
1
+ import ora from 'ora';
2
+ import { client } from '../lib/client.js';
3
+ import { getCredentials, clearCredentials, clearApiKey, setConfigValue, getAllConfig, getConfigPath, getActiveProfileName, listProfiles, createProfile, deleteProfile, switchProfile, renameProfile, getProfile, storeApiKey, getStoredApiKey, } from '../lib/config.js';
4
+ import { promptUsername, promptPassword, promptTotp } from '../lib/prompts.js';
5
+ import * as output from '../lib/output.js';
6
+ export function registerAuthCommands(program) {
7
+ // Login command
8
+ program
9
+ .command('login')
10
+ .description('Authenticate with the vault server')
11
+ .option('-u, --username <username>', 'Username')
12
+ .option('-p, --password <password>', 'Password')
13
+ .option('-t, --totp <code>', 'TOTP code (if 2FA enabled)')
14
+ .action(async (options) => {
15
+ try {
16
+ const username = options.username || await promptUsername();
17
+ const password = options.password || await promptPassword();
18
+ const totp = options.totp || await promptTotp();
19
+ const spinner = ora('Authenticating...').start();
20
+ try {
21
+ const response = await client.login(username, password, totp);
22
+ spinner.succeed(`Login successful (profile: ${getActiveProfileName()})`);
23
+ output.keyValue({
24
+ 'User ID': response.user.id,
25
+ 'Username': response.user.username,
26
+ 'Role': response.user.role,
27
+ 'Tenant': response.user.tenantId || 'None (superadmin)',
28
+ });
29
+ }
30
+ catch (err) {
31
+ spinner.fail('Login failed');
32
+ throw err;
33
+ }
34
+ }
35
+ catch (err) {
36
+ output.error(err instanceof Error ? err.message : String(err));
37
+ process.exit(1);
38
+ }
39
+ });
40
+ // Logout command
41
+ program
42
+ .command('logout')
43
+ .description('Clear stored credentials and API key')
44
+ .option('--keep-apikey', 'Keep stored API key (only clear JWT credentials)')
45
+ .action((options) => {
46
+ clearCredentials();
47
+ if (!options.keepApikey) {
48
+ clearApiKey();
49
+ }
50
+ output.success(`Logged out successfully (profile: ${getActiveProfileName()})`);
51
+ });
52
+ // Login with API key creation
53
+ program
54
+ .command('login-apikey')
55
+ .description('Login and create a long-lived API key for this profile')
56
+ .option('-u, --username <username>', 'Username')
57
+ .option('-p, --password <password>', 'Password')
58
+ .option('-t, --totp <code>', 'TOTP code (if 2FA enabled)')
59
+ .option('-e, --expires <days>', 'Days until API key expires (default: 365)', '365')
60
+ .option('-n, --name <name>', 'API key name (default: znvault-cli-<profile>)')
61
+ .option('-P, --permissions <perms>', 'Comma-separated permissions (defaults to common CLI permissions)')
62
+ .option('--replace', 'Replace existing API key if one exists')
63
+ .action(async (options) => {
64
+ const profileName = getActiveProfileName();
65
+ // Check if API key already exists
66
+ const existingKey = getStoredApiKey();
67
+ if (existingKey && !options.replace) {
68
+ output.error(`Profile '${profileName}' already has an API key stored.`);
69
+ console.log('Use --replace to create a new one, or use "znvault logout" first.');
70
+ process.exit(1);
71
+ }
72
+ try {
73
+ const username = options.username || await promptUsername();
74
+ const password = options.password || await promptPassword();
75
+ const totp = options.totp || await promptTotp();
76
+ const spinner = ora('Authenticating...').start();
77
+ try {
78
+ // First login to get JWT
79
+ await client.login(username, password, totp);
80
+ spinner.text = 'Creating API key...';
81
+ // Create API key
82
+ const expiresInDays = parseInt(options.expires, 10);
83
+ const keyName = options.name || `znvault-cli-${profileName}`;
84
+ // Default permissions for CLI usage (read secrets, configs, basic operations)
85
+ const defaultPermissions = [
86
+ 'secret:read:value',
87
+ 'secret:read:metadata',
88
+ 'secret:list:values',
89
+ 'secret:list:metadata',
90
+ 'config:read',
91
+ 'config:list',
92
+ 'certificate:read:value',
93
+ 'certificate:read:metadata',
94
+ 'certificate:list',
95
+ 'kms:encrypt',
96
+ 'kms:decrypt',
97
+ ];
98
+ const permissions = options.permissions
99
+ ? options.permissions.split(',').map((p) => p.trim())
100
+ : defaultPermissions;
101
+ const result = await client.createApiKey({
102
+ name: keyName,
103
+ description: `CLI profile: ${profileName}`,
104
+ expiresInDays,
105
+ permissions,
106
+ });
107
+ // Store the API key in the profile
108
+ storeApiKey(result.key);
109
+ // Clear JWT credentials (we'll use the API key now)
110
+ clearCredentials();
111
+ spinner.succeed('API key created and stored');
112
+ console.log('\n✓ Profile configured for API key authentication\n');
113
+ output.keyValue({
114
+ 'Profile': profileName,
115
+ 'API Key Name': result.apiKey.name,
116
+ 'API Key Prefix': result.apiKey.prefix,
117
+ 'Permissions': `${result.apiKey.permissions.length} granted`,
118
+ 'Expires': new Date(result.apiKey.expires_at).toLocaleDateString(),
119
+ 'Days Until Expiry': expiresInDays,
120
+ });
121
+ console.log('\nYou can now use znvault commands without logging in again.');
122
+ console.log('The API key is stored securely in your profile config.');
123
+ }
124
+ catch (err) {
125
+ spinner.fail('Failed');
126
+ throw err;
127
+ }
128
+ }
129
+ catch (err) {
130
+ output.error(err instanceof Error ? err.message : String(err));
131
+ process.exit(1);
132
+ }
133
+ });
134
+ // Whoami command
135
+ program
136
+ .command('whoami')
137
+ .description('Show current authenticated user')
138
+ .option('--json', 'Output as JSON')
139
+ .action(async (options) => {
140
+ const credentials = getCredentials();
141
+ const storedApiKey = getStoredApiKey();
142
+ const profileName = getActiveProfileName();
143
+ // If we have a stored API key, try to get info from it
144
+ if (storedApiKey) {
145
+ try {
146
+ const result = await client.getApiKeySelf();
147
+ const data = {
148
+ profile: profileName,
149
+ authMethod: 'API Key',
150
+ apiKeyName: result.apiKey.name,
151
+ apiKeyPrefix: result.apiKey.prefix,
152
+ expiresInDays: result.expiresInDays,
153
+ expiringSoon: result.isExpiringSoon,
154
+ };
155
+ if (options.json) {
156
+ output.json(data);
157
+ }
158
+ else {
159
+ output.keyValue(data);
160
+ if (result.isExpiringSoon) {
161
+ console.log('\n⚠️ API key expiring soon! Run "znvault login-apikey --replace" to renew.');
162
+ }
163
+ }
164
+ return;
165
+ }
166
+ catch {
167
+ // API key might be invalid, fall through to check JWT
168
+ }
169
+ }
170
+ if (!credentials) {
171
+ output.error(`Not logged in (profile: ${profileName}). Run "znvault login" or "znvault login-apikey" first.`);
172
+ process.exit(1);
173
+ }
174
+ const data = {
175
+ profile: profileName,
176
+ authMethod: 'JWT',
177
+ userId: credentials.userId,
178
+ username: credentials.username,
179
+ role: credentials.role,
180
+ tenantId: credentials.tenantId || 'None',
181
+ tokenExpires: new Date(credentials.expiresAt).toLocaleString(),
182
+ };
183
+ if (options.json) {
184
+ output.json(data);
185
+ }
186
+ else {
187
+ output.keyValue(data);
188
+ }
189
+ });
190
+ // Config command
191
+ const configCmd = program
192
+ .command('config')
193
+ .description('Manage CLI configuration');
194
+ configCmd
195
+ .command('set <key> <value>')
196
+ .description('Set a configuration value (url, insecure, timeout, defaultTenant)')
197
+ .action((key, value) => {
198
+ const validKeys = ['url', 'insecure', 'timeout', 'defaultTenant'];
199
+ if (!validKeys.includes(key)) {
200
+ output.error(`Invalid config key. Valid keys: ${validKeys.join(', ')}`);
201
+ process.exit(1);
202
+ }
203
+ let parsedValue = value;
204
+ if (key === 'insecure') {
205
+ parsedValue = value === 'true';
206
+ }
207
+ else if (key === 'timeout') {
208
+ parsedValue = parseInt(value, 10);
209
+ if (isNaN(parsedValue)) {
210
+ output.error('Timeout must be a number (milliseconds)');
211
+ process.exit(1);
212
+ }
213
+ }
214
+ setConfigValue(key, parsedValue);
215
+ output.success(`Set ${key} = ${parsedValue} (profile: ${getActiveProfileName()})`);
216
+ });
217
+ configCmd
218
+ .command('get [key]')
219
+ .description('Get configuration value(s)')
220
+ .option('--json', 'Output as JSON')
221
+ .action((key, options) => {
222
+ const config = getAllConfig();
223
+ if (key) {
224
+ if (!(key in config)) {
225
+ output.error(`Unknown config key: ${key}`);
226
+ process.exit(1);
227
+ }
228
+ console.log(config[key]);
229
+ }
230
+ else {
231
+ if (options.json) {
232
+ output.json(config);
233
+ }
234
+ else {
235
+ output.keyValue(config);
236
+ }
237
+ }
238
+ });
239
+ configCmd
240
+ .command('path')
241
+ .description('Show config file path')
242
+ .action(() => {
243
+ console.log(getConfigPath());
244
+ });
245
+ // ============================================================================
246
+ // Profile Management Commands
247
+ // ============================================================================
248
+ const profileCmd = program
249
+ .command('profile')
250
+ .description('Manage configuration profiles');
251
+ // List profiles
252
+ profileCmd
253
+ .command('list')
254
+ .alias('ls')
255
+ .description('List all profiles')
256
+ .option('--json', 'Output as JSON')
257
+ .action((options) => {
258
+ const profiles = listProfiles();
259
+ if (profiles.length === 0) {
260
+ output.warn('No profiles configured');
261
+ return;
262
+ }
263
+ if (options.json) {
264
+ output.json(profiles);
265
+ }
266
+ else {
267
+ console.log('\nProfiles:\n');
268
+ for (const profile of profiles) {
269
+ const activeMarker = profile.active ? ' (active)' : '';
270
+ const authMarker = profile.hasApiKey ? ' [API key]' : profile.hasCredentials ? ' [JWT]' : '';
271
+ console.log(` ${profile.active ? '→' : ' '} ${profile.name}${activeMarker}${authMarker}`);
272
+ console.log(` URL: ${profile.url}`);
273
+ }
274
+ console.log('');
275
+ }
276
+ });
277
+ // Show current profile
278
+ profileCmd
279
+ .command('current')
280
+ .description('Show current active profile')
281
+ .option('--json', 'Output as JSON')
282
+ .action((options) => {
283
+ const profileName = getActiveProfileName();
284
+ const profile = getProfile(profileName);
285
+ if (!profile) {
286
+ output.warn(`Profile '${profileName}' not found`);
287
+ return;
288
+ }
289
+ const data = {
290
+ name: profileName,
291
+ url: profile.url,
292
+ insecure: profile.insecure,
293
+ timeout: profile.timeout,
294
+ defaultTenant: profile.defaultTenant,
295
+ authMethod: profile.apiKey ? 'API Key' : profile.credentials ? 'JWT' : 'None',
296
+ hasApiKey: !!profile.apiKey,
297
+ apiKeyPrefix: profile.apiKey ? profile.apiKey.substring(0, 12) + '...' : undefined,
298
+ hasCredentials: !!profile.credentials,
299
+ loggedInAs: profile.credentials?.username,
300
+ };
301
+ if (options.json) {
302
+ output.json(data);
303
+ }
304
+ else {
305
+ output.keyValue(data);
306
+ }
307
+ });
308
+ // Create profile
309
+ profileCmd
310
+ .command('create <name>')
311
+ .description('Create a new profile')
312
+ .option('--vault-url <url>', 'Vault server URL')
313
+ .option('-k, --insecure', 'Skip TLS certificate verification')
314
+ .option('--copy-from <profile>', 'Copy settings from existing profile')
315
+ .option('--use', 'Switch to this profile after creating')
316
+ .action((name, options) => {
317
+ try {
318
+ createProfile(name, {
319
+ url: options.vaultUrl,
320
+ insecure: options.insecure,
321
+ copyFrom: options.copyFrom,
322
+ });
323
+ output.success(`Created profile '${name}'`);
324
+ if (options.use) {
325
+ switchProfile(name);
326
+ output.success(`Switched to profile '${name}'`);
327
+ }
328
+ }
329
+ catch (err) {
330
+ output.error(err instanceof Error ? err.message : String(err));
331
+ process.exit(1);
332
+ }
333
+ });
334
+ // Use/switch profile
335
+ profileCmd
336
+ .command('use <name>')
337
+ .alias('switch')
338
+ .description('Switch to a different profile')
339
+ .action((name) => {
340
+ try {
341
+ switchProfile(name);
342
+ const profile = getProfile(name);
343
+ output.success(`Switched to profile '${name}'`);
344
+ if (profile) {
345
+ console.log(` URL: ${profile.url}`);
346
+ if (profile.credentials) {
347
+ console.log(` Logged in as: ${profile.credentials.username}`);
348
+ }
349
+ }
350
+ }
351
+ catch (err) {
352
+ output.error(err instanceof Error ? err.message : String(err));
353
+ process.exit(1);
354
+ }
355
+ });
356
+ // Delete profile
357
+ profileCmd
358
+ .command('delete <name>')
359
+ .alias('rm')
360
+ .description('Delete a profile')
361
+ .option('-f, --force', 'Skip confirmation')
362
+ .action(async (name, options) => {
363
+ try {
364
+ if (!options.force) {
365
+ const profile = getProfile(name);
366
+ if (profile?.credentials) {
367
+ output.warn(`Profile '${name}' has stored credentials that will be deleted`);
368
+ }
369
+ }
370
+ deleteProfile(name);
371
+ output.success(`Deleted profile '${name}'`);
372
+ }
373
+ catch (err) {
374
+ output.error(err instanceof Error ? err.message : String(err));
375
+ process.exit(1);
376
+ }
377
+ });
378
+ // Rename profile
379
+ profileCmd
380
+ .command('rename <old-name> <new-name>')
381
+ .description('Rename a profile')
382
+ .action((oldName, newName) => {
383
+ try {
384
+ renameProfile(oldName, newName);
385
+ output.success(`Renamed profile '${oldName}' to '${newName}'`);
386
+ }
387
+ catch (err) {
388
+ output.error(err instanceof Error ? err.message : String(err));
389
+ process.exit(1);
390
+ }
391
+ });
392
+ // Show profile details
393
+ profileCmd
394
+ .command('show [name]')
395
+ .description('Show profile details')
396
+ .option('--json', 'Output as JSON')
397
+ .action((name, options) => {
398
+ const profileName = name || getActiveProfileName();
399
+ const profile = getProfile(profileName);
400
+ if (!profile) {
401
+ output.error(`Profile '${profileName}' not found`);
402
+ process.exit(1);
403
+ }
404
+ const data = {
405
+ name: profileName,
406
+ url: profile.url,
407
+ insecure: profile.insecure,
408
+ timeout: profile.timeout,
409
+ defaultTenant: profile.defaultTenant || 'None',
410
+ authMethod: profile.apiKey ? 'API Key' : profile.credentials ? 'JWT' : 'None',
411
+ hasApiKey: !!profile.apiKey,
412
+ apiKeyPrefix: profile.apiKey ? profile.apiKey.substring(0, 12) + '...' : undefined,
413
+ hasCredentials: !!profile.credentials,
414
+ loggedInAs: profile.credentials?.username || 'Not logged in',
415
+ role: profile.credentials?.role,
416
+ tenantId: profile.credentials?.tenantId || 'None',
417
+ };
418
+ if (options.json) {
419
+ output.json(data);
420
+ }
421
+ else {
422
+ output.keyValue(data);
423
+ }
424
+ });
425
+ }
426
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCertCommands(program: Command): void;
3
+ //# sourceMappingURL=cert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cert.d.ts","sourceRoot":"","sources":["../../src/commands/cert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8Y3D"}