import { LDLogger } from '../../api';
import { DataSourceErrorKind } from '../../datasource';
export interface ObjProcessors {
    [kind: string]: (object: any) => any;
}
export interface FDv2EventsCollection {
    events: FDv2Event[];
}
export interface FDv2Event {
    event: string;
    data: 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 PayloadProcessor 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 processor will continue to operate.
 */
export declare class PayloadProcessor {
    private readonly _objProcessors;
    private readonly _errorHandler?;
    private readonly _logger?;
    private _listeners;
    private _tempId?;
    private _tempBasis;
    private _tempUpdates;
    /**
     * Creates a PayloadProcessor
     *
     * @param _objProcessors defines object processors for each object kind.
     * @param _errorHandler that will be called with parsing errors as they are encountered
     * @param _logger for logging
     */
    constructor(_objProcessors: ObjProcessors, _errorHandler?: ((errorKind: DataSourceErrorKind, message: string) => void) | undefined, _logger?: LDLogger | undefined);
    addPayloadListener(listener: PayloadListener): void;
    removePayloadListener(listener: PayloadListener): void;
    /**
     * Gives the {@link PayloadProcessor} a series of events that it will statefully, incrementally process.
     * This may lead to listeners being invoked as necessary.
     * @param events to be processed (can be a single element)
     */
    processEvents(events: FDv2Event[]): void;
    private _processObj;
    private _processServerIntent;
    private _processPutObject;
    private _processDeleteObject;
    private _processIntentNone;
    private _processPayloadTransferred;
    private _processGoodbye;
    private _processError;
    private _resetAfterEmission;
    private _resetAfterError;
    private _resetAll;
}
//# sourceMappingURL=payloadProcessor.d.ts.map