@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.
Files changed (33) hide show
  1. package/dist/index.min.js +2 -2
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/peer-routing/index.d.ts +3 -3
  4. package/dist/src/peer-routing/index.d.ts.map +1 -1
  5. package/dist/src/peer-routing/index.js +7 -18
  6. package/dist/src/peer-routing/index.js.map +1 -1
  7. package/dist/src/query/manager.d.ts.map +1 -1
  8. package/dist/src/query/manager.js +3 -1
  9. package/dist/src/query/manager.js.map +1 -1
  10. package/dist/src/routing-table/index.d.ts +2 -2
  11. package/dist/src/routing-table/index.d.ts.map +1 -1
  12. package/dist/src/routing-table/index.js +5 -3
  13. package/dist/src/routing-table/index.js.map +1 -1
  14. package/dist/src/routing-table/k-bucket.d.ts +5 -1
  15. package/dist/src/routing-table/k-bucket.d.ts.map +1 -1
  16. package/dist/src/routing-table/k-bucket.js +5 -2
  17. package/dist/src/routing-table/k-bucket.js.map +1 -1
  18. package/dist/src/rpc/handlers/find-node.d.ts.map +1 -1
  19. package/dist/src/rpc/handlers/find-node.js +40 -24
  20. package/dist/src/rpc/handlers/find-node.js.map +1 -1
  21. package/dist/src/rpc/handlers/get-providers.js +1 -1
  22. package/dist/src/rpc/handlers/get-providers.js.map +1 -1
  23. package/dist/src/rpc/handlers/get-value.js +1 -1
  24. package/dist/src/rpc/handlers/get-value.js.map +1 -1
  25. package/package.json +13 -13
  26. package/src/peer-routing/index.ts +8 -20
  27. package/src/query/manager.ts +3 -1
  28. package/src/routing-table/index.ts +6 -4
  29. package/src/routing-table/k-bucket.ts +11 -2
  30. package/src/rpc/handlers/find-node.ts +41 -27
  31. package/src/rpc/handlers/get-providers.ts +1 -1
  32. package/src/rpc/handlers/get-value.ts +1 -1
  33. 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",
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": "^5.1.5",
51
- "@libp2p/interface": "^2.10.3",
52
- "@libp2p/interface-internal": "^2.3.15",
53
- "@libp2p/peer-collections": "^6.0.31",
54
- "@libp2p/peer-id": "^5.1.6",
55
- "@libp2p/ping": "^2.0.33",
56
- "@libp2p/record": "^4.0.7",
57
- "@libp2p/utils": "^6.6.6",
58
- "@multiformats/multiaddr": "^12.4.0",
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": "^6.4.9",
84
- "@libp2p/logger": "^5.1.19",
85
- "@libp2p/peer-store": "^11.2.3",
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, convertPeerId, keyForPublicKey } from '../utils.js'
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 closer than the passed PeerId
340
- * to the passed key
338
+ * Get the peers in our routing table that are closest to the passed key
341
339
  */
342
- async getCloserPeersOffline (key: Uint8Array, closerThan: PeerId, options?: AbortOptions): Promise<PeerInfo[]> {
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('getCloserPeersOffline found %d peer(s) closer to %b than %p', output.length, key, closerThan)
370
+ this.log('getClosestPeersOffline returning the %d closest peer(s) %b we know', output.length, key)
383
371
  } else {
384
- this.log('getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table', key, closerThan, this.routingTable.size)
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
@@ -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, this.routingTable.kBucketSize)
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, 1)
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, count = this.kBucketSize): PeerId[] {
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, count)]
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, n: number = this.kBucketSize): Generator<PeerId, void, undefined> {
322
- const list = new PeerDistanceList(id, n)
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 closer to %b', peerId, msg.key)
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
- if (msg.key == null) {
48
- throw new InvalidMessageError('Invalid FIND_NODE message received - key was missing')
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
- if (uint8ArrayEquals(this.peerId.toMultihash().bytes, msg.key)) {
54
- closer.push({
55
- id: this.peerId,
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
- const response: Message = {
61
- type: MessageType.FIND_NODE,
62
- clusterLevel: msg.clusterLevel,
63
- closer: closer
64
- .map(this.peerInfoMapper)
65
- .filter(({ multiaddrs }) => multiaddrs.length)
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
- if (response.closer.length === 0) {
74
- this.log('could not find any peers closer to %b than %p', msg.key, peerId)
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
- return response
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
  }
@@ -67,7 +67,7 @@ export class GetProvidersHandler implements DHTMessageHandler {
67
67
 
68
68
  return info
69
69
  })),
70
- this.peerRouting.getCloserPeersOffline(msg.key, peerId)
70
+ this.peerRouting.getClosestPeersOffline(msg.key)
71
71
  ])
72
72
 
73
73
  const response: Message = {
@@ -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.getCloserPeersOffline(key, peerId)
87
+ this.peerRouting.getClosestPeersOffline(key)
88
88
  ])
89
89
 
90
90
  if (record != null) {
@@ -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
- }