import { EventListener, EventName, LDLogger } from '../../api';
import { DataSourceErrorKind } from '../../datasource';
export interface EventStream {
    addEventListener(type: EventName, listener: EventListener): void;
}
export interface ObjProcessors {
    [kind: string]: (object: any) => any;
}
export interface Update {
    kind: string;
    key: string;
    version: number;
    object?: any;
    deleted?: boolean;
}
export interface Payload {
    id: string;
    version: number;
    state: string;
    basis: boolean;
    updates: Update[];
}
export type PayloadListener = (payload: Payload) => void;
/**
 * A FDv2 PayloadReader can be used to parse payloads from a stream of FDv2 events. It will send payloads
 * to the PayloadListeners as the payloads are received. Invalid series of events may be dropped silently,
 * but the payload reader will continue to operate.
 */
export declare class PayloadReader {
    private readonly _objProcessors;
    private readonly _errorHandler?;
    private readonly _logger?;
    private _listeners;
    private _tempId?;
    private _tempBasis?;
    private _tempUpdates;
    /**
     * Creates a PayloadReader
     *
     * @param eventStream event stream of FDv2 events
     * @param _objProcessors defines object processors for each object kind.
     * @param _errorHandler that will be called with errors as they are encountered
     * @param _logger for logging
     */
    constructor(eventStream: EventStream, _objProcessors: ObjProcessors, _errorHandler?: ((errorKind: DataSourceErrorKind, message: string) => void) | undefined, _logger?: LDLogger | undefined);
    addPayloadListener(listener: PayloadListener): void;
    removePayloadListener(listener: PayloadListener): void;
    private _attachHandler;
    private _processObj;
    private _processServerIntent;
    private _processPutObject;
    private _processDeleteObject;
    private _processPayloadTransferred;
    private _processGoodbye;
    private _processError;
    private _resetState;
}
//# sourceMappingURL=payloadReader.d.ts.map