From 2741e315e084cdcf2347d157e9b7d82cb271533e Mon Sep 17 00:00:00 2001 From: evanpelle Date: Fri, 13 Mar 2026 18:44:18 -0700 Subject: [PATCH] kick players when intents too large --- src/server/GameServer.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 68f907c3b..300882775 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -35,6 +35,7 @@ export enum GamePhase { const KICK_REASON_DUPLICATE_SESSION = "kick_reason.duplicate_session"; const KICK_REASON_LOBBY_CREATOR = "kick_reason.lobby_creator"; +const KICK_REASON_RATE_LIMIT = "kick_reason.rate_limit"; export class GameServer { private sentDesyncMessageClients = new Set(); @@ -314,11 +315,13 @@ export class GameServer { client.ws.removeAllListeners("message"); client.ws.on("message", async (message: string) => { try { - if (Buffer.byteLength(message, "utf8") > 1024) { - this.log.warn(`Intent message too large, dropping`, { + const bytes = Buffer.byteLength(message, "utf8"); + if (bytes > 2000) { + this.log.warn(`Intent message too large, kicking client`, { clientID: client.clientID, - bytes: Buffer.byteLength(message, "utf8"), + bytes, }); + this.kickClient(client.clientID, KICK_REASON_RATE_LIMIT); return; } const parsed = ClientMessageSchema.safeParse(JSON.parse(message));