export const AUTH_TOKEN_KEY = "agmail_access_token"; export const AUTH_ACCOUNT_KEY = "agmail_account"; export const APP_HOME_PATH = "/app"; export const SESSION_GATED_PATHS = new Set(["/", "/login", "/signup", "/forgot-password"]); let sessionRedirecting = false; function readShared(key) { try { return localStorage.getItem(key); } catch { return null; } } function writeShared(key, value) { localStorage.setItem(key, value); sessionStorage.setItem(key, value); } function removeShared(key) { localStorage.removeItem(key); sessionStorage.removeItem(key); } function syncSharedSession() { const sharedToken = readShared(AUTH_TOKEN_KEY); if (sharedToken) { sessionStorage.setItem(AUTH_TOKEN_KEY, sharedToken); const sharedAccount = readShared(AUTH_ACCOUNT_KEY); if (sharedAccount) sessionStorage.setItem(AUTH_ACCOUNT_KEY, sharedAccount); return; } const legacyToken = sessionStorage.getItem(AUTH_TOKEN_KEY); if (!legacyToken) return; localStorage.setItem(AUTH_TOKEN_KEY, legacyToken); const legacyAccount = sessionStorage.getItem(AUTH_ACCOUNT_KEY); if (legacyAccount) localStorage.setItem(AUTH_ACCOUNT_KEY, legacyAccount); } syncSharedSession(); export function getAccessToken() { return readShared(AUTH_TOKEN_KEY) || sessionStorage.getItem(AUTH_TOKEN_KEY); } export function isLoggedIn() { return Boolean(getAccessToken()); } export function saveSession(token, account) { writeShared(AUTH_TOKEN_KEY, token); if (account) writeShared(AUTH_ACCOUNT_KEY, JSON.stringify(account)); } export function saveStoredAccount(account) { writeShared(AUTH_ACCOUNT_KEY, JSON.stringify(account)); } export function clearSession() { removeShared(AUTH_TOKEN_KEY); removeShared(AUTH_ACCOUNT_KEY); } export function onSessionChange(listener) { function handle(event) { if (event.storageArea !== localStorage) return; if (event.key !== AUTH_TOKEN_KEY && event.key !== AUTH_ACCOUNT_KEY && event.key !== null) return; listener(event); } window.addEventListener("storage", handle); return () => window.removeEventListener("storage", handle); } export function currentPath() { const path = window.location.pathname; if (!path || path === "/") return "/"; return path.replace(/\/+$/, "") || "/"; } export function enterApp(mode = "replace") { if (currentPath() === APP_HOME_PATH && !window.location.search && !window.location.hash) { return; } if (mode === "assign") { window.location.assign(APP_HOME_PATH); return; } window.history.replaceState(null, "", APP_HOME_PATH); } export function getBrandHomeHref() { return isLoggedIn() ? APP_HOME_PATH : "/"; } export function redirectSessionExpired() { if (sessionRedirecting) return; sessionRedirecting = true; clearSession(); window.location.replace("/?session=expired"); }