import { useEffect } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { BrowserRouter, Routes, Route, Navigate, Outlet } from 'react-router'; import { Toaster } from 'sonner'; import { TooltipProvider } from '@/components/ui/tooltip'; import { useAuthStore } from '@/stores/auth'; import { ErrorBoundary } from '@/components/error-boundary'; // Layouts import { AppLayout } from '@/components/layout/app-layout'; import { ServerLayout } from '@/components/layout/server-layout'; // Auth pages import { LoginPage } from '@/pages/auth/login'; import { RegisterPage } from '@/pages/auth/register'; // App pages import { OrganizationsPage } from '@/pages/organizations/index'; import { DashboardPage } from '@/pages/dashboard/index'; import { ServersPage } from '@/pages/servers/index'; import { CreateServerPage } from '@/pages/servers/create'; import { NodesPage } from '@/pages/nodes/index'; import { NodeDetailPage } from '@/pages/nodes/detail'; import { MembersPage } from '@/pages/settings/members'; // Server pages import { ConsolePage } from '@/pages/server/console'; import { FilesPage } from '@/pages/server/files'; import { BackupsPage } from '@/pages/server/backups'; import { SchedulesPage } from '@/pages/server/schedules'; import { ConfigPage } from '@/pages/server/config'; import { PluginsPage } from '@/pages/server/plugins'; import { PlayersPage } from '@/pages/server/players'; import { DatabasesPage } from '@/pages/server/databases'; import { ServerSettingsPage } from '@/pages/server/settings'; // Admin pages import { AdminUsersPage } from '@/pages/admin/users'; import { AdminGamesPage } from '@/pages/admin/games'; import { AdminPluginsPage } from '@/pages/admin/plugins'; import { AdminNodesPage } from '@/pages/admin/nodes'; import { AdminAuditLogsPage } from '@/pages/admin/audit-logs'; import { AccountSecurityPage } from '@/pages/account/security'; const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 5 * 1000, retry: 1, }, }, }); function AuthGuard() { const { isAuthenticated, isLoading, fetchUser } = useAuthStore(); useEffect(() => { fetchUser(); }, [fetchUser]); if (isLoading) { return (
); } if (!isAuthenticated) { return ; } return ; } export function App() { return ( {/* Public routes */} } /> } /> {/* Protected routes */} }> }> {/* Organizations */} } /> {/* Org-scoped routes */} } /> } /> } /> } /> } /> } /> } /> {/* Account */} } /> {/* Server detail */} }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Admin */} } /> } /> } /> } /> } /> {/* Fallback */} } /> ); }