decoupled-cli 2.0.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 (55) hide show
  1. package/README.md +416 -0
  2. package/bin/decoupled-cli +3 -0
  3. package/dist/commands/auth.d.ts +3 -0
  4. package/dist/commands/auth.d.ts.map +1 -0
  5. package/dist/commands/auth.js +386 -0
  6. package/dist/commands/auth.js.map +1 -0
  7. package/dist/commands/config.d.ts +3 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +84 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/content.d.ts +3 -0
  12. package/dist/commands/content.d.ts.map +1 -0
  13. package/dist/commands/content.js +199 -0
  14. package/dist/commands/content.js.map +1 -0
  15. package/dist/commands/download.d.ts +4 -0
  16. package/dist/commands/download.d.ts.map +1 -0
  17. package/dist/commands/download.js +127 -0
  18. package/dist/commands/download.js.map +1 -0
  19. package/dist/commands/health.d.ts +3 -0
  20. package/dist/commands/health.d.ts.map +1 -0
  21. package/dist/commands/health.js +28 -0
  22. package/dist/commands/health.js.map +1 -0
  23. package/dist/commands/org.d.ts +3 -0
  24. package/dist/commands/org.d.ts.map +1 -0
  25. package/dist/commands/org.js +73 -0
  26. package/dist/commands/org.js.map +1 -0
  27. package/dist/commands/spaces.d.ts +3 -0
  28. package/dist/commands/spaces.d.ts.map +1 -0
  29. package/dist/commands/spaces.js +613 -0
  30. package/dist/commands/spaces.js.map +1 -0
  31. package/dist/commands/tokens.d.ts +3 -0
  32. package/dist/commands/tokens.d.ts.map +1 -0
  33. package/dist/commands/tokens.js +90 -0
  34. package/dist/commands/tokens.js.map +1 -0
  35. package/dist/commands/usage.d.ts +3 -0
  36. package/dist/commands/usage.d.ts.map +1 -0
  37. package/dist/commands/usage.js +104 -0
  38. package/dist/commands/usage.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +49 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lib/api.d.ts +40 -0
  44. package/dist/lib/api.d.ts.map +1 -0
  45. package/dist/lib/api.js +162 -0
  46. package/dist/lib/api.js.map +1 -0
  47. package/dist/lib/config.d.ts +63 -0
  48. package/dist/lib/config.d.ts.map +1 -0
  49. package/dist/lib/config.js +317 -0
  50. package/dist/lib/config.js.map +1 -0
  51. package/examples/.cursorrules +189 -0
  52. package/examples/CLAUDE.md +1080 -0
  53. package/examples/GEMINI.md +1056 -0
  54. package/examples/content-import-sample.json +114 -0
  55. package/package.json +55 -0
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.authCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const inquirer_1 = __importDefault(require("inquirer"));
43
+ const child_process_1 = require("child_process");
44
+ const config_1 = require("../lib/config");
45
+ const api_1 = require("../lib/api");
46
+ // Helper function to open browser
47
+ function openBrowser(url) {
48
+ const platform = process.platform;
49
+ let command;
50
+ switch (platform) {
51
+ case 'darwin': // macOS
52
+ command = 'open';
53
+ break;
54
+ case 'win32': // Windows
55
+ command = 'start';
56
+ break;
57
+ default: // Linux and others
58
+ command = 'xdg-open';
59
+ break;
60
+ }
61
+ (0, child_process_1.spawn)(command, [url], { detached: true, stdio: 'ignore' });
62
+ }
63
+ // Helper function for manual token login
64
+ async function handleManualLogin(url, token, profile = 'default') {
65
+ if (!token) {
66
+ const answers = await inquirer_1.default.prompt([
67
+ {
68
+ type: 'password',
69
+ name: 'token',
70
+ message: 'Personal Access Token:',
71
+ validate: (input) => {
72
+ if (!input.startsWith('dc_tok_')) {
73
+ return 'Token should start with "dc_tok_"';
74
+ }
75
+ if (input.length < 20) {
76
+ return 'Token appears to be too short';
77
+ }
78
+ return true;
79
+ }
80
+ }
81
+ ]);
82
+ token = answers.token;
83
+ }
84
+ console.log(chalk_1.default.blue('🔍 Testing authentication...'));
85
+ try {
86
+ const { ApiClient } = await Promise.resolve().then(() => __importStar(require('../lib/api')));
87
+ const testClient = new ApiClient(url, token);
88
+ const result = await testClient.testAuth();
89
+ if (!result.success) {
90
+ throw new Error(result.error);
91
+ }
92
+ console.log(chalk_1.default.green('✅ Authentication successful!'));
93
+ config_1.configManager.setProfile(profile, { baseUrl: url, useOAuth: false });
94
+ config_1.configManager.setCurrentProfile(profile);
95
+ await config_1.configManager.storeToken(profile, token);
96
+ console.log(chalk_1.default.green(`✅ Profile '${profile}' configured successfully`));
97
+ }
98
+ catch (error) {
99
+ throw new Error(`Authentication failed: ${error instanceof Error ? error.message : String(error)}`);
100
+ }
101
+ }
102
+ // Helper function for browser-based login
103
+ async function handleBrowserLogin(url, profile = 'default') {
104
+ console.log(chalk_1.default.blue('🚀 Starting browser-based login...'));
105
+ try {
106
+ // Generate a unique session ID for this CLI login attempt
107
+ const sessionId = Math.random().toString(36).substring(2, 15);
108
+ const loginUrl = `${url}/cli-auth?session=${sessionId}`;
109
+ console.log(chalk_1.default.yellow('\nA browser window will open where you can log in and authorize this CLI.'));
110
+ console.log(chalk_1.default.gray(`If the browser doesn't open automatically, visit: ${loginUrl}`));
111
+ // Ask for confirmation before opening browser
112
+ const { openBrowser: shouldOpen } = await inquirer_1.default.prompt([
113
+ {
114
+ type: 'confirm',
115
+ name: 'openBrowser',
116
+ message: 'Continue login in the browser?',
117
+ default: true
118
+ }
119
+ ]);
120
+ if (shouldOpen) {
121
+ console.log(chalk_1.default.blue('🌐 Opening browser...'));
122
+ openBrowser(loginUrl);
123
+ }
124
+ console.log(chalk_1.default.yellow('\nAfter authorizing in the browser:'));
125
+ console.log(chalk_1.default.gray('1. Copy the personal access token from the browser'));
126
+ console.log(chalk_1.default.gray('2. Paste it below when prompted'));
127
+ console.log(chalk_1.default.gray('3. Press Enter to complete authentication\n'));
128
+ // Prompt for the token that user will copy from browser
129
+ const answers = await inquirer_1.default.prompt([
130
+ {
131
+ type: 'password',
132
+ name: 'token',
133
+ message: 'Paste your Personal Access Token:',
134
+ validate: (input) => {
135
+ if (!input.startsWith('dc_tok_')) {
136
+ return 'Token should start with "dc_tok_"';
137
+ }
138
+ if (input.length < 20) {
139
+ return 'Token appears to be too short';
140
+ }
141
+ return true;
142
+ }
143
+ }
144
+ ]);
145
+ console.log(chalk_1.default.blue('🔍 Testing authentication...'));
146
+ // Test the token
147
+ const { ApiClient } = await Promise.resolve().then(() => __importStar(require('../lib/api')));
148
+ const testClient = new ApiClient(url, answers.token);
149
+ const result = await testClient.testAuth();
150
+ if (!result.success) {
151
+ throw new Error(result.error);
152
+ }
153
+ // Store the token
154
+ config_1.configManager.setProfile(profile, { baseUrl: url, useOAuth: false });
155
+ config_1.configManager.setCurrentProfile(profile);
156
+ await config_1.configManager.storeToken(profile, answers.token);
157
+ // Display success message
158
+ console.log(chalk_1.default.green('\n✅ Authentication successful!'));
159
+ console.log('');
160
+ console.log(chalk_1.default.cyan('📋 Personal Access Token:'));
161
+ console.log(chalk_1.default.gray(` ${answers.token.substring(0, 20)}...`));
162
+ console.log('');
163
+ console.log(chalk_1.default.cyan('💾 Configuration saved to:'));
164
+ console.log(chalk_1.default.gray(` ${config_1.configManager.getConfigPath()}`));
165
+ console.log('');
166
+ }
167
+ catch (error) {
168
+ throw new Error(`Browser login failed: ${error instanceof Error ? error.message : String(error)}`);
169
+ }
170
+ }
171
+ exports.authCommand = new commander_1.Command('auth')
172
+ .description('Authentication management');
173
+ exports.authCommand
174
+ .command('login')
175
+ .description('Login with personal access token')
176
+ .option('--url <url>', 'API base URL (default: https://dashboard.decoupled.io)')
177
+ .option('--token <token>', 'Personal access token (for direct entry)')
178
+ .option('--profile <name>', 'Profile name', 'default')
179
+ .option('--manual', 'Enter token manually instead of opening browser')
180
+ .action(async (options) => {
181
+ try {
182
+ let { url, token, profile } = options;
183
+ // Always use platform URL for PAT login, ignore existing profile baseUrl
184
+ if (!url) {
185
+ url = 'https://dashboard.decoupled.io';
186
+ }
187
+ // If manual flag or token provided, use manual token entry
188
+ if (options.manual || token) {
189
+ return await handleManualLogin(url, token, profile);
190
+ }
191
+ // Default to browser-assisted login (opens browser, user copies token)
192
+ return await handleBrowserLogin(url, profile);
193
+ }
194
+ catch (error) {
195
+ console.error(chalk_1.default.red('❌ Login failed:'), error instanceof Error ? error.message : String(error));
196
+ process.exit(1);
197
+ }
198
+ });
199
+ exports.authCommand
200
+ .command('status')
201
+ .description('Show current authentication status')
202
+ .option('--profile <name>', 'Check specific profile')
203
+ .action(async (options) => {
204
+ try {
205
+ const config = config_1.configManager.getConfig();
206
+ const profileName = options.profile || config.currentProfile;
207
+ const profile = config.profiles[profileName];
208
+ if (!profile) {
209
+ console.log(chalk_1.default.yellow(`❌ Profile '${profileName}' not found`));
210
+ console.log(chalk_1.default.gray('Run "dcloud auth login" to set up authentication'));
211
+ return;
212
+ }
213
+ const token = await config_1.configManager.getToken(profileName);
214
+ const authMethod = profile.useOAuth ? 'OAuth (from .env.local)' : 'Personal Access Token';
215
+ const hasOAuth = config_1.configManager.hasOAuthCredentials();
216
+ console.log(chalk_1.default.bold('\n📋 Authentication Status'));
217
+ console.log('────────────────────────────');
218
+ console.log(`Profile: ${chalk_1.default.cyan(profileName)} ${profileName === config.currentProfile ? chalk_1.default.green('(current)') : ''}`);
219
+ console.log(`Base URL: ${chalk_1.default.cyan(profile.baseUrl)}`);
220
+ console.log(`Auth Method: ${chalk_1.default.cyan(authMethod)}`);
221
+ console.log(`Token: ${token ? chalk_1.default.green('✅ Available') : chalk_1.default.red('❌ Missing')}`);
222
+ if (profile.useOAuth) {
223
+ console.log(`OAuth Env: ${hasOAuth ? chalk_1.default.green('✅ Found') : chalk_1.default.red('❌ Missing')}`);
224
+ }
225
+ if (token) {
226
+ console.log(chalk_1.default.blue('\n🔍 Testing connection...'));
227
+ try {
228
+ const client = await (0, api_1.createApiClient)(profileName);
229
+ // Use different test endpoints based on auth method
230
+ if (profile.useOAuth) {
231
+ // Test Drupal content import API for OAuth profiles
232
+ const response = await client.client.get('/api/dcloud-import/status');
233
+ if (response.status === 200 && response.data.success) {
234
+ console.log(chalk_1.default.green('✅ Connection successful'));
235
+ console.log(chalk_1.default.gray(` Connected to: ${response.data.service} v${response.data.version}`));
236
+ }
237
+ else {
238
+ console.log(chalk_1.default.red('❌ Connection failed: Drupal API not responding properly'));
239
+ }
240
+ }
241
+ else {
242
+ // Test platform API for PAT profiles
243
+ const result = await client.testAuth();
244
+ if (result.success) {
245
+ console.log(chalk_1.default.green('✅ Connection successful'));
246
+ }
247
+ else {
248
+ console.log(chalk_1.default.red('❌ Connection failed:'), result.error);
249
+ }
250
+ }
251
+ }
252
+ catch (error) {
253
+ console.log(chalk_1.default.red('❌ Connection failed:'), error instanceof Error ? error.message : String(error));
254
+ }
255
+ }
256
+ }
257
+ catch (error) {
258
+ console.error(chalk_1.default.red('❌ Error checking status:'), error instanceof Error ? error.message : String(error));
259
+ process.exit(1);
260
+ }
261
+ });
262
+ exports.authCommand
263
+ .command('logout')
264
+ .description('Remove stored credentials')
265
+ .option('--profile <name>', 'Logout specific profile')
266
+ .option('--all', 'Logout all profiles')
267
+ .action(async (options) => {
268
+ try {
269
+ const config = config_1.configManager.getConfig();
270
+ if (options.all) {
271
+ const profiles = config_1.configManager.listProfiles();
272
+ for (const profile of profiles) {
273
+ await config_1.configManager.deleteToken(profile);
274
+ config_1.configManager.deleteProfile(profile);
275
+ }
276
+ console.log(chalk_1.default.green('✅ All profiles logged out'));
277
+ }
278
+ else {
279
+ const profileName = options.profile || config.currentProfile;
280
+ await config_1.configManager.deleteToken(profileName);
281
+ if (profileName !== 'default') {
282
+ config_1.configManager.deleteProfile(profileName);
283
+ }
284
+ console.log(chalk_1.default.green(`✅ Profile '${profileName}' logged out`));
285
+ }
286
+ }
287
+ catch (error) {
288
+ console.error(chalk_1.default.red('❌ Logout failed:'), error instanceof Error ? error.message : String(error));
289
+ process.exit(1);
290
+ }
291
+ });
292
+ exports.authCommand
293
+ .command('oauth')
294
+ .description('Configure OAuth authentication using Drupal credentials from .env.local')
295
+ .option('--profile <name>', 'Profile name', 'default')
296
+ .action(async (options) => {
297
+ try {
298
+ const { profile } = options;
299
+ // Check if Drupal OAuth credentials are available
300
+ if (!config_1.configManager.hasOAuthCredentials()) {
301
+ console.error(chalk_1.default.red('❌ No Drupal OAuth credentials found in environment variables'));
302
+ console.log(chalk_1.default.yellow('Add these to your .env.local:'));
303
+ console.log(chalk_1.default.gray(' NEXT_PUBLIC_DRUPAL_BASE_URL=https://your-drupal-site.com'));
304
+ console.log(chalk_1.default.gray(' DRUPAL_CLIENT_ID=your_client_id'));
305
+ console.log(chalk_1.default.gray(' DRUPAL_CLIENT_SECRET=your_client_secret'));
306
+ process.exit(1);
307
+ }
308
+ // Get Drupal base URL from environment
309
+ const drupalBaseUrl = config_1.configManager.getDrupalBaseUrl();
310
+ if (!drupalBaseUrl) {
311
+ console.error(chalk_1.default.red('❌ NEXT_PUBLIC_DRUPAL_BASE_URL not found in environment'));
312
+ process.exit(1);
313
+ }
314
+ console.log(chalk_1.default.blue('🔍 Testing OAuth authentication with Drupal...'));
315
+ console.log(chalk_1.default.gray(` Drupal URL: ${drupalBaseUrl}`));
316
+ // Create profile with OAuth enabled using Drupal URL
317
+ config_1.configManager.setProfile(profile, { baseUrl: drupalBaseUrl, useOAuth: true });
318
+ config_1.configManager.setCurrentProfile(profile);
319
+ // Test the OAuth connection with Drupal API
320
+ const client = await (0, api_1.createApiClient)(profile);
321
+ // Test against Drupal's dcloud-import status endpoint instead of spaces
322
+ try {
323
+ const response = await client.client.get('/api/dcloud-import/status');
324
+ if (response.data.success) {
325
+ console.log(chalk_1.default.green('✅ Drupal dcloud-import API accessible!'));
326
+ console.log(chalk_1.default.gray(` Service: ${response.data.service} v${response.data.version}`));
327
+ }
328
+ }
329
+ catch (error) {
330
+ throw new Error(`Drupal API test failed: ${error instanceof Error ? error.message : String(error)}`);
331
+ }
332
+ console.log(chalk_1.default.green('✅ Drupal OAuth authentication successful!'));
333
+ console.log(chalk_1.default.green(`✅ Profile '${profile}' configured for Drupal OAuth`));
334
+ console.log(chalk_1.default.cyan('\n📋 Configuration:'));
335
+ console.log(chalk_1.default.gray(` Profile: ${profile}`));
336
+ console.log(chalk_1.default.gray(` Drupal URL: ${drupalBaseUrl}`));
337
+ console.log(chalk_1.default.gray(` Auth Method: OAuth2 Client Credentials (from .env.local)`));
338
+ console.log(chalk_1.default.gray(` Client ID: ${process.env.DRUPAL_CLIENT_ID}`));
339
+ }
340
+ catch (error) {
341
+ console.error(chalk_1.default.red('❌ OAuth setup failed:'), error instanceof Error ? error.message : String(error));
342
+ process.exit(1);
343
+ }
344
+ });
345
+ exports.authCommand
346
+ .command('test')
347
+ .description('Test API connection and permissions')
348
+ .option('--profile <name>', 'Test specific profile')
349
+ .option('--permissions', 'Test specific permissions')
350
+ .action(async (options) => {
351
+ try {
352
+ const client = await (0, api_1.createApiClient)(options.profile);
353
+ console.log(chalk_1.default.blue('🔍 Testing API connection...'));
354
+ const result = await client.testAuth();
355
+ if (result.success) {
356
+ console.log(chalk_1.default.green('✅ Authentication successful'));
357
+ if (options.permissions) {
358
+ console.log(chalk_1.default.blue('\n🔑 Testing permissions...'));
359
+ // Test various endpoints to check permissions
360
+ const tests = [
361
+ { name: 'Get Usage', test: () => client.getUsage() },
362
+ { name: 'List Spaces', test: () => client.getSpaces() },
363
+ { name: 'Get Organization', test: () => client.getOrganization() }
364
+ ];
365
+ for (const { name, test } of tests) {
366
+ try {
367
+ await test();
368
+ console.log(chalk_1.default.green(` ✅ ${name}`));
369
+ }
370
+ catch (error) {
371
+ console.log(chalk_1.default.red(` ❌ ${name}: ${error instanceof Error ? error.message : String(error)}`));
372
+ }
373
+ }
374
+ }
375
+ }
376
+ else {
377
+ console.log(chalk_1.default.red('❌ Authentication failed:'), result.error);
378
+ process.exit(1);
379
+ }
380
+ }
381
+ catch (error) {
382
+ console.error(chalk_1.default.red('❌ Test failed:'), error instanceof Error ? error.message : String(error));
383
+ process.exit(1);
384
+ }
385
+ });
386
+ //# 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 const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SACgB,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const config_1 = require("../lib/config");
10
+ exports.configCommand = new commander_1.Command('config')
11
+ .description('Configuration management');
12
+ exports.configCommand
13
+ .command('show')
14
+ .description('Show current configuration')
15
+ .action(() => {
16
+ const config = config_1.configManager.getConfig();
17
+ console.log(chalk_1.default.bold('\n⚙️ Configuration'));
18
+ console.log('─────────────────');
19
+ console.log(JSON.stringify(config, null, 2));
20
+ });
21
+ exports.configCommand
22
+ .command('set <key> <value>')
23
+ .description('Set configuration value')
24
+ .action((key, value) => {
25
+ try {
26
+ // Parse boolean and number values
27
+ let parsedValue = value;
28
+ if (value === 'true')
29
+ parsedValue = true;
30
+ else if (value === 'false')
31
+ parsedValue = false;
32
+ else if (!isNaN(Number(value)))
33
+ parsedValue = Number(value);
34
+ config_1.configManager.setSetting(key, parsedValue);
35
+ console.log(chalk_1.default.green(`✅ Set ${key} = ${parsedValue}`));
36
+ }
37
+ catch (error) {
38
+ console.error(chalk_1.default.red('❌ Failed to set configuration:'), error instanceof Error ? error.message : String(error));
39
+ process.exit(1);
40
+ }
41
+ });
42
+ exports.configCommand
43
+ .command('reset')
44
+ .description('Reset configuration to defaults')
45
+ .option('--confirm', 'Skip confirmation prompt')
46
+ .action(async (options) => {
47
+ try {
48
+ // Show current config before reset
49
+ console.log(chalk_1.default.bold('\n⚙️ Current Configuration'));
50
+ console.log('─────────────────────────');
51
+ const currentConfig = config_1.configManager.getConfig();
52
+ console.log(JSON.stringify(currentConfig, null, 2));
53
+ // Confirmation prompt unless --confirm flag is used
54
+ if (!options.confirm) {
55
+ const readline = require('readline');
56
+ const rl = readline.createInterface({
57
+ input: process.stdin,
58
+ output: process.stdout
59
+ });
60
+ const answer = await new Promise((resolve) => {
61
+ rl.question(chalk_1.default.yellow('\n⚠️ This will reset all configuration to defaults and clear all profiles and tokens. Continue? (y/N) '), resolve);
62
+ });
63
+ rl.close();
64
+ if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
65
+ console.log(chalk_1.default.gray('Configuration reset cancelled.'));
66
+ return;
67
+ }
68
+ }
69
+ // Reset configuration
70
+ await config_1.configManager.resetConfig();
71
+ console.log(chalk_1.default.green('\n✅ Configuration has been reset to defaults'));
72
+ console.log(chalk_1.default.gray('All profiles, tokens, and settings have been cleared.'));
73
+ // Show new default config
74
+ console.log(chalk_1.default.bold('\n⚙️ New Configuration'));
75
+ console.log('──────────────────────');
76
+ const newConfig = config_1.configManager.getConfig();
77
+ console.log(JSON.stringify(newConfig, null, 2));
78
+ }
79
+ catch (error) {
80
+ console.error(chalk_1.default.red('❌ Failed to reset configuration:'), error instanceof Error ? error.message : String(error));
81
+ process.exit(1);
82
+ }
83
+ });
84
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAEjC,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,0BAA0B,CAAC,CAAC;AAE3C,qBAAa;KACV,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,MAAM,GAAG,sBAAa,CAAC,SAAS,EAAE,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,qBAAa;KACV,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,kCAAkC;QAClC,IAAI,WAAW,GAAQ,KAAK,CAAC;QAC7B,IAAI,KAAK,KAAK,MAAM;YAAE,WAAW,GAAG,IAAI,CAAC;aACpC,IAAI,KAAK,KAAK,OAAO;YAAE,WAAW,GAAG,KAAK,CAAC;aAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAE,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5D,sBAAa,CAAC,UAAU,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,qBAAa;KACV,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,mCAAmC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,sBAAa,CAAC,SAAS,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEpD,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACnD,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,MAAM,CAAC,yGAAyG,CAAC,EAAE,OAAO,CAAC,CAAC;YAChJ,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,sBAAa,CAAC,WAAW,EAAE,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAEjF,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,sBAAa,CAAC,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAElD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const contentCommand: Command;
3
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/commands/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,cAAc,SACsD,CAAC"}