chore: extract isRequestSatisfied

This commit is contained in:
kieran 2024-07-04 12:19:02 +01:00
parent dc4758d302
commit 69f6694f5c
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
2 changed files with 10 additions and 4 deletions

View File

@ -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<QueryManagerEvents> {
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<QueryManagerEvents> {
// 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;

View File

@ -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<TaggedNostrEvent>) {
if (filter.ids && filter.ids.every(a => results.some(b => b.id === a))) {
return true;
}
}