Files
BackupX/web/src/services/http.ts
2026-03-17 13:29:09 +08:00

49 lines
955 B
TypeScript

import axios from 'axios'
export interface ApiEnvelope<T> {
code: string | number
message: string
data: T
}
let accessToken = ''
let unauthorizedHandler: (() => void) | null = null
export const http = axios.create({
baseURL: '/api',
timeout: 10000,
})
export function setAccessToken(token: string) {
accessToken = token
}
export function getAccessToken() {
return accessToken
}
export function setUnauthorizedHandler(handler: (() => void) | null) {
unauthorizedHandler = handler
}
export function unwrapApiEnvelope<T>(response: ApiEnvelope<T>) {
return response.data
}
http.interceptors.request.use((config) => {
if (accessToken) {
config.headers.Authorization = `Bearer ${accessToken}`
}
return config
})
http.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401 && unauthorizedHandler) {
unauthorizedHandler()
}
return Promise.reject(error)
},
)