Add timeout to fetchUserProfile to prevent hanging

cgen-d02214fd544b43cda870cdd7690daff6
This commit is contained in:
Builder.io 2025-11-05 03:11:55 +00:00
parent 6b0f53060a
commit 620cbee93d

View file

@ -298,18 +298,35 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({
userId: string, userId: string,
): Promise<AethexUserProfile | null> => { ): Promise<AethexUserProfile | null> => {
try { try {
const userProfile = await aethexUserService.getCurrentUser(); // Add 5-second timeout to prevent hanging
const profilePromise = aethexUserService.getCurrentUser();
const timeoutPromise = new Promise<never>((_, reject) =>
setTimeout(() => reject(new Error("Profile fetch timeout")), 5000)
);
const userProfile = await Promise.race([profilePromise, timeoutPromise]);
setProfile(userProfile); setProfile(userProfile);
try { try {
let r = await aethexRoleService.getUserRoles(userId); const rolesPromise = aethexRoleService.getUserRoles(userId);
const rolesTimeoutPromise = new Promise<never>((_, 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 // Auto-seed owner roles if logging in as site owner
const normalizedEmail = userProfile?.email?.toLowerCase(); const normalizedEmail = userProfile?.email?.toLowerCase();
if (normalizedEmail === "mrpiglr@gmail.com" && !r.includes("owner")) { if (normalizedEmail === "mrpiglr@gmail.com" && !r.includes("owner")) {
const seeded = Array.from( const seeded = Array.from(
new Set(["owner", "admin", "founder", ...r]), new Set(["owner", "admin", "founder", ...r]),
); );
await aethexRoleService.setUserRoles(userId, seeded); try {
r = seeded; await aethexRoleService.setUserRoles(userId, seeded);
r = seeded;
} catch {
// Failed to set roles, continue with current roles
}
} }
if ( if (
normalizedEmail && normalizedEmail &&
@ -317,11 +334,16 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({
!r.includes("staff") !r.includes("staff")
) { ) {
const seeded = Array.from(new Set(["staff", ...r])); const seeded = Array.from(new Set(["staff", ...r]));
await aethexRoleService.setUserRoles(userId, seeded); try {
r = seeded; await aethexRoleService.setUserRoles(userId, seeded);
r = seeded;
} catch {
// Failed to set roles, continue with current roles
}
} }
setRoles(r); setRoles(r);
} catch { } catch (error) {
console.warn("Error fetching roles:", error);
setRoles([]); setRoles([]);
} }
setLoading(false); setLoading(false);