System15 / frontend /src /api /axios.js
yamilogic's picture
Deploy SMTP Auth System to Hugging Face Space
50535d1
Raw
History Blame Contribute Delete
1.41 kB
import axios from "axios"
const api = axios.create({
baseURL: window.location.hostname === "localhost" ? "http://localhost:8000" : "",
})
api.interceptors.request.use((config) => {
const token = sessionStorage.getItem("access_token")
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
}, (error) => {
return Promise.reject(error)
})
api.interceptors.response.use(
(res) => res,
async (error) => {
const originalRequest = error.config
if (error.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true
const refresh = sessionStorage.getItem("refresh_token")
if (!refresh) {
sessionStorage.clear()
window.location.href = "/login"
return Promise.reject(error)
}
try {
const { data } = await axios.post("http://localhost:8000/auth/refresh", {
refresh_token: refresh,
})
sessionStorage.setItem("access_token", data.access_token)
sessionStorage.setItem("refresh_token", data.refresh_token)
originalRequest.headers.Authorization = `Bearer ${data.access_token}`
return api(originalRequest)
} catch (refreshError) {
sessionStorage.clear()
window.location.href = "/login"
return Promise.reject(refreshError)
}
}
return Promise.reject(error)
}
)
export default api