///
///
import { Duplex } from 'stream';
import { ConnectedPeer } from './ConnectedPeer';
import { OnNetworkEvent } from './event';
import { Peer } from './Peer';
import { Endpoint } from './types';
export interface PeerHealthBase {
readonly healthy: boolean;
}
export interface NegotiateResult {
readonly data: PeerData;
readonly relay: boolean;
}
export interface Network {
readonly connectedPeers: ReadonlyArray>;
readonly blacklistAndClose: (peer: ConnectedPeer) => void;
readonly start: () => void;
readonly stop: () => void;
readonly relay: (buffer: Buffer) => void;
readonly permanentlyBlacklist: (endpoint: Endpoint) => void;
readonly addEndpoint: (endpoint: Endpoint) => void;
}
export interface NetworkCreateOptions {
readonly negotiate: (peer: Peer) => Promise>;
readonly checkPeerHealth: (connectedPeer: ConnectedPeer, previousHealth?: PeerHealth) => PeerHealth;
readonly createMessageTransform: () => Duplex;
readonly onMessageReceived: (peer: ConnectedPeer, message: Message) => void;
readonly onRequestEndpoints: () => void;
readonly onEvent?: OnNetworkEvent;
}
export declare type CreateNetwork = (options: NetworkCreateOptions) => Network;