import { type Logger } from 'pino'; import { PGMBEventBatcher } from './batcher.ts'; import type { PgClientLike } from './query-types.ts'; import type { GetWebhookInfoFn, IEphemeralListener, IEventData, IEventHandler, IFindEventsFn, IReadEvent, IReadNextEventsFn, ISplitFn, Pgmb2ClientOpts, registerReliableHandlerParams, RegisterSubscriptionParams, WebhookInfo } from './types.ts'; type IReliableListener = { type: 'reliable'; handler: IEventHandler; removeOnEmpty?: boolean; extra?: unknown; splitBy?: ISplitFn; queue: { item: IReadEvent; checkpoint: Checkpoint; }[]; }; type IFireAndForgetListener = { type: 'fire-and-forget'; stream: IEphemeralListener; }; type IListener = IFireAndForgetListener | IReliableListener; type Checkpoint = { activeTasks: number; nextCursor: string; cancelled?: boolean; }; export type IListenerStore = { values: { [id: string]: IListener; }; }; export declare class PgmbClient extends PGMBEventBatcher { #private; readonly client: PgClientLike; readonly logger: Logger; readonly groupId: string; readonly readEventsIntervalMs: number; readonly pollEventsIntervalMs: number; readonly readChunkSize: number; readonly subscriptionMaintenanceMs: number; readonly tableMaintenanceMs: number; readonly maxActiveCheckpoints: number; readonly readNextEvents: IReadNextEventsFn; readonly findEvents?: IFindEventsFn; readonly getWebhookInfo: GetWebhookInfoFn; readonly webhookHandler: IEventHandler>; readonly listeners: { [subId: string]: IListenerStore; }; constructor({ client, groupId, logger, readEventsIntervalMs, readChunkSize, maxActiveCheckpoints, pollEventsIntervalMs, subscriptionMaintenanceMs, tableMaintainanceMs, webhookHandlerOpts: { splitBy: whSplitBy, ...whHandlerOpts }, getWebhookInfo, readNextEvents, findEvents, ...batcherOpts }: Pgmb2ClientOpts); init(): Promise; end(): Promise; publish(events: T[], client?: PgClientLike): Promise; assertSubscription(opts: RegisterSubscriptionParams, client?: PgClientLike): Promise; /** * Registers a fire-and-forget handler, returning an async iterator * that yields events as they arrive. The client does not wait for event * processing acknowledgements. Useful for cases where data is eventually * consistent, or when event delivery isn't critical * (eg. http SSE, websockets). */ registerFireAndForgetHandler(opts: RegisterSubscriptionParams): Promise>; /** * Registers a reliable handler for the given subscription params. * If the handler throws an error, client will rollback to the last known * good cursor, and re-deliver events. * To avoid a full redelivery of a batch, a retry strategy can be provided * to retry failed events by the handler itself, allowing for delayed retries * with backoff, and without disrupting the overall event flow. */ registerReliableHandler({ retryOpts, name, splitBy, ...opts }: registerReliableHandlerParams, handler: IEventHandler): Promise<{ subscriptionId: string; cancel: () => void; }>; removeSubscription(subId: string): Promise; readChanges(): Promise; } export {};