import { Request, Response, NextFunction } from 'express'; import { AppError } from '../utils/helpers'; import { logger } from '../utils/logger'; import { env } from '../config/env'; interface ErrorResponse { success: false; message: string; errors?: unknown; stack?: string; } export const errorHandler = ( err: Error | AppError, _req: Request, res: Response, _next: NextFunction ): void => { let statusCode = 500; let message = 'Internal Server Error'; let isOperational = false; if (err instanceof AppError) { statusCode = err.statusCode; message = err.message; isOperational = err.isOperational; } if (!isOperational) { logger.error('Unhandled error:', { message: err.message, stack: err.stack, }); } const response: ErrorResponse = { success: false, message, }; if (env.NODE_ENV === 'development') { response.stack = err.stack; } res.status(statusCode).json(response); }; export const notFoundHandler = (req: Request, _res: Response, next: NextFunction): void => { next(new AppError(`Route ${req.originalUrl} not found`, 404)); };