From a6a8d2d0f2005d17ccc97e847c3eb750c93cbd4c Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Thu, 5 Jun 2025 12:28:59 -0400 Subject: [PATCH] Revert "Close socket on ClientMessageSchema, improve zod error (#1003)" This reverts commit 14ab1bcbbafa8b99af305a1ef41b0619a0aa5fd2. --- src/server/GameServer.ts | 16 ++++++---------- src/server/Worker.ts | 13 +++---------- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 5754ad218..003542bd8 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -1,9 +1,9 @@ import ipAnonymize from "ip-anonymize"; import { Logger } from "winston"; import WebSocket from "ws"; -import { z } from "zod/v4"; import { ClientID, + ClientMessage, ClientMessageSchema, ClientSendWinnerMessage, GameConfig, @@ -178,16 +178,12 @@ export class GameServer { "message", gatekeeper.wsHandler(client.ip, async (message: string) => { try { - const parsed = ClientMessageSchema.safeParse(JSON.parse(message)); - if (!parsed.success) { - const error = z.prettifyError(parsed.error); - this.log.error("Failed to parse client message", error, { - clientID: client.clientID, - }); - client.ws.close(); - return; + let clientMsg: ClientMessage | null = null; + try { + clientMsg = ClientMessageSchema.parse(JSON.parse(message)); + } catch (error) { + throw Error(`error parsing schema for ${ipAnonymize(client.ip)}`); } - const clientMsg = parsed.data; if (clientMsg.type === "intent") { if (clientMsg.intent.clientID !== client.clientID) { this.log.warn( diff --git a/src/server/Worker.ts b/src/server/Worker.ts index 3f072ebdf..068799fed 100644 --- a/src/server/Worker.ts +++ b/src/server/Worker.ts @@ -10,8 +10,7 @@ import { GameEnv } from "../core/configuration/Config"; import { getServerConfigFromServer } from "../core/configuration/ConfigLoader"; import { GameType } from "../core/game/Game"; import { - ClientJoinMessageSchema, - GameConfig, + ClientMessageSchema, GameRecord, GameRecordSchema, } from "../core/Schemas"; @@ -294,17 +293,11 @@ export function startWorker() { : forwarded || req.socket.remoteAddress || "unknown"; try { + // Process WebSocket messages as in your original code // Parse and handle client messages - const parsed = ClientJoinMessageSchema.safeParse( + const clientMsg = ClientMessageSchema.parse( JSON.parse(message.toString()), ); - if (!parsed.success) { - const error = z.prettifyError(parsed.error); - log.warn("Error parsing join message client", error); - ws.close(); - return; - } - const clientMsg = parsed.data; if (clientMsg.type === "join") { // Verify this worker should handle this game