diff --git a/src/gateway/client.ts b/src/gateway/client.ts index a29fa284c..3867b1f1c 100644 --- a/src/gateway/client.ts +++ b/src/gateway/client.ts @@ -8,7 +8,9 @@ import { type HelloOk, PROTOCOL_VERSION, type RequestFrame, + validateEventFrame, validateRequestFrame, + validateResponseFrame, } from "./protocol/index.js"; type Pending = { @@ -125,7 +127,7 @@ export class GatewayClient { private handleMessage(raw: string) { try { const parsed = JSON.parse(raw); - if (parsed?.type === "event") { + if (validateEventFrame(parsed)) { const evt = parsed as EventFrame; const seq = typeof evt.seq === "number" ? evt.seq : null; if (seq !== null) { @@ -140,7 +142,7 @@ export class GatewayClient { this.opts.onEvent?.(evt); return; } - if (parsed?.type === "res") { + if (validateResponseFrame(parsed)) { const pending = this.pending.get(parsed.id); if (!pending) return; // If the payload is an ack with status accepted, keep waiting for final. diff --git a/src/gateway/protocol/index.ts b/src/gateway/protocol/index.ts index 42a46160a..02c7306b4 100644 --- a/src/gateway/protocol/index.ts +++ b/src/gateway/protocol/index.ts @@ -121,6 +121,9 @@ export const validateConnectParams = ajv.compile(ConnectParamsSchema); export const validateRequestFrame = ajv.compile(RequestFrameSchema); +export const validateResponseFrame = + ajv.compile(ResponseFrameSchema); +export const validateEventFrame = ajv.compile(EventFrameSchema); export const validateSendParams = ajv.compile(SendParamsSchema); export const validateAgentParams = ajv.compile(AgentParamsSchema); export const validateWakeParams = ajv.compile(WakeParamsSchema);