@minecraft-docker/mcctl 1.6.1 → 1.6.3

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 (90) hide show
  1. package/dist/commands/console/api.d.ts +19 -0
  2. package/dist/commands/console/api.d.ts.map +1 -0
  3. package/dist/commands/console/api.js +399 -0
  4. package/dist/commands/console/api.js.map +1 -0
  5. package/dist/commands/console/index.d.ts +10 -0
  6. package/dist/commands/console/index.d.ts.map +1 -0
  7. package/dist/commands/console/index.js +12 -0
  8. package/dist/commands/console/index.js.map +1 -0
  9. package/dist/commands/console/init.d.ts +47 -0
  10. package/dist/commands/console/init.d.ts.map +1 -0
  11. package/dist/commands/console/init.js +515 -0
  12. package/dist/commands/console/init.js.map +1 -0
  13. package/dist/commands/console/remove.d.ts +25 -0
  14. package/dist/commands/console/remove.d.ts.map +1 -0
  15. package/dist/commands/console/remove.js +189 -0
  16. package/dist/commands/console/remove.js.map +1 -0
  17. package/dist/commands/console/service.d.ts +40 -0
  18. package/dist/commands/console/service.d.ts.map +1 -0
  19. package/dist/commands/console/service.js +321 -0
  20. package/dist/commands/console/service.js.map +1 -0
  21. package/dist/commands/console/user.d.ts +17 -0
  22. package/dist/commands/console/user.d.ts.map +1 -0
  23. package/dist/commands/console/user.js +431 -0
  24. package/dist/commands/console/user.js.map +1 -0
  25. package/dist/commands/create.d.ts.map +1 -1
  26. package/dist/commands/create.js +4 -1
  27. package/dist/commands/create.js.map +1 -1
  28. package/dist/commands/delete.d.ts.map +1 -1
  29. package/dist/commands/delete.js +4 -1
  30. package/dist/commands/delete.js.map +1 -1
  31. package/dist/commands/index.d.ts +3 -0
  32. package/dist/commands/index.d.ts.map +1 -1
  33. package/dist/commands/index.js +5 -0
  34. package/dist/commands/index.js.map +1 -1
  35. package/dist/commands/init.d.ts.map +1 -1
  36. package/dist/commands/init.js +58 -26
  37. package/dist/commands/init.js.map +1 -1
  38. package/dist/commands/mod.d.ts +19 -0
  39. package/dist/commands/mod.d.ts.map +1 -0
  40. package/dist/commands/mod.js +441 -0
  41. package/dist/commands/mod.js.map +1 -0
  42. package/dist/commands/msg.d.ts +12 -0
  43. package/dist/commands/msg.d.ts.map +1 -0
  44. package/dist/commands/msg.js +273 -0
  45. package/dist/commands/msg.js.map +1 -0
  46. package/dist/commands/player-online.js +4 -2
  47. package/dist/commands/player-online.js.map +1 -1
  48. package/dist/commands/world.d.ts +2 -0
  49. package/dist/commands/world.d.ts.map +1 -1
  50. package/dist/commands/world.js +104 -1
  51. package/dist/commands/world.js.map +1 -1
  52. package/dist/index.js +162 -5
  53. package/dist/index.js.map +1 -1
  54. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +2 -1
  55. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -1
  56. package/dist/infrastructure/adapters/ClackPromptAdapter.js +11 -0
  57. package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -1
  58. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.d.ts +78 -0
  59. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.d.ts.map +1 -0
  60. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.js +392 -0
  61. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.js.map +1 -0
  62. package/dist/infrastructure/adapters/index.d.ts +1 -0
  63. package/dist/infrastructure/adapters/index.d.ts.map +1 -1
  64. package/dist/infrastructure/adapters/index.js +2 -1
  65. package/dist/infrastructure/adapters/index.js.map +1 -1
  66. package/dist/infrastructure/index.d.ts +1 -0
  67. package/dist/infrastructure/index.d.ts.map +1 -1
  68. package/dist/infrastructure/index.js +2 -1
  69. package/dist/infrastructure/index.js.map +1 -1
  70. package/dist/lib/admin-config.d.ts +66 -0
  71. package/dist/lib/admin-config.d.ts.map +1 -0
  72. package/dist/lib/admin-config.js +130 -0
  73. package/dist/lib/admin-config.js.map +1 -0
  74. package/dist/lib/pm2-utils.d.ts +87 -0
  75. package/dist/lib/pm2-utils.d.ts.map +1 -0
  76. package/dist/lib/pm2-utils.js +249 -0
  77. package/dist/lib/pm2-utils.js.map +1 -0
  78. package/dist/lib/prompts/ip-select.d.ts +25 -0
  79. package/dist/lib/prompts/ip-select.d.ts.map +1 -0
  80. package/dist/lib/prompts/ip-select.js +255 -0
  81. package/dist/lib/prompts/ip-select.js.map +1 -0
  82. package/dist/lib/shell.d.ts +2 -0
  83. package/dist/lib/shell.d.ts.map +1 -1
  84. package/dist/lib/shell.js +7 -4
  85. package/dist/lib/shell.js.map +1 -1
  86. package/dist/lib/sudo-utils.d.ts +14 -0
  87. package/dist/lib/sudo-utils.d.ts.map +1 -0
  88. package/dist/lib/sudo-utils.js +53 -0
  89. package/dist/lib/sudo-utils.js.map +1 -0
  90. package/package.json +8 -2
@@ -0,0 +1,515 @@
1
+ import { join } from 'node:path';
2
+ import { existsSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ import { Paths, log, colors, User, Username, YamlUserRepository, } from '@minecraft-docker/shared';
4
+ import { getContainer } from '../../infrastructure/index.js';
5
+ import { AdminConfigManager, } from '../../lib/admin-config.js';
6
+ import { Pm2ServiceManagerAdapter } from '../../infrastructure/adapters/Pm2ServiceManagerAdapter.js';
7
+ import { checkPm2Installation, ECOSYSTEM_CONFIG_FILE, PM2_SERVICE_NAMES, resolveServiceScriptPaths, } from '../../lib/pm2-utils.js';
8
+ /**
9
+ * Minimum required Node.js version
10
+ */
11
+ const MIN_NODE_VERSION = 18;
12
+ /**
13
+ * Check Node.js version meets requirements
14
+ * @returns Object with version check result
15
+ */
16
+ export function checkNodeVersion() {
17
+ const version = process.version.replace('v', '');
18
+ const majorVersion = parseInt(version.split('.')[0] ?? '0', 10);
19
+ return {
20
+ valid: majorVersion >= MIN_NODE_VERSION,
21
+ version,
22
+ required: MIN_NODE_VERSION,
23
+ };
24
+ }
25
+ /**
26
+ * Delete admin images (legacy - now a no-op for backward compatibility)
27
+ * @deprecated Use PM2 process management instead
28
+ */
29
+ export function deleteAdminImages() {
30
+ // In PM2 mode, we don't use Docker images
31
+ // This function is kept for backward compatibility
32
+ return {
33
+ success: true,
34
+ deleted: [],
35
+ errors: [],
36
+ };
37
+ }
38
+ /**
39
+ * Stop admin services using PM2
40
+ */
41
+ async function stopAdminServices(paths) {
42
+ const pm2Adapter = new Pm2ServiceManagerAdapter(paths);
43
+ try {
44
+ // Check if services exist and stop them
45
+ for (const serviceName of [PM2_SERVICE_NAMES.API, PM2_SERVICE_NAMES.CONSOLE]) {
46
+ const exists = await pm2Adapter.exists(serviceName);
47
+ if (exists) {
48
+ await pm2Adapter.delete(serviceName);
49
+ }
50
+ }
51
+ return true;
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ finally {
57
+ pm2Adapter.disconnect();
58
+ }
59
+ }
60
+ /**
61
+ * Generate ecosystem.config.cjs content
62
+ * @param apiPort - API server port
63
+ * @param consolePort - Console server port
64
+ * @param apiScriptPath - Absolute path to API script
65
+ * @param consoleScriptPath - Absolute path to console script
66
+ * @param isDevelopment - Whether we're in development mode
67
+ */
68
+ function generateEcosystemConfig(apiPort, consolePort, apiScriptPath, consoleScriptPath, isDevelopment, nextAuthSecret) {
69
+ const modeComment = isDevelopment
70
+ ? '// NOTE: Development mode - using workspace paths'
71
+ : '// NOTE: Production mode - using node_modules paths';
72
+ return `// ecosystem.config.cjs
73
+ // =============================================================================
74
+ // PM2 Ecosystem Configuration for Minecraft Admin Service
75
+ // =============================================================================
76
+ // This file is auto-generated by 'mcctl console init' command.
77
+ // It configures PM2 to run mcctl-api and mcctl-console services.
78
+ //
79
+ // Usage:
80
+ // pm2 start ecosystem.config.cjs # Start all services
81
+ // pm2 stop all # Stop all services
82
+ // pm2 restart all # Restart all services
83
+ // pm2 logs # View logs
84
+ // pm2 status # Check status
85
+ //
86
+ // Installation:
87
+ // npm install -g pm2
88
+ // pm2 startup # Configure auto-start on boot
89
+ // pm2 save # Save current process list
90
+ // =============================================================================
91
+ ${modeComment}
92
+
93
+ module.exports = {
94
+ apps: [
95
+ {
96
+ name: 'mcctl-api',
97
+ script: '${apiScriptPath}',
98
+ cwd: process.env.MCCTL_ROOT || '.',
99
+ env: {
100
+ NODE_ENV: '${isDevelopment ? 'development' : 'production'}',
101
+ PORT: ${apiPort},
102
+ HOST: '0.0.0.0',
103
+ MCCTL_ROOT: process.env.MCCTL_ROOT || '.',
104
+ },
105
+ instances: 1,
106
+ exec_mode: 'fork',
107
+ watch: false,
108
+ autorestart: true,
109
+ max_memory_restart: '500M',
110
+ },
111
+ {
112
+ name: 'mcctl-console',
113
+ script: '${consoleScriptPath}',
114
+ cwd: process.env.MCCTL_ROOT || '.',
115
+ env: {
116
+ NODE_ENV: '${isDevelopment ? 'development' : 'production'}',
117
+ PORT: ${consolePort},
118
+ HOSTNAME: '0.0.0.0',
119
+ MCCTL_API_URL: 'http://localhost:${apiPort}',
120
+ MCCTL_ROOT: process.env.MCCTL_ROOT || '.',
121
+ NEXTAUTH_SECRET: '${nextAuthSecret}',
122
+ NEXTAUTH_URL: 'http://localhost:${consolePort}',
123
+ },
124
+ instances: 1,
125
+ exec_mode: 'fork',
126
+ watch: false,
127
+ autorestart: true,
128
+ max_memory_restart: '500M',
129
+ },
130
+ ],
131
+ };
132
+ `;
133
+ }
134
+ /**
135
+ * Cleanup existing configuration and services
136
+ * Called when --force flag is used or user confirms reinitialize
137
+ */
138
+ async function cleanupExistingConfig(paths, configManager, prompt) {
139
+ const spinner = prompt.spinner();
140
+ // Step 1: Stop PM2 services
141
+ spinner.start('Stopping console services...');
142
+ const stopResult = await stopAdminServices(paths);
143
+ if (!stopResult) {
144
+ spinner.stop('Warning: Failed to stop some services');
145
+ }
146
+ else {
147
+ spinner.stop('Console services stopped');
148
+ }
149
+ // Step 2: Delete config files
150
+ spinner.start('Cleaning up configuration files...');
151
+ const filesToDelete = [
152
+ configManager.path, // .mcctl-admin.yml
153
+ join(paths.root, 'users.yaml'),
154
+ join(paths.platform, ECOSYSTEM_CONFIG_FILE), // ecosystem.config.cjs
155
+ ];
156
+ for (const file of filesToDelete) {
157
+ if (existsSync(file)) {
158
+ try {
159
+ unlinkSync(file);
160
+ }
161
+ catch {
162
+ // Ignore errors
163
+ }
164
+ }
165
+ }
166
+ spinner.stop('Configuration files cleaned up');
167
+ return true;
168
+ }
169
+ /**
170
+ * Execute console init command
171
+ *
172
+ * Interactive flow:
173
+ * 1. Check Node.js version (>= 18)
174
+ * 2. Check PM2 installation
175
+ * 3. Check if already initialized
176
+ * 4. If exists: prompt for reinitialize confirmation (unless --force)
177
+ * 5. Cleanup existing config if reinitializing
178
+ * 6. Prompt for admin username
179
+ * 7. Prompt for admin password (with confirmation)
180
+ * 8. Prompt for API access mode
181
+ * 9. Generate API key if needed
182
+ * 10. Generate ecosystem.config.cjs
183
+ * 11. Save configuration and user
184
+ */
185
+ export async function consoleInitCommand(options) {
186
+ // Check Node.js version first
187
+ const nodeCheck = checkNodeVersion();
188
+ if (!nodeCheck.valid) {
189
+ log.error(`Node.js version ${nodeCheck.version} is not supported. Minimum required: v${nodeCheck.required}`);
190
+ log.info('Please upgrade Node.js: https://nodejs.org/');
191
+ return 1;
192
+ }
193
+ // Check PM2 installation
194
+ const pm2Check = checkPm2Installation();
195
+ if (!pm2Check.installed) {
196
+ log.error('PM2 is not installed.');
197
+ log.info('Install PM2 globally with: npm install -g pm2');
198
+ return 1;
199
+ }
200
+ const paths = new Paths(options.root);
201
+ // Check if platform is initialized
202
+ if (!paths.isInitialized()) {
203
+ log.error('Platform not initialized. Run: mcctl init');
204
+ return 1;
205
+ }
206
+ const container = getContainer({ rootDir: options.root });
207
+ const prompt = container.promptPort;
208
+ const configManager = new AdminConfigManager(options.root);
209
+ // Check if already initialized
210
+ if (configManager.isInitialized()) {
211
+ const existingConfig = await configManager.load();
212
+ if (existingConfig && !options.force) {
213
+ // Show existing config info
214
+ log.warn('Console Service is already initialized');
215
+ console.log(` Config: ${colors.cyan(configManager.path)}`);
216
+ console.log(` Initialized: ${colors.dim(existingConfig.initialized_at)}`);
217
+ console.log('');
218
+ // Prompt for reinitialize
219
+ try {
220
+ const shouldReinitialize = await prompt.confirm({
221
+ message: 'Existing configuration found. Reinitialize? (This will delete all settings and stop services)',
222
+ initialValue: false,
223
+ });
224
+ if (prompt.isCancel(shouldReinitialize) || !shouldReinitialize) {
225
+ console.log('');
226
+ console.log(' To reinitialize with --force, use:');
227
+ console.log(` ${colors.dim('mcctl console init --force')}`);
228
+ console.log('');
229
+ return 0;
230
+ }
231
+ }
232
+ catch (error) {
233
+ if (prompt.isCancel(error)) {
234
+ return 0;
235
+ }
236
+ throw error;
237
+ }
238
+ }
239
+ // Cleanup existing config (either --force or user confirmed)
240
+ await cleanupExistingConfig(paths, configManager, prompt);
241
+ console.log('');
242
+ }
243
+ try {
244
+ prompt.intro('Initialize Console Service');
245
+ // Show environment info
246
+ console.log(colors.dim(` Node.js: v${nodeCheck.version}`));
247
+ console.log(colors.dim(` PM2: ${pm2Check.version ?? 'installed'}`));
248
+ console.log('');
249
+ // Step 1: Admin username
250
+ const username = await prompt.text({
251
+ message: 'Admin username?',
252
+ placeholder: 'admin',
253
+ initialValue: 'admin',
254
+ validate: (value) => {
255
+ try {
256
+ Username.create(value);
257
+ return undefined;
258
+ }
259
+ catch (error) {
260
+ return error instanceof Error
261
+ ? error.message
262
+ : 'Invalid username format';
263
+ }
264
+ },
265
+ });
266
+ // Step 2: Admin password
267
+ const password = await prompt.password({
268
+ message: 'Admin password?',
269
+ validate: (value) => {
270
+ if (!value || value.length < 8) {
271
+ return 'Password must be at least 8 characters';
272
+ }
273
+ // Check for basic password strength
274
+ if (!/[A-Z]/.test(value)) {
275
+ return 'Password must contain at least one uppercase letter';
276
+ }
277
+ if (!/[a-z]/.test(value)) {
278
+ return 'Password must contain at least one lowercase letter';
279
+ }
280
+ if (!/[0-9]/.test(value)) {
281
+ return 'Password must contain at least one number';
282
+ }
283
+ return undefined;
284
+ },
285
+ });
286
+ // Step 3: Confirm password
287
+ await prompt.password({
288
+ message: 'Confirm password?',
289
+ validate: (value) => {
290
+ if (value !== password) {
291
+ return 'Passwords do not match';
292
+ }
293
+ return undefined;
294
+ },
295
+ });
296
+ // Step 4: API access mode
297
+ const accessMode = await prompt.select({
298
+ message: 'API access mode?',
299
+ options: [
300
+ {
301
+ value: 'internal',
302
+ label: 'internal',
303
+ hint: 'Local network only (default, most secure)',
304
+ },
305
+ {
306
+ value: 'api-key',
307
+ label: 'api-key',
308
+ hint: 'External access with API key',
309
+ },
310
+ {
311
+ value: 'ip-whitelist',
312
+ label: 'ip-whitelist',
313
+ hint: 'IP-based access control',
314
+ },
315
+ {
316
+ value: 'api-key-ip',
317
+ label: 'api-key-ip',
318
+ hint: 'Both API key and IP required',
319
+ },
320
+ {
321
+ value: 'open',
322
+ label: 'open',
323
+ hint: 'No authentication (development only)',
324
+ },
325
+ ],
326
+ initialValue: 'internal',
327
+ });
328
+ // Step 5: Port configuration
329
+ const DEFAULT_API_PORT = 3001;
330
+ const DEFAULT_CONSOLE_PORT = 3000;
331
+ let apiPort = options.apiPort ?? DEFAULT_API_PORT;
332
+ let consolePort = options.consolePort ?? DEFAULT_CONSOLE_PORT;
333
+ // Only ask for ports if not provided via CLI options
334
+ if (!options.apiPort || !options.consolePort) {
335
+ const customPorts = await prompt.confirm({
336
+ message: 'Configure custom ports?',
337
+ initialValue: false,
338
+ });
339
+ if (customPorts) {
340
+ if (!options.apiPort) {
341
+ const apiPortInput = await prompt.text({
342
+ message: 'API server port?',
343
+ placeholder: String(DEFAULT_API_PORT),
344
+ initialValue: String(DEFAULT_API_PORT),
345
+ validate: (value) => {
346
+ const port = parseInt(value, 10);
347
+ if (isNaN(port) || port < 1 || port > 65535) {
348
+ return 'Port must be a number between 1 and 65535';
349
+ }
350
+ return undefined;
351
+ },
352
+ });
353
+ apiPort = parseInt(apiPortInput, 10);
354
+ }
355
+ if (!options.consolePort) {
356
+ const consolePortInput = await prompt.text({
357
+ message: 'Console server port?',
358
+ placeholder: String(DEFAULT_CONSOLE_PORT),
359
+ initialValue: String(DEFAULT_CONSOLE_PORT),
360
+ validate: (value) => {
361
+ const port = parseInt(value, 10);
362
+ if (isNaN(port) || port < 1 || port > 65535) {
363
+ return 'Port must be a number between 1 and 65535';
364
+ }
365
+ if (port === apiPort) {
366
+ return 'Console port must be different from API port';
367
+ }
368
+ return undefined;
369
+ },
370
+ });
371
+ consolePort = parseInt(consolePortInput, 10);
372
+ }
373
+ }
374
+ }
375
+ // Step 6: Generate API key if needed
376
+ let apiKey = null;
377
+ if (accessMode === 'api-key' || accessMode === 'api-key-ip') {
378
+ const spinner = prompt.spinner();
379
+ spinner.start('Generating API key...');
380
+ apiKey = AdminConfigManager.generateApiKey();
381
+ spinner.stop('API key generated');
382
+ }
383
+ // Step 7: Prompt for allowed IPs if needed
384
+ let allowedIps = [];
385
+ if (accessMode === 'ip-whitelist' || accessMode === 'api-key-ip') {
386
+ const ipsInput = await prompt.text({
387
+ message: 'Allowed IPs (comma-separated)?',
388
+ placeholder: '127.0.0.1, 192.168.1.0/24',
389
+ validate: (value) => {
390
+ if (!value.trim()) {
391
+ return 'At least one IP or CIDR range is required';
392
+ }
393
+ // Basic IP/CIDR validation
394
+ const ips = value.split(',').map((ip) => ip.trim());
395
+ for (const ip of ips) {
396
+ // Simple validation - allows IP or CIDR notation
397
+ if (!/^(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?$/.test(ip) &&
398
+ ip !== 'localhost') {
399
+ return `Invalid IP format: ${ip}`;
400
+ }
401
+ }
402
+ return undefined;
403
+ },
404
+ });
405
+ allowedIps = ipsInput.split(',').map((ip) => ip.trim());
406
+ }
407
+ // Step 8: Show warning for open mode
408
+ if (accessMode === 'open') {
409
+ prompt.warn('WARNING: Open mode has no authentication. Use only for local development!');
410
+ const proceed = await prompt.confirm({
411
+ message: 'Are you sure you want to use open mode?',
412
+ initialValue: false,
413
+ });
414
+ if (!proceed) {
415
+ prompt.info('Cancelled. Please run again to choose a different mode.');
416
+ return 0;
417
+ }
418
+ }
419
+ // Step 9: Save user to YAML
420
+ const spinner = prompt.spinner();
421
+ spinner.start('Creating admin user...');
422
+ const usersPath = join(paths.root, 'users.yaml');
423
+ const userRepo = new YamlUserRepository(usersPath);
424
+ // Check if user already exists
425
+ const usernameVO = Username.create(username);
426
+ const existingUser = await userRepo.findByUsername(usernameVO);
427
+ if (existingUser && !options.force) {
428
+ spinner.stop('');
429
+ log.error(`User '${username}' already exists`);
430
+ console.log(' To overwrite, use: mcctl console init --force');
431
+ return 1;
432
+ }
433
+ // Hash password and create user
434
+ const passwordHash = await userRepo.hashPassword(password);
435
+ const adminUser = User.createAdmin(usernameVO, passwordHash);
436
+ // If user exists and force is true, delete the old one first
437
+ if (existingUser && options.force) {
438
+ await userRepo.delete(existingUser.id);
439
+ }
440
+ await userRepo.save(adminUser);
441
+ spinner.stop('Admin user created');
442
+ // Step 10: Generate ecosystem.config.cjs
443
+ spinner.start('Resolving service script paths...');
444
+ // Resolve script paths (development vs production)
445
+ const scriptPaths = resolveServiceScriptPaths(paths.root);
446
+ if (scriptPaths.isDevelopment) {
447
+ spinner.stop('Using development workspace paths');
448
+ console.log(colors.dim(` API: ${scriptPaths.api}`));
449
+ console.log(colors.dim(` Console: ${scriptPaths.console}`));
450
+ }
451
+ else {
452
+ spinner.stop('Using production node_modules paths');
453
+ }
454
+ spinner.start('Generating PM2 ecosystem config...');
455
+ // Generate NextAuth secret for session encryption
456
+ const nextAuthSecret = AdminConfigManager.generateApiKey();
457
+ const ecosystemPath = join(paths.platform, ECOSYSTEM_CONFIG_FILE);
458
+ const ecosystemContent = generateEcosystemConfig(apiPort, consolePort, scriptPaths.api, scriptPaths.console, scriptPaths.isDevelopment, nextAuthSecret);
459
+ writeFileSync(ecosystemPath, ecosystemContent, 'utf-8');
460
+ spinner.stop('PM2 ecosystem config generated');
461
+ // Step 11: Save configuration
462
+ spinner.start('Saving configuration...');
463
+ const config = await configManager.create({
464
+ accessMode,
465
+ apiKey,
466
+ allowedIps,
467
+ apiPort,
468
+ consolePort,
469
+ });
470
+ spinner.stop('Configuration saved');
471
+ // Step 12: Display summary
472
+ console.log('');
473
+ prompt.success('Console Service initialized!');
474
+ console.log('');
475
+ console.log(colors.cyan(' Configuration:'));
476
+ console.log(` Config file: ${colors.dim(configManager.path)}`);
477
+ console.log(` Users file: ${colors.dim(usersPath)}`);
478
+ console.log(` PM2 config: ${colors.dim(ecosystemPath)}`);
479
+ console.log(` Access mode: ${colors.bold(accessMode)}`);
480
+ if (apiKey) {
481
+ console.log('');
482
+ console.log(colors.yellow(' API Key (save this, shown only once):'));
483
+ console.log(` ${colors.bold(apiKey)}`);
484
+ }
485
+ if (allowedIps.length > 0) {
486
+ console.log('');
487
+ console.log(colors.cyan(' Allowed IPs:'));
488
+ for (const ip of allowedIps) {
489
+ console.log(` - ${ip}`);
490
+ }
491
+ }
492
+ console.log('');
493
+ console.log(colors.cyan(' Endpoints:'));
494
+ console.log(` Console: ${colors.bold(`http://localhost:${config.console.port}`)}`);
495
+ console.log(` API: ${colors.bold(`http://localhost:${config.api.port}`)}`);
496
+ console.log('');
497
+ console.log(colors.dim(' Next steps:'));
498
+ console.log(colors.dim(' 1. Start the console service: mcctl console service start'));
499
+ console.log(colors.dim(' 2. Access the console in your browser'));
500
+ console.log('');
501
+ return 0;
502
+ }
503
+ catch (error) {
504
+ // Check if user cancelled
505
+ if (prompt.isCancel(error)) {
506
+ return 0;
507
+ }
508
+ const message = error instanceof Error ? error.message : String(error);
509
+ log.error(message);
510
+ return 1;
511
+ }
512
+ }
513
+ // Backward compatibility alias
514
+ export const adminInitCommand = consoleInitCommand;
515
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/console/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Console Remove Command
3
+ *
4
+ * Completely removes Console Service:
5
+ * - Stop and remove PM2 processes
6
+ * - Delete configuration files (optional)
7
+ * - Delete ecosystem.config.cjs
8
+ */
9
+ /**
10
+ * Console remove command options
11
+ */
12
+ export interface ConsoleRemoveOptions {
13
+ root?: string;
14
+ force?: boolean;
15
+ keepConfig?: boolean;
16
+ }
17
+ /**
18
+ * Execute console remove command
19
+ *
20
+ * Removes all Console Service components:
21
+ * 1. Stop and remove PM2 processes
22
+ * 2. Delete configuration files (unless --keep-config)
23
+ */
24
+ export declare function consoleRemoveCommand(options: ConsoleRemoveOptions): Promise<number>;
25
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/console/remove.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAyFD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAwGjB"}