fix: fetch profile from current relays if user has no relay list
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { BIG_RELAY_URLS } from '@/constants'
|
||||
import { TRelayInfo } from '@/types'
|
||||
|
||||
export function checkAlgoRelay(relayInfo: TRelayInfo | undefined) {
|
||||
@@ -7,3 +8,7 @@ export function checkAlgoRelay(relayInfo: TRelayInfo | undefined) {
|
||||
export function checkSearchRelay(relayInfo: TRelayInfo | undefined) {
|
||||
return relayInfo?.supported_nips?.includes(50)
|
||||
}
|
||||
|
||||
export function filterOutBigRelays(relayUrls: string[]) {
|
||||
return relayUrls.filter((url) => !BIG_RELAY_URLS.includes(url))
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { createContext, useCallback, useContext, useMemo, useState } from 'react'
|
||||
import client from '@/services/client.service'
|
||||
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'
|
||||
|
||||
type TCurrentRelaysContext = {
|
||||
relayUrls: string[]
|
||||
@@ -20,6 +21,10 @@ export function CurrentRelaysProvider({ children }: { children: React.ReactNode
|
||||
const [relayRefCount, setRelayRefCount] = useState<Record<string, number>>({})
|
||||
const relayUrls = useMemo(() => Object.keys(relayRefCount), [relayRefCount])
|
||||
|
||||
useEffect(() => {
|
||||
client.currentRelays = relayUrls
|
||||
}, [relayUrls])
|
||||
|
||||
const addRelayUrls = useCallback((urls: string[]) => {
|
||||
setRelayRefCount((prev) => {
|
||||
const newCounts = { ...prev }
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
} from '@/lib/event'
|
||||
import { getProfileFromEvent, getRelayListFromEvent } from '@/lib/event-metadata'
|
||||
import { formatPubkey, isValidPubkey, pubkeyToNpub, userIdToPubkey } from '@/lib/pubkey'
|
||||
import { filterOutBigRelays } from '@/lib/relay'
|
||||
import { getPubkeysFromPTags, getServersFromServerTags, tagNameEquals } from '@/lib/tag'
|
||||
import { isLocalNetworkUrl, isWebsocketUrl, normalizeUrl } from '@/lib/url'
|
||||
import { isSafari } from '@/lib/utils'
|
||||
@@ -38,6 +39,7 @@ class ClientService extends EventTarget {
|
||||
|
||||
signer?: ISigner
|
||||
pubkey?: string
|
||||
currentRelays: string[] = []
|
||||
private pool: SimplePool
|
||||
|
||||
private timelines: Record<
|
||||
@@ -817,10 +819,7 @@ class ClientService extends EventTarget {
|
||||
return event
|
||||
}
|
||||
|
||||
return this.fetchEventFromRelays(
|
||||
relayUrls.filter((url) => !BIG_RELAY_URLS.includes(url)),
|
||||
{ ids: [id], limit: 1 }
|
||||
)
|
||||
return this.fetchEventFromRelays(filterOutBigRelays(relayUrls), { ids: [id], limit: 1 })
|
||||
}
|
||||
|
||||
private async _fetchEvent(id: string): Promise<NEvent | undefined> {
|
||||
@@ -1044,13 +1043,15 @@ class ClientService extends EventTarget {
|
||||
return profileFromBigRelays
|
||||
}
|
||||
|
||||
// If the user has a relay list, try those relays first
|
||||
if (!relays.length) {
|
||||
const relayList = await this.fetchRelayList(pubkey)
|
||||
relays = relayList.write.filter((url) => !BIG_RELAY_URLS.includes(url)).slice(0, 5)
|
||||
relays = filterOutBigRelays(relayList.write).slice(0, 5)
|
||||
}
|
||||
|
||||
if (!relays.length) {
|
||||
return
|
||||
}
|
||||
// If the user has no relay list, try current relays
|
||||
if (!relays.length) {
|
||||
relays = filterOutBigRelays(this.currentRelays)
|
||||
}
|
||||
|
||||
const profileEvent = await this.fetchEventFromRelays(relays, {
|
||||
|
||||
Reference in New Issue
Block a user