Librerías
Inventario de dependencies y devDependencies del package.json (proyecto back-crm-nest). Es el mismo en main y en feat/meta_connections. Los rangos son los declarados en package.json; la columna Dónde se usa sale de imports reales en src/, scripts/ y test/, excluyendo los *.spec.ts salvo que se indique.
Leyenda: En uso (hay import), Implícito (lo carga el framework sin import propio), Sin uso (declarado, sin ninguna referencia en el código).
Dependencias de producción
NestJS
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
@nestjs/common | ^11.0.1 | Decoradores, pipes, guards, excepciones | Todos los módulos | En uso |
@nestjs/core | ^11.0.1 | Núcleo, Reflector, NestFactory | main.ts, guards | En uso |
@nestjs/platform-express | ^11.0.1 | Adaptador HTTP; FileInterceptor | file.controller.ts, user.controller.ts, widget.controller.ts | En uso |
@nestjs/config | ^4.0.3 | ConfigModule con validación Joi y registerAs | app.module.ts, src/config/*.ts | En uso |
@nestjs/mongoose | ^11.0.4 | Integración Mongoose (esquemas, @InjectModel) | Todos los modelos | En uso |
@nestjs/jwt | ^11.0.2 | Firma y verificación de JWT (sesión y state de OAuth) | core/auth/auth.module.ts, auth.guard.ts | En uso |
@nestjs/swagger | ^11.2.6 | OpenAPI (@ApiProperty, @ApiTags) | Controladores y DTOs; bootstrap/swagger.ts | En uso |
@nestjs/websockets | ^11.1.18 | Decoradores de gateway | chat.gateway.ts, ws-exception.filter.ts | En uso |
@nestjs/platform-socket.io | ^11.1.18 | Adaptador Socket.IO de los gateways | Sin import propio; lo resuelve @nestjs/websockets | Implícito |
@nestjs/schedule | ^6.1.3 | @Interval / cron | meta-token-refresh.job.ts, csat-expiration.job.ts, scheduled-message-reconciliation.job.ts | En uso |
@nestjs/bullmq | ^11.0.4 | Colas BullMQ en NestJS | queue.module.ts, meta.module.ts, scheduled-message-core.module.ts y procesadores | En uso |
@scalar/nestjs-api-reference | ^1.1.6 | Interfaz de referencia de la API (solo fuera de producción) | bootstrap/swagger.ts | En uso |
Base de datos
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
mongoose | ^9.4.1 | ODM de MongoDB | Esquemas y repositorios | En uso |
mongodb | ^7.1.1 | Driver nativo | bootstrap/run-migrations.ts, scripts/*.js | En uso |
Colas, Redis y tiempo real
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
bullmq | ^5.73.0 | Colas meta-webhook y scheduled-message | meta-webhook-queue.service.ts, meta-webhook.processor.ts, scheduled-message.processor.ts | En uso |
redis | ^5.11.0 | Cliente Redis (node-redis) | Sin imports en src/ ni scripts/ | Sin uso |
@socket.io/redis-adapter | ^8.3.0 | Adaptador Redis de Socket.IO | Sin referencias; no hay useWebSocketAdapter ni createAdapter | Sin uso |
:::caution ioredis no está declarado
El código importa ioredis (bootstrap/check-redis.ts, modules/message/inbound-lock/inbound-lock.module.ts e inbound-lock.service.ts), pero no figura en package.json. Llega de forma transitiva por bullmq (5.10.1 en el lockfile). Conviene declararlo explícitamente (y valorar quitar redis, que nadie usa) para que un cambio en bullmq no rompa el arranque.
:::
Autenticación y seguridad
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
bcrypt | ^6.0.0 | Hash de contraseñas | auth.service.ts, user.service.ts, seed.service.ts, scripts/bootstrap-platform-admin.js | En uso |
passport-jwt | ^4.0.1 | Estrategia JWT de Passport | Sin imports; la autenticación usa @nestjs/jwt con guards propios | Sin uso |
helmet | ^8.1.0 | Cabeceras HTTP de seguridad | Sin referencias en main.ts ni bootstrap/ | Sin uso |
Node crypto (AES, HMAC) cubre el cifrado en reposo y la firma de webhooks; no hay librería adicional. Ver Crypto.
Validación y serialización
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
class-validator | ^0.15.1 | Validación de DTOs | 84 archivos (DTOs) | En uso |
class-transformer | ^0.5.1 | Transformación de DTOs (@Type, @Transform) | DTOs, ValidationPipe | En uso |
joi | ^18.1.2 | Esquema de variables de entorno | src/config/env.validation.ts | En uso |
reflect-metadata | ^0.2.2 | Metadatos de decoradores | core/decorators/catch-web-socket.decorator.ts; lo exige Nest | En uso |
rxjs | ^7.8.1 | Observables (interceptores) | core/interceptors/response.interceptor.ts; lo exige Nest | En uso |
Almacenamiento y media
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
@aws-sdk/client-s3 | ^3.1079.0 | Cliente S3/MinIO (subida, policy, borrado) | core/storage/storage.service.ts | En uso |
@aws-sdk/s3-request-presigner | ^3.1079.0 | URLs firmadas (también para enviar adjuntos a Meta) | core/storage/storage.service.ts | En uso |
sharp | ^0.34.5 | Procesado de imágenes (miniaturas, metadatos) | core/media/media-processor.service.ts | En uso |
fluent-ffmpeg | ^2.1.3 | Procesado de vídeo (miniatura de 320 px) | core/media/media-processor.service.ts | En uso |
@ffmpeg-installer/ffmpeg | ^1.1.0 | Binario de ffmpeg | media-processor.service.ts (require) | En uso |
@ffprobe-installer/ffprobe | ^2.1.2 | Binario de ffprobe | media-processor.service.ts | En uso |
multer no es dependencia directa: viene con @nestjs/platform-express y se importa memoryStorage de él en file.controller.ts, user.controller.ts y widget.controller.ts.
Mensajería (WhatsApp)
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
baileys | 7.0.0-rc14 (fijada) | Cliente WhatsApp Web multi-dispositivo | modules/whatsapp/auth/mongo-auth-state.ts, helpers y servicios de WhatsApp | En uso |
qrcode | ^1.5.4 | Genera el QR de emparejamiento | whatsapp-session.manager.ts | En uso |
pino | ^10.3.1 | Logger | Sin imports (Baileys lo acepta como logger, pero el código no lo instancia) | Sin uso |
Ver WhatsApp.
Utilidades
| Paquete | Rango | Uso | Dónde se usa | Estado |
|---|---|---|---|---|
luxon | ^3.7.2 | Zonas horarias y horario laboral | modules/settings/services/business-hours-evaluator.service.ts | En uso |
@faker-js/faker | ^9.9.0 | Datos de demostración (seed). Está en dependencies, no en devDependencies | database/seeds/seed.service.ts | En uso |
express tampoco está declarado: solo se importan sus tipos (Request, Response) desde @types/express (devDependency) en guards, filtros y controladores.
No son dependencias
Aparecían en versiones anteriores de esta página y no existen en package.json: bull, ioredis (ver aviso), dotenv, uuid, passport, passport-local, @nestjs/passport, multer y socket.io (este último llega vía @nestjs/platform-socket.io). El .env se carga con una función propia (bootstrap/load-env.ts, sin dotenv).
Dependencias de desarrollo
| Paquete | Rango | Uso | Dónde se usa |
|---|---|---|---|
typescript | ^5.7.3 | Compilador | tsconfig*.json, eslint.config.mjs |
@nestjs/cli | ^11.0.0 | nest build / nest start | Scripts npm, nest-cli.json |
@nestjs/schematics | ^11.0.0 | Generadores del CLI | nest-cli.json |
@nestjs/testing | ^11.0.1 | Test.createTestingModule | 105 specs |
jest | ^30.0.0 | Framework de tests | Script test, scripts/test-runner.js |
ts-jest | ^29.2.5 | Transforma TypeScript en Jest | jest.transform, test/jest-e2e.json |
supertest | ^7.0.0 | Peticiones HTTP en tests | Specs de controladores (*.controller.*.spec.ts) |
mongodb-memory-server | ^11.1.0 | MongoDB en memoria para tests de integración | Specs *.integration.spec.ts, repositorios |
socket.io-client | ^4.8.3 | Cliente de prueba de sockets | test-socket.mjs |
eslint, @eslint/js, typescript-eslint, eslint-plugin-prettier, eslint-config-prettier, globals | ^9.18.0 y afines | Linting | eslint.config.mjs |
@eslint/eslintrc | ^3.2.0 | Compatibilidad de configuración | Sin import directo |
prettier | ^3.4.2 | Formateo | eslint.config.mjs, lint-staged |
husky, lint-staged | ^9.1.7, ^17.5.0 | Hooks de Git (prepare) y Prettier sobre lo preparado | .husky/, bloque lint-staged |
ts-node, tsconfig-paths | ^10.9.2, ^4.2.0 | Ejecutan seed:dev y test:debug | Scripts npm |
ts-loader, source-map-support | ^9.5.2, ^0.5.21 | Plantilla del CLI de Nest | Sin referencias |
@types/bcrypt, express, fluent-ffmpeg, jest, luxon, multer, node, passport-jwt, qrcode, supertest | varias | Tipos | Compilación y tests (@types/passport-jwt queda huérfano junto a passport-jwt) |
Scripts npm
npm run build # nest build, compila a dist/
npm run start # nest start
npm run dev # nest start --watch
npm run start:debug # nest start --debug --watch
npm run start:prod # node dist/main
npm run test # jest (unitarios)
npm run test:watch # jest --watch
npm run test:cov # cobertura
npm run test:e2e # jest con test/jest-e2e.json
npm run test:ci # scripts/test-runner.js (solo corre si TESTING=true)
npm run lint # eslint --fix
npm run format # prettier --write
npm run seed:dev # semillas de desarrollo
npm run migrate:message-ack # scripts/migrate-message-ack.js
npm run platform:bootstrap-admin # scripts/bootstrap-platform-admin.js
npm run secrets:scan # hook de gitleaks (.husky/pre-commit)
Configuración de Jest en package.json: rootDir: src, testRegex: .*\.spec\.ts$, testEnvironment: node, maxWorkers: 4. Ver Testing.
Candidatas a revisar
- Sin uso:
redis,@socket.io/redis-adapter,passport-jwt(+@types/passport-jwt),helmet,pino,ts-loader,source-map-support. - Falta declarar:
ioredis(importado en 3 archivos desrc/). @faker-js/fakerpodría ir endevDependenciessi el seed solo se usa en desarrollo (se importa endatabase/seeds/seed.service.ts, que se ejecuta conRUN_SEEDS=trueyAPP_ENV=development).