diff --git a/packages/backend/src/remote/resolve-user.ts b/packages/backend/src/remote/resolve-user.ts index 442bd5b7b..b1cb5ca13 100644 --- a/packages/backend/src/remote/resolve-user.ts +++ b/packages/backend/src/remote/resolve-user.ts @@ -13,6 +13,7 @@ import { IMentionedRemoteUsers } from "@/models/entities/note.js"; const logger = remoteLogger.createSubLogger("resolve-user"); const uriHostCache = new Cache("resolveUserUriHost", 60 * 60 * 24); +const mentionUriCache = new Cache("resolveMentionUserUri", 60 * 60 * 72); export async function resolveUser( username: string, @@ -188,14 +189,16 @@ export async function resolveMentionWithFallback(username: string, host: string if (cached) return cached.url ?? cached.uri; if ((host === null && objectHost === null) || host === config.domain) return fallback; - try { - const user = await resolveUser(username, host ?? objectHost, false); - const profile = await UserProfiles.findOneBy({ userId: user.id }); - return profile?.url ?? user.uri ?? fallback; - } - catch { - return fallback; - } + return mentionUriCache.fetch(fallback, async () => { + try { + const user = await resolveUser(username, host ?? objectHost, false); + const profile = await UserProfiles.findOneBy({ userId: user.id }); + return profile?.url ?? user.uri ?? fallback; + } + catch { + return fallback; + } + }); } export async function getSubjectHostFromUri(uri: string): Promise {