import { EventSourcePolyfill as EventSource } from 'event-source-polyfill'; export const bindToMercureTopic = (mercureInfo, realTimeUpdates, topic, onMessage, onTokenExpired) => () => { const { enabled } = realTimeUpdates; const { mercureHubUrl, token, loading, error } = mercureInfo; if (!enabled || loading || error) { return undefined; } const hubUrl = new URL(mercureHubUrl); hubUrl.searchParams.append('topic', topic); const es = new EventSource(hubUrl, { headers: { Authorization: `Bearer ${token}`, }, }); es.onmessage = ({ data }) => onMessage(JSON.parse(data)); es.onerror = ({ status }) => status === 401 && onTokenExpired(); return () => es.close(); };