35 lines
992 B
TypeScript
35 lines
992 B
TypeScript
import axios, { AxiosHeaders } from 'axios'
|
|
import { apiBaseURL } from '@/shared/config'
|
|
|
|
export const apiClient = axios.create({
|
|
baseURL: apiBaseURL,
|
|
})
|
|
|
|
apiClient.interceptors.request.use((config) => {
|
|
try {
|
|
config.headers = AxiosHeaders.from(config.headers ?? {})
|
|
const token = localStorage.getItem('craftshop_auth_token')
|
|
if (token) {
|
|
config.headers.set('Authorization', `Bearer ${token}`)
|
|
}
|
|
if (config.data instanceof FormData) {
|
|
config.headers.delete('Content-Type')
|
|
config.headers.delete('content-type')
|
|
}
|
|
return config
|
|
} catch (err) {
|
|
console.warn('[api-client] Failed to set auth token', err)
|
|
return config
|
|
}
|
|
})
|
|
|
|
apiClient.interceptors.response.use(undefined, (error) => {
|
|
const ct = error.response?.headers?.['content-type'] ?? ''
|
|
if (error.response?.status === 403 && ct.includes('text/html')) {
|
|
document.open()
|
|
document.write(error.response.data)
|
|
document.close()
|
|
}
|
|
return Promise.reject(error)
|
|
})
|