frontend/src/store.js
2021-02-18 17:03:05 +01:00

69 lines
1.4 KiB
JavaScript

import { writable } from 'svelte/store';
import { OpenAPI, AuthService } from '@odit/lfk-client-js';
import localForage from 'localforage';
export let users = writable([]);
export let tracks = writable([]);
const store = () => {
const state = {
auth: undefined,
access_token: undefined,
jwtinfo: undefined,
isLoggedIn: false,
refreshInterval: undefined
};
const { subscribe, set, update } = writable(state);
const methods = {
init() {
update((state) => {
state.isLoggedIn = false;
return state;
});
},
refreshAuth() {
AuthService.authControllerRefresh({ token: state.auth.refresh_token }).then((auth) => {
OpenAPI.TOKEN = auth.access_token;
const jwtinfo = JSON.parse(atob(auth.access_token.split('.')[1]));
state.jwtinfo = jwtinfo;
localForage.setItem('logindata', auth);
});
},
login(auth, jwtinfo) {
update((state) => {
state.auth = auth;
state.access_token = auth.access_token;
state.jwtinfo = jwtinfo;
state.isLoggedIn = true;
//
state.refreshInterval = setInterval(() => {
this.refreshAuth();
// 2min
}, 2 * 60000);
//
return state;
});
},
logout() {
update((state) => {
state.isLoggedIn = false;
//
clearInterval(state.refreshInterval);
state.refreshInterval = undefined;
//
return state;
});
}
};
return {
subscribe,
set,
update,
state,
...methods
};
};
export default store();