From 81b40e5608b14a8732023e0f5315fd39e7d153f3 Mon Sep 17 00:00:00 2001 From: Justin Spahr-Summers Date: Fri, 27 Sep 2024 11:14:59 +0100 Subject: [PATCH] Add SSEServerTransport.handleMessage bypass --- src/server/sse.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/server/sse.ts b/src/server/sse.ts index 26970de9..7dd10186 100644 --- a/src/server/sse.ts +++ b/src/server/sse.ts @@ -88,20 +88,30 @@ export class SSEServerTransport implements Transport { return; } - let message: JSONRPCMessage; try { - message = JSON.parse(body); - validateMessage(message); + await this.handleMessage(JSON.parse(body)); } catch (error) { - this.onerror?.(error as Error); res.writeHead(400).end(`Invalid message: ${body}`); return; } - this.onmessage?.(message); res.writeHead(202).end("Accepted"); } + /** + * 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 { + try { + validateMessage(message); + } catch (error) { + this.onerror?.(error as Error); + return; + } + + this.onmessage?.(message); + } + async close(): Promise { this._sseResponse?.end(); this._sseResponse = undefined;