openapi-connect
Version:
Base for microservices around OpenAPI/Swagger
61 lines • 2.37 kB
JavaScript
;
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