PluginProbe
Extendify / 0.10.1
Extendify v0.10.1
3.2.1 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 All 127 releases
extendify / src / Library / api / axios.js

axios.js in Extendify 0.10.1, at src/Library/api/axios.js

82 lines 2.3 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 '@library/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-Library': true,
10 'X-Extendify': true,
11 },
12 })
13
14 function findResponse(response) {
15 return Object.prototype.hasOwnProperty.call(response, 'data')
16 ? response.data
17 : response
18 }
19
20 function handleErrors(error) {
21 if (!error.response) {
22 return
23 }
24 console.error(error.response)
25 // TODO: add a global error message system
26 return Promise.reject(findResponse(error.response))
27 }
28
29 function addDefaults(request) {
30 const userState = useUserStore.getState()
31 const remainingImports = userState.apiKey
32 ? 'unlimited'
33 : userState.remainingImports()
34 if (request.data) {
35 request.data.remaining_imports = remainingImports
36 request.data.entry_point = userState.entryPoint
37 request.data.total_imports = userState.imports
38 }
39 return request
40 }
41
42 function checkDevMode(request) {
43 request.headers['X-Extendify-Dev-Mode'] =
44 window.location.search.indexOf('DEVMODE') > -1
45 request.headers['X-Extendify-Local-Mode'] =
46 window.location.search.indexOf('LOCALMODE') > -1
47 return request
48 }
49
50 function checkForSoftError(response) {
51 if (Object.prototype.hasOwnProperty.call(response, 'soft_error')) {
52 window.dispatchEvent(
53 new CustomEvent('extendify::softerror-encountered', {
54 detail: response.soft_error,
55 bubbles: true,
56 }),
57 )
58 }
59 return response
60 }
61
62 Axios.interceptors.response.use(
63 (response) => checkForSoftError(findResponse(response)),
64 (error) => handleErrors(error),
65 )
66
67 Axios.interceptors.request.use(
68 (request) => {
69 // Thiis is here to limit network requests when encountering aggressive rate limiting
70 const q = new URLSearchParams(window.location.search)
71 if (['onboarding'].includes(q.get('extendify'))) {
72 throw new axios.Cancel(
73 'Library is not available while running Launch',
74 )
75 }
76 return checkDevMode(addDefaults(request))
77 },
78 (error) => error,
79 )
80
81 export { Axios }
82