/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Response } from '../Response';
import { setInterval } from 'timers';
import { MessageDelayer } from './MessageDelayer';
import { StructuredMessage } from '../StructuredMessage';
export interface ReceivedMsg<T extends StructuredMessage | Response<unknown>> {
    received: Date;
    response: T;
}
/**
 * Reorders messages with a timestamp, being sure to maintain the overall order of messages with/without
 * timestamps.
 *
 * > All messaging follows a request/response pattern. However, web messaging is an asynchronous
 * > channel and therefore no guarantee to ordering is provided.
 * > Source: https://developer.genesys.cloud/commdigital/digital/webmessaging/websocketapi#messaging
 */
export declare class ReorderedMessageDelayer extends EventEmitter implements MessageDelayer {
    private readonly delayBeforeEmittingInMs;
    private readonly intervalInMs;
    private readonly intervalSet;
    private readonly intervalClear;
    private static readonly debugger;
    private messages;
    private lastMessageWithTimestamp;
    private intervalReference;
    private unorderedMessageOccurred;
    constructor(delayBeforeEmittingInMs?: number, intervalInMs?: number, intervalSet?: typeof setInterval, intervalClear?: typeof clearInterval);
    private logUnorderedMessageTimeDiff;
    get unorderdMessageDetected(): boolean;
    /**
     * Add a message to the pool. Each message added reset a timer to wait for any other messages
     * before releasing the oldest message.
     */
    add(message: Response<unknown>, received: Date): void;
    private startInterval;
    private stopInterval;
    private emitMessagesAfterSilence;
    get delay(): number;
}
