/** * User-related utility functions */ const UNIQUE_ID_KEY = 'user_unique_id'; const USER_ID_KEY = 'user_id'; /** * Get or create a unique browser identifier */ export function getOrCreateUniqueId(): string { let uniqueId = localStorage.getItem(UNIQUE_ID_KEY); if (!uniqueId) { // Generate a UUID v4 uniqueId = crypto.randomUUID(); localStorage.setItem(UNIQUE_ID_KEY, uniqueId); } return uniqueId; } /** * Get user ID from localStorage */ export function getUserId(): string | null { return localStorage.getItem(USER_ID_KEY); } /** * Set user ID in localStorage */ export function setUserId(userId: string): void { localStorage.setItem(USER_ID_KEY, userId); } /** * Set user ID and notify components of authentication change * Use this when logging in or registering to ensure immediate UI updates */ export function setUserIdAndNotify(userId: string): void { setUserId(userId); // Dispatch custom event to immediately update all components using useAuth hook window.dispatchEvent(new CustomEvent('authChange')); } /** * Logout user by clearing data and notifying components * Use this when logging out to ensure immediate UI updates */ export function logoutAndNotify(): void { clearUserData(); // Dispatch custom event to immediately update all components using useAuth hook window.dispatchEvent(new CustomEvent('authChange')); } /** * Clear user data from localStorage */ export function clearUserData(): void { localStorage.removeItem(USER_ID_KEY); localStorage.removeItem(UNIQUE_ID_KEY); } /** * Check if user is registered (has user_id) */ export function isUserRegistered(): boolean { return getUserId() !== null; }