UNPKG

openapi-connect

Version:
61 lines 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isUnavailable = void 0; const http = require("http"); const uuid_1 = require("uuid"); const defaultLogger_1 = require("../helpers/defaultLogger"); exports.default = (err, req, res, next) => { try { if (!err.message && err.status) { err.message = http.STATUS_CODES[err.status]; } const response = JSON.stringify({ message: err.message }); const headers = getHeaders(req, response); if (err.code === 'credentials_required' || err.status === 401) { res.writeHead(401, http.STATUS_CODES[401], headers); } else if ((0, exports.isUnavailable)(err.code)) { res.writeHead(503, http.STATUS_CODES[503], headers); } else if (err.code === 'permission_denied') { res.writeHead(403, http.STATUS_CODES[403], headers); } else if (err.failedValidation) { return handleValidationError(err, req, res, (0, defaultLogger_1.getDefaultLogger)()); } else if (err.status) { res.writeHead(err.status, http.STATUS_CODES[err.status], headers); } else { res.writeHead(500, http.STATUS_CODES[500], headers); } res.end(response); } finally { next(err); } }; const isHeadRequest = (req) => req.method === 'HEAD'; const getHeaders = (req, response) => { return isHeadRequest(req) ? {} : { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(response) }; }; const handleValidationError = (err, req, res, logger) => { var _a; const correlationId = (0, uuid_1.v4)(); const response = JSON.stringify({ message: 'Validation failed. Please check your input data.', errorId: correlationId }); res.writeHead(400, http.STATUS_CODES[400], getHeaders(res, response)); logger.error('Validation error:', { message: err.message, errors: JSON.stringify((_a = err.results) === null || _a === void 0 ? void 0 : _a.errors), errorId: correlationId }); res.end(response); }; const isUnavailable = (code) => { return code === 'ECONNREFUSED' || code === 'ENOTFOUND' || code === 'ECONNRESET' || code === 'ETIMEDOUT'; }; exports.isUnavailable = isUnavailable; //# sourceMappingURL=errorHandling.js.map