@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.
- package/README.md +250 -0
- package/dist/commands/audit.d.ts +6 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +82 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/auth.d.ts +7 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +310 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/create.d.ts +6 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +88 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/exec.d.ts +8 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +163 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/import.d.ts +7 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +1166 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +50 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +91 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/migrate.d.ts +7 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +105 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/provision.d.ts +7 -0
- package/dist/commands/provision.d.ts.map +1 -0
- package/dist/commands/provision.js +303 -0
- package/dist/commands/provision.js.map +1 -0
- package/dist/commands/revoke.d.ts +6 -0
- package/dist/commands/revoke.d.ts.map +1 -0
- package/dist/commands/revoke.js +70 -0
- package/dist/commands/revoke.js.map +1 -0
- package/dist/commands/scan.d.ts +16 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +700 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/share.d.ts +6 -0
- package/dist/commands/share.d.ts.map +1 -0
- package/dist/commands/share.js +144 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/show.d.ts +6 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +64 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/display.d.ts +78 -0
- package/dist/utils/display.d.ts.map +1 -0
- package/dist/utils/display.js +290 -0
- package/dist/utils/display.js.map +1 -0
- package/dist/utils/prompts.d.ts +67 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +353 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/vault-helpers.d.ts +21 -0
- package/dist/utils/vault-helpers.d.ts.map +1 -0
- package/dist/utils/vault-helpers.js +45 -0
- package/dist/utils/vault-helpers.js.map +1 -0
- 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 @@
|
|
|
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"}
|