60 lines
1.8 KiB
TypeScript
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;
|