axios.js (1830B)
1 import axios from 'axios' 2 import { useUserStore } from '../state/User' 3 4 const Axios = axios.create({ 5 baseURL: window.extendifySdkData.root, 6 headers: { 7 'X-WP-Nonce': window.extendifySdkData.nonce, 8 'X-Requested-With': 'XMLHttpRequest', 9 'X-Extendify': true, 10 }, 11 }) 12 13 function findResponse(response) { 14 return Object.prototype.hasOwnProperty.call(response, 'data') 15 ? response.data 16 : response 17 } 18 19 function handleErrors(error) { 20 if (!error.response) { 21 return 22 } 23 console.error(error.response) 24 // TODO: add a global error message system 25 return Promise.reject(findResponse(error.response)) 26 } 27 28 function addDefaults(request) { 29 if (request.data) { 30 request.data.remaining_imports = useUserStore.getState().remainingImports() 31 request.data.entry_point = useUserStore.getState().entryPoint 32 request.data.total_imports = useUserStore.getState().imports 33 } 34 return request 35 } 36 37 function checkDevMode(request) { 38 request.headers['X-Extendify-Dev-Mode'] = window.location.search.indexOf('DEVMODE') > -1 39 request.headers['X-Extendify-Local-Mode'] = window.location.search.indexOf('LOCALMODE') > -1 40 return request 41 } 42 43 function checkForSoftError(response) { 44 if (Object.prototype.hasOwnProperty.call(response, 'soft_error')) { 45 window.dispatchEvent(new CustomEvent('extendify-sdk::softerror-encountered', { 46 detail: response.soft_error, 47 bubbles: true, 48 })) 49 } 50 return response 51 } 52 53 Axios.interceptors.response.use((response) => checkForSoftError(findResponse(response)), 54 (error) => handleErrors(error)) 55 56 // TODO: setup a pipe function instead of this nested pattern 57 Axios.interceptors.request.use((request) => checkDevMode(addDefaults(request)), 58 (error) => error) 59 60 export { Axios }