mirror of
https://github.com/fluencelabs/js-libp2p-interfaces
synced 2025-04-24 17:52:21 +00:00
chore: add type generation from jsdoc (#64)
This commit is contained in:
parent
c43e8e26bd
commit
eacdc246da
@ -6,14 +6,18 @@
|
|||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"files": [
|
"files": [
|
||||||
"src",
|
"src",
|
||||||
|
"types",
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "aegir lint",
|
"lint": "aegir lint",
|
||||||
"build": "aegir build",
|
"build": "aegir build",
|
||||||
|
"pregenerate:types": "rimraf './src/**/*.d.ts'",
|
||||||
|
"generate:types": "tsc",
|
||||||
"test": "aegir test",
|
"test": "aegir test",
|
||||||
"test:node": "aegir test --target node",
|
"test:node": "aegir test --target node",
|
||||||
"test:browser": "aegir test --target browser",
|
"test:browser": "aegir test --target browser",
|
||||||
|
"prepublishOnly": "npm run generate:types",
|
||||||
"release": "aegir release -t node -t browser",
|
"release": "aegir release -t node -t browser",
|
||||||
"release-minor": "aegir release --type minor -t node -t browser",
|
"release-minor": "aegir release --type minor -t node -t browser",
|
||||||
"release-major": "aegir release --type major -t node -t browser"
|
"release-major": "aegir release --type major -t node -t browser"
|
||||||
@ -63,7 +67,9 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aegir": "^25.0.0",
|
"aegir": "^25.0.0",
|
||||||
"it-handshake": "^1.0.1"
|
"it-handshake": "^1.0.1",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"typescript": "3.7.5"
|
||||||
},
|
},
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Alan Shaw <alan.shaw@protocol.ai>",
|
"Alan Shaw <alan.shaw@protocol.ai>",
|
||||||
|
149
src/connection/connection.d.ts
vendored
Normal file
149
src/connection/connection.d.ts
vendored
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
declare const _exports: typeof Connection;
|
||||||
|
export = _exports;
|
||||||
|
/**
|
||||||
|
* An implementation of the js-libp2p connection.
|
||||||
|
* Any libp2p transport should use an upgrader to return this connection.
|
||||||
|
*/
|
||||||
|
declare class Connection {
|
||||||
|
/**
|
||||||
|
* Creates an instance of Connection.
|
||||||
|
* @param {object} properties properties of the connection.
|
||||||
|
* @param {multiaddr} [properties.localAddr] local multiaddr of the connection if known.
|
||||||
|
* @param {multiaddr} [properties.remoteAddr] remote multiaddr of the connection.
|
||||||
|
* @param {PeerId} properties.localPeer local peer-id.
|
||||||
|
* @param {PeerId} properties.remotePeer remote peer-id.
|
||||||
|
* @param {function} properties.newStream new stream muxer function.
|
||||||
|
* @param {function} properties.close close raw connection function.
|
||||||
|
* @param {function(): Stream[]} properties.getStreams get streams from muxer function.
|
||||||
|
* @param {object} properties.stat metadata of the connection.
|
||||||
|
* @param {string} properties.stat.direction connection establishment direction ("inbound" or "outbound").
|
||||||
|
* @param {object} properties.stat.timeline connection relevant events timestamp.
|
||||||
|
* @param {string} properties.stat.timeline.open connection opening timestamp.
|
||||||
|
* @param {string} properties.stat.timeline.upgraded connection upgraded timestamp.
|
||||||
|
* @param {string} [properties.stat.multiplexer] connection multiplexing identifier.
|
||||||
|
* @param {string} [properties.stat.encryption] connection encryption method identifier.
|
||||||
|
*/
|
||||||
|
constructor({ localAddr, remoteAddr, localPeer, remotePeer, newStream, close, getStreams, stat }: {
|
||||||
|
localAddr?: import("multiaddr");
|
||||||
|
remoteAddr?: import("multiaddr");
|
||||||
|
localPeer: import("peer-id");
|
||||||
|
remotePeer: import("peer-id");
|
||||||
|
newStream: Function;
|
||||||
|
close: Function;
|
||||||
|
getStreams: () => any[];
|
||||||
|
stat: {
|
||||||
|
direction: string;
|
||||||
|
timeline: {
|
||||||
|
open: string;
|
||||||
|
upgraded: string;
|
||||||
|
};
|
||||||
|
multiplexer?: string;
|
||||||
|
encryption?: string;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* Connection identifier.
|
||||||
|
*/
|
||||||
|
id: any;
|
||||||
|
/**
|
||||||
|
* Observed multiaddr of the local peer
|
||||||
|
*/
|
||||||
|
localAddr: import("multiaddr");
|
||||||
|
/**
|
||||||
|
* Observed multiaddr of the remote peer
|
||||||
|
*/
|
||||||
|
remoteAddr: import("multiaddr");
|
||||||
|
/**
|
||||||
|
* Local peer id.
|
||||||
|
*/
|
||||||
|
localPeer: import("peer-id");
|
||||||
|
/**
|
||||||
|
* Remote peer id.
|
||||||
|
*/
|
||||||
|
remotePeer: import("peer-id");
|
||||||
|
/**
|
||||||
|
* Connection metadata.
|
||||||
|
*/
|
||||||
|
_stat: {
|
||||||
|
status: string;
|
||||||
|
direction: string;
|
||||||
|
timeline: {
|
||||||
|
open: string;
|
||||||
|
upgraded: string;
|
||||||
|
};
|
||||||
|
multiplexer?: string;
|
||||||
|
encryption?: string;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Reference to the new stream function of the multiplexer
|
||||||
|
*/
|
||||||
|
_newStream: Function;
|
||||||
|
/**
|
||||||
|
* Reference to the close function of the raw connection
|
||||||
|
*/
|
||||||
|
_close: Function;
|
||||||
|
/**
|
||||||
|
* Reference to the getStreams function of the muxer
|
||||||
|
*/
|
||||||
|
_getStreams: () => any[];
|
||||||
|
/**
|
||||||
|
* Connection streams registry
|
||||||
|
*/
|
||||||
|
registry: Map<any, any>;
|
||||||
|
/**
|
||||||
|
* User provided tags
|
||||||
|
* @type {string[]}
|
||||||
|
*/
|
||||||
|
tags: string[];
|
||||||
|
/**
|
||||||
|
* Get connection metadata
|
||||||
|
* @this {Connection}
|
||||||
|
*/
|
||||||
|
get stat(): {
|
||||||
|
status: string;
|
||||||
|
direction: string;
|
||||||
|
timeline: {
|
||||||
|
open: string;
|
||||||
|
upgraded: string;
|
||||||
|
};
|
||||||
|
multiplexer?: string;
|
||||||
|
encryption?: string;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Get all the streams of the muxer.
|
||||||
|
* @this {Connection}
|
||||||
|
*/
|
||||||
|
get streams(): any[];
|
||||||
|
/**
|
||||||
|
* Create a new stream from this connection
|
||||||
|
* @param {string[]} protocols intended protocol for the stream
|
||||||
|
* @return {Promise<{stream: Stream, protocol: string}>} with muxed+multistream-selected stream and selected protocol
|
||||||
|
*/
|
||||||
|
newStream(protocols: string[]): Promise<{
|
||||||
|
stream: any;
|
||||||
|
protocol: string;
|
||||||
|
}>;
|
||||||
|
/**
|
||||||
|
* Add a stream when it is opened to the registry.
|
||||||
|
* @param {*} muxedStream a muxed stream
|
||||||
|
* @param {object} properties the stream properties to be registered
|
||||||
|
* @param {string} properties.protocol the protocol used by the stream
|
||||||
|
* @param {object} properties.metadata metadata of the stream
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
addStream(muxedStream: any, { protocol, metadata }: {
|
||||||
|
protocol: string;
|
||||||
|
metadata: any;
|
||||||
|
}): void;
|
||||||
|
/**
|
||||||
|
* Remove stream registry after it is closed.
|
||||||
|
* @param {string} id identifier of the stream
|
||||||
|
*/
|
||||||
|
removeStream(id: string): void;
|
||||||
|
/**
|
||||||
|
* Close the connection.
|
||||||
|
* @return {Promise<void>}
|
||||||
|
*/
|
||||||
|
close(): Promise<void>;
|
||||||
|
_closing: any;
|
||||||
|
}
|
@ -66,7 +66,7 @@ class Connection {
|
|||||||
* @param {PeerId} properties.remotePeer remote peer-id.
|
* @param {PeerId} properties.remotePeer remote peer-id.
|
||||||
* @param {function} properties.newStream new stream muxer function.
|
* @param {function} properties.newStream new stream muxer function.
|
||||||
* @param {function} properties.close close raw connection function.
|
* @param {function} properties.close close raw connection function.
|
||||||
* @param {function} properties.getStreams get streams from muxer function.
|
* @param {function(): Stream[]} properties.getStreams get streams from muxer function.
|
||||||
* @param {object} properties.stat metadata of the connection.
|
* @param {object} properties.stat metadata of the connection.
|
||||||
* @param {string} properties.stat.direction connection establishment direction ("inbound" or "outbound").
|
* @param {string} properties.stat.direction connection establishment direction ("inbound" or "outbound").
|
||||||
* @param {object} properties.stat.timeline connection relevant events timestamp.
|
* @param {object} properties.stat.timeline connection relevant events timestamp.
|
||||||
@ -133,13 +133,14 @@ class Connection {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* User provided tags
|
* User provided tags
|
||||||
|
* @type {string[]}
|
||||||
*/
|
*/
|
||||||
this.tags = []
|
this.tags = []
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get connection metadata
|
* Get connection metadata
|
||||||
* @return {Object}
|
* @this {Connection}
|
||||||
*/
|
*/
|
||||||
get stat () {
|
get stat () {
|
||||||
return this._stat
|
return this._stat
|
||||||
@ -147,7 +148,7 @@ class Connection {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all the streams of the muxer.
|
* Get all the streams of the muxer.
|
||||||
* @return {Array<*>}
|
* @this {Connection}
|
||||||
*/
|
*/
|
||||||
get streams () {
|
get streams () {
|
||||||
return this._getStreams()
|
return this._getStreams()
|
||||||
@ -156,7 +157,7 @@ class Connection {
|
|||||||
/**
|
/**
|
||||||
* Create a new stream from this connection
|
* Create a new stream from this connection
|
||||||
* @param {string[]} protocols intended protocol for the stream
|
* @param {string[]} protocols intended protocol for the stream
|
||||||
* @return {Promise<object>} with muxed+multistream-selected stream and selected protocol
|
* @return {Promise<{stream: Stream, protocol: string}>} with muxed+multistream-selected stream and selected protocol
|
||||||
*/
|
*/
|
||||||
async newStream (protocols) {
|
async newStream (protocols) {
|
||||||
if (this.stat.status === Status.CLOSING) {
|
if (this.stat.status === Status.CLOSING) {
|
||||||
@ -205,7 +206,7 @@ class Connection {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Close the connection.
|
* Close the connection.
|
||||||
* @return {Promise}
|
* @return {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async close () {
|
async close () {
|
||||||
if (this.stat.status === Status.CLOSED) {
|
if (this.stat.status === Status.CLOSED) {
|
||||||
@ -226,4 +227,8 @@ class Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @module
|
||||||
|
* @type {typeof Connection}
|
||||||
|
*/
|
||||||
module.exports = withIs(Connection, { className: 'Connection', symbolName: '@libp2p/interface-connection/connection' })
|
module.exports = withIs(Connection, { className: 'Connection', symbolName: '@libp2p/interface-connection/connection' })
|
||||||
|
1
src/connection/index.d.ts
vendored
Normal file
1
src/connection/index.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
export var Connection: typeof import('./connection');
|
@ -1,3 +1,7 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @module connection/index
|
||||||
|
* @type {typeof import('./connection')}
|
||||||
|
*/
|
||||||
exports.Connection = require('./connection')
|
exports.Connection = require('./connection')
|
||||||
|
3
src/connection/status.d.ts
vendored
Normal file
3
src/connection/status.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export declare const OPEN: string;
|
||||||
|
export declare const CLOSING: string;
|
||||||
|
export declare const CLOSED: string;
|
15
src/crypto/errors.d.ts
vendored
Normal file
15
src/crypto/errors.d.ts
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export class UnexpectedPeerError extends Error {
|
||||||
|
static get code(): string;
|
||||||
|
constructor(message?: string);
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
|
export class InvalidCryptoExchangeError extends Error {
|
||||||
|
static get code(): string;
|
||||||
|
constructor(message?: string);
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
|
export class InvalidCryptoTransmissionError extends Error {
|
||||||
|
static get code(): string;
|
||||||
|
constructor(message?: string);
|
||||||
|
code: string;
|
||||||
|
}
|
0
src/index.d.ts
vendored
Normal file
0
src/index.d.ts
vendored
Normal file
4
src/pubsub/errors.d.ts
vendored
Normal file
4
src/pubsub/errors.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export namespace codes {
|
||||||
|
export const ERR_MISSING_SIGNATURE: string;
|
||||||
|
export const ERR_INVALID_SIGNATURE: string;
|
||||||
|
}
|
307
src/pubsub/index.d.ts
vendored
Normal file
307
src/pubsub/index.d.ts
vendored
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
export = PubsubBaseProtocol;
|
||||||
|
/**
|
||||||
|
* @typedef {Object} InMessage
|
||||||
|
* @property {string} [from]
|
||||||
|
* @property {string} receivedFrom
|
||||||
|
* @property {string[]} topicIDs
|
||||||
|
* @property {Uint8Array} [seqno]
|
||||||
|
* @property {Uint8Array} data
|
||||||
|
* @property {Uint8Array} [signature]
|
||||||
|
* @property {Uint8Array} [key]
|
||||||
|
*
|
||||||
|
* @typedef PeerId
|
||||||
|
* @type import('peer-id')
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* PubsubBaseProtocol handles the peers and connections logic for pubsub routers
|
||||||
|
* and specifies the API that pubsub routers should have.
|
||||||
|
*/
|
||||||
|
declare class PubsubBaseProtocol {
|
||||||
|
/**
|
||||||
|
* @param {Object} props
|
||||||
|
* @param {String} props.debugName log namespace
|
||||||
|
* @param {Array<string>|string} props.multicodecs protocol identificers to connect
|
||||||
|
* @param {Libp2p} props.libp2p
|
||||||
|
* @param {boolean} [props.signMessages = true] if messages should be signed
|
||||||
|
* @param {boolean} [props.strictSigning = true] if message signing should be required
|
||||||
|
* @param {boolean} [props.canRelayMessage = false] if can relay messages not subscribed
|
||||||
|
* @param {boolean} [props.emitSelf = false] if publish should emit to self, if subscribed
|
||||||
|
* @abstract
|
||||||
|
*/
|
||||||
|
constructor({ debugName, multicodecs, libp2p, signMessages, strictSigning, canRelayMessage, emitSelf }: {
|
||||||
|
debugName: string;
|
||||||
|
multicodecs: string | string[];
|
||||||
|
libp2p: any;
|
||||||
|
signMessages?: boolean;
|
||||||
|
strictSigning?: boolean;
|
||||||
|
canRelayMessage?: boolean;
|
||||||
|
emitSelf?: boolean;
|
||||||
|
});
|
||||||
|
log: any;
|
||||||
|
/**
|
||||||
|
* @type {Array<string>}
|
||||||
|
*/
|
||||||
|
multicodecs: Array<string>;
|
||||||
|
_libp2p: any;
|
||||||
|
registrar: any;
|
||||||
|
/**
|
||||||
|
* @type {PeerId}
|
||||||
|
*/
|
||||||
|
peerId: PeerId;
|
||||||
|
started: boolean;
|
||||||
|
/**
|
||||||
|
* Map of topics to which peers are subscribed to
|
||||||
|
*
|
||||||
|
* @type {Map<string, Set<string>>}
|
||||||
|
*/
|
||||||
|
topics: Map<string, Set<string>>;
|
||||||
|
/**
|
||||||
|
* List of our subscriptions
|
||||||
|
* @type {Set<string>}
|
||||||
|
*/
|
||||||
|
subscriptions: Set<string>;
|
||||||
|
/**
|
||||||
|
* Map of peer streams
|
||||||
|
*
|
||||||
|
* @type {Map<string, import('./peer-streams')>}
|
||||||
|
*/
|
||||||
|
peers: Map<string, import('./peer-streams')>;
|
||||||
|
signMessages: boolean;
|
||||||
|
/**
|
||||||
|
* If message signing should be required for incoming messages
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
strictSigning: boolean;
|
||||||
|
/**
|
||||||
|
* If router can relay received messages, even if not subscribed
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
canRelayMessage: boolean;
|
||||||
|
/**
|
||||||
|
* if publish should emit to self, if subscribed
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
emitSelf: boolean;
|
||||||
|
/**
|
||||||
|
* Topic validator function
|
||||||
|
* @typedef {function(string, InMessage): Promise<void>} validator
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Topic validator map
|
||||||
|
*
|
||||||
|
* Keyed by topic
|
||||||
|
* Topic validators are functions with the following input:
|
||||||
|
* @type {Map<string, validator>}
|
||||||
|
*/
|
||||||
|
topicValidators: Map<string, validator>;
|
||||||
|
_registrarId: any;
|
||||||
|
/**
|
||||||
|
* On an inbound stream opened.
|
||||||
|
* @private
|
||||||
|
* @param {Object} props
|
||||||
|
* @param {string} props.protocol
|
||||||
|
* @param {DuplexIterableStream} props.stream
|
||||||
|
* @param {Connection} props.connection connection
|
||||||
|
*/
|
||||||
|
_onIncomingStream({ protocol, stream, connection }: {
|
||||||
|
protocol: string;
|
||||||
|
stream: any;
|
||||||
|
connection: any;
|
||||||
|
}): void;
|
||||||
|
/**
|
||||||
|
* Registrar notifies an established connection with pubsub protocol.
|
||||||
|
* @private
|
||||||
|
* @param {PeerId} peerId remote peer-id
|
||||||
|
* @param {Connection} conn connection to the peer
|
||||||
|
*/
|
||||||
|
_onPeerConnected(peerId: import("peer-id"), conn: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registrar notifies a closing connection with pubsub protocol.
|
||||||
|
* @private
|
||||||
|
* @param {PeerId} peerId peerId
|
||||||
|
* @param {Error} err error for connection end
|
||||||
|
*/
|
||||||
|
_onPeerDisconnected(peerId: import("peer-id"), err: Error): void;
|
||||||
|
/**
|
||||||
|
* Register the pubsub protocol onto the libp2p node.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
start(): void;
|
||||||
|
/**
|
||||||
|
* Unregister the pubsub protocol and the streams with other peers will be closed.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
stop(): void;
|
||||||
|
/**
|
||||||
|
* Notifies the router that a peer has been connected
|
||||||
|
* @private
|
||||||
|
* @param {PeerId} peerId
|
||||||
|
* @param {string} protocol
|
||||||
|
* @returns {PeerStreams}
|
||||||
|
*/
|
||||||
|
_addPeer(peerId: import("peer-id"), protocol: string): import("./peer-streams");
|
||||||
|
/**
|
||||||
|
* Notifies the router that a peer has been disconnected.
|
||||||
|
* @private
|
||||||
|
* @param {PeerId} peerId
|
||||||
|
* @returns {PeerStreams | undefined}
|
||||||
|
*/
|
||||||
|
_removePeer(peerId: import("peer-id")): import("./peer-streams");
|
||||||
|
/**
|
||||||
|
* Responsible for processing each RPC message received by other peers.
|
||||||
|
* @param {string} idB58Str peer id string in base58
|
||||||
|
* @param {DuplexIterableStream} stream inbound stream
|
||||||
|
* @param {PeerStreams} peerStreams PubSub peer
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
_processMessages(idB58Str: string, stream: any, peerStreams: import("./peer-streams")): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Handles an rpc request from a peer
|
||||||
|
* @param {String} idB58Str
|
||||||
|
* @param {PeerStreams} peerStreams
|
||||||
|
* @param {RPC} rpc
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
_processRpc(idB58Str: string, peerStreams: import("./peer-streams"), rpc: any): boolean;
|
||||||
|
/**
|
||||||
|
* Handles a subscription change from a peer
|
||||||
|
* @param {string} id
|
||||||
|
* @param {RPC.SubOpt} subOpt
|
||||||
|
*/
|
||||||
|
_processRpcSubOpt(id: string, subOpt: any): void;
|
||||||
|
/**
|
||||||
|
* Handles an message from a peer
|
||||||
|
* @param {InMessage} msg
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
_processRpcMessage(msg: InMessage): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Emit a message from a peer
|
||||||
|
* @param {InMessage} message
|
||||||
|
*/
|
||||||
|
_emitMessage(message: InMessage): void;
|
||||||
|
/**
|
||||||
|
* The default msgID implementation
|
||||||
|
* Child class can override this.
|
||||||
|
* @param {RPC.Message} msg the message object
|
||||||
|
* @returns {string} message id as string
|
||||||
|
*/
|
||||||
|
getMsgId(msg: any): string;
|
||||||
|
/**
|
||||||
|
* Whether to accept a message from a peer
|
||||||
|
* Override to create a graylist
|
||||||
|
* @override
|
||||||
|
* @param {string} id
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
_acceptFrom(id: string): boolean;
|
||||||
|
/**
|
||||||
|
* Decode Uint8Array into an RPC object.
|
||||||
|
* This can be override to use a custom router protobuf.
|
||||||
|
* @param {Uint8Array} bytes
|
||||||
|
* @returns {RPC}
|
||||||
|
*/
|
||||||
|
_decodeRpc(bytes: Uint8Array): any;
|
||||||
|
/**
|
||||||
|
* Encode RPC object into a Uint8Array.
|
||||||
|
* This can be override to use a custom router protobuf.
|
||||||
|
* @param {RPC} rpc
|
||||||
|
* @returns {Uint8Array}
|
||||||
|
*/
|
||||||
|
_encodeRpc(rpc: any): Uint8Array;
|
||||||
|
/**
|
||||||
|
* Send an rpc object to a peer
|
||||||
|
* @param {string} id peer id
|
||||||
|
* @param {RPC} rpc
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
_sendRpc(id: string, rpc: any): void;
|
||||||
|
/**
|
||||||
|
* Send subscroptions to a peer
|
||||||
|
* @param {string} id peer id
|
||||||
|
* @param {string[]} topics
|
||||||
|
* @param {boolean} subscribe set to false for unsubscriptions
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
_sendSubscriptions(id: string, topics: string[], subscribe: boolean): void;
|
||||||
|
/**
|
||||||
|
* Validates the given message. The signature will be checked for authenticity.
|
||||||
|
* Throws an error on invalid messages
|
||||||
|
* @param {InMessage} message
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
validate(message: InMessage): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Normalizes the message and signs it, if signing is enabled.
|
||||||
|
* Should be used by the routers to create the message to send.
|
||||||
|
* @private
|
||||||
|
* @param {Message} message
|
||||||
|
* @returns {Promise<Message>}
|
||||||
|
*/
|
||||||
|
_buildMessage(message: any): Promise<any>;
|
||||||
|
/**
|
||||||
|
* Get a list of the peer-ids that are subscribed to one topic.
|
||||||
|
* @param {string} topic
|
||||||
|
* @returns {Array<string>}
|
||||||
|
*/
|
||||||
|
getSubscribers(topic: string): string[];
|
||||||
|
/**
|
||||||
|
* Publishes messages to all subscribed peers
|
||||||
|
* @override
|
||||||
|
* @param {string} topic
|
||||||
|
* @param {Buffer} message
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
publish(topic: string, message: Buffer): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Overriding the implementation of publish should handle the appropriate algorithms for the publish/subscriber implementation.
|
||||||
|
* For example, a Floodsub implementation might simply publish each message to each topic for every peer
|
||||||
|
* @abstract
|
||||||
|
* @param {InMessage} message
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
_publish(message: InMessage): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Subscribes to a given topic.
|
||||||
|
* @abstract
|
||||||
|
* @param {string} topic
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
subscribe(topic: string): void;
|
||||||
|
/**
|
||||||
|
* Unsubscribe from the given topic.
|
||||||
|
* @override
|
||||||
|
* @param {string} topic
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
unsubscribe(topic: string): void;
|
||||||
|
/**
|
||||||
|
* Get the list of topics which the peer is subscribed to.
|
||||||
|
* @override
|
||||||
|
* @returns {Array<String>}
|
||||||
|
*/
|
||||||
|
getTopics(): string[];
|
||||||
|
}
|
||||||
|
declare namespace PubsubBaseProtocol {
|
||||||
|
export { message, utils, InMessage, PeerId };
|
||||||
|
}
|
||||||
|
type PeerId = import("peer-id");
|
||||||
|
/**
|
||||||
|
* Topic validator function
|
||||||
|
*/
|
||||||
|
type validator = (arg0: string, arg1: InMessage) => Promise<void>;
|
||||||
|
type InMessage = {
|
||||||
|
from?: string;
|
||||||
|
receivedFrom: string;
|
||||||
|
topicIDs: string[];
|
||||||
|
seqno?: Uint8Array;
|
||||||
|
data: Uint8Array;
|
||||||
|
signature?: Uint8Array;
|
||||||
|
key?: Uint8Array;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @type {typeof import('./message')}
|
||||||
|
*/
|
||||||
|
declare const message: typeof import('./message');
|
||||||
|
declare const utils: typeof import("./utils");
|
@ -8,9 +8,13 @@ const pipe = require('it-pipe')
|
|||||||
|
|
||||||
const MulticodecTopology = require('../topology/multicodec-topology')
|
const MulticodecTopology = require('../topology/multicodec-topology')
|
||||||
const { codes } = require('./errors')
|
const { codes } = require('./errors')
|
||||||
|
/**
|
||||||
|
* @type {typeof import('./message')}
|
||||||
|
*/
|
||||||
const message = require('./message')
|
const message = require('./message')
|
||||||
const PeerStreams = require('./peer-streams')
|
const PeerStreams = require('./peer-streams')
|
||||||
const utils = require('./utils')
|
const utils = require('./utils')
|
||||||
|
|
||||||
const {
|
const {
|
||||||
signMessage,
|
signMessage,
|
||||||
verifySignature
|
verifySignature
|
||||||
@ -18,12 +22,16 @@ const {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} InMessage
|
* @typedef {Object} InMessage
|
||||||
* @property {string} from
|
* @property {string} [from]
|
||||||
* @property {string} receivedFrom
|
* @property {string} receivedFrom
|
||||||
* @property {string[]} topicIDs
|
* @property {string[]} topicIDs
|
||||||
|
* @property {Uint8Array} [seqno]
|
||||||
* @property {Uint8Array} data
|
* @property {Uint8Array} data
|
||||||
* @property {Uint8Array} [signature]
|
* @property {Uint8Array} [signature]
|
||||||
* @property {Uint8Array} [key]
|
* @property {Uint8Array} [key]
|
||||||
|
*
|
||||||
|
* @typedef PeerId
|
||||||
|
* @type import('peer-id')
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,9 +76,15 @@ class PubsubBaseProtocol extends EventEmitter {
|
|||||||
this.log = debug(debugName)
|
this.log = debug(debugName)
|
||||||
this.log.err = debug(`${debugName}:error`)
|
this.log.err = debug(`${debugName}:error`)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array<string>}
|
||||||
|
*/
|
||||||
this.multicodecs = utils.ensureArray(multicodecs)
|
this.multicodecs = utils.ensureArray(multicodecs)
|
||||||
this._libp2p = libp2p
|
this._libp2p = libp2p
|
||||||
this.registrar = libp2p.registrar
|
this.registrar = libp2p.registrar
|
||||||
|
/**
|
||||||
|
* @type {PeerId}
|
||||||
|
*/
|
||||||
this.peerId = libp2p.peerId
|
this.peerId = libp2p.peerId
|
||||||
|
|
||||||
this.started = false
|
this.started = false
|
||||||
@ -91,7 +105,7 @@ class PubsubBaseProtocol extends EventEmitter {
|
|||||||
/**
|
/**
|
||||||
* Map of peer streams
|
* Map of peer streams
|
||||||
*
|
*
|
||||||
* @type {Map<string, PeerStreams>}
|
* @type {Map<string, import('./peer-streams')>}
|
||||||
*/
|
*/
|
||||||
this.peers = new Map()
|
this.peers = new Map()
|
||||||
|
|
||||||
@ -118,7 +132,7 @@ class PubsubBaseProtocol extends EventEmitter {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Topic validator function
|
* Topic validator function
|
||||||
* @typedef {function(string, RPC): boolean} validator
|
* @typedef {function(string, InMessage): Promise<void>} validator
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Topic validator map
|
* Topic validator map
|
||||||
|
5
src/pubsub/message/index.d.ts
vendored
Normal file
5
src/pubsub/message/index.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export var rpc: any;
|
||||||
|
export var td: any;
|
||||||
|
export var RPC: any;
|
||||||
|
export var Message: any;
|
||||||
|
export var SubOpts: any;
|
@ -6,6 +6,9 @@ const rpcProto = protons(require('./rpc.proto.js'))
|
|||||||
const RPC = rpcProto.RPC
|
const RPC = rpcProto.RPC
|
||||||
const topicDescriptorProto = protons(require('./topic-descriptor.proto.js'))
|
const topicDescriptorProto = protons(require('./topic-descriptor.proto.js'))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @module pubsub/message/index
|
||||||
|
*/
|
||||||
exports = module.exports
|
exports = module.exports
|
||||||
exports.rpc = rpcProto
|
exports.rpc = rpcProto
|
||||||
exports.td = topicDescriptorProto
|
exports.td = topicDescriptorProto
|
||||||
|
2
src/pubsub/message/rpc.proto.d.ts
vendored
Normal file
2
src/pubsub/message/rpc.proto.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
declare const _exports: string;
|
||||||
|
export = _exports;
|
23
src/pubsub/message/sign.d.ts
vendored
Normal file
23
src/pubsub/message/sign.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* Returns the PublicKey associated with the given message.
|
||||||
|
* If no, valid PublicKey can be retrieved an error will be returned.
|
||||||
|
*
|
||||||
|
* @param {InMessage} message
|
||||||
|
* @returns {Promise<PublicKey>}
|
||||||
|
*/
|
||||||
|
export function messagePublicKey(message: any): Promise<any>;
|
||||||
|
/**
|
||||||
|
* Signs the provided message with the given `peerId`
|
||||||
|
*
|
||||||
|
* @param {PeerId} peerId
|
||||||
|
* @param {Message} message
|
||||||
|
* @returns {Promise<Message>}
|
||||||
|
*/
|
||||||
|
export function signMessage(peerId: import("peer-id"), message: any): Promise<any>;
|
||||||
|
export const SignPrefix: any;
|
||||||
|
/**
|
||||||
|
* Verifies the signature of the given message
|
||||||
|
* @param {InMessage} message
|
||||||
|
* @returns {Promise<Boolean>}
|
||||||
|
*/
|
||||||
|
export function verifySignature(message: any): Promise<boolean>;
|
2
src/pubsub/message/topic-descriptor.proto.d.ts
vendored
Normal file
2
src/pubsub/message/topic-descriptor.proto.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
declare const _exports: string;
|
||||||
|
export = _exports;
|
113
src/pubsub/peer-streams.d.ts
vendored
Normal file
113
src/pubsub/peer-streams.d.ts
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
export = PeerStreams;
|
||||||
|
/**
|
||||||
|
* @callback Sink
|
||||||
|
* @param {Uint8Array} source
|
||||||
|
* @returns {Promise<Uint8Array>}
|
||||||
|
*
|
||||||
|
* @typedef {object} DuplexIterableStream
|
||||||
|
* @property {Sink} sink
|
||||||
|
* @property {() AsyncIterator<Uint8Array>} source
|
||||||
|
*
|
||||||
|
* @typedef PeerId
|
||||||
|
* @type import('peer-id')
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Thin wrapper around a peer's inbound / outbound pubsub streams
|
||||||
|
*/
|
||||||
|
declare class PeerStreams {
|
||||||
|
/**
|
||||||
|
* @param {object} properties properties of the PeerStreams.
|
||||||
|
* @param {PeerId} properties.id
|
||||||
|
* @param {string} properties.protocol
|
||||||
|
*/
|
||||||
|
constructor({ id, protocol }: {
|
||||||
|
id: import("peer-id");
|
||||||
|
protocol: string;
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* @type {import('peer-id')}
|
||||||
|
*/
|
||||||
|
id: import('peer-id');
|
||||||
|
/**
|
||||||
|
* Established protocol
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
protocol: string;
|
||||||
|
/**
|
||||||
|
* The raw outbound stream, as retrieved from conn.newStream
|
||||||
|
* @private
|
||||||
|
* @type {DuplexIterableStream}
|
||||||
|
*/
|
||||||
|
_rawOutboundStream: DuplexIterableStream;
|
||||||
|
/**
|
||||||
|
* The raw inbound stream, as retrieved from the callback from libp2p.handle
|
||||||
|
* @private
|
||||||
|
* @type {DuplexIterableStream}
|
||||||
|
*/
|
||||||
|
_rawInboundStream: DuplexIterableStream;
|
||||||
|
/**
|
||||||
|
* An AbortController for controlled shutdown of the inbound stream
|
||||||
|
* @private
|
||||||
|
* @type {typeof AbortController}
|
||||||
|
*/
|
||||||
|
_inboundAbortController: typeof AbortController;
|
||||||
|
/**
|
||||||
|
* Write stream -- its preferable to use the write method
|
||||||
|
* @type {import('it-pushable').Pushable<Uint8Array>>}
|
||||||
|
*/
|
||||||
|
outboundStream: import('it-pushable').Pushable<Uint8Array>;
|
||||||
|
/**
|
||||||
|
* Read stream
|
||||||
|
* @type {DuplexIterableStream}
|
||||||
|
*/
|
||||||
|
inboundStream: DuplexIterableStream;
|
||||||
|
/**
|
||||||
|
* Do we have a connection to read from?
|
||||||
|
*
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
get isReadable(): boolean;
|
||||||
|
/**
|
||||||
|
* Do we have a connection to write on?
|
||||||
|
*
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
get isWritable(): boolean;
|
||||||
|
/**
|
||||||
|
* Send a message to this peer.
|
||||||
|
* Throws if there is no `stream` to write to available.
|
||||||
|
*
|
||||||
|
* @param {Uint8Array} data
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
write(data: Uint8Array): void;
|
||||||
|
/**
|
||||||
|
* Attach a raw inbound stream and setup a read stream
|
||||||
|
*
|
||||||
|
* @param {DuplexIterableStream} stream
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
attachInboundStream(stream: DuplexIterableStream): void;
|
||||||
|
/**
|
||||||
|
* Attach a raw outbound stream and setup a write stream
|
||||||
|
*
|
||||||
|
* @param {Stream} stream
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
attachOutboundStream(stream: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Closes the open connection to peer
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
close(): void;
|
||||||
|
}
|
||||||
|
declare namespace PeerStreams {
|
||||||
|
export { Sink, DuplexIterableStream, PeerId };
|
||||||
|
}
|
||||||
|
type DuplexIterableStream = {
|
||||||
|
sink: Sink;
|
||||||
|
source: () => AsyncIterator<Uint8Array, any, undefined>;
|
||||||
|
};
|
||||||
|
declare const AbortController: typeof import("abort-controller");
|
||||||
|
type Sink = (source: Uint8Array) => Promise<Uint8Array>;
|
||||||
|
type PeerId = import("peer-id");
|
@ -12,19 +12,33 @@ const debug = require('debug')
|
|||||||
const log = debug('libp2p-pubsub:peer-streams')
|
const log = debug('libp2p-pubsub:peer-streams')
|
||||||
log.error = debug('libp2p-pubsub:peer-streams:error')
|
log.error = debug('libp2p-pubsub:peer-streams:error')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @callback Sink
|
||||||
|
* @param {Uint8Array} source
|
||||||
|
* @returns {Promise<Uint8Array>}
|
||||||
|
*
|
||||||
|
* @typedef {object} DuplexIterableStream
|
||||||
|
* @property {Sink} sink
|
||||||
|
* @property {() AsyncIterator<Uint8Array>} source
|
||||||
|
*
|
||||||
|
* @typedef PeerId
|
||||||
|
* @type import('peer-id')
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thin wrapper around a peer's inbound / outbound pubsub streams
|
* Thin wrapper around a peer's inbound / outbound pubsub streams
|
||||||
*/
|
*/
|
||||||
class PeerStreams extends EventEmitter {
|
class PeerStreams extends EventEmitter {
|
||||||
/**
|
/**
|
||||||
* @param {PeerId} id
|
* @param {object} properties properties of the PeerStreams.
|
||||||
* @param {string} protocol
|
* @param {PeerId} properties.id
|
||||||
|
* @param {string} properties.protocol
|
||||||
*/
|
*/
|
||||||
constructor ({ id, protocol }) {
|
constructor ({ id, protocol }) {
|
||||||
super()
|
super()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {PeerId}
|
* @type {import('peer-id')}
|
||||||
*/
|
*/
|
||||||
this.id = id
|
this.id = id
|
||||||
/**
|
/**
|
||||||
@ -47,12 +61,12 @@ class PeerStreams extends EventEmitter {
|
|||||||
/**
|
/**
|
||||||
* An AbortController for controlled shutdown of the inbound stream
|
* An AbortController for controlled shutdown of the inbound stream
|
||||||
* @private
|
* @private
|
||||||
* @type {AbortController}
|
* @type {typeof AbortController}
|
||||||
*/
|
*/
|
||||||
this._inboundAbortController = null
|
this._inboundAbortController = null
|
||||||
/**
|
/**
|
||||||
* Write stream -- its preferable to use the write method
|
* Write stream -- its preferable to use the write method
|
||||||
* @type {Pushable}
|
* @type {import('it-pushable').Pushable<Uint8Array>>}
|
||||||
*/
|
*/
|
||||||
this.outboundStream = null
|
this.outboundStream = null
|
||||||
/**
|
/**
|
||||||
@ -85,7 +99,7 @@ class PeerStreams extends EventEmitter {
|
|||||||
* Throws if there is no `stream` to write to available.
|
* Throws if there is no `stream` to write to available.
|
||||||
*
|
*
|
||||||
* @param {Uint8Array} data
|
* @param {Uint8Array} data
|
||||||
* @returns {undefined}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
write (data) {
|
write (data) {
|
||||||
if (!this.isWritable) {
|
if (!this.isWritable) {
|
||||||
|
6
src/pubsub/utils.d.ts
vendored
Normal file
6
src/pubsub/utils.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export function randomSeqno(): Uint8Array;
|
||||||
|
export function msgId(from: string, seqno: Uint8Array): string;
|
||||||
|
export function anyMatch(a: any[] | Set<any>, b: any[] | Set<any>): boolean;
|
||||||
|
export function ensureArray(maybeArray: any): any[];
|
||||||
|
export function normalizeInRpcMessage(message: any, peerId: string): any;
|
||||||
|
export function normalizeOutRpcMessage(message: any): any;
|
@ -3,7 +3,6 @@
|
|||||||
const randomBytes = require('libp2p-crypto/src/random-bytes')
|
const randomBytes = require('libp2p-crypto/src/random-bytes')
|
||||||
const uint8ArrayToString = require('uint8arrays/to-string')
|
const uint8ArrayToString = require('uint8arrays/to-string')
|
||||||
const uint8ArrayFromString = require('uint8arrays/from-string')
|
const uint8ArrayFromString = require('uint8arrays/from-string')
|
||||||
|
|
||||||
exports = module.exports
|
exports = module.exports
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,10 +70,9 @@ exports.ensureArray = (maybeArray) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensures `message.from` is base58 encoded
|
* Ensures `message.from` is base58 encoded
|
||||||
* @param {Object} message
|
* @param {object} message
|
||||||
* @param {Uint8Array|String} message.from
|
|
||||||
* @param {String} peerId
|
* @param {String} peerId
|
||||||
* @return {Object}
|
* @return {object}
|
||||||
*/
|
*/
|
||||||
exports.normalizeInRpcMessage = (message, peerId) => {
|
exports.normalizeInRpcMessage = (message, peerId) => {
|
||||||
const m = Object.assign({}, message)
|
const m = Object.assign({}, message)
|
||||||
@ -87,6 +85,10 @@ exports.normalizeInRpcMessage = (message, peerId) => {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {object} message
|
||||||
|
* @return {object}
|
||||||
|
*/
|
||||||
exports.normalizeOutRpcMessage = (message) => {
|
exports.normalizeOutRpcMessage = (message) => {
|
||||||
const m = Object.assign({}, message)
|
const m = Object.assign({}, message)
|
||||||
if (typeof message.from === 'string' || message.from instanceof String) {
|
if (typeof message.from === 'string' || message.from instanceof String) {
|
||||||
|
23
src/record/index.d.ts
vendored
Normal file
23
src/record/index.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
export = Record;
|
||||||
|
/**
|
||||||
|
* Record is the base implementation of a record that can be used as the payload of a libp2p envelope.
|
||||||
|
*/
|
||||||
|
declare class Record {
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {String} domain signature domain
|
||||||
|
* @param {Uint8Array} codec identifier of the type of record
|
||||||
|
*/
|
||||||
|
constructor(domain: string, codec: Uint8Array);
|
||||||
|
domain: string;
|
||||||
|
codec: Uint8Array;
|
||||||
|
/**
|
||||||
|
* Marshal a record to be used in an envelope.
|
||||||
|
*/
|
||||||
|
marshal(): void;
|
||||||
|
/**
|
||||||
|
* Verifies if the other provided Record is identical to this one.
|
||||||
|
* @param {Record} other
|
||||||
|
*/
|
||||||
|
equals(other: Record): void;
|
||||||
|
}
|
42
src/topology/index.d.ts
vendored
Normal file
42
src/topology/index.d.ts
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
declare const _exports: Topology;
|
||||||
|
export = _exports;
|
||||||
|
declare class Topology {
|
||||||
|
/**
|
||||||
|
* @param {Object} props
|
||||||
|
* @param {number} props.min minimum needed connections (default: 0)
|
||||||
|
* @param {number} props.max maximum needed connections (default: Infinity)
|
||||||
|
* @param {Object} [props.handlers]
|
||||||
|
* @param {function} [props.handlers.onConnect] protocol "onConnect" handler
|
||||||
|
* @param {function} [props.handlers.onDisconnect] protocol "onDisconnect" handler
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
constructor({ min, max, handlers }: {
|
||||||
|
min: number;
|
||||||
|
max: number;
|
||||||
|
handlers?: {
|
||||||
|
onConnect?: Function;
|
||||||
|
onDisconnect?: Function;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
min: number;
|
||||||
|
max: number;
|
||||||
|
_onConnect: Function;
|
||||||
|
_onDisconnect: Function;
|
||||||
|
/**
|
||||||
|
* Set of peers that support the protocol.
|
||||||
|
* @type {Set<string>}
|
||||||
|
*/
|
||||||
|
peers: Set<string>;
|
||||||
|
set registrar(arg: any);
|
||||||
|
_registrar: any;
|
||||||
|
/**
|
||||||
|
* @typedef PeerId
|
||||||
|
* @type {import('peer-id')}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Notify about peer disconnected event.
|
||||||
|
* @param {PeerId} peerId
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
disconnect(peerId: import("peer-id")): void;
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const withIs = require('class-is')
|
const withIs = require('class-is')
|
||||||
|
|
||||||
const noop = () => {}
|
const noop = () => {}
|
||||||
|
|
||||||
class Topology {
|
class Topology {
|
||||||
@ -37,6 +36,11 @@ class Topology {
|
|||||||
this._registrar = registrar
|
this._registrar = registrar
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef PeerId
|
||||||
|
* @type {import('peer-id')}
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify about peer disconnected event.
|
* Notify about peer disconnected event.
|
||||||
* @param {PeerId} peerId
|
* @param {PeerId} peerId
|
||||||
@ -47,4 +51,8 @@ class Topology {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @module
|
||||||
|
* @type {Topology}
|
||||||
|
*/
|
||||||
module.exports = withIs(Topology, { className: 'Topology', symbolName: '@libp2p/js-interfaces/topology' })
|
module.exports = withIs(Topology, { className: 'Topology', symbolName: '@libp2p/js-interfaces/topology' })
|
||||||
|
52
src/topology/multicodec-topology.d.ts
vendored
Normal file
52
src/topology/multicodec-topology.d.ts
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
declare const _exports: MulticodecTopology;
|
||||||
|
export = _exports;
|
||||||
|
declare class MulticodecTopology {
|
||||||
|
/**
|
||||||
|
* @param {Object} props
|
||||||
|
* @param {number} props.min minimum needed connections (default: 0)
|
||||||
|
* @param {number} props.max maximum needed connections (default: Infinity)
|
||||||
|
* @param {Array<string>} props.multicodecs protocol multicodecs
|
||||||
|
* @param {Object} props.handlers
|
||||||
|
* @param {function} props.handlers.onConnect protocol "onConnect" handler
|
||||||
|
* @param {function} props.handlers.onDisconnect protocol "onDisconnect" handler
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
constructor({ min, max, multicodecs, handlers }: {
|
||||||
|
min: number;
|
||||||
|
max: number;
|
||||||
|
multicodecs: string[];
|
||||||
|
handlers: {
|
||||||
|
onConnect: Function;
|
||||||
|
onDisconnect: Function;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
multicodecs: string[];
|
||||||
|
_registrar: any;
|
||||||
|
/**
|
||||||
|
* Check if a new peer support the multicodecs for this topology.
|
||||||
|
* @param {Object} props
|
||||||
|
* @param {PeerId} props.peerId
|
||||||
|
* @param {Array<string>} props.protocols
|
||||||
|
*/
|
||||||
|
_onProtocolChange({ peerId, protocols }: {
|
||||||
|
peerId: any;
|
||||||
|
protocols: string[];
|
||||||
|
}): void;
|
||||||
|
/**
|
||||||
|
* Verify if a new connected peer has a topology multicodec and call _onConnect.
|
||||||
|
* @param {Connection} connection
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
_onPeerConnect(connection: any): void;
|
||||||
|
set registrar(arg: any);
|
||||||
|
/**
|
||||||
|
* Update topology.
|
||||||
|
* @param {Array<{id: PeerId, multiaddrs: Array<Multiaddr>, protocols: Array<string>}>} peerDataIterable
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
_updatePeers(peerDataIterable: {
|
||||||
|
id: any;
|
||||||
|
multiaddrs: any[];
|
||||||
|
protocols: string[];
|
||||||
|
}[]): void;
|
||||||
|
}
|
@ -120,4 +120,8 @@ class MulticodecTopology extends Topology {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @module
|
||||||
|
* @type {MulticodecTopology}
|
||||||
|
*/
|
||||||
module.exports = withIs(MulticodecTopology, { className: 'MulticodecTopology', symbolName: '@libp2p/js-interfaces/topology/multicodec-topology' })
|
module.exports = withIs(MulticodecTopology, { className: 'MulticodecTopology', symbolName: '@libp2p/js-interfaces/topology/multicodec-topology' })
|
||||||
|
6
src/transport/errors.d.ts
vendored
Normal file
6
src/transport/errors.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export class AbortError extends Error {
|
||||||
|
static get code(): string;
|
||||||
|
static get type(): string;
|
||||||
|
code: string;
|
||||||
|
type: string;
|
||||||
|
}
|
18
tsconfig.json
Normal file
18
tsconfig.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"include": ["src/**/*.js"],
|
||||||
|
"exclude": ["src/**/tests/*", "src/utils"],
|
||||||
|
|
||||||
|
"compilerOptions": {
|
||||||
|
// Tells TypeScript to read JS files, as
|
||||||
|
// normally they are ignored as source files
|
||||||
|
"allowJs": true,
|
||||||
|
// Generate d.ts files
|
||||||
|
"declaration": true,
|
||||||
|
// This compiler run should
|
||||||
|
// only output d.ts files
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"rootDir": "./src",
|
||||||
|
"outDir": "./src"
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user