Files
FRASA-CAS/apps/cobranza/src/main.tsx
Consult AS Technology de11af985e feat(auth): login JWT en API y las 4 apps
- Modelo Usuario + seed desde lista de vendedores (18 usuarios, bcrypt cost 12)
- POST /api/auth/login + /api/auth/me; middleware Bearer en todo /api
  excepto health, login y webhook Monday; flag AUTH_ENABLED
- Username = nombre completo normalizado (case/acentos insensible),
  password inicial Frasa2026, admin vía ADMIN_PASSWORD
- Apps: LoginScreen + AuthGate (StudioBlank), token en localStorage,
  header Authorization en todas las llamadas, logout en 401
- Tests: api 136, cotizador 71, alta 65, cobranza 71, agente-ia 13, landing 4
2026-08-27 08:20:25 +00:00

33 lines
1.1 KiB
TypeScript

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { BrowserRouter, Route, Routes } from 'react-router-dom'
import '@fontsource/inter/300.css'
import '@fontsource/inter/400.css'
import '@fontsource/inter/500.css'
import '@fontsource/inter/700.css'
import './index.css'
import Layout from './components/Layout'
import AuthGate from './components/AuthGate'
import DashboardPage from './pages/DashboardPage'
import HoyPage from './pages/HoyPage'
import PlanDetallePage from './pages/PlanDetallePage'
import NuevoPlanPage from './pages/NuevoPlanPage'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<BrowserRouter basename="/pay">
<AuthGate>
<Layout>
<Routes>
<Route path="/" element={<DashboardPage />} />
<Route path="/hoy" element={<HoyPage />} />
<Route path="/planes/:id" element={<PlanDetallePage />} />
<Route path="/nuevo" element={<NuevoPlanPage />} />
<Route path="*" element={<DashboardPage />} />
</Routes>
</Layout>
</AuthGate>
</BrowserRouter>
</StrictMode>,
)