UNPKG

@tomisakae/syosetu-api

Version:

Enterprise-grade Fastify TypeScript API for Syosetu.com data extraction using official API and web scraping. Run instantly with 'npx @tomisakae/syosetu-api'

70 lines 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.errorHandler = void 0; const utils_1 = require("@/utils"); const config_1 = require("@/config"); const logger = (0, utils_1.createChildLogger)('ErrorHandler'); const errorHandler = (error, request, reply) => { logger.error({ error: { message: error.message, stack: error.stack, code: error.code, }, request: { method: request.method, url: request.url, headers: request.headers, params: request.params, query: request.query, }, }, 'Request error occurred'); if (error.validation) { void reply.status(400).send({ success: false, error: 'Validation failed', details: error.validation, timestamp: new Date().toISOString(), }); return; } if (error.statusCode === 429) { void reply.status(429).send({ success: false, error: 'Too many requests', message: 'Rate limit exceeded. Please try again later.', timestamp: new Date().toISOString(), }); return; } if (error.statusCode === 404) { void reply.status(404).send({ success: false, error: 'Not found', message: 'The requested resource was not found', timestamp: new Date().toISOString(), }); return; } if (error.code === 'TIMEOUT' || error.message.includes('timeout')) { void reply.status(408).send({ success: false, error: 'Request timeout', message: 'The request took too long to complete', timestamp: new Date().toISOString(), }); return; } const statusCode = error.statusCode || 500; const message = config_1.appConfig.nodeEnv === 'production' ? 'Internal server error' : error.message; void reply.status(statusCode).send({ success: false, error: message, ...(config_1.appConfig.nodeEnv === 'development' && { stack: error.stack }), timestamp: new Date().toISOString(), }); }; exports.errorHandler = errorHandler; //# sourceMappingURL=error-handler.js.map