@minecraft-docker/mcctl-api 1.7.6
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/README.md +142 -0
- package/dist/app.d.ts +7 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +83 -0
- package/dist/app.js.map +1 -0
- package/dist/config/index.d.ts +32 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +124 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/rcon.d.ts +35 -0
- package/dist/lib/rcon.d.ts.map +1 -0
- package/dist/lib/rcon.js +90 -0
- package/dist/lib/rcon.js.map +1 -0
- package/dist/plugins/auth.d.ts +32 -0
- package/dist/plugins/auth.d.ts.map +1 -0
- package/dist/plugins/auth.js +194 -0
- package/dist/plugins/auth.js.map +1 -0
- package/dist/plugins/swagger.d.ts +170 -0
- package/dist/plugins/swagger.d.ts.map +1 -0
- package/dist/plugins/swagger.js +211 -0
- package/dist/plugins/swagger.js.map +1 -0
- package/dist/routes/auth.d.ts +12 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +144 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/backup.d.ts +9 -0
- package/dist/routes/backup.d.ts.map +1 -0
- package/dist/routes/backup.js +271 -0
- package/dist/routes/backup.js.map +1 -0
- package/dist/routes/console.d.ts +6 -0
- package/dist/routes/console.d.ts.map +1 -0
- package/dist/routes/console.js +90 -0
- package/dist/routes/console.js.map +1 -0
- package/dist/routes/players.d.ts +9 -0
- package/dist/routes/players.d.ts.map +1 -0
- package/dist/routes/players.js +353 -0
- package/dist/routes/players.js.map +1 -0
- package/dist/routes/router.d.ts +10 -0
- package/dist/routes/router.d.ts.map +1 -0
- package/dist/routes/router.js +55 -0
- package/dist/routes/router.js.map +1 -0
- package/dist/routes/servers/actions.d.ts +6 -0
- package/dist/routes/servers/actions.d.ts.map +1 -0
- package/dist/routes/servers/actions.js +65 -0
- package/dist/routes/servers/actions.js.map +1 -0
- package/dist/routes/servers.d.ts +10 -0
- package/dist/routes/servers.d.ts.map +1 -0
- package/dist/routes/servers.js +403 -0
- package/dist/routes/servers.js.map +1 -0
- package/dist/routes/worlds.d.ts +10 -0
- package/dist/routes/worlds.d.ts.map +1 -0
- package/dist/routes/worlds.js +341 -0
- package/dist/routes/worlds.js.map +1 -0
- package/dist/schemas/backup.d.ts +47 -0
- package/dist/schemas/backup.d.ts.map +1 -0
- package/dist/schemas/backup.js +43 -0
- package/dist/schemas/backup.js.map +1 -0
- package/dist/schemas/player.d.ts +46 -0
- package/dist/schemas/player.d.ts.map +1 -0
- package/dist/schemas/player.js +46 -0
- package/dist/schemas/player.js.map +1 -0
- package/dist/schemas/router.d.ts +42 -0
- package/dist/schemas/router.d.ts.map +1 -0
- package/dist/schemas/router.js +26 -0
- package/dist/schemas/router.js.map +1 -0
- package/dist/schemas/server.d.ts +139 -0
- package/dist/schemas/server.d.ts.map +1 -0
- package/dist/schemas/server.js +124 -0
- package/dist/schemas/server.js.map +1 -0
- package/dist/schemas/world.d.ts +142 -0
- package/dist/schemas/world.d.ts.map +1 -0
- package/dist/schemas/world.js +124 -0
- package/dist/schemas/world.js.map +1 -0
- package/dist/utils/docker-compose.d.ts +23 -0
- package/dist/utils/docker-compose.d.ts.map +1 -0
- package/dist/utils/docker-compose.js +100 -0
- package/dist/utils/docker-compose.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { config } from '../config/index.js';
|
|
4
|
+
const execPromise = promisify(exec);
|
|
5
|
+
// ============================================================
|
|
6
|
+
// Configuration
|
|
7
|
+
// ============================================================
|
|
8
|
+
/**
|
|
9
|
+
* Platform directory path.
|
|
10
|
+
* Uses config.platformPath which is resolved from:
|
|
11
|
+
* 1. PLATFORM_PATH environment variable
|
|
12
|
+
* 2. MCCTL_ROOT environment variable
|
|
13
|
+
* 3. ~/minecraft-servers (default)
|
|
14
|
+
*/
|
|
15
|
+
function getPlatformPath() {
|
|
16
|
+
return config.platformPath;
|
|
17
|
+
}
|
|
18
|
+
// ============================================================
|
|
19
|
+
// Server Name Validation
|
|
20
|
+
// ============================================================
|
|
21
|
+
/**
|
|
22
|
+
* Server name validation regex.
|
|
23
|
+
* Allows alphanumeric characters, hyphens, and underscores.
|
|
24
|
+
* Must start with a letter or number.
|
|
25
|
+
*/
|
|
26
|
+
const SERVER_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
|
|
27
|
+
export function isValidServerName(name) {
|
|
28
|
+
if (!name || name.length === 0 || name.length > 64) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return SERVER_NAME_REGEX.test(name);
|
|
32
|
+
}
|
|
33
|
+
export function sanitizeServerName(name) {
|
|
34
|
+
// Decode URI component if encoded
|
|
35
|
+
try {
|
|
36
|
+
name = decodeURIComponent(name);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// If decoding fails, use as-is
|
|
40
|
+
}
|
|
41
|
+
return name.trim();
|
|
42
|
+
}
|
|
43
|
+
// ============================================================
|
|
44
|
+
// Docker Compose Commands
|
|
45
|
+
// ============================================================
|
|
46
|
+
/**
|
|
47
|
+
* Execute a docker compose command for a specific server action.
|
|
48
|
+
*/
|
|
49
|
+
export async function executeServerAction(serverName, action) {
|
|
50
|
+
const platformPath = getPlatformPath();
|
|
51
|
+
const serviceName = `mc-${serverName}`;
|
|
52
|
+
let command;
|
|
53
|
+
switch (action) {
|
|
54
|
+
case 'start':
|
|
55
|
+
command = `docker compose up -d ${serviceName}`;
|
|
56
|
+
break;
|
|
57
|
+
case 'stop':
|
|
58
|
+
command = `docker compose stop ${serviceName}`;
|
|
59
|
+
break;
|
|
60
|
+
case 'restart':
|
|
61
|
+
command = `docker compose restart ${serviceName}`;
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
error: `Unknown action: ${action}`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const options = {
|
|
70
|
+
cwd: platformPath,
|
|
71
|
+
timeout: 60000, // 60 second timeout
|
|
72
|
+
env: {
|
|
73
|
+
...process.env,
|
|
74
|
+
// Ensure Docker Compose uses the correct compose file
|
|
75
|
+
COMPOSE_FILE: 'docker-compose.yml',
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
try {
|
|
79
|
+
const { stdout, stderr } = await execPromise(command, options);
|
|
80
|
+
return {
|
|
81
|
+
success: true,
|
|
82
|
+
stdout: typeof stdout === 'string' ? stdout.trim() : stdout?.toString().trim(),
|
|
83
|
+
stderr: typeof stderr === 'string' ? stderr.trim() : stderr?.toString().trim(),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const execError = error;
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
stdout: typeof execError.stdout === 'string' ? execError.stdout.trim() : execError.stdout?.toString().trim(),
|
|
91
|
+
stderr: typeof execError.stderr === 'string' ? execError.stderr.trim() : execError.stderr?.toString().trim(),
|
|
92
|
+
error: execError.message ?? 'Unknown error',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ============================================================
|
|
97
|
+
// Export for Testing
|
|
98
|
+
// ============================================================
|
|
99
|
+
export { getPlatformPath };
|
|
100
|
+
//# sourceMappingURL=docker-compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-compose.js","sourceRoot":"","sources":["../../src/utils/docker-compose.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@minecraft-docker/mcctl-api",
|
|
3
|
+
"version": "1.7.6",
|
|
4
|
+
"description": "REST API server for managing Docker Minecraft servers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"mcctl-api": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"dev": "tsx watch src/index.ts",
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"start": "node dist/index.js",
|
|
21
|
+
"start:pm2": "pm2 start dist/index.js --name mcctl-api",
|
|
22
|
+
"stop:pm2": "pm2 stop mcctl-api",
|
|
23
|
+
"restart:pm2": "pm2 restart mcctl-api",
|
|
24
|
+
"logs:pm2": "pm2 logs mcctl-api",
|
|
25
|
+
"clean": "rm -rf dist",
|
|
26
|
+
"lint": "eslint src --ext .ts",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"minecraft",
|
|
32
|
+
"docker",
|
|
33
|
+
"api",
|
|
34
|
+
"fastify",
|
|
35
|
+
"mc-router",
|
|
36
|
+
"server-management"
|
|
37
|
+
],
|
|
38
|
+
"author": "smallmiro",
|
|
39
|
+
"license": "Apache-2.0",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/smallmiro/minecraft-server-manager.git",
|
|
43
|
+
"directory": "platform/services/mcctl-api"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://minecraft-server-manager.readthedocs.io/",
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@fastify/cors": "^10.0.2",
|
|
51
|
+
"@fastify/helmet": "^12.0.1",
|
|
52
|
+
"@fastify/swagger": "^9.6.1",
|
|
53
|
+
"@fastify/swagger-ui": "^5.2.4",
|
|
54
|
+
"@minecraft-docker/shared": "^1.7.6",
|
|
55
|
+
"@sinclair/typebox": "^0.34.48",
|
|
56
|
+
"bcrypt": "^6.0.0",
|
|
57
|
+
"dotenv": "^16.4.7",
|
|
58
|
+
"fastify": "^5.2.1",
|
|
59
|
+
"fastify-plugin": "^5.1.0",
|
|
60
|
+
"ip-range-check": "^0.2.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/bcrypt": "^6.0.0",
|
|
64
|
+
"@types/node": "^20.10.0",
|
|
65
|
+
"tsx": "^4.19.2",
|
|
66
|
+
"typescript": "^5.3.0",
|
|
67
|
+
"vitest": "^2.1.8"
|
|
68
|
+
}
|
|
69
|
+
}
|