import axios, { AxiosInstance, AxiosError } from 'axios'; import { boot } from 'quasar/wrappers'; import config from '../config'; import { Store } from 'vuex'; import { StateInterface } from 'src/store'; declare module 'vue/types/vue' { interface Vue { $axios: AxiosInstance; } } export default boot>(({ Vue, store }) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access Vue.prototype.$axios = axios; axios.defaults.baseURL = config.baseURL; /*** * Intercept requests and insert Token if available */ axios.interceptors.request.use(config => { const session = store.state.session.currentSession; if (session?.token) { config.headers = { Authorization: 'Bearer ' + session.token }; } return config; }); /*** * Intercept responses, filter 401 and logout */ axios.interceptors.response.use( response => response, error => { if (error && 'response' in error) { const e = error; if (e.response && e.response.status == 401) { return store.dispatch('session/clearup'); } } return Promise.reject(error); } ); }); export { axios };