///
///
import { Duplex } from 'stream';
import { Endpoint } from './types';
export interface PeerOptions {
readonly endpoint: Endpoint;
readonly stream: Duplex;
readonly transform: Duplex;
readonly onError: (peer: Peer, error: Error) => void;
readonly onClose: (peer: Peer) => void;
}
export declare abstract class Peer {
readonly endpoint: Endpoint;
private readonly stream;
private readonly transform;
private readonly buffer;
private mutableConnected;
private mutableConnecting;
private mutableClosed;
private readonly onErrorInternal;
private readonly onCloseInternal;
constructor(options: PeerOptions);
readonly connected: boolean;
connect(): Promise;
close(hadError?: boolean): void;
write(buffer: Buffer): void;
receiveMessage(timeoutMS?: number): Promise;
streamData(onDataReceived: (data: Message) => void): {
readonly unsubscribe: () => void;
};
protected abstract connectInternal(): Promise;
protected abstract closeInternal(hadError: boolean): void;
protected onError(error: Error): void;
private onClose;
}