UNPKG

@iflow-mcp/ejmockler-brutalist

Version:

Deploy Claude, Codex & Gemini CLI agents to demolish your work before users do. Real file analysis. Brutal honesty. Now with conversation continuation & intelligent pagination.

95 lines 2.66 kB
import { EventEmitter } from 'events'; import { Request, Response } from 'express'; import { SessionManager } from './session-manager.js'; /** * SSE connection metadata for tracking active streams */ export interface SSEConnection { id: string; sessionId: string; response: Response; clientOrigin: string; connectedAt: number; lastActivity: number; eventsSent: number; isActive: boolean; } /** * Enhanced Server-Sent Events transport with session isolation * * Features: * - Session-scoped connections with isolation guarantees * - Connection pooling with resource limits * - Heartbeat monitoring and automatic cleanup * - Graceful connection management * - Event filtering and routing by session * - Memory-efficient streaming with backpressure */ export declare class EnhancedSSETransport extends EventEmitter { private connections; private sessionManager; private heartbeatInterval; private readonly MAX_CONNECTIONS; private readonly HEARTBEAT_INTERVAL; private readonly CONNECTION_TIMEOUT; private readonly MAX_EVENTS_PER_CONNECTION; constructor(sessionManager: SessionManager); /** * Establish SSE connection for a session */ connect(req: Request, res: Response, sessionId: string): Promise<void>; /** * Handle streaming events from session manager */ private handleSessionEvent; /** * Handle session completion */ private handleSessionComplete; /** * Send streaming event to specific connection */ private sendStreamingEvent; /** * Send buffered events for a newly connected session */ private sendBufferedEvents; /** * Send raw SSE event */ private sendEvent; /** * Disconnect and cleanup SSE connection */ private disconnect; /** * Start heartbeat monitoring */ private startHeartbeat; /** * Check connection health and cleanup stale connections */ private checkConnectionHealth; /** * Get connection statistics */ getStats(): { totalConnections: number; activeConnections: number; sessionDistribution: Record<string, number>; averageEventsPerConnection: number; }; /** * Force disconnect all connections for a session */ disconnectSession(sessionId: string, reason?: string): void; /** * Cleanup and shutdown transport */ shutdown(): void; /** * Get active connection for session (for testing) */ getSessionConnections(sessionId: string): SSEConnection[]; } //# sourceMappingURL=sse-transport.d.ts.map