@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
TypeScript
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