Skip to main content

Módulo Auth

src/app/modules/auth/

Gestiona el login de usuarios internos (agentes/admins) y el login por frame (integración PostMessage).

Archivos​

ArchivoDescripción
auth.module.tsMódulo NestJS, importa CoreAuthModule
repositories/auth.repository.tsConsultas a BD relacionadas con auth
services/auth.service.tsLógica: validación de credenciales, generación de tokens
services/auth.service.spec.tsTests unitarios del servicio
controllers/auth.controller.tsEndpoints HTTP
controllers/auth.controller.spec.tsTests del controlador
dtos/login.dto.tsBody del login estándar
dtos/frame-login.dto.tsBody del login por frame
domain/auth.domain.tsObjeto de dominio con el resultado del login
domain/frame-login.domain.tsObjeto de dominio del frame login
constants/frame-login.constants.tsConstantes del flujo PostMessage

Endpoints​

El controlador no declara guards: los tres endpoints son públicos.

MétodoRutaAuthDescripción
POST/api/v1/auth/loginNoLogin estándar email + password
POST/api/v1/auth/frame-contactNoBusca un contacto en la integración externa del tenant, con el token del tenant (FrameContactDto: token, type, id)
POST/api/v1/auth/frame-loginNoLogin por integración Frame / PostMessage (usa el header Origin)

El usuario autenticado se obtiene con GET /api/v1/users/get-me (ver User); no existe /auth/me.

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).