"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.notFoundHandler = exports.asyncHandler = exports.errorHandler = void 0; const errors_1 = require("../types/errors"); const errorHandler = (err, req, res, next) => { // Default error values let statusCode = 500; let message = 'Internal server error'; let isOperational = false; // If it's an AppError, use its properties if (err instanceof errors_1.AppError) { statusCode = err.statusCode; message = err.message; isOperational = err.isOperational; } else if (err.name === 'ValidationError') { // Handle validation errors (e.g., from libraries) statusCode = 400; message = err.message; isOperational = true; } else if (err.name === 'JsonWebTokenError') { statusCode = 401; message = 'Invalid token'; isOperational = true; } else if (err.name === 'TokenExpiredError') { statusCode = 401; message = 'Token expired'; isOperational = true; } // Log error details (in production, use proper logging service) if (!isOperational) { console.error('ERROR 💥:', err); } else { console.error(`Operational error: ${message}`); } // Create error response const errorResponse = { success: false, error: { message, ...(process.env.NODE_ENV === 'development' && { details: err.stack }) }, timestamp: new Date().toISOString(), path: req.path }; res.status(statusCode).json(errorResponse); }; exports.errorHandler = errorHandler; // Async error wrapper to catch errors in async route handlers const asyncHandler = (fn) => { return (req, res, next) => { Promise.resolve(fn(req, res, next)).catch(next); }; }; exports.asyncHandler = asyncHandler; // 404 Not Found handler const notFoundHandler = (req, res) => { const errorResponse = { success: false, error: { message: `Route ${req.originalUrl} not found`, code: 'ROUTE_NOT_FOUND' }, timestamp: new Date().toISOString(), path: req.path }; res.status(404).json(errorResponse); }; exports.notFoundHandler = notFoundHandler; //# sourceMappingURL=errorHandler.js.map