fix: add timeout in getting user's relay and also pass ndk pool's relays in relayset

This commit is contained in:
daniyal 2024-10-24 21:07:18 +05:00
parent 9aa57c1adf
commit d96e5088b8

View File

@ -1,11 +1,14 @@
import {
getRelayListForUser,
NDKFilter,
NDKKind,
NDKRelaySet,
NDKSubscription,
NDKSubscriptionCacheUsage
} from '@nostr-dev-kit/ndk'
import { useEffect, useState } from 'react'
import { CommentEvent, ModDetails } from 'types'
import { CommentEvent, ModDetails, UserRelaysType } from 'types'
import { log, LogType, timeout } from 'utils'
import { useNDKContext } from './useNDKContext'
export const useComments = (mod: ModDetails) => {
@ -16,20 +19,51 @@ export const useComments = (mod: ModDetails) => {
let subscription: NDKSubscription // Define the subscription variable here for cleanup
const setupSubscription = async () => {
// Find the mod author's relays.
const authorReadRelays = await Promise.race([
getRelayListForUser(mod.author, ndk),
timeout(10 * 1000) // add a 10 sec timeout
])
.then((ndkRelayList) => {
if (ndkRelayList) return ndkRelayList[UserRelaysType.Read]
return [] // Return an empty array if ndkRelayList is undefined
})
.catch((err) => {
log(
true,
LogType.Error,
`An error occurred in fetching user's (${mod.author}) ${UserRelaysType.Read}`,
err
)
return [] as string[]
})
const filter: NDKFilter = {
kinds: [NDKKind.Text],
'#a': [mod.aTag],
'#p': [mod.author]
'#a': [mod.aTag]
}
subscription = ndk.subscribe(filter, {
closeOnEose: false,
cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST
const relayUrls = new Set<string>()
ndk.pool.urls().forEach((relayUrl) => {
relayUrls.add(relayUrl)
})
console.log('ndk.pool.urls() :>> ', ndk.pool.urls())
authorReadRelays.forEach((relayUrl) => relayUrls.add(relayUrl))
subscription = ndk.subscribe(
filter,
{
closeOnEose: false,
cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST
},
NDKRelaySet.fromRelayUrls(Array.from(relayUrls), ndk)
)
subscription.on('event', (ndkEvent) => {
console.log('ndkEvent :>> ', ndkEvent)
setCommentEvents((prev) => {
if (prev.find((e) => e.id === ndkEvent.id)) {
return [...prev]