tailfin/web/app/util/api.ts
2024-01-03 10:01:15 -06:00

44 lines
1.3 KiB
TypeScript

import { useNavigate } from "@remix-run/react";
import axios from "axios";
export const client = axios.create({
baseURL: "http://localhost:8081",
headers: { "Access-Control-Allow-Origin": "*" },
});
client.interceptors.request.use(
(config) => {
const token = localStorage.getItem("token");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
async (error) => {
const originalRequest = error.config;
const navigate = useNavigate();
if (error.response.status == 401 && !originalRequest._retry) {
originalRequest._retry = true;
const refreshToken = localStorage.getItem("refresh-token");
if (refreshToken) {
try {
const { data } = await client.post("/auth/refresh", {
refresh: refreshToken,
});
localStorage.setItem("token", data.refreshToken);
client.defaults.headers.common[
"Authorization"
] = `Bearer ${data.refreshToken}`;
return client(originalRequest);
} catch (_error) {
localStorage.removeItem("token");
localStorage.removeItem("refresh-token");
console.log("Oh no!!!");
navigate("/login");
}
}
}
return Promise.reject(error);
}
);