import { EventEmitter } from "eventemitter3"; import { type BuiltRawReqFilter, type RequestBuilder, type SystemInterface, type TaggedNostrEvent } from "."; import type { ConnectionType } from "./connection-pool"; import { Query, QueryTrace, type QueryTraceEvent } from "./query"; interface QueryManagerEvents { change: () => void; trace: (event: QueryTraceEvent, queryName?: string) => void; request: (subId: string, req: BuiltRawReqFilter) => void; } /** * Query manager handles sending requests to the nostr network */ export declare class QueryManager extends EventEmitter { #private; constructor(system: SystemInterface); /** * Stop all timers and remove all listeners. * Call this when the QueryManager is no longer needed to prevent leaks. */ destroy(): void; get(id: string): Query | undefined; /** * Compute query to send to relays */ query(req: RequestBuilder): Query; /** * Manually insert events into query result set */ handleEvent(sub: string, ev: TaggedNostrEvent): void; /** * Async fetch results. * Relays race: the query's internal grace period times out slow traces * after the first EOSE, so this resolves quickly in practice. */ fetch(req: RequestBuilder, cb?: (evs: Array) => void): Promise; /** * Wait for queries to collect enough data for SSR. * Relays race: the Query's internal grace period times out slow traces * after the first EOSE, so this resolves quickly in practice. * Skips queries marked with `leaveOpen: true`. */ fetchAll(): Promise; [Symbol.iterator](): Generator<[string, Query], void, unknown>; /** * Create a new trace for a query and connection */ createTrace(query: Query, connection: ConnectionType, filters: BuiltRawReqFilter): QueryTrace; /** * Attempt to send a trace to a connection * @returns true if sent, false if queued */ sendTrace(query: Query, trace: QueryTrace, connection: ConnectionType, filters: BuiltRawReqFilter): boolean; } export {}; //# sourceMappingURL=query-manager.d.ts.map