const { logError } = require('./logger'); /** * Creates a user-friendly error message from an error object * @param {Error} err - Error object * @returns {string} - User-friendly error message */ function getUserFriendlyError(err) { if (!err) { return 'An unknown error occurred'; } // Handle specific error types if (err.code === 'EADDRINUSE') { return 'The requested port is already in use. Please choose a different port.'; } if (err.code === 'ENOENT') { return 'The requested file or directory was not found.'; } if (err.code === 'EACCES') { return 'Permission denied. Please ensure you have the necessary permissions.'; } if (err.code === 'ECONNREFUSED') { return 'Connection refused. The service may not be running.'; } if (err.code === 'ETIMEDOUT') { return 'Operation timed out. Please try again.'; } // Check for validation errors if (err.message && err.message.includes('validation') || err.message.includes('Invalid')) { return err.message; } // Generic error message if (err.message) { // Don't expose internal error details in production if (process.env.NODE_ENV === 'production') { return 'An error occurred processing your request. Please try again.'; } return err.message; } return 'An unexpected error occurred. Please try again.'; } /** * Creates an error response object * @param {Error} err - Error object * @param {number} defaultStatusCode - Default HTTP status code * @returns {object} - Error response object */ function createErrorResponse(err, defaultStatusCode = 500) { const message = getUserFriendlyError(err); const statusCode = err.statusCode || err.status || defaultStatusCode; logError('ErrorHandler', `Error: ${err.message || err} (Status: ${statusCode})`); return { statusCode, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ error: err.name || 'Error', message: message, ...(process.env.NODE_ENV !== 'production' && err.stack ? { stack: err.stack } : {}) }) }; } module.exports = { getUserFriendlyError, createErrorResponse };