import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
import type { JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
import type { ILogger } from "../core/logger.js";
import type { Result } from "../core/result.js";
import type { StreamableHttpTransportConfig } from "./config.js";
import type { ISessionManager } from "./sessionManager.js";
/**
 * Transport Registry
 *
 * Manages per-session transport and server instances for Streamable HTTP transport.
 * Each session gets its own isolated transport and server to maintain independent MCP protocol state.
 *
 * Key Responsibilities:
 * - Create new transport + server instances for new sessions
 * - Reuse existing transport for requests with valid session IDs
 * - Clean up sessions on close or expiration
 * - Track active session count for health checks
 *
 * @example
 * ```typescript
 * const registry = new TransportRegistry(config, sessionManager, logger);
 *
 * // In HTTP request handler
 * const transport = await registry.getOrCreate(
 *   sessionId,
 *   requestBody,
 *   () => createTouchDesignerServer()
 * );
 *
 * if (transport) {
 *   await transport.handleRequest(req, res, requestBody);
 * }
 *
 * // On shutdown
 * await registry.cleanup();
 * ```
 */
export declare class TransportRegistry {
    private readonly sessions;
    private readonly config;
    private readonly sessionManager;
    private readonly logger;
    constructor(config: StreamableHttpTransportConfig, sessionManager: ISessionManager | null, logger: ILogger);
    /**
     * Get or create transport for a session
     *
     * Logic:
     * 1. If sessionId exists and valid → return existing transport
     * 2. If no sessionId and request is initialize → create new transport + server
     * 3. Otherwise → return null (invalid session)
     *
     * @param sessionId - Session ID from mcp-session-id header (undefined for new sessions)
     * @param requestBody - JSON-RPC request body
     * @param serverFactory - Factory function to create new Server instances
     * @returns Transport instance or null if session is invalid
     */
    getOrCreate(sessionId: string | undefined, requestBody: JSONRPCMessage, serverFactory: () => McpServer): Promise<StreamableHTTPServerTransport | null>;
    /**
     * Create a new session with transport and server instances
     *
     * @param serverFactory - Factory function to create new Server instances
     * @returns Transport instance for the new session
     */
    private createSession;
    /**
     * Remove session from registry
     *
     * @param sessionId - Session ID to remove
     */
    remove(sessionId: string): void;
    /**
     * Get number of active sessions
     *
     * @returns Active session count
     */
    getCount(): number;
    /**
     * Get all session IDs
     *
     * @returns Array of session IDs
     */
    getSessionIds(): string[];
    /**
     * Cleanup all sessions
     *
     * Called during graceful shutdown to close all active sessions
     *
     * @returns Result indicating success or failure
     */
    cleanup(): Promise<Result<void, Error>>;
}
