import { Message, ConnectRequest, ConnectResponse, Disconnect, DownstreamOpenRequest, DownstreamOpenResponse, DownstreamChunkAckComplete, DownstreamChunk, DownstreamMetadata, DownstreamMetadataAck, DownstreamCloseResponse, DownstreamChunkAck, DownstreamResumeRequest, DownstreamResumeResponse, DownstreamCloseRequest, UpstreamOpenRequest, UpstreamOpenResponse, UpstreamResumeRequest, UpstreamResumeResponse, UpstreamCloseRequest, UpstreamCloseResponse, UpstreamChunk, UpstreamChunkAck, UpstreamMetadata, UpstreamMetadataAck, UpstreamCall, UpstreamCallAck, DownstreamCall } from './message';
import { Logger } from './logger';
import { Sequence } from './sequence';
export interface WireConfig {
    requestSequence: Sequence;
    reader: () => Promise<Message>;
    writer: (message: Message) => Promise<void>;
    unreliableReader?: () => Promise<Message>;
    unreliableWriter?: (message: Message) => Promise<void>;
    pingTimeout: number;
    pingInterval: number;
    logger: Logger;
}
export declare class Wire {
    #private;
    onDisconnect: (message: Disconnect) => Promise<void>;
    onUpstreamChunkAck: (message: UpstreamChunkAck) => Promise<void>;
    onDownstreamChunk: (message: DownstreamChunk) => Promise<void>;
    onDownstreamMetadata: (message: DownstreamMetadata) => Promise<void>;
    onDownstreamChunkAckComplete: (message: DownstreamChunkAckComplete) => Promise<void>;
    onDownstreamCall: (message: DownstreamCall) => Promise<void>;
    onPingTimeout: () => Promise<void>;
    onError: (error: Error) => Promise<void>;
    constructor(config: WireConfig);
    start(): Promise<void>;
    cancel(): Promise<void>;
    connect(request: ConnectRequest): Promise<ConnectResponse>;
    disconnect(request: Disconnect): Promise<void>;
    openUpstream(request: UpstreamOpenRequest): Promise<UpstreamOpenResponse>;
    resumeUpstream(request: UpstreamResumeRequest): Promise<UpstreamResumeResponse>;
    closeUpstream(request: UpstreamCloseRequest): Promise<UpstreamCloseResponse>;
    sendUpstreamChunk(message: UpstreamChunk): Promise<void>;
    upstreamMetadata(request: UpstreamMetadata): Promise<UpstreamMetadataAck>;
    openDownstream(request: DownstreamOpenRequest): Promise<DownstreamOpenResponse>;
    resumeDownstream(request: DownstreamResumeRequest): Promise<DownstreamResumeResponse>;
    closeDownstream(request: DownstreamCloseRequest): Promise<DownstreamCloseResponse>;
    sendDownstreamChunkAck(message: DownstreamChunkAck): Promise<void>;
    sendDownstreamMetadataAck(message: DownstreamMetadataAck): Promise<void>;
    sendUpstreamCall(message: UpstreamCall, timeout?: number): Promise<UpstreamCallAck>;
}
