From bdc445e7b089dd74b1fa4dcf957651349737ef34 Mon Sep 17 00:00:00 2001 From: stevereis <stevereis93@gmail.com> Date: Mon, 31 Jan 2022 17:01:11 +0100 Subject: [PATCH] feat: Add connector logs with HttpService Module --- .../interceptors/headers.interceptor.ts | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/api/src/engine/interceptors/headers.interceptor.ts b/api/src/engine/interceptors/headers.interceptor.ts index 9b28e49..8dddccb 100644 --- a/api/src/engine/interceptors/headers.interceptor.ts +++ b/api/src/engine/interceptors/headers.interceptor.ts @@ -1,17 +1,35 @@ import { HttpService } from '@nestjs/axios'; -import { Injectable, NestInterceptor, CallHandler } from '@nestjs/common'; +import { + CallHandler, + HttpException, + Inject, + Injectable, + Logger, + NestInterceptor, +} from '@nestjs/common'; import { GqlExecutionContext } from '@nestjs/graphql'; import { IncomingMessage } from 'http'; -import { Observable, tap } from 'rxjs'; +import { catchError, Observable, tap } from 'rxjs'; +import { ENGINE_MODULE_OPTIONS } from '../engine.constants'; +import { IEngineOptions } from '../engine.interfaces'; @Injectable() export class HeadersInterceptor implements NestInterceptor { - constructor(private httpService: HttpService) {} + private readonly logger: Logger; + + constructor( + private httpService: HttpService, + @Inject(ENGINE_MODULE_OPTIONS) private readonly options: IEngineOptions, + ) { + // Logger name is the engine name + // HttpService will be used mostly by the engine (but it's not always true) + this.logger = new Logger(options.type); + } intercept(context: GqlExecutionContext, next: CallHandler): Observable<any> { // cleaner : add only the auth header (should find the name) - const keys = ['cookie', 'x-xsrf-token']; + const keys = ['cookie', 'x-xsrf-token']; // should be a module parameter let headers = {}; switch (context.getType()) { @@ -29,7 +47,7 @@ export class HeadersInterceptor implements NestInterceptor { } } - Object.keys(headers) + Object.keys(headers) // copy needed keys .filter((key) => keys.includes(key)) .map((key) => key.toLowerCase()) .forEach((key) => { @@ -37,8 +55,17 @@ export class HeadersInterceptor implements NestInterceptor { }); return next.handle().pipe( + catchError((e) => { + if (!e.response.data || !e.response.status) return e; + + this.logger.log(e.message); + this.logger.verbose( + `[Error ${e.response.status}] ${e.response.data.message}`, + ); + throw new HttpException(e.response.data, e.response.status); // catch errors, maybe make it optional (module parameter) + }), tap(() => { - this.httpService.axiosRef.defaults.headers.common = {}; //cleaning request + this.httpService.axiosRef.defaults.headers.common = {}; // cleaning request }), ); } -- GitLab