Uecko_ERP/apps/web/README.md

75 lines
1.4 KiB
Markdown
Raw Permalink Normal View History

2026-07-06 15:47:05 +00:00
# `apps/web`
Aplicación frontend principal del ERP.
## Runtime actual de autenticación
La app usa:
```txt
@erp/identity/client
IdentityAuthSessionProvider
DataSourceProvider
Axios compartido
```
No debe usarse `@erp/auth/client` como runtime nuevo.
## Flujo actual
```txt
login
-> GET /identity/auth/session
-> GET /companies/available
-> resolver empresa activa
-> auto-selección si hay una sola empresa
-> selector si hay varias
-> /no-companies si no hay empresas
-> X-Company-Id en rutas tenant-scoped
```
## Headers
No enviar `X-Company-Id` a:
```txt
POST /identity/auth/login
POST /identity/auth/refresh
POST /identity/auth/logout
GET /identity/auth/session
GET /companies/available
```
Sí enviarlo a rutas tenant-scoped cuando exista `activeCompanyId`.
## App company switcher
Componente:
```txt
apps/web/src/layout/app-company-switcher.tsx
```
Propósito:
- mostrar la empresa activa real en el layout autenticado
- permitir cambiar entre `availableCompanies` de la sesión actual
Reglas:
- usar el contexto de `identity`
- no manejar tokens
- no llamar directamente a `GET /companies/available`
- no usar `companySlug` para auth
- no modificar el access token
## Refresh automático
La app implementa refresh automático global sobre `401` con retry único por request y `refreshPromise` compartida.
Si el refresh falla:
- limpiar sesión
- limpiar empresa activa persistida
- redirigir a `/login`