@libp2p/kad-dht 15.1.3 → 15.1.4-7eed3b40d
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 +2 -2
- package/dist/index.min.js.map +4 -4
- package/dist/src/peer-routing/index.d.ts +3 -3
- package/dist/src/peer-routing/index.d.ts.map +1 -1
- package/dist/src/peer-routing/index.js +7 -18
- package/dist/src/peer-routing/index.js.map +1 -1
- package/dist/src/query/manager.d.ts.map +1 -1
- package/dist/src/query/manager.js +3 -1
- package/dist/src/query/manager.js.map +1 -1
- package/dist/src/routing-table/index.d.ts +2 -2
- package/dist/src/routing-table/index.d.ts.map +1 -1
- package/dist/src/routing-table/index.js +5 -3
- package/dist/src/routing-table/index.js.map +1 -1
- package/dist/src/routing-table/k-bucket.d.ts +5 -1
- package/dist/src/routing-table/k-bucket.d.ts.map +1 -1
- package/dist/src/routing-table/k-bucket.js +5 -2
- package/dist/src/routing-table/k-bucket.js.map +1 -1
- package/dist/src/rpc/handlers/find-node.d.ts.map +1 -1
- package/dist/src/rpc/handlers/find-node.js +40 -24
- package/dist/src/rpc/handlers/find-node.js.map +1 -1
- package/dist/src/rpc/handlers/get-providers.js +1 -1
- package/dist/src/rpc/handlers/get-providers.js.map +1 -1
- package/dist/src/rpc/handlers/get-value.js +1 -1
- package/dist/src/rpc/handlers/get-value.js.map +1 -1
- package/package.json +13 -13
- package/src/peer-routing/index.ts +8 -20
- package/src/query/manager.ts +3 -1
- package/src/routing-table/index.ts +6 -4
- package/src/routing-table/k-bucket.ts +11 -2
- package/src/rpc/handlers/find-node.ts +41 -27
- package/src/rpc/handlers/get-providers.ts +1 -1
- package/src/rpc/handlers/get-value.ts +1 -1
- package/dist/typedoc-urls.json +0 -65
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/kad-dht",
|
|
3
|
-
"version": "15.1.
|
|
3
|
+
"version": "15.1.4-7eed3b40d",
|
|
4
4
|
"description": "JavaScript implementation of the Kad-DHT for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/kad-dht#readme",
|
|
@@ -47,15 +47,15 @@
|
|
|
47
47
|
"doc-check": "aegir doc-check"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@libp2p/crypto": "
|
|
51
|
-
"@libp2p/interface": "
|
|
52
|
-
"@libp2p/interface-internal": "
|
|
53
|
-
"@libp2p/peer-collections": "
|
|
54
|
-
"@libp2p/peer-id": "
|
|
55
|
-
"@libp2p/ping": "
|
|
56
|
-
"@libp2p/record": "
|
|
57
|
-
"@libp2p/utils": "
|
|
58
|
-
"@multiformats/multiaddr": "^12.4.
|
|
50
|
+
"@libp2p/crypto": "5.1.6-7eed3b40d",
|
|
51
|
+
"@libp2p/interface": "2.10.4-7eed3b40d",
|
|
52
|
+
"@libp2p/interface-internal": "2.3.16-7eed3b40d",
|
|
53
|
+
"@libp2p/peer-collections": "6.0.32-7eed3b40d",
|
|
54
|
+
"@libp2p/peer-id": "5.1.7-7eed3b40d",
|
|
55
|
+
"@libp2p/ping": "2.0.34-7eed3b40d",
|
|
56
|
+
"@libp2p/record": "4.0.7-7eed3b40d",
|
|
57
|
+
"@libp2p/utils": "6.6.7-7eed3b40d",
|
|
58
|
+
"@multiformats/multiaddr": "^12.4.4",
|
|
59
59
|
"any-signal": "^4.1.1",
|
|
60
60
|
"interface-datastore": "^8.3.1",
|
|
61
61
|
"it-all": "^3.0.8",
|
|
@@ -80,9 +80,9 @@
|
|
|
80
80
|
"uint8arrays": "^5.1.0"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
|
-
"@libp2p/interface-compliance-tests": "
|
|
84
|
-
"@libp2p/logger": "
|
|
85
|
-
"@libp2p/peer-store": "
|
|
83
|
+
"@libp2p/interface-compliance-tests": "6.4.10-7eed3b40d",
|
|
84
|
+
"@libp2p/logger": "5.1.20-7eed3b40d",
|
|
85
|
+
"@libp2p/peer-store": "11.2.4-7eed3b40d",
|
|
86
86
|
"@types/lodash.random": "^3.2.9",
|
|
87
87
|
"@types/lodash.range": "^3.2.9",
|
|
88
88
|
"@types/sinon": "^17.0.4",
|
|
@@ -3,8 +3,6 @@ import { InvalidPublicKeyError, NotFoundError } from '@libp2p/interface'
|
|
|
3
3
|
import { peerIdFromPublicKey, peerIdFromMultihash } from '@libp2p/peer-id'
|
|
4
4
|
import { Libp2pRecord } from '@libp2p/record'
|
|
5
5
|
import * as Digest from 'multiformats/hashes/digest'
|
|
6
|
-
import { xor as uint8ArrayXor } from 'uint8arrays/xor'
|
|
7
|
-
import { xorCompare as uint8ArrayXorCompare } from 'uint8arrays/xor-compare'
|
|
8
6
|
import { QueryError, InvalidRecordError } from '../errors.js'
|
|
9
7
|
import { MessageType } from '../message/dht.js'
|
|
10
8
|
import { PeerDistanceList } from '../peer-distance-list.js'
|
|
@@ -14,13 +12,14 @@ import {
|
|
|
14
12
|
valueEvent
|
|
15
13
|
} from '../query/events.js'
|
|
16
14
|
import { verifyRecord } from '../record/validators.js'
|
|
17
|
-
import { convertBuffer,
|
|
15
|
+
import { convertBuffer, keyForPublicKey } from '../utils.js'
|
|
18
16
|
import type { DHTRecord, FinalPeerEvent, QueryEvent, Validators } from '../index.js'
|
|
19
17
|
import type { Message } from '../message/dht.js'
|
|
20
18
|
import type { Network, SendMessageOptions } from '../network.js'
|
|
21
19
|
import type { QueryManager, QueryOptions } from '../query/manager.js'
|
|
22
20
|
import type { QueryFunc } from '../query/types.js'
|
|
23
21
|
import type { RoutingTable } from '../routing-table/index.js'
|
|
22
|
+
import type { GetClosestPeersOptions } from '../routing-table/k-bucket.ts'
|
|
24
23
|
import type { ComponentLogger, Logger, Metrics, PeerId, PeerInfo, PeerStore, RoutingOptions } from '@libp2p/interface'
|
|
25
24
|
import type { ConnectionManager } from '@libp2p/interface-internal'
|
|
26
25
|
import type { AbortOptions } from 'it-pushable'
|
|
@@ -246,7 +245,7 @@ export class PeerRouting {
|
|
|
246
245
|
const self = this
|
|
247
246
|
|
|
248
247
|
const getCloserPeersQuery: QueryFunc = async function * ({ peer, path, peerKadId, signal }) {
|
|
249
|
-
self.log('getClosestPeers asking %p', peer)
|
|
248
|
+
self.log('getClosestPeers asking %p', peer.id)
|
|
250
249
|
const request: Partial<Message> = {
|
|
251
250
|
type: MessageType.FIND_NODE,
|
|
252
251
|
key
|
|
@@ -336,10 +335,9 @@ export class PeerRouting {
|
|
|
336
335
|
}
|
|
337
336
|
|
|
338
337
|
/**
|
|
339
|
-
* Get the peers in our routing table that are
|
|
340
|
-
* to the passed key
|
|
338
|
+
* Get the peers in our routing table that are closest to the passed key
|
|
341
339
|
*/
|
|
342
|
-
async
|
|
340
|
+
async getClosestPeersOffline (key: Uint8Array, options?: GetClosestPeersOptions): Promise<PeerInfo[]> {
|
|
343
341
|
const output: PeerInfo[] = []
|
|
344
342
|
|
|
345
343
|
// try getting the peer directly
|
|
@@ -356,19 +354,9 @@ export class PeerRouting {
|
|
|
356
354
|
} catch {}
|
|
357
355
|
|
|
358
356
|
const keyKadId = await convertBuffer(key, options)
|
|
359
|
-
const ids = this.routingTable.closestPeers(keyKadId)
|
|
360
|
-
const closerThanKadId = await convertPeerId(closerThan, options)
|
|
361
|
-
const requesterXor = uint8ArrayXor(closerThanKadId, keyKadId)
|
|
357
|
+
const ids = this.routingTable.closestPeers(keyKadId, options)
|
|
362
358
|
|
|
363
359
|
for (const peerId of ids) {
|
|
364
|
-
const peerKadId = await convertPeerId(peerId, options)
|
|
365
|
-
const peerXor = uint8ArrayXor(peerKadId, keyKadId)
|
|
366
|
-
|
|
367
|
-
// only include if peer is closer than requester
|
|
368
|
-
if (uint8ArrayXorCompare(peerXor, requesterXor) !== -1) {
|
|
369
|
-
continue
|
|
370
|
-
}
|
|
371
|
-
|
|
372
360
|
try {
|
|
373
361
|
output.push(await this.components.peerStore.getInfo(peerId, options))
|
|
374
362
|
} catch (err: any) {
|
|
@@ -379,9 +367,9 @@ export class PeerRouting {
|
|
|
379
367
|
}
|
|
380
368
|
|
|
381
369
|
if (output.length > 0) {
|
|
382
|
-
this.log('
|
|
370
|
+
this.log('getClosestPeersOffline returning the %d closest peer(s) %b we know', output.length, key)
|
|
383
371
|
} else {
|
|
384
|
-
this.log('
|
|
372
|
+
this.log('getClosestPeersOffline could not any peers close to %b with %d peers in the routing table', key, this.routingTable.size)
|
|
385
373
|
}
|
|
386
374
|
|
|
387
375
|
return output
|
package/src/query/manager.ts
CHANGED
|
@@ -168,7 +168,9 @@ export class QueryManager implements Startable {
|
|
|
168
168
|
const id = await convertBuffer(key, {
|
|
169
169
|
signal
|
|
170
170
|
})
|
|
171
|
-
const peers = this.routingTable.closestPeers(id,
|
|
171
|
+
const peers = this.routingTable.closestPeers(id, {
|
|
172
|
+
count: this.routingTable.kBucketSize
|
|
173
|
+
})
|
|
172
174
|
|
|
173
175
|
// split peers into d buckets evenly(ish)
|
|
174
176
|
const peersToQuery = peers.sort(() => {
|
|
@@ -7,7 +7,7 @@ import { TypedEventEmitter, setMaxListeners } from 'main-event'
|
|
|
7
7
|
import * as utils from '../utils.js'
|
|
8
8
|
import { ClosestPeers } from './closest-peers.js'
|
|
9
9
|
import { KBucket, isLeafBucket } from './k-bucket.js'
|
|
10
|
-
import type { Bucket, LeafBucket, Peer } from './k-bucket.js'
|
|
10
|
+
import type { Bucket, GetClosestPeersOptions, LeafBucket, Peer } from './k-bucket.js'
|
|
11
11
|
import type { Network } from '../network.js'
|
|
12
12
|
import type { AbortOptions, ComponentLogger, CounterGroup, Logger, Metric, Metrics, PeerId, PeerStore, Startable, Stream } from '@libp2p/interface'
|
|
13
13
|
import type { Ping } from '@libp2p/ping'
|
|
@@ -444,7 +444,9 @@ export class RoutingTable extends TypedEventEmitter<RoutingTableEvents> implemen
|
|
|
444
444
|
* Retrieve the closest peers to the given kadId
|
|
445
445
|
*/
|
|
446
446
|
closestPeer (kadId: Uint8Array): PeerId | undefined {
|
|
447
|
-
const res = this.closestPeers(kadId,
|
|
447
|
+
const res = this.closestPeers(kadId, {
|
|
448
|
+
count: 1
|
|
449
|
+
})
|
|
448
450
|
|
|
449
451
|
if (res.length > 0) {
|
|
450
452
|
return res[0]
|
|
@@ -456,12 +458,12 @@ export class RoutingTable extends TypedEventEmitter<RoutingTableEvents> implemen
|
|
|
456
458
|
/**
|
|
457
459
|
* Retrieve the `count`-closest peers to the given kadId
|
|
458
460
|
*/
|
|
459
|
-
closestPeers (kadId: Uint8Array,
|
|
461
|
+
closestPeers (kadId: Uint8Array, options?: GetClosestPeersOptions): PeerId[] {
|
|
460
462
|
if (this.kb == null) {
|
|
461
463
|
return []
|
|
462
464
|
}
|
|
463
465
|
|
|
464
|
-
return [...this.kb.closest(kadId,
|
|
466
|
+
return [...this.kb.closest(kadId, options)]
|
|
465
467
|
}
|
|
466
468
|
|
|
467
469
|
/**
|
|
@@ -130,6 +130,11 @@ export function isLeafBucket (obj: any): obj is LeafBucket {
|
|
|
130
130
|
return Array.isArray(obj?.peers)
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
export interface GetClosestPeersOptions extends AbortOptions {
|
|
134
|
+
count?: number
|
|
135
|
+
exclude?: PeerId[]
|
|
136
|
+
}
|
|
137
|
+
|
|
133
138
|
/**
|
|
134
139
|
* Implementation of a Kademlia DHT routing table as a prefix binary trie with
|
|
135
140
|
* configurable prefix length, bucket split threshold and size.
|
|
@@ -318,10 +323,14 @@ export class KBucket {
|
|
|
318
323
|
* @param {Uint8Array} id - Contact node id
|
|
319
324
|
* @returns {Generator<Peer, void, undefined>} Array Maximum of n closest contacts to the node id
|
|
320
325
|
*/
|
|
321
|
-
* closest (id: Uint8Array,
|
|
322
|
-
const list = new PeerDistanceList(id,
|
|
326
|
+
* closest (id: Uint8Array, options?: GetClosestPeersOptions): Generator<PeerId, void, undefined> {
|
|
327
|
+
const list = new PeerDistanceList(id, options?.count ?? this.kBucketSize)
|
|
323
328
|
|
|
324
329
|
for (const peer of this.toIterable()) {
|
|
330
|
+
if (options?.exclude?.some(p => p.equals(peer.peerId)) === true) {
|
|
331
|
+
continue
|
|
332
|
+
}
|
|
333
|
+
|
|
325
334
|
list.addWithKadId({ id: peer.peerId, multiaddrs: [] }, peer.kadId)
|
|
326
335
|
}
|
|
327
336
|
|
|
@@ -42,38 +42,52 @@ export class FindNodeHandler implements DHTMessageHandler {
|
|
|
42
42
|
* Process `FindNode` DHT messages
|
|
43
43
|
*/
|
|
44
44
|
async handle (peerId: PeerId, msg: Message): Promise<Message> {
|
|
45
|
-
this.log('incoming request from %p for peers
|
|
45
|
+
this.log('incoming request from %p for peers close to %b', peerId, msg.key)
|
|
46
|
+
try {
|
|
47
|
+
if (msg.key == null) {
|
|
48
|
+
throw new InvalidMessageError('Invalid FIND_NODE message received - key was missing')
|
|
49
|
+
}
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const closer: PeerInfo[] = await this.peerRouting.getCloserPeersOffline(msg.key, peerId)
|
|
51
|
+
const closer: PeerInfo[] = await this.peerRouting.getClosestPeersOffline(msg.key, {
|
|
52
|
+
exclude: [
|
|
53
|
+
// never tell a peer about itself
|
|
54
|
+
peerId,
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
multiaddrs: this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
|
|
56
|
+
// do not include the server in the results
|
|
57
|
+
this.peerId
|
|
58
|
+
]
|
|
57
59
|
})
|
|
58
|
-
}
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
.map(peerInfo => ({
|
|
67
|
-
id: peerInfo.id.toMultihash().bytes,
|
|
68
|
-
multiaddrs: peerInfo.multiaddrs.map(ma => ma.bytes)
|
|
69
|
-
})),
|
|
70
|
-
providers: []
|
|
71
|
-
}
|
|
61
|
+
if (uint8ArrayEquals(this.peerId.toMultihash().bytes, msg.key)) {
|
|
62
|
+
closer.push({
|
|
63
|
+
id: this.peerId,
|
|
64
|
+
multiaddrs: this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
|
|
65
|
+
})
|
|
66
|
+
}
|
|
72
67
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
const response: Message = {
|
|
69
|
+
type: MessageType.FIND_NODE,
|
|
70
|
+
clusterLevel: msg.clusterLevel,
|
|
71
|
+
closer: closer
|
|
72
|
+
.map(this.peerInfoMapper)
|
|
73
|
+
.filter(({ multiaddrs }) => multiaddrs.length)
|
|
74
|
+
.map(peerInfo => ({
|
|
75
|
+
id: peerInfo.id.toMultihash().bytes,
|
|
76
|
+
multiaddrs: peerInfo.multiaddrs.map(ma => ma.bytes)
|
|
77
|
+
})),
|
|
78
|
+
providers: []
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (response.closer.length === 0) {
|
|
82
|
+
this.log('could not find any peers closer to %b for %p', msg.key, peerId)
|
|
83
|
+
} else {
|
|
84
|
+
this.log('found %d peers close to %b for %p', response.closer.length, msg.key, peerId)
|
|
85
|
+
}
|
|
76
86
|
|
|
77
|
-
|
|
87
|
+
return response
|
|
88
|
+
} catch (err: any) {
|
|
89
|
+
this.log('error during finding peers closer to %b for %p - %e', msg.key, peerId, err)
|
|
90
|
+
throw err
|
|
91
|
+
}
|
|
78
92
|
}
|
|
79
93
|
}
|
|
@@ -84,7 +84,7 @@ export class GetValueHandler implements DHTMessageHandler {
|
|
|
84
84
|
|
|
85
85
|
const [record, closer] = await Promise.all([
|
|
86
86
|
this._checkLocalDatastore(key),
|
|
87
|
-
this.peerRouting.
|
|
87
|
+
this.peerRouting.getClosestPeersOffline(key)
|
|
88
88
|
])
|
|
89
89
|
|
|
90
90
|
if (record != null) {
|
package/dist/typedoc-urls.json
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"codec": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.MessageType.codec.html",
|
|
3
|
-
"EventTypes": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad-dht.EventTypes.html",
|
|
4
|
-
".:EventTypes": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad-dht.EventTypes.html",
|
|
5
|
-
"MessageType": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad-dht.MessageType.html",
|
|
6
|
-
"AddPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.AddPeerEvent.html",
|
|
7
|
-
".:AddPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.AddPeerEvent.html",
|
|
8
|
-
"DHTRecord": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.DHTRecord.html",
|
|
9
|
-
".:DHTRecord": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.DHTRecord.html",
|
|
10
|
-
"DialPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.DialPeerEvent.html",
|
|
11
|
-
".:DialPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.DialPeerEvent.html",
|
|
12
|
-
"DisjointPath": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.DisjointPath.html",
|
|
13
|
-
".:DisjointPath": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.DisjointPath.html",
|
|
14
|
-
"FinalPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.FinalPeerEvent.html",
|
|
15
|
-
".:FinalPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.FinalPeerEvent.html",
|
|
16
|
-
"KadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.KadDHT.html",
|
|
17
|
-
".:KadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.KadDHT.html",
|
|
18
|
-
"KadDHTComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.KadDHTComponents.html",
|
|
19
|
-
".:KadDHTComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.KadDHTComponents.html",
|
|
20
|
-
"KadDHTInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.KadDHTInit.html",
|
|
21
|
-
".:KadDHTInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.KadDHTInit.html",
|
|
22
|
-
"PathEndedEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.PathEndedEvent.html",
|
|
23
|
-
".:PathEndedEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.PathEndedEvent.html",
|
|
24
|
-
"PeerInfoMapper": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.PeerInfoMapper.html",
|
|
25
|
-
".:PeerInfoMapper": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.PeerInfoMapper.html",
|
|
26
|
-
"PeerResponseEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.PeerResponseEvent.html",
|
|
27
|
-
".:PeerResponseEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.PeerResponseEvent.html",
|
|
28
|
-
"ProviderEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ProviderEvent.html",
|
|
29
|
-
".:ProviderEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ProviderEvent.html",
|
|
30
|
-
"ProvidersInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ProvidersInit.html",
|
|
31
|
-
".:ProvidersInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ProvidersInit.html",
|
|
32
|
-
"QueryErrorEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.QueryErrorEvent.html",
|
|
33
|
-
".:QueryErrorEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.QueryErrorEvent.html",
|
|
34
|
-
"ReProvideInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ReProvideInit.html",
|
|
35
|
-
".:ReProvideInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ReProvideInit.html",
|
|
36
|
-
"RoutingTable": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.RoutingTable.html",
|
|
37
|
-
".:RoutingTable": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.RoutingTable.html",
|
|
38
|
-
"SelectFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SelectFn.html",
|
|
39
|
-
".:SelectFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SelectFn.html",
|
|
40
|
-
"SendQueryEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SendQueryEvent.html",
|
|
41
|
-
".:SendQueryEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SendQueryEvent.html",
|
|
42
|
-
"SetModeOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SetModeOptions.html",
|
|
43
|
-
".:SetModeOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SetModeOptions.html",
|
|
44
|
-
"SingleKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SingleKadDHT.html",
|
|
45
|
-
".:SingleKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SingleKadDHT.html",
|
|
46
|
-
"ValidateFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValidateFn.html",
|
|
47
|
-
".:ValidateFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValidateFn.html",
|
|
48
|
-
"ValueEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValueEvent.html",
|
|
49
|
-
".:ValueEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValueEvent.html",
|
|
50
|
-
"DHTProgressEvents": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.DHTProgressEvents.html",
|
|
51
|
-
".:DHTProgressEvents": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.DHTProgressEvents.html",
|
|
52
|
-
"MessageName": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.MessageName.html",
|
|
53
|
-
".:MessageName": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.MessageName.html",
|
|
54
|
-
"QueryEvent": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.QueryEvent.html",
|
|
55
|
-
".:QueryEvent": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.QueryEvent.html",
|
|
56
|
-
"Selectors": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Selectors.html",
|
|
57
|
-
".:Selectors": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Selectors.html",
|
|
58
|
-
"Validators": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Validators.html",
|
|
59
|
-
".:Validators": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Validators.html",
|
|
60
|
-
"kadDHT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.kadDHT.html",
|
|
61
|
-
".:kadDHT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.kadDHT.html",
|
|
62
|
-
"passthroughMapper": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.passthroughMapper.html",
|
|
63
|
-
"removePrivateAddressesMapper": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.removePrivateAddressesMapper.html",
|
|
64
|
-
"removePublicAddressesMapper": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.removePublicAddressesMapper.html"
|
|
65
|
-
}
|