/** Serialize refreshes, retaining one follow-up if a change arrives mid-request. */ export function realtimeRefresh( refresh: () => Promise, onError: (error: unknown) => void, ) { let running = false; let pending = false; let closed = false; async function request() { if (closed) return; pending = true; if (running) return; running = true; try { while (pending && !closed) { pending = false; try { await refresh(); } catch (error) { if (!closed) onError(error); } } } finally { running = false; } } return { request, close: () => { closed = true; pending = false; }, }; }