fosrl.pangolin/server/routers/newt/handleNewtPingRequestMessage.ts

42 lines
1.2 KiB
TypeScript
Raw Normal View History

2025-06-11 09:13:38 -04:00
import { db } from "@server/db";
import { MessageHandler } from "../ws";
import { exitNodes, Newt } from "@server/db";
import logger from "@server/logger";
export const handleNewtPingRequestMessage: MessageHandler = async (context) => {
const { message, client, sendToClient } = context;
const newt = client as Newt;
logger.info("Handling ping request newt message!");
if (!newt) {
logger.warn("Newt not found");
return;
}
// TODO: pick which nodes to send and ping better than just all of them
const exitNodesList = await db
.select()
.from(exitNodes);
2025-06-16 17:32:38 -04:00
const exitNodesPayload = exitNodesList.map((node) => ({
2025-06-11 09:13:38 -04:00
exitNodeId: node.exitNodeId,
2025-06-16 17:32:38 -04:00
exitNodeName: node.name,
2025-06-11 09:13:38 -04:00
endpoint: node.endpoint,
2025-06-16 17:32:38 -04:00
weight: 1 // TODO: Implement weight calculation if needed depending on load
// (MAX_CONNECTIONS - current_connections) / MAX_CONNECTIONS)
// higher = more desirable
2025-06-11 09:13:38 -04:00
}));
return {
message: {
type: "newt/ping/exitNodes",
2025-06-16 17:32:38 -04:00
data: {
2025-06-11 09:13:38 -04:00
exitNodes: exitNodesPayload
}
},
broadcast: false, // Send to all clients
excludeSender: false // Include sender in broadcast
};
};