interface AuthConfig { serverURL: string; backend: string; port: number; } interface Session { user: string; token: string; } export class Auth { #config: AuthConfig; #session: Session; constructor() { this.#config = { serverURL: '', backend: 'sqlite', port: 8000, }; this.#session = { user: '', token: '', }; } get session(): Readonly { return { ...this.#session }; } get config(): Readonly { return { ...this.#config }; } async login(email: string, password: string) { if (email === 'Administrator') { this.#session.user = 'Administrator'; return; } const response = await fetch(this.#getServerURL() + '/api/login', { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ email, password }), }); if (response.status === 200) { const res = await response.json(); this.#session.user = email; this.#session.token = res.token; return res; } return response; } async signup(email: string, fullName: string, password: string) { const response = await fetch(this.#getServerURL() + '/api/signup', { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ email, fullName, password }), }); if (response.status === 200) { return await response.json(); } return response; } async logout() { // TODO: Implement this with auth flow } #getServerURL() { return this.#config.serverURL || ''; } }