import { useCallback, useEffect, useState } from 'react'; import { isLoggedInVar } from 'state-management/session'; import { getNewAccessToken, getRefreshToken, isAccessTokenValid } from 'utils/auth'; export function useSession(): Session { const [loadingSession, setLoadingSession] = useState(true); const checkSession = useCallback(async (isInitial = false) => { if (isInitial) { setLoadingSession(isInitial as boolean); } const isTokenValid = await isAccessTokenValid(); if (isTokenValid) { isLoggedInVar(true); } else { const refreshToken = await getRefreshToken(); if (refreshToken) { await getNewAccessToken(); isLoggedInVar(true); } else { isLoggedInVar(false); } } if (isInitial) { setLoadingSession(false); } }, []); const checkSessionInBackground = useCallback(async () => { const isTokenValid = await isAccessTokenValid(); if (!isTokenValid) { const refreshToken = await getRefreshToken(); if (refreshToken) { await getNewAccessToken(); } else { isLoggedInVar(false); } } }, []); useEffect(() => { checkSession(true); }, [checkSession]); return { loadingSession, checkSession }; } interface Session { loadingSession: boolean; checkSession: () => void; }