system.HandleEvent -> querymanager -> matching queries
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
736c2577db
commit
13b7a16dc7
@ -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[]> {
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user