@minecraft-docker/shared 1.6.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 (169) hide show
  1. package/dist/application/index.d.ts +3 -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/application/ports/inbound/IBackupUseCase.d.ts +69 -0
  6. package/dist/application/ports/inbound/IBackupUseCase.d.ts.map +1 -0
  7. package/dist/application/ports/inbound/IBackupUseCase.js +2 -0
  8. package/dist/application/ports/inbound/IBackupUseCase.js.map +1 -0
  9. package/dist/application/ports/inbound/ICreateServerUseCase.d.ts +32 -0
  10. package/dist/application/ports/inbound/ICreateServerUseCase.d.ts.map +1 -0
  11. package/dist/application/ports/inbound/ICreateServerUseCase.js +2 -0
  12. package/dist/application/ports/inbound/ICreateServerUseCase.js.map +1 -0
  13. package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts +26 -0
  14. package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts.map +1 -0
  15. package/dist/application/ports/inbound/IDeleteServerUseCase.js +2 -0
  16. package/dist/application/ports/inbound/IDeleteServerUseCase.js.map +1 -0
  17. package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts +47 -0
  18. package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts.map +1 -0
  19. package/dist/application/ports/inbound/IPlayerLookupUseCase.js +2 -0
  20. package/dist/application/ports/inbound/IPlayerLookupUseCase.js.map +1 -0
  21. package/dist/application/ports/inbound/IServerStatusUseCase.d.ts +34 -0
  22. package/dist/application/ports/inbound/IServerStatusUseCase.d.ts.map +1 -0
  23. package/dist/application/ports/inbound/IServerStatusUseCase.js +2 -0
  24. package/dist/application/ports/inbound/IServerStatusUseCase.js.map +1 -0
  25. package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts +56 -0
  26. package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts.map +1 -0
  27. package/dist/application/ports/inbound/IWorldManagementUseCase.js +2 -0
  28. package/dist/application/ports/inbound/IWorldManagementUseCase.js.map +1 -0
  29. package/dist/application/ports/inbound/index.d.ts +7 -0
  30. package/dist/application/ports/inbound/index.d.ts.map +1 -0
  31. package/dist/application/ports/inbound/index.js +2 -0
  32. package/dist/application/ports/inbound/index.js.map +1 -0
  33. package/dist/application/ports/index.d.ts +3 -0
  34. package/dist/application/ports/index.d.ts.map +1 -0
  35. package/dist/application/ports/index.js +2 -0
  36. package/dist/application/ports/index.js.map +1 -0
  37. package/dist/application/ports/outbound/IDocProvider.d.ts +73 -0
  38. package/dist/application/ports/outbound/IDocProvider.d.ts.map +1 -0
  39. package/dist/application/ports/outbound/IDocProvider.js +2 -0
  40. package/dist/application/ports/outbound/IDocProvider.js.map +1 -0
  41. package/dist/application/ports/outbound/IPromptPort.d.ts +136 -0
  42. package/dist/application/ports/outbound/IPromptPort.d.ts.map +1 -0
  43. package/dist/application/ports/outbound/IPromptPort.js +2 -0
  44. package/dist/application/ports/outbound/IPromptPort.js.map +1 -0
  45. package/dist/application/ports/outbound/IServerRepository.d.ts +54 -0
  46. package/dist/application/ports/outbound/IServerRepository.d.ts.map +1 -0
  47. package/dist/application/ports/outbound/IServerRepository.js +2 -0
  48. package/dist/application/ports/outbound/IServerRepository.js.map +1 -0
  49. package/dist/application/ports/outbound/IShellPort.d.ts +106 -0
  50. package/dist/application/ports/outbound/IShellPort.d.ts.map +1 -0
  51. package/dist/application/ports/outbound/IShellPort.js +2 -0
  52. package/dist/application/ports/outbound/IShellPort.js.map +1 -0
  53. package/dist/application/ports/outbound/IWorldRepository.d.ts +71 -0
  54. package/dist/application/ports/outbound/IWorldRepository.d.ts.map +1 -0
  55. package/dist/application/ports/outbound/IWorldRepository.js +2 -0
  56. package/dist/application/ports/outbound/IWorldRepository.js.map +1 -0
  57. package/dist/application/ports/outbound/index.d.ts +6 -0
  58. package/dist/application/ports/outbound/index.d.ts.map +1 -0
  59. package/dist/application/ports/outbound/index.js +2 -0
  60. package/dist/application/ports/outbound/index.js.map +1 -0
  61. package/dist/application/use-cases/BackupUseCase.d.ts +35 -0
  62. package/dist/application/use-cases/BackupUseCase.d.ts.map +1 -0
  63. package/dist/application/use-cases/BackupUseCase.js +222 -0
  64. package/dist/application/use-cases/BackupUseCase.js.map +1 -0
  65. package/dist/application/use-cases/CreateServerUseCase.d.ts +22 -0
  66. package/dist/application/use-cases/CreateServerUseCase.d.ts.map +1 -0
  67. package/dist/application/use-cases/CreateServerUseCase.js +145 -0
  68. package/dist/application/use-cases/CreateServerUseCase.js.map +1 -0
  69. package/dist/application/use-cases/DeleteServerUseCase.d.ts +24 -0
  70. package/dist/application/use-cases/DeleteServerUseCase.d.ts.map +1 -0
  71. package/dist/application/use-cases/DeleteServerUseCase.js +108 -0
  72. package/dist/application/use-cases/DeleteServerUseCase.js.map +1 -0
  73. package/dist/application/use-cases/PlayerLookupUseCase.d.ts +23 -0
  74. package/dist/application/use-cases/PlayerLookupUseCase.d.ts.map +1 -0
  75. package/dist/application/use-cases/PlayerLookupUseCase.js +130 -0
  76. package/dist/application/use-cases/PlayerLookupUseCase.js.map +1 -0
  77. package/dist/application/use-cases/ServerStatusUseCase.d.ts +30 -0
  78. package/dist/application/use-cases/ServerStatusUseCase.d.ts.map +1 -0
  79. package/dist/application/use-cases/ServerStatusUseCase.js +117 -0
  80. package/dist/application/use-cases/ServerStatusUseCase.js.map +1 -0
  81. package/dist/application/use-cases/WorldManagementUseCase.d.ts +33 -0
  82. package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -0
  83. package/dist/application/use-cases/WorldManagementUseCase.js +239 -0
  84. package/dist/application/use-cases/WorldManagementUseCase.js.map +1 -0
  85. package/dist/application/use-cases/index.d.ts +7 -0
  86. package/dist/application/use-cases/index.d.ts.map +1 -0
  87. package/dist/application/use-cases/index.js +7 -0
  88. package/dist/application/use-cases/index.js.map +1 -0
  89. package/dist/docker/index.d.ts +111 -0
  90. package/dist/docker/index.d.ts.map +1 -0
  91. package/dist/docker/index.js +532 -0
  92. package/dist/docker/index.js.map +1 -0
  93. package/dist/domain/entities/Server.d.ts +77 -0
  94. package/dist/domain/entities/Server.d.ts.map +1 -0
  95. package/dist/domain/entities/Server.js +138 -0
  96. package/dist/domain/entities/Server.js.map +1 -0
  97. package/dist/domain/entities/World.d.ts +70 -0
  98. package/dist/domain/entities/World.d.ts.map +1 -0
  99. package/dist/domain/entities/World.js +128 -0
  100. package/dist/domain/entities/World.js.map +1 -0
  101. package/dist/domain/entities/index.d.ts +3 -0
  102. package/dist/domain/entities/index.d.ts.map +1 -0
  103. package/dist/domain/entities/index.js +3 -0
  104. package/dist/domain/entities/index.js.map +1 -0
  105. package/dist/domain/index.d.ts +3 -0
  106. package/dist/domain/index.d.ts.map +1 -0
  107. package/dist/domain/index.js +5 -0
  108. package/dist/domain/index.js.map +1 -0
  109. package/dist/domain/value-objects/McVersion.d.ts +35 -0
  110. package/dist/domain/value-objects/McVersion.d.ts.map +1 -0
  111. package/dist/domain/value-objects/McVersion.js +117 -0
  112. package/dist/domain/value-objects/McVersion.js.map +1 -0
  113. package/dist/domain/value-objects/Memory.d.ts +37 -0
  114. package/dist/domain/value-objects/Memory.d.ts.map +1 -0
  115. package/dist/domain/value-objects/Memory.js +107 -0
  116. package/dist/domain/value-objects/Memory.js.map +1 -0
  117. package/dist/domain/value-objects/ServerName.d.ts +21 -0
  118. package/dist/domain/value-objects/ServerName.d.ts.map +1 -0
  119. package/dist/domain/value-objects/ServerName.js +58 -0
  120. package/dist/domain/value-objects/ServerName.js.map +1 -0
  121. package/dist/domain/value-objects/ServerType.d.ts +39 -0
  122. package/dist/domain/value-objects/ServerType.d.ts.map +1 -0
  123. package/dist/domain/value-objects/ServerType.js +128 -0
  124. package/dist/domain/value-objects/ServerType.js.map +1 -0
  125. package/dist/domain/value-objects/WorldOptions.d.ts +49 -0
  126. package/dist/domain/value-objects/WorldOptions.d.ts.map +1 -0
  127. package/dist/domain/value-objects/WorldOptions.js +149 -0
  128. package/dist/domain/value-objects/WorldOptions.js.map +1 -0
  129. package/dist/domain/value-objects/index.d.ts +6 -0
  130. package/dist/domain/value-objects/index.d.ts.map +1 -0
  131. package/dist/domain/value-objects/index.js +6 -0
  132. package/dist/domain/value-objects/index.js.map +1 -0
  133. package/dist/index.d.ts +7 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +17 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/infrastructure/adapters/DocsAdapter.d.ts +45 -0
  138. package/dist/infrastructure/adapters/DocsAdapter.d.ts.map +1 -0
  139. package/dist/infrastructure/adapters/DocsAdapter.js +490 -0
  140. package/dist/infrastructure/adapters/DocsAdapter.js.map +1 -0
  141. package/dist/infrastructure/adapters/ServerRepository.d.ts +49 -0
  142. package/dist/infrastructure/adapters/ServerRepository.d.ts.map +1 -0
  143. package/dist/infrastructure/adapters/ServerRepository.js +206 -0
  144. package/dist/infrastructure/adapters/ServerRepository.js.map +1 -0
  145. package/dist/infrastructure/adapters/ShellAdapter.d.ts +39 -0
  146. package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -0
  147. package/dist/infrastructure/adapters/ShellAdapter.js +188 -0
  148. package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -0
  149. package/dist/infrastructure/adapters/WorldRepository.d.ts +55 -0
  150. package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -0
  151. package/dist/infrastructure/adapters/WorldRepository.js +213 -0
  152. package/dist/infrastructure/adapters/WorldRepository.js.map +1 -0
  153. package/dist/infrastructure/adapters/index.d.ts +9 -0
  154. package/dist/infrastructure/adapters/index.d.ts.map +1 -0
  155. package/dist/infrastructure/adapters/index.js +9 -0
  156. package/dist/infrastructure/adapters/index.js.map +1 -0
  157. package/dist/infrastructure/index.d.ts +6 -0
  158. package/dist/infrastructure/index.d.ts.map +1 -0
  159. package/dist/infrastructure/index.js +6 -0
  160. package/dist/infrastructure/index.js.map +1 -0
  161. package/dist/types/index.d.ts +151 -0
  162. package/dist/types/index.d.ts.map +1 -0
  163. package/dist/types/index.js +2 -0
  164. package/dist/types/index.js.map +1 -0
  165. package/dist/utils/index.d.ts +81 -0
  166. package/dist/utils/index.d.ts.map +1 -0
  167. package/dist/utils/index.js +200 -0
  168. package/dist/utils/index.js.map +1 -0
  169. package/package.json +1 -1
@@ -0,0 +1,532 @@
1
+ import { spawn, execSync, spawnSync } from 'node:child_process';
2
+ /**
3
+ * Execute a command and return stdout
4
+ * Uses spawnSync to properly handle arguments with special characters
5
+ */
6
+ function execCommand(command, args) {
7
+ try {
8
+ const result = spawnSync(command, args, {
9
+ encoding: 'utf-8',
10
+ stdio: ['pipe', 'pipe', 'pipe'],
11
+ });
12
+ if (result.error || result.status !== 0) {
13
+ return '';
14
+ }
15
+ return (result.stdout ?? '').trim();
16
+ }
17
+ catch {
18
+ return '';
19
+ }
20
+ }
21
+ /**
22
+ * Check if Docker is available
23
+ */
24
+ export function checkDocker() {
25
+ try {
26
+ execSync('docker info', { stdio: 'pipe' });
27
+ return true;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ /**
34
+ * Check if Docker Compose is available
35
+ */
36
+ export function checkDockerCompose() {
37
+ try {
38
+ execSync('docker compose version', { stdio: 'pipe' });
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /**
46
+ * Get container status
47
+ */
48
+ export function getContainerStatus(container) {
49
+ const result = execCommand('docker', [
50
+ 'inspect',
51
+ '--format',
52
+ '{{.State.Status}}',
53
+ container,
54
+ ]);
55
+ if (!result)
56
+ return 'not_found';
57
+ return result;
58
+ }
59
+ /**
60
+ * Get container health status
61
+ */
62
+ export function getContainerHealth(container) {
63
+ const result = execCommand('docker', [
64
+ 'inspect',
65
+ '--format',
66
+ '{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}',
67
+ container,
68
+ ]);
69
+ if (!result)
70
+ return 'unknown';
71
+ return result;
72
+ }
73
+ /**
74
+ * Check mc-router health via management API
75
+ * mc-router uses distroless image, so Docker healthcheck doesn't work
76
+ * Instead, we check the management API on localhost:25580
77
+ */
78
+ export function getRouterHealthViaApi() {
79
+ try {
80
+ // Check if mc-router is running first
81
+ const status = getContainerStatus('mc-router');
82
+ if (status !== 'running') {
83
+ return 'unknown';
84
+ }
85
+ // Try to connect to management API
86
+ const result = spawnSync('curl', ['-s', '-o', '/dev/null', '-w', '%{http_code}', 'http://127.0.0.1:25580/routes'], {
87
+ encoding: 'utf-8',
88
+ timeout: 3000,
89
+ stdio: ['pipe', 'pipe', 'pipe'],
90
+ });
91
+ if (result.error || result.status !== 0) {
92
+ // curl failed, try wget
93
+ const wgetResult = spawnSync('wget', ['-q', '-O', '/dev/null', 'http://127.0.0.1:25580/routes'], {
94
+ encoding: 'utf-8',
95
+ timeout: 3000,
96
+ stdio: ['pipe', 'pipe', 'pipe'],
97
+ });
98
+ if (wgetResult.error || wgetResult.status !== 0) {
99
+ return 'unhealthy';
100
+ }
101
+ return 'healthy';
102
+ }
103
+ const httpCode = (result.stdout ?? '').trim();
104
+ if (httpCode === '200') {
105
+ return 'healthy';
106
+ }
107
+ return 'unhealthy';
108
+ }
109
+ catch {
110
+ return 'unknown';
111
+ }
112
+ }
113
+ /**
114
+ * Check if container exists
115
+ */
116
+ export function containerExists(container) {
117
+ try {
118
+ execSync(`docker inspect ${container}`, { stdio: 'pipe' });
119
+ return true;
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
125
+ /**
126
+ * Get container's hostname label (mc-router.host)
127
+ */
128
+ export function getContainerHostname(container) {
129
+ const result = execCommand('docker', [
130
+ 'inspect',
131
+ '--format',
132
+ '{{index .Config.Labels "mc-router.host"}}',
133
+ container,
134
+ ]);
135
+ return result || '-';
136
+ }
137
+ /**
138
+ * Get all minecraft server containers (mc-* except mc-router)
139
+ */
140
+ export function getMcContainers() {
141
+ const result = execCommand('docker', [
142
+ 'ps',
143
+ '-a',
144
+ '--filter',
145
+ 'name=mc-',
146
+ '--format',
147
+ '{{.Names}}',
148
+ ]);
149
+ if (!result)
150
+ return [];
151
+ return result
152
+ .split('\n')
153
+ .filter(name => name && name !== 'mc-router')
154
+ .sort();
155
+ }
156
+ /**
157
+ * Get running minecraft server containers
158
+ */
159
+ export function getRunningMcContainers() {
160
+ const result = execCommand('docker', [
161
+ 'ps',
162
+ '--filter',
163
+ 'name=mc-',
164
+ '--filter',
165
+ 'status=running',
166
+ '--format',
167
+ '{{.Names}}',
168
+ ]);
169
+ if (!result)
170
+ return [];
171
+ return result
172
+ .split('\n')
173
+ .filter(name => name && name !== 'mc-router')
174
+ .sort();
175
+ }
176
+ /**
177
+ * Get server info for a container
178
+ */
179
+ export function getServerInfo(container) {
180
+ const serverName = container.replace(/^mc-/, '');
181
+ return {
182
+ name: serverName,
183
+ container,
184
+ status: getContainerStatus(container),
185
+ health: getContainerHealth(container),
186
+ hostname: getContainerHostname(container),
187
+ };
188
+ }
189
+ /**
190
+ * Get router info
191
+ */
192
+ export function getRouterInfo() {
193
+ return {
194
+ name: 'mc-router',
195
+ status: getContainerStatus('mc-router'),
196
+ health: getRouterHealthViaApi(),
197
+ port: 25565,
198
+ };
199
+ }
200
+ /**
201
+ * Get avahi-daemon status
202
+ */
203
+ export function getAvahiStatus() {
204
+ // Try systemctl first
205
+ try {
206
+ execSync('systemctl is-active --quiet avahi-daemon', { stdio: 'pipe' });
207
+ return 'running';
208
+ }
209
+ catch {
210
+ // Not running via systemctl
211
+ }
212
+ // Try OpenRC
213
+ try {
214
+ execSync('rc-service avahi-daemon status', { stdio: 'pipe' });
215
+ return 'running';
216
+ }
217
+ catch {
218
+ // Not running via OpenRC
219
+ }
220
+ // Check if installed
221
+ try {
222
+ execSync('which avahi-daemon', { stdio: 'pipe' });
223
+ return 'installed (not running)';
224
+ }
225
+ catch {
226
+ return 'not installed';
227
+ }
228
+ }
229
+ /**
230
+ * Get full platform status
231
+ */
232
+ export function getPlatformStatus() {
233
+ const containers = getMcContainers();
234
+ return {
235
+ router: getRouterInfo(),
236
+ avahi_daemon: {
237
+ name: 'avahi-daemon',
238
+ status: getAvahiStatus(),
239
+ type: 'system',
240
+ },
241
+ servers: containers.map(getServerInfo),
242
+ };
243
+ }
244
+ /**
245
+ * Start a container
246
+ */
247
+ export function startContainer(container) {
248
+ try {
249
+ execSync(`docker start ${container}`, { stdio: 'pipe' });
250
+ return true;
251
+ }
252
+ catch {
253
+ return false;
254
+ }
255
+ }
256
+ /**
257
+ * Stop a container
258
+ */
259
+ export function stopContainer(container) {
260
+ try {
261
+ execSync(`docker stop ${container}`, { stdio: 'pipe' });
262
+ return true;
263
+ }
264
+ catch {
265
+ return false;
266
+ }
267
+ }
268
+ /**
269
+ * Get container logs
270
+ */
271
+ export function getContainerLogs(container, lines = 50) {
272
+ return execCommand('docker', ['logs', '--tail', String(lines), container]);
273
+ }
274
+ /**
275
+ * Execute shell script with environment variables
276
+ */
277
+ export function execScript(scriptPath, args, env = {}) {
278
+ return new Promise((resolve) => {
279
+ const child = spawn('bash', [scriptPath, ...args], {
280
+ env: { ...process.env, ...env },
281
+ stdio: ['inherit', 'pipe', 'pipe'],
282
+ });
283
+ let stdout = '';
284
+ let stderr = '';
285
+ child.stdout?.on('data', (data) => {
286
+ stdout += data.toString();
287
+ process.stdout.write(data);
288
+ });
289
+ child.stderr?.on('data', (data) => {
290
+ stderr += data.toString();
291
+ process.stderr.write(data);
292
+ });
293
+ child.on('close', (code) => {
294
+ resolve({ code: code ?? 1, stdout, stderr });
295
+ });
296
+ child.on('error', () => {
297
+ resolve({ code: 1, stdout, stderr: 'Failed to execute script' });
298
+ });
299
+ });
300
+ }
301
+ /**
302
+ * Execute shell script with inherited stdio (interactive)
303
+ */
304
+ export function execScriptInteractive(scriptPath, args, env = {}) {
305
+ return new Promise((resolve) => {
306
+ const child = spawn('bash', [scriptPath, ...args], {
307
+ env: { ...process.env, ...env },
308
+ stdio: 'inherit',
309
+ });
310
+ child.on('close', (code) => {
311
+ resolve(code ?? 1);
312
+ });
313
+ child.on('error', () => {
314
+ resolve(1);
315
+ });
316
+ });
317
+ }
318
+ /**
319
+ * Get container resource stats (memory, CPU)
320
+ */
321
+ export function getContainerStats(container) {
322
+ // docker stats --no-stream --format "{{.MemUsage}},{{.CPUPerc}}"
323
+ // Example output: "2.1GiB / 4GiB,15.23%"
324
+ const result = execCommand('docker', [
325
+ 'stats',
326
+ '--no-stream',
327
+ '--format',
328
+ '{{.MemUsage}},{{.CPUPerc}}',
329
+ container,
330
+ ]);
331
+ if (!result)
332
+ return null;
333
+ try {
334
+ const [memUsage, cpuPerc] = result.split(',');
335
+ if (!memUsage || !cpuPerc)
336
+ return null;
337
+ // Parse memory: "2.1GiB / 4GiB" or "512MiB / 4GiB"
338
+ const memParts = memUsage.split('/').map((s) => s.trim());
339
+ if (memParts.length !== 2)
340
+ return null;
341
+ const parseMemory = (mem) => {
342
+ const match = mem.match(/^([\d.]+)\s*(B|KiB|MiB|GiB|TiB|KB|MB|GB|TB)?$/i);
343
+ if (!match || !match[1])
344
+ return 0;
345
+ const value = parseFloat(match[1]);
346
+ const unit = (match[2] ?? 'B').toUpperCase();
347
+ const multipliers = {
348
+ B: 1,
349
+ KIB: 1024,
350
+ MIB: 1024 ** 2,
351
+ GIB: 1024 ** 3,
352
+ TIB: 1024 ** 4,
353
+ KB: 1000,
354
+ MB: 1000 ** 2,
355
+ GB: 1000 ** 3,
356
+ TB: 1000 ** 4,
357
+ };
358
+ return value * (multipliers[unit] || 1);
359
+ };
360
+ const memoryUsage = parseMemory(memParts[0]);
361
+ const memoryLimit = parseMemory(memParts[1]);
362
+ const memoryPercent = memoryLimit > 0 ? (memoryUsage / memoryLimit) * 100 : 0;
363
+ // Parse CPU: "15.23%" or "0.00%"
364
+ const cpuPercent = parseFloat(cpuPerc.replace('%', '')) || 0;
365
+ return {
366
+ memoryUsage,
367
+ memoryLimit,
368
+ memoryPercent,
369
+ cpuPercent,
370
+ };
371
+ }
372
+ catch {
373
+ return null;
374
+ }
375
+ }
376
+ /**
377
+ * Get container uptime (time since start)
378
+ */
379
+ export function getContainerUptime(container) {
380
+ // docker inspect --format '{{.State.StartedAt}}'
381
+ const result = execCommand('docker', [
382
+ 'inspect',
383
+ '--format',
384
+ '{{.State.StartedAt}}',
385
+ container,
386
+ ]);
387
+ if (!result || result === '0001-01-01T00:00:00Z')
388
+ return null;
389
+ try {
390
+ const startedAt = new Date(result);
391
+ const now = new Date();
392
+ const diffMs = now.getTime() - startedAt.getTime();
393
+ const diffSeconds = Math.floor(diffMs / 1000);
394
+ // Format uptime
395
+ const days = Math.floor(diffSeconds / 86400);
396
+ const hours = Math.floor((diffSeconds % 86400) / 3600);
397
+ const minutes = Math.floor((diffSeconds % 3600) / 60);
398
+ let uptime = '';
399
+ if (days > 0)
400
+ uptime += `${days}d `;
401
+ if (hours > 0 || days > 0)
402
+ uptime += `${hours}h `;
403
+ uptime += `${minutes}m`;
404
+ return { uptime: uptime.trim(), seconds: diffSeconds };
405
+ }
406
+ catch {
407
+ return null;
408
+ }
409
+ }
410
+ /**
411
+ * Get online players via RCON
412
+ */
413
+ export async function getOnlinePlayers(container) {
414
+ try {
415
+ const result = execSync(`docker exec ${container} rcon-cli list`, {
416
+ encoding: 'utf-8',
417
+ timeout: 5000,
418
+ stdio: ['pipe', 'pipe', 'pipe'],
419
+ });
420
+ // Parse: "There are 3 of a max of 20 players online: Notch, Steve, Alex"
421
+ // Or: "There are 0 of a max of 20 players online:"
422
+ const countMatch = result.match(/There are (\d+)(?:\s+of a max of\s+|\/)(\d+) players? online/i);
423
+ if (!countMatch || !countMatch[1] || !countMatch[2])
424
+ return null;
425
+ const online = parseInt(countMatch[1], 10);
426
+ const max = parseInt(countMatch[2], 10);
427
+ // Extract player names after the colon
428
+ const playersMatch = result.match(/:\s*(.*)$/);
429
+ let players = [];
430
+ if (playersMatch && playersMatch[1]) {
431
+ players = playersMatch[1]
432
+ .split(',')
433
+ .map((s) => s.trim())
434
+ .filter(Boolean);
435
+ }
436
+ return { online, max, players };
437
+ }
438
+ catch {
439
+ return null;
440
+ }
441
+ }
442
+ /**
443
+ * Get detailed server info
444
+ */
445
+ export function getDetailedServerInfo(container, configEnv) {
446
+ const basic = getServerInfo(container);
447
+ const detailed = { ...basic };
448
+ // Only get extended info if container is running
449
+ if (basic.status === 'running') {
450
+ // Get stats
451
+ const stats = getContainerStats(container);
452
+ if (stats) {
453
+ detailed.stats = stats;
454
+ }
455
+ // Get uptime
456
+ const uptimeInfo = getContainerUptime(container);
457
+ if (uptimeInfo) {
458
+ detailed.uptime = uptimeInfo.uptime;
459
+ detailed.uptimeSeconds = uptimeInfo.seconds;
460
+ }
461
+ }
462
+ // Get config info if provided
463
+ if (configEnv) {
464
+ detailed.type = configEnv['TYPE'];
465
+ detailed.version = configEnv['VERSION'];
466
+ detailed.memory = configEnv['MEMORY'];
467
+ }
468
+ return detailed;
469
+ }
470
+ /**
471
+ * Get detailed server info with players (async)
472
+ */
473
+ export async function getDetailedServerInfoWithPlayers(container, configEnv) {
474
+ const detailed = getDetailedServerInfo(container, configEnv);
475
+ // Get players if running
476
+ if (detailed.status === 'running') {
477
+ const players = await getOnlinePlayers(container);
478
+ if (players) {
479
+ detailed.players = players;
480
+ }
481
+ }
482
+ return detailed;
483
+ }
484
+ /**
485
+ * Get router detailed info
486
+ */
487
+ export function getRouterDetailInfo() {
488
+ const basic = getRouterInfo();
489
+ const detailed = {
490
+ ...basic,
491
+ routes: [],
492
+ mode: '--in-docker (auto-discovery)',
493
+ };
494
+ // Get uptime
495
+ if (basic.status === 'running') {
496
+ const uptimeInfo = getContainerUptime('mc-router');
497
+ if (uptimeInfo) {
498
+ detailed.uptime = uptimeInfo.uptime;
499
+ detailed.uptimeSeconds = uptimeInfo.seconds;
500
+ }
501
+ }
502
+ // Get routes from all mc-* containers
503
+ const containers = getMcContainers();
504
+ for (const container of containers) {
505
+ const hostname = getContainerHostname(container);
506
+ if (hostname && hostname !== '-') {
507
+ // hostname might be comma-separated (e.g., "server.local,server.192.168.1.10.nip.io")
508
+ const hostnames = hostname.split(',').map((h) => h.trim());
509
+ const serverStatus = getContainerStatus(container);
510
+ for (const h of hostnames) {
511
+ detailed.routes.push({
512
+ hostname: h,
513
+ target: `${container}:25565`,
514
+ serverStatus,
515
+ });
516
+ }
517
+ }
518
+ }
519
+ return detailed;
520
+ }
521
+ /**
522
+ * Format bytes to human readable string
523
+ */
524
+ export function formatBytes(bytes) {
525
+ if (bytes === 0)
526
+ return '0 B';
527
+ const k = 1024;
528
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
529
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
530
+ return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
531
+ }
532
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docker/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { ServerName } from '../value-objects/ServerName.js';
2
+ import { ServerType } from '../value-objects/ServerType.js';
3
+ import { McVersion } from '../value-objects/McVersion.js';
4
+ import { Memory } from '../value-objects/Memory.js';
5
+ import { WorldOptions } from '../value-objects/WorldOptions.js';
6
+ /**
7
+ * Server status enumeration
8
+ */
9
+ export declare enum ServerStatus {
10
+ RUNNING = "running",
11
+ STOPPED = "stopped",
12
+ STARTING = "starting",
13
+ STOPPING = "stopping",
14
+ ERROR = "error",
15
+ UNKNOWN = "unknown"
16
+ }
17
+ /**
18
+ * Server configuration interface
19
+ */
20
+ export interface ServerConfig {
21
+ name: ServerName;
22
+ type: ServerType;
23
+ version: McVersion;
24
+ memory: Memory;
25
+ worldOptions: WorldOptions;
26
+ rconPassword?: string;
27
+ autoStart?: boolean;
28
+ }
29
+ /**
30
+ * Server entity
31
+ * Represents a Minecraft server instance
32
+ */
33
+ export declare class Server {
34
+ private readonly _config;
35
+ private _status;
36
+ private _playerCount;
37
+ constructor(config: ServerConfig);
38
+ get name(): ServerName;
39
+ get type(): ServerType;
40
+ get version(): McVersion;
41
+ get memory(): Memory;
42
+ get worldOptions(): WorldOptions;
43
+ get rconPassword(): string | undefined;
44
+ get autoStart(): boolean;
45
+ get status(): ServerStatus;
46
+ get playerCount(): number;
47
+ get isRunning(): boolean;
48
+ get isStopped(): boolean;
49
+ get hasPlayers(): boolean;
50
+ setStatus(status: ServerStatus): void;
51
+ setPlayerCount(count: number): void;
52
+ /**
53
+ * Container name for Docker
54
+ */
55
+ get containerName(): string;
56
+ /**
57
+ * Hostname for mc-router connection
58
+ */
59
+ get hostname(): string;
60
+ /**
61
+ * Convert to CLI arguments for create-server.sh
62
+ */
63
+ toCreateArgs(): string[];
64
+ /**
65
+ * Convert to environment variables for config.env
66
+ */
67
+ toEnvVars(): Record<string, string>;
68
+ /**
69
+ * Create a new server with the given configuration
70
+ */
71
+ static create(config: ServerConfig): Server;
72
+ /**
73
+ * Create a minimal server configuration (for listing/status)
74
+ */
75
+ static fromStatus(name: string, type: string, version: string, status: ServerStatus, playerCount: number): Server;
76
+ }
77
+ //# sourceMappingURL=Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;GAEG;AACH,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,YAAY;IAOhC,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,OAAO,IAAI,SAAS,CAEvB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAGD,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAGD,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIrC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOnC;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAgBxB;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IASnC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAI3C;;OAEG;IACH,MAAM,CAAC,UAAU,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM;CAYV"}