import axios from 'axios' import isNil from 'lodash/isNil' export function setupAxios() { const instance = axios.create() instance.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest' instance.defaults.headers.common['X-CSRF-TOKEN'] = document.head.querySelector('meta[name="csrf-token"]').content instance.interceptors.response.use( response => response, error => { if (axios.isCancel(error)) { return Promise.reject(error) } const response = error.response const { status, data: { redirect }, } = response // Show the user a 500 error if (status >= 500) { Nova.$emit('error', error.response.data.message) } // Handle Session Timeouts (Unauthorized) if (status === 401) { // Use redirect if being specificed by the response if (!isNil(redirect)) { location.href = redirect return } Nova.redirectToLogin() } // Handle Forbidden if (status === 403) { Nova.visit('/403') } // Handle Token Timeouts if (status === 419) { Nova.$emit('token-expired') } return Promise.reject(error) } ) return instance }