UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

71 lines (68 loc) 3.71 kB
'use strict'; 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