import { useEffect, useState } from 'react' const POLL_MS = 2 * 60 * 1000 export function useVersionCheck(healthUrl: string) { const [updateAvailable, setUpdateAvailable] = useState(false) useEffect(() => { let seenVersion: string | null = null async function check() { try { const res = await fetch(healthUrl, { cache: 'no-store' }) if (!res.ok) return const data = await res.json() const v: string | undefined = 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 }