| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /**
- * Node.js HTTP Streamable HTTP Server Transport
- *
- * This is a thin wrapper around `WebStandardStreamableHTTPServerTransport` that provides
- * compatibility with Node.js HTTP server (IncomingMessage/ServerResponse).
- *
- * For web-standard environments (Cloudflare Workers, Deno, Bun), use `WebStandardStreamableHTTPServerTransport` directly.
- */
- import { IncomingMessage, ServerResponse } from 'node:http';
- import { Transport } from '../shared/transport.js';
- import { AuthInfo } from './auth/types.js';
- import { MessageExtraInfo, JSONRPCMessage, RequestId } from '../types.js';
- import { WebStandardStreamableHTTPServerTransportOptions, EventStore, StreamId, EventId } from './webStandardStreamableHttp.js';
- export type { EventStore, StreamId, EventId };
- /**
- * Configuration options for StreamableHTTPServerTransport
- *
- * This is an alias for WebStandardStreamableHTTPServerTransportOptions for backward compatibility.
- */
- export type StreamableHTTPServerTransportOptions = WebStandardStreamableHTTPServerTransportOptions;
- /**
- * Server transport for Streamable HTTP: this implements the MCP Streamable HTTP transport specification.
- * It supports both SSE streaming and direct HTTP responses.
- *
- * This is a wrapper around `WebStandardStreamableHTTPServerTransport` that provides Node.js HTTP compatibility.
- * It uses the `@hono/node-server` library to convert between Node.js HTTP and Web Standard APIs.
- *
- * Usage example:
- *
- * ```typescript
- * // Stateful mode - server sets the session ID
- * const statefulTransport = new StreamableHTTPServerTransport({
- * sessionIdGenerator: () => randomUUID(),
- * });
- *
- * // Stateless mode - explicitly set session ID to undefined
- * const statelessTransport = new StreamableHTTPServerTransport({
- * sessionIdGenerator: undefined,
- * });
- *
- * // Using with pre-parsed request body
- * app.post('/mcp', (req, res) => {
- * transport.handleRequest(req, res, req.body);
- * });
- * ```
- *
- * In stateful mode:
- * - Session ID is generated and included in response headers
- * - Session ID is always included in initialization responses
- * - Requests with invalid session IDs are rejected with 404 Not Found
- * - Non-initialization requests without a session ID are rejected with 400 Bad Request
- * - State is maintained in-memory (connections, message history)
- *
- * In stateless mode:
- * - No Session ID is included in any responses
- * - No session validation is performed
- */
- export declare class StreamableHTTPServerTransport implements Transport {
- private _webStandardTransport;
- private _requestListener;
- private _requestContext;
- constructor(options?: StreamableHTTPServerTransportOptions);
- /**
- * Gets the session ID for this transport instance.
- */
- get sessionId(): string | undefined;
- /**
- * Sets callback for when the transport is closed.
- */
- set onclose(handler: (() => void) | undefined);
- get onclose(): (() => void) | undefined;
- /**
- * Sets callback for transport errors.
- */
- set onerror(handler: ((error: Error) => void) | undefined);
- get onerror(): ((error: Error) => void) | undefined;
- /**
- * Sets callback for incoming messages.
- */
- set onmessage(handler: ((message: JSONRPCMessage, extra?: MessageExtraInfo) => void) | undefined);
- get onmessage(): ((message: JSONRPCMessage, extra?: MessageExtraInfo) => void) | undefined;
- /**
- * Starts the transport. This is required by the Transport interface but is a no-op
- * for the Streamable HTTP transport as connections are managed per-request.
- */
- start(): Promise<void>;
- /**
- * Closes the transport and all active connections.
- */
- close(): Promise<void>;
- /**
- * Sends a JSON-RPC message through the transport.
- */
- send(message: JSONRPCMessage, options?: {
- relatedRequestId?: RequestId;
- }): Promise<void>;
- /**
- * Handles an incoming HTTP request, whether GET or POST.
- *
- * This method converts Node.js HTTP objects to Web Standard Request/Response
- * and delegates to the underlying WebStandardStreamableHTTPServerTransport.
- *
- * @param req - Node.js IncomingMessage, optionally with auth property from middleware
- * @param res - Node.js ServerResponse
- * @param parsedBody - Optional pre-parsed body from body-parser middleware
- */
- handleRequest(req: IncomingMessage & {
- auth?: AuthInfo;
- }, res: ServerResponse, parsedBody?: unknown): Promise<void>;
- /**
- * Close an SSE stream for a specific request, triggering client reconnection.
- * Use this to implement polling behavior during long-running operations -
- * client will reconnect after the retry interval specified in the priming event.
- */
- closeSSEStream(requestId: RequestId): void;
- /**
- * Close the standalone GET SSE stream, triggering client reconnection.
- * Use this to implement polling behavior for server-initiated notifications.
- */
- closeStandaloneSSEStream(): void;
- }
- //# sourceMappingURL=streamableHttp.d.ts.map
|