1 |
|
2 |
|
3 | import { Duplex } from 'stream';
|
4 | import { ConnectedPeer } from './ConnectedPeer';
|
5 | import { OnNetworkEvent } from './event';
|
6 | import { Peer } from './Peer';
|
7 | import { Endpoint } from './types';
|
8 | export interface PeerHealthBase {
|
9 | readonly healthy: boolean;
|
10 | }
|
11 | export interface NegotiateResult<PeerData> {
|
12 | readonly data: PeerData;
|
13 | readonly relay: boolean;
|
14 | }
|
15 | export interface Network<Message, PeerData> {
|
16 | readonly connectedPeers: ReadonlyArray<ConnectedPeer<Message, PeerData>>;
|
17 | readonly blacklistAndClose: (peer: ConnectedPeer<Message, PeerData>) => void;
|
18 | readonly start: () => void;
|
19 | readonly stop: () => void;
|
20 | readonly relay: (buffer: Buffer) => void;
|
21 | readonly permanentlyBlacklist: (endpoint: Endpoint) => void;
|
22 | readonly addEndpoint: (endpoint: Endpoint) => void;
|
23 | }
|
24 | export interface NetworkCreateOptions<Message, PeerData, PeerHealth extends PeerHealthBase> {
|
25 | readonly negotiate: (peer: Peer<Message>) => Promise<NegotiateResult<PeerData>>;
|
26 | readonly checkPeerHealth: (connectedPeer: ConnectedPeer<Message, PeerData>, previousHealth?: PeerHealth) => PeerHealth;
|
27 | readonly createMessageTransform: () => Duplex;
|
28 | readonly onMessageReceived: (peer: ConnectedPeer<Message, PeerData>, message: Message) => void;
|
29 | readonly onRequestEndpoints: () => void;
|
30 | readonly onEvent?: OnNetworkEvent<Message, PeerData>;
|
31 | }
|
32 | export declare type CreateNetwork = <Message, PeerData, PeerHealth extends PeerHealthBase>(options: NetworkCreateOptions<Message, PeerData, PeerHealth>) => Network<Message, PeerData>;
|