Skip to content

Commit 2c0c481

Browse files
fix: add | undefined to transport option callbacks for exactOptionalPropertyTypes (#1855)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 4fbcfcd commit 2c0c481

3 files changed

Lines changed: 14 additions & 7 deletions

File tree

.changeset/gentle-planets-rest.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@modelcontextprotocol/server': patch
3+
---
4+
5+
Add `| undefined` to optional callback and function properties on `WebStandardStreamableHTTPServerTransportOptions` (`sessionIdGenerator`, `onsessioninitialized`, `onsessionclosed`) and corresponding private fields.
6+
7+
This fixes TS2430 errors for consumers using `exactOptionalPropertyTypes: true` without `skipLibCheck`, where optional properties with function types need explicit `| undefined` to match their emitted declarations.

packages/middleware/node/test/streamableHttp.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ interface TestServerConfig {
4242
enableJsonResponse?: boolean;
4343
customRequestHandler?: (req: IncomingMessage, res: ServerResponse, parsedBody?: unknown) => Promise<void>;
4444
eventStore?: EventStore;
45-
onsessioninitialized?: (sessionId: string) => void | Promise<void>;
46-
onsessionclosed?: (sessionId: string) => void | Promise<void>;
45+
onsessioninitialized?: ((sessionId: string) => void | Promise<void>) | undefined;
46+
onsessionclosed?: ((sessionId: string) => void | Promise<void>) | undefined;
4747
retryInterval?: number;
4848
}
4949

packages/server/src/server/streamableHttp.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export interface WebStandardStreamableHTTPServerTransportOptions {
7777
*
7878
* If not provided, session management is disabled (stateless mode).
7979
*/
80-
sessionIdGenerator?: () => string;
80+
sessionIdGenerator?: (() => string) | undefined;
8181

8282
/**
8383
* A callback for session initialization events
@@ -86,7 +86,7 @@ export interface WebStandardStreamableHTTPServerTransportOptions {
8686
* and need to keep track of them.
8787
* @param sessionId The generated session ID
8888
*/
89-
onsessioninitialized?: (sessionId: string) => void | Promise<void>;
89+
onsessioninitialized?: ((sessionId: string) => void | Promise<void>) | undefined;
9090

9191
/**
9292
* A callback for session close events
@@ -98,7 +98,7 @@ export interface WebStandardStreamableHTTPServerTransportOptions {
9898
* session open/running.
9999
* @param sessionId The session ID that was closed
100100
*/
101-
onsessionclosed?: (sessionId: string) => void | Promise<void>;
101+
onsessionclosed?: ((sessionId: string) => void | Promise<void>) | undefined;
102102

103103
/**
104104
* If `true`, the server will return JSON responses instead of starting an SSE stream.
@@ -233,8 +233,8 @@ export class WebStandardStreamableHTTPServerTransport implements Transport {
233233
private _enableJsonResponse: boolean = false;
234234
private _standaloneSseStreamId: string = '_GET_stream';
235235
private _eventStore?: EventStore;
236-
private _onsessioninitialized?: (sessionId: string) => void | Promise<void>;
237-
private _onsessionclosed?: (sessionId: string) => void | Promise<void>;
236+
private _onsessioninitialized?: ((sessionId: string) => void | Promise<void>) | undefined;
237+
private _onsessionclosed?: ((sessionId: string) => void | Promise<void>) | undefined;
238238
private _allowedHosts?: string[];
239239
private _allowedOrigins?: string[];
240240
private _enableDnsRebindingProtection: boolean;

0 commit comments

Comments
 (0)