From c82806717134f876b98bd699c77269b451a927af Mon Sep 17 00:00:00 2001 From: Justin Spahr-Summers Date: Wed, 22 Jan 2025 18:49:04 +0000 Subject: [PATCH] Use `eventsource` package --- package-lock.json | 28 ++++++++++++++++++++-------- package.json | 2 +- src/cli.ts | 3 --- src/client/sse.ts | 15 ++++++++++----- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index a4e2e7ec..687a7c0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "@modelcontextprotocol/sdk", - "version": "1.3.1", + "version": "1.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modelcontextprotocol/sdk", - "version": "1.3.1", + "version": "1.3.2", "license": "MIT", "dependencies": { "content-type": "^1.0.5", + "eventsource": "^3.0.2", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" @@ -24,7 +25,6 @@ "@types/node": "^22.0.2", "@types/ws": "^8.5.12", "eslint": "^9.8.0", - "eventsource": "^2.0.2", "express": "^4.19.2", "jest": "^29.7.0", "ts-jest": "^29.2.4", @@ -3066,12 +3066,24 @@ } }, "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.2.tgz", + "integrity": "sha512-YolzkJNxsTL3tCJMWFxpxtG2sCjbZ4LQUBUrkdaJK0ub0p6lmJt+2+1SwhKjLc652lpH9L/79Ptez972H9tphw==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz", + "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" } }, "node_modules/execa": { diff --git a/package.json b/package.json index 6f06fac0..7e21c07f 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ }, "dependencies": { "content-type": "^1.0.5", + "eventsource": "^3.0.2", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" @@ -61,7 +62,6 @@ "@types/node": "^22.0.2", "@types/ws": "^8.5.12", "eslint": "^9.8.0", - "eventsource": "^2.0.2", "express": "^4.19.2", "jest": "^29.7.0", "ts-jest": "^29.2.4", diff --git a/src/cli.ts b/src/cli.ts index d5444972..b5000896 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,8 +1,5 @@ -import EventSource from "eventsource"; import WebSocket from "ws"; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -(global as any).EventSource = EventSource; // eslint-disable-next-line @typescript-eslint/no-explicit-any (global as any).WebSocket = WebSocket; diff --git a/src/client/sse.ts b/src/client/sse.ts index 0e6e7eb9..932e7e20 100644 --- a/src/client/sse.ts +++ b/src/client/sse.ts @@ -1,11 +1,10 @@ import { Transport } from "../shared/transport.js"; import { JSONRPCMessage, JSONRPCMessageSchema } from "../types.js"; +import { EventSource, type EventSourceInit } from "eventsource"; /** * Client transport for SSE: this will connect to a server using Server-Sent Events for receiving * messages and make separate POST requests for sending messages. - * - * This uses the EventSource API in browsers. You can install the `eventsource` package for Node.js. */ export class SSEClientTransport implements Transport { private _eventSource?: EventSource; @@ -19,7 +18,10 @@ export class SSEClientTransport implements Transport { onerror?: (error: Error) => void; onmessage?: (message: JSONRPCMessage) => void; - constructor(url: URL, opts?: { eventSourceInit?: EventSourceInit, requestInit?: RequestInit }) { + constructor( + url: URL, + opts?: { eventSourceInit?: EventSourceInit; requestInit?: RequestInit }, + ) { this._url = url; this._eventSourceInit = opts?.eventSourceInit; this._requestInit = opts?.requestInit; @@ -33,7 +35,10 @@ export class SSEClientTransport implements Transport { } return new Promise((resolve, reject) => { - this._eventSource = new EventSource(this._url.href, this._eventSourceInit); + this._eventSource = new EventSource( + this._url.href, + this._eventSourceInit, + ); this._abortController = new AbortController(); this._eventSource.onerror = (event) => { @@ -101,7 +106,7 @@ export class SSEClientTransport implements Transport { method: "POST", headers, body: JSON.stringify(message), - signal: this._abortController?.signal + signal: this._abortController?.signal, }; const response = await fetch(this._endpoint, init);