// SSE-Eventstrom (UMBAU v3 P3a) — Gegenstück zu backend/routers/events.py. // EIN EventSource auf /api/events; `invalidate`-Events stoßen gezielt die React-Query- // Caches an. Solange der Strom steht, sind die Poller nur noch Sicherheitsnetz // (queries.ts entspannt sie ×5 über sseVerbunden()). Reißt der Strom (MC2-Deploy, // Netz), reconnectet EventSource von selbst — bis dahin pollt die UI wie früher. import { useEffect } from "react" import { useQueryClient } from "@tanstack/react-query" let verbunden = false export const sseVerbunden = () => verbunden export function useEventStream() { const qc = useQueryClient() useEffect(() => { const es = new EventSource("/api/events") es.onopen = () => { verbunden = true } es.onerror = () => { verbunden = false } es.addEventListener("invalidate", (e) => { try { const keys: string[] = JSON.parse((e as MessageEvent).data)?.keys ?? [] for (const k of keys) qc.invalidateQueries({ queryKey: [k] }) } catch { /* kaputtes Event bricht den Strom nicht */ } }) return () => { verbunden = false; es.close() } }, [qc]) }