75 lines
1.4 KiB
Markdown
75 lines
1.4 KiB
Markdown
# `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`
|