nostr-tools
Version:
Tools for making a Nostr client.
61 lines (60 loc) • 3.19 kB
TypeScript
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<VerifiedEvent>);
onRelayConnectionFailure?: (url: string) => void;
onRelayConnectionSuccess?: (url: string) => void;
allowConnectingToRelay?: (url: string, operation: ['read', Filter[]] | ['write', Event]) => boolean;
maxWaitForConnection: number;
};
export type SubscribeManyParams = Omit<SubscriptionParams, 'onclose'> & {
maxWait?: number;
abort?: AbortSignal;
onclose?: (reasons: string[]) => void;
onauth?: (event: EventTemplate) => Promise<VerifiedEvent>;
id?: string;
label?: string;
};
export declare class AbstractSimplePool {
protected relays: Map<string, AbstractRelay>;
seenOn: Map<string, Set<AbstractRelay>>;
trackRelays: boolean;
verifyEvent: Nostr['verifyEvent'];
enablePing: boolean | undefined;
enableReconnect: boolean;
automaticallyAuth?: (relayURL: string) => null | ((event: EventTemplate) => Promise<VerifiedEvent>);
trustedRelayURLs: Set<string>;
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<AbstractRelay>;
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<SubscribeManyParams, 'label' | 'id' | 'onevent' | 'oninvalidevent' | 'onclose' | 'maxWait' | 'onauth'>): SubCloser;
subscribeManyEose(relays: string[], filter: Filter, params: Pick<SubscribeManyParams, 'label' | 'id' | 'onevent' | 'oninvalidevent' | 'onclose' | 'maxWait' | 'onauth'>): SubCloser;
querySync(relays: string[], filter: Filter, params?: Pick<SubscribeManyParams, 'label' | 'id' | 'maxWait'>): Promise<Event[]>;
get(relays: string[], filter: Filter, params?: Pick<SubscribeManyParams, 'label' | 'id' | 'maxWait'>): Promise<Event | null>;
publish(relays: string[], event: Event, params?: {
onauth?: (evt: EventTemplate) => Promise<VerifiedEvent>;
maxWait?: number;
abort?: AbortSignal;
}): Promise<string>[];
listConnectionStatus(): Map<string, boolean>;
destroy(): void;
pruneIdleRelays(idleThresholdMs?: number): string[];
}