import { ClientMessageEnvelope, ServerMessage } from '../types/socket/protocol/messages';
export declare class TransactionManager {
    /**
     * The map of <transactionId, Transaction> representing outstanding requests.
     */
    private readonly outstandingRequestsMap;
    /**
     * The queue of completed requests. This is a FIFO queue of the last N completed requests,
     * where N is {@link completedTransactionsToKeep}.
     */
    private readonly completedTransactionsQueue;
    /**
     * Number of completed requests to keep in memory.
     */
    private readonly completedTransactionsToKeep;
    constructor(completedTransactionsToKeep?: number);
    addOutstandingRequest(transactionId: string, request: ClientMessageEnvelope): void;
    addResponse(transactionId: string, response: ServerMessage): void;
    get outstandingRequests(): Transaction[];
    get completedTransactions(): Transaction[];
    clearOutstandingRequests(): void;
    /**
     * Adds a completed request to the queue.
     *
     * If the number of completed requests exceeds the maximum number of completed requests to keep,
     * remove the oldest completed request.
     */
    private addCompletedTransaction;
}
interface Transaction {
    /**
     * The transaction ID.
     */
    transactionId: string;
    /**
     * The request to the server.
     */
    request: ClientMessageEnvelope;
    /**
     * The response to the request.
     *
     * The response is null until the request is completed.
     */
    response: ServerMessage | null;
    /**
     * The start time of the transaction.
     */
    start: Date;
    /**
     * The end time of the transaction.
     */
    end: Date | null;
}
export {};
