libs/ngx-pfe/tracking/http-interceptor.service.ts

Relationships

Depends on

No results matching.

Index

Methods

Methods

intercept
intercept(request: HttpRequest, next: HttpHandler)
Parameters :
Name Type Optional
request HttpRequest<unknown> No
next HttpHandler No
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);
      })
    );
  }
}

results matching ""

    No results matching ""