@minecraft-docker/mcctl 1.6.0 → 1.6.2

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