Sistema profesional para integrar Telegram con Sonarr, priorizando calidad de código, seguridad y mantenibilidad.
- Backend: Node.js + TypeScript
- Framework: Express.js
- DB: (future) SQLite/PostgreSQL
- Telegram: GramJS (
telegram) - Queue: BullMQ + Redis
- Testing: Jest
- Docs: TypeDoc
- Logging: Pino
- Inicializa entorno:
bun run setup:envy ajusta.env - Instala dependencias:
bun install - Levanta infraestructura dev:
bun run dev:up(Redis + MariaDB) - Migraciones en dev:
bun run db:migrate:dev - Desarrollo (hot-reload):
bun run dev - Producción local:
bun run buildybun run start
Docker (dev): docker compose up --build -d
- Base:
http://localhost:3000(configurable conPORT) GET /api/health: estado del servicio (JSON)GET /api/health/metrics: métricas Prometheus desde healthGET /metrics: métricas Prometheus (texto)POST /api/queue/enqueue: encola texto; extrae enlaces magnet/.torrent- Body:
{ "text": "...", "source": "api"? } - Respuesta:
202 { "accepted": <n> }o400si no hay enlaces - Nota: rate limiting activo en
/api/*
- Body:
GET /api/telegram/status: estado de configuración y sesiónPOST /api/telegram/login/start: inicia login MTProto vía teléfono- Body:
{ "phone": "+34123456789" } - Respuesta:
{ "loginId": "...", "type": "code", "next": "verify" }
- Body:
POST /api/telegram/login/verify: verifica el código recibido- Body:
{ "loginId": "...", "code": "12345" } - Respuesta:
{ "status": "ok" }o{ "status": "2fa_required", "next": "2fa" }
- Body:
POST /api/telegram/login/2fa: confirma contraseña de dos factores (si aplica)- Body:
{ "loginId": "...", "password": "mi-contraseña" } - Respuesta:
{ "status": "ok" }
- Body:
POST /api/telegram/logout: borra la sesión guardada
UI en apps/web disponible en la ruta /telegram para completar todo el flujo vía web.
src/web– app Express, rutas y middlewaressrc/shared– config, logging, errores, métricas, utilssrc/shared/db– pool MariaDB, migraciones y repositoriossrc/services/telegram– cliente GramJS (sesiones encriptadas)src/services/sonarr– cliente Sonarr con retrysrc/worker– cola BullMQ y worker
- Middlewares: Helmet, CORS, Rate limiting
- Sanitización básica de URLs de entrada
- Sesiones de Telegram encriptadas (AES-256-GCM con
TELEGRAM_ENC_SECRET)
TELEGRAM_API_IDyTELEGRAM_API_HASH: credenciales de tu app de TelegramTELEGRAM_ENC_SECRET: secreto de al menos 16 chars para cifrar la sesiónCORS_ORIGIN: origen permitido para la UI (por ejemplohttp://localhost:5173)- Web UI: define
VITE_API_BASEapuntando al backend Express (por ejemplohttp://localhost:3000)
bun run test ejecuta unit tests (Jest). Cobertura se genera en coverage/.
- Persistencia (MariaDB) con almacenamiento encriptado de credenciales
- CLI de inicialización de sesión MTProto
- Validación robusta de metadatos + priorización de descargas
- Integración Sonarr end-to-end (descargas + monitoreo de estado)
- Autenticación API y autorización por canales permitidos
- CI/CD: publicación de imágenes y análisis de seguridad