From efbe82919ce2626eaa3d76009fac92e8a1b3b3fd Mon Sep 17 00:00:00 2001 From: Jared Pereira Date: Sat, 20 Dec 2025 06:20:19 +0400 Subject: [PATCH] cache profile data --- app/(home-pages)/p/[didOrHandle]/layout.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/(home-pages)/p/[didOrHandle]/layout.tsx b/app/(home-pages)/p/[didOrHandle]/layout.tsx index 3921d3d1..4108fe28 100644 --- a/app/(home-pages)/p/[didOrHandle]/layout.tsx +++ b/app/(home-pages)/p/[didOrHandle]/layout.tsx @@ -9,6 +9,15 @@ import { ProfileLayout } from "./ProfileLayout"; import { Agent } from "@atproto/api"; import { get_profile_data } from "app/api/rpc/[command]/get_profile_data"; import { Metadata } from "next"; +import { cache } from "react"; + +// Cache the profile data call to prevent concurrent OAuth restores +const getCachedProfileData = cache(async (did: string) => { + return get_profile_data.handler( + { didOrHandle: did }, + { supabase: supabaseServerClient }, + ); +}); export async function generateMetadata(props: { params: Promise<{ didOrHandle: string }>; @@ -23,10 +32,7 @@ export async function generateMetadata(props: { did = resolved; } - let profileData = await get_profile_data.handler( - { didOrHandle: did }, - { supabase: supabaseServerClient }, - ); + let profileData = await getCachedProfileData(did); let { profile } = profileData.result; if (!profile) return { title: "Profile - Leaflet" }; @@ -66,10 +72,7 @@ export default async function ProfilePageLayout(props: { } did = resolved; } - let profileData = await get_profile_data.handler( - { didOrHandle: did }, - { supabase: supabaseServerClient }, - ); + let profileData = await getCachedProfileData(did); let { publications, profile } = profileData.result; if (!profile) return null; -- 2.51.2