import type { AuditEvent } from './audit.types'; export interface StreamConfig { filter?: StreamFilter; onEvent: (event: AuditEvent) => void; onError?: (error: StreamError) => void; onConnect?: () => void; onDisconnect?: () => void; reconnect?: boolean; reconnectDelay?: number; maxReconnectAttempts?: number; } export interface StreamFilter { actors?: string[]; actions?: string[]; resources?: string[]; resourceTypes?: string[]; tags?: string[]; metadata?: Record; } export interface StreamConnection { id: string; status: 'connecting' | 'connected' | 'disconnected' | 'error'; connectedAt?: Date; disconnectedAt?: Date; reconnectAttempts?: number; error?: StreamError; } export interface StreamError { code: string; message: string; retriable?: boolean; originalError?: any; } export interface StreamSubscription { id: string; unsubscribe: () => void; pause: () => void; resume: () => void; updateFilter: (filter: StreamFilter) => void; } export interface StreamStats { eventsReceived: number; eventsProcessed: number; eventsDropped: number; connectionUptime: number; lastEventAt?: Date; errors: number; } export interface RealtimeEvent { type: 'event' | 'heartbeat' | 'error'; data?: AuditEvent; timestamp: Date; sequence?: number; } export interface StreamReplay { from: Date; to?: Date; speed?: number; // 1x, 2x, etc. filter?: StreamFilter; onComplete?: () => void; }