Skip to main content

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​

PaqueteRangoUsoDónde se usaEstado
@nestjs/common^11.0.1Decoradores, pipes, guards, excepcionesTodos los módulosEn uso
@nestjs/core^11.0.1Núcleo, Reflector, NestFactorymain.ts, guardsEn uso
@nestjs/platform-express^11.0.1Adaptador HTTP; FileInterceptorfile.controller.ts, user.controller.ts, widget.controller.tsEn uso
@nestjs/config^4.0.3ConfigModule con validación Joi y registerAsapp.module.ts, src/config/*.tsEn uso
@nestjs/mongoose^11.0.4Integración Mongoose (esquemas, @InjectModel)Todos los modelosEn uso
@nestjs/jwt^11.0.2Firma y verificación de JWT (sesión y state de OAuth)core/auth/auth.module.ts, auth.guard.tsEn uso
@nestjs/swagger^11.2.6OpenAPI (@ApiProperty, @ApiTags)Controladores y DTOs; bootstrap/swagger.tsEn uso
@nestjs/websockets^11.1.18Decoradores de gatewaychat.gateway.ts, ws-exception.filter.tsEn uso
@nestjs/platform-socket.io^11.1.18Adaptador Socket.IO de los gatewaysSin import propio; lo resuelve @nestjs/websocketsImplícito
@nestjs/schedule^6.1.3@Interval / cronmeta-token-refresh.job.ts, csat-expiration.job.ts, scheduled-message-reconciliation.job.tsEn uso
@nestjs/bullmq^11.0.4Colas BullMQ en NestJSqueue.module.ts, meta.module.ts, scheduled-message-core.module.ts y procesadoresEn uso
@scalar/nestjs-api-reference^1.1.6Interfaz de referencia de la API (solo fuera de producción)bootstrap/swagger.tsEn uso

Base de datos​

PaqueteRangoUsoDónde se usaEstado
mongoose^9.4.1ODM de MongoDBEsquemas y repositoriosEn uso
mongodb^7.1.1Driver nativobootstrap/run-migrations.ts, scripts/*.jsEn uso

Colas, Redis y tiempo real​

PaqueteRangoUsoDónde se usaEstado
bullmq^5.73.0Colas meta-webhook y scheduled-messagemeta-webhook-queue.service.ts, meta-webhook.processor.ts, scheduled-message.processor.tsEn uso
redis^5.11.0Cliente Redis (node-redis)Sin imports en src/ ni scripts/Sin uso
@socket.io/redis-adapter^8.3.0Adaptador Redis de Socket.IOSin referencias; no hay useWebSocketAdapter ni createAdapterSin 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​

PaqueteRangoUsoDónde se usaEstado
bcrypt^6.0.0Hash de contraseñasauth.service.ts, user.service.ts, seed.service.ts, scripts/bootstrap-platform-admin.jsEn uso
passport-jwt^4.0.1Estrategia JWT de PassportSin imports; la autenticación usa @nestjs/jwt con guards propiosSin uso
helmet^8.1.0Cabeceras HTTP de seguridadSin 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​

PaqueteRangoUsoDónde se usaEstado
class-validator^0.15.1Validación de DTOs84 archivos (DTOs)En uso
class-transformer^0.5.1Transformación de DTOs (@Type, @Transform)DTOs, ValidationPipeEn uso
joi^18.1.2Esquema de variables de entornosrc/config/env.validation.tsEn uso
reflect-metadata^0.2.2Metadatos de decoradorescore/decorators/catch-web-socket.decorator.ts; lo exige NestEn uso
rxjs^7.8.1Observables (interceptores)core/interceptors/response.interceptor.ts; lo exige NestEn uso

Almacenamiento y media​

PaqueteRangoUsoDónde se usaEstado
@aws-sdk/client-s3^3.1079.0Cliente S3/MinIO (subida, policy, borrado)core/storage/storage.service.tsEn uso
@aws-sdk/s3-request-presigner^3.1079.0URLs firmadas (también para enviar adjuntos a Meta)core/storage/storage.service.tsEn uso
sharp^0.34.5Procesado de imágenes (miniaturas, metadatos)core/media/media-processor.service.tsEn uso
fluent-ffmpeg^2.1.3Procesado de vídeo (miniatura de 320 px)core/media/media-processor.service.tsEn uso
@ffmpeg-installer/ffmpeg^1.1.0Binario de ffmpegmedia-processor.service.ts (require)En uso
@ffprobe-installer/ffprobe^2.1.2Binario de ffprobemedia-processor.service.tsEn 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)​

PaqueteRangoUsoDónde se usaEstado
baileys7.0.0-rc14 (fijada)Cliente WhatsApp Web multi-dispositivomodules/whatsapp/auth/mongo-auth-state.ts, helpers y servicios de WhatsAppEn uso
qrcode^1.5.4Genera el QR de emparejamientowhatsapp-session.manager.tsEn uso
pino^10.3.1LoggerSin imports (Baileys lo acepta como logger, pero el código no lo instancia)Sin uso

Ver WhatsApp.

Utilidades​

PaqueteRangoUsoDónde se usaEstado
luxon^3.7.2Zonas horarias y horario laboralmodules/settings/services/business-hours-evaluator.service.tsEn uso
@faker-js/faker^9.9.0Datos de demostración (seed). Está en dependencies, no en devDependenciesdatabase/seeds/seed.service.tsEn 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​

PaqueteRangoUsoDónde se usa
typescript^5.7.3Compiladortsconfig*.json, eslint.config.mjs
@nestjs/cli^11.0.0nest build / nest startScripts npm, nest-cli.json
@nestjs/schematics^11.0.0Generadores del CLInest-cli.json
@nestjs/testing^11.0.1Test.createTestingModule105 specs
jest^30.0.0Framework de testsScript test, scripts/test-runner.js
ts-jest^29.2.5Transforma TypeScript en Jestjest.transform, test/jest-e2e.json
supertest^7.0.0Peticiones HTTP en testsSpecs de controladores (*.controller.*.spec.ts)
mongodb-memory-server^11.1.0MongoDB en memoria para tests de integraciónSpecs *.integration.spec.ts, repositorios
socket.io-client^4.8.3Cliente de prueba de socketstest-socket.mjs
eslint, @eslint/js, typescript-eslint, eslint-plugin-prettier, eslint-config-prettier, globals^9.18.0 y afinesLintingeslint.config.mjs
@eslint/eslintrc^3.2.0Compatibilidad de configuraciónSin import directo
prettier^3.4.2Formateoeslint.config.mjs, lint-staged
husky, lint-staged^9.1.7, ^17.5.0Hooks de Git (prepare) y Prettier sobre lo preparado.husky/, bloque lint-staged
ts-node, tsconfig-paths^10.9.2, ^4.2.0Ejecutan seed:dev y test:debugScripts npm
ts-loader, source-map-support^9.5.2, ^0.5.21Plantilla del CLI de NestSin referencias
@types/bcrypt, express, fluent-ffmpeg, jest, luxon, multer, node, passport-jwt, qrcode, supertestvariasTiposCompilació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 de src/).
  • @faker-js/faker podría ir en devDependencies si el seed solo se usa en desarrollo (se importa en database/seeds/seed.service.ts, que se ejecuta con RUN_SEEDS=true y APP_ENV=development).