From 7d81db739c2ca4b8630aae517ba510c5c943ccff Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 23 Apr 2025 15:13:17 -0500 Subject: [PATCH] Add AbortSignal's to things --- CONTEXT.md | 5 +++-- src/hooks/useAuthor.ts | 5 +++-- src/hooks/useLoggedInAccounts.ts | 18 ++++++------------ src/hooks/useNostrPublish.ts | 2 +- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/CONTEXT.md b/CONTEXT.md index 03acefb..3ad6344 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -106,8 +106,9 @@ function usePosts() { return useQuery({ queryKey: ['posts'], - queryFn: async () => { - const events = await nostr.query([{ kinds: [1], limit: 20 }]); + queryFn: async (c) => { + const signal = AbortSignal.any([c.signal, AbortSignal.timeout(1500)]); + const events = await nostr.query([{ kinds: [1], limit: 20 }], { signal }); return events; // these events could be transformed into another format }, }); diff --git a/src/hooks/useAuthor.ts b/src/hooks/useAuthor.ts index 1d85e7a..7bd9b98 100644 --- a/src/hooks/useAuthor.ts +++ b/src/hooks/useAuthor.ts @@ -14,11 +14,11 @@ export function useAuthor(pubkey: string | undefined) { const [event] = await nostr.query( [{ kinds: [0], authors: [pubkey!], limit: 1 }], - { signal: AbortSignal.any([signal, AbortSignal.timeout(500)]) }, + { signal: AbortSignal.any([signal, AbortSignal.timeout(1500)]) }, ); if (!event) { - return {}; + throw new Error('No event found'); } try { @@ -28,5 +28,6 @@ export function useAuthor(pubkey: string | undefined) { return { event }; } }, + retry: 3, }); } diff --git a/src/hooks/useLoggedInAccounts.ts b/src/hooks/useLoggedInAccounts.ts index f3f9e8f..bffdbab 100644 --- a/src/hooks/useLoggedInAccounts.ts +++ b/src/hooks/useLoggedInAccounts.ts @@ -17,17 +17,10 @@ export function useLoggedInAccounts() { const { data: authors = [] } = useQuery({ queryKey: ['logins', logins.map((l) => l.id).join(';')], queryFn: async ({ signal }) => { - let events: NostrEvent[] = []; - - try { - events = await nostr.query( - [{ kinds: [0], authors: logins.map((l) => l.pubkey) }], - { signal: AbortSignal.any([signal, AbortSignal.timeout(500)]) }, - ); - } catch (error) { - console.error('Error fetching accounts:', error); - return []; - } + const events = await nostr.query( + [{ kinds: [0], authors: logins.map((l) => l.pubkey) }], + { signal: AbortSignal.any([signal, AbortSignal.timeout(1500)]) }, + ); return logins.map(({ id, pubkey }): Account => { const event = events.find((e) => e.pubkey === pubkey); @@ -38,7 +31,8 @@ export function useLoggedInAccounts() { return { id, pubkey, metadata: {}, event }; } }); - } + }, + retry: 3, }); // Current user is the first login diff --git a/src/hooks/useNostrPublish.ts b/src/hooks/useNostrPublish.ts index d36ada4..204b6bc 100644 --- a/src/hooks/useNostrPublish.ts +++ b/src/hooks/useNostrPublish.ts @@ -23,7 +23,7 @@ export function useNostrPublish() { tags: t.tags ?? [], created_at: t.created_at ?? Math.floor(Date.now() / 1000), }); - nostr.event(event); + await nostr.event(event, { signal: AbortSignal.timeout(5000) }); } else { throw new Error("User is not logged in"); }