logos-ordinals-dashboard/common/api.ts

56 lines
1.3 KiB
TypeScript
Raw Normal View History

2024-09-26 15:40:01 +00:00
import axios, { AxiosError } from 'axios'
export const API_BASE = 'https://exit-test-567058b69f45.herokuapp.com/api'
const api = axios.create({
baseURL: API_BASE,
withCredentials: true,
})
api.interceptors.request.use(
async (config) => {
return config
},
(error) => {
Promise.reject(error)
},
)
api.interceptors.response.use(
(response) => {
return response
},
async (error: AxiosError) => {
const originalRequest = error.config
if (error.response?.status === 401) {
try {
const refreshToken = await localStorage.getItem('refreshToken')
await api
.post('/token/refresh', {
refreshToken,
})
.then(async (res) => {
api.defaults.headers.common['Authorization'] =
'Bearer ' + res.data.token?.accessToken
return await axios(originalRequest as any)
})
} catch (e) {
// localStorage.setItem('refreshToken', '');
// deleteCookie('refresh-token');
}
}
if (error.response?.status === 429) {
return Promise.reject(error)
}
return Promise.reject(error)
},
)
api.defaults.withCredentials = true
export const fetcher = (url: string) => api.get(url).then((res) => res)
export { api }