import { AxiosInstance } from 'axios'
import { getNodeEnv, isElectron } from '@/utils/index'
const isDevelopment = getNodeEnv() === 'development'
export default function (http: AxiosInstance) {
const watchPort = (): Promise<string> => {
return new Promise(resolve => {
const cb = () => {
if (http.defaults.baseURL?.includes('http://localhost:')) {
resolve(http.defaults.baseURL)
} else {
requestAnimationFrame(cb)
}
}
cb()
})
}
http.interceptors.request.use(config => {
config.params.timestampAxios = Date.now()
if (!isDevelopment && isElectron) {
if (config.url) {
config.url = config.url.replace(/^\/api/, '')
}
if (!config.baseURL?.includes('http://localhost:')) {
return watchPort().then(url => {
config.baseURL = url
return config
})
}
}
return config
})
http.interceptors.response.use(response => {
if (response.status === 200) {
if (response.data.code) {
if (response.data.code !== 200) {
throw new Error(`HttpErrorCode:${response.data.code}`)
} else {
delete response.data.code
}
}
return response.data
}
return response
})
}