Use Zod for message validation at transport layer

This commit is contained in:
Justin Spahr-Summers 2024-10-02 15:06:30 +01:00
commit 3ea255f088
No known key found for this signature in database
GPG key ID: E78498BF3C053CA7
2 changed files with 11 additions and 28 deletions

View file

@ -1,6 +1,5 @@
import { validateMessage } from "../shared/message.js";
import { Transport } from "../shared/transport.js";
import { JSONRPCMessage } from "../types.js";
import { JSONRPCMessage, JSONRPCMessageSchema } from "../types.js";
/**
* Client transport for SSE: this will connect to a server using Server-Sent Events for receiving
@ -57,8 +56,7 @@ export class SSEClientTransport implements Transport {
const messageEvent = event as MessageEvent;
let message: JSONRPCMessage;
try {
message = JSON.parse(messageEvent.data);
validateMessage(message);
message = JSONRPCMessageSchema.parse(JSON.parse(messageEvent.data));
} catch (error) {
this.onerror?.(error as Error);
return;

View file

@ -1,6 +1,5 @@
import { validateMessage } from "../shared/message.js";
import { Transport } from "../shared/transport.js";
import { JSONRPCMessage } from "../types.js";
import { JSONRPCMessage, JSONRPCMessageSchema } from "../types.js";
const SUBPROTOCOL = "mcp";
@ -38,8 +37,7 @@ export class WebSocketClientTransport implements Transport {
this._socket.onmessage = (event: MessageEvent) => {
let message: JSONRPCMessage;
try {
message = JSON.parse(event.data);
validateMessage(message);
message = JSONRPCMessageSchema.parse(JSON.parse(event.data));
} catch (error) {
this.onerror?.(error as Error);
return;