91 lines
3.0 KiB
JavaScript
91 lines
3.0 KiB
JavaScript
import express from 'express';
|
|
import cors from 'cors';
|
|
import { createServer } from 'http';
|
|
import { PATHS, SERVER } from './config/constants.js';
|
|
import { rateLimitMiddleware } from './middlewares/rateLimit.js';
|
|
import { initMongoDB } from './services/mongodb.js';
|
|
import { initVAPIDKeys } from './services/webPush.js';
|
|
import { initWebSocket } from './services/websocket.js';
|
|
import { startArticleMonitoring } from './services/articleMonitor.js';
|
|
import { initFileWatcher } from './services/fileWatcher.js';
|
|
import { initStripe } from './services/stripe.js';
|
|
import routes from './routes/index.js';
|
|
import workersRouter from './routes/workers.js';
|
|
import articlesRouter from './routes/articles.js';
|
|
import favoritesRouter from './routes/favorites.js';
|
|
import logsRouter from './routes/logs.js';
|
|
import configRouter from './routes/config.js';
|
|
import telegramRouter from './routes/telegram.js';
|
|
import pushRouter from './routes/push.js';
|
|
import usersRouter from './routes/users.js';
|
|
import adminRouter from './routes/admin.js';
|
|
import subscriptionRouter from './routes/subscription.js';
|
|
import paymentsRouter from './routes/payments.js';
|
|
|
|
const app = express();
|
|
const server = createServer(app);
|
|
|
|
// Configurar Express para confiar en proxies (necesario para obtener IP real)
|
|
app.set('trust proxy', true);
|
|
|
|
// Middlewares globales
|
|
app.use(cors());
|
|
|
|
// ⚠️ IMPORTANTE: Webhook de Stripe necesita el body RAW (sin parsear)
|
|
// Por eso usamos express.raw() SOLO para esta ruta, ANTES de express.json()
|
|
app.use('/api/payments/webhook', express.raw({ type: 'application/json' }));
|
|
|
|
// Ahora sí, parseamos JSON para todas las demás rutas
|
|
app.use(express.json());
|
|
|
|
// Aplicar rate limiting a todas las rutas API
|
|
app.use('/api', rateLimitMiddleware);
|
|
|
|
// Inicializar VAPID keys para Web Push
|
|
initVAPIDKeys();
|
|
|
|
// Inicializar Stripe
|
|
initStripe();
|
|
|
|
// Inicializar WebSocket
|
|
initWebSocket(server);
|
|
|
|
// Rutas API
|
|
app.use('/api', routes);
|
|
app.use('/api/workers', workersRouter);
|
|
app.use('/api/articles', articlesRouter);
|
|
app.use('/api/favorites', favoritesRouter);
|
|
app.use('/api/logs', logsRouter);
|
|
app.use('/api/config', configRouter);
|
|
app.use('/api/telegram', telegramRouter);
|
|
app.use('/api/push', pushRouter);
|
|
app.use('/api/users', usersRouter);
|
|
app.use('/api/admin', adminRouter);
|
|
app.use('/api/subscription', subscriptionRouter);
|
|
app.use('/api/payments', paymentsRouter);
|
|
|
|
// Inicializar servidor
|
|
async function startServer() {
|
|
try {
|
|
// Inicializar MongoDB
|
|
await initMongoDB();
|
|
|
|
// Iniciar monitoreo de artículos nuevos
|
|
await startArticleMonitoring();
|
|
|
|
// Inicializar file watcher
|
|
initFileWatcher();
|
|
|
|
// Iniciar servidor HTTP
|
|
server.listen(SERVER.PORT, () => {
|
|
console.log(`🚀 Servidor backend ejecutándose en http://localhost:${SERVER.PORT}`);
|
|
console.log(`📡 WebSocket disponible en ws://localhost:${SERVER.PORT}/ws`);
|
|
});
|
|
} catch (error) {
|
|
console.error('Error al iniciar el servidor:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
startServer().catch(console.error);
|