@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.
- package/dist/application/index.d.ts +3 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +5 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/ports/inbound/IBackupUseCase.d.ts +69 -0
- package/dist/application/ports/inbound/IBackupUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IBackupUseCase.js +2 -0
- package/dist/application/ports/inbound/IBackupUseCase.js.map +1 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.d.ts +32 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.js +2 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts +26 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.js +2 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts +47 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.js +2 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.d.ts +34 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.js +2 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts +56 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.js +2 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.js.map +1 -0
- package/dist/application/ports/inbound/index.d.ts +7 -0
- package/dist/application/ports/inbound/index.d.ts.map +1 -0
- package/dist/application/ports/inbound/index.js +2 -0
- package/dist/application/ports/inbound/index.js.map +1 -0
- package/dist/application/ports/index.d.ts +3 -0
- package/dist/application/ports/index.d.ts.map +1 -0
- package/dist/application/ports/index.js +2 -0
- package/dist/application/ports/index.js.map +1 -0
- package/dist/application/ports/outbound/IDocProvider.d.ts +73 -0
- package/dist/application/ports/outbound/IDocProvider.d.ts.map +1 -0
- package/dist/application/ports/outbound/IDocProvider.js +2 -0
- package/dist/application/ports/outbound/IDocProvider.js.map +1 -0
- package/dist/application/ports/outbound/IPromptPort.d.ts +136 -0
- package/dist/application/ports/outbound/IPromptPort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IPromptPort.js +2 -0
- package/dist/application/ports/outbound/IPromptPort.js.map +1 -0
- package/dist/application/ports/outbound/IServerRepository.d.ts +54 -0
- package/dist/application/ports/outbound/IServerRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IServerRepository.js +2 -0
- package/dist/application/ports/outbound/IServerRepository.js.map +1 -0
- package/dist/application/ports/outbound/IShellPort.d.ts +106 -0
- package/dist/application/ports/outbound/IShellPort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IShellPort.js +2 -0
- package/dist/application/ports/outbound/IShellPort.js.map +1 -0
- package/dist/application/ports/outbound/IWorldRepository.d.ts +71 -0
- package/dist/application/ports/outbound/IWorldRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IWorldRepository.js +2 -0
- package/dist/application/ports/outbound/IWorldRepository.js.map +1 -0
- package/dist/application/ports/outbound/index.d.ts +6 -0
- package/dist/application/ports/outbound/index.d.ts.map +1 -0
- package/dist/application/ports/outbound/index.js +2 -0
- package/dist/application/ports/outbound/index.js.map +1 -0
- package/dist/application/use-cases/BackupUseCase.d.ts +35 -0
- package/dist/application/use-cases/BackupUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/BackupUseCase.js +222 -0
- package/dist/application/use-cases/BackupUseCase.js.map +1 -0
- package/dist/application/use-cases/CreateServerUseCase.d.ts +22 -0
- package/dist/application/use-cases/CreateServerUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/CreateServerUseCase.js +145 -0
- package/dist/application/use-cases/CreateServerUseCase.js.map +1 -0
- package/dist/application/use-cases/DeleteServerUseCase.d.ts +24 -0
- package/dist/application/use-cases/DeleteServerUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/DeleteServerUseCase.js +108 -0
- package/dist/application/use-cases/DeleteServerUseCase.js.map +1 -0
- package/dist/application/use-cases/PlayerLookupUseCase.d.ts +23 -0
- package/dist/application/use-cases/PlayerLookupUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/PlayerLookupUseCase.js +130 -0
- package/dist/application/use-cases/PlayerLookupUseCase.js.map +1 -0
- package/dist/application/use-cases/ServerStatusUseCase.d.ts +30 -0
- package/dist/application/use-cases/ServerStatusUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/ServerStatusUseCase.js +117 -0
- package/dist/application/use-cases/ServerStatusUseCase.js.map +1 -0
- package/dist/application/use-cases/WorldManagementUseCase.d.ts +33 -0
- package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/WorldManagementUseCase.js +239 -0
- package/dist/application/use-cases/WorldManagementUseCase.js.map +1 -0
- package/dist/application/use-cases/index.d.ts +7 -0
- package/dist/application/use-cases/index.d.ts.map +1 -0
- package/dist/application/use-cases/index.js +7 -0
- package/dist/application/use-cases/index.js.map +1 -0
- package/dist/docker/index.d.ts +111 -0
- package/dist/docker/index.d.ts.map +1 -0
- package/dist/docker/index.js +532 -0
- package/dist/docker/index.js.map +1 -0
- package/dist/domain/entities/Server.d.ts +77 -0
- package/dist/domain/entities/Server.d.ts.map +1 -0
- package/dist/domain/entities/Server.js +138 -0
- package/dist/domain/entities/Server.js.map +1 -0
- package/dist/domain/entities/World.d.ts +70 -0
- package/dist/domain/entities/World.d.ts.map +1 -0
- package/dist/domain/entities/World.js +128 -0
- package/dist/domain/entities/World.js.map +1 -0
- package/dist/domain/entities/index.d.ts +3 -0
- package/dist/domain/entities/index.d.ts.map +1 -0
- package/dist/domain/entities/index.js +3 -0
- package/dist/domain/entities/index.js.map +1 -0
- package/dist/domain/index.d.ts +3 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +5 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/value-objects/McVersion.d.ts +35 -0
- package/dist/domain/value-objects/McVersion.d.ts.map +1 -0
- package/dist/domain/value-objects/McVersion.js +117 -0
- package/dist/domain/value-objects/McVersion.js.map +1 -0
- package/dist/domain/value-objects/Memory.d.ts +37 -0
- package/dist/domain/value-objects/Memory.d.ts.map +1 -0
- package/dist/domain/value-objects/Memory.js +107 -0
- package/dist/domain/value-objects/Memory.js.map +1 -0
- package/dist/domain/value-objects/ServerName.d.ts +21 -0
- package/dist/domain/value-objects/ServerName.d.ts.map +1 -0
- package/dist/domain/value-objects/ServerName.js +58 -0
- package/dist/domain/value-objects/ServerName.js.map +1 -0
- package/dist/domain/value-objects/ServerType.d.ts +39 -0
- package/dist/domain/value-objects/ServerType.d.ts.map +1 -0
- package/dist/domain/value-objects/ServerType.js +128 -0
- package/dist/domain/value-objects/ServerType.js.map +1 -0
- package/dist/domain/value-objects/WorldOptions.d.ts +49 -0
- package/dist/domain/value-objects/WorldOptions.d.ts.map +1 -0
- package/dist/domain/value-objects/WorldOptions.js +149 -0
- package/dist/domain/value-objects/WorldOptions.js.map +1 -0
- package/dist/domain/value-objects/index.d.ts +6 -0
- package/dist/domain/value-objects/index.d.ts.map +1 -0
- package/dist/domain/value-objects/index.js +6 -0
- package/dist/domain/value-objects/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/DocsAdapter.d.ts +45 -0
- package/dist/infrastructure/adapters/DocsAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/DocsAdapter.js +490 -0
- package/dist/infrastructure/adapters/DocsAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/ServerRepository.d.ts +49 -0
- package/dist/infrastructure/adapters/ServerRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ServerRepository.js +206 -0
- package/dist/infrastructure/adapters/ServerRepository.js.map +1 -0
- package/dist/infrastructure/adapters/ShellAdapter.d.ts +39 -0
- package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ShellAdapter.js +188 -0
- package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts +55 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.js +213 -0
- package/dist/infrastructure/adapters/WorldRepository.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +9 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -0
- package/dist/infrastructure/adapters/index.js +9 -0
- package/dist/infrastructure/adapters/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +6 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +6 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/types/index.d.ts +151 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +81 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +200 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,145 @@
|
|
|
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
|
|
62
|
+
const spinner = this.prompt.spinner();
|
|
63
|
+
spinner.start('Creating server...');
|
|
64
|
+
const result = await this.shell.createServer(name, {
|
|
65
|
+
type,
|
|
66
|
+
version,
|
|
67
|
+
worldOptions,
|
|
68
|
+
memory,
|
|
69
|
+
autoStart: true,
|
|
70
|
+
});
|
|
71
|
+
if (!result.success) {
|
|
72
|
+
spinner.stop('Failed to create server');
|
|
73
|
+
this.prompt.error(result.stderr || 'Unknown error occurred');
|
|
74
|
+
throw new Error(result.stderr || 'Server creation failed');
|
|
75
|
+
}
|
|
76
|
+
spinner.stop('Server created successfully');
|
|
77
|
+
this.prompt.success(`Server '${name.value}' created!`);
|
|
78
|
+
this.prompt.note(`Connect via: ${name.hostname}:25565`, 'Connection Info');
|
|
79
|
+
this.prompt.outro('Happy mining!');
|
|
80
|
+
return server;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (this.prompt.isCancel(error)) {
|
|
84
|
+
this.prompt.outro('Server creation cancelled');
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Execute server creation with provided configuration
|
|
92
|
+
*/
|
|
93
|
+
async executeWithConfig(config) {
|
|
94
|
+
// Parse configuration
|
|
95
|
+
const name = ServerName.create(config.name);
|
|
96
|
+
const type = config.type
|
|
97
|
+
? ServerType.create(config.type)
|
|
98
|
+
: ServerType.getRecommended();
|
|
99
|
+
const version = config.version
|
|
100
|
+
? McVersion.create(config.version)
|
|
101
|
+
: McVersion.latest();
|
|
102
|
+
const memory = config.memory
|
|
103
|
+
? Memory.create(config.memory)
|
|
104
|
+
: Memory.default();
|
|
105
|
+
// Determine world options
|
|
106
|
+
let worldOptions;
|
|
107
|
+
if (config.worldUrl) {
|
|
108
|
+
worldOptions = WorldOptions.downloadWorld(config.worldUrl);
|
|
109
|
+
}
|
|
110
|
+
else if (config.worldName) {
|
|
111
|
+
worldOptions = WorldOptions.existingWorld(config.worldName);
|
|
112
|
+
}
|
|
113
|
+
else if (config.seed) {
|
|
114
|
+
worldOptions = WorldOptions.newWorld(config.seed);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
worldOptions = WorldOptions.default();
|
|
118
|
+
}
|
|
119
|
+
// Check if server already exists
|
|
120
|
+
if (await this.serverRepo.exists(name.value)) {
|
|
121
|
+
throw new Error(`Server '${name.value}' already exists`);
|
|
122
|
+
}
|
|
123
|
+
// Create server
|
|
124
|
+
const server = Server.create({
|
|
125
|
+
name,
|
|
126
|
+
type,
|
|
127
|
+
version,
|
|
128
|
+
memory,
|
|
129
|
+
worldOptions,
|
|
130
|
+
});
|
|
131
|
+
// Execute creation
|
|
132
|
+
const result = await this.shell.createServer(name, {
|
|
133
|
+
type,
|
|
134
|
+
version,
|
|
135
|
+
worldOptions,
|
|
136
|
+
memory,
|
|
137
|
+
autoStart: config.autoStart ?? true,
|
|
138
|
+
});
|
|
139
|
+
if (!result.success) {
|
|
140
|
+
throw new Error(result.stderr || 'Server creation failed');
|
|
141
|
+
}
|
|
142
|
+
return server;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# 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.message('Server stopped');
|
|
84
|
+
}
|
|
85
|
+
// Delete server
|
|
86
|
+
spinner.start('Removing server...');
|
|
87
|
+
const result = await this.shell.deleteServer(server.name, force);
|
|
88
|
+
if (!result.success) {
|
|
89
|
+
spinner.stop('Failed to delete server');
|
|
90
|
+
this.prompt.error(result.stderr || 'Unknown error occurred');
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
spinner.stop('Server deleted');
|
|
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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player Lookup Use Case
|
|
3
|
+
* Looks up Minecraft player information
|
|
4
|
+
*/
|
|
5
|
+
export class PlayerLookupUseCase {
|
|
6
|
+
prompt;
|
|
7
|
+
shell;
|
|
8
|
+
constructor(prompt, shell) {
|
|
9
|
+
this.prompt = prompt;
|
|
10
|
+
this.shell = shell;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Interactive player lookup
|
|
14
|
+
*/
|
|
15
|
+
async lookup() {
|
|
16
|
+
this.prompt.intro('Player Lookup');
|
|
17
|
+
try {
|
|
18
|
+
// Prompt for player name
|
|
19
|
+
const name = await this.prompt.text({
|
|
20
|
+
message: 'Player name:',
|
|
21
|
+
placeholder: 'Notch',
|
|
22
|
+
validate: (value) => {
|
|
23
|
+
if (!value.trim()) {
|
|
24
|
+
return 'Player name is required';
|
|
25
|
+
}
|
|
26
|
+
if (!/^[a-zA-Z0-9_]{3,16}$/.test(value.trim())) {
|
|
27
|
+
return 'Invalid player name (3-16 alphanumeric characters)';
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
if (this.prompt.isCancel(name)) {
|
|
33
|
+
this.prompt.outro('Lookup cancelled');
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: 'Cancelled',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Execute lookup
|
|
40
|
+
return await this.lookupByName(name);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (this.prompt.isCancel(error)) {
|
|
44
|
+
this.prompt.outro('Lookup cancelled');
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
error: 'Cancelled',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Lookup player by name
|
|
55
|
+
*/
|
|
56
|
+
async lookupByName(name) {
|
|
57
|
+
const spinner = this.prompt.spinner();
|
|
58
|
+
spinner.start('Looking up player...');
|
|
59
|
+
const result = await this.shell.playerLookup(name);
|
|
60
|
+
if (!result.success) {
|
|
61
|
+
spinner.stop('Lookup failed');
|
|
62
|
+
// Check if player not found
|
|
63
|
+
if (result.stderr?.includes('not found') || result.code === 1) {
|
|
64
|
+
this.prompt.warn(`Player '${name}' not found`);
|
|
65
|
+
this.prompt.outro('Player does not exist');
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
name,
|
|
69
|
+
error: 'Player not found',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
this.prompt.error(result.stderr || 'Unknown error');
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
name,
|
|
76
|
+
error: result.stderr,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
spinner.stop('Player found');
|
|
80
|
+
// Parse output
|
|
81
|
+
const output = result.stdout;
|
|
82
|
+
const uuidMatch = output.match(/UUID:\s*([a-f0-9-]+)/i);
|
|
83
|
+
const skinMatch = output.match(/Skin:\s*(.+)/i);
|
|
84
|
+
const uuid = uuidMatch ? uuidMatch[1] : undefined;
|
|
85
|
+
const skinUrl = skinMatch ? skinMatch[1]?.trim() : undefined;
|
|
86
|
+
// Display result
|
|
87
|
+
this.prompt.note(`Name: ${name}\n` +
|
|
88
|
+
(uuid ? `UUID: ${uuid}\n` : '') +
|
|
89
|
+
(skinUrl ? `Skin: ${skinUrl}` : ''), 'Player Info');
|
|
90
|
+
this.prompt.outro('Lookup complete');
|
|
91
|
+
return {
|
|
92
|
+
success: true,
|
|
93
|
+
name,
|
|
94
|
+
uuid,
|
|
95
|
+
skinUrl,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get player UUID
|
|
100
|
+
*/
|
|
101
|
+
async getUuid(name, offline = false) {
|
|
102
|
+
const result = await this.shell.playerUuid(name, offline);
|
|
103
|
+
if (!result.success) {
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
name,
|
|
107
|
+
isOffline: offline,
|
|
108
|
+
error: result.stderr || 'Failed to get UUID',
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Parse UUID from output
|
|
112
|
+
const uuidMatch = result.stdout.match(/([a-f0-9-]{36})/i);
|
|
113
|
+
const uuid = uuidMatch ? uuidMatch[1] : undefined;
|
|
114
|
+
if (!uuid) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
name,
|
|
118
|
+
isOffline: offline,
|
|
119
|
+
error: 'Could not parse UUID from response',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
success: true,
|
|
124
|
+
name,
|
|
125
|
+
uuid,
|
|
126
|
+
isOffline: offline,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=PlayerLookupUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerLookupUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/PlayerLookupUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IServerStatusUseCase, ServerStatusResult, IPromptPort, IShellPort, IServerRepository } from '../ports/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Server Status Use Case
|
|
4
|
+
* Displays server status information
|
|
5
|
+
*/
|
|
6
|
+
export declare class ServerStatusUseCase implements IServerStatusUseCase {
|
|
7
|
+
private readonly prompt;
|
|
8
|
+
private readonly shell;
|
|
9
|
+
private readonly serverRepo;
|
|
10
|
+
constructor(prompt: IPromptPort, shell: IShellPort, serverRepo: IServerRepository);
|
|
11
|
+
/**
|
|
12
|
+
* Get status of all servers
|
|
13
|
+
*/
|
|
14
|
+
execute(): Promise<ServerStatusResult[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Get status of a specific server
|
|
17
|
+
*/
|
|
18
|
+
executeForServer(name: string): Promise<ServerStatusResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Get status in JSON format
|
|
21
|
+
*/
|
|
22
|
+
executeAsJson(): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Display status with formatting
|
|
25
|
+
*/
|
|
26
|
+
displayStatus(): Promise<void>;
|
|
27
|
+
private getStatusIcon;
|
|
28
|
+
private getStatusColor;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ServerStatusUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerStatusUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/ServerStatusUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,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,kBAAkB,EAAE,CAAC;IAe9C;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmBjE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAUtC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCpC,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,cAAc;CAevB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ServerStatus } from '../../domain/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Server Status Use Case
|
|
4
|
+
* Displays server status information
|
|
5
|
+
*/
|
|
6
|
+
export class ServerStatusUseCase {
|
|
7
|
+
prompt;
|
|
8
|
+
shell;
|
|
9
|
+
serverRepo;
|
|
10
|
+
constructor(prompt, shell, serverRepo) {
|
|
11
|
+
this.prompt = prompt;
|
|
12
|
+
this.shell = shell;
|
|
13
|
+
this.serverRepo = serverRepo;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get status of all servers
|
|
17
|
+
*/
|
|
18
|
+
async execute() {
|
|
19
|
+
const servers = await this.serverRepo.findAll();
|
|
20
|
+
return servers.map((server) => ({
|
|
21
|
+
name: server.name.value,
|
|
22
|
+
containerName: server.containerName,
|
|
23
|
+
hostname: server.hostname,
|
|
24
|
+
status: server.status,
|
|
25
|
+
type: server.type.label,
|
|
26
|
+
version: server.version.value,
|
|
27
|
+
playerCount: server.playerCount,
|
|
28
|
+
memory: server.memory.value,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get status of a specific server
|
|
33
|
+
*/
|
|
34
|
+
async executeForServer(name) {
|
|
35
|
+
const server = await this.serverRepo.findByName(name);
|
|
36
|
+
if (!server) {
|
|
37
|
+
throw new Error(`Server '${name}' not found`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
name: server.name.value,
|
|
41
|
+
containerName: server.containerName,
|
|
42
|
+
hostname: server.hostname,
|
|
43
|
+
status: server.status,
|
|
44
|
+
type: server.type.label,
|
|
45
|
+
version: server.version.value,
|
|
46
|
+
playerCount: server.playerCount,
|
|
47
|
+
memory: server.memory.value,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get status in JSON format
|
|
52
|
+
*/
|
|
53
|
+
async executeAsJson() {
|
|
54
|
+
const result = await this.shell.status(true);
|
|
55
|
+
if (!result.success) {
|
|
56
|
+
throw new Error(result.stderr || 'Failed to get status');
|
|
57
|
+
}
|
|
58
|
+
return result.stdout;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Display status with formatting
|
|
62
|
+
*/
|
|
63
|
+
async displayStatus() {
|
|
64
|
+
const servers = await this.execute();
|
|
65
|
+
if (servers.length === 0) {
|
|
66
|
+
this.prompt.warn('No servers found');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Display header
|
|
70
|
+
console.log('\n');
|
|
71
|
+
console.log('┌─────────────────────────────────────────────────────────────┐');
|
|
72
|
+
console.log('│ Server Status │');
|
|
73
|
+
console.log('├─────────────────────────────────────────────────────────────┤');
|
|
74
|
+
for (const server of servers) {
|
|
75
|
+
const statusIcon = this.getStatusIcon(server.status);
|
|
76
|
+
const statusColor = this.getStatusColor(server.status);
|
|
77
|
+
console.log(`│ ${statusIcon} ${server.name.padEnd(20)} ${server.type.padEnd(10)} ${server.version.padEnd(10)} │`);
|
|
78
|
+
if (server.status === ServerStatus.RUNNING) {
|
|
79
|
+
console.log(`│ └─ Players: ${server.playerCount} Memory: ${server.memory || 'N/A'}`.padEnd(64) + '│');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
console.log('└─────────────────────────────────────────────────────────────┘');
|
|
83
|
+
console.log('\n');
|
|
84
|
+
}
|
|
85
|
+
getStatusIcon(status) {
|
|
86
|
+
switch (status) {
|
|
87
|
+
case ServerStatus.RUNNING:
|
|
88
|
+
return '🟢';
|
|
89
|
+
case ServerStatus.STOPPED:
|
|
90
|
+
return '🔴';
|
|
91
|
+
case ServerStatus.STARTING:
|
|
92
|
+
return '🟡';
|
|
93
|
+
case ServerStatus.STOPPING:
|
|
94
|
+
return '🟠';
|
|
95
|
+
case ServerStatus.ERROR:
|
|
96
|
+
return '❌';
|
|
97
|
+
default:
|
|
98
|
+
return '⚪';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
getStatusColor(status) {
|
|
102
|
+
switch (status) {
|
|
103
|
+
case ServerStatus.RUNNING:
|
|
104
|
+
return 'green';
|
|
105
|
+
case ServerStatus.STOPPED:
|
|
106
|
+
return 'red';
|
|
107
|
+
case ServerStatus.STARTING:
|
|
108
|
+
case ServerStatus.STOPPING:
|
|
109
|
+
return 'yellow';
|
|
110
|
+
case ServerStatus.ERROR:
|
|
111
|
+
return 'red';
|
|
112
|
+
default:
|
|
113
|
+
return 'gray';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=ServerStatusUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerStatusUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/ServerStatusUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IWorldManagementUseCase, WorldListResult, WorldAssignResult, WorldReleaseResult, IPromptPort, IShellPort, IWorldRepository, IServerRepository } from '../ports/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* World Management Use Case
|
|
4
|
+
* Manages world assignments and locks
|
|
5
|
+
*/
|
|
6
|
+
export declare class WorldManagementUseCase implements IWorldManagementUseCase {
|
|
7
|
+
private readonly prompt;
|
|
8
|
+
private readonly shell;
|
|
9
|
+
private readonly worldRepo;
|
|
10
|
+
private readonly serverRepo;
|
|
11
|
+
constructor(prompt: IPromptPort, shell: IShellPort, worldRepo: IWorldRepository, serverRepo: IServerRepository);
|
|
12
|
+
/**
|
|
13
|
+
* List all worlds with lock status
|
|
14
|
+
*/
|
|
15
|
+
listWorlds(): Promise<WorldListResult[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Interactive world assignment
|
|
18
|
+
*/
|
|
19
|
+
assignWorld(): Promise<WorldAssignResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Assign world to server by name
|
|
22
|
+
*/
|
|
23
|
+
assignWorldByName(worldName: string, serverName: string): Promise<WorldAssignResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Interactive world release
|
|
26
|
+
*/
|
|
27
|
+
releaseWorld(): Promise<WorldReleaseResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Release world by name
|
|
30
|
+
*/
|
|
31
|
+
releaseWorldByName(worldName: string, force?: boolean): Promise<WorldReleaseResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=WorldManagementUseCase.d.ts.map
|