@libp2p/kad-dht 15.1.11 → 16.0.0-55b7e5fea

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 (54) hide show
  1. package/README.md +1 -1
  2. package/dist/index.min.js +9 -10
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/content-routing/index.js +1 -1
  5. package/dist/src/content-routing/index.js.map +1 -1
  6. package/dist/src/index.d.ts +1 -1
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/kad-dht.d.ts.map +1 -1
  9. package/dist/src/kad-dht.js +7 -3
  10. package/dist/src/kad-dht.js.map +1 -1
  11. package/dist/src/network.d.ts +1 -1
  12. package/dist/src/network.d.ts.map +1 -1
  13. package/dist/src/network.js +3 -6
  14. package/dist/src/network.js.map +1 -1
  15. package/dist/src/peer-routing/index.js +1 -1
  16. package/dist/src/peer-routing/index.js.map +1 -1
  17. package/dist/src/query/manager.js +1 -1
  18. package/dist/src/query/manager.js.map +1 -1
  19. package/dist/src/query/query-path.d.ts +1 -1
  20. package/dist/src/query/query-path.d.ts.map +1 -1
  21. package/dist/src/query/query-path.js +2 -2
  22. package/dist/src/query/query-path.js.map +1 -1
  23. package/dist/src/reprovider.d.ts +1 -1
  24. package/dist/src/reprovider.d.ts.map +1 -1
  25. package/dist/src/reprovider.js +1 -2
  26. package/dist/src/reprovider.js.map +1 -1
  27. package/dist/src/routing-table/index.d.ts +1 -1
  28. package/dist/src/routing-table/index.d.ts.map +1 -1
  29. package/dist/src/routing-table/index.js +1 -2
  30. package/dist/src/routing-table/index.js.map +1 -1
  31. package/dist/src/rpc/handlers/find-node.js +2 -2
  32. package/dist/src/rpc/handlers/find-node.js.map +1 -1
  33. package/dist/src/rpc/index.d.ts +2 -2
  34. package/dist/src/rpc/index.d.ts.map +1 -1
  35. package/dist/src/rpc/index.js +42 -47
  36. package/dist/src/rpc/index.js.map +1 -1
  37. package/dist/src/utils.d.ts +0 -3
  38. package/dist/src/utils.d.ts.map +1 -1
  39. package/dist/src/utils.js +3 -72
  40. package/dist/src/utils.js.map +1 -1
  41. package/package.json +34 -36
  42. package/src/content-routing/index.ts +1 -1
  43. package/src/index.ts +1 -1
  44. package/src/kad-dht.ts +6 -3
  45. package/src/network.ts +4 -7
  46. package/src/peer-routing/index.ts +1 -1
  47. package/src/query/manager.ts +1 -1
  48. package/src/query/query-path.ts +3 -3
  49. package/src/reprovider.ts +2 -3
  50. package/src/routing-table/index.ts +2 -3
  51. package/src/rpc/handlers/find-node.ts +2 -2
  52. package/src/rpc/index.ts +47 -51
  53. package/src/utils.ts +3 -95
  54. package/dist/typedoc-urls.json +0 -65
@@ -367,7 +367,7 @@ export class PeerRouting {
367
367
  }
368
368
 
369
369
  if (output.length > 0) {
370
- this.log('getClosestPeersOffline returning the %d closest peer(s) %b we know', output.length, key)
370
+ this.log('getClosestPeersOffline returning the %d closest peer(s) we know to %b', output.length, key)
371
371
  } else {
372
372
  this.log('getClosestPeersOffline could not any peers close to %b with %d peers in the routing table', key, this.routingTable.size)
373
373
  }
@@ -1,4 +1,4 @@
1
- import { createScalableCuckooFilter } from '@libp2p/utils/filters'
1
+ import { createScalableCuckooFilter } from '@libp2p/utils'
2
2
  import { anySignal } from 'any-signal'
3
3
  import merge from 'it-merge'
4
4
  import { setMaxListeners } from 'main-event'
@@ -1,5 +1,5 @@
1
1
  import { AbortError } from '@libp2p/interface'
2
- import { Queue } from '@libp2p/utils/queue'
2
+ import { Queue } from '@libp2p/utils'
3
3
  import { pushable } from 'it-pushable'
4
4
  import { xor as uint8ArrayXor } from 'uint8arrays/xor'
5
5
  import { xorCompare as uint8ArrayXorCompare } from 'uint8arrays/xor-compare'
@@ -9,7 +9,7 @@ import type { QueryEvent } from '../index.js'
9
9
  import type { QueryFunc } from '../query/types.js'
10
10
  import type { Logger, PeerId, RoutingOptions, AbortOptions, PeerInfo } from '@libp2p/interface'
11
11
  import type { ConnectionManager } from '@libp2p/interface-internal'
12
- import type { Filter } from '@libp2p/utils/filters'
12
+ import type { Filter } from '@libp2p/utils'
13
13
 
14
14
  export interface QueryPathOptions extends RoutingOptions {
15
15
  /**
@@ -171,7 +171,7 @@ export async function * queryPath (options: QueryPathOptions): AsyncGenerator<Qu
171
171
 
172
172
  // only continue query if closer peer is actually closer
173
173
  if (uint8ArrayXorCompare(closerPeerXor, peerXor) !== -1) { // eslint-disable-line max-depth
174
- log('skipping %p as they are not closer to %b than %p', closerPeer.id, key, peer)
174
+ log('skipping %p as they are not closer to %b than %p', closerPeer.id, key, peer.id)
175
175
  continue
176
176
  }
177
177
 
package/src/reprovider.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { AdaptiveTimeout } from '@libp2p/utils/adaptive-timeout'
2
- import { Queue } from '@libp2p/utils/queue'
1
+ import { AdaptiveTimeout, Queue } from '@libp2p/utils'
3
2
  import drain from 'it-drain'
4
3
  import { TypedEventEmitter, setMaxListeners } from 'main-event'
5
4
  import { PROVIDERS_VALIDITY, REPROVIDE_CONCURRENCY, REPROVIDE_INTERVAL, REPROVIDE_MAX_QUEUE_SIZE, REPROVIDE_THRESHOLD, REPROVIDE_TIMEOUT } from './constants.js'
@@ -8,7 +7,7 @@ import type { ContentRouting } from './content-routing/index.js'
8
7
  import type { OperationMetrics } from './kad-dht.js'
9
8
  import type { AbortOptions, ComponentLogger, Logger, Metrics, PeerId } from '@libp2p/interface'
10
9
  import type { AddressManager } from '@libp2p/interface-internal'
11
- import type { AdaptiveTimeoutInit } from '@libp2p/utils/adaptive-timeout'
10
+ import type { AdaptiveTimeoutInit } from '@libp2p/utils'
12
11
  import type { Datastore } from 'interface-datastore'
13
12
  import type { CID } from 'multiformats/cid'
14
13
 
@@ -1,6 +1,5 @@
1
1
  import { start, stop } from '@libp2p/interface'
2
- import { AdaptiveTimeout } from '@libp2p/utils/adaptive-timeout'
3
- import { PeerQueue } from '@libp2p/utils/peer-queue'
2
+ import { AdaptiveTimeout, PeerQueue } from '@libp2p/utils'
4
3
  import { anySignal } from 'any-signal'
5
4
  import parallel from 'it-parallel'
6
5
  import { TypedEventEmitter, setMaxListeners } from 'main-event'
@@ -11,7 +10,7 @@ import type { Bucket, GetClosestPeersOptions, LeafBucket, Peer } from './k-bucke
11
10
  import type { Network } from '../network.js'
12
11
  import type { AbortOptions, ComponentLogger, CounterGroup, Logger, Metric, Metrics, PeerId, PeerStore, Startable, Stream } from '@libp2p/interface'
13
12
  import type { Ping } from '@libp2p/ping'
14
- import type { AdaptiveTimeoutInit } from '@libp2p/utils/adaptive-timeout'
13
+ import type { AdaptiveTimeoutInit } from '@libp2p/utils'
15
14
 
16
15
  export const KBUCKET_SIZE = 20
17
16
  export const PREFIX_LENGTH = 6
@@ -1,5 +1,5 @@
1
1
  import { InvalidMessageError } from '@libp2p/interface'
2
- import { protocols } from '@multiformats/multiaddr'
2
+ import { CODE_P2P } from '@multiformats/multiaddr'
3
3
  import { equals as uint8ArrayEquals } from 'uint8arrays'
4
4
  import { MessageType } from '../../message/dht.js'
5
5
  import type { PeerInfoMapper } from '../../index.js'
@@ -61,7 +61,7 @@ export class FindNodeHandler implements DHTMessageHandler {
61
61
  if (uint8ArrayEquals(this.peerId.toMultihash().bytes, msg.key)) {
62
62
  closer.push({
63
63
  id: this.peerId,
64
- multiaddrs: this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
64
+ multiaddrs: this.addressManager.getAddresses().map(ma => ma.decapsulateCode(CODE_P2P))
65
65
  })
66
66
  }
67
67
 
package/src/rpc/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TimeoutError } from '@libp2p/interface'
2
- import { pbStream } from 'it-protobuf-stream'
2
+ import { pbStream } from '@libp2p/utils'
3
3
  import { Message, MessageType } from '../message/dht.js'
4
4
  import { AddProviderHandler } from './handlers/add-provider.js'
5
5
  import { FindNodeHandler } from './handlers/find-node.js'
@@ -15,7 +15,7 @@ import type { GetProvidersHandlerComponents } from './handlers/get-providers.js'
15
15
  import type { GetValueHandlerComponents } from './handlers/get-value.js'
16
16
  import type { PutValueHandlerComponents } from './handlers/put-value.js'
17
17
  import type { RoutingTable } from '../routing-table/index.js'
18
- import type { CounterGroup, Logger, Metrics, PeerId, IncomingStreamData, MetricGroup } from '@libp2p/interface'
18
+ import type { CounterGroup, Logger, Metrics, PeerId, MetricGroup, Connection, Stream } from '@libp2p/interface'
19
19
 
20
20
  export interface DHTMessageHandler {
21
21
  handle(peerId: PeerId, msg: Message): Promise<Message | undefined>
@@ -95,65 +95,61 @@ export class RPC {
95
95
  /**
96
96
  * Handle incoming streams on the dht protocol
97
97
  */
98
- onIncomingStream (data: IncomingStreamData): void {
99
- const message = 'unknown'
98
+ async onIncomingStream (stream: Stream, connection: Connection): Promise<void> {
99
+ const abortListener = (): void => {
100
+ stream.abort(new TimeoutError())
101
+ }
102
+
103
+ let signal = AbortSignal.timeout(this.incomingMessageTimeout)
104
+ signal.addEventListener('abort', abortListener)
105
+
106
+ const messages = pbStream(stream).pb(Message)
100
107
 
101
- Promise.resolve().then(async () => {
102
- const { stream, connection } = data
108
+ while (true) {
109
+ // the remote will not send any more data
110
+ if (stream.readStatus !== 'readable') {
111
+ await stream.close({
112
+ signal
113
+ })
103
114
 
104
- const abortListener = (): void => {
105
- stream.abort(new TimeoutError())
115
+ break
106
116
  }
107
117
 
108
- let signal = AbortSignal.timeout(this.incomingMessageTimeout)
109
- signal.addEventListener('abort', abortListener)
118
+ const message = await messages.read({
119
+ signal
120
+ })
110
121
 
111
- const messages = pbStream(stream).pb(Message)
122
+ const stopSuccessTimer = this.metrics?.rpcTime?.timer(message.type.toString())
123
+ const stopErrorTimer = this.metrics?.rpcTime?.timer(message.type.toString())
124
+ let errored = false
112
125
 
113
126
  try {
114
- while (true) {
115
- const message = await messages.read({
127
+ // handle the message
128
+ this.log('incoming %s from %p', message.type, connection.remotePeer)
129
+ const res = await this.handleMessage(connection.remotePeer, message)
130
+
131
+ // Not all handlers will return a response
132
+ if (res != null) {
133
+ await messages.write(res, {
116
134
  signal
117
135
  })
118
-
119
- const stopSuccessTimer = this.metrics?.rpcTime?.timer(message.type.toString())
120
- const stopErrorTimer = this.metrics?.rpcTime?.timer(message.type.toString())
121
- let errored = false
122
-
123
- try {
124
- // handle the message
125
- this.log('incoming %s from %p', message.type, connection.remotePeer)
126
- const res = await this.handleMessage(connection.remotePeer, message)
127
-
128
- // Not all handlers will return a response
129
- if (res != null) {
130
- await messages.write(res, {
131
- signal
132
- })
133
- }
134
- } catch (err) {
135
- errored = true
136
- stopErrorTimer?.()
137
-
138
- throw err
139
- } finally {
140
- if (!errored) {
141
- stopSuccessTimer?.()
142
- }
143
- }
144
-
145
- // we have received a message so reset the timeout controller to
146
- // allow the remote to send another
147
- signal.removeEventListener('abort', abortListener)
148
- signal = AbortSignal.timeout(this.incomingMessageTimeout)
149
- signal.addEventListener('abort', abortListener)
150
136
  }
151
- } catch (err: any) {
152
- stream.abort(err)
137
+ } catch (err) {
138
+ errored = true
139
+ stopErrorTimer?.()
140
+
141
+ throw err
142
+ } finally {
143
+ if (!errored) {
144
+ stopSuccessTimer?.()
145
+ }
153
146
  }
154
- })
155
- .catch(err => {
156
- this.log.error('error handling %s RPC message from %p - %e', message, data.connection.remotePeer, err)
157
- })
147
+
148
+ // we have received a message so reset the timeout controller to
149
+ // allow the remote to send another
150
+ signal.removeEventListener('abort', abortListener)
151
+ signal = AbortSignal.timeout(this.incomingMessageTimeout)
152
+ signal.addEventListener('abort', abortListener)
153
+ }
158
154
  }
159
155
  }
package/src/utils.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { peerIdFromMultihash, peerIdFromString } from '@libp2p/peer-id'
2
2
  import { Libp2pRecord } from '@libp2p/record'
3
- import { isPrivateIp } from '@libp2p/utils/private-ip'
3
+ import { isPrivate } from '@libp2p/utils'
4
4
  import { Key } from 'interface-datastore/key'
5
5
  import { CID } from 'multiformats/cid'
6
6
  import * as raw from 'multiformats/codecs/raw'
@@ -12,7 +12,6 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
12
12
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
13
13
  import type { Operation, OperationMetrics } from './kad-dht.js'
14
14
  import type { AbortOptions, PeerId, PeerInfo } from '@libp2p/interface'
15
- import type { Multiaddr } from '@multiformats/multiaddr'
16
15
 
17
16
  // const IPNS_PREFIX = uint8ArrayFromString('/ipns/')
18
17
  const PK_PREFIX = uint8ArrayFromString('/pk/')
@@ -21,34 +20,7 @@ export function removePrivateAddressesMapper (peer: PeerInfo): PeerInfo {
21
20
  return {
22
21
  ...peer,
23
22
  multiaddrs: peer.multiaddrs.filter(multiaddr => {
24
- const [[type, addr]] = multiaddr.stringTuples()
25
-
26
- // treat /dns, /dns4, and /dns6 addrs as public
27
- if (type === 53 || type === 54 || type === 55) {
28
- // localhost can be a dns address but it's private
29
- if (addr === 'localhost') {
30
- return false
31
- }
32
-
33
- return true
34
- }
35
-
36
- if (type !== 4 && type !== 6) {
37
- return false
38
- }
39
-
40
- if (addr == null) {
41
- return false
42
- }
43
-
44
- const isPrivate = isPrivateIp(addr)
45
-
46
- if (isPrivate == null) {
47
- // not an ip address
48
- return true
49
- }
50
-
51
- return !isPrivate
23
+ return !isPrivate(multiaddr)
52
24
  })
53
25
  }
54
26
  }
@@ -57,28 +29,7 @@ export function removePublicAddressesMapper (peer: PeerInfo): PeerInfo {
57
29
  return {
58
30
  ...peer,
59
31
  multiaddrs: peer.multiaddrs.filter(multiaddr => {
60
- const [[type, addr]] = multiaddr.stringTuples()
61
-
62
- if (addr === 'localhost') {
63
- return true
64
- }
65
-
66
- if (type !== 4 && type !== 6) {
67
- return false
68
- }
69
-
70
- if (addr == null) {
71
- return false
72
- }
73
-
74
- const isPrivate = isPrivateIp(addr)
75
-
76
- if (isPrivate == null) {
77
- // not an ip address
78
- return false
79
- }
80
-
81
- return isPrivate
32
+ return isPrivate(multiaddr)
82
33
  })
83
34
  }
84
35
  }
@@ -160,49 +111,6 @@ export function createPutRecord (key: Uint8Array, value: Uint8Array): Uint8Array
160
111
  return rec.serialize()
161
112
  }
162
113
 
163
- export function debounce (callback: () => void, wait: number = 100): () => void {
164
- let timeout: ReturnType<typeof setTimeout>
165
-
166
- return (): void => {
167
- clearTimeout(timeout)
168
- timeout = setTimeout(() => { callback() }, wait)
169
- }
170
- }
171
-
172
- // see https://github.com/multiformats/multiaddr/blob/master/protocols.csv
173
- const P2P_CIRCUIT_CODE = 290
174
- const DNS4_CODE = 54
175
- const DNS6_CODE = 55
176
- const DNSADDR_CODE = 56
177
- const IP4_CODE = 4
178
- const IP6_CODE = 41
179
-
180
- export function multiaddrIsPublic (multiaddr: Multiaddr): boolean {
181
- const tuples = multiaddr.stringTuples()
182
-
183
- // p2p-circuit should not enable server mode
184
- for (const tuple of tuples) {
185
- if (tuple[0] === P2P_CIRCUIT_CODE) {
186
- return false
187
- }
188
- }
189
-
190
- // dns4 or dns6 or dnsaddr
191
- if (tuples[0][0] === DNS4_CODE || tuples[0][0] === DNS6_CODE || tuples[0][0] === DNSADDR_CODE) {
192
- return true
193
- }
194
-
195
- // ip4 or ip6
196
- if (tuples[0][0] === IP4_CODE || tuples[0][0] === IP6_CODE) {
197
- const result = isPrivateIp(`${tuples[0][1]}`)
198
- const isPublic = result == null || !result
199
-
200
- return isPublic
201
- }
202
-
203
- return false
204
- }
205
-
206
114
  /**
207
115
  * Parse the CID and provider peer id from the key
208
116
  */
@@ -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
- }