@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,321 @@
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
+ * Uses docker compose up to create containers if they don't exist
253
+ */
254
+ async startAll() {
255
+ log.info('Starting all Minecraft servers...');
256
+ // Get all mc-* services from compose config and start them
257
+ // This works even if containers haven't been created yet
258
+ return new Promise((resolve) => {
259
+ const child = spawn('sh', ['-c',
260
+ 'docker compose config --services | grep "^mc-" | xargs -r docker compose up -d'
261
+ ], {
262
+ cwd: this.paths.root,
263
+ stdio: 'inherit',
264
+ env: { ...process.env, ...this.env },
265
+ });
266
+ child.on('close', (code) => {
267
+ resolve(code ?? 0);
268
+ });
269
+ child.on('error', (err) => {
270
+ log.error(`Failed to start servers: ${err.message}`);
271
+ resolve(1);
272
+ });
273
+ });
274
+ }
275
+ /**
276
+ * Stop all Minecraft servers (not router)
277
+ * Uses docker compose stop for consistency
278
+ */
279
+ async stopAll() {
280
+ log.info('Stopping all Minecraft servers...');
281
+ // Get all mc-* services from compose config and stop them
282
+ return new Promise((resolve) => {
283
+ const child = spawn('sh', ['-c',
284
+ 'docker compose config --services | grep "^mc-" | xargs -r docker compose stop'
285
+ ], {
286
+ cwd: this.paths.root,
287
+ stdio: 'inherit',
288
+ env: { ...process.env, ...this.env },
289
+ });
290
+ child.on('close', (code) => {
291
+ resolve(code ?? 0);
292
+ });
293
+ child.on('error', (err) => {
294
+ log.error(`Failed to stop servers: ${err.message}`);
295
+ resolve(1);
296
+ });
297
+ });
298
+ }
299
+ /**
300
+ * Start mc-router only
301
+ */
302
+ async routerStart() {
303
+ log.info('Starting mc-router...');
304
+ return this.dockerCompose(['up', '-d', 'router']);
305
+ }
306
+ /**
307
+ * Stop mc-router only
308
+ */
309
+ async routerStop() {
310
+ log.info('Stopping mc-router...');
311
+ return this.dockerCompose(['stop', 'router']);
312
+ }
313
+ /**
314
+ * Restart mc-router
315
+ */
316
+ async routerRestart() {
317
+ log.info('Restarting mc-router...');
318
+ return this.dockerCompose(['restart', 'router']);
319
+ }
320
+ }
321
+ //# 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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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Check if avahi-daemon is installed and configured
3
+ */
4
+ export declare function isAvahiInstalled(): boolean;
5
+ /**
6
+ * Check if sudo password is available (from env or provided)
7
+ */
8
+ export declare function hasSudoPassword(sudoPassword?: string): boolean;
9
+ /**
10
+ * Prompt for sudo password if avahi is installed and password not provided
11
+ * Returns the password (from prompt, option, or env) or undefined if not needed
12
+ */
13
+ export declare function promptSudoPasswordIfNeeded(sudoPassword?: string): Promise<string | undefined>;
14
+ //# sourceMappingURL=sudo-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sudo-utils.d.ts","sourceRoot":"","sources":["../../src/lib/sudo-utils.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwC7B"}
@@ -0,0 +1,53 @@
1
+ import { existsSync } from 'node:fs';
2
+ import * as p from '@clack/prompts';
3
+ const AVAHI_HOSTS_FILE = '/etc/avahi/hosts';
4
+ /**
5
+ * Check if avahi-daemon is installed and configured
6
+ */
7
+ export function isAvahiInstalled() {
8
+ return existsSync(AVAHI_HOSTS_FILE);
9
+ }
10
+ /**
11
+ * Check if sudo password is available (from env or provided)
12
+ */
13
+ export function hasSudoPassword(sudoPassword) {
14
+ return !!(sudoPassword || process.env.MCCTL_SUDO_PASSWORD);
15
+ }
16
+ /**
17
+ * Prompt for sudo password if avahi is installed and password not provided
18
+ * Returns the password (from prompt, option, or env) or undefined if not needed
19
+ */
20
+ export async function promptSudoPasswordIfNeeded(sudoPassword) {
21
+ // If password already provided, use it
22
+ if (sudoPassword) {
23
+ return sudoPassword;
24
+ }
25
+ // Check environment variable
26
+ if (process.env.MCCTL_SUDO_PASSWORD) {
27
+ return process.env.MCCTL_SUDO_PASSWORD;
28
+ }
29
+ // Check if avahi is installed
30
+ if (!isAvahiInstalled()) {
31
+ // avahi not installed, sudo not needed
32
+ return undefined;
33
+ }
34
+ // avahi is installed but no password provided - prompt user
35
+ p.log.info('avahi-daemon detected. Sudo password needed for mDNS hostname registration.');
36
+ const password = await p.password({
37
+ message: 'Enter sudo password (or press Enter to skip mDNS):',
38
+ mask: '*',
39
+ });
40
+ if (p.isCancel(password)) {
41
+ // User cancelled - proceed without sudo
42
+ p.log.warn('Skipped. mDNS hostname will not be registered.');
43
+ return undefined;
44
+ }
45
+ const passwordStr = password;
46
+ // Empty password means skip
47
+ if (!passwordStr.trim()) {
48
+ p.log.warn('Skipped. mDNS hostname will not be registered.');
49
+ return undefined;
50
+ }
51
+ return passwordStr;
52
+ }
53
+ //# sourceMappingURL=sudo-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sudo-utils.js","sourceRoot":"","sources":["../../src/lib/sudo-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,YAAqB;IACnD,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,YAAqB;IAErB,uCAAuC;IACvC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACzC,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxB,uCAAuC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4DAA4D;IAC5D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAE1F,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC;QAChC,OAAO,EAAE,oDAAoD;QAC7D,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,wCAAwC;QACxC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,QAAkB,CAAC;IAEvC,4BAA4B;IAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minecraft-docker/mcctl",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "description": "CLI tool for managing Docker Minecraft servers with mc-router",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,13 +48,19 @@
48
48
  ],
49
49
  "dependencies": {
50
50
  "@clack/prompts": "^0.8.0",
51
- "@minecraft-docker/shared": "^1.6.0",
51
+ "@minecraft-docker/mod-source-modrinth": "workspace:*",
52
+ "@minecraft-docker/shared": "^1.6.2",
53
+ "commander": "^12.0.0",
54
+ "js-yaml": "^4.1.0",
52
55
  "picocolors": "^1.1.0",
56
+ "pm2": "^6.0.14",
53
57
  "tar": "^7.5.4"
54
58
  },
55
59
  "devDependencies": {
60
+ "@types/js-yaml": "^4.0.9",
56
61
  "@types/node": "^20.10.0",
57
62
  "@types/tar": "^6.1.13",
63
+ "tsx": "^4.7.0",
58
64
  "typescript": "^5.3.0"
59
65
  }
60
66
  }