import { useEffect, useRef } from "react"; import { clientFetch } from "@/lib/api"; interface UseKeepOnlineOptions { interval?: number; // in milliseconds enabled?: boolean; onError?: (error: any) => void; } export const useKeepOnline = (options: UseKeepOnlineOptions = {}) => { const { interval = 1000 * 60 * 1, // 1 minute default enabled = true, onError } = options; const intervalRef = useRef(null); useEffect(() => { if (!enabled) { return; } const updateOnlineStatus = async () => { try { console.log("Updating online status..."); await clientFetch('/auth/me'); } catch (error) { console.error("Failed to update online status:", error); onError?.(error); } }; // Initial call updateOnlineStatus(); // Set up interval intervalRef.current = setInterval(updateOnlineStatus, interval); return () => { if (intervalRef.current) { clearInterval(intervalRef.current); intervalRef.current = null; } }; }, [enabled, interval, onError]); return { isActive: enabled && intervalRef.current !== null, stop: () => { if (intervalRef.current) { clearInterval(intervalRef.current); intervalRef.current = null; } } }; };