diff --git a/src/hooks/useComments.ts b/src/hooks/useComments.ts index 6be5932..fb57eb8 100644 --- a/src/hooks/useComments.ts +++ b/src/hooks/useComments.ts @@ -8,7 +8,7 @@ import { } from '@nostr-dev-kit/ndk' import { useEffect, useState } from 'react' import { CommentEvent, ModDetails, UserRelaysType } from 'types' -import { log, LogType } from 'utils' +import { log, LogType, timeout } from 'utils' import { useNDKContext } from './useNDKContext' export const useComments = (mod: ModDetails) => { @@ -20,7 +20,11 @@ export const useComments = (mod: ModDetails) => { const setupSubscription = async () => { // Find the mod author's relays. - const authorReadRelays = await getRelayListForUser(mod.author, ndk) + + 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 @@ -40,13 +44,21 @@ export const useComments = (mod: ModDetails) => { '#a': [mod.aTag] } + const relayUrls = new Set() + + ndk.pool.urls().forEach((relayUrl) => { + relayUrls.add(relayUrl) + }) + + authorReadRelays.forEach((relayUrl) => relayUrls.add(relayUrl)) + subscription = ndk.subscribe( filter, { closeOnEose: false, cacheUsage: NDKSubscriptionCacheUsage.CACHE_FIRST }, - NDKRelaySet.fromRelayUrls(authorReadRelays, ndk, true) + NDKRelaySet.fromRelayUrls(Array.from(relayUrls), ndk) ) subscription.on('event', (ndkEvent) => {