libs/ngx-pfe/tracking/http-interceptor.service.ts
No results matching.
Methods |
| intercept | |||||||||
intercept(request: HttpRequest
|
|||||||||
|
Parameters :
Returns :
Observable<HttpEvent<unknown>>
|
import { isPlatformBrowser } from '@angular/common';
import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Injectable, PLATFORM_ID, inject } from '@angular/core';
import { Observable, throwError as observableThrowError } from 'rxjs';
import { catchError } from 'rxjs/operators';
@Injectable()
export class TrackingHttpInterceptorService implements HttpInterceptor {
private platformId = inject(PLATFORM_ID);
// '@allianz/tracking' is not SSR-compatible, so it must be loaded only on browser.
private tracking = isPlatformBrowser(this.platformId) ? import('@allianz/tracking') : undefined;
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe(
catchError((response) => {
if (response instanceof HttpErrorResponse) {
const xErrorCode = response.headers?.get('x-error-code');
const httpError = {
url: request.url,
status: response.status,
statusText: response.statusText,
name: response.name,
message: response.message,
xErrorCode: xErrorCode,
};
this.tracking?.then(({ pushEvent }) => pushEvent('httpError', httpError, true));
}
return observableThrowError(response);
})
);
}
}