@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,431 @@
1
+ import { Command } from 'commander';
2
+ import * as p from '@clack/prompts';
3
+ import { User, Username, Role, RoleEnum, YamlUserRepository, Paths, colors, } from '@minecraft-docker/shared';
4
+ import { resolve } from 'node:path';
5
+ /**
6
+ * Get the user repository instance
7
+ */
8
+ function getUserRepository() {
9
+ const paths = new Paths();
10
+ const usersFile = resolve(paths.platform, 'users.yaml');
11
+ return new YamlUserRepository(usersFile);
12
+ }
13
+ /**
14
+ * List all users
15
+ */
16
+ async function listUsers(options) {
17
+ const repo = getUserRepository();
18
+ const users = await repo.findAll();
19
+ if (options.json) {
20
+ console.log(JSON.stringify(users.map((u) => u.toJSON()), null, 2));
21
+ return;
22
+ }
23
+ if (users.length === 0) {
24
+ console.log(colors.yellow('No users found.'));
25
+ console.log(`Run ${colors.cyan('mcctl console init')} to create an admin user.`);
26
+ return;
27
+ }
28
+ console.log();
29
+ console.log(colors.bold('Users:'));
30
+ console.log();
31
+ // Table header
32
+ const header = `${colors.dim('Username'.padEnd(20))}${colors.dim('Role'.padEnd(12))}${colors.dim('Created')}`;
33
+ console.log(header);
34
+ console.log(colors.dim('-'.repeat(50)));
35
+ // Table rows
36
+ for (const user of users) {
37
+ const roleColor = user.role.isAdmin ? colors.red : colors.blue;
38
+ const row = `${user.username.value.padEnd(20)}${roleColor(user.role.value.padEnd(12))}${user.createdAt.toISOString().split('T')[0]}`;
39
+ console.log(row);
40
+ }
41
+ console.log();
42
+ console.log(`Total: ${colors.cyan(users.length.toString())} user(s)`);
43
+ }
44
+ /**
45
+ * Add a new user
46
+ */
47
+ async function addUser(usernameArg, options) {
48
+ const repo = getUserRepository();
49
+ let username;
50
+ let role;
51
+ let password;
52
+ if (usernameArg && options.role && options.password) {
53
+ // CLI mode
54
+ username = usernameArg;
55
+ role = options.role.toLowerCase();
56
+ password = options.password;
57
+ }
58
+ else {
59
+ // Interactive mode
60
+ p.intro(colors.cyan('Add New User'));
61
+ const result = await p.group({
62
+ username: () => p.text({
63
+ message: 'Username:',
64
+ placeholder: 'operator1',
65
+ validate: (value) => {
66
+ if (!value || value.trim().length === 0) {
67
+ return 'Username is required';
68
+ }
69
+ if (value.length < 3) {
70
+ return 'Username must be at least 3 characters';
71
+ }
72
+ if (!/^[a-zA-Z0-9_-]+$/.test(value)) {
73
+ return 'Username can only contain letters, numbers, underscores, and hyphens';
74
+ }
75
+ return undefined;
76
+ },
77
+ }),
78
+ role: () => p.select({
79
+ message: 'Role:',
80
+ options: [
81
+ { value: RoleEnum.ADMIN, label: 'Admin - Full access' },
82
+ { value: RoleEnum.VIEWER, label: 'Viewer - Read-only access' },
83
+ ],
84
+ }),
85
+ password: () => p.password({
86
+ message: 'Password:',
87
+ validate: (value) => {
88
+ if (!value || value.length < 8) {
89
+ return 'Password must be at least 8 characters';
90
+ }
91
+ return undefined;
92
+ },
93
+ }),
94
+ confirmPassword: () => p.password({
95
+ message: 'Confirm password:',
96
+ }),
97
+ }, {
98
+ onCancel: () => {
99
+ p.cancel('Operation cancelled.');
100
+ process.exit(0);
101
+ },
102
+ });
103
+ if (result.password !== result.confirmPassword) {
104
+ p.cancel('Passwords do not match.');
105
+ process.exit(1);
106
+ }
107
+ username = result.username;
108
+ role = result.role;
109
+ password = result.password;
110
+ }
111
+ // Check if user already exists
112
+ try {
113
+ const existingUser = await repo.findByUsername(Username.create(username));
114
+ if (existingUser) {
115
+ console.error(colors.red(`User '${username}' already exists.`));
116
+ process.exit(1);
117
+ }
118
+ }
119
+ catch {
120
+ // Username validation failed
121
+ console.error(colors.red(`Invalid username: ${username}`));
122
+ process.exit(1);
123
+ }
124
+ // Create user
125
+ const passwordHash = await repo.hashPassword(password);
126
+ const user = User.create({
127
+ username: Username.create(username),
128
+ passwordHash,
129
+ role: Role.create(role),
130
+ });
131
+ await repo.save(user);
132
+ if (usernameArg) {
133
+ console.log(JSON.stringify({ success: true, username: user.username.value }));
134
+ }
135
+ else {
136
+ p.outro(colors.green(`User '${username}' created successfully!`));
137
+ }
138
+ }
139
+ /**
140
+ * Remove a user
141
+ */
142
+ async function removeUser(usernameArg, options) {
143
+ const repo = getUserRepository();
144
+ let username;
145
+ if (usernameArg) {
146
+ username = usernameArg;
147
+ }
148
+ else {
149
+ // Interactive mode
150
+ const users = await repo.findAll();
151
+ if (users.length === 0) {
152
+ console.error(colors.red('No users found.'));
153
+ process.exit(1);
154
+ }
155
+ const result = await p.select({
156
+ message: 'Select user to remove:',
157
+ options: users.map((u) => ({
158
+ value: u.username.value,
159
+ label: `${u.username.value} (${u.role.value})`,
160
+ })),
161
+ });
162
+ if (p.isCancel(result)) {
163
+ p.cancel('Operation cancelled.');
164
+ process.exit(0);
165
+ }
166
+ username = result;
167
+ }
168
+ // Find user
169
+ const user = await repo.findByUsername(Username.create(username));
170
+ if (!user) {
171
+ console.error(colors.red(`User '${username}' not found.`));
172
+ process.exit(1);
173
+ }
174
+ // Check if this is the last admin
175
+ if (user.isAdmin) {
176
+ const allUsers = await repo.findAll();
177
+ const adminCount = allUsers.filter((u) => u.isAdmin).length;
178
+ if (adminCount <= 1) {
179
+ console.error(colors.red('Cannot delete the last admin user.'));
180
+ process.exit(1);
181
+ }
182
+ }
183
+ // Confirm deletion
184
+ if (!options.force) {
185
+ const confirmed = await p.confirm({
186
+ message: `Are you sure you want to delete user '${username}'?`,
187
+ });
188
+ if (p.isCancel(confirmed) || !confirmed) {
189
+ p.cancel('Operation cancelled.');
190
+ process.exit(0);
191
+ }
192
+ }
193
+ await repo.delete(user.id);
194
+ console.log(colors.green(`User '${username}' deleted successfully.`));
195
+ }
196
+ /**
197
+ * Update a user
198
+ */
199
+ async function updateUser(usernameArg, options) {
200
+ const repo = getUserRepository();
201
+ let username;
202
+ if (usernameArg) {
203
+ username = usernameArg;
204
+ }
205
+ else {
206
+ // Interactive mode
207
+ const users = await repo.findAll();
208
+ if (users.length === 0) {
209
+ console.error(colors.red('No users found.'));
210
+ process.exit(1);
211
+ }
212
+ const result = await p.select({
213
+ message: 'Select user to update:',
214
+ options: users.map((u) => ({
215
+ value: u.username.value,
216
+ label: `${u.username.value} (${u.role.value})`,
217
+ })),
218
+ });
219
+ if (p.isCancel(result)) {
220
+ p.cancel('Operation cancelled.');
221
+ process.exit(0);
222
+ }
223
+ username = result;
224
+ }
225
+ // Find user
226
+ const user = await repo.findByUsername(Username.create(username));
227
+ if (!user) {
228
+ console.error(colors.red(`User '${username}' not found.`));
229
+ process.exit(1);
230
+ }
231
+ // Update role
232
+ let newRole;
233
+ if (options.role) {
234
+ newRole = options.role.toLowerCase();
235
+ }
236
+ else {
237
+ const result = await p.select({
238
+ message: 'New role:',
239
+ initialValue: user.role.value,
240
+ options: [
241
+ { value: RoleEnum.ADMIN, label: 'Admin - Full access' },
242
+ { value: RoleEnum.VIEWER, label: 'Viewer - Read-only access' },
243
+ ],
244
+ });
245
+ if (p.isCancel(result)) {
246
+ p.cancel('Operation cancelled.');
247
+ process.exit(0);
248
+ }
249
+ newRole = result;
250
+ }
251
+ // Check if this would remove the last admin
252
+ if (user.isAdmin && newRole !== RoleEnum.ADMIN) {
253
+ const allUsers = await repo.findAll();
254
+ const adminCount = allUsers.filter((u) => u.isAdmin).length;
255
+ if (adminCount <= 1) {
256
+ console.error(colors.red('Cannot change role of the last admin user.'));
257
+ process.exit(1);
258
+ }
259
+ }
260
+ user.updateRole(Role.create(newRole));
261
+ await repo.save(user);
262
+ console.log(colors.green(`User '${username}' updated to role '${newRole}'.`));
263
+ }
264
+ /**
265
+ * Reset a user's password
266
+ */
267
+ async function resetPassword(usernameArg, options) {
268
+ const repo = getUserRepository();
269
+ let username;
270
+ if (usernameArg) {
271
+ username = usernameArg;
272
+ }
273
+ else {
274
+ // Interactive mode
275
+ const users = await repo.findAll();
276
+ if (users.length === 0) {
277
+ console.error(colors.red('No users found.'));
278
+ process.exit(1);
279
+ }
280
+ const result = await p.select({
281
+ message: 'Select user to reset password:',
282
+ options: users.map((u) => ({
283
+ value: u.username.value,
284
+ label: `${u.username.value} (${u.role.value})`,
285
+ })),
286
+ });
287
+ if (p.isCancel(result)) {
288
+ p.cancel('Operation cancelled.');
289
+ process.exit(0);
290
+ }
291
+ username = result;
292
+ }
293
+ // Find user
294
+ const user = await repo.findByUsername(Username.create(username));
295
+ if (!user) {
296
+ console.error(colors.red(`User '${username}' not found.`));
297
+ process.exit(1);
298
+ }
299
+ // Get new password
300
+ let newPassword;
301
+ if (options.password) {
302
+ newPassword = options.password;
303
+ }
304
+ else {
305
+ const result = await p.group({
306
+ password: () => p.password({
307
+ message: 'New password:',
308
+ validate: (value) => {
309
+ if (!value || value.length < 8) {
310
+ return 'Password must be at least 8 characters';
311
+ }
312
+ return undefined;
313
+ },
314
+ }),
315
+ confirmPassword: () => p.password({
316
+ message: 'Confirm password:',
317
+ }),
318
+ }, {
319
+ onCancel: () => {
320
+ p.cancel('Operation cancelled.');
321
+ process.exit(0);
322
+ },
323
+ });
324
+ if (result.password !== result.confirmPassword) {
325
+ p.cancel('Passwords do not match.');
326
+ process.exit(1);
327
+ }
328
+ newPassword = result.password;
329
+ }
330
+ // Update password
331
+ const passwordHash = await repo.hashPassword(newPassword);
332
+ user.updatePasswordHash(passwordHash);
333
+ await repo.save(user);
334
+ console.log(colors.green(`Password for '${username}' has been reset.`));
335
+ }
336
+ /**
337
+ * Create console user command
338
+ */
339
+ export function consoleUserCommand() {
340
+ const cmd = new Command('user')
341
+ .description('Manage console users')
342
+ .addHelpText('after', `
343
+ Examples:
344
+ $ mcctl console user list List all users
345
+ $ mcctl console user list --json List users in JSON format
346
+ $ mcctl console user add Add user (interactive)
347
+ $ mcctl console user add operator1 --role viewer --password "secret"
348
+ $ mcctl console user remove Remove user (interactive)
349
+ $ mcctl console user remove operator1 Remove user directly
350
+ $ mcctl console user remove operator1 --force Remove without confirmation
351
+ $ mcctl console user update Update user (interactive)
352
+ $ mcctl console user update operator1 --role admin
353
+ $ mcctl console user reset-password Reset password (interactive)
354
+ $ mcctl console user reset-password operator1
355
+ `);
356
+ // list subcommand
357
+ cmd
358
+ .command('list')
359
+ .description('List all users')
360
+ .option('--json', 'Output in JSON format')
361
+ .action(async (options) => {
362
+ try {
363
+ await listUsers(options);
364
+ }
365
+ catch (error) {
366
+ console.error(colors.red(`Error: ${error.message}`));
367
+ process.exit(1);
368
+ }
369
+ });
370
+ // add subcommand
371
+ cmd
372
+ .command('add [username]')
373
+ .description('Add a new user')
374
+ .option('--role <role>', 'User role (admin, viewer)')
375
+ .option('--password <password>', 'User password')
376
+ .action(async (username, options) => {
377
+ try {
378
+ await addUser(username, options);
379
+ }
380
+ catch (error) {
381
+ console.error(colors.red(`Error: ${error.message}`));
382
+ process.exit(1);
383
+ }
384
+ });
385
+ // remove subcommand
386
+ cmd
387
+ .command('remove [username]')
388
+ .description('Remove a user')
389
+ .option('--force', 'Skip confirmation')
390
+ .action(async (username, options) => {
391
+ try {
392
+ await removeUser(username, options);
393
+ }
394
+ catch (error) {
395
+ console.error(colors.red(`Error: ${error.message}`));
396
+ process.exit(1);
397
+ }
398
+ });
399
+ // update subcommand
400
+ cmd
401
+ .command('update [username]')
402
+ .description('Update a user')
403
+ .option('--role <role>', 'New role (admin, viewer)')
404
+ .action(async (username, options) => {
405
+ try {
406
+ await updateUser(username, options);
407
+ }
408
+ catch (error) {
409
+ console.error(colors.red(`Error: ${error.message}`));
410
+ process.exit(1);
411
+ }
412
+ });
413
+ // reset-password subcommand
414
+ cmd
415
+ .command('reset-password [username]')
416
+ .description('Reset a user password')
417
+ .option('--password <password>', 'New password (for non-interactive use)')
418
+ .action(async (username, options) => {
419
+ try {
420
+ await resetPassword(username, options);
421
+ }
422
+ catch (error) {
423
+ console.error(colors.red(`Error: ${error.message}`));
424
+ process.exit(1);
425
+ }
426
+ });
427
+ return cmd;
428
+ }
429
+ // Backward compatibility alias
430
+ export const adminUserCommand = consoleUserCommand;
431
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/commands/console/user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Create command options from CLI arguments
3
+ */
4
+ export interface CreateCommandOptions {
5
+ root?: string;
6
+ name?: string;
7
+ type?: string;
8
+ version?: string;
9
+ seed?: string;
10
+ worldUrl?: string;
11
+ worldName?: string;
12
+ noStart?: boolean;
13
+ sudoPassword?: string;
14
+ }
15
+ /**
16
+ * Execute create server command
17
+ *
18
+ * If name is provided, runs in CLI mode with arguments.
19
+ * If name is not provided, runs in interactive mode.
20
+ */
21
+ export declare function createCommand(options: CreateCommandOptions): Promise<number>;
22
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlF"}
@@ -0,0 +1,86 @@
1
+ import { Paths, log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../infrastructure/index.js';
3
+ import { promptSudoPasswordIfNeeded } from '../lib/sudo-utils.js';
4
+ /**
5
+ * Execute create server command
6
+ *
7
+ * If name is provided, runs in CLI mode with arguments.
8
+ * If name is not provided, runs in interactive mode.
9
+ */
10
+ export async function createCommand(options) {
11
+ const paths = new Paths(options.root);
12
+ // Check if initialized
13
+ if (!paths.isInitialized()) {
14
+ log.error('Platform not initialized. Run: mcctl init');
15
+ return 1;
16
+ }
17
+ // Prompt for sudo password if needed (avahi installed but no password provided)
18
+ const sudoPassword = await promptSudoPasswordIfNeeded(options.sudoPassword);
19
+ const container = getContainer({
20
+ rootDir: options.root,
21
+ sudoPassword,
22
+ });
23
+ // Determine execution mode
24
+ if (options.name) {
25
+ // CLI argument mode - use executeWithConfig
26
+ return createWithArguments(container, options);
27
+ }
28
+ else {
29
+ // Interactive mode - use execute
30
+ return createInteractive(container);
31
+ }
32
+ }
33
+ /**
34
+ * Create server with CLI arguments (non-interactive)
35
+ */
36
+ async function createWithArguments(container, options) {
37
+ const useCase = container.createServerUseCase;
38
+ const prompt = container.promptPort;
39
+ try {
40
+ const server = await useCase.executeWithConfig({
41
+ name: options.name,
42
+ type: options.type,
43
+ version: options.version,
44
+ seed: options.seed,
45
+ worldUrl: options.worldUrl,
46
+ worldName: options.worldName,
47
+ autoStart: !options.noStart,
48
+ });
49
+ console.log('');
50
+ console.log(colors.green(`✓ Server '${server.name.value}' created successfully!`));
51
+ console.log(` Container: ${colors.cyan(server.containerName)}`);
52
+ console.log(` Type: ${server.type.label}`);
53
+ console.log(` Version: ${server.version.value}`);
54
+ console.log(` Memory: ${server.memory.value}`);
55
+ console.log('');
56
+ console.log(` Connect via: ${colors.cyan(server.name.hostname + ':25565')}`);
57
+ console.log('');
58
+ return 0;
59
+ }
60
+ catch (error) {
61
+ const message = error instanceof Error ? error.message : String(error);
62
+ log.error(message);
63
+ return 1;
64
+ }
65
+ }
66
+ /**
67
+ * Create server interactively (with prompts)
68
+ */
69
+ async function createInteractive(container) {
70
+ const useCase = container.createServerUseCase;
71
+ try {
72
+ await useCase.execute();
73
+ return 0;
74
+ }
75
+ catch (error) {
76
+ // Check if user cancelled
77
+ const prompt = container.promptPort;
78
+ if (prompt.isCancel(error)) {
79
+ return 0; // User cancellation is not an error
80
+ }
81
+ const message = error instanceof Error ? error.message : String(error);
82
+ log.error(message);
83
+ return 1;
84
+ }
85
+ }
86
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Delete command options from CLI arguments
3
+ */
4
+ export interface DeleteCommandOptions {
5
+ root?: string;
6
+ name?: string;
7
+ force?: boolean;
8
+ sudoPassword?: string;
9
+ }
10
+ /**
11
+ * Execute delete server command
12
+ *
13
+ * If name is provided, runs in CLI mode with direct deletion.
14
+ * If name is not provided, runs in interactive mode with selection.
15
+ */
16
+ export declare function deleteCommand(options: DeleteCommandOptions): Promise<number>;
17
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlF"}
@@ -0,0 +1,74 @@
1
+ import { Paths, log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../infrastructure/index.js';
3
+ import { promptSudoPasswordIfNeeded } from '../lib/sudo-utils.js';
4
+ /**
5
+ * Execute delete server command
6
+ *
7
+ * If name is provided, runs in CLI mode with direct deletion.
8
+ * If name is not provided, runs in interactive mode with selection.
9
+ */
10
+ export async function deleteCommand(options) {
11
+ const paths = new Paths(options.root);
12
+ // Check if initialized
13
+ if (!paths.isInitialized()) {
14
+ log.error('Platform not initialized. Run: mcctl init');
15
+ return 1;
16
+ }
17
+ // Prompt for sudo password if needed (avahi installed but no password provided)
18
+ const sudoPassword = await promptSudoPasswordIfNeeded(options.sudoPassword);
19
+ const container = getContainer({
20
+ rootDir: options.root,
21
+ sudoPassword,
22
+ });
23
+ // Determine execution mode
24
+ if (options.name) {
25
+ // CLI argument mode - use executeWithName
26
+ return deleteWithArguments(container, options);
27
+ }
28
+ else {
29
+ // Interactive mode - use execute
30
+ return deleteInteractive(container);
31
+ }
32
+ }
33
+ /**
34
+ * Delete server with CLI arguments (non-interactive)
35
+ */
36
+ async function deleteWithArguments(container, options) {
37
+ const useCase = container.deleteServerUseCase;
38
+ try {
39
+ const deleted = await useCase.executeWithName(options.name, options.force ?? false);
40
+ if (deleted) {
41
+ console.log('');
42
+ console.log(colors.green(`✓ Server '${options.name}' deleted successfully!`));
43
+ console.log(colors.dim(' World data has been preserved in worlds/ directory.'));
44
+ console.log('');
45
+ }
46
+ return deleted ? 0 : 1;
47
+ }
48
+ catch (error) {
49
+ const message = error instanceof Error ? error.message : String(error);
50
+ log.error(message);
51
+ return 1;
52
+ }
53
+ }
54
+ /**
55
+ * Delete server interactively (with prompts)
56
+ */
57
+ async function deleteInteractive(container) {
58
+ const useCase = container.deleteServerUseCase;
59
+ try {
60
+ const deleted = await useCase.execute();
61
+ return deleted ? 0 : 1;
62
+ }
63
+ catch (error) {
64
+ // Check if user cancelled
65
+ const prompt = container.promptPort;
66
+ if (prompt.isCancel(error)) {
67
+ return 0; // User cancellation is not an error
68
+ }
69
+ const message = error instanceof Error ? error.message : String(error);
70
+ log.error(message);
71
+ return 1;
72
+ }
73
+ }
74
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}