Una API desarrollada con NestJS que implementa un sistema de chat en tiempo real mediante WebSockets y un mecanismo de autenticación seguro basado en JWT. El proyecto está diseñado siguiendo buenas prácticas de arquitectura backend, priorizando la escalabilidad, la seguridad y el rendimiento para aplicaciones de mensajería en tiempo real..
$ yarn install$ mkdir .envDEBUG_MODE=true
MONGO_USER=
MONGO_PWD=
MONGO_URI= # Ej: MONGO_URI='mongodb://USUARIO_MONGO:PASSWORD_MONGO@localhost:27017/auth_db?authSource=admin'
MONGO_AUTH_DB=messaging_api_db
MONGO_APP_DB=messaging_api_app
MONGO_INITDB_ROOT_USERNAME=
MONGO_INITDB_ROOT_PASSWORD=
JWT_ACCESS_TOKEN_SECRET=
JWT_REFRESH_TOKEN_SECRET=$ docker-compose up -d# development
$ yarn run start
# watch mode
$ yarn run start:dev
# production mode
$ yarn run start:prod(POST) /api/v1/auth/signup
body:
{
"firstname": "Maria Helena",
"lastname": "Jerez Guzmán",
"email": "mjerez@google.com",
"password": "P4s$w0Rd51234",
"phone": 628123457,
"phoneCode": 34,
"state": "Barcelona",
"country": "Spain",
"lang": "ES"
}(POST) /api/v1/auth/signin
body:
{
"identityValue": "mjerez@google.com",
"password": "P4s$w0Rd51234"
}
response (Este es un ejemplo de lo que podría venir en la respuesta):
{
"data": {
"_id": "6a490a6af1214adac9d9b4bd",
"firstname": "Maria Helena",
"lastname": "Jerez Guzmán",
"email": "mjerez@google.com",
"phone": 628123457,
"phoneCode": 34,
"isActive": true,
"isVerified": false,
"state": "barcelona",
"country": "spain",
"lang": "es",
"roles": [
"user"
],
"isLogged": false,
"createdAt": "2026-07-04T13:28:10.609Z",
"updatedAt": "2026-07-04T13:28:10.609Z"
},
"access_token": {JWT_ACCESS_TOKEN}
}(GET) /api/v1/auth/private
headers:
Authorization: Bearer {JWT_ACCESS_TOKEN}La conexión debe hacerse usando Websocket NO HTTP. (Si usas Postman para testear la API utiliza la opción Socket.io no Websocket)
(Websocket) /
listen events:
- send-message
event name to send message:
- send-message
headers:
Authorization: Bearer {JWT_ACCESS_TOKEN}
message structure (in JSON):
{
"message": "esto es una prueba",
"recipientId": "DESTINATION_USER_ID"
}Al refrescar el access token, se invalida el refresh token actual y se vuelve a generar un nuevo refresh token que se asigna como nuevo valor de la cookie refresh_token.
(POST) /api/v1/auth/refresh
cookie:
refresh_token={JWT_REFRESH_TOKEN}
response:
{
"access_token": {JWT_ACCESS_TOKEN}
}(POST) /api/v1/auth/signout
cookie:
refresh_token={JWT_REFRESH_TOKEN}El sistema de autenticación no está completo, aún faltan cosas por implementar para considerarse completamente funcional y seguro, tales como:
- Bloqueo de cuentas por múltiples intentos fallidos.
- Recuperación de contraseña.
- Doble factor de autenticación (2FA).
- Registro de autenticacione fallidas y exitosas.
Entre muchas cosas más, por lo que no debe implementarse para producción en estos momentos. Lo mismo con el sistema de mensajerías.
- LinkedIn - Francisco De Jesús
- Github - TheRealCiscoo
La licencia del proyecto es MIT licensed.