@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.
- package/dist/commands/console/api.d.ts +19 -0
- package/dist/commands/console/api.d.ts.map +1 -0
- package/dist/commands/console/api.js +399 -0
- package/dist/commands/console/api.js.map +1 -0
- package/dist/commands/console/index.d.ts +10 -0
- package/dist/commands/console/index.d.ts.map +1 -0
- package/dist/commands/console/index.js +12 -0
- package/dist/commands/console/index.js.map +1 -0
- package/dist/commands/console/init.d.ts +47 -0
- package/dist/commands/console/init.d.ts.map +1 -0
- package/dist/commands/console/init.js +515 -0
- package/dist/commands/console/init.js.map +1 -0
- package/dist/commands/console/remove.d.ts +25 -0
- package/dist/commands/console/remove.d.ts.map +1 -0
- package/dist/commands/console/remove.js +189 -0
- package/dist/commands/console/remove.js.map +1 -0
- package/dist/commands/console/service.d.ts +40 -0
- package/dist/commands/console/service.d.ts.map +1 -0
- package/dist/commands/console/service.js +321 -0
- package/dist/commands/console/service.js.map +1 -0
- package/dist/commands/console/user.d.ts +17 -0
- package/dist/commands/console/user.d.ts.map +1 -0
- package/dist/commands/console/user.js +431 -0
- package/dist/commands/console/user.js.map +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +4 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +4 -1
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +5 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +58 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mod.d.ts +19 -0
- package/dist/commands/mod.d.ts.map +1 -0
- package/dist/commands/mod.js +441 -0
- package/dist/commands/mod.js.map +1 -0
- package/dist/commands/msg.d.ts +12 -0
- package/dist/commands/msg.d.ts.map +1 -0
- package/dist/commands/msg.js +273 -0
- package/dist/commands/msg.js.map +1 -0
- package/dist/commands/player-online.js +4 -2
- package/dist/commands/player-online.js.map +1 -1
- package/dist/commands/world.d.ts +2 -0
- package/dist/commands/world.d.ts.map +1 -1
- package/dist/commands/world.js +104 -1
- package/dist/commands/world.js.map +1 -1
- package/dist/index.js +162 -5
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +2 -1
- package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/ClackPromptAdapter.js +11 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -1
- package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.d.ts +78 -0
- package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.js +392 -0
- package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +1 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -1
- package/dist/infrastructure/adapters/index.js +2 -1
- package/dist/infrastructure/adapters/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +1 -0
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +2 -1
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/lib/admin-config.d.ts +66 -0
- package/dist/lib/admin-config.d.ts.map +1 -0
- package/dist/lib/admin-config.js +130 -0
- package/dist/lib/admin-config.js.map +1 -0
- package/dist/lib/pm2-utils.d.ts +87 -0
- package/dist/lib/pm2-utils.d.ts.map +1 -0
- package/dist/lib/pm2-utils.js +249 -0
- package/dist/lib/pm2-utils.js.map +1 -0
- package/dist/lib/prompts/ip-select.d.ts +25 -0
- package/dist/lib/prompts/ip-select.d.ts.map +1 -0
- package/dist/lib/prompts/ip-select.js +255 -0
- package/dist/lib/prompts/ip-select.js.map +1 -0
- package/dist/lib/shell.d.ts +2 -0
- package/dist/lib/shell.d.ts.map +1 -1
- package/dist/lib/shell.js +7 -4
- package/dist/lib/shell.js.map +1 -1
- package/dist/lib/sudo-utils.d.ts +14 -0
- package/dist/lib/sudo-utils.d.ts.map +1 -0
- package/dist/lib/sudo-utils.js +53 -0
- package/dist/lib/sudo-utils.js.map +1 -0
- package/package.json +8 -2
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PM2 Service Manager Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements IServiceManagerPort using PM2 for process management.
|
|
5
|
+
* Manages mcctl-api and mcctl-console services via PM2.
|
|
6
|
+
*/
|
|
7
|
+
import pm2 from 'pm2';
|
|
8
|
+
import { existsSync } from 'node:fs';
|
|
9
|
+
import { ProcessInfo, } from '@minecraft-docker/shared';
|
|
10
|
+
import { getEcosystemConfigPath, getPm2LogPaths, readLogFile, normalizePm2Status, formatPm2Error, PM2_SERVICE_NAMES, } from '../../lib/pm2-utils.js';
|
|
11
|
+
/**
|
|
12
|
+
* Promisified PM2 functions
|
|
13
|
+
*/
|
|
14
|
+
function pm2Connect(noDaemonMode = false) {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
pm2.connect(noDaemonMode, (err) => {
|
|
17
|
+
if (err)
|
|
18
|
+
reject(err);
|
|
19
|
+
else
|
|
20
|
+
resolve();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function pm2List() {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
pm2.list((err, list) => {
|
|
27
|
+
if (err)
|
|
28
|
+
reject(err);
|
|
29
|
+
else
|
|
30
|
+
resolve(list);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function pm2Start(options) {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
pm2.start(options, (err, proc) => {
|
|
37
|
+
if (err)
|
|
38
|
+
reject(err);
|
|
39
|
+
else
|
|
40
|
+
resolve(proc);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function pm2StartConfig(configPath, appName) {
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
if (appName) {
|
|
47
|
+
// Start only the specific app from config
|
|
48
|
+
// PM2's `only` option expects a string (comma-separated app names), not an array
|
|
49
|
+
pm2.start(configPath, { only: appName }, (err, proc) => {
|
|
50
|
+
if (err)
|
|
51
|
+
reject(err);
|
|
52
|
+
else
|
|
53
|
+
resolve(proc);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Start all apps from config
|
|
58
|
+
pm2.start(configPath, (err, proc) => {
|
|
59
|
+
if (err)
|
|
60
|
+
reject(err);
|
|
61
|
+
else
|
|
62
|
+
resolve(proc);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function pm2Stop(name) {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
pm2.stop(name, (err, proc) => {
|
|
70
|
+
if (err)
|
|
71
|
+
reject(err);
|
|
72
|
+
else
|
|
73
|
+
resolve(proc);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function pm2Restart(name) {
|
|
78
|
+
return new Promise((resolve, reject) => {
|
|
79
|
+
pm2.restart(name, (err, proc) => {
|
|
80
|
+
if (err)
|
|
81
|
+
reject(err);
|
|
82
|
+
else
|
|
83
|
+
resolve(proc);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function pm2Delete(name) {
|
|
88
|
+
return new Promise((resolve, reject) => {
|
|
89
|
+
pm2.delete(name, (err, proc) => {
|
|
90
|
+
if (err)
|
|
91
|
+
reject(err);
|
|
92
|
+
else
|
|
93
|
+
resolve(proc);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function pm2Describe(name) {
|
|
98
|
+
return new Promise((resolve, reject) => {
|
|
99
|
+
pm2.describe(name, (err, desc) => {
|
|
100
|
+
if (err)
|
|
101
|
+
reject(err);
|
|
102
|
+
else
|
|
103
|
+
resolve(desc);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function pm2Flush(name) {
|
|
108
|
+
return new Promise((resolve, reject) => {
|
|
109
|
+
pm2.flush(name, (err) => {
|
|
110
|
+
if (err)
|
|
111
|
+
reject(err);
|
|
112
|
+
else
|
|
113
|
+
resolve();
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function pm2Dump() {
|
|
118
|
+
return new Promise((resolve, reject) => {
|
|
119
|
+
pm2.dump((err) => {
|
|
120
|
+
if (err)
|
|
121
|
+
reject(err);
|
|
122
|
+
else
|
|
123
|
+
resolve();
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* PM2 Service Manager Adapter
|
|
129
|
+
* Implements IServiceManagerPort for managing services via PM2
|
|
130
|
+
*/
|
|
131
|
+
export class Pm2ServiceManagerAdapter {
|
|
132
|
+
connected = false;
|
|
133
|
+
paths;
|
|
134
|
+
constructor(paths) {
|
|
135
|
+
this.paths = paths;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Ensure connected to PM2 daemon
|
|
139
|
+
*/
|
|
140
|
+
async ensureConnected() {
|
|
141
|
+
if (!this.connected) {
|
|
142
|
+
await pm2Connect(false);
|
|
143
|
+
this.connected = true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Disconnect from PM2 daemon
|
|
148
|
+
*/
|
|
149
|
+
disconnect() {
|
|
150
|
+
if (this.connected) {
|
|
151
|
+
pm2.disconnect();
|
|
152
|
+
this.connected = false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Wait for a service to become online
|
|
157
|
+
* @param name - Service name
|
|
158
|
+
* @param timeout - Timeout in milliseconds
|
|
159
|
+
*/
|
|
160
|
+
async waitForOnline(name, timeout) {
|
|
161
|
+
const startTime = Date.now();
|
|
162
|
+
while (Date.now() - startTime < timeout) {
|
|
163
|
+
const procs = await pm2List();
|
|
164
|
+
const proc = procs.find((p) => p.name === name);
|
|
165
|
+
if (proc?.pm2_env?.status === 'online') {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`Timeout waiting for ${name} to be ready`);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Start a service by name
|
|
174
|
+
*/
|
|
175
|
+
async start(name, options) {
|
|
176
|
+
try {
|
|
177
|
+
await this.ensureConnected();
|
|
178
|
+
// Check if already running
|
|
179
|
+
const processes = await pm2List();
|
|
180
|
+
const existing = processes.find((p) => p.name === name);
|
|
181
|
+
if (existing && existing.pm2_env?.status === 'online') {
|
|
182
|
+
// Already running, no action needed
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (existing) {
|
|
186
|
+
// Process exists but stopped, restart it
|
|
187
|
+
await pm2Restart(name);
|
|
188
|
+
// Wait for ready if requested (same logic as new process start)
|
|
189
|
+
if (options?.wait) {
|
|
190
|
+
await this.waitForOnline(name, options.waitTimeout || 30000);
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
// Start from ecosystem config
|
|
195
|
+
const configPath = getEcosystemConfigPath(this.paths);
|
|
196
|
+
if (!existsSync(configPath)) {
|
|
197
|
+
throw new Error(`Ecosystem config not found: ${configPath}. Run 'mcctl console init' first.`);
|
|
198
|
+
}
|
|
199
|
+
// Start the specific app from config (not all apps)
|
|
200
|
+
await pm2StartConfig(configPath, name);
|
|
201
|
+
// Wait for ready if requested
|
|
202
|
+
if (options?.wait) {
|
|
203
|
+
await this.waitForOnline(name, options.waitTimeout || 30000);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
throw new Error(`Failed to start ${name}: ${formatPm2Error(error)}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Stop a service by name
|
|
212
|
+
* @throws Error if service not found (as per IServiceManagerPort contract)
|
|
213
|
+
*/
|
|
214
|
+
async stop(name, options) {
|
|
215
|
+
try {
|
|
216
|
+
await this.ensureConnected();
|
|
217
|
+
// Check if process exists - throw if not found (interface contract)
|
|
218
|
+
const exists = await this.exists(name);
|
|
219
|
+
if (!exists) {
|
|
220
|
+
throw new Error(`Service '${name}' not found`);
|
|
221
|
+
}
|
|
222
|
+
if (options?.force) {
|
|
223
|
+
// Force stop: delete the process
|
|
224
|
+
await pm2Delete(name);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// Graceful stop
|
|
228
|
+
await pm2Stop(name);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
throw new Error(`Failed to stop ${name}: ${formatPm2Error(error)}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Restart a service by name
|
|
237
|
+
*/
|
|
238
|
+
async restart(name, options) {
|
|
239
|
+
try {
|
|
240
|
+
await this.ensureConnected();
|
|
241
|
+
// Check if process exists
|
|
242
|
+
const exists = await this.exists(name);
|
|
243
|
+
if (!exists) {
|
|
244
|
+
// Not running, start instead
|
|
245
|
+
await this.start(name, options);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
await pm2Restart(name);
|
|
249
|
+
// Wait for ready if requested
|
|
250
|
+
if (options?.wait) {
|
|
251
|
+
await this.waitForOnline(name, options.waitTimeout || 30000);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
throw new Error(`Failed to restart ${name}: ${formatPm2Error(error)}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Get status of one or all services
|
|
260
|
+
*/
|
|
261
|
+
async status(name) {
|
|
262
|
+
try {
|
|
263
|
+
await this.ensureConnected();
|
|
264
|
+
let processes;
|
|
265
|
+
if (name) {
|
|
266
|
+
try {
|
|
267
|
+
processes = await pm2Describe(name);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// Process not found
|
|
271
|
+
return [];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
processes = await pm2List();
|
|
276
|
+
// Filter to only our services
|
|
277
|
+
processes = processes.filter((p) => p.name === PM2_SERVICE_NAMES.API || p.name === PM2_SERVICE_NAMES.CONSOLE);
|
|
278
|
+
}
|
|
279
|
+
return processes.map((p) => ProcessInfo.create({
|
|
280
|
+
pmId: p.pm_id ?? 0,
|
|
281
|
+
name: p.name ?? 'unknown',
|
|
282
|
+
status: normalizePm2Status(p.pm2_env?.status ?? 'stopped'),
|
|
283
|
+
pid: p.pid,
|
|
284
|
+
cpu: p.monit?.cpu,
|
|
285
|
+
memory: p.monit?.memory,
|
|
286
|
+
uptime: p.pm2_env?.pm_uptime,
|
|
287
|
+
restarts: p.pm2_env?.restart_time,
|
|
288
|
+
interpreter: p.pm2_env?.exec_interpreter,
|
|
289
|
+
scriptPath: p.pm2_env?.pm_exec_path,
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
throw new Error(`Failed to get status: ${formatPm2Error(error)}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get logs for a service
|
|
298
|
+
*/
|
|
299
|
+
async logs(name, options) {
|
|
300
|
+
const logPaths = getPm2LogPaths(this.paths, name);
|
|
301
|
+
const lines = options?.lines ?? 100;
|
|
302
|
+
if (options?.err) {
|
|
303
|
+
return readLogFile(logPaths.error, lines);
|
|
304
|
+
}
|
|
305
|
+
// Return combined logs
|
|
306
|
+
const outLogs = readLogFile(logPaths.output, lines);
|
|
307
|
+
const errLogs = readLogFile(logPaths.error, lines);
|
|
308
|
+
if (outLogs && errLogs) {
|
|
309
|
+
return `=== stdout ===\n${outLogs}\n\n=== stderr ===\n${errLogs}`;
|
|
310
|
+
}
|
|
311
|
+
return outLogs || errLogs || 'No logs available';
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Delete a service from PM2
|
|
315
|
+
*/
|
|
316
|
+
async delete(name) {
|
|
317
|
+
try {
|
|
318
|
+
await this.ensureConnected();
|
|
319
|
+
const exists = await this.exists(name);
|
|
320
|
+
if (!exists) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
await pm2Delete(name);
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
throw new Error(`Failed to delete ${name}: ${formatPm2Error(error)}`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Reload ecosystem configuration
|
|
331
|
+
*/
|
|
332
|
+
async reload(configPath) {
|
|
333
|
+
try {
|
|
334
|
+
await this.ensureConnected();
|
|
335
|
+
if (!existsSync(configPath)) {
|
|
336
|
+
throw new Error(`Config file not found: ${configPath}`);
|
|
337
|
+
}
|
|
338
|
+
// Reload by restarting from config
|
|
339
|
+
await pm2StartConfig(configPath);
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
throw new Error(`Failed to reload config: ${formatPm2Error(error)}`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Check if a service exists in PM2
|
|
347
|
+
*/
|
|
348
|
+
async exists(name) {
|
|
349
|
+
try {
|
|
350
|
+
await this.ensureConnected();
|
|
351
|
+
const processes = await pm2List();
|
|
352
|
+
return processes.some((p) => p.name === name);
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Flush logs for a service
|
|
360
|
+
*/
|
|
361
|
+
async flush(name) {
|
|
362
|
+
try {
|
|
363
|
+
await this.ensureConnected();
|
|
364
|
+
await pm2Flush(name);
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
throw new Error(`Failed to flush logs for ${name}: ${formatPm2Error(error)}`);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Save current process list
|
|
372
|
+
*/
|
|
373
|
+
async save() {
|
|
374
|
+
try {
|
|
375
|
+
await this.ensureConnected();
|
|
376
|
+
await pm2Dump();
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
throw new Error(`Failed to save process list: ${formatPm2Error(error)}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Resurrect saved processes
|
|
384
|
+
* Note: This is typically done via 'pm2 resurrect' command
|
|
385
|
+
*/
|
|
386
|
+
async resurrect() {
|
|
387
|
+
// PM2 doesn't have a direct API for resurrect
|
|
388
|
+
// It's typically done via CLI: pm2 resurrect
|
|
389
|
+
throw new Error('Resurrect is not supported via API. Use: pm2 resurrect');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=Pm2ServiceManagerAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pm2ServiceManagerAdapter.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/Pm2ServiceManagerAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { ClackPromptAdapter } from './ClackPromptAdapter.js';
|
|
2
|
+
export { Pm2ServiceManagerAdapter } from './Pm2ServiceManagerAdapter.js';
|
|
2
3
|
export { ShellAdapter, ServerRepository, WorldRepository, DocsAdapter, } from '@minecraft-docker/shared';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
// CLI-specific
|
|
1
|
+
// CLI-specific adapters
|
|
2
2
|
export { ClackPromptAdapter } from './ClackPromptAdapter.js';
|
|
3
|
+
export { Pm2ServiceManagerAdapter } from './Pm2ServiceManagerAdapter.js';
|
|
3
4
|
// Re-export shared adapters for backward compatibility
|
|
4
5
|
export { ShellAdapter, ServerRepository, WorldRepository, DocsAdapter, } from '@minecraft-docker/shared';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,uDAAuD;AACvD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ClackPromptAdapter } from './adapters/ClackPromptAdapter.js';
|
|
2
|
+
export { Pm2ServiceManagerAdapter } from './adapters/Pm2ServiceManagerAdapter.js';
|
|
2
3
|
export { ShellAdapter, ServerRepository, WorldRepository, DocsAdapter, } from '@minecraft-docker/shared';
|
|
3
4
|
export { Container, getContainer, resetContainer } from './di/index.js';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
// CLI-specific
|
|
1
|
+
// CLI-specific adapters
|
|
2
2
|
export { ClackPromptAdapter } from './adapters/ClackPromptAdapter.js';
|
|
3
|
+
export { Pm2ServiceManagerAdapter } from './adapters/Pm2ServiceManagerAdapter.js';
|
|
3
4
|
// Re-export shared adapters for backward compatibility
|
|
4
5
|
export { ShellAdapter, ServerRepository, WorldRepository, DocsAdapter, } from '@minecraft-docker/shared';
|
|
5
6
|
// DI Container (CLI-specific)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,uDAAuD;AACvD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Access Mode
|
|
3
|
+
* Determines how the Admin API can be accessed
|
|
4
|
+
*/
|
|
5
|
+
export type ApiAccessMode = 'internal' | 'api-key' | 'ip-whitelist' | 'api-key-ip' | 'open';
|
|
6
|
+
/**
|
|
7
|
+
* Admin Configuration structure stored in YAML
|
|
8
|
+
*/
|
|
9
|
+
export interface AdminConfig {
|
|
10
|
+
version: string;
|
|
11
|
+
api: {
|
|
12
|
+
access_mode: ApiAccessMode;
|
|
13
|
+
port: number;
|
|
14
|
+
api_key: string | null;
|
|
15
|
+
allowed_ips: string[];
|
|
16
|
+
};
|
|
17
|
+
console: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
port: number;
|
|
20
|
+
};
|
|
21
|
+
initialized_at: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* AdminConfigManager
|
|
25
|
+
* Manages .mcctl-admin.yml configuration file
|
|
26
|
+
*/
|
|
27
|
+
export declare class AdminConfigManager {
|
|
28
|
+
private readonly configPath;
|
|
29
|
+
constructor(rootDir?: string);
|
|
30
|
+
/**
|
|
31
|
+
* Get the configuration file path
|
|
32
|
+
*/
|
|
33
|
+
get path(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Check if admin service is already initialized
|
|
36
|
+
*/
|
|
37
|
+
isInitialized(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Load existing configuration
|
|
40
|
+
*/
|
|
41
|
+
load(): Promise<AdminConfig | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Save configuration to file
|
|
44
|
+
*/
|
|
45
|
+
save(config: AdminConfig): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Create a new configuration with specified options
|
|
48
|
+
*/
|
|
49
|
+
create(options: {
|
|
50
|
+
accessMode: ApiAccessMode;
|
|
51
|
+
apiKey?: string | null;
|
|
52
|
+
allowedIps?: string[];
|
|
53
|
+
apiPort?: number;
|
|
54
|
+
consolePort?: number;
|
|
55
|
+
consoleEnabled?: boolean;
|
|
56
|
+
}): Promise<AdminConfig>;
|
|
57
|
+
/**
|
|
58
|
+
* Generate a new API key with mctk_ prefix
|
|
59
|
+
*/
|
|
60
|
+
static generateApiKey(): string;
|
|
61
|
+
/**
|
|
62
|
+
* Validate an API key format
|
|
63
|
+
*/
|
|
64
|
+
static isValidApiKey(key: string): boolean;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=admin-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../src/lib/admin-config.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,SAAS,GACT,cAAc,GACd,YAAY,GACZ,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE;QACH,WAAW,EAAE,aAAa,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;CACxB;AAoBD;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,CAAC,EAAE,MAAM;IAK5B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAazC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B9C;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE;QACpB,UAAU,EAAE,aAAa,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBxB;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM;IAS/B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG3C"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import * as yaml from 'js-yaml';
|
|
5
|
+
import { randomBytes } from 'node:crypto';
|
|
6
|
+
import { Paths } from '@minecraft-docker/shared';
|
|
7
|
+
/**
|
|
8
|
+
* Default configuration values
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_CONFIG = {
|
|
11
|
+
version: '1.0',
|
|
12
|
+
api: {
|
|
13
|
+
access_mode: 'internal',
|
|
14
|
+
port: 3001,
|
|
15
|
+
api_key: null,
|
|
16
|
+
allowed_ips: [],
|
|
17
|
+
},
|
|
18
|
+
console: {
|
|
19
|
+
enabled: true,
|
|
20
|
+
port: 3000,
|
|
21
|
+
},
|
|
22
|
+
initialized_at: new Date().toISOString(),
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* AdminConfigManager
|
|
26
|
+
* Manages .mcctl-admin.yml configuration file
|
|
27
|
+
*/
|
|
28
|
+
export class AdminConfigManager {
|
|
29
|
+
configPath;
|
|
30
|
+
constructor(rootDir) {
|
|
31
|
+
const paths = new Paths(rootDir);
|
|
32
|
+
this.configPath = join(paths.root, '.mcctl-admin.yml');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the configuration file path
|
|
36
|
+
*/
|
|
37
|
+
get path() {
|
|
38
|
+
return this.configPath;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if admin service is already initialized
|
|
42
|
+
*/
|
|
43
|
+
isInitialized() {
|
|
44
|
+
return existsSync(this.configPath);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load existing configuration
|
|
48
|
+
*/
|
|
49
|
+
async load() {
|
|
50
|
+
if (!this.isInitialized()) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const content = await readFile(this.configPath, 'utf-8');
|
|
55
|
+
return yaml.load(content);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Save configuration to file
|
|
63
|
+
*/
|
|
64
|
+
async save(config) {
|
|
65
|
+
// Ensure directory exists
|
|
66
|
+
const dir = dirname(this.configPath);
|
|
67
|
+
if (!existsSync(dir)) {
|
|
68
|
+
await mkdir(dir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
const yamlContent = yaml.dump(config, {
|
|
71
|
+
indent: 2,
|
|
72
|
+
lineWidth: -1,
|
|
73
|
+
quotingType: '"',
|
|
74
|
+
forceQuotes: false,
|
|
75
|
+
});
|
|
76
|
+
// Add header comment
|
|
77
|
+
const header = `# mcctl Admin Service Configuration
|
|
78
|
+
# Generated by: mcctl admin init
|
|
79
|
+
# Do not edit this file manually unless you know what you are doing.
|
|
80
|
+
#
|
|
81
|
+
# API Access Modes:
|
|
82
|
+
# internal - Docker network only (default, most secure)
|
|
83
|
+
# api-key - External access with API key
|
|
84
|
+
# ip-whitelist - IP-based access control
|
|
85
|
+
# api-key-ip - Requires both API key and IP match
|
|
86
|
+
# open - No authentication (development only, NOT for production)
|
|
87
|
+
#
|
|
88
|
+
`;
|
|
89
|
+
await writeFile(this.configPath, header + yamlContent, 'utf-8');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create a new configuration with specified options
|
|
93
|
+
*/
|
|
94
|
+
async create(options) {
|
|
95
|
+
const config = {
|
|
96
|
+
...DEFAULT_CONFIG,
|
|
97
|
+
api: {
|
|
98
|
+
access_mode: options.accessMode,
|
|
99
|
+
port: options.apiPort ?? DEFAULT_CONFIG.api.port,
|
|
100
|
+
api_key: options.apiKey ?? null,
|
|
101
|
+
allowed_ips: options.allowedIps ?? [],
|
|
102
|
+
},
|
|
103
|
+
console: {
|
|
104
|
+
enabled: options.consoleEnabled ?? DEFAULT_CONFIG.console.enabled,
|
|
105
|
+
port: options.consolePort ?? DEFAULT_CONFIG.console.port,
|
|
106
|
+
},
|
|
107
|
+
initialized_at: new Date().toISOString(),
|
|
108
|
+
};
|
|
109
|
+
await this.save(config);
|
|
110
|
+
return config;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Generate a new API key with mctk_ prefix
|
|
114
|
+
*/
|
|
115
|
+
static generateApiKey() {
|
|
116
|
+
// Generate 32 bytes of random data and encode as base64url
|
|
117
|
+
const randomPart = randomBytes(32)
|
|
118
|
+
.toString('base64url')
|
|
119
|
+
.replace(/[^a-zA-Z0-9]/g, '')
|
|
120
|
+
.substring(0, 40);
|
|
121
|
+
return `mctk_${randomPart}`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validate an API key format
|
|
125
|
+
*/
|
|
126
|
+
static isValidApiKey(key) {
|
|
127
|
+
return /^mctk_[a-zA-Z0-9]{20,}$/.test(key);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=admin-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-config.js","sourceRoot":"","sources":["../../src/lib/admin-config.ts"],"names":[],"mappings":"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"}
|