import { TZMQRequestErrorHandlers } from "./Errors";
export declare type TRequestBody = [requesterId: string, nonce: string, message: string];
export declare enum ERequestBody {
    RequesterId = 0,
    Nonce = 1,
    Message = 2
}
export declare enum ERequestResponse {
    SUCCESS = "SUCCESS",
    TIMEOUT = "TIMEOUT",
    CACHE_ERROR = "CACHE_ERROR"
}
export declare type TSuccessfulRequest = {
    ResponseType: ERequestResponse.SUCCESS;
    Response: string;
};
export declare type TRequestTimeOut = {
    ResponseType: ERequestResponse.TIMEOUT;
    MessageNonce: number;
    RequestBody: TRequestBody;
};
export declare type TResponseCacheError = {
    ResponseType: ERequestResponse.CACHE_ERROR;
    Endpoint: string;
    MessageNonce: number;
};
export declare type TRequestResponse = TSuccessfulRequest | TRequestTimeOut | TResponseCacheError;
export declare class ZMQRequest {
    private readonly mCancellableDelay;
    private mDealer;
    private readonly mEndpoint;
    private readonly mErrorHandlers;
    private readonly mOurUniqueId;
    private readonly mPendingRequests;
    private mRequestNonce;
    private readonly mRoundTripMax;
    private mSafeToSend;
    private readonly mSendQueue;
    constructor(aReceiverEndpoint: string, aErrorHandlers?: TZMQRequestErrorHandlers);
    private get ResponseTimeout();
    get Endpoint(): string;
    private AssertRequestProcessed;
    private GenerateRequestResult;
    private HandleZMQSendError;
    private IsErrorMessage;
    private ManageRequest;
    private Open;
    private ProcessSend;
    private ProcessZmqReceive;
    private QueueSend;
    private ResponseHandler;
    private SendRequest;
    Close(): void;
    Send(aData: string): Promise<TRequestResponse>;
}
