import { useMainStore, api } from '@flaschengeist/api'; import { LocalStorage, Notify } from 'quasar'; import { AxiosError } from 'axios'; import { boot } from 'quasar/wrappers'; import config from 'src/config'; export default boot(({ router }) => { api.defaults.baseURL = LocalStorage.getItem('baseURL') || config.baseURL; /*** * Intercept requests and insert Token if available */ api.interceptors.request.use((config) => { const store = useMainStore(); if (store.session?.token) { config.headers = { Authorization: 'Bearer ' + store.session.token }; } return config; }); /*** * Intercept responses * - filter 401 --> handleLoggedOut * - filter timeout or 502-504 --> backendOffline */ api.interceptors.response.use( (response) => response, async (error) => { const store = useMainStore(); if (error) { const e = error; const current = router.currentRoute.value; if ( e.code === 'ECONNABORTED' || (e.response && e.response.status >= 502 && e.response.status <= 504) ) { let next = current.path; if ((current.name == 'login' || current.name == 'offline') && current.query.redirect) next = current.query.redirect; await router.push({ name: 'offline', query: { redirect: next }, }); } else if (e.response && e.response.status == 401) { void store.handleLoggedOut(); if (current.name !== 'login') { await router.push({ name: 'login', params: { logout: 'logout' }, query: { redirect: current.path }, }); } } } throw error; } ); }); export { api }; export const setBaseURL = (url: string) => { LocalStorage.set('baseURL', url); api.defaults.baseURL = url; Notify.create({ message: 'Serveraddresse gespeichert', position: 'bottom', caption: `${url}`, color: 'positive', }); setTimeout(() => { window.location.reload(); }, 5000); };