libp2p 0.36.0 → 0.36.1-902f10d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +13 -13
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -92
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/ping/index.d.ts +32 -25
- package/dist/src/ping/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/connection-manager/index.js +11 -0
- package/src/index.js +10 -8
- package/src/peer-store/address-book.js +1 -1
- package/src/ping/index.js +51 -52
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.js"],"names":[],"mappings":";AAsCA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH;IACE;;;;;;OAMG;IACH,oBAHW,MAAM,YACN,wBAAwB,EAgDlC;IA3CC,uBAAqB;IACrB,gBAA0C;IAE1C,cAAqF;IAOrF;;;;OAIG;IACH,aAFU,IAAI,MAAM,EAAE,MAAM,CAAC,CAM3B;IAEF;;;;OAIG;IACH,aAFU,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC,CAMjC;IAEF,kBAAqB;IACrB,YAAkB;IAuFpB;;;;;OAKG;IACH,sBAiBC;IA3GC,gCAGE;IAMJ;;OAEG;IACH,mBAGC;IAED;;;OAGG;IACH,cAYC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.js"],"names":[],"mappings":";AAsCA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH;IACE;;;;;;OAMG;IACH,oBAHW,MAAM,YACN,wBAAwB,EAgDlC;IA3CC,uBAAqB;IACrB,gBAA0C;IAE1C,cAAqF;IAOrF;;;;OAIG;IACH,aAFU,IAAI,MAAM,EAAE,MAAM,CAAC,CAM3B;IAEF;;;;OAIG;IACH,aAFU,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC,CAMjC;IAEF,kBAAqB;IACrB,YAAkB;IAuFpB;;;;;OAKG;IACH,sBAiBC;IA3GC,gCAGE;IAMJ;;OAEG;IACH,mBAGC;IAED;;;OAGG;IACH,cAYC;IA2KD;;;;;OAKG;IACH,0BAKC;IApLD;;;;OAIG;IACH,sBASC;IAED;;;;OAIG;IACH,wBAWC;IAED;;;;;;;OAOG;IACH,qBAJW,MAAM,SACN,MAAM,GACJ,IAAI,CAOhB;IA2BD;;;;OAIG;IACH,sBAFW,UAAU,iBA4BpB;IAED;;;;;OAKG;IACH,yBAHW,UAAU,GACR,IAAI,CAqBhB;IAED;;;;;OAKG;IACH,YAHW,MAAM,GACJ,UAAU,GAAC,IAAI,CAQ3B;IAED;;;;;OAKG;IACH,eAHW,MAAM,GACJ,UAAU,EAAE,CAexB;IAeD;;;;;;OAMG;IACH,uBAOC;IAED;;;;;OAKG;IACH,4BAqBC;CACF;;;;;;;;cA5UY,OAAO,KAAK,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -137,98 +137,6 @@ declare class Libp2p extends EventEmitter {
|
|
|
137
137
|
enabled: boolean;
|
|
138
138
|
};
|
|
139
139
|
peerStore: {
|
|
140
|
-
/**
|
|
141
|
-
* @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
|
|
142
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
143
|
-
* @typedef {import('libp2p-interfaces/src/transport/types').TransportFactory<any, any>} TransportFactory
|
|
144
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxerFactory} MuxerFactory
|
|
145
|
-
* @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule
|
|
146
|
-
* @typedef {import('libp2p-interfaces/src/peer-discovery/types').PeerDiscoveryFactory} PeerDiscoveryFactory
|
|
147
|
-
* @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule
|
|
148
|
-
* @typedef {import('libp2p-interfaces/src/crypto/types').Crypto} Crypto
|
|
149
|
-
* @typedef {import('libp2p-interfaces/src/pubsub')} Pubsub
|
|
150
|
-
* @typedef {import('libp2p-interfaces/src/pubsub').PubsubOptions} PubsubOptions
|
|
151
|
-
* @typedef {import('interface-datastore').Datastore} Datastore
|
|
152
|
-
* @typedef {import('./pnet')} Protector
|
|
153
|
-
* @typedef {import('./types').ConnectionGater} ConnectionGater
|
|
154
|
-
* @typedef {Object} PersistentPeerStoreOptions
|
|
155
|
-
* @property {number} [threshold]
|
|
156
|
-
*/
|
|
157
|
-
/**
|
|
158
|
-
* @typedef {Object} HandlerProps
|
|
159
|
-
* @property {Connection} connection
|
|
160
|
-
* @property {MuxedStream} stream
|
|
161
|
-
* @property {string} protocol
|
|
162
|
-
*
|
|
163
|
-
* @typedef {Object} DhtOptions
|
|
164
|
-
* @property {boolean} [enabled = false]
|
|
165
|
-
* @property {number} [kBucketSize = 20]
|
|
166
|
-
* @property {boolean} [clientMode]
|
|
167
|
-
* @property {import('libp2p-interfaces/src/types').DhtSelectors} [selectors]
|
|
168
|
-
* @property {import('libp2p-interfaces/src/types').DhtValidators} [validators]
|
|
169
|
-
*
|
|
170
|
-
* @typedef {Object} KeychainOptions
|
|
171
|
-
* @property {Datastore} [datastore]
|
|
172
|
-
*
|
|
173
|
-
* @typedef {Object} PeerStoreOptions
|
|
174
|
-
* @property {boolean} persistence
|
|
175
|
-
*
|
|
176
|
-
* @typedef {Object} PubsubLocalOptions
|
|
177
|
-
* @property {boolean} enabled
|
|
178
|
-
*
|
|
179
|
-
* @typedef {Object} MetricsOptions
|
|
180
|
-
* @property {boolean} enabled
|
|
181
|
-
*
|
|
182
|
-
* @typedef {Object} RelayOptions
|
|
183
|
-
* @property {boolean} [enabled = true]
|
|
184
|
-
* @property {import('./circuit').RelayAdvertiseOptions} [advertise]
|
|
185
|
-
* @property {import('./circuit').HopOptions} [hop]
|
|
186
|
-
* @property {import('./circuit').AutoRelayOptions} [autoRelay]
|
|
187
|
-
*
|
|
188
|
-
* @typedef {Object} Libp2pConfig
|
|
189
|
-
* @property {DhtOptions} [dht] dht module options
|
|
190
|
-
* @property {import('./nat-manager').NatManagerOptions} [nat]
|
|
191
|
-
* @property {Record<string, Object|boolean>} [peerDiscovery]
|
|
192
|
-
* @property {PubsubLocalOptions & PubsubOptions} [pubsub] pubsub module options
|
|
193
|
-
* @property {RelayOptions} [relay]
|
|
194
|
-
* @property {Record<string, Object>} [transport] transport options indexed by transport key
|
|
195
|
-
*
|
|
196
|
-
* @typedef {Object} Libp2pModules
|
|
197
|
-
* @property {TransportFactory[]} transport
|
|
198
|
-
* @property {MuxerFactory[]} streamMuxer
|
|
199
|
-
* @property {Crypto[]} connEncryption
|
|
200
|
-
* @property {PeerDiscoveryFactory[]} [peerDiscovery]
|
|
201
|
-
* @property {PeerRoutingModule[]} [peerRouting]
|
|
202
|
-
* @property {ContentRoutingModule[]} [contentRouting]
|
|
203
|
-
* @property {Object} [dht]
|
|
204
|
-
* @property {{new(...args: any[]): Pubsub}} [pubsub]
|
|
205
|
-
* @property {Protector} [connProtector]
|
|
206
|
-
*
|
|
207
|
-
* @typedef {Object} Libp2pOptions
|
|
208
|
-
* @property {Libp2pModules} modules libp2p modules to use
|
|
209
|
-
* @property {import('./address-manager').AddressManagerOptions} [addresses]
|
|
210
|
-
* @property {import('./connection-manager').ConnectionManagerOptions} [connectionManager]
|
|
211
|
-
* @property {Partial<import('./types').ConnectionGater>} [connectionGater]
|
|
212
|
-
* @property {Datastore} [datastore]
|
|
213
|
-
* @property {import('./dialer').DialerOptions} [dialer]
|
|
214
|
-
* @property {import('./identify/index').HostProperties} [host] libp2p host
|
|
215
|
-
* @property {KeychainOptions & import('./keychain/index').KeychainOptions} [keychain]
|
|
216
|
-
* @property {MetricsOptions & import('./metrics').MetricsOptions} [metrics]
|
|
217
|
-
* @property {import('./peer-routing').PeerRoutingOptions} [peerRouting]
|
|
218
|
-
* @property {PeerStoreOptions} [peerStore]
|
|
219
|
-
* @property {import('./transport-manager').TransportManagerOptions} [transportManager]
|
|
220
|
-
* @property {Libp2pConfig} [config]
|
|
221
|
-
*
|
|
222
|
-
* @typedef {Object} constructorOptions
|
|
223
|
-
* @property {PeerId} peerId
|
|
224
|
-
*
|
|
225
|
-
* @typedef {Object} CreateOptions
|
|
226
|
-
* @property {PeerId} [peerId]
|
|
227
|
-
*
|
|
228
|
-
* @extends {EventEmitter}
|
|
229
|
-
* @fires Libp2p#error Emitted when an error occurs
|
|
230
|
-
* @fires Libp2p#peer:discovery Emitted when a peer is discovered
|
|
231
|
-
*/
|
|
232
140
|
persistence: boolean;
|
|
233
141
|
threshold: number;
|
|
234
142
|
};
|
|
@@ -369,6 +277,7 @@ declare class Libp2p extends EventEmitter {
|
|
|
369
277
|
*/
|
|
370
278
|
private _onDiscoveryPeer;
|
|
371
279
|
fetchService: FetchService;
|
|
280
|
+
pingService: PingService;
|
|
372
281
|
/**
|
|
373
282
|
* Starts the libp2p node and all its subsystems
|
|
374
283
|
*
|
|
@@ -577,6 +486,7 @@ import IdentifyService = require("./identify");
|
|
|
577
486
|
import PeerRouting = require("./peer-routing");
|
|
578
487
|
import ContentRouting = require("./content-routing");
|
|
579
488
|
import FetchService = require("./fetch");
|
|
489
|
+
import PingService = require("./ping");
|
|
580
490
|
import { Multiaddr } from "multiaddr";
|
|
581
491
|
type Connection = import("libp2p-interfaces/src/connection/connection");
|
|
582
492
|
type CreateOptions = {
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AAqCA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH;IACE;;;;;;OAMG;IACH,uBAHW,aAAa,GAAG,aAAa,GAC3B,QAAQ,MAAM,CAAC,CAa3B;IAED;;;;;OAKG;IACH,sBAFW,aAAa,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AAqCA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH;IACE;;;;;;OAMG;IACH,uBAHW,aAAa,GAAG,aAAa,GAC3B,QAAQ,MAAM,CAAC,CAa3B;IAED;;;;;OAKG;IACH,sBAFW,aAAa,GAAG,kBAAkB,EA8L5C;IAxLC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAAwC;IAExC,qBAAqB;IACrB,QADW,MAAM,CACiB;IAClC,+DAAwC;IAQtC,6BAAsB;IAGxB,8BAA8B;IAC9B,iBADW,eAAe,CAYzB;IAED,qDAAqD;IACrD,WADW,OAAO,oBAAoB,EAAE,SAAS,CAK/C;IAGF;;;;;6CAAwC;IACxC,+BAA8E;IAS9E,wBAAqC;IACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAmC;IACnC,kBAAoB;IACpB,0BAA2B;IAG3B,qCAEE;IACF,0BAIE;IAQA,+BAGE;IAMJ,mBAME;IAGF,mCAIE;IAGF,uBAME;IAGF,qBAGE;IAiWJ;;;;;OAKG;IACH,kBAHW,MAAM,EAAE,GAAC,MAAM,mBACP,YAAY,KAAK,IAAI,iBAUvC;IAjWC,eAME;IAWA,yBAA4B;IAW5B,6CAA4D;IAc5D,UAGE;IAOF,qBAAqB;IACrB,+CAA8D;IAKhE,yBAAwC;IACxC,+BAA8C;IAsXhD;;;;;;OAMG;IACH,yBAQC;IAjYC,2BAA0C;IAC1C,yBAAwC;IAsB1C;;;;OAIG;IACH,SAFa,QAAQ,IAAI,CAAC,CA2BzB;IAED;;;;;OAKG;IACH,QAFa,QAAQ,IAAI,CAAC,CA8CzB;IAxCG,gCAAuB;IA0C3B;;;;;;OAMG;IACH,gBAFa,QAAQ,IAAI,CAAC,CAYzB;IAED,iCAEC;IAED;;;;;OAKG;IACH,wFAEC;IAED;;;;;;;;OAQG;IACH,WALW,MAAM,GAAC,SAAS,GAAC,MAAM;;oBAGrB,QAAQ,UAAU,CAAC,CAI/B;IAED;;;;;;;;;;OAUG;IACH,mBALW,MAAM,GAAC,SAAS,GAAC,MAAM,aACvB,MAAM,EAAE,GAAC,MAAM;;;;;OAWzB;IAED;;;;;OAKG;IACH,YAJW,MAAM,GAAC,SAAS,GAAC,MAAM,iCAErB,QAAQ,UAAU,CAAC,CAkB/B;IAED;;;;;;;;;OASG;IACH,8BAiBC;IAED;;;;;OAKG;IACH,aAHW,MAAM,GAAC,SAAS,GAAC,MAAM,GACrB,QAAQ,IAAI,CAAC,CAgBzB;IAED;;;;;;OAMG;IACH,YAJW,MAAM,GAAC,SAAS,OAChB,MAAM,GACJ,QAAQ,UAAU,GAAG,IAAI,CAAC,CAItC;IAED;;;;;OAKG;IACH,WAHW,MAAM,GAAC,SAAS,GAAC,MAAM,GACrB,QAAQ,MAAM,CAAC,CAW3B;IAkBD;;;;;OAKG;IACH,oBAFW,MAAM,EAAE,GAAC,MAAM,iBAUzB;IAED,6BA2BC;IAED;;;;OAIG;IACH,oBA0BC;IAmBD;;;;;;;OAOG;IACH,sBAaC;IAED;;;;;OAKG;IACH,4BAkDC;CACF;;;;;;;;;aAhsBa,aAAa;;;;;;;;;;;;;;;;;;YAeb,MAAM;;;;uBAvEP,OAAO,SAAS,EAAE,eAAe;;;eA6ChC,4EAAkB;iBAClB,YAAY,EAAE;oBACd,MAAM,EAAE;;;;;4BAKM,GAAG,EAAE,KAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA7C5B,UAAU;YACV,WAAW;cACX,MAAM;;;;;;;;;;;;;;mBApBP,OAAO,0CAA0C,EAAE,WAAW;wBAC9D,OAAO,uCAAuC,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC1E,OAAO,0CAA0C,EAAE,YAAY;4BAC/D,OAAO,6CAA6C,EAAE,cAAc;4BACpE,OAAO,4CAA4C,EAAE,oBAAoB;yBACzE,OAAO,0CAA0C,EAAE,WAAW;cAC9D,OAAO,oCAAoC,EAAE,MAAM;cACnD,OAAO,8BAA8B,CAAC;qBACtC,OAAO,8BAA8B,EAAE,aAAa;iBACpD,OAAO,qBAAqB,EAAE,SAAS;iBACvC,OAAO,QAAQ,CAAC;;;;;;;;;;;;;;;iBAuBf,OAAO;;;aAGP,OAAO;;;aAGP,OAAO"}
|
package/dist/src/ping/index.d.ts
CHANGED
|
@@ -1,35 +1,42 @@
|
|
|
1
|
-
export =
|
|
1
|
+
export = PingService;
|
|
2
2
|
/**
|
|
3
3
|
* @typedef {import('../')} Libp2p
|
|
4
4
|
* @typedef {import('multiaddr').Multiaddr} Multiaddr
|
|
5
5
|
* @typedef {import('peer-id')} PeerId
|
|
6
6
|
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
declare class PingService {
|
|
9
|
+
/**
|
|
10
|
+
* @param {import('../')} libp2p
|
|
11
|
+
*/
|
|
12
|
+
static getProtocolStr(libp2p: import('../')): string;
|
|
13
|
+
/**
|
|
14
|
+
* @param {Libp2p} libp2p
|
|
15
|
+
*/
|
|
16
|
+
constructor(libp2p: Libp2p);
|
|
17
|
+
_libp2p: import("../");
|
|
18
|
+
/**
|
|
19
|
+
* A handler to register with Libp2p to process ping messages
|
|
20
|
+
*
|
|
21
|
+
* @param {Object} options
|
|
22
|
+
* @param {MuxedStream} options.stream
|
|
23
|
+
*/
|
|
24
|
+
handleMessage({ stream }: {
|
|
25
|
+
stream: MuxedStream;
|
|
26
|
+
}): any;
|
|
27
|
+
/**
|
|
28
|
+
* Ping a given peer and wait for its response, getting the operation latency.
|
|
29
|
+
*
|
|
30
|
+
* @param {PeerId|Multiaddr} peer
|
|
31
|
+
* @returns {Promise<number>}
|
|
32
|
+
*/
|
|
33
|
+
ping(peer: PeerId | Multiaddr): Promise<number>;
|
|
18
34
|
}
|
|
19
|
-
|
|
35
|
+
declare namespace PingService {
|
|
36
|
+
export { Libp2p, Multiaddr, PeerId, MuxedStream };
|
|
37
|
+
}
|
|
38
|
+
type MuxedStream = import('libp2p-interfaces/src/stream-muxer/types').MuxedStream;
|
|
20
39
|
type PeerId = import('peer-id');
|
|
21
40
|
type Multiaddr = import('multiaddr').Multiaddr;
|
|
22
|
-
|
|
23
|
-
* Subscribe ping protocol handler.
|
|
24
|
-
*
|
|
25
|
-
* @param {Libp2p} node
|
|
26
|
-
*/
|
|
27
|
-
declare function mount(node: Libp2p): void;
|
|
28
|
-
/**
|
|
29
|
-
* Unsubscribe ping protocol handler.
|
|
30
|
-
*
|
|
31
|
-
* @param {Libp2p} node
|
|
32
|
-
*/
|
|
33
|
-
declare function unmount(node: Libp2p): void;
|
|
34
|
-
type MuxedStream = import('libp2p-interfaces/src/stream-muxer/types').MuxedStream;
|
|
41
|
+
type Libp2p = import('../');
|
|
35
42
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ping/index.js"],"names":[],"mappings":";AAiBA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ping/index.js"],"names":[],"mappings":";AAiBA;;;;;GAKG;AAEH;IACE;;OAEG;IACH,8BAFW,OAAO,KAAK,CAAC,UAIvB;IAED;;OAEG;IACH,oBAFW,MAAM,EAIhB;IADC,uBAAqB;IAGvB;;;;;OAKG;IACH;QAFgC,MAAM,EAA3B,WAAW;YAIrB;IAED;;;;;OAKG;IACH,WAHW,MAAM,GAAC,SAAS,GACd,QAAQ,MAAM,CAAC,CA2B3B;CACF;;;;mBA5DY,OAAO,0CAA0C,EAAE,WAAW;cAD9D,OAAO,SAAS,CAAC;iBADjB,OAAO,WAAW,EAAE,SAAS;cAD7B,OAAO,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -223,6 +223,12 @@ class ConnectionManager extends EventEmitter {
|
|
|
223
223
|
* @param {Connection} connection
|
|
224
224
|
*/
|
|
225
225
|
async onConnect (connection) {
|
|
226
|
+
if (!this._started) {
|
|
227
|
+
// This can happen when we are in the process of shutting down the node
|
|
228
|
+
await connection.close()
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
226
232
|
const peerId = connection.remotePeer
|
|
227
233
|
const peerIdStr = peerId.toB58String()
|
|
228
234
|
const storedConn = this.connections.get(peerIdStr)
|
|
@@ -251,6 +257,11 @@ class ConnectionManager extends EventEmitter {
|
|
|
251
257
|
* @returns {void}
|
|
252
258
|
*/
|
|
253
259
|
onDisconnect (connection) {
|
|
260
|
+
if (!this._started) {
|
|
261
|
+
// This can happen when we are in the process of shutting down the node
|
|
262
|
+
return
|
|
263
|
+
}
|
|
264
|
+
|
|
254
265
|
const peerId = connection.remotePeer.toB58String()
|
|
255
266
|
let storedConn = this.connections.get(peerId)
|
|
256
267
|
|
package/src/index.js
CHANGED
|
@@ -29,9 +29,9 @@ const Upgrader = require('./upgrader')
|
|
|
29
29
|
const PeerStore = require('./peer-store')
|
|
30
30
|
const PubsubAdapter = require('./pubsub-adapter')
|
|
31
31
|
const Registrar = require('./registrar')
|
|
32
|
-
const ping = require('./ping')
|
|
33
32
|
const IdentifyService = require('./identify')
|
|
34
33
|
const FetchService = require('./fetch')
|
|
34
|
+
const PingService = require('./ping')
|
|
35
35
|
const NatManager = require('./nat-manager')
|
|
36
36
|
const { updateSelfPeerRecord } = require('./record/utils')
|
|
37
37
|
|
|
@@ -339,12 +339,10 @@ class Libp2p extends EventEmitter {
|
|
|
339
339
|
this.peerRouting = new PeerRouting(this)
|
|
340
340
|
this.contentRouting = new ContentRouting(this)
|
|
341
341
|
|
|
342
|
-
// Mount default protocols
|
|
343
|
-
ping.mount(this)
|
|
344
|
-
|
|
345
342
|
this._onDiscoveryPeer = this._onDiscoveryPeer.bind(this)
|
|
346
343
|
|
|
347
344
|
this.fetchService = new FetchService(this)
|
|
345
|
+
this.pingService = new PingService(this)
|
|
348
346
|
}
|
|
349
347
|
|
|
350
348
|
/**
|
|
@@ -382,6 +380,10 @@ class Libp2p extends EventEmitter {
|
|
|
382
380
|
await this.handle(FetchService.PROTOCOL, this.fetchService.handleMessage)
|
|
383
381
|
}
|
|
384
382
|
|
|
383
|
+
if (this.pingService) {
|
|
384
|
+
await this.handle(PingService.getProtocolStr(this), this.pingService.handleMessage)
|
|
385
|
+
}
|
|
386
|
+
|
|
385
387
|
try {
|
|
386
388
|
await this._onStarting()
|
|
387
389
|
await this._onDidStart()
|
|
@@ -433,9 +435,9 @@ class Libp2p extends EventEmitter {
|
|
|
433
435
|
await this.natManager.stop()
|
|
434
436
|
await this.transportManager.close()
|
|
435
437
|
|
|
436
|
-
this.unhandle(FetchService.PROTOCOL)
|
|
438
|
+
await this.unhandle(FetchService.PROTOCOL)
|
|
439
|
+
await this.unhandle(PingService.getProtocolStr(this))
|
|
437
440
|
|
|
438
|
-
ping.unmount(this)
|
|
439
441
|
this.dialer.destroy()
|
|
440
442
|
} catch (/** @type {any} */ err) {
|
|
441
443
|
if (err) {
|
|
@@ -609,10 +611,10 @@ class Libp2p extends EventEmitter {
|
|
|
609
611
|
|
|
610
612
|
// If received multiaddr, ping it
|
|
611
613
|
if (multiaddrs) {
|
|
612
|
-
return ping(
|
|
614
|
+
return this.pingService.ping(multiaddrs[0])
|
|
613
615
|
}
|
|
614
616
|
|
|
615
|
-
return ping(
|
|
617
|
+
return this.pingService.ping(id)
|
|
616
618
|
}
|
|
617
619
|
|
|
618
620
|
/**
|
|
@@ -288,7 +288,7 @@ class PeerStoreAddressBook {
|
|
|
288
288
|
|
|
289
289
|
updatedPeer = await this._store.mergeOrCreate(peerId, { addresses })
|
|
290
290
|
|
|
291
|
-
log(`added multiaddrs for ${peerId}`)
|
|
291
|
+
log(`added multiaddrs for ${peerId.toB58String()}`)
|
|
292
292
|
} finally {
|
|
293
293
|
log('set release write lock')
|
|
294
294
|
release()
|
package/src/ping/index.js
CHANGED
|
@@ -22,64 +22,63 @@ const { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } = require('./constants')
|
|
|
22
22
|
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
async function ping (node, peer) {
|
|
33
|
-
const protocol = `/${node._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
34
|
-
// @ts-ignore multiaddr might not have toB58String
|
|
35
|
-
log('dialing %s to %s', protocol, peer.toB58String ? peer.toB58String() : peer)
|
|
25
|
+
class PingService {
|
|
26
|
+
/**
|
|
27
|
+
* @param {import('../')} libp2p
|
|
28
|
+
*/
|
|
29
|
+
static getProtocolStr (libp2p) {
|
|
30
|
+
return `/${libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
31
|
+
}
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
/**
|
|
34
|
+
* @param {Libp2p} libp2p
|
|
35
|
+
*/
|
|
36
|
+
constructor (libp2p) {
|
|
37
|
+
this._libp2p = libp2p
|
|
38
|
+
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
/**
|
|
41
|
+
* A handler to register with Libp2p to process ping messages
|
|
42
|
+
*
|
|
43
|
+
* @param {Object} options
|
|
44
|
+
* @param {MuxedStream} options.stream
|
|
45
|
+
*/
|
|
46
|
+
handleMessage ({ stream }) {
|
|
47
|
+
return pipe(stream, stream)
|
|
48
|
+
}
|
|
42
49
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
)
|
|
50
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Ping a given peer and wait for its response, getting the operation latency.
|
|
52
|
+
*
|
|
53
|
+
* @param {PeerId|Multiaddr} peer
|
|
54
|
+
* @returns {Promise<number>}
|
|
55
|
+
*/
|
|
56
|
+
async ping (peer) {
|
|
57
|
+
const protocol = `/${this._libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
58
|
+
// @ts-ignore multiaddr might not have toB58String
|
|
59
|
+
log('dialing %s to %s', protocol, peer.toB58String ? peer.toB58String() : peer)
|
|
51
60
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
61
|
+
const connection = await this._libp2p.dial(peer)
|
|
62
|
+
const { stream } = await connection.newStream(protocol)
|
|
55
63
|
|
|
56
|
-
|
|
57
|
-
|
|
64
|
+
const start = Date.now()
|
|
65
|
+
const data = crypto.randomBytes(PING_LENGTH)
|
|
58
66
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
.
|
|
67
|
-
log.error(err)
|
|
68
|
-
})
|
|
69
|
-
}
|
|
67
|
+
const [result] = await pipe(
|
|
68
|
+
[data],
|
|
69
|
+
stream,
|
|
70
|
+
(/** @type {MuxedStream} */ stream) => take(1, stream),
|
|
71
|
+
toBuffer,
|
|
72
|
+
collect
|
|
73
|
+
)
|
|
74
|
+
const end = Date.now()
|
|
70
75
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
node.unhandle(`/${node._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`)
|
|
78
|
-
.catch(err => {
|
|
79
|
-
log.error(err)
|
|
80
|
-
})
|
|
76
|
+
if (!equals(data, result)) {
|
|
77
|
+
throw errCode(new Error('Received wrong ping ack'), codes.ERR_WRONG_PING_ACK)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return end - start
|
|
81
|
+
}
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
exports.mount = mount
|
|
85
|
-
exports.unmount = unmount
|
|
84
|
+
module.exports = PingService
|