import axios from './axios'; // ---------------------------------------------------------------------- // const isValidToken = (accessToken: string) => { // if (!accessToken) { // return false; // } // const decoded = jwtDecode<{ exp: number }>(accessToken); // const currentTime = Date.now() / 1000; // return decoded.exp > currentTime; // }; // const handleTokenExpired = () => { // let expiredTimer; // window.clearTimeout(expiredTimer); // const currentTime = Date.now(); // const timeLeft = exp * 1000 - currentTime; // console.log(timeLeft); // expiredTimer = window.setTimeout(() => { // console.log('expired'); // // You can do what ever you want here, like show a notification // }, timeLeft); // }; // let expiredCookie = 1/24/60; 1 menit let expiredCookie = 12/24; //12 jam const setCookie = (name:any, value:any, days:any) => { let expires = ""; if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + decodeURIComponent(value || "") + expires + "; path=/; SameSite=Strict"; }; const setSession = (accessToken: string | null, rememberMe: boolean) => { if (accessToken) { const userString = getUser(); const storedUser = userString ? JSON.parse(userString) : null; if(rememberMe) { localStorage.setItem('accessToken', accessToken); } else { setCookie('accessToken', accessToken, expiredCookie); setCookie('rememberMe', 'OK', expiredCookie); } axios.defaults.headers.common.Authorization = `Bearer ${accessToken}`; axios.defaults.headers.common['Accept-Language'] = localStorage.getItem('currentLocale') ?? 'id-ID'; axios.defaults.headers.common['Accept'] = 'application/json'; axios.defaults.headers.common['Content-Type'] = 'application/json'; axios.defaults.headers.common['Organization-id'] = storedUser?.organization_id; // This function below will handle when token is expired // const { exp } = jwtDecode(accessToken); // handleTokenExpired(exp); } else { localStorage.removeItem('accessToken'); removeCookie('accessToken'); removeCookie('rememberMe'); delete axios.defaults.headers.common.Authorization; delete axios.defaults.headers.common['Accept-Language']; delete axios.defaults.headers.common['Accept']; delete axios.defaults.headers.common['Content-Type']; } }; const setUser = (user: any, rememberMe: boolean) => { if (user) { if(rememberMe) { localStorage.setItem('user', JSON.stringify(user)); } else { setCookie('user', JSON.stringify(user), expiredCookie); setCookie('rememberMe', 'OK', expiredCookie); } } else { localStorage.removeItem('user'); removeCookie('user'); removeCookie('rememberMe'); } }; const getCookie = (name:any) => { const cookies = document.cookie.split('; '); for (let i = 0; i < cookies.length; i++) { const cookiePair = cookies[i].split('='); if (cookiePair[0] === name) { return decodeURIComponent(cookiePair[1]); } } return null; }; const getSession = () => { const localToken = window.localStorage.getItem('accessToken'); const cookieToken = getCookie('accessToken'); // Prioritaskan token dari localStorage return localToken || cookieToken; }; // const getUser = () => window.localStorage.getItem('user') || window.sessionStorage.getItem('user') const getUser = () => { const localUser = window.localStorage.getItem('user'); const cookieUser = getCookie('user'); // Prioritaskan token dari localStorage return localUser || cookieUser; }; const removeCookie = (name:any) => { document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; }; export { setSession, getSession, setUser, getUser, getCookie };