@minecraft-docker/shared 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 (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,213 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { existsSync } from 'node:fs';
4
+ import { Paths } from '../../utils/index.js';
5
+ import { World } from '../../domain/index.js';
6
+ import { getContainerStatus } from '../../docker/index.js';
7
+ /**
8
+ * WorldRepository
9
+ * Implements IWorldRepository for world data access
10
+ */
11
+ export class WorldRepository {
12
+ paths;
13
+ worldsDir;
14
+ locksDir;
15
+ constructor(paths) {
16
+ this.paths = paths ?? new Paths();
17
+ this.worldsDir = join(this.paths.root, 'worlds');
18
+ this.locksDir = join(this.worldsDir, '.locks');
19
+ }
20
+ /**
21
+ * Get all worlds
22
+ */
23
+ async findAll() {
24
+ const names = await this.listNames();
25
+ const worlds = [];
26
+ for (const name of names) {
27
+ const world = await this.findByName(name);
28
+ if (world) {
29
+ worlds.push(world);
30
+ }
31
+ }
32
+ return worlds;
33
+ }
34
+ /**
35
+ * Find world by name
36
+ */
37
+ async findByName(name) {
38
+ const worldPath = join(this.worldsDir, name);
39
+ if (!existsSync(worldPath)) {
40
+ return null;
41
+ }
42
+ const world = new World(name, worldPath);
43
+ // Get lock status
44
+ const lockData = await this.getLockStatus(name);
45
+ if (lockData) {
46
+ world.lockTo(lockData.serverName, lockData.pid);
47
+ }
48
+ // Get world metadata
49
+ try {
50
+ const worldStat = await stat(worldPath);
51
+ const size = await this.getDirectorySize(worldPath);
52
+ world.setMetadata(size, worldStat.mtime);
53
+ }
54
+ catch {
55
+ // Ignore metadata errors
56
+ }
57
+ return world;
58
+ }
59
+ /**
60
+ * Check if world exists
61
+ */
62
+ async exists(name) {
63
+ const worldPath = join(this.worldsDir, name);
64
+ return existsSync(worldPath);
65
+ }
66
+ /**
67
+ * Get unlocked worlds
68
+ */
69
+ async findUnlocked() {
70
+ const worlds = await this.findAll();
71
+ return worlds.filter((w) => !w.isLocked);
72
+ }
73
+ /**
74
+ * Get locked worlds
75
+ */
76
+ async findLocked() {
77
+ const worlds = await this.findAll();
78
+ return worlds.filter((w) => w.isLocked);
79
+ }
80
+ /**
81
+ * Get worlds locked by a specific server
82
+ */
83
+ async findByServer(serverName) {
84
+ const worlds = await this.findAll();
85
+ return worlds.filter((w) => w.lockedBy === serverName);
86
+ }
87
+ /**
88
+ * List world names
89
+ */
90
+ async listNames() {
91
+ if (!existsSync(this.worldsDir)) {
92
+ return [];
93
+ }
94
+ try {
95
+ const entries = await readdir(this.worldsDir, { withFileTypes: true });
96
+ return entries
97
+ .filter((entry) => entry.isDirectory())
98
+ .filter((entry) => !entry.name.startsWith('.')) // Skip hidden dirs like .locks
99
+ .map((entry) => entry.name);
100
+ }
101
+ catch {
102
+ return [];
103
+ }
104
+ }
105
+ /**
106
+ * Get lock status for a world
107
+ */
108
+ async getLockStatus(name) {
109
+ const lockFile = join(this.locksDir, `${name}.lock`);
110
+ if (!existsSync(lockFile)) {
111
+ return null;
112
+ }
113
+ try {
114
+ const content = await readFile(lockFile, 'utf-8');
115
+ const [serverName, timestampStr, pidStr] = content.trim().split(':');
116
+ if (!serverName || !timestampStr) {
117
+ return null;
118
+ }
119
+ return {
120
+ worldName: name,
121
+ serverName,
122
+ timestamp: new Date(parseInt(timestampStr, 10) * 1000),
123
+ pid: pidStr ? parseInt(pidStr, 10) : undefined,
124
+ };
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ }
130
+ /**
131
+ * Get all worlds with their server status
132
+ * Returns worlds categorized by availability
133
+ */
134
+ async findAllWithServerStatus() {
135
+ const worlds = await this.findAll();
136
+ const results = [];
137
+ for (const world of worlds) {
138
+ if (!world.isLocked) {
139
+ // World is not locked by any server - available
140
+ results.push({
141
+ world,
142
+ category: 'available',
143
+ });
144
+ }
145
+ else {
146
+ // World is locked - check server status
147
+ const serverName = world.lockedBy;
148
+ const containerName = serverName.startsWith('mc-')
149
+ ? serverName
150
+ : `mc-${serverName}`;
151
+ const containerStatus = getContainerStatus(containerName);
152
+ let serverStatus;
153
+ let category;
154
+ if (containerStatus === 'running') {
155
+ serverStatus = 'running';
156
+ category = 'running';
157
+ }
158
+ else if (containerStatus === 'not_found') {
159
+ serverStatus = 'not_found';
160
+ // If container not found, treat as available (stale lock)
161
+ category = 'available';
162
+ }
163
+ else {
164
+ // exited, paused, created, etc. - server is stopped
165
+ serverStatus = 'stopped';
166
+ category = 'stopped';
167
+ }
168
+ results.push({
169
+ world,
170
+ assignedServer: serverName,
171
+ serverStatus,
172
+ category,
173
+ });
174
+ }
175
+ }
176
+ // Sort: available first, then stopped, then running
177
+ const categoryOrder = {
178
+ available: 0,
179
+ stopped: 1,
180
+ running: 2,
181
+ };
182
+ return results.sort((a, b) => {
183
+ const orderDiff = categoryOrder[a.category] - categoryOrder[b.category];
184
+ if (orderDiff !== 0)
185
+ return orderDiff;
186
+ return a.world.name.localeCompare(b.world.name);
187
+ });
188
+ }
189
+ /**
190
+ * Get directory size recursively
191
+ */
192
+ async getDirectorySize(dirPath) {
193
+ let totalSize = 0;
194
+ try {
195
+ const entries = await readdir(dirPath, { withFileTypes: true });
196
+ for (const entry of entries) {
197
+ const entryPath = join(dirPath, entry.name);
198
+ if (entry.isFile()) {
199
+ const fileStat = await stat(entryPath);
200
+ totalSize += fileStat.size;
201
+ }
202
+ else if (entry.isDirectory()) {
203
+ totalSize += await this.getDirectorySize(entryPath);
204
+ }
205
+ }
206
+ }
207
+ catch {
208
+ // Ignore errors
209
+ }
210
+ return totalSize;
211
+ }
212
+ }
213
+ //# sourceMappingURL=WorldRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorldRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/WorldRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Infrastructure Adapters
3
+ * Concrete implementations of application ports
4
+ */
5
+ export { ShellAdapter, type ShellAdapterOptions } from './ShellAdapter.js';
6
+ export { ServerRepository } from './ServerRepository.js';
7
+ export { WorldRepository } from './WorldRepository.js';
8
+ export { DocsAdapter } from './DocsAdapter.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Infrastructure Adapters
3
+ * Concrete implementations of application ports
4
+ */
5
+ export { ShellAdapter } from './ShellAdapter.js';
6
+ export { ServerRepository } from './ServerRepository.js';
7
+ export { WorldRepository } from './WorldRepository.js';
8
+ export { DocsAdapter } from './DocsAdapter.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Infrastructure Layer
3
+ * Adapters for external systems (shell, repositories, docs)
4
+ */
5
+ export * from './adapters/index.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Infrastructure Layer
3
+ * Adapters for external systems (shell, repositories, docs)
4
+ */
5
+ export * from './adapters/index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Server status types
3
+ */
4
+ export type ContainerStatus = 'running' | 'exited' | 'paused' | 'restarting' | 'dead' | 'created' | 'not_found';
5
+ export type HealthStatus = 'healthy' | 'unhealthy' | 'starting' | 'none' | 'unknown';
6
+ export interface ServerInfo {
7
+ name: string;
8
+ container: string;
9
+ status: ContainerStatus;
10
+ health: HealthStatus;
11
+ hostname: string;
12
+ }
13
+ export interface RouterInfo {
14
+ name: string;
15
+ status: ContainerStatus;
16
+ health: HealthStatus;
17
+ port: number;
18
+ }
19
+ export interface AvahiInfo {
20
+ name: string;
21
+ status: string;
22
+ type: 'system';
23
+ }
24
+ export interface PlatformStatus {
25
+ router: RouterInfo;
26
+ avahi_daemon: AvahiInfo;
27
+ servers: ServerInfo[];
28
+ }
29
+ /**
30
+ * Configuration types
31
+ */
32
+ export interface McctlConfig {
33
+ version: string;
34
+ initialized: string;
35
+ dataDir: string;
36
+ defaultType: ServerType;
37
+ defaultVersion: string;
38
+ autoStart: boolean;
39
+ avahiEnabled: boolean;
40
+ }
41
+ export type ServerType = 'PAPER' | 'VANILLA' | 'FORGE' | 'FABRIC' | 'SPIGOT' | 'BUKKIT';
42
+ export interface ServerConfig {
43
+ name: string;
44
+ type: ServerType;
45
+ version: string;
46
+ memory: string;
47
+ motd?: string;
48
+ seed?: string;
49
+ worldUrl?: string;
50
+ world?: string;
51
+ }
52
+ export interface EnvConfig {
53
+ HOST_IP?: string;
54
+ RCON_PASSWORD?: string;
55
+ TZ?: string;
56
+ DEFAULT_VERSION?: string;
57
+ DEFAULT_MEMORY?: string;
58
+ MINECRAFT_NETWORK?: string;
59
+ MINECRAFT_SUBNET?: string;
60
+ BACKUP_GITHUB_TOKEN?: string;
61
+ BACKUP_GITHUB_REPO?: string;
62
+ BACKUP_GITHUB_BRANCH?: string;
63
+ BACKUP_AUTO_ON_STOP?: boolean;
64
+ }
65
+ /**
66
+ * World lock types
67
+ */
68
+ export type LockStatus = 'unlocked' | 'locked' | 'stale';
69
+ export interface WorldLock {
70
+ world: string;
71
+ status: LockStatus;
72
+ holder?: string;
73
+ timestamp?: Date;
74
+ age?: string;
75
+ }
76
+ /**
77
+ * Backup types
78
+ */
79
+ export interface BackupInfo {
80
+ commit: string;
81
+ message: string;
82
+ date: Date;
83
+ author: string;
84
+ }
85
+ export interface BackupStatus {
86
+ configured: boolean;
87
+ repo?: string;
88
+ branch?: string;
89
+ lastBackup?: BackupInfo;
90
+ }
91
+ /**
92
+ * Player types
93
+ */
94
+ export interface PlayerInfo {
95
+ username: string;
96
+ uuid: string;
97
+ offlineUuid?: string;
98
+ avatar?: string;
99
+ }
100
+ /**
101
+ * Command result types
102
+ */
103
+ export interface CommandResult<T = void> {
104
+ success: boolean;
105
+ data?: T;
106
+ error?: string;
107
+ code?: number;
108
+ }
109
+ /**
110
+ * Container stats types
111
+ */
112
+ export interface ContainerStats {
113
+ memoryUsage: number;
114
+ memoryLimit: number;
115
+ memoryPercent: number;
116
+ cpuPercent: number;
117
+ }
118
+ export interface PlayerListResult {
119
+ online: number;
120
+ max: number;
121
+ players: string[];
122
+ }
123
+ /**
124
+ * Detailed server info
125
+ */
126
+ export interface DetailedServerInfo extends ServerInfo {
127
+ type?: string;
128
+ version?: string;
129
+ memory?: string;
130
+ uptime?: string;
131
+ uptimeSeconds?: number;
132
+ players?: PlayerListResult;
133
+ stats?: ContainerStats;
134
+ worldName?: string;
135
+ worldSize?: string;
136
+ }
137
+ /**
138
+ * Router detail info
139
+ */
140
+ export interface RouterDetailInfo extends RouterInfo {
141
+ uptime?: string;
142
+ uptimeSeconds?: number;
143
+ routes: RouteInfo[];
144
+ mode?: string;
145
+ }
146
+ export interface RouteInfo {
147
+ hostname: string;
148
+ target: string;
149
+ serverStatus: ContainerStatus;
150
+ }
151
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAChH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAErF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,IAAI;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,eAAe,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import type { McctlConfig, EnvConfig } from '../types/index.js';
2
+ /**
3
+ * Get the package root directory
4
+ */
5
+ export declare function getPackageRoot(): string;
6
+ /**
7
+ * Path resolution utilities
8
+ */
9
+ export declare class Paths {
10
+ private readonly dataDir;
11
+ private readonly packageRoot;
12
+ constructor(dataDir?: string);
13
+ /** User data directory (~/.minecraft-servers) */
14
+ get root(): string;
15
+ /** Platform directory within data */
16
+ get platform(): string;
17
+ /** Scripts directory (from package or local) */
18
+ get scripts(): string;
19
+ /** Templates directory (from package) */
20
+ get templates(): string;
21
+ /** Servers directory */
22
+ get servers(): string;
23
+ /** Worlds directory */
24
+ get worlds(): string;
25
+ /** Locks directory */
26
+ get locks(): string;
27
+ /** Shared plugins directory */
28
+ get plugins(): string;
29
+ /** Shared mods directory */
30
+ get mods(): string;
31
+ /** Backups directory */
32
+ get backups(): string;
33
+ /** .env file path */
34
+ get envFile(): string;
35
+ /** docker-compose.yml path */
36
+ get composeFile(): string;
37
+ /** Server template directory */
38
+ get serverTemplate(): string;
39
+ /** Config file path */
40
+ get configFile(): string;
41
+ /** Check if platform is initialized */
42
+ isInitialized(): boolean;
43
+ /** Get server directory */
44
+ serverDir(name: string): string;
45
+ /** Get world directory */
46
+ worldDir(name: string): string;
47
+ /** Get lock file path */
48
+ lockFile(world: string): string;
49
+ }
50
+ /**
51
+ * Configuration utilities
52
+ */
53
+ export declare class Config {
54
+ private readonly paths;
55
+ constructor(paths?: Paths);
56
+ /** Load mcctl config */
57
+ load(): McctlConfig | null;
58
+ /** Save mcctl config */
59
+ save(config: McctlConfig): void;
60
+ /** Load .env file */
61
+ loadEnv(): EnvConfig;
62
+ }
63
+ /**
64
+ * Console output utilities with colors
65
+ */
66
+ export declare const colors: {
67
+ red: (s: string) => string;
68
+ green: (s: string) => string;
69
+ yellow: (s: string) => string;
70
+ blue: (s: string) => string;
71
+ cyan: (s: string) => string;
72
+ bold: (s: string) => string;
73
+ dim: (s: string) => string;
74
+ };
75
+ export declare const log: {
76
+ info: (msg: string) => void;
77
+ warn: (msg: string) => void;
78
+ error: (msg: string) => void;
79
+ debug: (msg: string) => void;
80
+ };
81
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAsBvC;AAED;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,CAAC,EAAE,MAAM;IAK5B,iDAAiD;IACjD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qCAAqC;IACrC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,gDAAgD;IAChD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,yCAAyC;IACzC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,wBAAwB;IACxB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,uBAAuB;IACvB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,sBAAsB;IACtB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,+BAA+B;IAC/B,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,4BAA4B;IAC5B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,wBAAwB;IACxB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,qBAAqB;IACrB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,8BAA8B;IAC9B,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,gCAAgC;IAChC,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,uBAAuB;IACvB,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,uCAAuC;IACvC,aAAa,IAAI,OAAO;IAIxB,2BAA2B;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9B,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAGhC;AAED;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,CAAC,EAAE,KAAK;IAIzB,wBAAwB;IACxB,IAAI,IAAI,WAAW,GAAG,IAAI;IAc1B,wBAAwB;IACxB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAW/B,qBAAqB;IACrB,OAAO,IAAI,SAAS;CAqCrB;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;aACR,MAAM;eACJ,MAAM;gBACL,MAAM;cACR,MAAM;cACN,MAAM;cACN,MAAM;aACP,MAAM;CAChB,CAAC;AAEF,eAAO,MAAM,GAAG;gBACF,MAAM;gBACN,MAAM;iBACL,MAAM;iBACN,MAAM;CAKpB,CAAC"}