/// <reference types="node" />
/**
 * EventSubscriber — streams and parses Drift program events from transaction logs.
 *
 * Decodes all program events (OrderActionRecord, DepositRecord, LiquidationRecord,
 * FundingPaymentRecord, etc.) from `state/events.rs` into typed TypeScript objects.
 * Supports WebSocket and polling log providers; events are surfaced via an EventEmitter.
 * See `events/types.ts` for the full event type union and `events/parse.ts` for log parsing.
 */
import { Connection, TransactionSignature } from '@solana/web3.js';
import { Program } from '../isomorphic/anchor';
import { EventSubscriptionOptions, EventType, WrappedEvents, EventMap, EventSubscriberEvents, LogProviderType } from './types';
import { EventList } from './eventList';
import { EventEmitter } from 'events';
import StrictEventEmitter from 'strict-event-emitter-types';
export declare class EventSubscriber {
    private connection;
    private program;
    private options;
    private address;
    private eventListMap;
    private txEventCache;
    private awaitTxPromises;
    private awaitTxResolver;
    private logProvider;
    private _currentProviderType;
    eventEmitter: StrictEventEmitter<EventEmitter, EventSubscriberEvents>;
    private lastSeenSlot;
    private lastSeenBlockTime;
    lastSeenTxSig: string;
    constructor(connection: Connection, program: Program, options?: EventSubscriptionOptions);
    get currentProviderType(): LogProviderType;
    private initializeLogProvider;
    private populateInitialEventListMap;
    /**
     * Implements fallback logic for reconnecting to LogProvider. Currently terminates at polling,
     * could be improved to try the original type again after some cooldown.
     */
    private updateFallbackProviderType;
    subscribe(): Promise<boolean>;
    private handleTxLogs;
    fetchPreviousTx(fetchMax?: boolean): Promise<void>;
    unsubscribe(): Promise<boolean>;
    private parseEventsFromLogs;
    awaitTx(txSig: TransactionSignature): Promise<void>;
    getEventList<Type extends keyof EventMap>(eventType: Type): EventList<Type>;
    /**
     * This requires the EventList be cast to an array, which requires reallocation of memory.
     * Would bias to using getEventList over getEvents
     *
     * @param eventType
     */
    getEventsArray<Type extends EventType>(eventType: Type): EventMap[Type][];
    getEventsByTx(txSig: TransactionSignature): WrappedEvents | undefined;
}
//# sourceMappingURL=eventSubscriber.d.ts.map