import type { EventVerifier, Filter, NostrEvent } from "@nostr-fetch/kernel/nostr"; import { type WSCloseEvent, type WebSocketMinCtor } from "@nostr-fetch/kernel/webSocket"; type Callback = E extends void ? () => void : (ev: E) => void; export interface Relay { url: string; wsReadyState: number; connect(): Promise; close(): void; prepareSub(filters: Filter[], options: SubscriptionOptions): Subscription; on(type: E, cb: RelayEventCbTypes[E]): void; off(type: E, cb: RelayEventCbTypes[E]): void; } export type RelayOptions = { connectTimeoutMs: number; webSocketConstructor: WebSocketMinCtor; }; export declare const initRelay: (relayUrl: string, options: RelayOptions) => Relay; export type RelayConnectCb = Callback; export type RelayDisconnectCb = Callback; export type RelayNoticeCb = Callback; export type RelayErrorCb = Callback; export type RelayEventCbTypes = { connect: RelayConnectCb; disconnect: RelayDisconnectCb; notice: RelayNoticeCb; error: RelayErrorCb; }; export type RelayEventTypes = keyof RelayEventCbTypes; type EoseEventPayload = { aborted: boolean; }; export type SubEventCb = Callback; export type SubEoseCb = Callback; export type SubClosedCb = Callback; export type SubEventCbTypes = { event: SubEventCb; eose: SubEoseCb; closed: SubClosedCb; }; export type SubEventTypes = keyof SubEventCbTypes; export interface Subscription { subId: string; req(): void; close(): void; on(type: E, cb: SubEventCbTypes[E]): void; off(type: E, cb: SubEventCbTypes[E]): void; } export interface SubscriptionOptions { subId?: string; eventVerifier: EventVerifier; skipVerification: boolean; skipFilterMatching: boolean; abortSubBeforeEoseTimeoutMs: number; } export {}; //# sourceMappingURL=relay.d.ts.map