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
This commit is contained in:
2026-08-27 08:20:25 +00:00
parent b39fe6334f
commit de11af985e
40 changed files with 2085 additions and 38 deletions

View File

@@ -53,6 +53,15 @@ export const config = {
// Umbral mínimo de similitud coseno para recuperar contexto (0-1)
minScore: Number(env('AI_MIN_SCORE', '0.3')),
},
auth: {
jwtSecret: env('JWT_SECRET'),
// Cadena aceptada por jsonwebtoken (p. ej. '7d')
jwtExpiresIn: env('JWT_EXPIRES_IN', '7d'),
// 'false' desactiva la exigencia de token en /api (tests, arranque temprano)
enabled: env('AUTH_ENABLED', 'true') !== 'false',
// Password del usuario admin sembrado (seed-usuarios.ts)
adminPassword: env('ADMIN_PASSWORD', 'Frasa2026'),
},
} as const
export type AppConfig = typeof config