Skip to content

TheRealCiscoo/messaging_api

Repository files navigation

Sistema de Mensajería en Tiempo Real

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

NestJS TypeScript JavaScript MongoDB WebSockets JWT Docker Docker Compose

Instalación de Dependencia

$ yarn install

Creación de Archivo .env

$ mkdir .env

Contenido del .env

Lista de variables de entorno (Rellenala con los valores correspondientes)

DEBUG_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=

Inicialización de Base de Datos

$ docker-compose up -d

Compilación y Ejecución del Proyecto

# development
$ yarn run start

# watch mode
$ yarn run start:dev

# production mode
$ yarn run start:prod

Registro de Nuevo Usuario

(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"
  }

Inicio de Sesión

El campo identityValue recibe el correo o el número de teléfono.

(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}
  }

Acceso a Ruta Protegida

(GET) /api/v1/auth/private
headers:
  Authorization: Bearer {JWT_ACCESS_TOKEN}

Mensajería

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"
  }

Solicitar un Nuevo Access Token

No necesitas asignar la cookie refresh_token manualmente, se hace automáticamente.

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}
  }

Cerrado de Sesión

Acá tampoco necesitas asignar la cookie manualmente.

(POST) /api/v1/auth/signout
cookie:
  refresh_token={JWT_REFRESH_TOKEN}

Nota

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.

Contáctame

License

La licencia del proyecto es MIT licensed.

About

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.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors