@minecraft-docker/mcctl 1.5.0 → 1.6.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.
Files changed (141) 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/create.d.ts +22 -0
  18. package/dist/commands/create.d.ts.map +1 -0
  19. package/dist/commands/create.js +83 -0
  20. package/dist/commands/create.js.map +1 -0
  21. package/dist/commands/delete.d.ts +17 -0
  22. package/dist/commands/delete.d.ts.map +1 -0
  23. package/dist/commands/delete.js +71 -0
  24. package/dist/commands/delete.js.map +1 -0
  25. package/dist/commands/exec.d.ts +10 -0
  26. package/dist/commands/exec.d.ts.map +1 -0
  27. package/dist/commands/exec.js +29 -0
  28. package/dist/commands/exec.js.map +1 -0
  29. package/dist/commands/index.d.ts +18 -0
  30. package/dist/commands/index.d.ts.map +1 -0
  31. package/dist/commands/index.js +18 -0
  32. package/dist/commands/index.js.map +1 -0
  33. package/dist/commands/init.d.ts +9 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +186 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/kick.d.ts +12 -0
  38. package/dist/commands/kick.d.ts.map +1 -0
  39. package/dist/commands/kick.js +71 -0
  40. package/dist/commands/kick.js.map +1 -0
  41. package/dist/commands/migrate.d.ts +18 -0
  42. package/dist/commands/migrate.d.ts.map +1 -0
  43. package/dist/commands/migrate.js +470 -0
  44. package/dist/commands/migrate.js.map +1 -0
  45. package/dist/commands/op.d.ts +12 -0
  46. package/dist/commands/op.d.ts.map +1 -0
  47. package/dist/commands/op.js +220 -0
  48. package/dist/commands/op.js.map +1 -0
  49. package/dist/commands/player-online.d.ts +11 -0
  50. package/dist/commands/player-online.d.ts.map +1 -0
  51. package/dist/commands/player-online.js +151 -0
  52. package/dist/commands/player-online.js.map +1 -0
  53. package/dist/commands/player.d.ts +18 -0
  54. package/dist/commands/player.d.ts.map +1 -0
  55. package/dist/commands/player.js +352 -0
  56. package/dist/commands/player.js.map +1 -0
  57. package/dist/commands/server-backup.d.ts +36 -0
  58. package/dist/commands/server-backup.d.ts.map +1 -0
  59. package/dist/commands/server-backup.js +320 -0
  60. package/dist/commands/server-backup.js.map +1 -0
  61. package/dist/commands/server-restore.d.ts +13 -0
  62. package/dist/commands/server-restore.d.ts.map +1 -0
  63. package/dist/commands/server-restore.js +294 -0
  64. package/dist/commands/server-restore.js.map +1 -0
  65. package/dist/commands/status.d.ts +13 -0
  66. package/dist/commands/status.d.ts.map +1 -0
  67. package/dist/commands/status.js +325 -0
  68. package/dist/commands/status.js.map +1 -0
  69. package/dist/commands/whitelist.d.ts +12 -0
  70. package/dist/commands/whitelist.d.ts.map +1 -0
  71. package/dist/commands/whitelist.js +316 -0
  72. package/dist/commands/whitelist.js.map +1 -0
  73. package/dist/commands/world.d.ts +16 -0
  74. package/dist/commands/world.d.ts.map +1 -0
  75. package/dist/commands/world.js +135 -0
  76. package/dist/commands/world.js.map +1 -0
  77. package/dist/domain/index.d.ts +2 -0
  78. package/dist/domain/index.d.ts.map +1 -0
  79. package/dist/domain/index.js +7 -0
  80. package/dist/domain/index.js.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +609 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +29 -0
  86. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -0
  87. package/dist/infrastructure/adapters/ClackPromptAdapter.js +419 -0
  88. package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -0
  89. package/dist/infrastructure/adapters/index.d.ts +3 -0
  90. package/dist/infrastructure/adapters/index.d.ts.map +1 -0
  91. package/dist/infrastructure/adapters/index.js +5 -0
  92. package/dist/infrastructure/adapters/index.js.map +1 -0
  93. package/dist/infrastructure/di/container.d.ts +47 -0
  94. package/dist/infrastructure/di/container.d.ts.map +1 -0
  95. package/dist/infrastructure/di/container.js +140 -0
  96. package/dist/infrastructure/di/container.js.map +1 -0
  97. package/dist/infrastructure/di/index.d.ts +2 -0
  98. package/dist/infrastructure/di/index.d.ts.map +1 -0
  99. package/dist/infrastructure/di/index.js +2 -0
  100. package/dist/infrastructure/di/index.js.map +1 -0
  101. package/dist/infrastructure/index.d.ts +4 -0
  102. package/dist/infrastructure/index.d.ts.map +1 -0
  103. package/dist/infrastructure/index.js +7 -0
  104. package/dist/infrastructure/index.js.map +1 -0
  105. package/dist/lib/mojang-api.d.ts +51 -0
  106. package/dist/lib/mojang-api.d.ts.map +1 -0
  107. package/dist/lib/mojang-api.js +136 -0
  108. package/dist/lib/mojang-api.js.map +1 -0
  109. package/dist/lib/player-cache.d.ts +79 -0
  110. package/dist/lib/player-cache.d.ts.map +1 -0
  111. package/dist/lib/player-cache.js +302 -0
  112. package/dist/lib/player-cache.js.map +1 -0
  113. package/dist/lib/player-json.d.ts +69 -0
  114. package/dist/lib/player-json.d.ts.map +1 -0
  115. package/dist/lib/player-json.js +96 -0
  116. package/dist/lib/player-json.js.map +1 -0
  117. package/dist/lib/prompts/action-select.d.ts +23 -0
  118. package/dist/lib/prompts/action-select.d.ts.map +1 -0
  119. package/dist/lib/prompts/action-select.js +124 -0
  120. package/dist/lib/prompts/action-select.js.map +1 -0
  121. package/dist/lib/prompts/index.d.ts +7 -0
  122. package/dist/lib/prompts/index.d.ts.map +1 -0
  123. package/dist/lib/prompts/index.js +7 -0
  124. package/dist/lib/prompts/index.js.map +1 -0
  125. package/dist/lib/prompts/player-select.d.ts +25 -0
  126. package/dist/lib/prompts/player-select.d.ts.map +1 -0
  127. package/dist/lib/prompts/player-select.js +122 -0
  128. package/dist/lib/prompts/player-select.js.map +1 -0
  129. package/dist/lib/prompts/server-select.d.ts +26 -0
  130. package/dist/lib/prompts/server-select.d.ts.map +1 -0
  131. package/dist/lib/prompts/server-select.js +99 -0
  132. package/dist/lib/prompts/server-select.js.map +1 -0
  133. package/dist/lib/rcon.d.ts +53 -0
  134. package/dist/lib/rcon.d.ts.map +1 -0
  135. package/dist/lib/rcon.js +131 -0
  136. package/dist/lib/rcon.js.map +1 -0
  137. package/dist/lib/shell.d.ts +109 -0
  138. package/dist/lib/shell.d.ts.map +1 -0
  139. package/dist/lib/shell.js +318 -0
  140. package/dist/lib/shell.js.map +1 -0
  141. package/package.json +2 -2
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Result of an RCON command execution
3
+ */
4
+ export interface RconResult {
5
+ code: number;
6
+ output: string;
7
+ }
8
+ /**
9
+ * Check if a Docker container is running
10
+ */
11
+ export declare function isContainerRunning(containerName: string): Promise<boolean>;
12
+ /**
13
+ * Execute RCON command and capture output
14
+ */
15
+ export declare function execRconWithOutput(containerName: string, command: string[]): Promise<RconResult>;
16
+ /**
17
+ * Get container name from server name
18
+ * Ensures the container name has the 'mc-' prefix
19
+ */
20
+ export declare function getContainerName(serverName: string): string;
21
+ /**
22
+ * Online players result
23
+ */
24
+ export interface OnlinePlayersResult {
25
+ count: number;
26
+ maxPlayers: number;
27
+ players: string[];
28
+ }
29
+ /**
30
+ * Get online players from a server
31
+ */
32
+ export declare function getOnlinePlayers(containerName: string): Promise<OnlinePlayersResult>;
33
+ /**
34
+ * Get online player count (shortcut)
35
+ */
36
+ export declare function getOnlinePlayerCount(containerName: string): Promise<number>;
37
+ /**
38
+ * Check if a player is online on a specific server
39
+ */
40
+ export declare function isPlayerOnline(containerName: string, playerName: string): Promise<boolean>;
41
+ /**
42
+ * Check if player is whitelisted
43
+ */
44
+ export declare function isPlayerWhitelisted(containerName: string, playerName: string): Promise<boolean>;
45
+ /**
46
+ * Check if player is an operator
47
+ */
48
+ export declare function isPlayerOperator(containerName: string, playerName: string): Promise<boolean>;
49
+ /**
50
+ * Check if player is banned
51
+ */
52
+ export declare function isPlayerBanned(containerName: string, playerName: string): Promise<boolean>;
53
+ //# sourceMappingURL=rcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rcon.d.ts","sourceRoot":"","sources":["../../src/lib/rcon.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBhF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0B1F;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhG;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAerG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWlG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShG"}
@@ -0,0 +1,131 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Check if a Docker container is running
4
+ */
5
+ export async function isContainerRunning(containerName) {
6
+ return new Promise((resolve) => {
7
+ const child = spawn('docker', ['inspect', '-f', '{{.State.Running}}', containerName], {
8
+ stdio: ['pipe', 'pipe', 'pipe'],
9
+ });
10
+ let output = '';
11
+ child.stdout.on('data', (data) => {
12
+ output += data.toString();
13
+ });
14
+ child.on('close', (code) => {
15
+ resolve(code === 0 && output.trim() === 'true');
16
+ });
17
+ child.on('error', () => {
18
+ resolve(false);
19
+ });
20
+ });
21
+ }
22
+ /**
23
+ * Execute RCON command and capture output
24
+ */
25
+ export async function execRconWithOutput(containerName, command) {
26
+ return new Promise((resolve) => {
27
+ const child = spawn('docker', ['exec', containerName, 'rcon-cli', ...command], {
28
+ stdio: ['pipe', 'pipe', 'pipe'],
29
+ });
30
+ let output = '';
31
+ let errorOutput = '';
32
+ child.stdout.on('data', (data) => {
33
+ output += data.toString();
34
+ });
35
+ child.stderr.on('data', (data) => {
36
+ errorOutput += data.toString();
37
+ });
38
+ child.on('close', (code) => {
39
+ resolve({ code: code ?? 1, output: output || errorOutput });
40
+ });
41
+ child.on('error', (err) => {
42
+ resolve({ code: 1, output: err.message });
43
+ });
44
+ });
45
+ }
46
+ /**
47
+ * Get container name from server name
48
+ * Ensures the container name has the 'mc-' prefix
49
+ */
50
+ export function getContainerName(serverName) {
51
+ return serverName.startsWith('mc-') ? serverName : `mc-${serverName}`;
52
+ }
53
+ /**
54
+ * Get online players from a server
55
+ */
56
+ export async function getOnlinePlayers(containerName) {
57
+ const result = await execRconWithOutput(containerName, ['list']);
58
+ if (result.code !== 0) {
59
+ return { count: 0, maxPlayers: 0, players: [] };
60
+ }
61
+ // Parse output: "There are X of a max Y players online: player1, player2, player3"
62
+ // or "There are 0 of a max Y players online:"
63
+ const match = result.output.match(/There are (\d+) of a max (\d+) players online:?\s*(.*)?/i);
64
+ if (!match) {
65
+ return { count: 0, maxPlayers: 0, players: [] };
66
+ }
67
+ const countStr = match[1];
68
+ const maxStr = match[2];
69
+ const count = countStr ? parseInt(countStr, 10) : 0;
70
+ const maxPlayers = maxStr ? parseInt(maxStr, 10) : 0;
71
+ const playerList = match[3]?.trim();
72
+ const players = playerList
73
+ ? playerList.split(',').map(p => p.trim()).filter(Boolean)
74
+ : [];
75
+ return { count, maxPlayers, players };
76
+ }
77
+ /**
78
+ * Get online player count (shortcut)
79
+ */
80
+ export async function getOnlinePlayerCount(containerName) {
81
+ const result = await getOnlinePlayers(containerName);
82
+ return result.count;
83
+ }
84
+ /**
85
+ * Check if a player is online on a specific server
86
+ */
87
+ export async function isPlayerOnline(containerName, playerName) {
88
+ const result = await getOnlinePlayers(containerName);
89
+ return result.players.some(p => p.toLowerCase() === playerName.toLowerCase());
90
+ }
91
+ /**
92
+ * Check if player is whitelisted
93
+ */
94
+ export async function isPlayerWhitelisted(containerName, playerName) {
95
+ const result = await execRconWithOutput(containerName, ['whitelist', 'list']);
96
+ if (result.code !== 0) {
97
+ return false;
98
+ }
99
+ // Parse output: "There are X whitelisted players: player1, player2"
100
+ const players = result.output
101
+ .split(':')[1]
102
+ ?.split(',')
103
+ .map(p => p.trim().toLowerCase())
104
+ .filter(Boolean) ?? [];
105
+ return players.includes(playerName.toLowerCase());
106
+ }
107
+ /**
108
+ * Check if player is an operator
109
+ */
110
+ export async function isPlayerOperator(containerName, playerName) {
111
+ const result = await execRconWithOutput(containerName, ['op', 'list']);
112
+ if (result.code !== 0) {
113
+ // Try alternative: read ops.json parsing would need file access
114
+ return false;
115
+ }
116
+ // Parse output varies by server, try common format
117
+ const output = result.output.toLowerCase();
118
+ return output.includes(playerName.toLowerCase());
119
+ }
120
+ /**
121
+ * Check if player is banned
122
+ */
123
+ export async function isPlayerBanned(containerName, playerName) {
124
+ const result = await execRconWithOutput(containerName, ['banlist', 'players']);
125
+ if (result.code !== 0) {
126
+ return false;
127
+ }
128
+ const output = result.output.toLowerCase();
129
+ return output.includes(playerName.toLowerCase());
130
+ }
131
+ //# sourceMappingURL=rcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rcon.js","sourceRoot":"","sources":["../../src/lib/rcon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { Paths } from '@minecraft-docker/shared';
2
+ export interface ShellExecutorOptions {
3
+ paths?: Paths;
4
+ sudoPassword?: string;
5
+ }
6
+ /**
7
+ * Shell script executor with environment variable injection
8
+ */
9
+ export declare class ShellExecutor {
10
+ private readonly paths;
11
+ private readonly env;
12
+ private readonly sudoPassword?;
13
+ constructor(pathsOrOptions?: Paths | ShellExecutorOptions);
14
+ private buildEnv;
15
+ /**
16
+ * Get script path and validate existence
17
+ */
18
+ private getScriptPath;
19
+ /**
20
+ * Execute a script and return the result
21
+ */
22
+ exec(script: string, args?: string[]): Promise<number>;
23
+ /**
24
+ * Execute a script interactively (with inherited stdio)
25
+ */
26
+ execInteractive(script: string, args?: string[]): Promise<number>;
27
+ /**
28
+ * Execute mcctl.sh with arguments
29
+ */
30
+ mcctl(args: string[]): Promise<number>;
31
+ /**
32
+ * Create a new server
33
+ */
34
+ createServer(name: string, options?: string[]): Promise<number>;
35
+ /**
36
+ * Delete a server
37
+ */
38
+ deleteServer(name: string, options?: string[]): Promise<number>;
39
+ /**
40
+ * View logs
41
+ */
42
+ logs(server: string, options?: string[]): Promise<number>;
43
+ /**
44
+ * Lock operations
45
+ */
46
+ lock(args: string[]): Promise<number>;
47
+ /**
48
+ * Player lookup
49
+ */
50
+ player(args: string[]): Promise<number>;
51
+ /**
52
+ * Backup operations
53
+ */
54
+ backup(args: string[]): Promise<number>;
55
+ /**
56
+ * Run init.sh (for Docker/network setup)
57
+ */
58
+ initPlatform(options?: string[]): Promise<number>;
59
+ /**
60
+ * Execute docker compose command
61
+ */
62
+ dockerCompose(args: string[]): Promise<number>;
63
+ /**
64
+ * Get server config.env path
65
+ */
66
+ getConfigPath(server: string): string;
67
+ /**
68
+ * Read server config.env as key-value pairs
69
+ */
70
+ readConfig(server: string): Record<string, string> | null;
71
+ /**
72
+ * Write a config value to server's config.env
73
+ * Preserves comments and formatting
74
+ */
75
+ writeConfigValue(server: string, key: string, value: string): boolean;
76
+ /**
77
+ * Execute RCON command on a server
78
+ */
79
+ execRcon(server: string, command: string[]): Promise<number>;
80
+ /**
81
+ * Start all infrastructure (router + all servers)
82
+ */
83
+ up(): Promise<number>;
84
+ /**
85
+ * Stop all infrastructure
86
+ */
87
+ down(): Promise<number>;
88
+ /**
89
+ * Start all Minecraft servers (not router)
90
+ */
91
+ startAll(): Promise<number>;
92
+ /**
93
+ * Stop all Minecraft servers (not router)
94
+ */
95
+ stopAll(): Promise<number>;
96
+ /**
97
+ * Start mc-router only
98
+ */
99
+ routerStart(): Promise<number>;
100
+ /**
101
+ * Stop mc-router only
102
+ */
103
+ routerStop(): Promise<number>;
104
+ /**
105
+ * Restart mc-router
106
+ */
107
+ routerRestart(): Promise<number>;
108
+ }
109
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/lib/shell.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAA0C,MAAM,0BAA0B,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;gBAE3B,cAAc,CAAC,EAAE,KAAK,GAAG,oBAAoB;IAczD,OAAO,CAAC,QAAQ;IAkBhB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAQhE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAO3E;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAInE;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C;;OAEG;IACG,YAAY,CAAC,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKrC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IA0BzD;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAiCrE;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBlE;;OAEG;IACG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;IAK3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB7B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBjC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBhC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAIvC"}
@@ -0,0 +1,318 @@
1
+ import { join } from 'node:path';
2
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { spawn } from 'node:child_process';
4
+ import { Paths, execScript, execScriptInteractive, log } from '@minecraft-docker/shared';
5
+ /**
6
+ * Shell script executor with environment variable injection
7
+ */
8
+ export class ShellExecutor {
9
+ paths;
10
+ env;
11
+ sudoPassword;
12
+ constructor(pathsOrOptions) {
13
+ if (pathsOrOptions instanceof Paths) {
14
+ this.paths = pathsOrOptions;
15
+ this.sudoPassword = undefined;
16
+ }
17
+ else if (pathsOrOptions) {
18
+ this.paths = pathsOrOptions.paths ?? new Paths();
19
+ this.sudoPassword = pathsOrOptions.sudoPassword;
20
+ }
21
+ else {
22
+ this.paths = new Paths();
23
+ this.sudoPassword = undefined;
24
+ }
25
+ this.env = this.buildEnv();
26
+ }
27
+ buildEnv() {
28
+ const env = {
29
+ MCCTL_ROOT: this.paths.root,
30
+ MCCTL_TEMPLATES: this.paths.templates,
31
+ MCCTL_SCRIPTS: this.paths.scripts,
32
+ };
33
+ // Support MCCTL_SUDO_PASSWORD from:
34
+ // 1. Constructor option (--sudo-password CLI flag)
35
+ // 2. Environment variable (for automation)
36
+ const sudoPassword = this.sudoPassword ?? process.env.MCCTL_SUDO_PASSWORD;
37
+ if (sudoPassword) {
38
+ env.MCCTL_SUDO_PASSWORD = sudoPassword;
39
+ }
40
+ return env;
41
+ }
42
+ /**
43
+ * Get script path and validate existence
44
+ */
45
+ getScriptPath(script) {
46
+ const scriptPath = join(this.paths.scripts, script);
47
+ if (!existsSync(scriptPath)) {
48
+ log.error(`Script not found: ${scriptPath}`);
49
+ return null;
50
+ }
51
+ return scriptPath;
52
+ }
53
+ /**
54
+ * Execute a script and return the result
55
+ */
56
+ async exec(script, args = []) {
57
+ const scriptPath = this.getScriptPath(script);
58
+ if (!scriptPath)
59
+ return 1;
60
+ const result = await execScript(scriptPath, args, this.env);
61
+ return result.code;
62
+ }
63
+ /**
64
+ * Execute a script interactively (with inherited stdio)
65
+ */
66
+ async execInteractive(script, args = []) {
67
+ const scriptPath = this.getScriptPath(script);
68
+ if (!scriptPath)
69
+ return 1;
70
+ return execScriptInteractive(scriptPath, args, this.env);
71
+ }
72
+ /**
73
+ * Execute mcctl.sh with arguments
74
+ */
75
+ async mcctl(args) {
76
+ return this.execInteractive('mcctl.sh', args);
77
+ }
78
+ /**
79
+ * Create a new server
80
+ */
81
+ async createServer(name, options = []) {
82
+ return this.execInteractive('create-server.sh', [name, ...options]);
83
+ }
84
+ /**
85
+ * Delete a server
86
+ */
87
+ async deleteServer(name, options = []) {
88
+ return this.execInteractive('delete-server.sh', [name, ...options]);
89
+ }
90
+ /**
91
+ * View logs
92
+ */
93
+ async logs(server, options = []) {
94
+ return this.execInteractive('logs.sh', [server, ...options]);
95
+ }
96
+ /**
97
+ * Lock operations
98
+ */
99
+ async lock(args) {
100
+ return this.execInteractive('lock.sh', args);
101
+ }
102
+ /**
103
+ * Player lookup
104
+ */
105
+ async player(args) {
106
+ return this.execInteractive('player.sh', args);
107
+ }
108
+ /**
109
+ * Backup operations
110
+ */
111
+ async backup(args) {
112
+ return this.execInteractive('backup.sh', args);
113
+ }
114
+ /**
115
+ * Run init.sh (for Docker/network setup)
116
+ */
117
+ async initPlatform(options = []) {
118
+ return this.execInteractive('init.sh', options);
119
+ }
120
+ /**
121
+ * Execute docker compose command
122
+ */
123
+ async dockerCompose(args) {
124
+ return new Promise((resolve) => {
125
+ const child = spawn('docker', ['compose', ...args], {
126
+ cwd: this.paths.root,
127
+ stdio: 'inherit',
128
+ env: { ...process.env, ...this.env },
129
+ });
130
+ child.on('close', (code) => {
131
+ resolve(code ?? 0);
132
+ });
133
+ child.on('error', (err) => {
134
+ log.error(`Failed to execute docker compose: ${err.message}`);
135
+ resolve(1);
136
+ });
137
+ });
138
+ }
139
+ /**
140
+ * Get server config.env path
141
+ */
142
+ getConfigPath(server) {
143
+ const serverName = server.startsWith('mc-') ? server.slice(3) : server;
144
+ return join(this.paths.servers, serverName, 'config.env');
145
+ }
146
+ /**
147
+ * Read server config.env as key-value pairs
148
+ */
149
+ readConfig(server) {
150
+ const configPath = this.getConfigPath(server);
151
+ if (!existsSync(configPath)) {
152
+ return null;
153
+ }
154
+ const content = readFileSync(configPath, 'utf-8');
155
+ const config = {};
156
+ for (const line of content.split('\n')) {
157
+ const trimmed = line.trim();
158
+ // Skip empty lines and comments
159
+ if (!trimmed || trimmed.startsWith('#')) {
160
+ continue;
161
+ }
162
+ const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);
163
+ if (match) {
164
+ const [, key, value] = match;
165
+ // Remove surrounding quotes if present
166
+ config[key] = value.replace(/^["']|["']$/g, '');
167
+ }
168
+ }
169
+ return config;
170
+ }
171
+ /**
172
+ * Write a config value to server's config.env
173
+ * Preserves comments and formatting
174
+ */
175
+ writeConfigValue(server, key, value) {
176
+ const configPath = this.getConfigPath(server);
177
+ if (!existsSync(configPath)) {
178
+ log.error(`Config file not found: ${configPath}`);
179
+ return false;
180
+ }
181
+ const content = readFileSync(configPath, 'utf-8');
182
+ const lines = content.split('\n');
183
+ let found = false;
184
+ const updatedLines = lines.map((line) => {
185
+ const trimmed = line.trim();
186
+ if (trimmed.startsWith('#') || !trimmed) {
187
+ return line;
188
+ }
189
+ const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=/);
190
+ if (match && match[1] === key) {
191
+ found = true;
192
+ return `${key}=${value}`;
193
+ }
194
+ return line;
195
+ });
196
+ // If key not found, add it at the end
197
+ if (!found) {
198
+ updatedLines.push(`${key}=${value}`);
199
+ }
200
+ writeFileSync(configPath, updatedLines.join('\n'));
201
+ return true;
202
+ }
203
+ /**
204
+ * Execute RCON command on a server
205
+ */
206
+ async execRcon(server, command) {
207
+ const containerName = server.startsWith('mc-') ? server : `mc-${server}`;
208
+ return new Promise((resolve) => {
209
+ const child = spawn('docker', ['exec', containerName, 'rcon-cli', ...command], {
210
+ cwd: this.paths.root,
211
+ stdio: 'inherit',
212
+ env: { ...process.env, ...this.env },
213
+ });
214
+ child.on('close', (code) => {
215
+ resolve(code ?? 0);
216
+ });
217
+ child.on('error', (err) => {
218
+ log.error(`Failed to execute RCON command: ${err.message}`);
219
+ resolve(1);
220
+ });
221
+ });
222
+ }
223
+ /**
224
+ * Start all infrastructure (router + all servers)
225
+ */
226
+ async up() {
227
+ log.info('Starting all infrastructure...');
228
+ return this.dockerCompose(['up', '-d']);
229
+ }
230
+ /**
231
+ * Stop all infrastructure
232
+ */
233
+ async down() {
234
+ log.info('Stopping all infrastructure...');
235
+ // First stop all mc-* containers (including those from included compose files)
236
+ await new Promise((resolve) => {
237
+ const child = spawn('sh', ['-c',
238
+ 'docker ps --filter "name=mc-" --format "{{.Names}}" | xargs -r docker stop'
239
+ ], {
240
+ cwd: this.paths.root,
241
+ stdio: 'inherit',
242
+ env: { ...process.env, ...this.env },
243
+ });
244
+ child.on('close', () => resolve());
245
+ child.on('error', () => resolve());
246
+ });
247
+ // Then run docker compose down to clean up network
248
+ return this.dockerCompose(['down']);
249
+ }
250
+ /**
251
+ * Start all Minecraft servers (not router)
252
+ */
253
+ async startAll() {
254
+ log.info('Starting all Minecraft servers...');
255
+ // Start all mc-* containers except mc-router
256
+ return new Promise((resolve) => {
257
+ const child = spawn('sh', ['-c',
258
+ 'docker ps -a --filter "name=mc-" --filter "status=exited" --format "{{.Names}}" | grep -v mc-router | xargs -r docker start'
259
+ ], {
260
+ cwd: this.paths.root,
261
+ stdio: 'inherit',
262
+ env: { ...process.env, ...this.env },
263
+ });
264
+ child.on('close', (code) => {
265
+ resolve(code ?? 0);
266
+ });
267
+ child.on('error', (err) => {
268
+ log.error(`Failed to start servers: ${err.message}`);
269
+ resolve(1);
270
+ });
271
+ });
272
+ }
273
+ /**
274
+ * Stop all Minecraft servers (not router)
275
+ */
276
+ async stopAll() {
277
+ log.info('Stopping all Minecraft servers...');
278
+ // Stop all mc-* containers except mc-router
279
+ return new Promise((resolve) => {
280
+ const child = spawn('sh', ['-c',
281
+ 'docker ps --filter "name=mc-" --format "{{.Names}}" | grep -v mc-router | xargs -r docker stop'
282
+ ], {
283
+ cwd: this.paths.root,
284
+ stdio: 'inherit',
285
+ env: { ...process.env, ...this.env },
286
+ });
287
+ child.on('close', (code) => {
288
+ resolve(code ?? 0);
289
+ });
290
+ child.on('error', (err) => {
291
+ log.error(`Failed to stop servers: ${err.message}`);
292
+ resolve(1);
293
+ });
294
+ });
295
+ }
296
+ /**
297
+ * Start mc-router only
298
+ */
299
+ async routerStart() {
300
+ log.info('Starting mc-router...');
301
+ return this.dockerCompose(['up', '-d', 'router']);
302
+ }
303
+ /**
304
+ * Stop mc-router only
305
+ */
306
+ async routerStop() {
307
+ log.info('Stopping mc-router...');
308
+ return this.dockerCompose(['stop', 'router']);
309
+ }
310
+ /**
311
+ * Restart mc-router
312
+ */
313
+ async routerRestart() {
314
+ log.info('Restarting mc-router...');
315
+ return this.dockerCompose(['restart', 'router']);
316
+ }
317
+ }
318
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/lib/shell.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minecraft-docker/mcctl",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "CLI tool for managing Docker Minecraft servers with mc-router",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,7 +48,7 @@
48
48
  ],
49
49
  "dependencies": {
50
50
  "@clack/prompts": "^0.8.0",
51
- "@minecraft-docker/shared": "^1.5.0",
51
+ "@minecraft-docker/shared": "^1.6.1",
52
52
  "picocolors": "^1.1.0",
53
53
  "tar": "^7.5.4"
54
54
  },