@minecraft-docker/shared 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 (261) 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 +97 -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/IModSourcePort.d.ts +71 -0
  42. package/dist/application/ports/outbound/IModSourcePort.d.ts.map +1 -0
  43. package/dist/application/ports/outbound/IModSourcePort.js +19 -0
  44. package/dist/application/ports/outbound/IModSourcePort.js.map +1 -0
  45. package/dist/application/ports/outbound/IPromptPort.d.ts +148 -0
  46. package/dist/application/ports/outbound/IPromptPort.d.ts.map +1 -0
  47. package/dist/application/ports/outbound/IPromptPort.js +2 -0
  48. package/dist/application/ports/outbound/IPromptPort.js.map +1 -0
  49. package/dist/application/ports/outbound/IServerRepository.d.ts +54 -0
  50. package/dist/application/ports/outbound/IServerRepository.d.ts.map +1 -0
  51. package/dist/application/ports/outbound/IServerRepository.js +2 -0
  52. package/dist/application/ports/outbound/IServerRepository.js.map +1 -0
  53. package/dist/application/ports/outbound/IServiceManagerPort.d.ts +115 -0
  54. package/dist/application/ports/outbound/IServiceManagerPort.d.ts.map +1 -0
  55. package/dist/application/ports/outbound/IServiceManagerPort.js +2 -0
  56. package/dist/application/ports/outbound/IServiceManagerPort.js.map +1 -0
  57. package/dist/application/ports/outbound/IShellPort.d.ts +114 -0
  58. package/dist/application/ports/outbound/IShellPort.d.ts.map +1 -0
  59. package/dist/application/ports/outbound/IShellPort.js +2 -0
  60. package/dist/application/ports/outbound/IShellPort.js.map +1 -0
  61. package/dist/application/ports/outbound/IUserRepository.d.ts +42 -0
  62. package/dist/application/ports/outbound/IUserRepository.d.ts.map +1 -0
  63. package/dist/application/ports/outbound/IUserRepository.js +2 -0
  64. package/dist/application/ports/outbound/IUserRepository.js.map +1 -0
  65. package/dist/application/ports/outbound/IWorldRepository.d.ts +90 -0
  66. package/dist/application/ports/outbound/IWorldRepository.d.ts.map +1 -0
  67. package/dist/application/ports/outbound/IWorldRepository.js +2 -0
  68. package/dist/application/ports/outbound/IWorldRepository.js.map +1 -0
  69. package/dist/application/ports/outbound/index.d.ts +9 -0
  70. package/dist/application/ports/outbound/index.d.ts.map +1 -0
  71. package/dist/application/ports/outbound/index.js +2 -0
  72. package/dist/application/ports/outbound/index.js.map +1 -0
  73. package/dist/application/use-cases/BackupUseCase.d.ts +35 -0
  74. package/dist/application/use-cases/BackupUseCase.d.ts.map +1 -0
  75. package/dist/application/use-cases/BackupUseCase.js +222 -0
  76. package/dist/application/use-cases/BackupUseCase.js.map +1 -0
  77. package/dist/application/use-cases/CreateServerUseCase.d.ts +22 -0
  78. package/dist/application/use-cases/CreateServerUseCase.d.ts.map +1 -0
  79. package/dist/application/use-cases/CreateServerUseCase.js +144 -0
  80. package/dist/application/use-cases/CreateServerUseCase.js.map +1 -0
  81. package/dist/application/use-cases/DeleteServerUseCase.d.ts +24 -0
  82. package/dist/application/use-cases/DeleteServerUseCase.d.ts.map +1 -0
  83. package/dist/application/use-cases/DeleteServerUseCase.js +108 -0
  84. package/dist/application/use-cases/DeleteServerUseCase.js.map +1 -0
  85. package/dist/application/use-cases/PlayerLookupUseCase.d.ts +23 -0
  86. package/dist/application/use-cases/PlayerLookupUseCase.d.ts.map +1 -0
  87. package/dist/application/use-cases/PlayerLookupUseCase.js +130 -0
  88. package/dist/application/use-cases/PlayerLookupUseCase.js.map +1 -0
  89. package/dist/application/use-cases/ServerStatusUseCase.d.ts +30 -0
  90. package/dist/application/use-cases/ServerStatusUseCase.d.ts.map +1 -0
  91. package/dist/application/use-cases/ServerStatusUseCase.js +117 -0
  92. package/dist/application/use-cases/ServerStatusUseCase.js.map +1 -0
  93. package/dist/application/use-cases/WorldManagementUseCase.d.ts +50 -0
  94. package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -0
  95. package/dist/application/use-cases/WorldManagementUseCase.js +571 -0
  96. package/dist/application/use-cases/WorldManagementUseCase.js.map +1 -0
  97. package/dist/application/use-cases/index.d.ts +7 -0
  98. package/dist/application/use-cases/index.d.ts.map +1 -0
  99. package/dist/application/use-cases/index.js +7 -0
  100. package/dist/application/use-cases/index.js.map +1 -0
  101. package/dist/docker/index.d.ts +125 -0
  102. package/dist/docker/index.d.ts.map +1 -0
  103. package/dist/docker/index.js +557 -0
  104. package/dist/docker/index.js.map +1 -0
  105. package/dist/domain/entities/Server.d.ts +77 -0
  106. package/dist/domain/entities/Server.d.ts.map +1 -0
  107. package/dist/domain/entities/Server.js +138 -0
  108. package/dist/domain/entities/Server.js.map +1 -0
  109. package/dist/domain/entities/User.d.ts +77 -0
  110. package/dist/domain/entities/User.d.ts.map +1 -0
  111. package/dist/domain/entities/User.js +121 -0
  112. package/dist/domain/entities/User.js.map +1 -0
  113. package/dist/domain/entities/World.d.ts +76 -0
  114. package/dist/domain/entities/World.d.ts.map +1 -0
  115. package/dist/domain/entities/World.js +141 -0
  116. package/dist/domain/entities/World.js.map +1 -0
  117. package/dist/domain/entities/index.d.ts +4 -0
  118. package/dist/domain/entities/index.d.ts.map +1 -0
  119. package/dist/domain/entities/index.js +4 -0
  120. package/dist/domain/entities/index.js.map +1 -0
  121. package/dist/domain/index.d.ts +3 -0
  122. package/dist/domain/index.d.ts.map +1 -0
  123. package/dist/domain/index.js +7 -0
  124. package/dist/domain/index.js.map +1 -0
  125. package/dist/domain/mod/ModDependency.d.ts +18 -0
  126. package/dist/domain/mod/ModDependency.d.ts.map +1 -0
  127. package/dist/domain/mod/ModDependency.js +5 -0
  128. package/dist/domain/mod/ModDependency.js.map +1 -0
  129. package/dist/domain/mod/ModFile.d.ts +27 -0
  130. package/dist/domain/mod/ModFile.d.ts.map +1 -0
  131. package/dist/domain/mod/ModFile.js +5 -0
  132. package/dist/domain/mod/ModFile.js.map +1 -0
  133. package/dist/domain/mod/ModProject.d.ts +36 -0
  134. package/dist/domain/mod/ModProject.d.ts.map +1 -0
  135. package/dist/domain/mod/ModProject.js +5 -0
  136. package/dist/domain/mod/ModProject.js.map +1 -0
  137. package/dist/domain/mod/ModSearchResult.d.ts +18 -0
  138. package/dist/domain/mod/ModSearchResult.d.ts.map +1 -0
  139. package/dist/domain/mod/ModSearchResult.js +5 -0
  140. package/dist/domain/mod/ModSearchResult.js.map +1 -0
  141. package/dist/domain/mod/ModVersion.d.ts +36 -0
  142. package/dist/domain/mod/ModVersion.d.ts.map +1 -0
  143. package/dist/domain/mod/ModVersion.js +5 -0
  144. package/dist/domain/mod/ModVersion.js.map +1 -0
  145. package/dist/domain/mod/index.d.ts +11 -0
  146. package/dist/domain/mod/index.d.ts.map +1 -0
  147. package/dist/domain/mod/index.js +6 -0
  148. package/dist/domain/mod/index.js.map +1 -0
  149. package/dist/domain/mod/types.d.ts +43 -0
  150. package/dist/domain/mod/types.d.ts.map +1 -0
  151. package/dist/domain/mod/types.js +6 -0
  152. package/dist/domain/mod/types.js.map +1 -0
  153. package/dist/domain/value-objects/McVersion.d.ts +35 -0
  154. package/dist/domain/value-objects/McVersion.d.ts.map +1 -0
  155. package/dist/domain/value-objects/McVersion.js +117 -0
  156. package/dist/domain/value-objects/McVersion.js.map +1 -0
  157. package/dist/domain/value-objects/Memory.d.ts +37 -0
  158. package/dist/domain/value-objects/Memory.d.ts.map +1 -0
  159. package/dist/domain/value-objects/Memory.js +107 -0
  160. package/dist/domain/value-objects/Memory.js.map +1 -0
  161. package/dist/domain/value-objects/ProcessInfo.d.ts +99 -0
  162. package/dist/domain/value-objects/ProcessInfo.d.ts.map +1 -0
  163. package/dist/domain/value-objects/ProcessInfo.js +171 -0
  164. package/dist/domain/value-objects/ProcessInfo.js.map +1 -0
  165. package/dist/domain/value-objects/Role.d.ts +41 -0
  166. package/dist/domain/value-objects/Role.d.ts.map +1 -0
  167. package/dist/domain/value-objects/Role.js +66 -0
  168. package/dist/domain/value-objects/Role.js.map +1 -0
  169. package/dist/domain/value-objects/ServerName.d.ts +21 -0
  170. package/dist/domain/value-objects/ServerName.d.ts.map +1 -0
  171. package/dist/domain/value-objects/ServerName.js +58 -0
  172. package/dist/domain/value-objects/ServerName.js.map +1 -0
  173. package/dist/domain/value-objects/ServerType.d.ts +40 -0
  174. package/dist/domain/value-objects/ServerType.d.ts.map +1 -0
  175. package/dist/domain/value-objects/ServerType.js +136 -0
  176. package/dist/domain/value-objects/ServerType.js.map +1 -0
  177. package/dist/domain/value-objects/ServiceStatus.d.ts +64 -0
  178. package/dist/domain/value-objects/ServiceStatus.d.ts.map +1 -0
  179. package/dist/domain/value-objects/ServiceStatus.js +99 -0
  180. package/dist/domain/value-objects/ServiceStatus.js.map +1 -0
  181. package/dist/domain/value-objects/UserId.d.ts +21 -0
  182. package/dist/domain/value-objects/UserId.d.ts.map +1 -0
  183. package/dist/domain/value-objects/UserId.js +43 -0
  184. package/dist/domain/value-objects/UserId.js.map +1 -0
  185. package/dist/domain/value-objects/Username.d.ts +16 -0
  186. package/dist/domain/value-objects/Username.d.ts.map +1 -0
  187. package/dist/domain/value-objects/Username.js +46 -0
  188. package/dist/domain/value-objects/Username.js.map +1 -0
  189. package/dist/domain/value-objects/WorldOptions.d.ts +49 -0
  190. package/dist/domain/value-objects/WorldOptions.d.ts.map +1 -0
  191. package/dist/domain/value-objects/WorldOptions.js +149 -0
  192. package/dist/domain/value-objects/WorldOptions.js.map +1 -0
  193. package/dist/domain/value-objects/index.d.ts +11 -0
  194. package/dist/domain/value-objects/index.d.ts.map +1 -0
  195. package/dist/domain/value-objects/index.js +13 -0
  196. package/dist/domain/value-objects/index.js.map +1 -0
  197. package/dist/index.d.ts +9 -0
  198. package/dist/index.d.ts.map +1 -0
  199. package/dist/index.js +21 -0
  200. package/dist/index.js.map +1 -0
  201. package/dist/infrastructure/adapters/ApiPromptAdapter.d.ts +115 -0
  202. package/dist/infrastructure/adapters/ApiPromptAdapter.d.ts.map +1 -0
  203. package/dist/infrastructure/adapters/ApiPromptAdapter.js +268 -0
  204. package/dist/infrastructure/adapters/ApiPromptAdapter.js.map +1 -0
  205. package/dist/infrastructure/adapters/DocsAdapter.d.ts +45 -0
  206. package/dist/infrastructure/adapters/DocsAdapter.d.ts.map +1 -0
  207. package/dist/infrastructure/adapters/DocsAdapter.js +490 -0
  208. package/dist/infrastructure/adapters/DocsAdapter.js.map +1 -0
  209. package/dist/infrastructure/adapters/ServerRepository.d.ts +49 -0
  210. package/dist/infrastructure/adapters/ServerRepository.d.ts.map +1 -0
  211. package/dist/infrastructure/adapters/ServerRepository.js +206 -0
  212. package/dist/infrastructure/adapters/ServerRepository.js.map +1 -0
  213. package/dist/infrastructure/adapters/ShellAdapter.d.ts +41 -0
  214. package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -0
  215. package/dist/infrastructure/adapters/ShellAdapter.js +198 -0
  216. package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -0
  217. package/dist/infrastructure/adapters/SqliteUserRepository.d.ts +70 -0
  218. package/dist/infrastructure/adapters/SqliteUserRepository.d.ts.map +1 -0
  219. package/dist/infrastructure/adapters/SqliteUserRepository.js +149 -0
  220. package/dist/infrastructure/adapters/SqliteUserRepository.js.map +1 -0
  221. package/dist/infrastructure/adapters/WorldRepository.d.ts +67 -0
  222. package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -0
  223. package/dist/infrastructure/adapters/WorldRepository.js +283 -0
  224. package/dist/infrastructure/adapters/WorldRepository.js.map +1 -0
  225. package/dist/infrastructure/adapters/YamlUserRepository.d.ts +67 -0
  226. package/dist/infrastructure/adapters/YamlUserRepository.d.ts.map +1 -0
  227. package/dist/infrastructure/adapters/YamlUserRepository.js +161 -0
  228. package/dist/infrastructure/adapters/YamlUserRepository.js.map +1 -0
  229. package/dist/infrastructure/adapters/index.d.ts +12 -0
  230. package/dist/infrastructure/adapters/index.d.ts.map +1 -0
  231. package/dist/infrastructure/adapters/index.js +12 -0
  232. package/dist/infrastructure/adapters/index.js.map +1 -0
  233. package/dist/infrastructure/config/Pm2EcosystemConfig.d.ts +192 -0
  234. package/dist/infrastructure/config/Pm2EcosystemConfig.d.ts.map +1 -0
  235. package/dist/infrastructure/config/Pm2EcosystemConfig.js +48 -0
  236. package/dist/infrastructure/config/Pm2EcosystemConfig.js.map +1 -0
  237. package/dist/infrastructure/config/index.d.ts +6 -0
  238. package/dist/infrastructure/config/index.d.ts.map +1 -0
  239. package/dist/infrastructure/config/index.js +6 -0
  240. package/dist/infrastructure/config/index.js.map +1 -0
  241. package/dist/infrastructure/factories/ModSourceFactory.d.ts +73 -0
  242. package/dist/infrastructure/factories/ModSourceFactory.d.ts.map +1 -0
  243. package/dist/infrastructure/factories/ModSourceFactory.js +98 -0
  244. package/dist/infrastructure/factories/ModSourceFactory.js.map +1 -0
  245. package/dist/infrastructure/factories/index.d.ts +5 -0
  246. package/dist/infrastructure/factories/index.d.ts.map +1 -0
  247. package/dist/infrastructure/factories/index.js +5 -0
  248. package/dist/infrastructure/factories/index.js.map +1 -0
  249. package/dist/infrastructure/index.d.ts +7 -0
  250. package/dist/infrastructure/index.d.ts.map +1 -0
  251. package/dist/infrastructure/index.js +7 -0
  252. package/dist/infrastructure/index.js.map +1 -0
  253. package/dist/types/index.d.ts +151 -0
  254. package/dist/types/index.d.ts.map +1 -0
  255. package/dist/types/index.js +2 -0
  256. package/dist/types/index.js.map +1 -0
  257. package/dist/utils/index.d.ts +81 -0
  258. package/dist/utils/index.d.ts.map +1 -0
  259. package/dist/utils/index.js +200 -0
  260. package/dist/utils/index.js.map +1 -0
  261. package/package.json +10 -2
@@ -0,0 +1,35 @@
1
+ import type { IBackupUseCase, BackupPushResult, BackupStatusResult, BackupHistoryResult, BackupRestoreResult, IPromptPort, IShellPort } from '../ports/index.js';
2
+ /**
3
+ * Backup Use Case
4
+ * Manages world backups to GitHub
5
+ */
6
+ export declare class BackupUseCase implements IBackupUseCase {
7
+ private readonly prompt;
8
+ private readonly shell;
9
+ constructor(prompt: IPromptPort, shell: IShellPort);
10
+ /**
11
+ * Interactive backup push
12
+ */
13
+ push(): Promise<BackupPushResult>;
14
+ /**
15
+ * Push backup with message
16
+ */
17
+ pushWithMessage(message: string): Promise<BackupPushResult>;
18
+ /**
19
+ * Get backup status
20
+ */
21
+ status(): Promise<BackupStatusResult>;
22
+ /**
23
+ * Get backup history
24
+ */
25
+ history(): Promise<BackupHistoryResult[]>;
26
+ /**
27
+ * Interactive restore selection
28
+ */
29
+ restore(): Promise<BackupRestoreResult>;
30
+ /**
31
+ * Restore from specific commit
32
+ */
33
+ restoreFromCommit(commitHash: string): Promise<BackupRestoreResult>;
34
+ }
35
+ //# sourceMappingURL=BackupUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/BackupUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAEhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU;IAGpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAgDvC;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoCjE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA8B3C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoB/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkE7C;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAyB1E"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Backup Use Case
3
+ * Manages world backups to GitHub
4
+ */
5
+ export class BackupUseCase {
6
+ prompt;
7
+ shell;
8
+ constructor(prompt, shell) {
9
+ this.prompt = prompt;
10
+ this.shell = shell;
11
+ }
12
+ /**
13
+ * Interactive backup push
14
+ */
15
+ async push() {
16
+ this.prompt.intro('Backup Worlds to GitHub');
17
+ try {
18
+ // Check backup status first
19
+ const statusResult = await this.status();
20
+ if (!statusResult.configured) {
21
+ this.prompt.error('Backup not configured');
22
+ this.prompt.note('Set BACKUP_GITHUB_TOKEN and BACKUP_GITHUB_REPO in .env', 'Configuration Required');
23
+ this.prompt.outro('Backup cancelled');
24
+ return {
25
+ success: false,
26
+ error: 'Backup not configured',
27
+ };
28
+ }
29
+ // Prompt for backup message
30
+ const message = await this.prompt.text({
31
+ message: 'Backup message:',
32
+ placeholder: 'Manual backup',
33
+ });
34
+ if (this.prompt.isCancel(message)) {
35
+ this.prompt.outro('Backup cancelled');
36
+ return {
37
+ success: false,
38
+ error: 'Cancelled',
39
+ };
40
+ }
41
+ // Execute backup
42
+ return await this.pushWithMessage(message || 'Manual backup');
43
+ }
44
+ catch (error) {
45
+ if (this.prompt.isCancel(error)) {
46
+ this.prompt.outro('Backup cancelled');
47
+ return {
48
+ success: false,
49
+ error: 'Cancelled',
50
+ };
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ /**
56
+ * Push backup with message
57
+ */
58
+ async pushWithMessage(message) {
59
+ const spinner = this.prompt.spinner();
60
+ spinner.start('Backing up worlds...');
61
+ const result = await this.shell.backupPush(message);
62
+ if (!result.success) {
63
+ spinner.stop('Backup failed');
64
+ this.prompt.error(result.stderr || 'Unknown error');
65
+ return {
66
+ success: false,
67
+ message,
68
+ error: result.stderr,
69
+ };
70
+ }
71
+ spinner.stop('Backup complete');
72
+ // Parse commit hash from output
73
+ const commitMatch = result.stdout.match(/commit:\s*([a-f0-9]+)/i);
74
+ const commitHash = commitMatch ? commitMatch[1] : undefined;
75
+ this.prompt.success('Worlds backed up successfully');
76
+ if (commitHash) {
77
+ this.prompt.note(`Commit: ${commitHash}`, 'Backup Info');
78
+ }
79
+ this.prompt.outro('Backup complete');
80
+ return {
81
+ success: true,
82
+ commitHash,
83
+ message,
84
+ };
85
+ }
86
+ /**
87
+ * Get backup status
88
+ */
89
+ async status() {
90
+ const result = await this.shell.backupStatus();
91
+ if (!result.success) {
92
+ return {
93
+ configured: false,
94
+ };
95
+ }
96
+ // Parse status output
97
+ const output = result.stdout;
98
+ const repoMatch = output.match(/Repository:\s*(.+)/i);
99
+ const branchMatch = output.match(/Branch:\s*(.+)/i);
100
+ const lastBackupMatch = output.match(/Last backup:\s*(.+)/i);
101
+ const autoMatch = output.match(/Auto backup:\s*(enabled|disabled)/i);
102
+ return {
103
+ configured: true,
104
+ repository: repoMatch ? repoMatch[1]?.trim() : undefined,
105
+ branch: branchMatch ? branchMatch[1]?.trim() : undefined,
106
+ lastBackup: lastBackupMatch
107
+ ? new Date(lastBackupMatch[1].trim())
108
+ : undefined,
109
+ autoBackupEnabled: autoMatch
110
+ ? autoMatch[1]?.toLowerCase() === 'enabled'
111
+ : undefined,
112
+ };
113
+ }
114
+ /**
115
+ * Get backup history
116
+ */
117
+ async history() {
118
+ const result = await this.shell.backupHistory(true);
119
+ if (!result.success) {
120
+ return [];
121
+ }
122
+ try {
123
+ const data = JSON.parse(result.stdout);
124
+ return data.map((entry) => ({
125
+ commitHash: entry.hash,
126
+ message: entry.message,
127
+ date: new Date(entry.date),
128
+ author: entry.author,
129
+ }));
130
+ }
131
+ catch {
132
+ return [];
133
+ }
134
+ }
135
+ /**
136
+ * Interactive restore selection
137
+ */
138
+ async restore() {
139
+ this.prompt.intro('Restore from Backup');
140
+ try {
141
+ // Get history
142
+ const history = await this.history();
143
+ if (history.length === 0) {
144
+ this.prompt.warn('No backup history found');
145
+ this.prompt.outro('Nothing to restore');
146
+ return {
147
+ success: false,
148
+ commitHash: '',
149
+ error: 'No backup history found',
150
+ };
151
+ }
152
+ // Prompt for commit selection
153
+ const selected = await this.prompt.select({
154
+ message: 'Select backup to restore:',
155
+ options: history.slice(0, 10).map((entry) => ({
156
+ value: entry.commitHash,
157
+ label: entry.commitHash.substring(0, 7),
158
+ hint: `${entry.message} (${entry.date.toLocaleDateString()})`,
159
+ })),
160
+ });
161
+ if (this.prompt.isCancel(selected)) {
162
+ this.prompt.outro('Restore cancelled');
163
+ return {
164
+ success: false,
165
+ commitHash: '',
166
+ error: 'Cancelled',
167
+ };
168
+ }
169
+ // Confirm restore
170
+ const confirmed = await this.prompt.confirm({
171
+ message: 'This will overwrite current world data. Continue?',
172
+ initialValue: false,
173
+ });
174
+ if (!confirmed) {
175
+ this.prompt.outro('Restore cancelled');
176
+ return {
177
+ success: false,
178
+ commitHash: selected,
179
+ error: 'Cancelled',
180
+ };
181
+ }
182
+ // Execute restore
183
+ return await this.restoreFromCommit(selected);
184
+ }
185
+ catch (error) {
186
+ if (this.prompt.isCancel(error)) {
187
+ this.prompt.outro('Restore cancelled');
188
+ return {
189
+ success: false,
190
+ commitHash: '',
191
+ error: 'Cancelled',
192
+ };
193
+ }
194
+ throw error;
195
+ }
196
+ }
197
+ /**
198
+ * Restore from specific commit
199
+ */
200
+ async restoreFromCommit(commitHash) {
201
+ const spinner = this.prompt.spinner();
202
+ spinner.start('Restoring from backup...');
203
+ const result = await this.shell.backupRestore(commitHash);
204
+ if (!result.success) {
205
+ spinner.stop('Restore failed');
206
+ this.prompt.error(result.stderr || 'Unknown error');
207
+ return {
208
+ success: false,
209
+ commitHash,
210
+ error: result.stderr,
211
+ };
212
+ }
213
+ spinner.stop('Restore complete');
214
+ this.prompt.success(`Restored from ${commitHash.substring(0, 7)}`);
215
+ this.prompt.outro('Restore complete');
216
+ return {
217
+ success: true,
218
+ commitHash,
219
+ };
220
+ }
221
+ }
222
+ //# sourceMappingURL=BackupUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/BackupUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Server } from '../../domain/index.js';
2
+ import type { ICreateServerUseCase, CreateServerConfig, IPromptPort, IShellPort, IServerRepository, IWorldRepository } from '../ports/index.js';
3
+ /**
4
+ * Create Server Use Case
5
+ * Orchestrates interactive server creation flow
6
+ */
7
+ export declare class CreateServerUseCase implements ICreateServerUseCase {
8
+ private readonly prompt;
9
+ private readonly shell;
10
+ private readonly serverRepo;
11
+ private readonly worldRepo?;
12
+ constructor(prompt: IPromptPort, shell: IShellPort, serverRepo: IServerRepository, worldRepo?: IWorldRepository | undefined);
13
+ /**
14
+ * Execute interactive server creation
15
+ */
16
+ execute(): Promise<Server>;
17
+ /**
18
+ * Execute server creation with provided configuration
19
+ */
20
+ executeWithConfig(config: CreateServerConfig): Promise<Server>;
21
+ }
22
+ //# sourceMappingURL=CreateServerUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateServerUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/CreateServerUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAOP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAHV,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,iBAAiB,EAC7B,SAAS,CAAC,EAAE,gBAAgB,YAAA;IAG/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAyFhC;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAsDrE"}
@@ -0,0 +1,144 @@
1
+ import { Server, ServerName, ServerType, McVersion, Memory, WorldOptions, WorldSetupType, } from '../../domain/index.js';
2
+ /**
3
+ * Create Server Use Case
4
+ * Orchestrates interactive server creation flow
5
+ */
6
+ export class CreateServerUseCase {
7
+ prompt;
8
+ shell;
9
+ serverRepo;
10
+ worldRepo;
11
+ constructor(prompt, shell, serverRepo, worldRepo) {
12
+ this.prompt = prompt;
13
+ this.shell = shell;
14
+ this.serverRepo = serverRepo;
15
+ this.worldRepo = worldRepo;
16
+ }
17
+ /**
18
+ * Execute interactive server creation
19
+ */
20
+ async execute() {
21
+ this.prompt.intro('Create Minecraft Server');
22
+ try {
23
+ // Prompt for server name
24
+ const name = await this.prompt.promptServerName();
25
+ // Check if server already exists
26
+ if (await this.serverRepo.exists(name.value)) {
27
+ this.prompt.error(`Server '${name.value}' already exists`);
28
+ this.prompt.handleCancel();
29
+ }
30
+ // Prompt for server type
31
+ const type = await this.prompt.promptServerType();
32
+ // Prompt for Minecraft version
33
+ const version = await this.prompt.promptMcVersion(type);
34
+ // Prompt for world options
35
+ let worldOptions = await this.prompt.promptWorldOptions();
36
+ // If "existing" was selected and we have a world repository,
37
+ // show the enhanced world selection with availability status
38
+ if (worldOptions.setupType === WorldSetupType.EXISTING &&
39
+ this.worldRepo) {
40
+ const worldsWithStatus = await this.worldRepo.findAllWithServerStatus();
41
+ const selectedWorld = await this.prompt.promptExistingWorldSelection(worldsWithStatus);
42
+ if (selectedWorld) {
43
+ worldOptions = WorldOptions.existingWorld(selectedWorld.name);
44
+ }
45
+ else {
46
+ // User cancelled or no world available, fallback to new world
47
+ this.prompt.info('Creating a new world instead');
48
+ worldOptions = WorldOptions.newWorld();
49
+ }
50
+ }
51
+ // Prompt for memory
52
+ const memory = await this.prompt.promptMemory();
53
+ // Create server configuration
54
+ const server = Server.create({
55
+ name,
56
+ type,
57
+ version,
58
+ memory,
59
+ worldOptions,
60
+ });
61
+ // Execute creation - stop spinner before running script to avoid output conflicts
62
+ const spinner = this.prompt.spinner();
63
+ spinner.start('Creating server...');
64
+ spinner.stop('Running create script...');
65
+ const result = await this.shell.createServer(name, {
66
+ type,
67
+ version,
68
+ worldOptions,
69
+ memory,
70
+ autoStart: true,
71
+ });
72
+ if (!result.success) {
73
+ this.prompt.error(result.stderr || 'Unknown error occurred');
74
+ throw new Error(result.stderr || 'Server creation failed');
75
+ }
76
+ this.prompt.success(`Server '${name.value}' created!`);
77
+ this.prompt.note(`Connect via: ${name.hostname}:25565`, 'Connection Info');
78
+ this.prompt.outro('Happy mining!');
79
+ return server;
80
+ }
81
+ catch (error) {
82
+ if (this.prompt.isCancel(error)) {
83
+ this.prompt.outro('Server creation cancelled');
84
+ throw error;
85
+ }
86
+ throw error;
87
+ }
88
+ }
89
+ /**
90
+ * Execute server creation with provided configuration
91
+ */
92
+ async executeWithConfig(config) {
93
+ // Parse configuration
94
+ const name = ServerName.create(config.name);
95
+ const type = config.type
96
+ ? ServerType.create(config.type)
97
+ : ServerType.getRecommended();
98
+ const version = config.version
99
+ ? McVersion.create(config.version)
100
+ : McVersion.latest();
101
+ const memory = config.memory
102
+ ? Memory.create(config.memory)
103
+ : Memory.default();
104
+ // Determine world options
105
+ let worldOptions;
106
+ if (config.worldUrl) {
107
+ worldOptions = WorldOptions.downloadWorld(config.worldUrl);
108
+ }
109
+ else if (config.worldName) {
110
+ worldOptions = WorldOptions.existingWorld(config.worldName);
111
+ }
112
+ else if (config.seed) {
113
+ worldOptions = WorldOptions.newWorld(config.seed);
114
+ }
115
+ else {
116
+ worldOptions = WorldOptions.default();
117
+ }
118
+ // Check if server already exists
119
+ if (await this.serverRepo.exists(name.value)) {
120
+ throw new Error(`Server '${name.value}' already exists`);
121
+ }
122
+ // Create server
123
+ const server = Server.create({
124
+ name,
125
+ type,
126
+ version,
127
+ memory,
128
+ worldOptions,
129
+ });
130
+ // Execute creation
131
+ const result = await this.shell.createServer(name, {
132
+ type,
133
+ version,
134
+ worldOptions,
135
+ memory,
136
+ autoStart: config.autoStart ?? true,
137
+ });
138
+ if (!result.success) {
139
+ throw new Error(result.stderr || 'Server creation failed');
140
+ }
141
+ return server;
142
+ }
143
+ }
144
+ //# sourceMappingURL=CreateServerUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateServerUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/CreateServerUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { IDeleteServerUseCase, IPromptPort, IShellPort, IServerRepository } from '../ports/index.js';
2
+ /**
3
+ * Delete Server Use Case
4
+ * Orchestrates server deletion with confirmation
5
+ */
6
+ export declare class DeleteServerUseCase implements IDeleteServerUseCase {
7
+ private readonly prompt;
8
+ private readonly shell;
9
+ private readonly serverRepo;
10
+ constructor(prompt: IPromptPort, shell: IShellPort, serverRepo: IServerRepository);
11
+ /**
12
+ * Execute interactive server deletion
13
+ */
14
+ execute(): Promise<boolean>;
15
+ /**
16
+ * Execute server deletion with provided name
17
+ */
18
+ executeWithName(name: string, force?: boolean): Promise<boolean>;
19
+ /**
20
+ * Perform the actual deletion
21
+ */
22
+ private performDeletion;
23
+ }
24
+ //# sourceMappingURL=DeleteServerUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteServerUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/DeleteServerUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,iBAAiB;IAGhD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAsDjC;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBpE;;OAEG;YACW,eAAe;CAwC9B"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Delete Server Use Case
3
+ * Orchestrates server deletion with confirmation
4
+ */
5
+ export class DeleteServerUseCase {
6
+ prompt;
7
+ shell;
8
+ serverRepo;
9
+ constructor(prompt, shell, serverRepo) {
10
+ this.prompt = prompt;
11
+ this.shell = shell;
12
+ this.serverRepo = serverRepo;
13
+ }
14
+ /**
15
+ * Execute interactive server deletion
16
+ */
17
+ async execute() {
18
+ this.prompt.intro('Delete Minecraft Server');
19
+ try {
20
+ // Get all servers
21
+ const servers = await this.serverRepo.findAll();
22
+ if (servers.length === 0) {
23
+ this.prompt.warn('No servers found');
24
+ this.prompt.outro('Nothing to delete');
25
+ return false;
26
+ }
27
+ // Prompt for server selection
28
+ const server = await this.prompt.promptServerSelection(servers);
29
+ // Show server info
30
+ this.prompt.note(`Name: ${server.name.value}\n` +
31
+ `Type: ${server.type.label} ${server.version.value}\n` +
32
+ `Status: ${server.status}\n` +
33
+ (server.hasPlayers ? `Players: ${server.playerCount} online` : ''), 'Server Info');
34
+ // Warn if running with players
35
+ if (server.isRunning && server.hasPlayers) {
36
+ this.prompt.warn(`Warning: ${server.playerCount} player(s) are currently online!`);
37
+ }
38
+ // Confirm deletion
39
+ const confirmed = await this.prompt.confirm({
40
+ message: 'Are you sure you want to delete this server?',
41
+ initialValue: false,
42
+ });
43
+ if (!confirmed) {
44
+ this.prompt.outro('Deletion cancelled');
45
+ return false;
46
+ }
47
+ // Execute deletion
48
+ return await this.performDeletion(server);
49
+ }
50
+ catch (error) {
51
+ if (this.prompt.isCancel(error)) {
52
+ this.prompt.outro('Deletion cancelled');
53
+ return false;
54
+ }
55
+ throw error;
56
+ }
57
+ }
58
+ /**
59
+ * Execute server deletion with provided name
60
+ */
61
+ async executeWithName(name, force = false) {
62
+ // Check if server exists
63
+ const server = await this.serverRepo.findByName(name);
64
+ if (!server) {
65
+ throw new Error(`Server '${name}' not found`);
66
+ }
67
+ // If not force mode and server has players, throw error
68
+ if (!force && server.isRunning && server.hasPlayers) {
69
+ throw new Error(`Server '${name}' has ${server.playerCount} player(s) online. Use --force to delete anyway.`);
70
+ }
71
+ return await this.performDeletion(server, force);
72
+ }
73
+ /**
74
+ * Perform the actual deletion
75
+ */
76
+ async performDeletion(server, force = false) {
77
+ const spinner = this.prompt.spinner();
78
+ try {
79
+ // Stop server if running
80
+ if (server.isRunning) {
81
+ spinner.start('Stopping server...');
82
+ await this.shell.stopServer(server.name);
83
+ spinner.stop('Server stopped');
84
+ }
85
+ // Delete server - stop spinner before running script to avoid output conflicts
86
+ // Always pass force=true since confirmation was already handled by UseCase
87
+ spinner.start('Removing server...');
88
+ spinner.stop('Running delete script...');
89
+ const result = await this.shell.deleteServer(server.name, true);
90
+ if (!result.success) {
91
+ this.prompt.error(result.stderr || 'Unknown error occurred');
92
+ return false;
93
+ }
94
+ this.prompt.success(`Server '${server.name.value}' deleted`);
95
+ // Note about world preservation
96
+ if (server.worldOptions.isExistingWorld) {
97
+ this.prompt.note(`World data preserved in worlds/${server.worldOptions.worldName}/`, 'World Data');
98
+ }
99
+ this.prompt.outro('Server removed successfully');
100
+ return true;
101
+ }
102
+ catch (error) {
103
+ spinner.stop('Deletion failed');
104
+ throw error;
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=DeleteServerUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteServerUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/DeleteServerUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { IPlayerLookupUseCase, PlayerLookupResult, PlayerUuidResult, IPromptPort, IShellPort } from '../ports/index.js';
2
+ /**
3
+ * Player Lookup Use Case
4
+ * Looks up Minecraft player information
5
+ */
6
+ export declare class PlayerLookupUseCase implements IPlayerLookupUseCase {
7
+ private readonly prompt;
8
+ private readonly shell;
9
+ constructor(prompt: IPromptPort, shell: IShellPort);
10
+ /**
11
+ * Interactive player lookup
12
+ */
13
+ lookup(): Promise<PlayerLookupResult>;
14
+ /**
15
+ * Lookup player by name
16
+ */
17
+ lookupByName(name: string): Promise<PlayerLookupResult>;
18
+ /**
19
+ * Get player UUID
20
+ */
21
+ getUuid(name: string, offline?: boolean): Promise<PlayerUuidResult>;
22
+ }
23
+ //# sourceMappingURL=PlayerLookupUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayerLookupUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/PlayerLookupUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU;IAGpC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwD7D;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAgCxE"}