8e2afb93f3
- NCWF-5: scaffold /analysis route with ChessBoard viewer and navigation - NCWF-6: FEN / PGN / Game-ID input form with depth selector - NCWF-7: extend GameApiService with analyzePosition(); add AnalysisService with game-wide annotation pipeline; proxy /api/analysis -> :8087 - NCWF-8: EvalTimelineComponent — SVG win-chance chart per ply - NCWF-9: AnnotatedMoveListComponent — quality labels (!! ! ?! ? ??) derived from win-chance delta Also fix pre-existing app.spec.ts failure (missing provideHttpClient). Apply project-wide prettier formatting pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
677 B
TypeScript
24 lines
677 B
TypeScript
import { HttpInterceptorFn } from '@angular/common/http';
|
|
|
|
export const authInterceptor: HttpInterceptorFn = (req, next) => {
|
|
const token = localStorage.getItem('token');
|
|
|
|
const isProtectedEndpoint =
|
|
req.url.includes('/api/account/me') ||
|
|
req.url.includes('/api/account/bots') ||
|
|
req.url.includes('/api/account/official-bots') ||
|
|
req.url.includes('/api/board/game') ||
|
|
req.url.includes('/api/challenge') ||
|
|
req.url.includes('/api/tournament');
|
|
|
|
if (token && isProtectedEndpoint && !req.headers.has('Authorization')) {
|
|
req = req.clone({
|
|
setHeaders: {
|
|
Authorization: `Bearer ${token}`,
|
|
},
|
|
});
|
|
}
|
|
|
|
return next(req);
|
|
};
|