From 69f6694f5c5e1d9a1e78e60ae24d91a72512510e Mon Sep 17 00:00:00 2001 From: kieran Date: Thu, 4 Jul 2024 12:19:02 +0100 Subject: [PATCH] chore: extract isRequestSatisfied --- packages/system/src/query-manager.ts | 6 +++--- packages/system/src/request-matcher.ts | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/system/src/query-manager.ts b/packages/system/src/query-manager.ts index b1bad16a..f0191c1c 100644 --- a/packages/system/src/query-manager.ts +++ b/packages/system/src/query-manager.ts @@ -3,7 +3,7 @@ import { EventEmitter } from "eventemitter3"; import { BuiltRawReqFilter, FlatReqFilter, ReqFilter, RequestBuilder, SystemInterface, TaggedNostrEvent } from "."; import { Query, TraceReport } from "./query"; import { trimFilters } from "./request-trim"; -import { eventMatchesFilter } from "./request-matcher"; +import { eventMatchesFilter, isRequestSatisfied } from "./request-matcher"; interface QueryManagerEvents { change: () => void; @@ -107,7 +107,7 @@ export class QueryManager extends EventEmitter { const data = await this.#system.cacheRelay.query(["REQ", q.id, ...filters]); if (data.length > 0) { syncFrom = data.map(a => ({ ...a, relays: [] })); - this.#log("Adding from cache: %O", data); + this.#log("Adding from cache %s %O", q.id, data); q.feed.add(syncFrom); } } @@ -115,7 +115,7 @@ export class QueryManager extends EventEmitter { // remove satisfied filters if (syncFrom.length > 0) { // only remove the "ids" filters - const newFilters = filters.filter(a => !a.ids || (a.ids && !syncFrom.some(b => eventMatchesFilter(b, a)))); + const newFilters = filters.filter(a => !isRequestSatisfied(a, syncFrom)); if (newFilters.length !== filters.length) { this.#log("Removing satisfied filters %o %o", newFilters, filters); filters = newFilters; diff --git a/packages/system/src/request-matcher.ts b/packages/system/src/request-matcher.ts index bd04793b..2e5a9254 100644 --- a/packages/system/src/request-matcher.ts +++ b/packages/system/src/request-matcher.ts @@ -1,4 +1,4 @@ -import { NostrEvent, ReqFilter } from "./nostr"; +import { NostrEvent, ReqFilter, TaggedNostrEvent } from "./nostr"; export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) { if (filter.since && ev.created_at < filter.since) { @@ -18,3 +18,9 @@ export function eventMatchesFilter(ev: NostrEvent, filter: ReqFilter) { } return true; } + +export function isRequestSatisfied(filter: ReqFilter, results: Array) { + if (filter.ids && filter.ids.every(a => results.some(b => b.id === a))) { + return true; + } +}