diff --git a/cvm-server/server.ts b/cvm-server/server.ts index fc9651a..b3d81ff 100644 --- a/cvm-server/server.ts +++ b/cvm-server/server.ts @@ -45,23 +45,27 @@ const CVM_RELAY = process.env.CVM_RELAY || "wss://relay.contextvm.net"; const dataPool = new SimplePool(); -async function queryNostr(filters: Filter[], timeoutMs = 6000): Promise { - return new Promise((resolve) => { - const events: any[] = []; - const sub = dataPool.subscribeMany(NOSTR_RELAYS, filters, { - onevent(e: any) { - events.push(e); - }, - oneose() { - sub.close(); - resolve(events); - }, - }); - setTimeout(() => { - sub.close(); - resolve(events); - }, timeoutMs); - }); +async function queryNostr(filters: Filter[], timeoutMs = 8000): Promise { + // nostr-tools v2: use querySync which handles eose cleanly + // Run each filter separately and merge results (querySync takes a single filter) + const allEvents: any[] = []; + await Promise.all( + filters.map(async (filter) => { + try { + const abort = new AbortController(); + const timer = setTimeout(() => abort.abort(), timeoutMs); + const events = await dataPool.querySync(NOSTR_RELAYS, filter, { + maxWait: timeoutMs, + abort: abort.signal, + }); + clearTimeout(timer); + allEvents.push(...events); + } catch { + // ignore per-filter errors + } + }) + ); + return allEvents; } // ─── Helpers ─────────────────────────────────────────────────────────────────