changemaker.lite/api/dist/middleware/error-handler.js

52 lines
1.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppError = void 0;
exports.errorHandler = errorHandler;
const zod_1 = require("zod");
const logger_1 = require("../utils/logger");
const env_1 = require("../config/env");
class AppError extends Error {
statusCode;
code;
constructor(statusCode, message, code) {
super(message);
this.statusCode = statusCode;
this.code = code;
this.name = 'AppError';
}
}
exports.AppError = AppError;
function errorHandler(err, _req, res, _next) {
if (err instanceof AppError) {
res.status(err.statusCode).json({
error: {
message: err.message,
code: err.code,
},
});
return;
}
if (err instanceof zod_1.ZodError) {
const fieldErrors = err.flatten().fieldErrors;
const errorCount = Object.keys(fieldErrors).length;
res.status(400).json({
error: {
message: 'Validation error',
code: 'VALIDATION_ERROR',
// Only expose details in development
...(env_1.env.NODE_ENV === 'development' && { details: fieldErrors }),
// In production, only show count
...(env_1.env.NODE_ENV === 'production' && { fieldCount: errorCount }),
},
});
return;
}
logger_1.logger.error('Unhandled error:', err);
res.status(500).json({
error: {
message: env_1.env.NODE_ENV === 'production' ? 'Internal server error' : err.message,
code: 'INTERNAL_ERROR',
},
});
}
//# sourceMappingURL=error-handler.js.map