import { CallHandler, ExecutionContext, HttpException, Injectable, InternalServerErrorException, NestInterceptor, } from '@nestjs/common'; import { Observable, catchError, throwError } from 'rxjs'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { logGlobalError } from 'src/utils/logger'; import { routeToErrorMessage } from 'src/utils/misc'; @Injectable() export class ErrorInterceptor implements NestInterceptor { constructor(private logger: LoggingRepository) { this.logger.setContext(ErrorInterceptor.name); } intercept(context: ExecutionContext, next: CallHandler): Observable { return next.handle().pipe( catchError((error) => throwError(() => { if (error instanceof HttpException) { return error; } logGlobalError(this.logger, error); const message = routeToErrorMessage(context.getHandler().name); return new InternalServerErrorException(message); }), ), ); } }