import { api, setCredentials, createToken, songCache, } from "./client.svelte.js"; import { loadLib } from "./library.svelte.js"; import { syncQueue } from "./queue.svelte.js"; export const auth = $state({ ok: false, busy: false, err: null as string | null, server: "", user: "", admin: false, }); export const login = async ( server: string, username: string, password?: string, ) => { auth.busy = true; auth.err = null; try { if (password) { setCredentials({ server, username, ...createToken(password) }); } await api.ping(); await loadLib(); await syncQueue(); let admin = false; try { const user = await api.getUser(username); admin = user.adminRole === "true" || user.adminRole === true; } catch (err) { console.error("failed to fetch user info:", err); } Object.assign(auth, { server, user: username, ok: true, admin }); return true; } catch (err: any) { setCredentials(null); auth.err = err; return false; } finally { auth.busy = false; } }; export const logout = async () => { songCache.clear(); localStorage.clear(); indexedDB.deleteDatabase("tinysub"); if (indexedDB.databases) { const databases = await indexedDB.databases(); for (const database of databases) indexedDB.deleteDatabase(database.name!); } location.reload(); };