50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import { createFileRoute } from '@tanstack/react-router'
|
|
import { useEffect, useRef } from 'react'
|
|
import FullScreenLoader from '@/components/full-screen-loader'
|
|
import { refreshManager } from '@/lib/supertokens/refresh-manager'
|
|
import { logger } from '@/lib/supertokens'
|
|
|
|
export const Route = createFileRoute('/refresh-session')({
|
|
component: RouteComponent,
|
|
})
|
|
|
|
function RouteComponent() {
|
|
const hasAttemptedRef = useRef(false);
|
|
|
|
useEffect(() => {
|
|
if (hasAttemptedRef.current) return;
|
|
hasAttemptedRef.current = true;
|
|
|
|
const handleRefresh = async () => {
|
|
try {
|
|
logger.info("Refresh session route: starting refresh");
|
|
|
|
const refreshed = await refreshManager.refresh();
|
|
|
|
if (refreshed) {
|
|
logger.info("Refresh session route: refresh successful");
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const redirect = urlParams.get('redirect');
|
|
|
|
if (redirect && !redirect.includes('_serverFn') && !redirect.includes('/api/')) {
|
|
logger.info("Refresh session route: redirecting to", redirect);
|
|
window.location.href = decodeURIComponent(redirect);
|
|
} else {
|
|
logger.info("Refresh session route: redirecting to home");
|
|
window.location.href = '/';
|
|
}
|
|
} else {
|
|
logger.warn("Refresh session route: refresh failed, redirecting to login");
|
|
window.location.href = '/login';
|
|
}
|
|
} catch (error) {
|
|
logger.error("Refresh session route: error during refresh", error);
|
|
window.location.href = '/login';
|
|
}
|
|
}
|
|
|
|
setTimeout(handleRefresh, 100)
|
|
}, [])
|
|
|
|
return <FullScreenLoader />
|
|
} |