import Cookies from 'js-cookie'; import axios from "axios"; import apiCall from '../system/apiCall'; import getApi from '../system/getAPI'; import { decrypt } from '../system/decrypt'; export const checkSession = async ({ status, user, }: { status: { set: React.Dispatch>; value: "authenticated" | "unauthenticated" | "loading"; }, user: { set: any; value: any; }, }) => { const storedSession = Cookies.get('ultima-auth-session'); const savedUser = localStorage.getItem('ultima-auth-jwt-session'); if (savedUser && storedSession) { try { const parsedSession = JSON.parse(storedSession); const decodedUser = await decrypt(parsedSession.userId, savedUser); user?.set(decodedUser); status.set('authenticated'); } catch (error) { console.error("Error using saved session:", error); status.set('unauthenticated'); } } if (storedSession) { const parsedSession = JSON.parse(storedSession); let retries = 2; while (retries >= 0) { try { // const serverToken = await getServerToken('ultima'); const response = (await apiCall.get( `${getApi('ultima')}/auth/session?electron=true`, { headers: { 'session': storedSession, // 'Authorization': `Bearer ${serverToken}` } } )).data; if (response.data.status === 'error') { // await signOut(); } else if (response.status === 'success') { try { console.log("user", response.data); console.log("parsedSession.userId", parsedSession.userId); const decryptedUser: any = await decrypt(parsedSession.userId, response.data); localStorage.setItem('ultima-auth-jwt-session', response.data); console.log("decryptedUser", decryptedUser); user?.set({ ...decryptedUser }); status.set('authenticated'); return; } catch (error) { if (error.toString()?.includes('Keys not found')) { localStorage.removeItem('ultima-auth-jwt-session'); Cookies.remove('ultima-auth-session'); } return; } } else { // await signOut(); } } catch (error) { console.error("Error checking session:", error); retries--; if (retries >= 0) { await new Promise(resolve => setTimeout(resolve, 1500)); } else { // await signOut(); return; } } } } else { status.set('unauthenticated'); } };