1+ import { HttpErrorResponse , HttpInterceptorFn } from "@angular/common/http" ;
2+ import { inject } from "@angular/core" ;
3+ import { catchError , throwError } from "rxjs" ;
4+ import { ErrorService } from "@shared/services" ;
5+
6+ export const errorInterceptor : HttpInterceptorFn = ( req , next ) => {
7+ const errorService = inject ( ErrorService ) ;
8+
9+ return next ( req ) . pipe (
10+ catchError ( ( error : HttpErrorResponse ) => {
11+ let message = "An unexpected error occurred" ;
12+
13+ if ( error . error instanceof ErrorEvent ) {
14+ // Client-side error
15+ message = `Client Error: ${ error . error . message } ` ;
16+ } else {
17+ // Backend error
18+ if ( error . status === 0 ) {
19+ message = "Network error. Please check your internet connection." ;
20+ } else if ( error . status === 400 ) {
21+ // Check for Veil/NestJS validation array
22+ if ( Array . isArray ( error . error . message ) ) {
23+ message = error . error . message . join ( "\n" ) ;
24+ } else if ( typeof error . error . message === "string" ) {
25+ message = error . error . message ;
26+ } else {
27+ message = "Bad Request" ;
28+ }
29+ } else if ( error . status === 401 ) {
30+ message = "Unauthorized. Please login again." ;
31+ } else if ( error . status === 403 ) {
32+ message =
33+ "Forbidden. You do not have permission to access this resource." ;
34+ } else if ( error . status === 404 ) {
35+ message = "Resource not found." ;
36+ } else if ( error . status >= 500 ) {
37+ message = "Server error. Please try again later." ;
38+ }
39+ }
40+
41+ errorService . showError ( message , error . status ) ;
42+ return throwError ( ( ) => error ) ;
43+ } ) ,
44+ ) ;
45+ } ;
0 commit comments