PluginProbe
Extendify / 0.4.0
Extendify v0.4.0
3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 0.7.0 All 126 releases
extendify / src / api / axios.js

axios.js in Extendify 0.4.0, at src/api/axios.js

73 lines 2.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import axios from 'axios'
2 import { useUserStore } from '../state/User'
3
4 const Axios = axios.create({
5 baseURL: window.extendifyData.root,
6 headers: {
7 'X-WP-Nonce': window.extendifyData.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 const userState = useUserStore.getState()
30 const remainingImports = userState.apiKey
31 ? 'unlimited'
32 : userState.remainingImports()
33 if (request.data) {
34 request.data.remaining_imports = remainingImports
35 request.data.entry_point = useUserStore.getState().entryPoint
36 request.data.total_imports = useUserStore.getState().imports
37 }
38 return request
39 }
40
41 function checkDevMode(request) {
42 request.headers['X-Extendify-Dev-Mode'] =
43 window.location.search.indexOf('DEVMODE') > -1
44 request.headers['X-Extendify-Local-Mode'] =
45 window.location.search.indexOf('LOCALMODE') > -1
46 return request
47 }
48
49 function checkForSoftError(response) {
50 if (Object.prototype.hasOwnProperty.call(response, 'soft_error')) {
51 window.dispatchEvent(
52 new CustomEvent('extendify::softerror-encountered', {
53 detail: response.soft_error,
54 bubbles: true,
55 }),
56 )
57 }
58 return response
59 }
60
61 Axios.interceptors.response.use(
62 (response) => checkForSoftError(findResponse(response)),
63 (error) => handleErrors(error),
64 )
65
66 // TODO: setup a pipe function instead of this nested pattern
67 Axios.interceptors.request.use(
68 (request) => checkDevMode(addDefaults(request)),
69 (error) => error,
70 )
71
72 export { Axios }
73