@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,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompts for ID Wispera CLI
|
|
3
|
+
*/
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Passphrase Prompts
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Prompt for vault passphrase
|
|
10
|
+
*/
|
|
11
|
+
export async function promptPassphrase(message = 'Enter vault passphrase:') {
|
|
12
|
+
const { passphrase } = await inquirer.prompt([
|
|
13
|
+
{
|
|
14
|
+
type: 'password',
|
|
15
|
+
name: 'passphrase',
|
|
16
|
+
message,
|
|
17
|
+
mask: '*',
|
|
18
|
+
validate: (input) => {
|
|
19
|
+
if (!input || input.length < 8) {
|
|
20
|
+
return 'Passphrase must be at least 8 characters';
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
return passphrase;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Prompt for new passphrase with confirmation
|
|
30
|
+
*/
|
|
31
|
+
export async function promptNewPassphrase() {
|
|
32
|
+
const { passphrase } = await inquirer.prompt([
|
|
33
|
+
{
|
|
34
|
+
type: 'password',
|
|
35
|
+
name: 'passphrase',
|
|
36
|
+
message: 'Create vault passphrase:',
|
|
37
|
+
mask: '*',
|
|
38
|
+
validate: (input) => {
|
|
39
|
+
if (!input || input.length < 8) {
|
|
40
|
+
return 'Passphrase must be at least 8 characters';
|
|
41
|
+
}
|
|
42
|
+
if (!/[a-z]/.test(input) || !/[A-Z]/.test(input) || !/[0-9]/.test(input)) {
|
|
43
|
+
return 'Passphrase should contain lowercase, uppercase, and numbers';
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
await inquirer.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: 'password',
|
|
52
|
+
name: 'confirm',
|
|
53
|
+
message: 'Confirm passphrase:',
|
|
54
|
+
mask: '*',
|
|
55
|
+
validate: (input) => {
|
|
56
|
+
if (input !== passphrase) {
|
|
57
|
+
return 'Passphrases do not match';
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
63
|
+
return passphrase;
|
|
64
|
+
}
|
|
65
|
+
// ============================================================================
|
|
66
|
+
// Passport Creation Prompts
|
|
67
|
+
// ============================================================================
|
|
68
|
+
/**
|
|
69
|
+
* Credential types for selection
|
|
70
|
+
*/
|
|
71
|
+
const CREDENTIAL_TYPE_CHOICES = [
|
|
72
|
+
{ name: 'API Key', value: 'api-key' },
|
|
73
|
+
{ name: 'OAuth Token', value: 'oauth-token' },
|
|
74
|
+
{ name: 'JWT', value: 'jwt' },
|
|
75
|
+
{ name: 'Secret', value: 'secret' },
|
|
76
|
+
{ name: 'Certificate', value: 'certificate' },
|
|
77
|
+
{ name: 'Connection String', value: 'connection-string' },
|
|
78
|
+
{ name: 'Private Key', value: 'private-key' },
|
|
79
|
+
{ name: 'MCP Credential', value: 'mcp-credential' },
|
|
80
|
+
{ name: 'Custom', value: 'custom' },
|
|
81
|
+
];
|
|
82
|
+
/**
|
|
83
|
+
* Visa types for selection
|
|
84
|
+
*/
|
|
85
|
+
const VISA_TYPE_CHOICES = [
|
|
86
|
+
{ name: 'Access - Basic platform access', value: 'access' },
|
|
87
|
+
{ name: 'Privilege - Elevated permissions', value: 'privilege' },
|
|
88
|
+
{ name: 'Data - Data access rights', value: 'data' },
|
|
89
|
+
{ name: 'Compliance - Regulatory scope', value: 'compliance' },
|
|
90
|
+
{ name: 'Ecosystem - Cross-platform', value: 'ecosystem' },
|
|
91
|
+
];
|
|
92
|
+
/**
|
|
93
|
+
* Platforms for selection
|
|
94
|
+
*/
|
|
95
|
+
const PLATFORM_CHOICES = [
|
|
96
|
+
{ name: 'OpenAI', value: 'openai' },
|
|
97
|
+
{ name: 'Anthropic', value: 'anthropic' },
|
|
98
|
+
{ name: 'MCP (Model Context Protocol)', value: 'mcp' },
|
|
99
|
+
{ name: 'Google A2A', value: 'google-a2a' },
|
|
100
|
+
{ name: 'LangChain', value: 'langchain' },
|
|
101
|
+
{ name: 'Azure AI', value: 'azure-ai' },
|
|
102
|
+
{ name: 'AWS', value: 'aws' },
|
|
103
|
+
{ name: 'CrewAI', value: 'crewai' },
|
|
104
|
+
{ name: 'OpenClaw', value: 'openclaw' },
|
|
105
|
+
{ name: 'GitHub', value: 'github' },
|
|
106
|
+
{ name: 'Custom', value: 'custom' },
|
|
107
|
+
];
|
|
108
|
+
export async function promptPassportDetails() {
|
|
109
|
+
const answers = await inquirer.prompt([
|
|
110
|
+
{
|
|
111
|
+
type: 'input',
|
|
112
|
+
name: 'name',
|
|
113
|
+
message: 'Passport name:',
|
|
114
|
+
validate: (input) => {
|
|
115
|
+
if (!input || input.trim().length === 0) {
|
|
116
|
+
return 'Name is required';
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'list',
|
|
123
|
+
name: 'credentialType',
|
|
124
|
+
message: 'Credential type:',
|
|
125
|
+
choices: CREDENTIAL_TYPE_CHOICES,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'password',
|
|
129
|
+
name: 'credentialValue',
|
|
130
|
+
message: 'Credential value:',
|
|
131
|
+
mask: '*',
|
|
132
|
+
validate: (input) => {
|
|
133
|
+
if (!input || input.trim().length === 0) {
|
|
134
|
+
return 'Credential value is required';
|
|
135
|
+
}
|
|
136
|
+
return true;
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'list',
|
|
141
|
+
name: 'visaType',
|
|
142
|
+
message: 'Visa type:',
|
|
143
|
+
choices: VISA_TYPE_CHOICES,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'checkbox',
|
|
147
|
+
name: 'platforms',
|
|
148
|
+
message: 'Select platforms:',
|
|
149
|
+
choices: PLATFORM_CHOICES,
|
|
150
|
+
validate: (input) => {
|
|
151
|
+
if (input.length === 0) {
|
|
152
|
+
return 'Select at least one platform';
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
type: 'input',
|
|
159
|
+
name: 'scope',
|
|
160
|
+
message: 'Scope (comma-separated, e.g., read,write):',
|
|
161
|
+
filter: (input) => input.split(',').map(s => s.trim()).filter(Boolean),
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'input',
|
|
165
|
+
name: 'humanOwner',
|
|
166
|
+
message: 'Human owner (email):',
|
|
167
|
+
validate: (input) => {
|
|
168
|
+
if (!input || !input.includes('@')) {
|
|
169
|
+
return 'Valid email address is required';
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: 'confirm',
|
|
176
|
+
name: 'setExpiry',
|
|
177
|
+
message: 'Set expiration date?',
|
|
178
|
+
default: true,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'input',
|
|
182
|
+
name: 'validUntil',
|
|
183
|
+
message: 'Expiration date (YYYY-MM-DD):',
|
|
184
|
+
when: (answers) => answers.setExpiry,
|
|
185
|
+
validate: (input) => {
|
|
186
|
+
const date = new Date(input);
|
|
187
|
+
if (isNaN(date.getTime())) {
|
|
188
|
+
return 'Invalid date format. Use YYYY-MM-DD';
|
|
189
|
+
}
|
|
190
|
+
if (date <= new Date()) {
|
|
191
|
+
return 'Expiration date must be in the future';
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
},
|
|
195
|
+
filter: (input) => new Date(input).toISOString(),
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
type: 'input',
|
|
199
|
+
name: 'tags',
|
|
200
|
+
message: 'Tags (comma-separated, optional):',
|
|
201
|
+
filter: (input) => input.split(',').map(s => s.trim()).filter(Boolean),
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
type: 'input',
|
|
205
|
+
name: 'notes',
|
|
206
|
+
message: 'Notes (optional):',
|
|
207
|
+
},
|
|
208
|
+
]);
|
|
209
|
+
// Return only the fields we need, omitting setExpiry which is internal
|
|
210
|
+
const { setExpiry: _, ...result } = answers;
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
// ============================================================================
|
|
214
|
+
// Confirmation Prompts
|
|
215
|
+
// ============================================================================
|
|
216
|
+
/**
|
|
217
|
+
* Prompt for confirmation
|
|
218
|
+
*/
|
|
219
|
+
export async function confirm(message, defaultValue = false) {
|
|
220
|
+
const { confirmed } = await inquirer.prompt([
|
|
221
|
+
{
|
|
222
|
+
type: 'confirm',
|
|
223
|
+
name: 'confirmed',
|
|
224
|
+
message,
|
|
225
|
+
default: defaultValue,
|
|
226
|
+
},
|
|
227
|
+
]);
|
|
228
|
+
return confirmed;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Prompt for dangerous action confirmation
|
|
232
|
+
*/
|
|
233
|
+
export async function confirmDangerous(message) {
|
|
234
|
+
const { confirmed } = await inquirer.prompt([
|
|
235
|
+
{
|
|
236
|
+
type: 'input',
|
|
237
|
+
name: 'confirmed',
|
|
238
|
+
message: `${message}\nType "yes" to confirm:`,
|
|
239
|
+
validate: (input) => {
|
|
240
|
+
if (input.toLowerCase() !== 'yes' && input.toLowerCase() !== 'no') {
|
|
241
|
+
return 'Type "yes" or "no"';
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
]);
|
|
247
|
+
return confirmed.toLowerCase() === 'yes';
|
|
248
|
+
}
|
|
249
|
+
// ============================================================================
|
|
250
|
+
// Selection Prompts
|
|
251
|
+
// ============================================================================
|
|
252
|
+
/**
|
|
253
|
+
* Prompt to select a passport from a list
|
|
254
|
+
*/
|
|
255
|
+
export async function selectPassport(passports) {
|
|
256
|
+
const { passportId } = await inquirer.prompt([
|
|
257
|
+
{
|
|
258
|
+
type: 'list',
|
|
259
|
+
name: 'passportId',
|
|
260
|
+
message: 'Select passport:',
|
|
261
|
+
choices: passports.map(p => ({
|
|
262
|
+
name: `${p.name} (${p.id.substring(0, 8)}...) [${p.status}]`,
|
|
263
|
+
value: p.id,
|
|
264
|
+
})),
|
|
265
|
+
},
|
|
266
|
+
]);
|
|
267
|
+
return passportId;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Prompt for reason
|
|
271
|
+
*/
|
|
272
|
+
export async function promptReason(message = 'Reason:') {
|
|
273
|
+
const { reason } = await inquirer.prompt([
|
|
274
|
+
{
|
|
275
|
+
type: 'input',
|
|
276
|
+
name: 'reason',
|
|
277
|
+
message,
|
|
278
|
+
validate: (input) => {
|
|
279
|
+
if (!input || input.trim().length === 0) {
|
|
280
|
+
return 'Reason is required';
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
]);
|
|
286
|
+
return reason;
|
|
287
|
+
}
|
|
288
|
+
// ============================================================================
|
|
289
|
+
// Share Options Prompts
|
|
290
|
+
// ============================================================================
|
|
291
|
+
/**
|
|
292
|
+
* Prompt for share options
|
|
293
|
+
*/
|
|
294
|
+
export async function promptShareOptions() {
|
|
295
|
+
const answers = await inquirer.prompt([
|
|
296
|
+
{
|
|
297
|
+
type: 'list',
|
|
298
|
+
name: 'scope',
|
|
299
|
+
message: 'Share scope:',
|
|
300
|
+
choices: [
|
|
301
|
+
{ name: 'Full - Include credential value', value: 'full' },
|
|
302
|
+
{ name: 'Read-only - Credential visible but not exportable', value: 'read-only' },
|
|
303
|
+
{ name: 'Metadata only - No credential value', value: 'metadata-only' },
|
|
304
|
+
],
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
type: 'list',
|
|
308
|
+
name: 'expiresIn',
|
|
309
|
+
message: 'Link expiration:',
|
|
310
|
+
choices: [
|
|
311
|
+
{ name: '1 hour', value: '1h' },
|
|
312
|
+
{ name: '24 hours', value: '24h' },
|
|
313
|
+
{ name: '7 days', value: '7d' },
|
|
314
|
+
{ name: '30 days', value: '30d' },
|
|
315
|
+
{ name: 'No expiration', value: undefined },
|
|
316
|
+
],
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
type: 'list',
|
|
320
|
+
name: 'maxViews',
|
|
321
|
+
message: 'Maximum views:',
|
|
322
|
+
choices: [
|
|
323
|
+
{ name: '1 view (one-time)', value: 1 },
|
|
324
|
+
{ name: '5 views', value: 5 },
|
|
325
|
+
{ name: '10 views', value: 10 },
|
|
326
|
+
{ name: 'Unlimited', value: undefined },
|
|
327
|
+
],
|
|
328
|
+
},
|
|
329
|
+
]);
|
|
330
|
+
return answers;
|
|
331
|
+
}
|
|
332
|
+
// ============================================================================
|
|
333
|
+
// Import Prompts
|
|
334
|
+
// ============================================================================
|
|
335
|
+
/**
|
|
336
|
+
* Prompt for import confirmation
|
|
337
|
+
*/
|
|
338
|
+
export async function confirmImport(credentials) {
|
|
339
|
+
const { selected } = await inquirer.prompt([
|
|
340
|
+
{
|
|
341
|
+
type: 'checkbox',
|
|
342
|
+
name: 'selected',
|
|
343
|
+
message: 'Select credentials to import:',
|
|
344
|
+
choices: credentials.map((c, i) => ({
|
|
345
|
+
name: `${c.name} (${c.type}): ${c.preview}`,
|
|
346
|
+
value: i.toString(),
|
|
347
|
+
checked: true,
|
|
348
|
+
})),
|
|
349
|
+
},
|
|
350
|
+
]);
|
|
351
|
+
return selected;
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared vault lifecycle utilities for CLI commands
|
|
3
|
+
*
|
|
4
|
+
* Uses PassphraseProvider with allowInteractive: true so the CLI tries
|
|
5
|
+
* session token and keychain first, then falls back to a masked prompt.
|
|
6
|
+
*/
|
|
7
|
+
import { Vault } from '@id-wispera/core';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the vault path from options or use the default
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveVaultPath(options: {
|
|
12
|
+
path?: string;
|
|
13
|
+
}): string;
|
|
14
|
+
/**
|
|
15
|
+
* Ensure vault exists, unlock it, and return the vault instance.
|
|
16
|
+
* Handles errors and exits the process on failure.
|
|
17
|
+
*/
|
|
18
|
+
export declare function withUnlockedVault(options: {
|
|
19
|
+
path?: string;
|
|
20
|
+
}): Promise<Vault>;
|
|
21
|
+
//# sourceMappingURL=vault-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/vault-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,EAKN,MAAM,kBAAkB,CAAC;AAI1B;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEnE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CA0BlF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared vault lifecycle utilities for CLI commands
|
|
3
|
+
*
|
|
4
|
+
* Uses PassphraseProvider with allowInteractive: true so the CLI tries
|
|
5
|
+
* session token and keychain first, then falls back to a masked prompt.
|
|
6
|
+
*/
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { unlockVault, vaultExists, getDefaultVaultPath, PassphraseProvider, } from '@id-wispera/core';
|
|
9
|
+
import { promptPassphrase } from './prompts.js';
|
|
10
|
+
import { error } from './display.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the vault path from options or use the default
|
|
13
|
+
*/
|
|
14
|
+
export function resolveVaultPath(options) {
|
|
15
|
+
return options.path ?? getDefaultVaultPath();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Ensure vault exists, unlock it, and return the vault instance.
|
|
19
|
+
* Handles errors and exits the process on failure.
|
|
20
|
+
*/
|
|
21
|
+
export async function withUnlockedVault(options) {
|
|
22
|
+
const vaultPath = resolveVaultPath(options);
|
|
23
|
+
if (!(await vaultExists(vaultPath))) {
|
|
24
|
+
error('Vault not found. Run `idw init` first.');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
const provider = new PassphraseProvider({
|
|
28
|
+
allowInteractive: true,
|
|
29
|
+
allowEnvVar: true,
|
|
30
|
+
promptFn: promptPassphrase,
|
|
31
|
+
});
|
|
32
|
+
const spinner = ora('Unlocking vault...').start();
|
|
33
|
+
try {
|
|
34
|
+
const passphrase = await provider.getPassphrase();
|
|
35
|
+
const vault = await unlockVault(passphrase, vaultPath);
|
|
36
|
+
spinner.succeed('Vault unlocked');
|
|
37
|
+
return vault;
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
spinner.fail('Failed to unlock vault');
|
|
41
|
+
error(err instanceof Error ? err.message : 'Invalid passphrase');
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=vault-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-helpers.js","sourceRoot":"","sources":["../../src/utils/vault-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAEL,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,OAAO,OAAO,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA0B;IAChE,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC;QACtC,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@id-wispera/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Command-line interface for ID Wispera credential governance",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cli",
|
|
7
|
+
"credentials",
|
|
8
|
+
"security",
|
|
9
|
+
"governance",
|
|
10
|
+
"ai-agents"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://github.com/gecochief/id.wispera/tree/main/packages/cli#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/gecochief/id.wispera/issues"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/gecochief/id.wispera.git",
|
|
19
|
+
"directory": "packages/cli"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"author": "Wispera AI Inc.",
|
|
23
|
+
"type": "module",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"import": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"bin": {
|
|
33
|
+
"idw": "./dist/index.js",
|
|
34
|
+
"id-wispera": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc",
|
|
42
|
+
"clean": "rm -rf dist",
|
|
43
|
+
"dev": "tsc --watch",
|
|
44
|
+
"lint": "eslint src --ext .ts",
|
|
45
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
46
|
+
"start": "node dist/index.js",
|
|
47
|
+
"test": "vitest run",
|
|
48
|
+
"test:watch": "vitest",
|
|
49
|
+
"typecheck": "tsc --noEmit"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@id-wispera/core": "0.1.0",
|
|
53
|
+
"boxen": "^7.1.1",
|
|
54
|
+
"chalk": "^5.3.0",
|
|
55
|
+
"commander": "^11.1.0",
|
|
56
|
+
"inquirer": "^9.2.12",
|
|
57
|
+
"ora": "^7.0.1"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/inquirer": "^9.0.7",
|
|
61
|
+
"@types/node": "^20.10.0",
|
|
62
|
+
"@typescript-eslint/eslint-plugin": "^6.13.0",
|
|
63
|
+
"@typescript-eslint/parser": "^6.13.0",
|
|
64
|
+
"eslint": "^8.55.0",
|
|
65
|
+
"typescript": "^5.3.0",
|
|
66
|
+
"vitest": "^1.0.0"
|
|
67
|
+
},
|
|
68
|
+
"engines": {
|
|
69
|
+
"node": ">=18.0.0"
|
|
70
|
+
}
|
|
71
|
+
}
|