'use client'; import { getNewAccessTokenUsingRefreshToken, getUserSession } from '@services/auth/auth'; import React, { useContext, createContext, useEffect } from 'react' export const SessionContext = createContext({}) as any; type Session = { access_token: string; user: any; roles: any; isLoading: boolean; isAuthenticated: boolean; } function SessionProvider({ children }: { children: React.ReactNode }) { const [session, setSession] = React.useState({ access_token: "", user: {}, roles: {}, isLoading: true, isAuthenticated: false }); async function getNewAccessTokenUsingRefreshTokenUI() { let data = await getNewAccessTokenUsingRefreshToken(); return data.access_token; } async function checkSession() { // Get new access token using refresh token const access_token = await getNewAccessTokenUsingRefreshTokenUI(); if (access_token) { // Get user session info const user_session = await getUserSession(access_token); // Set session setSession({ access_token: access_token, user: user_session.user, roles: user_session.roles, isLoading: false, isAuthenticated: true }); } if (!access_token) { setSession({ access_token: "", user: {}, roles: {}, isLoading: false, isAuthenticated: false }); } } useEffect(() => { // Check session checkSession(); }, []) return ( {children} ) } export function useSession() { return useContext(SessionContext); } export default SessionProvider