@minecraft-docker/mcctl 1.7.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -20
- package/dist/commands/backup.d.ts +0 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +2 -28
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/console/api.js +2 -2
- package/dist/commands/console/init.js +2 -2
- package/dist/commands/console/service.js +2 -2
- package/dist/commands/index.d.ts +0 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +0 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -342
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +10 -42
- package/dist/index.js.map +1 -1
- package/dist/lib/admin-config.js +2 -2
- package/package.json +9 -15
- package/templates/.env.example +6 -6
- package/templates/ecosystem.config.js +3 -3
- package/CHANGELOG.md +0 -278
- package/dist/commands/update.d.ts +0 -13
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js +0 -117
- package/dist/commands/update.js.map +0 -1
- package/dist/lib/update-checker.d.ts +0 -28
- package/dist/lib/update-checker.d.ts.map +0 -1
- package/dist/lib/update-checker.js +0 -210
- package/dist/lib/update-checker.js.map +0 -1
- package/templates/gitignore.template +0 -70
- package/templates/servers/_template/logs/.gitkeep +0 -0
- package/templates/servers/compose.template.yml +0 -8
- /package/{templates/servers/_template/data → scripts}/.gitkeep +0 -0
package/README.md
CHANGED
|
@@ -73,26 +73,27 @@ mcctl logs myserver
|
|
|
73
73
|
|
|
74
74
|
## Changelog
|
|
75
75
|
|
|
76
|
-
### v1.
|
|
77
|
-
- **
|
|
78
|
-
- **
|
|
79
|
-
- **
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- **
|
|
93
|
-
|
|
94
|
-
### v1.
|
|
95
|
-
- **
|
|
76
|
+
### v1.6.3 (2026-01-30)
|
|
77
|
+
- **fix**: npm publish support for `@minecraft-docker/mod-source-modrinth` package
|
|
78
|
+
- **docs**: Added project badges to README
|
|
79
|
+
- **docs**: Created development guide (EN/KO)
|
|
80
|
+
- **ci**: Added mod-source-modrinth to release workflow
|
|
81
|
+
|
|
82
|
+
### v1.6.2 (2026-01-28)
|
|
83
|
+
- **feat**: Improved API, E2E tests, and documentation
|
|
84
|
+
- **fix**: Various bug fixes and stability improvements
|
|
85
|
+
|
|
86
|
+
### v1.6.0 (2026-01-24)
|
|
87
|
+
- **feat**: Added mod management commands (`mcctl mod search/add/remove`)
|
|
88
|
+
- **feat**: Modrinth integration for mod search and installation
|
|
89
|
+
|
|
90
|
+
### v1.5.0 (2026-01-21)
|
|
91
|
+
- **feat**: Added player management with Mojang API integration
|
|
92
|
+
- **feat**: Local player cache for offline UUID lookup
|
|
93
|
+
|
|
94
|
+
### v1.4.0 (2026-01-20)
|
|
95
|
+
- **feat**: World management commands (`mcctl world new/assign/release`)
|
|
96
|
+
- **feat**: Server backup and restore functionality
|
|
96
97
|
|
|
97
98
|
[Full Changelog](https://github.com/smallmiro/minecraft-server-manager/releases)
|
|
98
99
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BlF"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Paths,
|
|
1
|
+
import { Paths, log, colors } from '@minecraft-docker/shared';
|
|
2
2
|
import { getContainer } from '../infrastructure/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Execute backup command
|
|
@@ -13,8 +13,6 @@ export async function backupCommand(options) {
|
|
|
13
13
|
const container = getContainer(options.root);
|
|
14
14
|
const subCommand = options.subCommand ?? 'status';
|
|
15
15
|
switch (subCommand) {
|
|
16
|
-
case 'init':
|
|
17
|
-
return backupInit(paths, container, options);
|
|
18
16
|
case 'status':
|
|
19
17
|
return backupStatus(container, options);
|
|
20
18
|
case 'push':
|
|
@@ -25,34 +23,10 @@ export async function backupCommand(options) {
|
|
|
25
23
|
return backupRestore(container, options);
|
|
26
24
|
default:
|
|
27
25
|
log.error(`Unknown backup subcommand: ${subCommand}`);
|
|
28
|
-
console.log('Usage: mcctl backup [
|
|
26
|
+
console.log('Usage: mcctl backup [status|push|history|restore]');
|
|
29
27
|
return 1;
|
|
30
28
|
}
|
|
31
29
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Initialize backup configuration
|
|
34
|
-
*/
|
|
35
|
-
async function backupInit(paths, container, options) {
|
|
36
|
-
const useCase = container.backupUseCase;
|
|
37
|
-
const config = new Config(paths);
|
|
38
|
-
// Set callback to save configuration to .env
|
|
39
|
-
useCase.setConfigSaveCallback((envConfig) => {
|
|
40
|
-
config.updateEnv(envConfig);
|
|
41
|
-
});
|
|
42
|
-
try {
|
|
43
|
-
const result = await useCase.init(options.force);
|
|
44
|
-
return result.success ? 0 : 1;
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
const prompt = container.promptPort;
|
|
48
|
-
if (prompt.isCancel(error)) {
|
|
49
|
-
return 0;
|
|
50
|
-
}
|
|
51
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
52
|
-
log.error(message);
|
|
53
|
-
return 1;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
30
|
/**
|
|
57
31
|
* Show backup status
|
|
58
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ function loadConfig() {
|
|
|
21
21
|
return {
|
|
22
22
|
accessMode: 'internal',
|
|
23
23
|
apiKey: generateApiKey(),
|
|
24
|
-
port:
|
|
24
|
+
port: 3001,
|
|
25
25
|
ipWhitelist: [],
|
|
26
26
|
};
|
|
27
27
|
}
|
|
@@ -33,7 +33,7 @@ function loadConfig() {
|
|
|
33
33
|
return {
|
|
34
34
|
accessMode: 'internal',
|
|
35
35
|
apiKey: generateApiKey(),
|
|
36
|
-
port:
|
|
36
|
+
port: 3001,
|
|
37
37
|
ipWhitelist: [],
|
|
38
38
|
};
|
|
39
39
|
}
|
|
@@ -326,8 +326,8 @@ export async function consoleInitCommand(options) {
|
|
|
326
326
|
initialValue: 'internal',
|
|
327
327
|
});
|
|
328
328
|
// Step 5: Port configuration
|
|
329
|
-
const DEFAULT_API_PORT =
|
|
330
|
-
const DEFAULT_CONSOLE_PORT =
|
|
329
|
+
const DEFAULT_API_PORT = 3001;
|
|
330
|
+
const DEFAULT_CONSOLE_PORT = 3000;
|
|
331
331
|
let apiPort = options.apiPort ?? DEFAULT_API_PORT;
|
|
332
332
|
let consolePort = options.consolePort ?? DEFAULT_CONSOLE_PORT;
|
|
333
333
|
// Only ask for ports if not provided via CLI options
|
|
@@ -12,8 +12,8 @@ import { Paths, colors, log, ServiceStatusEnum } from '@minecraft-docker/shared'
|
|
|
12
12
|
import { spawn } from 'node:child_process';
|
|
13
13
|
import { Pm2ServiceManagerAdapter } from '../../infrastructure/adapters/Pm2ServiceManagerAdapter.js';
|
|
14
14
|
import { checkPm2Installation, ecosystemConfigExists, PM2_SERVICE_NAMES, } from '../../lib/pm2-utils.js';
|
|
15
|
-
const API_PORT_DEFAULT =
|
|
16
|
-
const CONSOLE_PORT_DEFAULT =
|
|
15
|
+
const API_PORT_DEFAULT = 3001;
|
|
16
|
+
const CONSOLE_PORT_DEFAULT = 3000;
|
|
17
17
|
/**
|
|
18
18
|
* Check PM2 is installed
|
|
19
19
|
*/
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -16,7 +16,6 @@ export { playerOnlineCommand, type PlayerOnlineCommandOptions } from './player-o
|
|
|
16
16
|
export { playerCommand, type PlayerCommandOptions } from './player.js';
|
|
17
17
|
export { migrateCommand, type MigrateCommandOptions } from './migrate.js';
|
|
18
18
|
export { modCommand, type ModCommandOptions } from './mod.js';
|
|
19
|
-
export { updateCommand, type UpdateCommandOptions } from './update.js';
|
|
20
19
|
export { consoleInitCommand, consoleServiceCommand, consoleUserCommand, consoleApiCommand, consoleRemoveCommand, deleteAdminImages, type ConsoleInitOptions, type ConsoleServiceOptions, type ConsoleUserCommandOptions, type ConsoleApiCommandOptions, type ConsoleRemoveOptions, } from './console/index.js';
|
|
21
20
|
export { adminInitCommand, adminServiceCommand, adminUserCommand, adminApiCommand, type AdminInitOptions, type AdminServiceOptions, type AdminUserCommandOptions, type AdminApiCommandOptions, } from './console/index.js';
|
|
22
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG9D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -16,7 +16,6 @@ export { playerOnlineCommand } from './player-online.js';
|
|
|
16
16
|
export { playerCommand } from './player.js';
|
|
17
17
|
export { migrateCommand } from './migrate.js';
|
|
18
18
|
export { modCommand } from './mod.js';
|
|
19
|
-
export { updateCommand } from './update.js';
|
|
20
19
|
// Console commands (new names)
|
|
21
20
|
export { consoleInitCommand, consoleServiceCommand, consoleUserCommand, consoleApiCommand, consoleRemoveCommand, deleteAdminImages, } from './console/index.js';
|
|
22
21
|
// Backward compatibility aliases (deprecated - use console* instead)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAyB,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAA4B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAmC,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAyB,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAA4B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAmC,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAE9D,+BAA+B;AAC/B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAMlB,MAAM,oBAAoB,CAAC;AAE5B,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAKhB,MAAM,oBAAoB,CAAC"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqPlB"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, copyFileSync, readFileSync, writeFileSync
|
|
1
|
+
import { existsSync, mkdirSync, copyFileSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import { execSync } from 'node:child_process';
|
|
4
4
|
import { Paths, Config, log, colors, checkDocker, checkDockerCompose } from '@minecraft-docker/shared';
|
|
5
5
|
import { selectHostIPs, getNetworkInterfaces } from '../lib/prompts/ip-select.js';
|
|
6
|
-
import { multiselect, text, select, confirm, password, isCancel } from '@clack/prompts';
|
|
7
6
|
/**
|
|
8
7
|
* Initialize the platform
|
|
9
8
|
*/
|
|
@@ -19,16 +18,10 @@ export async function initCommand(options) {
|
|
|
19
18
|
console.log('');
|
|
20
19
|
// Check if already initialized
|
|
21
20
|
if (paths.isInitialized()) {
|
|
22
|
-
if (options.reconfigure) {
|
|
23
|
-
return reconfigureCommand(paths, config);
|
|
24
|
-
}
|
|
25
21
|
log.warn('Platform is already initialized');
|
|
26
22
|
console.log(` Config: ${paths.configFile}`);
|
|
27
23
|
console.log(` Compose: ${paths.composeFile}`);
|
|
28
24
|
console.log('');
|
|
29
|
-
console.log(' To reconfigure settings:');
|
|
30
|
-
console.log(` ${colors.cyan('mcctl init --reconfigure')}`);
|
|
31
|
-
console.log('');
|
|
32
25
|
console.log(' To reinitialize, delete the data directory first:');
|
|
33
26
|
console.log(` ${colors.dim(`rm -rf ${paths.root}`)}`);
|
|
34
27
|
console.log('');
|
|
@@ -88,8 +81,8 @@ export async function initCommand(options) {
|
|
|
88
81
|
const templateFiles = [
|
|
89
82
|
{ src: 'docker-compose.yml', dest: 'docker-compose.yml' },
|
|
90
83
|
{ src: '.env.example', dest: '.env' },
|
|
91
|
-
{ src: 'gitignore
|
|
92
|
-
{ src: 'servers/compose.
|
|
84
|
+
{ src: '.gitignore', dest: '.gitignore' },
|
|
85
|
+
{ src: 'servers/compose.yml', dest: 'servers/compose.yml' },
|
|
93
86
|
{ src: 'servers/_template/docker-compose.yml', dest: 'servers/_template/docker-compose.yml' },
|
|
94
87
|
{ src: 'servers/_template/config.env', dest: 'servers/_template/config.env' },
|
|
95
88
|
];
|
|
@@ -222,336 +215,4 @@ export async function initCommand(options) {
|
|
|
222
215
|
console.log('');
|
|
223
216
|
return 0;
|
|
224
217
|
}
|
|
225
|
-
/**
|
|
226
|
-
* Reconfigure existing platform settings
|
|
227
|
-
*/
|
|
228
|
-
async function reconfigureCommand(paths, config) {
|
|
229
|
-
console.log('');
|
|
230
|
-
console.log(colors.bold('═'.repeat(60)));
|
|
231
|
-
console.log(colors.bold(' Minecraft Server Platform - Reconfigure'));
|
|
232
|
-
console.log(colors.bold('═'.repeat(60)));
|
|
233
|
-
console.log('');
|
|
234
|
-
// Load current settings
|
|
235
|
-
const envConfig = config.loadEnv();
|
|
236
|
-
const mcctlConfig = config.load();
|
|
237
|
-
if (!mcctlConfig) {
|
|
238
|
-
log.error('Configuration file not found');
|
|
239
|
-
return 1;
|
|
240
|
-
}
|
|
241
|
-
// Display current settings
|
|
242
|
-
const displayIPs = envConfig.HOST_IPS || envConfig.HOST_IP || 'auto-detect';
|
|
243
|
-
console.log(colors.cyan('Current Settings:'));
|
|
244
|
-
console.log('');
|
|
245
|
-
console.log(' Network:');
|
|
246
|
-
console.log(` HOST_IP(s): ${colors.yellow(displayIPs)}`);
|
|
247
|
-
console.log(` Timezone: ${colors.yellow(envConfig.TZ || 'system default')}`);
|
|
248
|
-
console.log('');
|
|
249
|
-
console.log(' Defaults:');
|
|
250
|
-
console.log(` Default Memory: ${colors.yellow(envConfig.DEFAULT_MEMORY || '4G')}`);
|
|
251
|
-
console.log(` Default Type: ${colors.yellow(mcctlConfig.defaultType)}`);
|
|
252
|
-
console.log(` Default Version: ${colors.yellow(mcctlConfig.defaultVersion)}`);
|
|
253
|
-
console.log('');
|
|
254
|
-
console.log(' Behavior:');
|
|
255
|
-
console.log(` Auto Start: ${colors.yellow(String(mcctlConfig.autoStart))}`);
|
|
256
|
-
console.log(` Avahi Enabled: ${colors.yellow(String(mcctlConfig.avahiEnabled))}`);
|
|
257
|
-
console.log('');
|
|
258
|
-
console.log(' Security:');
|
|
259
|
-
console.log(` RCON Password: ${colors.yellow(envConfig.RCON_PASSWORD ? '********' : 'not set')}`);
|
|
260
|
-
console.log('');
|
|
261
|
-
// Build settings list
|
|
262
|
-
const settings = [
|
|
263
|
-
{
|
|
264
|
-
key: 'HOST_IP',
|
|
265
|
-
label: 'Host IP(s)',
|
|
266
|
-
source: 'env',
|
|
267
|
-
currentValue: displayIPs,
|
|
268
|
-
type: 'ip',
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
key: 'DEFAULT_MEMORY',
|
|
272
|
-
label: 'Default Memory',
|
|
273
|
-
source: 'env',
|
|
274
|
-
currentValue: envConfig.DEFAULT_MEMORY || '4G',
|
|
275
|
-
type: 'text',
|
|
276
|
-
validate: (value) => {
|
|
277
|
-
if (!/^\d+[MG]$/i.test(value)) {
|
|
278
|
-
return 'Invalid format. Use format like 4G or 2048M';
|
|
279
|
-
}
|
|
280
|
-
return undefined;
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
key: 'TZ',
|
|
285
|
-
label: 'Timezone',
|
|
286
|
-
source: 'env',
|
|
287
|
-
currentValue: envConfig.TZ || 'system default',
|
|
288
|
-
type: 'text',
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
key: 'defaultType',
|
|
292
|
-
label: 'Default Server Type',
|
|
293
|
-
source: 'config',
|
|
294
|
-
currentValue: mcctlConfig.defaultType,
|
|
295
|
-
type: 'select',
|
|
296
|
-
options: [
|
|
297
|
-
{ value: 'PAPER', label: 'Paper (Recommended)' },
|
|
298
|
-
{ value: 'VANILLA', label: 'Vanilla' },
|
|
299
|
-
{ value: 'FORGE', label: 'Forge' },
|
|
300
|
-
{ value: 'FABRIC', label: 'Fabric' },
|
|
301
|
-
{ value: 'SPIGOT', label: 'Spigot' },
|
|
302
|
-
{ value: 'BUKKIT', label: 'Bukkit' },
|
|
303
|
-
],
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
key: 'defaultVersion',
|
|
307
|
-
label: 'Default MC Version',
|
|
308
|
-
source: 'config',
|
|
309
|
-
currentValue: mcctlConfig.defaultVersion,
|
|
310
|
-
type: 'text',
|
|
311
|
-
validate: (value) => {
|
|
312
|
-
if (!/^\d+\.\d+(\.\d+)?$/.test(value)) {
|
|
313
|
-
return 'Invalid version format. Use format like 1.21.1';
|
|
314
|
-
}
|
|
315
|
-
return undefined;
|
|
316
|
-
},
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
key: 'autoStart',
|
|
320
|
-
label: 'Auto Start Servers',
|
|
321
|
-
source: 'config',
|
|
322
|
-
currentValue: String(mcctlConfig.autoStart),
|
|
323
|
-
type: 'confirm',
|
|
324
|
-
},
|
|
325
|
-
{
|
|
326
|
-
key: 'avahiEnabled',
|
|
327
|
-
label: 'Avahi/mDNS Enabled',
|
|
328
|
-
source: 'config',
|
|
329
|
-
currentValue: String(mcctlConfig.avahiEnabled),
|
|
330
|
-
type: 'confirm',
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
key: 'RCON_PASSWORD',
|
|
334
|
-
label: 'RCON Password',
|
|
335
|
-
source: 'env',
|
|
336
|
-
currentValue: envConfig.RCON_PASSWORD ? '********' : 'not set',
|
|
337
|
-
type: 'password',
|
|
338
|
-
validate: (value) => {
|
|
339
|
-
if (value.length < 8) {
|
|
340
|
-
return 'Password must be at least 8 characters';
|
|
341
|
-
}
|
|
342
|
-
return undefined;
|
|
343
|
-
},
|
|
344
|
-
},
|
|
345
|
-
];
|
|
346
|
-
// Multiselect for settings to change
|
|
347
|
-
const selectedKeys = await multiselect({
|
|
348
|
-
message: 'Select settings to change:',
|
|
349
|
-
options: settings.map((s) => ({
|
|
350
|
-
value: s.key,
|
|
351
|
-
label: s.label,
|
|
352
|
-
hint: `Current: ${s.currentValue}`,
|
|
353
|
-
})),
|
|
354
|
-
required: false,
|
|
355
|
-
});
|
|
356
|
-
if (isCancel(selectedKeys) || selectedKeys.length === 0) {
|
|
357
|
-
console.log('');
|
|
358
|
-
log.info('No changes made');
|
|
359
|
-
return 0;
|
|
360
|
-
}
|
|
361
|
-
const keysToChange = selectedKeys;
|
|
362
|
-
const envUpdates = {};
|
|
363
|
-
const configUpdates = {};
|
|
364
|
-
let ipChanged = false;
|
|
365
|
-
let newHostIPs = '';
|
|
366
|
-
// Prompt for each selected setting
|
|
367
|
-
for (const key of keysToChange) {
|
|
368
|
-
const setting = settings.find((s) => s.key === key);
|
|
369
|
-
if (!setting)
|
|
370
|
-
continue;
|
|
371
|
-
console.log('');
|
|
372
|
-
if (setting.type === 'ip') {
|
|
373
|
-
// Use the existing IP selection prompt
|
|
374
|
-
const selectedIPs = await selectHostIPs();
|
|
375
|
-
if (isCancel(selectedIPs) || selectedIPs === null) {
|
|
376
|
-
continue;
|
|
377
|
-
}
|
|
378
|
-
const ipList = selectedIPs.split(',');
|
|
379
|
-
const primaryIP = ipList[0];
|
|
380
|
-
envUpdates['HOST_IP'] = primaryIP;
|
|
381
|
-
if (ipList.length > 1) {
|
|
382
|
-
envUpdates['HOST_IPS'] = selectedIPs;
|
|
383
|
-
}
|
|
384
|
-
newHostIPs = selectedIPs;
|
|
385
|
-
ipChanged = true;
|
|
386
|
-
console.log(` ${colors.green('✓')} HOST_IP=${primaryIP}`);
|
|
387
|
-
if (ipList.length > 1) {
|
|
388
|
-
console.log(` ${colors.green('✓')} HOST_IPS=${selectedIPs}`);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
else if (setting.type === 'text') {
|
|
392
|
-
const result = await text({
|
|
393
|
-
message: `Enter ${setting.label}:`,
|
|
394
|
-
placeholder: setting.currentValue,
|
|
395
|
-
defaultValue: setting.currentValue === 'system default' ? '' : setting.currentValue,
|
|
396
|
-
validate: setting.validate,
|
|
397
|
-
});
|
|
398
|
-
if (isCancel(result))
|
|
399
|
-
continue;
|
|
400
|
-
const value = result;
|
|
401
|
-
if (setting.source === 'env') {
|
|
402
|
-
envUpdates[key] = value;
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
configUpdates[key] = value;
|
|
406
|
-
}
|
|
407
|
-
console.log(` ${colors.green('✓')} ${key}=${value}`);
|
|
408
|
-
}
|
|
409
|
-
else if (setting.type === 'select' && setting.options) {
|
|
410
|
-
const result = await select({
|
|
411
|
-
message: `Select ${setting.label}:`,
|
|
412
|
-
options: setting.options,
|
|
413
|
-
initialValue: setting.currentValue,
|
|
414
|
-
});
|
|
415
|
-
if (isCancel(result))
|
|
416
|
-
continue;
|
|
417
|
-
const value = result;
|
|
418
|
-
if (setting.source === 'env') {
|
|
419
|
-
envUpdates[key] = value;
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
configUpdates[key] = value;
|
|
423
|
-
}
|
|
424
|
-
console.log(` ${colors.green('✓')} ${key}=${value}`);
|
|
425
|
-
}
|
|
426
|
-
else if (setting.type === 'confirm') {
|
|
427
|
-
const result = await confirm({
|
|
428
|
-
message: `Enable ${setting.label}?`,
|
|
429
|
-
initialValue: setting.currentValue === 'true',
|
|
430
|
-
});
|
|
431
|
-
if (isCancel(result))
|
|
432
|
-
continue;
|
|
433
|
-
const value = result;
|
|
434
|
-
if (setting.source === 'env') {
|
|
435
|
-
envUpdates[key] = String(value);
|
|
436
|
-
}
|
|
437
|
-
else {
|
|
438
|
-
configUpdates[key] = value;
|
|
439
|
-
}
|
|
440
|
-
console.log(` ${colors.green('✓')} ${key}=${value}`);
|
|
441
|
-
}
|
|
442
|
-
else if (setting.type === 'password') {
|
|
443
|
-
const result = await password({
|
|
444
|
-
message: `Enter ${setting.label}:`,
|
|
445
|
-
validate: setting.validate,
|
|
446
|
-
});
|
|
447
|
-
if (isCancel(result))
|
|
448
|
-
continue;
|
|
449
|
-
const value = result;
|
|
450
|
-
envUpdates[key] = value;
|
|
451
|
-
console.log(` ${colors.green('✓')} ${key}=********`);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
// Apply changes to .env file
|
|
455
|
-
if (Object.keys(envUpdates).length > 0) {
|
|
456
|
-
config.updateEnv(envUpdates);
|
|
457
|
-
console.log('');
|
|
458
|
-
log.info('Updated .env file');
|
|
459
|
-
}
|
|
460
|
-
// Apply changes to .mcctl.json
|
|
461
|
-
if (Object.keys(configUpdates).length > 0) {
|
|
462
|
-
const updatedConfig = { ...mcctlConfig, ...configUpdates };
|
|
463
|
-
config.save(updatedConfig);
|
|
464
|
-
console.log('');
|
|
465
|
-
log.info('Updated .mcctl.json');
|
|
466
|
-
}
|
|
467
|
-
// Handle IP change - update server hostnames
|
|
468
|
-
if (ipChanged && newHostIPs) {
|
|
469
|
-
console.log('');
|
|
470
|
-
const updateServers = await confirm({
|
|
471
|
-
message: 'Update existing servers with new IP hostnames?',
|
|
472
|
-
initialValue: true,
|
|
473
|
-
});
|
|
474
|
-
if (!isCancel(updateServers) && updateServers) {
|
|
475
|
-
const updatedCount = await updateServerHostnames(paths, newHostIPs);
|
|
476
|
-
if (updatedCount > 0) {
|
|
477
|
-
console.log(` ${colors.green('✓')} Updated ${updatedCount} server(s)`);
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
// Prompt to restart mc-router
|
|
481
|
-
const restartRouter = await confirm({
|
|
482
|
-
message: 'Restart mc-router to apply changes?',
|
|
483
|
-
initialValue: true,
|
|
484
|
-
});
|
|
485
|
-
if (!isCancel(restartRouter) && restartRouter) {
|
|
486
|
-
try {
|
|
487
|
-
// Using execSync with hardcoded command (no user input) - safe from injection
|
|
488
|
-
execSync('docker compose restart mc-router', {
|
|
489
|
-
cwd: paths.root,
|
|
490
|
-
stdio: 'pipe',
|
|
491
|
-
});
|
|
492
|
-
console.log(` ${colors.green('✓')} mc-router restarted`);
|
|
493
|
-
}
|
|
494
|
-
catch {
|
|
495
|
-
log.warn('Failed to restart mc-router (may not be running)');
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
// Success message
|
|
500
|
-
console.log('');
|
|
501
|
-
console.log(colors.green('═'.repeat(60)));
|
|
502
|
-
console.log(colors.green(' ✓ Configuration updated successfully!'));
|
|
503
|
-
console.log(colors.green('═'.repeat(60)));
|
|
504
|
-
console.log('');
|
|
505
|
-
return 0;
|
|
506
|
-
}
|
|
507
|
-
/**
|
|
508
|
-
* Update server docker-compose.yml files with new hostnames
|
|
509
|
-
*/
|
|
510
|
-
async function updateServerHostnames(paths, newHostIPs) {
|
|
511
|
-
const serversDir = paths.servers;
|
|
512
|
-
let updatedCount = 0;
|
|
513
|
-
if (!existsSync(serversDir)) {
|
|
514
|
-
return 0;
|
|
515
|
-
}
|
|
516
|
-
const serverDirs = readdirSync(serversDir, { withFileTypes: true })
|
|
517
|
-
.filter((dirent) => dirent.isDirectory() && !dirent.name.startsWith('_'))
|
|
518
|
-
.map((dirent) => dirent.name);
|
|
519
|
-
for (const serverName of serverDirs) {
|
|
520
|
-
const composeFile = join(serversDir, serverName, 'docker-compose.yml');
|
|
521
|
-
if (!existsSync(composeFile)) {
|
|
522
|
-
continue;
|
|
523
|
-
}
|
|
524
|
-
try {
|
|
525
|
-
let content = readFileSync(composeFile, 'utf-8');
|
|
526
|
-
// Build new hostname list
|
|
527
|
-
const hostnames = buildHostnames(serverName, newHostIPs);
|
|
528
|
-
// Replace mc-router.host label value
|
|
529
|
-
// Match patterns like: mc-router.host: "server.local,server.ip.nip.io"
|
|
530
|
-
const hostLabelRegex = /(mc-router\.host:\s*["'])([^"']+)(["'])/;
|
|
531
|
-
const match = content.match(hostLabelRegex);
|
|
532
|
-
if (match) {
|
|
533
|
-
content = content.replace(hostLabelRegex, `$1${hostnames}$3`);
|
|
534
|
-
writeFileSync(composeFile, content, 'utf-8');
|
|
535
|
-
updatedCount++;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
catch {
|
|
539
|
-
log.warn(`Failed to update ${serverName}/docker-compose.yml`);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
return updatedCount;
|
|
543
|
-
}
|
|
544
|
-
/**
|
|
545
|
-
* Build hostname string from server name and IPs
|
|
546
|
-
*/
|
|
547
|
-
function buildHostnames(serverName, hostIPs) {
|
|
548
|
-
let hostnames = `${serverName}.local`;
|
|
549
|
-
if (hostIPs) {
|
|
550
|
-
const ips = hostIPs.split(',').map((ip) => ip.trim()).filter((ip) => ip);
|
|
551
|
-
for (const ip of ips) {
|
|
552
|
-
hostnames += `,${serverName}.${ip}.nip.io`;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
return hostnames;
|
|
556
|
-
}
|
|
557
218
|
//# sourceMappingURL=init.js.map
|