system.HandleEvent -> querymanager -> matching queries
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Martti Malmi 2024-01-13 22:44:16 +02:00
parent 736c2577db
commit 13b7a16dc7
3 changed files with 12 additions and 4 deletions

View File

@ -4,7 +4,7 @@ import EventEmitter from "eventemitter3";
import { FeedCache } from "@snort/shared"; import { FeedCache } from "@snort/shared";
import { NostrEvent, ReqFilter, TaggedNostrEvent } from "./nostr"; import { NostrEvent, ReqFilter, TaggedNostrEvent } from "./nostr";
import { RelaySettings, ConnectionStateSnapshot, OkResponse } from "./connection"; import { RelaySettings, ConnectionStateSnapshot, OkResponse } from "./connection";
import { RequestBuilder } from "./request-builder"; import { BuiltRawReqFilter, RequestBuilder } from "./request-builder";
import { RelayMetricHandler } from "./relay-metric-handler"; import { RelayMetricHandler } from "./relay-metric-handler";
import { import {
CachedMetadata, CachedMetadata,
@ -30,7 +30,7 @@ export interface NostrSystemEvents {
change: (state: SystemSnapshot) => void; change: (state: SystemSnapshot) => void;
auth: (challenge: string, relay: string, cb: (ev: NostrEvent) => void) => void; auth: (challenge: string, relay: string, cb: (ev: NostrEvent) => void) => void;
event: (subId: string, ev: TaggedNostrEvent) => void; event: (subId: string, ev: TaggedNostrEvent) => void;
request: (filter: ReqFilter) => void; filters: (filter: BuiltRawReqFilter) => void;
} }
export interface NostrsystemProps { export interface NostrsystemProps {
@ -149,6 +149,7 @@ export class NostrSystem extends EventEmitter<NostrSystemEvents> implements Syst
this.#queryManager.on("trace", t => { this.#queryManager.on("trace", t => {
this.relayMetricsHandler.onTraceReport(t); this.relayMetricsHandler.onTraceReport(t);
}); });
this.#queryManager.on("filters", (f: BuiltRawReqFilter) => this.emit("filters", f));
} }
get Sockets(): ConnectionStateSnapshot[] { get Sockets(): ConnectionStateSnapshot[] {
@ -191,6 +192,7 @@ export class NostrSystem extends EventEmitter<NostrSystemEvents> implements Syst
HandleEvent(ev: TaggedNostrEvent) { HandleEvent(ev: TaggedNostrEvent) {
this.emit("event", "*", ev); this.emit("event", "*", ev);
this.#queryManager.handleEvent(ev);
} }
async BroadcastEvent(ev: NostrEvent, cb?: (rsp: OkResponse) => void): Promise<OkResponse[]> { async BroadcastEvent(ev: NostrEvent, cb?: (rsp: OkResponse) => void): Promise<OkResponse[]> {

View File

@ -8,6 +8,7 @@ import { trimFilters } from "./request-trim";
interface QueryManagerEvents { interface QueryManagerEvents {
change: () => void; change: () => void;
trace: (report: TraceReport) => void; trace: (report: TraceReport) => void;
filters: (req: BuiltRawReqFilter) => void;
} }
/** /**
@ -58,6 +59,7 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
q.on("trace", r => this.emit("trace", r)); q.on("trace", r => this.emit("trace", r));
q.on("filters", fx => { q.on("filters", fx => {
this.#send(q, fx); this.#send(q, fx);
this.emit("filters", fx);
}); });
this.#queries.set(req.id, q); this.#queries.set(req.id, q);
@ -66,6 +68,10 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
} }
} }
handleEvent(ev: TaggedNostrEvent) {
this.#queries.forEach(q => q.handleEvent("*", ev));
}
/** /**
* Async fetch results * Async fetch results
*/ */

View File

@ -217,7 +217,7 @@ export class Query extends EventEmitter<QueryEvents> {
return this.#feed.snapshot; return this.#feed.snapshot;
} }
#handleEvent(sub: string, e: TaggedNostrEvent) { handleEvent(sub: string, e: TaggedNostrEvent) {
for (const t of this.#tracing) { for (const t of this.#tracing) {
if (t.id === sub || sub === "*") { if (t.id === sub || sub === "*") {
if (t.filters.some(v => eventMatchesFilter(e, v))) { if (t.filters.some(v => eventMatchesFilter(e, v))) {
@ -402,7 +402,7 @@ export class Query extends EventEmitter<QueryEvents> {
responseTime: qt.responseTime, responseTime: qt.responseTime,
} as TraceReport), } as TraceReport),
); );
const handler = (sub: string, ev: TaggedNostrEvent) => this.#handleEvent(sub, ev); const handler = (sub: string, ev: TaggedNostrEvent) => this.handleEvent(sub, ev);
c.on("event", handler); c.on("event", handler);
this.on("end", () => c.off("event", handler)); this.on("end", () => c.off("event", handler));
this.#tracing.push(qt); this.#tracing.push(qt);