diff --git a/src/client/sse.test.ts b/src/client/sse.test.ts index b55c7e78..fc7a86c4 100644 --- a/src/client/sse.test.ts +++ b/src/client/sse.test.ts @@ -87,7 +87,7 @@ describe("SSEClientTransport", () => { await transport.send(message); // Verify the POST request maintains the custom path - expect(lastServerRequest.url).toBe("/custom/path/sse"); + expect(lastServerRequest.url).toBe("/custom/path/messages"); }); it("handles multiple levels of custom paths", async () => { @@ -107,7 +107,7 @@ describe("SSEClientTransport", () => { await transport.send(message); // Verify the POST request maintains the full custom path - expect(lastServerRequest.url).toBe("/api/v1/custom/deep/path/sse"); + expect(lastServerRequest.url).toBe("/api/v1/custom/deep/path/messages"); }); it("maintains custom path for SSE connection", async () => { @@ -130,7 +130,7 @@ describe("SSEClientTransport", () => { }; await transport.send(message); - expect(lastServerRequest.url).toBe("/custom/path/sse"); + expect(lastServerRequest.url).toBe("/custom/path/messages"); }); it("establishes SSE connection and receives endpoint", async () => { diff --git a/src/client/sse.ts b/src/client/sse.ts index 755f5da7..1e481773 100644 --- a/src/client/sse.ts +++ b/src/client/sse.ts @@ -147,7 +147,13 @@ export class SSEClientTransport implements Transport { this._endpoint = new URL(messageEvent.data, this._url); // If the original URL had a custom path, preserve it in the endpoint URL - this._endpoint.pathname = this._url.pathname; + const originalPath = this._url.pathname; + if (originalPath && originalPath !== '/' && originalPath !== '/sse') { + // Extract the base path from the original URL (everything before the /sse suffix) + const basePath = originalPath.replace(/\/sse$/, ''); + // The endpoint should use the same base path but with /messages instead of /sse + this._endpoint.pathname = basePath + '/messages'; + } if (this._endpoint.origin !== this._url.origin) { throw new Error(