import { AuthService, OpenAPI, type ResponseAuth } from '@odit/lfk-client-js'; import { writable } from 'svelte/store'; type UserState = { access_token: string; refresh_token: string; isLoggedIn: boolean; refreshInterval: NodeJS.Timer | undefined; }; const state: UserState = { access_token: '', refresh_token: '', isLoggedIn: false, refreshInterval: undefined }; const userState = writable(state); async function auth_login(resAuth: ResponseAuth) { if (!resAuth) { return state; } state.access_token = resAuth.access_token; state.refresh_token = resAuth.refresh_token; state.isLoggedIn = true; state.refreshInterval = setInterval(() => { refreshAuth(); }, 2 * 60000); localStorage.setItem('kiosk-userdata', JSON.stringify(state)); OpenAPI.TOKEN = resAuth.access_token; userState.set(state); return state; } async function refreshAuth() { try { const authRes = (await AuthService.authControllerRefresh({ token: state.refresh_token })) as ResponseAuth; OpenAPI.TOKEN = authRes.access_token; } catch { logout(); } } async function loginFromStorage() { const storagedata = localStorage.getItem('kiosk-userdata'); const userdata = JSON.parse(storagedata || '{}') as UserState; if (!userdata.access_token) { throw new Error('Unauthorized'); } state.access_token = userdata.access_token; state.refresh_token = userdata.refresh_token; state.isLoggedIn = true; state.refreshInterval = setInterval(() => { refreshAuth(); }, 2 * 60000); OpenAPI.TOKEN = userdata.access_token; userState.set(state); return state; } async function logout() { state.isLoggedIn = false; state.access_token = ''; state.refresh_token = ''; state.refreshInterval = undefined; localStorage.clear(); return state; } export { auth_login, logout, loginFromStorage, refreshAuth, userState };