import { AbstractRelay as AbstractRelay, SubscriptionParams, type AbstractRelayConstructorOptions } from './abstract-relay.ts'; import type { Event, EventTemplate, Nostr, VerifiedEvent } from './core.ts'; import { type Filter } from './filter.ts'; export type SubCloser = { close: (reason?: string) => void; }; export type AbstractPoolConstructorOptions = AbstractRelayConstructorOptions & { automaticallyAuth?: (relayURL: string) => null | ((event: EventTemplate) => Promise); onRelayConnectionFailure?: (url: string) => void; onRelayConnectionSuccess?: (url: string) => void; allowConnectingToRelay?: (url: string, operation: ['read', Filter[]] | ['write', Event]) => boolean; maxWaitForConnection: number; }; export type SubscribeManyParams = Omit & { maxWait?: number; abort?: AbortSignal; onclose?: (reasons: string[]) => void; onauth?: (event: EventTemplate) => Promise; id?: string; label?: string; }; export declare class AbstractSimplePool { protected relays: Map; seenOn: Map>; trackRelays: boolean; verifyEvent: Nostr['verifyEvent']; enablePing: boolean | undefined; enableReconnect: boolean; automaticallyAuth?: (relayURL: string) => null | ((event: EventTemplate) => Promise); trustedRelayURLs: Set; onRelayConnectionFailure?: (url: string) => void; onRelayConnectionSuccess?: (url: string) => void; allowConnectingToRelay?: (url: string, operation: ['read', Filter[]] | ['write', Event]) => boolean; maxWaitForConnection: number; private _WebSocket?; constructor(opts: AbstractPoolConstructorOptions); ensureRelay(url: string, params?: { connectionTimeout?: number; abort?: AbortSignal; }): Promise; close(relays: string[]): void; subscribe(relays: string[], filter: Filter, params: SubscribeManyParams): SubCloser; subscribeMany(relays: string[], filter: Filter, params: SubscribeManyParams): SubCloser; subscribeMap(requests: { url: string; filter: Filter; }[], params: SubscribeManyParams): SubCloser; subscribeEose(relays: string[], filter: Filter, params: Pick): SubCloser; subscribeManyEose(relays: string[], filter: Filter, params: Pick): SubCloser; querySync(relays: string[], filter: Filter, params?: Pick): Promise; get(relays: string[], filter: Filter, params?: Pick): Promise; publish(relays: string[], event: Event, params?: { onauth?: (evt: EventTemplate) => Promise; maxWait?: number; abort?: AbortSignal; }): Promise[]; listConnectionStatus(): Map; destroy(): void; pruneIdleRelays(idleThresholdMs?: number): string[]; }