@id-wispera/cli 0.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 (70) hide show
  1. package/README.md +250 -0
  2. package/dist/commands/audit.d.ts +6 -0
  3. package/dist/commands/audit.d.ts.map +1 -0
  4. package/dist/commands/audit.js +82 -0
  5. package/dist/commands/audit.js.map +1 -0
  6. package/dist/commands/auth.d.ts +7 -0
  7. package/dist/commands/auth.d.ts.map +1 -0
  8. package/dist/commands/auth.js +310 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/create.d.ts +6 -0
  11. package/dist/commands/create.d.ts.map +1 -0
  12. package/dist/commands/create.js +88 -0
  13. package/dist/commands/create.js.map +1 -0
  14. package/dist/commands/exec.d.ts +8 -0
  15. package/dist/commands/exec.d.ts.map +1 -0
  16. package/dist/commands/exec.js +163 -0
  17. package/dist/commands/exec.js.map +1 -0
  18. package/dist/commands/import.d.ts +7 -0
  19. package/dist/commands/import.d.ts.map +1 -0
  20. package/dist/commands/import.js +1166 -0
  21. package/dist/commands/import.js.map +1 -0
  22. package/dist/commands/init.d.ts +6 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +50 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/list.d.ts +6 -0
  27. package/dist/commands/list.d.ts.map +1 -0
  28. package/dist/commands/list.js +91 -0
  29. package/dist/commands/list.js.map +1 -0
  30. package/dist/commands/migrate.d.ts +7 -0
  31. package/dist/commands/migrate.d.ts.map +1 -0
  32. package/dist/commands/migrate.js +105 -0
  33. package/dist/commands/migrate.js.map +1 -0
  34. package/dist/commands/provision.d.ts +7 -0
  35. package/dist/commands/provision.d.ts.map +1 -0
  36. package/dist/commands/provision.js +303 -0
  37. package/dist/commands/provision.js.map +1 -0
  38. package/dist/commands/revoke.d.ts +6 -0
  39. package/dist/commands/revoke.d.ts.map +1 -0
  40. package/dist/commands/revoke.js +70 -0
  41. package/dist/commands/revoke.js.map +1 -0
  42. package/dist/commands/scan.d.ts +16 -0
  43. package/dist/commands/scan.d.ts.map +1 -0
  44. package/dist/commands/scan.js +700 -0
  45. package/dist/commands/scan.js.map +1 -0
  46. package/dist/commands/share.d.ts +6 -0
  47. package/dist/commands/share.d.ts.map +1 -0
  48. package/dist/commands/share.js +144 -0
  49. package/dist/commands/share.js.map +1 -0
  50. package/dist/commands/show.d.ts +6 -0
  51. package/dist/commands/show.d.ts.map +1 -0
  52. package/dist/commands/show.js +64 -0
  53. package/dist/commands/show.js.map +1 -0
  54. package/dist/index.d.ts +7 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +76 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/utils/display.d.ts +78 -0
  59. package/dist/utils/display.d.ts.map +1 -0
  60. package/dist/utils/display.js +290 -0
  61. package/dist/utils/display.js.map +1 -0
  62. package/dist/utils/prompts.d.ts +67 -0
  63. package/dist/utils/prompts.d.ts.map +1 -0
  64. package/dist/utils/prompts.js +353 -0
  65. package/dist/utils/prompts.js.map +1 -0
  66. package/dist/utils/vault-helpers.d.ts +21 -0
  67. package/dist/utils/vault-helpers.d.ts.map +1 -0
  68. package/dist/utils/vault-helpers.js +45 -0
  69. package/dist/utils/vault-helpers.js.map +1 -0
  70. package/package.json +71 -0
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Provision command group: idw provision <provider> [options]
3
+ * Provisions scoped credentials through vendor APIs and wraps them as passports.
4
+ */
5
+ import { Command } from 'commander';
6
+ import ora from 'ora';
7
+ import chalk from 'chalk';
8
+ import { provisionAndCreatePassport, rotateCredential, listProviderKeys, getProviderCapabilities, } from '@id-wispera/core';
9
+ import { getProviderAuth } from '@id-wispera/core/provisioning';
10
+ import { withUnlockedVault } from '../utils/vault-helpers.js';
11
+ import { error, success, info, warning, title, formatDate } from '../utils/display.js';
12
+ // ============================================================================
13
+ // Constants
14
+ // ============================================================================
15
+ const VALID_PROVIDERS = [
16
+ 'openai', 'aws', 'google-cloud', 'azure-entra',
17
+ 'github', 'twilio', 'sendgrid', 'anthropic',
18
+ ];
19
+ // ============================================================================
20
+ // Helpers
21
+ // ============================================================================
22
+ function parseTtlToSeconds(ttl) {
23
+ if (!ttl)
24
+ return undefined;
25
+ const match = ttl.match(/^(\d+)(s|m|h|d)$/);
26
+ if (!match)
27
+ return undefined;
28
+ const num = parseInt(match[1], 10);
29
+ const unit = match[2];
30
+ switch (unit) {
31
+ case 's': return num;
32
+ case 'm': return num * 60;
33
+ case 'h': return num * 3600;
34
+ case 'd': return num * 86400;
35
+ default: return undefined;
36
+ }
37
+ }
38
+ function validateProvider(provider) {
39
+ return VALID_PROVIDERS.includes(provider);
40
+ }
41
+ function buildProviderConfig(provider) {
42
+ // Return a minimal config with the provider field set.
43
+ // The provisioning provider will use defaults for unset fields.
44
+ return { provider };
45
+ }
46
+ // ============================================================================
47
+ // idw provision <provider> — Provision a new scoped credential
48
+ // ============================================================================
49
+ function createProvisionCreateCommand() {
50
+ return new Command('create')
51
+ .description('Provision a new scoped credential for an AI agent')
52
+ .argument('<provider>', `Provider (${VALID_PROVIDERS.join(', ')})`)
53
+ .requiredOption('--project <name>', 'Project/label for the new credential')
54
+ .option('--scope <scopes>', 'Comma-separated permission scopes')
55
+ .option('--ttl <duration>', 'Credential TTL (e.g., "90d", "24h")')
56
+ .option('--auto-passport', 'Automatically create a passport (default: true)', true)
57
+ .option('--no-auto-passport', 'Skip automatic passport creation')
58
+ .option('--tags <tags>', 'Comma-separated tags for the created passport')
59
+ .option('-p, --path <path>', 'Custom vault path')
60
+ .action(async (provider, options) => {
61
+ if (!validateProvider(provider)) {
62
+ error(`Unknown provider: ${provider}`);
63
+ info(`Valid providers: ${VALID_PROVIDERS.join(', ')}`);
64
+ process.exit(1);
65
+ }
66
+ // 1. Unlock vault
67
+ const vault = await withUnlockedVault(options);
68
+ // 2. Resolve admin auth
69
+ let adminAuth;
70
+ const spinner = ora('Resolving admin credentials...').start();
71
+ try {
72
+ adminAuth = await getProviderAuth(vault, provider);
73
+ spinner.succeed('Admin credentials resolved');
74
+ }
75
+ catch (err) {
76
+ spinner.fail('No admin credentials found');
77
+ error(err instanceof Error ? err.message : 'Unknown error');
78
+ info(`Run 'idw auth bootstrap ${provider}' first to store admin credentials.`);
79
+ process.exit(1);
80
+ }
81
+ // 3. Build provisioning request
82
+ const scopes = options.scope
83
+ ? options.scope.split(',').map((s) => s.trim()).filter(Boolean)
84
+ : [];
85
+ const tags = options.tags
86
+ ? options.tags.split(',').map((s) => s.trim()).filter(Boolean)
87
+ : [];
88
+ const expiresIn = options.ttl ? parseTtlToSeconds(options.ttl) : undefined;
89
+ if (options.ttl && expiresIn === undefined) {
90
+ error('Invalid TTL format. Use e.g., "90d", "24h", "3600s"');
91
+ process.exit(1);
92
+ }
93
+ const request = {
94
+ provider,
95
+ name: options.project,
96
+ humanOwner: 'cli-user', // will be replaced if passport already has owner info
97
+ config: buildProviderConfig(provider),
98
+ permissions: scopes.length > 0 ? { provider, scopes } : undefined,
99
+ expiresIn,
100
+ tags,
101
+ };
102
+ // 4. Provision
103
+ const provSpinner = ora(`Provisioning credential via ${provider}...`).start();
104
+ try {
105
+ const result = await provisionAndCreatePassport(vault, request, adminAuth);
106
+ if (!result.credential.success) {
107
+ provSpinner.fail('Provisioning failed');
108
+ error(result.credential.error?.message ?? 'Unknown provisioning error');
109
+ process.exit(1);
110
+ }
111
+ provSpinner.succeed('Credential provisioned');
112
+ console.log();
113
+ // 5. Display result
114
+ title('Provisioned Credential');
115
+ console.log();
116
+ if (result.credential.credentialValue) {
117
+ console.log(` ${chalk.bold('Credential:')} ${chalk.green(result.credential.credentialValue)}`);
118
+ warning('This credential value is shown once. Store it securely.');
119
+ }
120
+ if (result.credential.providerKeyId) {
121
+ console.log(` ${chalk.bold('Provider Key ID:')} ${chalk.dim(result.credential.providerKeyId)}`);
122
+ }
123
+ if (result.passport) {
124
+ console.log(` ${chalk.bold('Passport ID:')} ${chalk.cyan(result.passport.id)}`);
125
+ }
126
+ if (result.credential.expiresAt) {
127
+ console.log(` ${chalk.bold('Expires:')} ${formatDate(result.credential.expiresAt.toISOString())}`);
128
+ }
129
+ console.log();
130
+ success('Credential provisioned and stored as passport.');
131
+ }
132
+ catch (err) {
133
+ provSpinner.fail('Provisioning failed');
134
+ error(err instanceof Error ? err.message : 'Unknown error');
135
+ process.exit(1);
136
+ }
137
+ });
138
+ }
139
+ // ============================================================================
140
+ // idw provision rotate <provider> --passport <id>
141
+ // ============================================================================
142
+ function createProvisionRotateCommand() {
143
+ return new Command('rotate')
144
+ .description('Rotate an existing provisioned credential')
145
+ .argument('<provider>', `Provider (${VALID_PROVIDERS.join(', ')})`)
146
+ .requiredOption('--passport <id>', 'Passport ID of the credential to rotate')
147
+ .option('-p, --path <path>', 'Custom vault path')
148
+ .action(async (provider, options) => {
149
+ if (!validateProvider(provider)) {
150
+ error(`Unknown provider: ${provider}`);
151
+ info(`Valid providers: ${VALID_PROVIDERS.join(', ')}`);
152
+ process.exit(1);
153
+ }
154
+ const capabilities = getProviderCapabilities(provider);
155
+ if (!capabilities?.canRotate) {
156
+ error(`Provider '${provider}' does not support credential rotation.`);
157
+ process.exit(1);
158
+ }
159
+ // 1. Unlock vault
160
+ const vault = await withUnlockedVault(options);
161
+ // 2. Find the existing passport
162
+ const passport = await vault.retrievePassport(options.passport);
163
+ if (!passport) {
164
+ error(`Passport not found: ${options.passport}`);
165
+ process.exit(1);
166
+ }
167
+ // 3. Resolve admin auth
168
+ let adminAuth;
169
+ try {
170
+ adminAuth = await getProviderAuth(vault, provider);
171
+ }
172
+ catch (err) {
173
+ error(err instanceof Error ? err.message : 'Unknown error');
174
+ info(`Run 'idw auth bootstrap ${provider}' first.`);
175
+ process.exit(1);
176
+ }
177
+ // 4. Rotate
178
+ const spinner = ora('Rotating credential...').start();
179
+ try {
180
+ const request = {
181
+ provider,
182
+ name: passport.name,
183
+ humanOwner: passport.humanOwner,
184
+ config: buildProviderConfig(provider),
185
+ tags: passport.tags,
186
+ };
187
+ // Use the provider key ID from passport metadata if available
188
+ const existingKeyId = passport.providerKeyId ?? passport.id;
189
+ const result = await rotateCredential(provider, existingKeyId, request, adminAuth);
190
+ if (!result || !result.newCredential.success) {
191
+ spinner.fail('Rotation failed');
192
+ error(result?.newCredential.error?.message ?? 'Rotation not supported or failed');
193
+ process.exit(1);
194
+ }
195
+ // Update the passport with new credential value
196
+ if (result.newCredential.credentialValue) {
197
+ passport.credentialValue = result.newCredential.credentialValue;
198
+ passport.updatedAt = new Date().toISOString();
199
+ await vault.storePassport(passport);
200
+ }
201
+ spinner.succeed('Credential rotated');
202
+ console.log();
203
+ title('Rotated Credential');
204
+ console.log();
205
+ if (result.newCredential.credentialValue) {
206
+ console.log(` ${chalk.bold('New Credential:')} ${chalk.green(result.newCredential.credentialValue)}`);
207
+ warning('This credential value is shown once. Store it securely.');
208
+ }
209
+ console.log(` ${chalk.bold('Passport ID:')} ${chalk.cyan(passport.id)}`);
210
+ console.log(` ${chalk.bold('Old Key ID:')} ${chalk.dim(result.oldKeyId)}`);
211
+ console.log();
212
+ success('Credential rotated and passport updated.');
213
+ }
214
+ catch (err) {
215
+ spinner.fail('Rotation failed');
216
+ error(err instanceof Error ? err.message : 'Unknown error');
217
+ process.exit(1);
218
+ }
219
+ });
220
+ }
221
+ // ============================================================================
222
+ // idw provision list <provider>
223
+ // ============================================================================
224
+ function createProvisionListCommand() {
225
+ return new Command('list')
226
+ .description('List credentials provisioned through a provider')
227
+ .argument('<provider>', `Provider (${VALID_PROVIDERS.join(', ')})`)
228
+ .option('-p, --path <path>', 'Custom vault path')
229
+ .action(async (provider, options) => {
230
+ if (!validateProvider(provider)) {
231
+ error(`Unknown provider: ${provider}`);
232
+ info(`Valid providers: ${VALID_PROVIDERS.join(', ')}`);
233
+ process.exit(1);
234
+ }
235
+ const capabilities = getProviderCapabilities(provider);
236
+ if (!capabilities?.canList) {
237
+ error(`Provider '${provider}' does not support listing credentials.`);
238
+ process.exit(1);
239
+ }
240
+ // 1. Unlock vault
241
+ const vault = await withUnlockedVault(options);
242
+ // 2. Resolve admin auth
243
+ let adminAuth;
244
+ try {
245
+ adminAuth = await getProviderAuth(vault, provider);
246
+ }
247
+ catch (err) {
248
+ error(err instanceof Error ? err.message : 'Unknown error');
249
+ info(`Run 'idw auth bootstrap ${provider}' first.`);
250
+ process.exit(1);
251
+ }
252
+ // 3. List
253
+ const spinner = ora(`Listing credentials from ${provider}...`).start();
254
+ try {
255
+ const keys = await listProviderKeys(provider, adminAuth);
256
+ spinner.succeed(`Found ${keys.length} credential(s)`);
257
+ if (keys.length === 0) {
258
+ info('No credentials found.');
259
+ return;
260
+ }
261
+ console.log();
262
+ title(`${provider} Credentials`);
263
+ console.log();
264
+ // Table header
265
+ const header = chalk.bold(padRight('ID', 30)) +
266
+ chalk.bold(padRight('Name', 30)) +
267
+ chalk.bold(padRight('Created', 15)) +
268
+ chalk.bold('Status');
269
+ console.log(` ${header}`);
270
+ console.log(` ${chalk.dim('─'.repeat(85))}`);
271
+ for (const key of keys) {
272
+ const created = key.createdAt
273
+ ? formatDate(key.createdAt.toISOString())
274
+ : chalk.dim('unknown');
275
+ const status = key.status === 'active'
276
+ ? chalk.green(key.status)
277
+ : chalk.red(key.status);
278
+ console.log(` ${padRight(key.id, 30)}${padRight(key.name, 30)}${padRight(created, 15)}${status}`);
279
+ }
280
+ console.log();
281
+ }
282
+ catch (err) {
283
+ spinner.fail('Failed to list credentials');
284
+ error(err instanceof Error ? err.message : 'Unknown error');
285
+ process.exit(1);
286
+ }
287
+ });
288
+ }
289
+ function padRight(str, len) {
290
+ return str.length >= len ? str.substring(0, len) : str.padEnd(len);
291
+ }
292
+ // ============================================================================
293
+ // Root: idw provision
294
+ // ============================================================================
295
+ export function createProvisionCommand() {
296
+ const provision = new Command('provision')
297
+ .description('Provision and manage scoped credentials via provider APIs');
298
+ provision.addCommand(createProvisionCreateCommand());
299
+ provision.addCommand(createProvisionRotateCommand());
300
+ provision.addCommand(createProvisionListCommand());
301
+ return provision;
302
+ }
303
+ //# sourceMappingURL=provision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Revoke passport command: idw revoke <id>
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createRevokeCommand(): Command;
6
+ //# sourceMappingURL=revoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../src/commands/revoke.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,mBAAmB,IAAI,OAAO,CAmE7C"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Revoke passport command: idw revoke <id>
3
+ */
4
+ import { Command } from 'commander';
5
+ import ora from 'ora';
6
+ import { getPassport, revokePassport, } from '@id-wispera/core';
7
+ import { confirmDangerous, promptReason } from '../utils/prompts.js';
8
+ import { error, success, warning, displayPassportCard } from '../utils/display.js';
9
+ import { withUnlockedVault } from '../utils/vault-helpers.js';
10
+ export function createRevokeCommand() {
11
+ const command = new Command('revoke')
12
+ .description('Revoke a passport')
13
+ .argument('<id>', 'Passport ID')
14
+ .option('--reason <reason>', 'Revocation reason')
15
+ .option('--actor <actor>', 'Who is revoking (defaults to CLI user)')
16
+ .option('-y, --yes', 'Skip confirmation')
17
+ .option('-p, --path <path>', 'Custom vault path')
18
+ .action(async (id, options) => {
19
+ const vault = await withUnlockedVault(options);
20
+ // Get passport first to show details
21
+ const spinner = ora('Loading passport...').start();
22
+ let passport;
23
+ try {
24
+ passport = await getPassport(vault, id);
25
+ spinner.stop();
26
+ }
27
+ catch (err) {
28
+ spinner.fail('Failed to load passport');
29
+ error(err instanceof Error ? err.message : 'Unknown error');
30
+ process.exit(1);
31
+ }
32
+ // Check if already revoked
33
+ if (passport.status === 'revoked') {
34
+ error('Passport is already revoked.');
35
+ process.exit(1);
36
+ }
37
+ // Show passport details
38
+ console.log();
39
+ console.log(displayPassportCard(passport));
40
+ // Confirm revocation
41
+ if (!options.yes) {
42
+ console.log();
43
+ warning('This action cannot be undone. The credential will no longer be accessible.');
44
+ const confirmed = await confirmDangerous('Revoke this passport?');
45
+ if (!confirmed) {
46
+ console.log('Revocation cancelled.');
47
+ return;
48
+ }
49
+ }
50
+ // Get reason
51
+ const reason = options.reason ?? await promptReason('Revocation reason:');
52
+ const actor = options.actor ?? process.env.USER ?? 'cli-user';
53
+ // Revoke passport
54
+ spinner.start('Revoking passport...');
55
+ try {
56
+ const revoked = await revokePassport(vault, id, reason, actor);
57
+ spinner.succeed('Passport revoked');
58
+ console.log();
59
+ console.log(displayPassportCard(revoked));
60
+ success(`Passport "${revoked.name}" has been revoked.`);
61
+ }
62
+ catch (err) {
63
+ spinner.fail('Failed to revoke passport');
64
+ error(err instanceof Error ? err.message : 'Unknown error');
65
+ process.exit(1);
66
+ }
67
+ });
68
+ return command;
69
+ }
70
+ //# sourceMappingURL=revoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/commands/revoke.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Scan command: idw scan [path]
3
+ * Supports system-wide credential scanning and provider-specific scanning
4
+ */
5
+ import { Command } from 'commander';
6
+ import type { DetectionResult } from '@id-wispera/core';
7
+ /**
8
+ * Recursively scan a directory for files
9
+ */
10
+ export declare function walkDirectory(dir: string, onUnreadable?: (path: string, error: string) => void): AsyncGenerator<string>;
11
+ /**
12
+ * Scan a file for credentials
13
+ */
14
+ export declare function scanFile(filePath: string): Promise<DetectionResult[]>;
15
+ export declare function createScanCommand(): Command;
16
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAmbxD;;GAEG;AACH,wBAAuB,aAAa,CAClC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACnD,cAAc,CAAC,MAAM,CAAC,CAuBxB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAqB3E;AA+CD,wBAAgB,iBAAiB,IAAI,OAAO,CA0N3C"}