import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http'; import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { catchError, throwError } from 'rxjs'; import { AuthService } from './auth.service'; export const authInterceptor: HttpInterceptorFn = (req, next) => { const auth = inject(AuthService); const router = inject(Router); const token = auth.token(); const request = token ? req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) : req; return next(request).pipe( catchError((error: unknown) => { // not logged in or the token expired → to the login form if (error instanceof HttpErrorResponse && error.status === 401 && !req.url.endsWith('/login')) { auth.clear(); router.navigate(['/login']); } return throwError(() => error); }) ); }; export const authGuard: CanActivateFn = () => inject(AuthService).loggedIn() ? true : inject(Router).createUrlTree(['/login']); export const guestGuard: CanActivateFn = () => inject(AuthService).loggedIn() ? inject(Router).createUrlTree(['/']) : true;