import { DiscordUser } from '../types'; // Points to the production backend via Traefik const API_URL = 'https://vollidioten.ceraticsoft.de'; class AuthService { private user: DiscordUser | null = null; private listeners: ((user: DiscordUser | null) => void)[] = []; constructor() { this.checkSession(); } getUser(): DiscordUser | null { return this.user; } // Check if session cookie exists and is valid async checkSession() { try { const res = await fetch(`${API_URL}/auth/me`, { credentials: 'include' }); if (res.ok) { const data = await res.json(); this.user = data; this.notifyListeners(); } } catch (e) { console.log("Auth check failed (Backend might be offline)", e); } } // Redirects to Discord OAuth async login(): Promise { window.location.href = `${API_URL}/auth/discord`; } logout() { window.location.href = `${API_URL}/auth/logout`; } subscribe(listener: (user: DiscordUser | null) => void) { this.listeners.push(listener); listener(this.user); return () => { this.listeners = this.listeners.filter(l => l !== listener); }; } private notifyListeners() { this.listeners.forEach(l => l(this.user)); } } export const authService = new AuthService();