@minecraft-docker/mcctl-api 1.10.0 → 1.11.0
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/app.d.ts.map +1 -1
- package/dist/app.js +2 -0
- package/dist/app.js.map +1 -1
- package/dist/routes/servers/config.d.ts +10 -0
- package/dist/routes/servers/config.d.ts.map +1 -0
- package/dist/routes/servers/config.js +208 -0
- package/dist/routes/servers/config.js.map +1 -0
- package/dist/schemas/audit-log.d.ts +4 -4
- package/dist/schemas/audit-log.js +1 -1
- package/dist/schemas/audit-log.js.map +1 -1
- package/dist/schemas/config.d.ts +88 -0
- package/dist/schemas/config.d.ts.map +1 -0
- package/dist/schemas/config.js +78 -0
- package/dist/schemas/config.js.map +1 -0
- package/dist/services/ConfigService.d.ts +38 -0
- package/dist/services/ConfigService.d.ts.map +1 -0
- package/dist/services/ConfigService.js +247 -0
- package/dist/services/ConfigService.js.map +1 -0
- package/package.json +2 -2
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAiBnD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoFtF;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/app.js
CHANGED
|
@@ -6,6 +6,7 @@ import authPlugin from './plugins/auth.js';
|
|
|
6
6
|
import swaggerPlugin from './plugins/swagger.js';
|
|
7
7
|
import serversRoutes from './routes/servers.js';
|
|
8
8
|
import serverActionsRoutes from './routes/servers/actions.js';
|
|
9
|
+
import serverConfigRoutes from './routes/servers/config.js';
|
|
9
10
|
import consoleRoutes from './routes/console.js';
|
|
10
11
|
import worldsRoutes from './routes/worlds.js';
|
|
11
12
|
import authRoutes from './routes/auth.js';
|
|
@@ -45,6 +46,7 @@ export async function buildApp(options = {}) {
|
|
|
45
46
|
// Register server routes
|
|
46
47
|
await app.register(serversRoutes);
|
|
47
48
|
await app.register(serverActionsRoutes);
|
|
49
|
+
await app.register(serverConfigRoutes);
|
|
48
50
|
// Register router routes
|
|
49
51
|
await app.register(routerRoutes);
|
|
50
52
|
// Register player routes
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,eAAe,MAAM,wBAAwB,CAAC;AAMrD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAA2B,EAAE;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC;YACpD,KAAK,EAAE,MAAM,CAAC,QAAQ;SACvB,CAAC,CAAC,CAAC,KAAK;KACV,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QACvB,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IAEH,wEAAwE;IACxE,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;YACzB,qBAAqB,EAAE,IAAI;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,IAAI;KACpB,CAAC,CAAC;IAEH,mFAAmF;IACnF,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,MAAM,EAAE,CAAC;QACjF,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;YAChC,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAClC,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FastifyPluginAsync } from 'fastify';
|
|
2
|
+
/**
|
|
3
|
+
* Server configuration routes plugin
|
|
4
|
+
* Provides REST API for server configuration management
|
|
5
|
+
*/
|
|
6
|
+
declare const configPlugin: FastifyPluginAsync;
|
|
7
|
+
declare const _default: FastifyPluginAsync;
|
|
8
|
+
export default _default;
|
|
9
|
+
export { configPlugin };
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/routes/servers/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,kBAAkB,EAAgC,MAAM,SAAS,CAAC;AAqC5F;;;GAGG;AACH,QAAA,MAAM,YAAY,EAAE,kBA0MnB,CAAC;;AAMF,wBAGG;AAEH,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import fp from 'fastify-plugin';
|
|
2
|
+
import { join, resolve } from 'path';
|
|
3
|
+
import { existsSync, readdirSync, rmSync } from 'fs';
|
|
4
|
+
import { serverExists, getContainerStatus } from '@minecraft-docker/shared';
|
|
5
|
+
import { ServerConfigResponseSchema, UpdateServerConfigRequestSchema, UpdateServerConfigResponseSchema, WorldResetResponseSchema, } from '../../schemas/config.js';
|
|
6
|
+
import { ErrorResponseSchema, ServerNameParamsSchema } from '../../schemas/server.js';
|
|
7
|
+
import { config } from '../../config/index.js';
|
|
8
|
+
import { createConfigService } from '../../services/ConfigService.js';
|
|
9
|
+
// ============================================================
|
|
10
|
+
// Plugin Definition
|
|
11
|
+
// ============================================================
|
|
12
|
+
/**
|
|
13
|
+
* Server configuration routes plugin
|
|
14
|
+
* Provides REST API for server configuration management
|
|
15
|
+
*/
|
|
16
|
+
const configPlugin = async (fastify) => {
|
|
17
|
+
const configService = createConfigService(config.platformPath);
|
|
18
|
+
/**
|
|
19
|
+
* GET /api/servers/:name/config
|
|
20
|
+
* Get server configuration
|
|
21
|
+
*/
|
|
22
|
+
fastify.get('/api/servers/:name/config', {
|
|
23
|
+
schema: {
|
|
24
|
+
description: 'Get server configuration from config.env',
|
|
25
|
+
tags: ['servers', 'config'],
|
|
26
|
+
params: ServerNameParamsSchema,
|
|
27
|
+
response: {
|
|
28
|
+
200: ServerConfigResponseSchema,
|
|
29
|
+
404: ErrorResponseSchema,
|
|
30
|
+
500: ErrorResponseSchema,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
}, async (request, reply) => {
|
|
34
|
+
const { name } = request.params;
|
|
35
|
+
try {
|
|
36
|
+
// Check if server exists
|
|
37
|
+
if (!serverExists(name)) {
|
|
38
|
+
return reply.code(404).send({
|
|
39
|
+
error: 'NotFound',
|
|
40
|
+
message: `Server '${name}' not found`,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
// Check if config exists
|
|
44
|
+
if (!configService.configExists(name)) {
|
|
45
|
+
return reply.code(404).send({
|
|
46
|
+
error: 'NotFound',
|
|
47
|
+
message: `Configuration for server '${name}' not found`,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const serverConfig = configService.getConfig(name);
|
|
51
|
+
return reply.send({
|
|
52
|
+
config: serverConfig,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
fastify.log.error(error, 'Failed to get server configuration');
|
|
57
|
+
return reply.code(500).send({
|
|
58
|
+
error: 'InternalServerError',
|
|
59
|
+
message: 'Failed to get server configuration',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* PATCH /api/servers/:name/config
|
|
65
|
+
* Update server configuration
|
|
66
|
+
*/
|
|
67
|
+
fastify.patch('/api/servers/:name/config', {
|
|
68
|
+
schema: {
|
|
69
|
+
description: 'Update server configuration in config.env',
|
|
70
|
+
tags: ['servers', 'config'],
|
|
71
|
+
params: ServerNameParamsSchema,
|
|
72
|
+
body: UpdateServerConfigRequestSchema,
|
|
73
|
+
response: {
|
|
74
|
+
200: UpdateServerConfigResponseSchema,
|
|
75
|
+
404: ErrorResponseSchema,
|
|
76
|
+
500: ErrorResponseSchema,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
}, async (request, reply) => {
|
|
80
|
+
const { name } = request.params;
|
|
81
|
+
const updates = request.body;
|
|
82
|
+
try {
|
|
83
|
+
// Check if server exists
|
|
84
|
+
if (!serverExists(name)) {
|
|
85
|
+
return reply.code(404).send({
|
|
86
|
+
error: 'NotFound',
|
|
87
|
+
message: `Server '${name}' not found`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Check if config exists
|
|
91
|
+
if (!configService.configExists(name)) {
|
|
92
|
+
return reply.code(404).send({
|
|
93
|
+
error: 'NotFound',
|
|
94
|
+
message: `Configuration for server '${name}' not found`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const result = configService.updateConfig(name, updates);
|
|
98
|
+
fastify.log.info({
|
|
99
|
+
server: name,
|
|
100
|
+
changedFields: result.changedFields,
|
|
101
|
+
restartRequired: result.restartRequired,
|
|
102
|
+
}, 'Server configuration updated');
|
|
103
|
+
return reply.send({
|
|
104
|
+
success: true,
|
|
105
|
+
config: result.config,
|
|
106
|
+
restartRequired: result.restartRequired,
|
|
107
|
+
changedFields: result.changedFields,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
fastify.log.error(error, 'Failed to update server configuration');
|
|
112
|
+
return reply.code(500).send({
|
|
113
|
+
error: 'InternalServerError',
|
|
114
|
+
message: 'Failed to update server configuration',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* POST /api/servers/:name/world/reset
|
|
120
|
+
* Reset server world data
|
|
121
|
+
* Precondition: Server must be stopped
|
|
122
|
+
*/
|
|
123
|
+
fastify.post('/api/servers/:name/world/reset', {
|
|
124
|
+
schema: {
|
|
125
|
+
description: 'Reset server world data (server must be stopped)',
|
|
126
|
+
tags: ['servers', 'world'],
|
|
127
|
+
params: ServerNameParamsSchema,
|
|
128
|
+
response: {
|
|
129
|
+
200: WorldResetResponseSchema,
|
|
130
|
+
404: ErrorResponseSchema,
|
|
131
|
+
409: ErrorResponseSchema,
|
|
132
|
+
500: ErrorResponseSchema,
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
}, async (request, reply) => {
|
|
136
|
+
const { name } = request.params;
|
|
137
|
+
const containerName = `mc-${name}`;
|
|
138
|
+
try {
|
|
139
|
+
// Check if server exists
|
|
140
|
+
if (!serverExists(name)) {
|
|
141
|
+
return reply.code(404).send({
|
|
142
|
+
error: 'NotFound',
|
|
143
|
+
message: `Server '${name}' not found`,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// Check if server is stopped - must be fully stopped to reset world
|
|
147
|
+
const status = getContainerStatus(containerName);
|
|
148
|
+
if (status === 'running' || status === 'paused' || status === 'restarting' || status === 'created') {
|
|
149
|
+
return reply.code(409).send({
|
|
150
|
+
error: 'Conflict',
|
|
151
|
+
message: `Server must be stopped before resetting world (current status: ${status}). Please stop the server first.`,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Get world name from configuration
|
|
155
|
+
const worldName = configService.getWorldName(name);
|
|
156
|
+
// Validate world path to prevent path traversal
|
|
157
|
+
const worldsBase = resolve(config.platformPath, 'worlds');
|
|
158
|
+
const worldPath = resolve(worldsBase, worldName);
|
|
159
|
+
if (!worldPath.startsWith(worldsBase + '/')) {
|
|
160
|
+
return reply.code(400).send({
|
|
161
|
+
error: 'BadRequest',
|
|
162
|
+
message: 'Invalid world name in server configuration',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (!existsSync(worldPath)) {
|
|
166
|
+
return reply.code(404).send({
|
|
167
|
+
error: 'NotFound',
|
|
168
|
+
message: `World '${worldName}' not found`,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// Delete world directory contents, preserving .meta file
|
|
172
|
+
const entries = readdirSync(worldPath, { withFileTypes: true });
|
|
173
|
+
for (const entry of entries) {
|
|
174
|
+
if (entry.name === '.meta') {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const entryPath = join(worldPath, entry.name);
|
|
178
|
+
rmSync(entryPath, { recursive: true, force: true });
|
|
179
|
+
}
|
|
180
|
+
fastify.log.info({
|
|
181
|
+
server: name,
|
|
182
|
+
worldName,
|
|
183
|
+
worldPath,
|
|
184
|
+
}, 'World reset completed');
|
|
185
|
+
return reply.send({
|
|
186
|
+
success: true,
|
|
187
|
+
message: 'World data has been reset. Start the server to generate a new world.',
|
|
188
|
+
worldName,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
fastify.log.error(error, 'Failed to reset world');
|
|
193
|
+
return reply.code(500).send({
|
|
194
|
+
error: 'InternalServerError',
|
|
195
|
+
message: 'Failed to reset world',
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
};
|
|
200
|
+
// ============================================================
|
|
201
|
+
// Export
|
|
202
|
+
// ============================================================
|
|
203
|
+
export default fp(configPlugin, {
|
|
204
|
+
name: 'server-config-routes',
|
|
205
|
+
fastify: '5.x',
|
|
206
|
+
});
|
|
207
|
+
export { configPlugin };
|
|
208
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/routes/servers/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAgB,WAAW,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAyB,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAmBtE,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D;;;GAGG;AACH,MAAM,YAAY,GAAuB,KAAK,EAAE,OAAwB,EAAE,EAAE;IAC1E,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE/D;;;OAGG;IACH,OAAO,CAAC,GAAG,CAAiB,2BAA2B,EAAE;QACvD,MAAM,EAAE;YACN,WAAW,EAAE,0CAA0C;YACvD,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC3B,MAAM,EAAE,sBAAsB;YAC9B,QAAQ,EAAE;gBACR,GAAG,EAAE,0BAA0B;gBAC/B,GAAG,EAAE,mBAAmB;gBACxB,GAAG,EAAE,mBAAmB;aACzB;SACF;KACF,EAAE,KAAK,EAAE,OAAuC,EAAE,KAAmB,EAAE,EAAE;QACxE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEhC,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,WAAW,IAAI,aAAa;iBACtC,CAAC,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,6BAA6B,IAAI,aAAa;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEnD,OAAO,KAAK,CAAC,IAAI,CAAC;gBAChB,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,oCAAoC;aAC9C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAoB,2BAA2B,EAAE;QAC5D,MAAM,EAAE;YACN,WAAW,EAAE,2CAA2C;YACxD,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC3B,MAAM,EAAE,sBAAsB;YAC9B,IAAI,EAAE,+BAA+B;YACrC,QAAQ,EAAE;gBACR,GAAG,EAAE,gCAAgC;gBACrC,GAAG,EAAE,mBAAmB;gBACxB,GAAG,EAAE,mBAAmB;aACzB;SACF;KACF,EAAE,KAAK,EAAE,OAA0C,EAAE,KAAmB,EAAE,EAAE;QAC3E,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAE7B,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,WAAW,IAAI,aAAa;iBACtC,CAAC,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,6BAA6B,IAAI,aAAa;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,EAAE,8BAA8B,CAAC,CAAC;YAEnC,OAAO,KAAK,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,uCAAuC;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,OAAO,CAAC,IAAI,CAAkB,gCAAgC,EAAE;QAC9D,MAAM,EAAE;YACN,WAAW,EAAE,kDAAkD;YAC/D,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YAC1B,MAAM,EAAE,sBAAsB;YAC9B,QAAQ,EAAE;gBACR,GAAG,EAAE,wBAAwB;gBAC7B,GAAG,EAAE,mBAAmB;gBACxB,GAAG,EAAE,mBAAmB;gBACxB,GAAG,EAAE,mBAAmB;aACzB;SACF;KACF,EAAE,KAAK,EAAE,OAAwC,EAAE,KAAmB,EAAE,EAAE;QACzE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,MAAM,aAAa,GAAG,MAAM,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,WAAW,IAAI,aAAa;iBACtC,CAAC,CAAC;YACL,CAAC;YAED,oEAAoE;YACpE,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACnG,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,kEAAkE,MAAM,kCAAkC;iBACpH,CAAC,CAAC;YACL,CAAC;YAED,oCAAoC;YACpC,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAEnD,gDAAgD;YAChD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,YAAY;oBACnB,OAAO,EAAE,4CAA4C;iBACtD,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,UAAU,SAAS,aAAa;iBAC1C,CAAC,CAAC;YACL,CAAC;YAED,yDAAyD;YACzD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,IAAI;gBACZ,SAAS;gBACT,SAAS;aACV,EAAE,uBAAuB,CAAC,CAAC;YAE5B,OAAO,KAAK,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,sEAAsE;gBAC/E,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,uBAAuB;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,+DAA+D;AAC/D,SAAS;AACT,+DAA+D;AAE/D,eAAe,EAAE,CAAC,YAAY,EAAE;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -18,7 +18,7 @@ export declare const AuditLogEntrySchema: import("@sinclair/typebox").TObject<{
|
|
|
18
18
|
targetName: import("@sinclair/typebox").TString;
|
|
19
19
|
details: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>, import("@sinclair/typebox").TNull]>;
|
|
20
20
|
status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"failure">]>;
|
|
21
|
-
errorMessage: import("@sinclair/typebox").
|
|
21
|
+
errorMessage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
|
|
22
22
|
timestamp: import("@sinclair/typebox").TString;
|
|
23
23
|
}>;
|
|
24
24
|
/**
|
|
@@ -82,7 +82,7 @@ export declare const AuditLogListResponseSchema: import("@sinclair/typebox").TOb
|
|
|
82
82
|
targetName: import("@sinclair/typebox").TString;
|
|
83
83
|
details: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>, import("@sinclair/typebox").TNull]>;
|
|
84
84
|
status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"failure">]>;
|
|
85
|
-
errorMessage: import("@sinclair/typebox").
|
|
85
|
+
errorMessage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
|
|
86
86
|
timestamp: import("@sinclair/typebox").TString;
|
|
87
87
|
}>>;
|
|
88
88
|
total: import("@sinclair/typebox").TNumber;
|
|
@@ -117,7 +117,7 @@ export declare const AuditLogStatsResponseSchema: import("@sinclair/typebox").TO
|
|
|
117
117
|
targetName: import("@sinclair/typebox").TString;
|
|
118
118
|
details: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>, import("@sinclair/typebox").TNull]>;
|
|
119
119
|
status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"failure">]>;
|
|
120
|
-
errorMessage: import("@sinclair/typebox").
|
|
120
|
+
errorMessage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
|
|
121
121
|
timestamp: import("@sinclair/typebox").TString;
|
|
122
122
|
}>>;
|
|
123
123
|
oldestEntry: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
@@ -135,7 +135,7 @@ export declare const AuditLogDetailResponseSchema: import("@sinclair/typebox").T
|
|
|
135
135
|
targetName: import("@sinclair/typebox").TString;
|
|
136
136
|
details: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>, import("@sinclair/typebox").TNull]>;
|
|
137
137
|
status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"failure">]>;
|
|
138
|
-
errorMessage: import("@sinclair/typebox").
|
|
138
|
+
errorMessage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
|
|
139
139
|
timestamp: import("@sinclair/typebox").TString;
|
|
140
140
|
}>;
|
|
141
141
|
relatedLogs: import("@sinclair/typebox").TObject<{
|
|
@@ -38,7 +38,7 @@ export const AuditLogEntrySchema = Type.Object({
|
|
|
38
38
|
targetName: Type.String(),
|
|
39
39
|
details: Type.Union([Type.Record(Type.String(), Type.Unknown()), Type.Null()]),
|
|
40
40
|
status: AuditStatusSchema,
|
|
41
|
-
errorMessage: Type.Union([Type.String(), Type.Null()
|
|
41
|
+
errorMessage: Type.Optional(Type.Union([Type.String(), Type.Null()])),
|
|
42
42
|
timestamp: Type.String({ format: 'date-time' }),
|
|
43
43
|
});
|
|
44
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/schemas/audit-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAEjD,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACzB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;CACxB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;IACzB,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;IACzB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,EAAE,iBAAiB;IACzB,YAAY,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/schemas/audit-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Static } from '@sinclair/typebox';
|
|
2
|
+
/**
|
|
3
|
+
* Game difficulty levels
|
|
4
|
+
*/
|
|
5
|
+
export declare const DifficultySchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"peaceful">, import("@sinclair/typebox").TLiteral<"easy">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"hard">]>;
|
|
6
|
+
/**
|
|
7
|
+
* Game mode options
|
|
8
|
+
*/
|
|
9
|
+
export declare const GameModeSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"survival">, import("@sinclair/typebox").TLiteral<"creative">, import("@sinclair/typebox").TLiteral<"adventure">, import("@sinclair/typebox").TLiteral<"spectator">]>;
|
|
10
|
+
/**
|
|
11
|
+
* Server configuration values (from config.env)
|
|
12
|
+
*/
|
|
13
|
+
export declare const ServerConfigSchema: import("@sinclair/typebox").TObject<{
|
|
14
|
+
motd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
|
+
maxPlayers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
16
|
+
difficulty: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"peaceful">, import("@sinclair/typebox").TLiteral<"easy">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"hard">]>>;
|
|
17
|
+
gameMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"survival">, import("@sinclair/typebox").TLiteral<"creative">, import("@sinclair/typebox").TLiteral<"adventure">, import("@sinclair/typebox").TLiteral<"spectator">]>>;
|
|
18
|
+
pvp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
19
|
+
viewDistance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
20
|
+
spawnProtection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
21
|
+
memory: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
22
|
+
useAikarFlags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Request schema for updating server configuration
|
|
26
|
+
*/
|
|
27
|
+
export declare const UpdateServerConfigRequestSchema: import("@sinclair/typebox").TObject<{
|
|
28
|
+
motd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
29
|
+
maxPlayers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
30
|
+
difficulty: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"peaceful">, import("@sinclair/typebox").TLiteral<"easy">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"hard">]>>;
|
|
31
|
+
gameMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"survival">, import("@sinclair/typebox").TLiteral<"creative">, import("@sinclair/typebox").TLiteral<"adventure">, import("@sinclair/typebox").TLiteral<"spectator">]>>;
|
|
32
|
+
pvp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
33
|
+
viewDistance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
34
|
+
spawnProtection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
35
|
+
memory: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
36
|
+
useAikarFlags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Response schema for getting server configuration
|
|
40
|
+
*/
|
|
41
|
+
export declare const ServerConfigResponseSchema: import("@sinclair/typebox").TObject<{
|
|
42
|
+
config: import("@sinclair/typebox").TObject<{
|
|
43
|
+
motd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
44
|
+
maxPlayers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
45
|
+
difficulty: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"peaceful">, import("@sinclair/typebox").TLiteral<"easy">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"hard">]>>;
|
|
46
|
+
gameMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"survival">, import("@sinclair/typebox").TLiteral<"creative">, import("@sinclair/typebox").TLiteral<"adventure">, import("@sinclair/typebox").TLiteral<"spectator">]>>;
|
|
47
|
+
pvp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
48
|
+
viewDistance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
49
|
+
spawnProtection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
50
|
+
memory: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
51
|
+
useAikarFlags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
52
|
+
}>;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Response schema for updating server configuration
|
|
56
|
+
*/
|
|
57
|
+
export declare const UpdateServerConfigResponseSchema: import("@sinclair/typebox").TObject<{
|
|
58
|
+
success: import("@sinclair/typebox").TBoolean;
|
|
59
|
+
config: import("@sinclair/typebox").TObject<{
|
|
60
|
+
motd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
61
|
+
maxPlayers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
62
|
+
difficulty: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"peaceful">, import("@sinclair/typebox").TLiteral<"easy">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"hard">]>>;
|
|
63
|
+
gameMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"survival">, import("@sinclair/typebox").TLiteral<"creative">, import("@sinclair/typebox").TLiteral<"adventure">, import("@sinclair/typebox").TLiteral<"spectator">]>>;
|
|
64
|
+
pvp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
65
|
+
viewDistance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
66
|
+
spawnProtection: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
67
|
+
memory: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
68
|
+
useAikarFlags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
69
|
+
}>;
|
|
70
|
+
restartRequired: import("@sinclair/typebox").TBoolean;
|
|
71
|
+
changedFields: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Response schema for world reset operation
|
|
75
|
+
*/
|
|
76
|
+
export declare const WorldResetResponseSchema: import("@sinclair/typebox").TObject<{
|
|
77
|
+
success: import("@sinclair/typebox").TBoolean;
|
|
78
|
+
message: import("@sinclair/typebox").TString;
|
|
79
|
+
worldName: import("@sinclair/typebox").TString;
|
|
80
|
+
}>;
|
|
81
|
+
export type Difficulty = Static<typeof DifficultySchema>;
|
|
82
|
+
export type GameMode = Static<typeof GameModeSchema>;
|
|
83
|
+
export type ServerConfig = Static<typeof ServerConfigSchema>;
|
|
84
|
+
export type UpdateServerConfigRequest = Static<typeof UpdateServerConfigRequestSchema>;
|
|
85
|
+
export type ServerConfigResponse = Static<typeof ServerConfigResponseSchema>;
|
|
86
|
+
export type UpdateServerConfigResponse = Static<typeof UpdateServerConfigResponseSchema>;
|
|
87
|
+
export type WorldResetResponse = Static<typeof WorldResetResponseSchema>;
|
|
88
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMjD;;GAEG;AACH,eAAO,MAAM,gBAAgB,oOAK3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc,gPAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;EAa7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;EAa1C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAErC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;EAK3C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;EAInC,CAAC;AAMH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC7D,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACvF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC7E,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC;AACzF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Server Configuration Schemas
|
|
4
|
+
// ============================================================
|
|
5
|
+
/**
|
|
6
|
+
* Game difficulty levels
|
|
7
|
+
*/
|
|
8
|
+
export const DifficultySchema = Type.Union([
|
|
9
|
+
Type.Literal('peaceful'),
|
|
10
|
+
Type.Literal('easy'),
|
|
11
|
+
Type.Literal('normal'),
|
|
12
|
+
Type.Literal('hard'),
|
|
13
|
+
]);
|
|
14
|
+
/**
|
|
15
|
+
* Game mode options
|
|
16
|
+
*/
|
|
17
|
+
export const GameModeSchema = Type.Union([
|
|
18
|
+
Type.Literal('survival'),
|
|
19
|
+
Type.Literal('creative'),
|
|
20
|
+
Type.Literal('adventure'),
|
|
21
|
+
Type.Literal('spectator'),
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* Server configuration values (from config.env)
|
|
25
|
+
*/
|
|
26
|
+
export const ServerConfigSchema = Type.Object({
|
|
27
|
+
// Server Properties (hot-reload capable)
|
|
28
|
+
motd: Type.Optional(Type.String({ description: 'Message of the day' })),
|
|
29
|
+
maxPlayers: Type.Optional(Type.Number({ minimum: 1, maximum: 1000, description: 'Maximum player count' })),
|
|
30
|
+
difficulty: Type.Optional(DifficultySchema),
|
|
31
|
+
gameMode: Type.Optional(GameModeSchema),
|
|
32
|
+
pvp: Type.Optional(Type.Boolean({ description: 'Enable PvP combat' })),
|
|
33
|
+
viewDistance: Type.Optional(Type.Number({ minimum: 2, maximum: 32, description: 'View distance in chunks' })),
|
|
34
|
+
spawnProtection: Type.Optional(Type.Number({ minimum: 0, maximum: 100, description: 'Spawn protection radius' })),
|
|
35
|
+
// Performance Settings (restart required)
|
|
36
|
+
memory: Type.Optional(Type.String({ pattern: '^\\d+[MG]$', description: 'JVM memory allocation (e.g., 4G)' })),
|
|
37
|
+
useAikarFlags: Type.Optional(Type.Boolean({ description: 'Use Aikar JVM flags for optimization' })),
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Request schema for updating server configuration
|
|
41
|
+
*/
|
|
42
|
+
export const UpdateServerConfigRequestSchema = Type.Object({
|
|
43
|
+
// Server Properties (hot-reload capable)
|
|
44
|
+
motd: Type.Optional(Type.String({ minLength: 0, maxLength: 500 })),
|
|
45
|
+
maxPlayers: Type.Optional(Type.Number({ minimum: 1, maximum: 1000 })),
|
|
46
|
+
difficulty: Type.Optional(DifficultySchema),
|
|
47
|
+
gameMode: Type.Optional(GameModeSchema),
|
|
48
|
+
pvp: Type.Optional(Type.Boolean()),
|
|
49
|
+
viewDistance: Type.Optional(Type.Number({ minimum: 2, maximum: 32 })),
|
|
50
|
+
spawnProtection: Type.Optional(Type.Number({ minimum: 0, maximum: 100 })),
|
|
51
|
+
// Performance Settings (restart required)
|
|
52
|
+
memory: Type.Optional(Type.String({ pattern: '^\\d+[MG]$' })),
|
|
53
|
+
useAikarFlags: Type.Optional(Type.Boolean()),
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* Response schema for getting server configuration
|
|
57
|
+
*/
|
|
58
|
+
export const ServerConfigResponseSchema = Type.Object({
|
|
59
|
+
config: ServerConfigSchema,
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* Response schema for updating server configuration
|
|
63
|
+
*/
|
|
64
|
+
export const UpdateServerConfigResponseSchema = Type.Object({
|
|
65
|
+
success: Type.Boolean(),
|
|
66
|
+
config: ServerConfigSchema,
|
|
67
|
+
restartRequired: Type.Boolean({ description: 'Whether server restart is needed to apply changes' }),
|
|
68
|
+
changedFields: Type.Array(Type.String(), { description: 'List of fields that were changed' }),
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Response schema for world reset operation
|
|
72
|
+
*/
|
|
73
|
+
export const WorldResetResponseSchema = Type.Object({
|
|
74
|
+
success: Type.Boolean(),
|
|
75
|
+
message: Type.String(),
|
|
76
|
+
worldName: Type.String(),
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ServerConfig, UpdateServerConfigRequest } from '../schemas/config.js';
|
|
2
|
+
/**
|
|
3
|
+
* ConfigService - Manages server configuration files
|
|
4
|
+
*/
|
|
5
|
+
export declare class ConfigService {
|
|
6
|
+
private readonly platformPath;
|
|
7
|
+
constructor(platformPath: string);
|
|
8
|
+
/**
|
|
9
|
+
* Get the path to a server's config.env file
|
|
10
|
+
*/
|
|
11
|
+
private getConfigPath;
|
|
12
|
+
/**
|
|
13
|
+
* Check if a server's configuration exists
|
|
14
|
+
*/
|
|
15
|
+
configExists(serverName: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Read server configuration from config.env
|
|
18
|
+
*/
|
|
19
|
+
getConfig(serverName: string): ServerConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Update server configuration in config.env
|
|
22
|
+
* Returns information about what was changed
|
|
23
|
+
*/
|
|
24
|
+
updateConfig(serverName: string, updates: UpdateServerConfigRequest): {
|
|
25
|
+
config: ServerConfig;
|
|
26
|
+
changedFields: string[];
|
|
27
|
+
restartRequired: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Get the world name from server configuration
|
|
31
|
+
*/
|
|
32
|
+
getWorldName(serverName: string): string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a ConfigService instance
|
|
36
|
+
*/
|
|
37
|
+
export declare function createConfigService(platformPath: string): ConfigService;
|
|
38
|
+
//# sourceMappingURL=ConfigService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigService.d.ts","sourceRoot":"","sources":["../../src/services/ConfigService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAgKpF;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,YAAY,EAAE,MAAM;IAIhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAuB3C;;;OAGG;IACH,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,yBAAyB,GACjC;QACD,MAAM,EAAE,YAAY,CAAC;QACrB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;KAC1B;IAyDD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAYzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAEvE"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Mapping between API field names and config.env variable names
|
|
5
|
+
*/
|
|
6
|
+
const CONFIG_FIELD_MAP = {
|
|
7
|
+
motd: 'MOTD',
|
|
8
|
+
maxPlayers: 'MAX_PLAYERS',
|
|
9
|
+
difficulty: 'DIFFICULTY',
|
|
10
|
+
gameMode: 'GAMEMODE',
|
|
11
|
+
pvp: 'PVP',
|
|
12
|
+
viewDistance: 'VIEW_DISTANCE',
|
|
13
|
+
spawnProtection: 'SPAWN_PROTECTION',
|
|
14
|
+
memory: 'MEMORY',
|
|
15
|
+
useAikarFlags: 'USE_AIKAR_FLAGS',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Fields that require a server restart to take effect
|
|
19
|
+
*/
|
|
20
|
+
const RESTART_REQUIRED_FIELDS = [
|
|
21
|
+
'memory',
|
|
22
|
+
'useAikarFlags',
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Parse config.env file content into key-value pairs
|
|
26
|
+
*/
|
|
27
|
+
function parseEnvFile(content) {
|
|
28
|
+
const result = new Map();
|
|
29
|
+
const lines = content.split('\n');
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
// Skip empty lines and comments
|
|
32
|
+
const trimmed = line.trim();
|
|
33
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// Parse KEY=VALUE
|
|
37
|
+
const eqIndex = line.indexOf('=');
|
|
38
|
+
if (eqIndex > 0) {
|
|
39
|
+
const key = line.substring(0, eqIndex).trim();
|
|
40
|
+
const value = line.substring(eqIndex + 1).trim();
|
|
41
|
+
result.set(key, value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Convert env value to appropriate type for API response
|
|
48
|
+
*/
|
|
49
|
+
function parseEnvValue(key, value) {
|
|
50
|
+
if (value === undefined) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
switch (key) {
|
|
54
|
+
case 'maxPlayers':
|
|
55
|
+
case 'viewDistance':
|
|
56
|
+
case 'spawnProtection':
|
|
57
|
+
const num = parseInt(value, 10);
|
|
58
|
+
return isNaN(num) ? undefined : num;
|
|
59
|
+
case 'pvp':
|
|
60
|
+
case 'useAikarFlags':
|
|
61
|
+
return value.toLowerCase() === 'true';
|
|
62
|
+
case 'difficulty':
|
|
63
|
+
const lowerDiff = value.toLowerCase();
|
|
64
|
+
if (['peaceful', 'easy', 'normal', 'hard'].includes(lowerDiff)) {
|
|
65
|
+
return lowerDiff;
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
case 'gameMode':
|
|
69
|
+
const lowerMode = value.toLowerCase();
|
|
70
|
+
if (['survival', 'creative', 'adventure', 'spectator'].includes(lowerMode)) {
|
|
71
|
+
return lowerMode;
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
case 'motd':
|
|
75
|
+
case 'memory':
|
|
76
|
+
return value;
|
|
77
|
+
default:
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Convert API value to env file format
|
|
83
|
+
*/
|
|
84
|
+
function formatEnvValue(key, value) {
|
|
85
|
+
if (value === undefined || value === null) {
|
|
86
|
+
return '';
|
|
87
|
+
}
|
|
88
|
+
switch (key) {
|
|
89
|
+
case 'pvp':
|
|
90
|
+
case 'useAikarFlags':
|
|
91
|
+
return value ? 'true' : 'false';
|
|
92
|
+
case 'difficulty':
|
|
93
|
+
case 'gameMode':
|
|
94
|
+
return String(value).toLowerCase();
|
|
95
|
+
default:
|
|
96
|
+
return String(value);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Update config.env file while preserving comments and structure
|
|
101
|
+
*/
|
|
102
|
+
function updateEnvFile(content, updates) {
|
|
103
|
+
const lines = content.split('\n');
|
|
104
|
+
const result = [];
|
|
105
|
+
const updatedKeys = new Set();
|
|
106
|
+
for (const line of lines) {
|
|
107
|
+
const trimmed = line.trim();
|
|
108
|
+
// Preserve empty lines and comments
|
|
109
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
110
|
+
result.push(line);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// Check if this line has a key we want to update
|
|
114
|
+
const eqIndex = line.indexOf('=');
|
|
115
|
+
if (eqIndex > 0) {
|
|
116
|
+
const key = line.substring(0, eqIndex).trim();
|
|
117
|
+
if (updates.has(key)) {
|
|
118
|
+
const newValue = updates.get(key);
|
|
119
|
+
result.push(`${key}=${newValue}`);
|
|
120
|
+
updatedKeys.add(key);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
result.push(line);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
result.push(line);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Add any new keys that weren't in the original file
|
|
131
|
+
for (const [key, value] of updates) {
|
|
132
|
+
if (!updatedKeys.has(key)) {
|
|
133
|
+
// Find appropriate section or add at end
|
|
134
|
+
result.push(`${key}=${value}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return result.join('\n');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* ConfigService - Manages server configuration files
|
|
141
|
+
*/
|
|
142
|
+
export class ConfigService {
|
|
143
|
+
platformPath;
|
|
144
|
+
constructor(platformPath) {
|
|
145
|
+
this.platformPath = platformPath;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get the path to a server's config.env file
|
|
149
|
+
*/
|
|
150
|
+
getConfigPath(serverName) {
|
|
151
|
+
return join(this.platformPath, 'servers', serverName, 'config.env');
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if a server's configuration exists
|
|
155
|
+
*/
|
|
156
|
+
configExists(serverName) {
|
|
157
|
+
return existsSync(this.getConfigPath(serverName));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Read server configuration from config.env
|
|
161
|
+
*/
|
|
162
|
+
getConfig(serverName) {
|
|
163
|
+
const configPath = this.getConfigPath(serverName);
|
|
164
|
+
if (!existsSync(configPath)) {
|
|
165
|
+
throw new Error(`Server configuration not found: ${serverName}`);
|
|
166
|
+
}
|
|
167
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
168
|
+
const envMap = parseEnvFile(content);
|
|
169
|
+
const config = {};
|
|
170
|
+
for (const [apiKey, envKey] of Object.entries(CONFIG_FIELD_MAP)) {
|
|
171
|
+
const value = envMap.get(envKey);
|
|
172
|
+
const parsedValue = parseEnvValue(apiKey, value);
|
|
173
|
+
if (parsedValue !== undefined) {
|
|
174
|
+
config[apiKey] = parsedValue;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return config;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Update server configuration in config.env
|
|
181
|
+
* Returns information about what was changed
|
|
182
|
+
*/
|
|
183
|
+
updateConfig(serverName, updates) {
|
|
184
|
+
const configPath = this.getConfigPath(serverName);
|
|
185
|
+
if (!existsSync(configPath)) {
|
|
186
|
+
throw new Error(`Server configuration not found: ${serverName}`);
|
|
187
|
+
}
|
|
188
|
+
// Read current configuration
|
|
189
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
190
|
+
const currentConfig = this.getConfig(serverName);
|
|
191
|
+
// Prepare updates
|
|
192
|
+
const envUpdates = new Map();
|
|
193
|
+
const changedFields = [];
|
|
194
|
+
let restartRequired = false;
|
|
195
|
+
for (const [apiKey, value] of Object.entries(updates)) {
|
|
196
|
+
if (value === undefined) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
const typedKey = apiKey;
|
|
200
|
+
const envKey = CONFIG_FIELD_MAP[typedKey];
|
|
201
|
+
if (!envKey) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
// Check if value actually changed
|
|
205
|
+
const currentValue = currentConfig[typedKey];
|
|
206
|
+
if (currentValue !== value) {
|
|
207
|
+
changedFields.push(apiKey);
|
|
208
|
+
envUpdates.set(envKey, formatEnvValue(typedKey, value));
|
|
209
|
+
// Check if this field requires restart
|
|
210
|
+
if (RESTART_REQUIRED_FIELDS.includes(typedKey)) {
|
|
211
|
+
restartRequired = true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Only write if there are changes
|
|
216
|
+
if (changedFields.length > 0) {
|
|
217
|
+
const updatedContent = updateEnvFile(content, envUpdates);
|
|
218
|
+
writeFileSync(configPath, updatedContent, 'utf-8');
|
|
219
|
+
}
|
|
220
|
+
// Read back the updated configuration
|
|
221
|
+
const newConfig = this.getConfig(serverName);
|
|
222
|
+
return {
|
|
223
|
+
config: newConfig,
|
|
224
|
+
changedFields,
|
|
225
|
+
restartRequired,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get the world name from server configuration
|
|
230
|
+
*/
|
|
231
|
+
getWorldName(serverName) {
|
|
232
|
+
const configPath = this.getConfigPath(serverName);
|
|
233
|
+
if (!existsSync(configPath)) {
|
|
234
|
+
return 'world'; // Default world name
|
|
235
|
+
}
|
|
236
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
237
|
+
const envMap = parseEnvFile(content);
|
|
238
|
+
return envMap.get('LEVEL') || 'world';
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Create a ConfigService instance
|
|
243
|
+
*/
|
|
244
|
+
export function createConfigService(platformPath) {
|
|
245
|
+
return new ConfigService(platformPath);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=ConfigService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigService.js","sourceRoot":"","sources":["../../src/services/ConfigService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minecraft-docker/mcctl-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "REST API server for managing Docker Minecraft servers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@fastify/helmet": "^12.0.1",
|
|
52
52
|
"@fastify/swagger": "^9.6.1",
|
|
53
53
|
"@fastify/swagger-ui": "^5.2.4",
|
|
54
|
-
"@minecraft-docker/shared": "^1.
|
|
54
|
+
"@minecraft-docker/shared": "^1.11.0",
|
|
55
55
|
"@sinclair/typebox": "^0.34.48",
|
|
56
56
|
"bcrypt": "^6.0.0",
|
|
57
57
|
"dotenv": "^16.4.7",
|