mediahub-fe/config/axiosInterceptor.ts

60 lines
1.8 KiB
TypeScript

"use client";
import axios from "axios";
import Cookies from "js-cookie";
import qs from "qs";
const baseURL = "https://netidhub.com/api/";
const tokenAuth = Cookies.get("access_token")
? Cookies.get("access_token")
: null;
const expired = Cookies.get("time_refresh")
? Cookies.get("time_refresh")
: null;
const axiosInterceptor = axios.create({
baseURL,
headers: {
Authorization: `Bearer ${tokenAuth}`,
},
});
axiosInterceptor.interceptors.request.use(async (req) => {
const time = new Date();
const expiredValue = Cookies.get("time_refresh"); // Assuming 'time_refresh' contains `expired`
if (expiredValue) {
const expired = new Date(expiredValue); // Ensure valid Date object
if (time.getTime() >= expired.getTime()) {
const url = `${baseURL}/signin`;
const data = {
grant_type: "refresh_token",
client_id: "mediahub-app",
refresh_token: Cookies.get("refresh_token") || "", // Fallback to empty string if undefined
};
const response = await axios
.post(url, qs.stringify(data))
.catch((error) => error.response);
if (response?.status === 401) {
Object.keys(Cookies.get() || {}).forEach((cookieName) => {
Cookies.remove(cookieName);
});
window.location.href = "/";
} else {
const { access_token, refresh_token } = response?.data || {};
const dateTime = new Date();
const newTime = dateTime.getTime() + 10 * 60 * 1000;
Cookies.set("access_token", access_token, { expires: 1 });
Cookies.set("refresh_token", refresh_token, { expires: 1 });
Cookies.set("time_refresh", new Date(newTime).toISOString(), {
expires: 1,
});
}
}
}
return req;
});
export default axiosInterceptor;