Spaces:
Paused
Paused
| import { HttpInterceptorFn, HttpErrorResponse } from '@angular/common/http'; | |
| import { inject } from '@angular/core'; | |
| import { Router } from '@angular/router'; | |
| import { catchError, throwError } from 'rxjs'; | |
| import { AuthService } from '../services/auth.service'; | |
| export const authInterceptor: HttpInterceptorFn = (req, next) => { | |
| const authService = inject(AuthService); | |
| const router = inject(Router); | |
| // Skip auth for login endpoint | |
| if (req.url.includes('/api/login')) { | |
| return next(req); | |
| } | |
| // Add auth token to requests | |
| const token = authService.getToken(); | |
| if (token) { | |
| req = req.clone({ | |
| setHeaders: { | |
| Authorization: `Bearer ${token}` | |
| } | |
| }); | |
| } | |
| return next(req).pipe( | |
| catchError((error: HttpErrorResponse) => { | |
| if (error.status === 401) { | |
| authService.logout(); | |
| router.navigate(['/login']); | |
| } else if (error.status === 409) { | |
| // Race condition - let components handle this | |
| console.warn('Race condition detected:', error.error?.detail); | |
| } | |
| return throwError(() => error); | |
| }) | |
| ); | |
| }; |