"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.redis = exports.prisma = void 0; const express_1 = __importDefault(require("express")); const cors_1 = __importDefault(require("cors")); const helmet_1 = __importDefault(require("helmet")); const compression_1 = __importDefault(require("compression")); const express_rate_limit_1 = __importDefault(require("express-rate-limit")); const dotenv_1 = __importDefault(require("dotenv")); const client_1 = require("@prisma/client"); const redis_1 = require("redis"); const logger_1 = require("./utils/logger"); const errorHandler_1 = require("./middleware/errorHandler"); const requestLogger_1 = require("./middleware/requestLogger"); const auth_1 = __importDefault(require("./routes/auth")); const docket_1 = __importDefault(require("./routes/docket")); const documents_1 = __importDefault(require("./routes/documents")); const subscriptions_1 = __importDefault(require("./routes/subscriptions")); const health_1 = __importDefault(require("./routes/health")); dotenv_1.default.config(); const app = (0, express_1.default)(); const PORT = process.env.PORT || 3001; exports.prisma = new client_1.PrismaClient({ log: ['query', 'info', 'warn', 'error'], }); exports.redis = (0, redis_1.createClient)({ url: process.env.REDIS_URL || 'redis://localhost:6379', }); exports.redis.connect().catch((error) => { logger_1.logger.error('Redis connection failed:', error); }); exports.redis.on('error', (error) => { logger_1.logger.error('Redis error:', error); }); exports.redis.on('connect', () => { logger_1.logger.info('Connected to Redis'); }); app.use((0, helmet_1.default)({ crossOriginResourcePolicy: { policy: "cross-origin" } })); app.use((0, cors_1.default)({ origin: process.env.NODE_ENV === 'production' ? process.env.FRONTEND_URL : ['http://localhost:3000', 'http://frontend:3000'], credentials: true, })); const limiter = (0, express_rate_limit_1.default)({ windowMs: 15 * 60 * 1000, max: 100, message: 'Too many requests from this IP, please try again later.', standardHeaders: true, legacyHeaders: false, }); app.use('/api', limiter); const authLimiter = (0, express_rate_limit_1.default)({ windowMs: 15 * 60 * 1000, max: 5, message: 'Too many authentication attempts, please try again later.', standardHeaders: true, legacyHeaders: false, }); app.use('/api/auth', authLimiter); app.use((0, compression_1.default)()); app.use(express_1.default.json({ limit: '10mb' })); app.use(express_1.default.urlencoded({ extended: true, limit: '10mb' })); app.use(requestLogger_1.requestLogger); app.use('/api/health', health_1.default); app.use('/api/auth', auth_1.default); app.use('/api/docket-entries', docket_1.default); app.use('/api/documents', documents_1.default); app.use('/api/subscriptions', subscriptions_1.default); app.use('*', (req, res) => { res.status(404).json({ success: false, message: 'Route not found', }); }); app.use(errorHandler_1.errorHandler); process.on('SIGTERM', async () => { logger_1.logger.info('SIGTERM received, shutting down gracefully'); await exports.prisma.$disconnect(); await exports.redis.quit(); process.exit(0); }); process.on('SIGINT', async () => { logger_1.logger.info('SIGINT received, shutting down gracefully'); await exports.prisma.$disconnect(); await exports.redis.quit(); process.exit(0); }); app.listen(PORT, () => { logger_1.logger.info(`Server running on port ${PORT}`); logger_1.logger.info(`Environment: ${process.env.NODE_ENV || 'development'}`); }); exports.default = app; //# sourceMappingURL=index.js.map