{"version":3,"file":"userDataCache.CSdcD_Vb.mjs","names":[],"sources":["https:/framerusercontent.com/modules/ZrpjBiVwZx3IX8RMorYt/TZtvDxm5L4kZWxLWGk4G/userDataCache.js"],"sourcesContent":["function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import{supabase}from\"https://framerusercontent.com/modules/iDXl4p6JjHSCZfUwQVxG/aPEslV3ptTFgKwaoU3F5/supabaseClient.js\";// ============================================================================\n// CACHE KEYS\n// ============================================================================\nconst CACHE_KEYS={USER_DATA:\"shared_user_data_v2\",PROFILE_DATA:\"shared_profile_data_v2\",ALL_PROFILES:\"shared_all_profiles_v2\"};const CACHE_DURATION=24*60*60*1e3// 24 hours\n;// ============================================================================\n// STORAGE UTILITIES\n// ============================================================================\nfunction getFromStorage(key){try{const item=localStorage.getItem(key);if(!item)return null;return JSON.parse(item);}catch(e){console.warn(`[Cache] Failed to read ${key}:`,e);return null;}}function setInStorage(key,entry){try{localStorage.setItem(key,JSON.stringify(entry));}catch(e){console.warn(`[Cache] Failed to write ${key}:`,e);}}function removeFromStorage(key){try{localStorage.removeItem(key);}catch(e){console.warn(`[Cache] Failed to remove ${key}:`,e);}}// ============================================================================\n// CACHE MANAGER CLASS\n// ============================================================================\nclass UserDataCacheManager{// ========================================================================\n// INITIALIZATION\n// ========================================================================\nasync initialize(){if(this.isInitialized)return;console.log(\"[Cache] Initializing shared cache manager\");// Get current session\nconst{data:{session}}=await supabase.auth.getSession();if(session?.user){this.currentUserId=session.user.id;await this.loadUserData(session.user.id,session.access_token);}// Setup global realtime subscription\nthis.setupRealtimeSubscription();// Setup auth state listener\nthis.setupAuthListener();// Setup cross-tab sync\nthis.setupCrossTabSync();this.isInitialized=true;console.log(\"[Cache] Initialization complete\");}// ========================================================================\n// USER DATA (email, username, avatar, OAuth status)\n// ========================================================================\nasync getUserData(){await this.ensureInitialized();// Try cache first\nconst cached=getFromStorage(CACHE_KEYS.USER_DATA);if(cached&&await this.isCacheValid(cached)){console.log(\"[Cache] Using cached user data\");return cached.data;}// Fetch fresh data\nconst{data:{user}}=await supabase.auth.getUser();if(!user)return null;const{data:{session}}=await supabase.auth.getSession();if(!session)return null;return await this.loadUserData(user.id,session.access_token);}subscribeToUserData(callback){this.userDataSubscribers.add(callback);// Immediately call with current data\nthis.getUserData().then(data=>callback(data));return()=>{this.userDataSubscribers.delete(callback);};}async loadUserData(userId,sessionToken){try{console.log(\"[Cache] Loading fresh user data\");const{data:user}=await supabase.auth.getUser();if(!user.user)return null;const{data:profile}=await supabase.from(\"profiles\").select(\"email, username, avatar_url, role, approved, provider_type\")// ADDED: email field\n.eq(\"id\",userId).maybeSingle();// Check OAuth status\nconst oauthProviders=[\"google\",\"apple\"];const isOAuthUser=user.user.identities?.some(identity=>oauthProviders.includes(identity.provider))||false;const userData={id:userId,email:profile?.email||user.user.email||\"\",username:profile?.username||\"\",avatarUrl:profile?.avatar_url||null,isOAuthUser,role:profile?.role||\"member\",approved:profile?.approved||false,provider_type:profile?.provider_type||\"Email\"};// Cache it\nconst entry={data:userData,userId,sessionToken,timestamp:Date.now()};setInStorage(CACHE_KEYS.USER_DATA,entry);// Notify subscribers\nthis.notifyUserDataSubscribers(userData);return userData;}catch(e){console.error(\"[Cache] Error loading user data:\",e);return null;}}notifyUserDataSubscribers(data){this.userDataSubscribers.forEach(callback=>callback(data));}// ========================================================================\n// PROFILE DATA (full profile for current user)\n// ========================================================================\nasync getProfileData(){await this.ensureInitialized();// Try cache first\nconst cached=getFromStorage(CACHE_KEYS.PROFILE_DATA);if(cached&&await this.isCacheValid(cached)){console.log(\"[Cache] Using cached profile data\");return cached.data;}// Fetch fresh data\nconst{data:{user}}=await supabase.auth.getUser();if(!user)return null;const{data:{session}}=await supabase.auth.getSession();if(!session)return null;return await this.loadProfileData(user.id,session.access_token);}subscribeToProfileData(callback){this.profileDataSubscribers.add(callback);// Immediately call with current data\nthis.getProfileData().then(data=>callback(data));return()=>{this.profileDataSubscribers.delete(callback);};}async loadProfileData(userId,sessionToken){try{console.log(\"[Cache] Loading fresh profile data\");const{data:profile}=await supabase.from(\"profiles\").select(\"*\").eq(\"id\",userId).maybeSingle();if(!profile)return null;const profileData={id:profile.id,email:profile.email||\"\",username:profile.username||\"\",avatar_url:profile.avatar_url||null,role:profile.role||\"member\",approved:profile.approved||false,provider_type:profile.provider_type||\"Email\",created_at:profile.created_at||\"\",updated_at:profile.updated_at||\"\",last_sign_in_at:profile.last_sign_in_at||null};// Cache it\nconst entry={data:profileData,userId,sessionToken,timestamp:Date.now()};setInStorage(CACHE_KEYS.PROFILE_DATA,entry);// Notify subscribers\nthis.notifyProfileDataSubscribers(profileData);return profileData;}catch(e){console.error(\"[Cache] Error loading profile data:\",e);return null;}}notifyProfileDataSubscribers(data){this.profileDataSubscribers.forEach(callback=>callback(data));}// ========================================================================\n// ALL PROFILES (for ProfilePhoto search and admin lists)\n// ========================================================================\nasync getAllProfiles(){await this.ensureInitialized();// Try cache first (no session validation needed for public data)\nconst cached=getFromStorage(CACHE_KEYS.ALL_PROFILES);if(cached&&Date.now()-cached.timestamp<CACHE_DURATION){console.log(\"[Cache] Using cached all profiles\");return cached.data;}// Fetch fresh data\nreturn await this.loadAllProfiles();}subscribeToAllProfiles(callback){this.allProfilesSubscribers.add(callback);// Immediately call with current data\nthis.getAllProfiles().then(data=>callback(data));return()=>{this.allProfilesSubscribers.delete(callback);};}async loadAllProfiles(){try{console.log(\"[Cache] Loading fresh all profiles\");const{data:profiles}=await supabase.from(\"profiles\").select(\"*\").order(\"updated_at\",{ascending:false});if(!profiles)return[];const allProfiles=profiles.map(p=>({id:p.id,email:p.email||\"\",username:p.username||\"\",avatar_url:p.avatar_url||null,role:p.role||\"member\",approved:p.approved||false,provider_type:p.provider_type||\"Email\",created_at:p.created_at||\"\",updated_at:p.updated_at||\"\",last_sign_in_at:p.last_sign_in_at||null}));// Cache it (no userId/sessionToken needed for public data)\nconst entry={data:allProfiles,userId:\"public\",sessionToken:\"public\",timestamp:Date.now()};setInStorage(CACHE_KEYS.ALL_PROFILES,entry);// Notify subscribers\nthis.notifyAllProfilesSubscribers(allProfiles);return allProfiles;}catch(e){console.error(\"[Cache] Error loading all profiles:\",e);return[];}}notifyAllProfilesSubscribers(data){this.allProfilesSubscribers.forEach(callback=>callback(data));}// ========================================================================\n// REALTIME SUBSCRIPTION (ONE for entire app)\n// ========================================================================\nsetupRealtimeSubscription(){if(this.profileChannel)return;console.log(\"[Cache] Setting up global realtime subscription\");this.profileChannel=supabase.channel(\"global-profiles\").on(\"postgres_changes\",{event:\"*\",schema:\"public\",table:\"profiles\"},async payload=>{console.log(\"[Cache] Profile changed (realtime):\",payload);// If current user's profile changed, reload user data\nif(payload.new?.id===this.currentUserId){const{data:{session}}=await supabase.auth.getSession();if(session){await this.loadUserData(this.currentUserId,session.access_token);await this.loadProfileData(this.currentUserId,session.access_token);}}// Reload all profiles for lists/search\nawait this.loadAllProfiles();}).subscribe();}cleanupRealtimeSubscription(){if(this.profileChannel){console.log(\"[Cache] Cleaning up global realtime subscription\");supabase.removeChannel(this.profileChannel);this.profileChannel=null;}}// ========================================================================\n// AUTH STATE LISTENER\n// ========================================================================\nsetupAuthListener(){const{data:{subscription}}=supabase.auth.onAuthStateChange(async(event,session)=>{console.log(\"[Cache] Auth state changed:\",event);if(event===\"SIGNED_OUT\"){this.handleSignOut();}else if(event===\"SIGNED_IN\"&&session?.user){this.currentUserId=session.user.id;await this.loadUserData(session.user.id,session.access_token);await this.loadProfileData(session.user.id,session.access_token);}});this.authSubscription=subscription;}handleSignOut(){console.log(\"[Cache] Handling sign out - clearing all caches\");// Clear caches\nremoveFromStorage(CACHE_KEYS.USER_DATA);removeFromStorage(CACHE_KEYS.PROFILE_DATA);removeFromStorage(CACHE_KEYS.ALL_PROFILES);// Notify subscribers\nthis.notifyUserDataSubscribers(null);this.notifyProfileDataSubscribers(null);this.currentUserId=null;}// ========================================================================\n// CROSS-TAB SYNC\n// ========================================================================\nsetupCrossTabSync(){window.addEventListener(\"storage\",event=>{// Only respond to our cache keys\nif(!Object.values(CACHE_KEYS).includes(event.key))return;console.log(\"[Cache] Cross-tab change detected:\",event.key);// Reload from localStorage and notify subscribers\nif(event.key===CACHE_KEYS.USER_DATA){const cached=getFromStorage(CACHE_KEYS.USER_DATA);if(cached){this.notifyUserDataSubscribers(cached.data);}}else if(event.key===CACHE_KEYS.PROFILE_DATA){const cached=getFromStorage(CACHE_KEYS.PROFILE_DATA);if(cached){this.notifyProfileDataSubscribers(cached.data);}}else if(event.key===CACHE_KEYS.ALL_PROFILES){const cached=getFromStorage(CACHE_KEYS.ALL_PROFILES);if(cached){this.notifyAllProfilesSubscribers(cached.data);}}});}// ========================================================================\n// CACHE VALIDATION\n// ========================================================================\nasync isCacheValid(cached){// Check age\nif(Date.now()-cached.timestamp>CACHE_DURATION){console.log(\"[Cache] Cache expired\");return false;}// Check session token\nconst{data:{session}}=await supabase.auth.getSession();if(!session){console.log(\"[Cache] No session\");return false;}if(session.access_token!==cached.sessionToken){console.log(\"[Cache] Session changed\");return false;}if(session.user.id!==cached.userId){console.log(\"[Cache] User changed\");return false;}return true;}// ========================================================================\n// UTILITIES\n// ========================================================================\nasync ensureInitialized(){if(!this.isInitialized){await this.initialize();}}clearAllCaches(){console.log(\"[Cache] Manually clearing all caches\");removeFromStorage(CACHE_KEYS.USER_DATA);removeFromStorage(CACHE_KEYS.PROFILE_DATA);removeFromStorage(CACHE_KEYS.ALL_PROFILES);}cleanup(){console.log(\"[Cache] Cleaning up cache manager\");this.cleanupRealtimeSubscription();if(this.authSubscription){this.authSubscription.unsubscribe();}this.userDataSubscribers.clear();this.profileDataSubscribers.clear();this.allProfilesSubscribers.clear();}constructor(){_define_property(this,\"userDataSubscribers\",new Set);_define_property(this,\"profileDataSubscribers\",new Set);_define_property(this,\"allProfilesSubscribers\",new Set);_define_property(this,\"profileChannel\",null);_define_property(this,\"authSubscription\",null);_define_property(this,\"currentUserId\",null);_define_property(this,\"isInitialized\",false);}}// ============================================================================\n// SINGLETON EXPORT\n// ============================================================================\nexport const userDataCache=new UserDataCacheManager;// Auto-initialize on first import\nuserDataCache.initialize();// Cleanup on page unload\nif(typeof window!==\"undefined\"){window.addEventListener(\"beforeunload\",()=>{userDataCache.cleanup();});}\nexport const __FramerMetadata__ = {\"exports\":{\"userDataCache\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./userDataCache.map"],"mappings":"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"}