monitor/core/routes/devDebug.ts
2025-04-16 22:30:27 +07:00

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' });
}
};