From 448258a78e1fda379adaf00c4f87b18bc51b22c3 Mon Sep 17 00:00:00 2001 From: theamodhshetty Date: Tue, 10 Mar 2026 22:29:27 +0530 Subject: [PATCH] fix(server): include request URL in RequestInfo --- packages/core/src/types/types.ts | 5 +++++ packages/middleware/node/test/streamableHttp.test.ts | 12 ++++++++++-- packages/server/src/server/streamableHttp.ts | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/core/src/types/types.ts b/packages/core/src/types/types.ts index 6ac79777b..85462c787 100644 --- a/packages/core/src/types/types.ts +++ b/packages/core/src/types/types.ts @@ -2396,6 +2396,11 @@ type Infer = Flatten>; * Information about the incoming request. */ export interface RequestInfo { + /** + * The full request URL. + */ + url: string; + /** * The headers of the request. */ diff --git a/packages/middleware/node/test/streamableHttp.test.ts b/packages/middleware/node/test/streamableHttp.test.ts index ab3ba540f..c61b41577 100644 --- a/packages/middleware/node/test/streamableHttp.test.ts +++ b/packages/middleware/node/test/streamableHttp.test.ts @@ -370,7 +370,10 @@ describe('Zod v4', () => { id: 'call-1' }; - const response = await sendPostRequest(baseUrl, toolCallMessage, sessionId); + const requestUrl = new URL(baseUrl); + requestUrl.searchParams.set('tenant', 'acme-corp'); + + const response = await sendPostRequest(requestUrl, toolCallMessage, sessionId); expect(response.status).toBe(200); const text = await readSSEEvent(response); @@ -409,6 +412,7 @@ describe('Zod v4', () => { // Convert Headers object to plain object for JSON serialization // Headers is a Web API class that doesn't serialize with JSON.stringify const serializedRequestInfo = { + url: ctx.http?.req?.url, headers: Object.fromEntries(ctx.http?.req?.headers ?? new Headers()) }; return { @@ -432,7 +436,10 @@ describe('Zod v4', () => { id: 'call-1' }; - const response = await sendPostRequest(baseUrl, toolCallMessage, sessionId); + const requestUrl = new URL(baseUrl); + requestUrl.searchParams.set('tenant', 'acme-corp'); + + const response = await sendPostRequest(requestUrl, toolCallMessage, sessionId); expect(response.status).toBe(200); const text = await readSSEEvent(response); @@ -455,6 +462,7 @@ describe('Zod v4', () => { const requestInfo = JSON.parse(eventData.result.content[1].text); expect(requestInfo).toMatchObject({ + url: requestUrl.toString(), headers: { 'content-type': 'application/json', accept: 'application/json, text/event-stream', diff --git a/packages/server/src/server/streamableHttp.ts b/packages/server/src/server/streamableHttp.ts index 74e689892..9e89ab07e 100644 --- a/packages/server/src/server/streamableHttp.ts +++ b/packages/server/src/server/streamableHttp.ts @@ -628,6 +628,7 @@ export class WebStandardStreamableHTTPServerTransport implements Transport { // Build request info from headers const requestInfo: RequestInfo = { + url: req.url, headers: req.headers };