diff --git a/src/hooks/useExternalUrlLoader.ts b/src/hooks/useExternalUrlLoader.ts index a123cb23..bef85150 100644 --- a/src/hooks/useExternalUrlLoader.ts +++ b/src/hooks/useExternalUrlLoader.ts @@ -11,7 +11,7 @@ interface UseExternalUrlLoaderProps { setReaderContent: (content: ReadableContent | undefined) => void setReaderLoading: (loading: boolean) => void setIsCollapsed: (collapsed: boolean) => void - setHighlights: (highlights: Highlight[]) => void + setHighlights: (highlights: Highlight[] | ((prev: Highlight[]) => Highlight[])) => void setHighlightsLoading: (loading: boolean) => void setCurrentArticleCoordinate: (coord: string | undefined) => void setCurrentArticleEventId: (id: string | undefined) => void diff --git a/src/services/articleService.ts b/src/services/articleService.ts index 16ce4280..a1059f08 100644 --- a/src/services/articleService.ts +++ b/src/services/articleService.ts @@ -1,4 +1,4 @@ -import { RelayPool, completeOnEose, onlyEvents } from 'applesauce-relay' +import { RelayPool, onlyEvents } from 'applesauce-relay' import { lastValueFrom, take, takeUntil, timer, toArray } from 'rxjs' import { nip19 } from 'nostr-tools' import { AddressPointer } from 'nostr-tools/nip19' @@ -103,7 +103,7 @@ export async function fetchArticleByNaddr( ? pointer.relays : RELAYS const orderedRelays = prioritizeLocalRelays(baseRelays) - const { local: localRelays, remote: remoteRelays } = partitionRelays(orderedRelays) + const { local: localRelays } = partitionRelays(orderedRelays) // Fetch the article event const filter = { diff --git a/src/services/articleTitleResolver.ts b/src/services/articleTitleResolver.ts index acc7ba76..0c922d1a 100644 --- a/src/services/articleTitleResolver.ts +++ b/src/services/articleTitleResolver.ts @@ -1,4 +1,4 @@ -import { RelayPool, completeOnEose, onlyEvents } from 'applesauce-relay' +import { RelayPool, onlyEvents } from 'applesauce-relay' import { lastValueFrom, take, takeUntil, timer, toArray } from 'rxjs' import { nip19 } from 'nostr-tools' import { AddressPointer } from 'nostr-tools/nip19' @@ -40,7 +40,7 @@ export async function fetchArticleTitle( } // Try to get the first event quickly from local relays - let events = [] as any[] + let events: { created_at: number }[] = [] if (localRelays.length > 0) { try { events = await lastValueFrom( @@ -54,11 +54,12 @@ export async function fetchArticleTitle( } // Fallback to all relays if nothing from local quickly if (events.length === 0) { - events = await lastValueFrom( + const fallbackEvents = await lastValueFrom( relayPool .req(orderedRelays, filter) .pipe(onlyEvents(), take(1), takeUntil(timer(5000)), toArray()) ) + events = fallbackEvents as { created_at: number }[] } if (events.length === 0) { @@ -67,7 +68,7 @@ export async function fetchArticleTitle( // Sort by created_at and take the most recent events.sort((a, b) => b.created_at - a.created_at) - const article = events[0] + const article = events[0] as unknown as Parameters[0] return getArticleTitle(article) || null } catch (err) { diff --git a/src/services/contactService.ts b/src/services/contactService.ts index 0304c5e7..9581b5a6 100644 --- a/src/services/contactService.ts +++ b/src/services/contactService.ts @@ -20,19 +20,20 @@ export const fetchContacts = async ( // Local-first quick attempt const localRelays = relayUrls.filter(url => url.includes('localhost') || url.includes('127.0.0.1')) - let events = [] as any[] + let events: Array<{ created_at: number; tags: string[][] }> = [] if (localRelays.length > 0) { try { - events = await lastValueFrom( + const localEvents = await lastValueFrom( relayPool .req(localRelays, { kinds: [3], authors: [pubkey] }) .pipe(completeOnEose(), takeUntil(timer(1200)), toArray()) ) + events = localEvents as Array<{ created_at: number; tags: string[][] }> } catch { events = [] } } - let followed = new Set() + const followed = new Set() if (events.length > 0) { // Get the most recent contact list const sortedEvents = events.sort((a, b) => b.created_at - a.created_at) @@ -55,8 +56,9 @@ export const fetchContacts = async ( .pipe(completeOnEose(), takeUntil(timer(6000)), toArray()) ) if (remoteEvents.length > 0) { - const sortedEvents = remoteEvents.sort((a, b) => b.created_at - a.created_at) - const contactList = sortedEvents[0] + const sortedRemote = (remoteEvents as Array<{ created_at: number; tags: string[][] }>). + sort((a, b) => b.created_at - a.created_at) + const contactList = sortedRemote[0] for (const tag of contactList.tags) { if (tag[0] === 'p' && tag[1]) { followed.add(tag[1])