All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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 };
 |