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

View file

@ -1,8 +1,7 @@
import { randomUUID } from "node:crypto";
import { IncomingMessage, ServerResponse } from "node:http";
import { validateMessage } from "../shared/message.js";
import { Transport } from "../shared/transport.js";
import { JSONRPCMessage } from "../types.js";
import { JSONRPCMessage, JSONRPCMessageSchema } from "../types.js";
import getRawBody from "raw-body";
import contentType from "content-type";
@ -101,15 +100,16 @@ export class SSEServerTransport implements Transport {
/**
* Handle a client message, regardless of how it arrived. This can be used to inform the server of messages that arrive via a means different than HTTP POST.
*/
async handleMessage(message: JSONRPCMessage): Promise<void> {
async handleMessage(message: unknown): Promise<void> {
let parsedMessage: JSONRPCMessage;
try {
validateMessage(message);
parsedMessage = JSONRPCMessageSchema.parse(message);
} catch (error) {
this.onerror?.(error as Error);
throw error;
}
this.onmessage?.(message);
this.onmessage?.(parsedMessage);
}
async close(): Promise<void> {