Módulo Auth
src/app/modules/auth/
Gestiona el login de usuarios internos (agentes/admins) y el login por frame (integración PostMessage).
Archivos
| Archivo | Descripción |
|---|---|
auth.module.ts | Módulo NestJS, importa CoreAuthModule |
repositories/auth.repository.ts | Consultas a BD relacionadas con auth |
services/auth.service.ts | Lógica: validación de credenciales, generación de tokens |
services/auth.service.spec.ts | Tests unitarios del servicio |
controllers/auth.controller.ts | Endpoints HTTP |
controllers/auth.controller.spec.ts | Tests del controlador |
dtos/login.dto.ts | Body del login estándar |
dtos/frame-login.dto.ts | Body del login por frame |
domain/auth.domain.ts | Objeto de dominio con el resultado del login |
domain/frame-login.domain.ts | Objeto de dominio del frame login |
constants/frame-login.constants.ts | Constantes del flujo PostMessage |
Endpoints
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
POST | /api/v1/auth/login | No | Login estándar email + password |
POST | /api/v1/auth/frame-login | No | Login por integración Frame / PostMessage |
GET | /api/v1/auth/me | @Auth() | Retorna el usuario autenticado |
DTOs
LoginDto
{
email: string // requerido, formato email
password: string // requerido
}
FrameLoginDto
{
token: string // token generado por el sistema origen (Frame)
tenantId: string // UUID del tenant
}
Flujo login estándar
POST /auth/login
→ AuthService.login(dto)
→ Busca usuario por email en BD
→ Compara password con bcrypt
→ Genera JWT con { sub: userId, email }
→ Retorna { accessToken, user }
Flujo Frame Login
POST /auth/frame-login
→ AuthService.frameLogin(dto)
→ Valida el token contra el tenant (tokens array del Tenant)
→ Verifica que no haya expirado
→ Retorna JWT igual al login estándar
Token JWT
El accessToken contiene:
{ "sub": "userId", "email": "user@example.com", "iat": ..., "exp": ... }
Duración configurable con JWT_EXPIRES_IN (default 1d).