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