From a7806172f7ede9be345750c93e5fa72e10e9b953 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 1 Oct 2026 15:31:10 -0700 Subject: Stream ready feed posts without waiting for catch-up batches --- src/nostr.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/nostr.js') diff --git a/src/nostr.js b/src/nostr.js index f4dfa59..a3cab53 100644 --- a/src/nostr.js +++ b/src/nostr.js @@ -246,6 +246,25 @@ export async function queryOn(relays, filter, maxWait = 1500) { return evs.filter((_, i) => oks[i]); } catch { return []; } } +// A bounded query that delivers verified events before the slowest relay's +// EOSE. Completion also waits for verification and the consumer's work. +export async function queryStreamOn(relays, filter, onEvent, maxWait = 1500) { + probeRelays(relays); + const pending = []; + try { + const live = liveRelays(relays); + if (!live.length) return; + await new Promise((resolve) => { + pool.subscribeManyEose(live, filter, { + maxWait, + onevent(event) { + pending.push(verifyOneAsync(event).then((ok) => ok && onEvent(event)).catch(() => {})); + }, + onclose: resolve, + }); + }); + } catch {} finally { await Promise.all(pending); } +} export async function publishOn(relays, evt) { try { const live = liveRelays(relays); -- cgit v1.2.3