import type { Did } from '@atcute/lexicons'; import { EventIterator } from '@mary-ext/event-iterator'; import type { CloseEvent, ErrorEvent, Options } from 'partysocket/ws'; import type { ReadonlyDeep } from 'type-fest'; export interface JetstreamSubscriptionOptions { url: string | string[]; cursor?: number; /** * array of collection NSIDs that you're interested in receiving commit events for, pass in an empty array * for no commit events. */ wantedCollections?: string[]; /** * array of account DIDs that you're interested in receiving commit events for, pass in an empty array for * no commit events. */ wantedDids?: Did[]; /** * whether to validate Jetstream's events, you'd still need to validate the records. * * @default true */ validateEvents?: boolean; onConnectionOpen?: (event: Event) => void; onConnectionClose?: (event: CloseEvent) => void; onConnectionError?: (event: ErrorEvent) => void; /** * called when an event fails schema validation. the error is a valibot `ValiError` carrying the validation * issues. without a handler, invalid events are silently dropped. */ onError?: (err: unknown) => void; /** WebSocket connection options */ ws?: Options; } export declare class JetstreamSubscription { #private; constructor(options: JetstreamSubscriptionOptions); [Symbol.asyncIterator](): EventIterator<({ did: `did:${string}:${string}`; time_us: number; kind: "commit"; commit: ({ rev: string; collection: `${string}.${string}.${string}`; rkey: string; operation: "create"; cid: string; record: { [x: string]: unknown; }; } & { [key: string]: unknown; }) | ({ rev: string; collection: `${string}.${string}.${string}`; rkey: string; operation: "update"; cid: string; record: { [x: string]: unknown; }; } & { [key: string]: unknown; }) | ({ rev: string; collection: `${string}.${string}.${string}`; rkey: string; operation: "delete"; } & { [key: string]: unknown; }); } & { [key: string]: unknown; }) | ({ did: `did:${string}:${string}`; time_us: number; kind: "identity"; identity: { did: `did:${string}:${string}`; handle: `${string}.${string}`; seq: number; time: string; } & { [key: string]: unknown; }; } & { [key: string]: unknown; }) | ({ did: `did:${string}:${string}`; time_us: number; kind: "account"; account: { did: `did:${string}:${string}`; active: boolean; seq: number; time: string; } & { [key: string]: unknown; }; } & { [key: string]: unknown; })>; get cursor(): number; getOptions(): ReadonlyDeep; updateOptions(options: Partial): void; }