75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
const modulename = 'WebServer:DevDebug';
|
|
import { AuthedCtx } from '@modules/WebServer/ctxTypes';
|
|
import { txDevEnv } from '@core/globalData';
|
|
import consoleFactory from '@lib/console';
|
|
import { z } from 'zod';
|
|
const console = consoleFactory(modulename);
|
|
|
|
|
|
//Helpers
|
|
const devWarningMessage = 'The unsafe privileged /dev webroute was called and should only be used in developer mode.';
|
|
const paramsSchema = z.object({
|
|
scope: z.string(),
|
|
});
|
|
let playerJoinCounter = 0;
|
|
|
|
|
|
/**
|
|
* Handler for the GET calls
|
|
*/
|
|
export const get = async (ctx: AuthedCtx) => {
|
|
//Sanity check
|
|
if (!txDevEnv.ENABLED) return ctx.send({ error: 'this route is dev mode only' });
|
|
const schemaRes = paramsSchema.safeParse(ctx.params);
|
|
if (!schemaRes.success) return ctx.utils.error(400, 'Invalid Request');
|
|
console.warn(devWarningMessage);
|
|
const { scope } = schemaRes.data;
|
|
|
|
return ctx.send({
|
|
rand: Math.random()
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Handler for the POST calls
|
|
*/
|
|
export const post = async (ctx: AuthedCtx) => {
|
|
//Sanity check
|
|
if (!txDevEnv.ENABLED) return ctx.send({ error: 'this route is dev mode only' });
|
|
const schemaRes = paramsSchema.safeParse(ctx.params);
|
|
if (!schemaRes.success) return ctx.utils.error(400, 'Invalid Request');
|
|
console.warn(devWarningMessage);
|
|
const { scope } = schemaRes.data;
|
|
|
|
if (scope === 'event') {
|
|
try {
|
|
if(!txCore.fxRunner.child?.isAlive){
|
|
return ctx.send({ error: 'server not ready' });
|
|
}
|
|
if (ctx.request.body.id === null) {
|
|
if (ctx.request.body.event === 'playerDropped') {
|
|
const onlinePlayers = txCore.fxPlayerlist.getPlayerList();
|
|
if (onlinePlayers.length){
|
|
ctx.request.body.id = onlinePlayers[0].netid;
|
|
}
|
|
} else if (ctx.request.body.event === 'playerJoining') {
|
|
ctx.request.body.id = playerJoinCounter + 101;
|
|
}
|
|
}
|
|
if (ctx.request.body.event === 'playerJoining') {
|
|
playerJoinCounter++;
|
|
}
|
|
txCore.fxPlayerlist.handleServerEvents(ctx.request.body, txCore.fxRunner.child.mutex);
|
|
return ctx.send({ success: true });
|
|
} catch (error) {
|
|
console.dir(error);
|
|
}
|
|
|
|
} else {
|
|
console.dir(scope);
|
|
console.dir(ctx.request.body);
|
|
return ctx.send({ error: 'unknown scope' });
|
|
}
|
|
};
|