@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
71 lines (68 loc) • 3.71 kB
JavaScript
;
var tslib_es6 = require('../external/tslib/tslib.es6.js');
var node_crypto = require('node:crypto');
var common = require('@nestjs/common');
var throttler = require('@nestjs/throttler');
var operators = require('rxjs/operators');
exports.CorrelationIDResponseBodyInterceptor = class CorrelationIDResponseBodyInterceptor {
intercept(context, next) {
return next.handle().pipe(operators.catchError((error) => {
if (error instanceof throttler.ThrottlerException) {
const request = context.switchToHttp().getRequest();
let correlationId = request.headers["x-correlation-id"];
const errorResponse = error.getResponse();
correlationId ??= node_crypto.randomUUID();
let customErrorResponse = {};
customErrorResponse.statusCode = common.HttpStatus.TOO_MANY_REQUESTS;
if (typeof errorResponse === "object" && errorResponse != null) {
customErrorResponse = { ...errorResponse };
}
else {
customErrorResponse.message = errorResponse;
}
customErrorResponse.error = "Too Many Requests";
customErrorResponse.timestamp = Date.now();
customErrorResponse.correlationID = correlationId;
throw new common.HttpException(customErrorResponse, error.getStatus());
}
else if (error instanceof common.HttpException) {
const request = context.switchToHttp().getRequest();
let correlationId = request.headers["x-correlation-id"];
const errorResponse = error.getResponse();
correlationId ??= node_crypto.randomUUID();
let customErrorResponse = {};
if (typeof errorResponse === "object" && errorResponse != null) {
customErrorResponse = { ...errorResponse };
}
else {
customErrorResponse.message = errorResponse;
}
customErrorResponse.correlationID = correlationId;
customErrorResponse.timestamp = Date.now();
throw new common.HttpException(customErrorResponse, error.getStatus());
}
else {
const request = context.switchToHttp().getRequest();
let correlationId = request.headers["x-correlation-id"];
correlationId ??= node_crypto.randomUUID();
if (!(error instanceof Error)) {
error = new common.InternalServerErrorException("Unknown error");
}
const internalError = error;
const errorResponse = "Internal server error";
const customErrorResponse = {};
customErrorResponse.statusCode = common.HttpStatus.INTERNAL_SERVER_ERROR;
customErrorResponse.message = errorResponse;
customErrorResponse.error = "Internal server error";
customErrorResponse.timestamp = Date.now();
customErrorResponse.correlationID = correlationId;
const status = "getStatus" in internalError && typeof internalError.getStatus === "function" ? internalError.getStatus() : common.HttpStatus.INTERNAL_SERVER_ERROR;
throw new common.HttpException(customErrorResponse, status);
}
}));
}
};
exports.CorrelationIDResponseBodyInterceptor = tslib_es6.__decorate([
common.Injectable()
], exports.CorrelationIDResponseBodyInterceptor);
//# sourceMappingURL=correlation-id-response-body.interceptor.js.map