import { useEffect, useState } from 'react'; const POLL_MS = 2 * 60 * 1000; export function useVersionCheck(healthUrl) { const [updateAvailable, setUpdateAvailable] = useState(false); useEffect(() => { let seenVersion = null; async function check() { try { const res = await fetch(healthUrl, { cache: 'no-store' }); if (!res.ok) return; const data = await res.json(); const v = data.version; if (!v) return; if (seenVersion === null) { seenVersion = v; } else if (v !== seenVersion) { setUpdateAvailable(true); } } catch { // network error — skip silently } } check(); const interval = setInterval(check, POLL_MS); function onVisible() { if (document.visibilityState === 'visible') check(); } document.addEventListener('visibilitychange', onVisible); return () => { clearInterval(interval); document.removeEventListener('visibilitychange', onVisible); }; }, [healthUrl]); return updateAvailable; }