import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { ThemeProvider } from './context/ThemeContext'; import Login from './pages/Login'; import Dashboard from './pages/Dashboard'; import Game from './pages/Game'; import Queue from './pages/Queue'; import RankedGame from './pages/RankedGame'; import Settings from './pages/Settings'; import About from './pages/About'; import FAQ from './pages/FAQ'; function getValidStoredToken() { const token = sessionStorage.getItem('ranked_token'); if (!token) return null; try { const { exp } = JSON.parse(atob(token.split('.')[1])); if (exp * 1000 <= Date.now()) { sessionStorage.removeItem('ranked_token'); return null; } return token; } catch { sessionStorage.removeItem('ranked_token'); return null; } } // OAuth callback lands at /dashboard?token= — token is in the URL, not yet // in sessionStorage, so we must accept it here or the guard bounces the user back to /. function hasUrlToken() { return !!new URLSearchParams(window.location.search).get('token'); } export default function App() { const loggedIn = !!getValidStoredToken(); return ( : } /> : } /> : } /> : } /> : } /> : } /> } /> } /> ); }