feat: optimize relay selection for reply fetching

This commit is contained in:
codytseng
2025-10-31 23:54:10 +08:00
parent f5ea1ce69e
commit 24348d4f01

View File

@@ -6,6 +6,7 @@ import {
getReplaceableCoordinateFromEvent, getReplaceableCoordinateFromEvent,
getRootTag, getRootTag,
isMentioningMutedUsers, isMentioningMutedUsers,
isProtectedEvent,
isReplaceableEvent, isReplaceableEvent,
isReplyNoteEvent isReplyNoteEvent
} from '@/lib/event' } from '@/lib/event'
@@ -118,14 +119,13 @@ export default function ReplyNoteList({ index, event }: { index?: number; event:
const relayList = await client.fetchRelayList( const relayList = await client.fetchRelayList(
(rootInfo as { pubkey?: string }).pubkey ?? event.pubkey (rootInfo as { pubkey?: string }).pubkey ?? event.pubkey
) )
const relayUrls = relayList.read.concat(BIG_RELAY_URLS) const relayUrls = relayList.read.concat(BIG_RELAY_URLS).slice(0, 4)
const seenOn =
rootInfo.type === 'E' // If current event is protected, we can assume its replies are also protected and stored on the same relays
? client.getSeenEventRelayUrls(rootInfo.id) if (isProtectedEvent(event)) {
: rootInfo.type === 'A' const seenOn = client.getSeenEventRelayUrls(event.id)
? client.getSeenEventRelayUrls(rootInfo.eventId) relayUrls.concat(...seenOn)
: [] }
relayUrls.unshift(...seenOn)
const filters: (Omit<Filter, 'since' | 'until'> & { const filters: (Omit<Filter, 'since' | 'until'> & {
limit: number limit: number
@@ -168,7 +168,7 @@ export default function ReplyNoteList({ index, event }: { index?: number; event:
} }
const { closer, timelineKey } = await client.subscribeTimeline( const { closer, timelineKey } = await client.subscribeTimeline(
filters.map((filter) => ({ filters.map((filter) => ({
urls: relayUrls.slice(0, 5), urls: relayUrls.slice(0, 8),
filter filter
})), })),
{ {