import type { Heartbeat } from '$lib/types'; type Listener = (hb: Heartbeat) => void; const listeners = new Set(); let es: EventSource | null = null; function connect() { if (es) return; es = new EventSource('/api/stream'); es.addEventListener('connected', () => { console.log('[sse] conectado'); }); es.addEventListener('heartbeat', (event: MessageEvent) => { try { const hb: Heartbeat = JSON.parse(event.data); listeners.forEach((fn) => fn(hb)); } catch { // ignore parse errors } }); es.onerror = () => { console.warn('[sse] erro — reconectando...'); }; } export function subscribeHeartbeats(fn: Listener) { listeners.add(fn); connect(); return () => { listeners.delete(fn); if (listeners.size === 0 && es) { es.close(); es = null; } }; }