UNPKG

1.61 kBTypeScriptView Raw
1/// <reference types="node" />
2/// <reference types="pouchdb-core" />
3import { Duplex } from 'stream';
4import { ConnectedPeer } from './ConnectedPeer';
5import { OnNetworkEvent } from './event';
6import { Peer } from './Peer';
7import { Endpoint } from './types';
8export interface PeerHealthBase {
9 readonly healthy: boolean;
10}
11export interface NegotiateResult<PeerData> {
12 readonly data: PeerData;
13 readonly relay: boolean;
14}
15export 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}
24export 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}
32export declare type CreateNetwork = <Message, PeerData, PeerHealth extends PeerHealthBase>(options: NetworkCreateOptions<Message, PeerData, PeerHealth>) => Network<Message, PeerData>;