From 620cbee93d7be1f4e6895db1b1bb2335ec947091 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Wed, 5 Nov 2025 03:11:55 +0000 Subject: [PATCH] Add timeout to fetchUserProfile to prevent hanging cgen-d02214fd544b43cda870cdd7690daff6 --- client/contexts/AuthContext.tsx | 36 ++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/client/contexts/AuthContext.tsx b/client/contexts/AuthContext.tsx index b05f26ec..122b0093 100644 --- a/client/contexts/AuthContext.tsx +++ b/client/contexts/AuthContext.tsx @@ -298,18 +298,35 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ userId: string, ): Promise => { try { - const userProfile = await aethexUserService.getCurrentUser(); + // Add 5-second timeout to prevent hanging + const profilePromise = aethexUserService.getCurrentUser(); + const timeoutPromise = new Promise((_, reject) => + setTimeout(() => reject(new Error("Profile fetch timeout")), 5000) + ); + + const userProfile = await Promise.race([profilePromise, timeoutPromise]); setProfile(userProfile); + try { - let r = await aethexRoleService.getUserRoles(userId); + const rolesPromise = aethexRoleService.getUserRoles(userId); + const rolesTimeoutPromise = new Promise((_, reject) => + setTimeout(() => reject(new Error("Roles fetch timeout")), 5000) + ); + + let r = await Promise.race([rolesPromise, rolesTimeoutPromise]); + // Auto-seed owner roles if logging in as site owner const normalizedEmail = userProfile?.email?.toLowerCase(); if (normalizedEmail === "mrpiglr@gmail.com" && !r.includes("owner")) { const seeded = Array.from( new Set(["owner", "admin", "founder", ...r]), ); - await aethexRoleService.setUserRoles(userId, seeded); - r = seeded; + try { + await aethexRoleService.setUserRoles(userId, seeded); + r = seeded; + } catch { + // Failed to set roles, continue with current roles + } } if ( normalizedEmail && @@ -317,11 +334,16 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ !r.includes("staff") ) { const seeded = Array.from(new Set(["staff", ...r])); - await aethexRoleService.setUserRoles(userId, seeded); - r = seeded; + try { + await aethexRoleService.setUserRoles(userId, seeded); + r = seeded; + } catch { + // Failed to set roles, continue with current roles + } } setRoles(r); - } catch { + } catch (error) { + console.warn("Error fetching roles:", error); setRoles([]); } setLoading(false);