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 userStore = () => { const state: UserState = { access_token: '', refresh_token: '', isLoggedIn: false, refreshInterval: undefined }; const { subscribe, set, update } = writable(state); const methods = { async login(resAuth: ResponseAuth) { update((state: UserState) => { if (!resAuth) { return state; } state.access_token = resAuth.access_token; state.refresh_token = resAuth.refresh_token; state.isLoggedIn = true; state.refreshInterval = setInterval(() => { this.refreshAuth(); }, 2 * 60000) localStorage.setItem('kiosk-userdata', JSON.stringify(state)); localStorage.setItem('kiosk-access_token', state.access_token); OpenAPI.TOKEN = resAuth.access_token; return state; }); }, async refreshAuth() { try { const authRes = await AuthService.authControllerRefresh({ token: state.refresh_token }) as ResponseAuth; OpenAPI.TOKEN = authRes.access_token; } catch { this.logout(); } }, async loginFromStorage() { console.log('loginFromStorage'); const access_token = localStorage.getItem('kiosk-access_token'); if (!access_token) { throw new Error('Unauthorized'); } const storagedata = localStorage.getItem('kiosk-userdata'); const userdata = JSON.parse(storagedata || '{}') as UserState; update((state: UserState) => { state.access_token = access_token; state.refresh_token = userdata.refresh_token; state.isLoggedIn = true; state.refreshInterval = setInterval(() => { this.refreshAuth(); }, 2 * 60000); OpenAPI.TOKEN = userdata.access_token; return state; }); await this.refreshAuth(); }, async logout() { update((state: UserState) => { state.isLoggedIn = false; state.access_token = ''; state.refresh_token = ''; state.refreshInterval = undefined; localStorage.clear(); return state; }); } }; return { subscribe, set, update, state, ...methods }; }; export default userStore();