// Phase 0 hygiene (FE-H4 / PERF-H3): self-hosted fonts. Replaces the // Google Fonts @import that used to live at the top of src/index.css — // Vite hashes + bundles these CSS files into web/dist on build, so cold // loads no longer touch fonts.googleapis.com / fonts.gstatic.com. import '@fontsource-variable/inter'; import '@fontsource/jetbrains-mono/400.css'; import '@fontsource/jetbrains-mono/500.css'; import '@fontsource/jetbrains-mono/600.css'; import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter, Routes, Route } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import ErrorBoundary from './components/ErrorBoundary'; import AuthProvider from './components/AuthProvider'; import AuthGate from './components/AuthGate'; import Layout from './components/Layout'; import DashboardPage from './pages/DashboardPage'; import CertificatesPage from './pages/CertificatesPage'; import CertificateDetailPage from './pages/CertificateDetailPage'; import AgentsPage from './pages/AgentsPage'; import AgentDetailPage from './pages/AgentDetailPage'; import JobsPage from './pages/JobsPage'; import NotificationsPage from './pages/NotificationsPage'; import PoliciesPage from './pages/PoliciesPage'; import RenewalPoliciesPage from './pages/RenewalPoliciesPage'; import IssuersPage from './pages/IssuersPage'; import TargetsPage from './pages/TargetsPage'; import ProfilesPage from './pages/ProfilesPage'; import OwnersPage from './pages/OwnersPage'; import TeamsPage from './pages/TeamsPage'; import AgentGroupsPage from './pages/AgentGroupsPage'; import AuditPage from './pages/AuditPage'; import ShortLivedPage from './pages/ShortLivedPage'; import AgentFleetPage from './pages/AgentFleetPage'; import DiscoveryPage from './pages/DiscoveryPage'; import NetworkScanPage from './pages/NetworkScanPage'; import HealthMonitorPage from './pages/HealthMonitorPage'; import DigestPage from './pages/DigestPage'; import ObservabilityPage from './pages/ObservabilityPage'; import JobDetailPage from './pages/JobDetailPage'; import IssuerDetailPage from './pages/IssuerDetailPage'; import IssuerHierarchyPage from './pages/IssuerHierarchyPage'; import TargetDetailPage from './pages/TargetDetailPage'; import SCEPAdminPage from './pages/SCEPAdminPage'; import ESTAdminPage from './pages/ESTAdminPage'; // Bundle 1 Phase 10 — RBAC management pages. import RolesPage from './pages/auth/RolesPage'; import RoleDetailPage from './pages/auth/RoleDetailPage'; import KeysPage from './pages/auth/KeysPage'; import AuthSettingsPage from './pages/auth/AuthSettingsPage'; import ApprovalsPage from './pages/auth/ApprovalsPage'; // Bundle 2 Phase 8 — OIDC + session management pages. import OIDCProvidersPage from './pages/auth/OIDCProvidersPage'; import OIDCProviderDetailPage from './pages/auth/OIDCProviderDetailPage'; import GroupMappingsPage from './pages/auth/GroupMappingsPage'; import SessionsPage from './pages/auth/SessionsPage'; import BreakglassPage from './pages/auth/BreakglassPage'; // Audit 2026-05-10 MED-11 closure — federated-user admin page. import UsersPage from './pages/auth/UsersPage'; import './index.css'; const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 10_000, retry: 1, refetchOnWindowFocus: true, }, }, }); createRoot(document.getElementById('root')!).render( }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Rank 8 — operator-managed multi-level CA hierarchy. Admin-gated at the API; the page renders the backend's 403 as ErrorState for non-admin callers. See docs/intermediate-ca-hierarchy.md. */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* SCEP RFC 8894 + Intune master bundle Phase 9.4 (initial) + Phase 9 follow-up (rebrand): per-profile SCEP Administration page with Profiles / Intune Monitoring / Recent Activity tabs. Route is unconditional; the page itself renders an "Admin access required" banner for non-admin callers and skips the underlying API calls so the server never sees a 403-prone request. */} } /> {/* Backward-compat alias for external bookmarks the Phase 9 release advertised. Lands on the Intune Monitoring tab. */} } /> {/* EST RFC 7030 hardening master bundle Phase 8: per-profile EST Administration page with Profiles / Recent Activity / Trust Bundle tabs. Same admin-gate pattern as SCEP — the route is unconditional; the page renders an "Admin access required" banner for non-admin callers and skips the underlying API calls so the server never sees a 403. */} } /> {/* Bundle 1 Phase 10 — RBAC management surface. Every page reads /api/v1/auth/me on mount via the useAuthMe hook and gates affordances against the cached effective_permissions slice. Server-side enforcement is the load-bearing layer; client-side hide/disable is UX. */} {/* Bundle 2 Phase 8 — OIDC + session management surface. */} } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Audit 2026-05-10 CRIT-4 closure — break-glass admin surface. */} } /> {/* Audit 2026-05-10 MED-11 closure — federated-user admin. */} } /> );