@libp2p/kad-dht 10.0.15 → 11.0.0-06e6d235f

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 (150) hide show
  1. package/README.md +1 -5
  2. package/dist/index.min.js +18 -18
  3. package/dist/src/content-fetching/index.d.ts.map +1 -1
  4. package/dist/src/content-fetching/index.js +2 -3
  5. package/dist/src/content-fetching/index.js.map +1 -1
  6. package/dist/src/content-routing/index.d.ts.map +1 -1
  7. package/dist/src/content-routing/index.js +3 -6
  8. package/dist/src/content-routing/index.js.map +1 -1
  9. package/dist/src/dual-kad-dht.d.ts +6 -8
  10. package/dist/src/dual-kad-dht.d.ts.map +1 -1
  11. package/dist/src/dual-kad-dht.js +9 -13
  12. package/dist/src/dual-kad-dht.js.map +1 -1
  13. package/dist/src/index.d.ts +3 -9
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js.map +1 -1
  16. package/dist/src/kad-dht.d.ts +2 -4
  17. package/dist/src/kad-dht.d.ts.map +1 -1
  18. package/dist/src/kad-dht.js +4 -5
  19. package/dist/src/kad-dht.js.map +1 -1
  20. package/dist/src/message/dht.js.map +1 -1
  21. package/dist/src/message/index.d.ts +3 -1
  22. package/dist/src/message/index.d.ts.map +1 -1
  23. package/dist/src/message/index.js +7 -2
  24. package/dist/src/message/index.js.map +1 -1
  25. package/dist/src/network.d.ts +4 -9
  26. package/dist/src/network.d.ts.map +1 -1
  27. package/dist/src/network.js +12 -26
  28. package/dist/src/network.js.map +1 -1
  29. package/dist/src/peer-list/index.d.ts +1 -1
  30. package/dist/src/peer-list/index.d.ts.map +1 -1
  31. package/dist/src/peer-list/index.js.map +1 -1
  32. package/dist/src/peer-list/peer-distance-list.d.ts +1 -1
  33. package/dist/src/peer-list/peer-distance-list.d.ts.map +1 -1
  34. package/dist/src/peer-list/peer-distance-list.js.map +1 -1
  35. package/dist/src/peer-routing/index.d.ts +3 -4
  36. package/dist/src/peer-routing/index.d.ts.map +1 -1
  37. package/dist/src/peer-routing/index.js +16 -18
  38. package/dist/src/peer-routing/index.js.map +1 -1
  39. package/dist/src/providers.d.ts +4 -3
  40. package/dist/src/providers.d.ts.map +1 -1
  41. package/dist/src/providers.js +17 -17
  42. package/dist/src/providers.js.map +1 -1
  43. package/dist/src/query/events.d.ts +1 -2
  44. package/dist/src/query/events.d.ts.map +1 -1
  45. package/dist/src/query/events.js +1 -1
  46. package/dist/src/query/events.js.map +1 -1
  47. package/dist/src/query/manager.d.ts +5 -5
  48. package/dist/src/query/manager.d.ts.map +1 -1
  49. package/dist/src/query/manager.js +14 -14
  50. package/dist/src/query/manager.js.map +1 -1
  51. package/dist/src/query/query-path.d.ts +1 -3
  52. package/dist/src/query/query-path.d.ts.map +1 -1
  53. package/dist/src/query/query-path.js.map +1 -1
  54. package/dist/src/query/types.d.ts +1 -1
  55. package/dist/src/query/types.d.ts.map +1 -1
  56. package/dist/src/query/utils.d.ts +1 -2
  57. package/dist/src/query/utils.d.ts.map +1 -1
  58. package/dist/src/query/utils.js +1 -1
  59. package/dist/src/query/utils.js.map +1 -1
  60. package/dist/src/query-self.d.ts +3 -3
  61. package/dist/src/query-self.d.ts.map +1 -1
  62. package/dist/src/query-self.js +5 -6
  63. package/dist/src/query-self.js.map +1 -1
  64. package/dist/src/record/index.js.map +1 -1
  65. package/dist/src/record/record.js.map +1 -1
  66. package/dist/src/record/selectors.js +1 -1
  67. package/dist/src/record/selectors.js.map +1 -1
  68. package/dist/src/record/utils.js.map +1 -1
  69. package/dist/src/record/validators.js +1 -1
  70. package/dist/src/record/validators.js.map +1 -1
  71. package/dist/src/routing-table/index.d.ts +4 -6
  72. package/dist/src/routing-table/index.d.ts.map +1 -1
  73. package/dist/src/routing-table/index.js +2 -3
  74. package/dist/src/routing-table/index.js.map +1 -1
  75. package/dist/src/routing-table/k-bucket.d.ts +2 -2
  76. package/dist/src/routing-table/k-bucket.d.ts.map +1 -1
  77. package/dist/src/routing-table/k-bucket.js +1 -1
  78. package/dist/src/routing-table/k-bucket.js.map +1 -1
  79. package/dist/src/routing-table/refresh.d.ts +5 -2
  80. package/dist/src/routing-table/refresh.d.ts.map +1 -1
  81. package/dist/src/routing-table/refresh.js +2 -3
  82. package/dist/src/routing-table/refresh.js.map +1 -1
  83. package/dist/src/rpc/handlers/add-provider.d.ts +6 -2
  84. package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -1
  85. package/dist/src/rpc/handlers/add-provider.js +10 -11
  86. package/dist/src/rpc/handlers/add-provider.js.map +1 -1
  87. package/dist/src/rpc/handlers/find-node.d.ts +6 -3
  88. package/dist/src/rpc/handlers/find-node.d.ts.map +1 -1
  89. package/dist/src/rpc/handlers/find-node.js +11 -10
  90. package/dist/src/rpc/handlers/find-node.js.map +1 -1
  91. package/dist/src/rpc/handlers/get-providers.d.ts +4 -4
  92. package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -1
  93. package/dist/src/rpc/handlers/get-providers.js +9 -10
  94. package/dist/src/rpc/handlers/get-providers.js.map +1 -1
  95. package/dist/src/rpc/handlers/get-value.d.ts +5 -3
  96. package/dist/src/rpc/handlers/get-value.d.ts.map +1 -1
  97. package/dist/src/rpc/handlers/get-value.js +17 -16
  98. package/dist/src/rpc/handlers/get-value.js.map +1 -1
  99. package/dist/src/rpc/handlers/ping.d.ts +6 -1
  100. package/dist/src/rpc/handlers/ping.d.ts.map +1 -1
  101. package/dist/src/rpc/handlers/ping.js +5 -3
  102. package/dist/src/rpc/handlers/ping.js.map +1 -1
  103. package/dist/src/rpc/handlers/put-value.d.ts +3 -2
  104. package/dist/src/rpc/handlers/put-value.d.ts.map +1 -1
  105. package/dist/src/rpc/handlers/put-value.js +3 -4
  106. package/dist/src/rpc/handlers/put-value.js.map +1 -1
  107. package/dist/src/rpc/index.d.ts +2 -2
  108. package/dist/src/rpc/index.d.ts.map +1 -1
  109. package/dist/src/rpc/index.js +3 -4
  110. package/dist/src/rpc/index.js.map +1 -1
  111. package/dist/src/topology-listener.d.ts +2 -3
  112. package/dist/src/topology-listener.d.ts.map +1 -1
  113. package/dist/src/topology-listener.js +2 -3
  114. package/dist/src/topology-listener.js.map +1 -1
  115. package/dist/src/utils.d.ts +1 -2
  116. package/dist/src/utils.d.ts.map +1 -1
  117. package/dist/src/utils.js.map +1 -1
  118. package/package.json +26 -23
  119. package/src/content-fetching/index.ts +3 -5
  120. package/src/content-routing/index.ts +4 -8
  121. package/src/dual-kad-dht.ts +10 -16
  122. package/src/index.ts +3 -9
  123. package/src/kad-dht.ts +5 -8
  124. package/src/message/index.ts +10 -3
  125. package/src/network.ts +15 -49
  126. package/src/peer-list/index.ts +1 -1
  127. package/src/peer-list/peer-distance-list.ts +1 -1
  128. package/src/peer-routing/index.ts +17 -22
  129. package/src/providers.ts +19 -20
  130. package/src/query/events.ts +2 -3
  131. package/src/query/manager.ts +19 -21
  132. package/src/query/query-path.ts +1 -3
  133. package/src/query/types.ts +1 -1
  134. package/src/query/utils.ts +2 -3
  135. package/src/query-self.ts +7 -8
  136. package/src/record/selectors.ts +1 -1
  137. package/src/record/validators.ts +1 -1
  138. package/src/routing-table/index.ts +5 -9
  139. package/src/routing-table/k-bucket.ts +2 -2
  140. package/src/routing-table/refresh.ts +7 -5
  141. package/src/rpc/handlers/add-provider.ts +14 -12
  142. package/src/rpc/handlers/find-node.ts +14 -14
  143. package/src/rpc/handlers/get-providers.ts +11 -14
  144. package/src/rpc/handlers/get-value.ts +19 -20
  145. package/src/rpc/handlers/ping.ts +11 -4
  146. package/src/rpc/handlers/put-value.ts +5 -5
  147. package/src/rpc/index.ts +5 -6
  148. package/src/topology-listener.ts +3 -6
  149. package/src/utils.ts +1 -2
  150. package/dist/typedoc-urls.json +0 -55
package/src/network.ts CHANGED
@@ -1,11 +1,5 @@
1
- import { CodeError } from '@libp2p/interface/errors'
2
- import { TypedEventEmitter, CustomEvent } from '@libp2p/interface/events'
3
- import { logger } from '@libp2p/logger'
4
- import { abortableDuplex } from 'abortable-iterator'
5
- import drain from 'it-drain'
6
- import first from 'it-first'
7
- import * as lp from 'it-length-prefixed'
8
- import { pipe } from 'it-pipe'
1
+ import { TypedEventEmitter, CustomEvent } from '@libp2p/interface'
2
+ import { pbStream } from 'it-protobuf-stream'
9
3
  import { Message } from './message/index.js'
10
4
  import {
11
5
  dialPeerEvent,
@@ -14,14 +8,7 @@ import {
14
8
  queryErrorEvent
15
9
  } from './query/events.js'
16
10
  import type { KadDHTComponents, QueryEvent, QueryOptions } from './index.js'
17
- import type { AbortOptions } from '@libp2p/interface'
18
- import type { Stream } from '@libp2p/interface/connection'
19
- import type { PeerId } from '@libp2p/interface/peer-id'
20
- import type { PeerInfo } from '@libp2p/interface/peer-info'
21
- import type { Startable } from '@libp2p/interface/startable'
22
- import type { Logger } from '@libp2p/logger'
23
- import type { Duplex, Source } from 'it-stream-types'
24
- import type { Uint8ArrayList } from 'uint8arraylist'
11
+ import type { AbortOptions, Logger, Stream, PeerId, PeerInfo, Startable } from '@libp2p/interface'
25
12
 
26
13
  export interface NetworkInit {
27
14
  protocol: string
@@ -49,7 +36,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> implements Startab
49
36
 
50
37
  const { protocol, lan } = init
51
38
  this.components = components
52
- this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:network`)
39
+ this.log = components.logger.forComponent(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:network`)
53
40
  this.running = false
54
41
  this.protocol = protocol
55
42
  }
@@ -97,7 +84,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> implements Startab
97
84
  const connection = await this.components.connectionManager.openConnection(to, options)
98
85
  const stream = await connection.newStream(this.protocol, options)
99
86
 
100
- const response = await this._writeReadMessage(stream, msg.serialize(), options)
87
+ const response = await this._writeReadMessage(stream, msg, options)
101
88
 
102
89
  yield peerResponseEvent({
103
90
  from: to,
@@ -133,7 +120,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> implements Startab
133
120
  const connection = await this.components.connectionManager.openConnection(to, options)
134
121
  const stream = await connection.newStream(this.protocol, options)
135
122
 
136
- await this._writeMessage(stream, msg.serialize(), options)
123
+ await this._writeMessage(stream, msg, options)
137
124
 
138
125
  yield peerResponseEvent({ from: to, messageType: msg.type }, options)
139
126
  } catch (err: any) {
@@ -148,17 +135,10 @@ export class Network extends TypedEventEmitter<NetworkEvents> implements Startab
148
135
  /**
149
136
  * Write a message to the given stream
150
137
  */
151
- async _writeMessage (stream: Duplex<AsyncGenerator<Uint8ArrayList>, Source<Uint8ArrayList | Uint8Array>>, msg: Uint8Array | Uint8ArrayList, options: AbortOptions): Promise<void> {
152
- if (options.signal != null) {
153
- stream = abortableDuplex(stream, options.signal)
154
- }
155
-
156
- await pipe(
157
- [msg],
158
- (source) => lp.encode(source),
159
- stream,
160
- drain
161
- )
138
+ async _writeMessage (stream: Stream, msg: Message, options: AbortOptions): Promise<void> {
139
+ const pb = pbStream(stream)
140
+ await pb.write(msg, Message, options)
141
+ await pb.unwrap().close(options)
162
142
  }
163
143
 
164
144
  /**
@@ -166,28 +146,14 @@ export class Network extends TypedEventEmitter<NetworkEvents> implements Startab
166
146
  * If no response is received after the specified timeout
167
147
  * this will error out.
168
148
  */
169
- async _writeReadMessage (stream: Duplex<AsyncGenerator<Uint8ArrayList>, Source<Uint8ArrayList | Uint8Array>>, msg: Uint8Array | Uint8ArrayList, options: AbortOptions): Promise<Message> {
170
- if (options.signal != null) {
171
- stream = abortableDuplex(stream, options.signal)
172
- }
149
+ async _writeReadMessage (stream: Stream, msg: Message, options: AbortOptions): Promise<Message> {
150
+ const pb = pbStream(stream)
173
151
 
174
- const res = await pipe(
175
- [msg],
176
- (source) => lp.encode(source),
177
- stream,
178
- (source) => lp.decode(source),
179
- async source => {
180
- const buf = await first(source)
152
+ await pb.write(msg, Message, options)
181
153
 
182
- if (buf != null) {
183
- return buf
184
- }
185
-
186
- throw new CodeError('No message received', 'ERR_NO_MESSAGE_RECEIVED')
187
- }
188
- )
154
+ const message = await pb.read(Message, options)
189
155
 
190
- const message = Message.deserialize(res)
156
+ await pb.unwrap().close(options)
191
157
 
192
158
  // tell any listeners about new peers we've seen
193
159
  message.closerPeers.forEach(peerData => {
@@ -1,4 +1,4 @@
1
- import type { PeerId } from '@libp2p/interface/peer-id'
1
+ import type { PeerId } from '@libp2p/interface'
2
2
 
3
3
  /**
4
4
  * A list of unique peers.
@@ -1,7 +1,7 @@
1
1
  import { compare as uint8ArrayCompare } from 'uint8arrays/compare'
2
2
  import { xor as uint8ArrayXor } from 'uint8arrays/xor'
3
3
  import * as utils from '../utils.js'
4
- import type { PeerId } from '@libp2p/interface/peer-id'
4
+ import type { PeerId } from '@libp2p/interface'
5
5
 
6
6
  interface PeerDistance {
7
7
  peerId: PeerId
@@ -1,6 +1,5 @@
1
1
  import { keys } from '@libp2p/crypto'
2
- import { CodeError } from '@libp2p/interface/errors'
3
- import { logger } from '@libp2p/logger'
2
+ import { CodeError } from '@libp2p/interface'
4
3
  import { peerIdFromKeys } from '@libp2p/peer-id'
5
4
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
6
5
  import { Message, MESSAGE_TYPE } from '../message/index.js'
@@ -18,10 +17,7 @@ import type { Network } from '../network.js'
18
17
  import type { QueryManager, QueryOptions } from '../query/manager.js'
19
18
  import type { QueryFunc } from '../query/types.js'
20
19
  import type { RoutingTable } from '../routing-table/index.js'
21
- import type { AbortOptions } from '@libp2p/interface'
22
- import type { PeerId } from '@libp2p/interface/peer-id'
23
- import type { PeerInfo } from '@libp2p/interface/peer-info'
24
- import type { Logger } from '@libp2p/logger'
20
+ import type { AbortOptions, Logger, PeerId, PeerInfo, PeerStore } from '@libp2p/interface'
25
21
 
26
22
  export interface PeerRoutingInit {
27
23
  routingTable: RoutingTable
@@ -32,22 +28,24 @@ export interface PeerRoutingInit {
32
28
  }
33
29
 
34
30
  export class PeerRouting {
35
- private readonly components: KadDHTComponents
36
31
  private readonly log: Logger
37
32
  private readonly routingTable: RoutingTable
38
33
  private readonly network: Network
39
34
  private readonly validators: Validators
40
35
  private readonly queryManager: QueryManager
36
+ private readonly peerStore: PeerStore
37
+ private readonly peerId: PeerId
41
38
 
42
39
  constructor (components: KadDHTComponents, init: PeerRoutingInit) {
43
40
  const { routingTable, network, validators, queryManager, lan } = init
44
41
 
45
- this.components = components
46
42
  this.routingTable = routingTable
47
43
  this.network = network
48
44
  this.validators = validators
49
45
  this.queryManager = queryManager
50
- this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:peer-routing`)
46
+ this.peerStore = components.peerStore
47
+ this.peerId = components.peerId
48
+ this.log = components.logger.forComponent(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:peer-routing`)
51
49
  }
52
50
 
53
51
  /**
@@ -62,7 +60,7 @@ export class PeerRouting {
62
60
  this.log('findPeerLocal found %p in routing table', peer)
63
61
 
64
62
  try {
65
- peerData = await this.components.peerStore.get(p)
63
+ peerData = await this.peerStore.get(p)
66
64
  } catch (err: any) {
67
65
  if (err.code !== 'ERR_NOT_FOUND') {
68
66
  throw err
@@ -72,7 +70,7 @@ export class PeerRouting {
72
70
 
73
71
  if (peerData == null) {
74
72
  try {
75
- peerData = await this.components.peerStore.get(peer)
73
+ peerData = await this.peerStore.get(peer)
76
74
  } catch (err: any) {
77
75
  if (err.code !== 'ERR_NOT_FOUND') {
78
76
  throw err
@@ -85,8 +83,7 @@ export class PeerRouting {
85
83
 
86
84
  return {
87
85
  id: peerData.id,
88
- multiaddrs: peerData.addresses.map((address) => address.multiaddr),
89
- protocols: []
86
+ multiaddrs: peerData.addresses.map((address) => address.multiaddr)
90
87
  }
91
88
  }
92
89
 
@@ -142,7 +139,7 @@ export class PeerRouting {
142
139
  if (pi != null) {
143
140
  this.log('found local')
144
141
  yield finalPeerEvent({
145
- from: this.components.peerId,
142
+ from: this.peerId,
146
143
  peer: pi
147
144
  }, options)
148
145
  return
@@ -181,7 +178,7 @@ export class PeerRouting {
181
178
  }
182
179
 
183
180
  if (!foundPeer) {
184
- yield queryErrorEvent({ from: this.components.peerId, error: new CodeError('Not found', 'ERR_NOT_FOUND') }, options)
181
+ yield queryErrorEvent({ from: this.peerId, error: new CodeError('Not found', 'ERR_NOT_FOUND') }, options)
185
182
  }
186
183
  }
187
184
 
@@ -220,14 +217,13 @@ export class PeerRouting {
220
217
 
221
218
  for (const peerId of peers.peers) {
222
219
  try {
223
- const peer = await this.components.peerStore.get(peerId)
220
+ const peer = await this.peerStore.get(peerId)
224
221
 
225
222
  yield finalPeerEvent({
226
- from: this.components.peerId,
223
+ from: this.peerId,
227
224
  peer: {
228
225
  id: peerId,
229
- multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
230
- protocols: peer.protocols
226
+ multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr)
231
227
  }
232
228
  }, options)
233
229
  } catch (err: any) {
@@ -292,12 +288,11 @@ export class PeerRouting {
292
288
  }
293
289
 
294
290
  try {
295
- const peer = await this.components.peerStore.get(peerId)
291
+ const peer = await this.peerStore.get(peerId)
296
292
 
297
293
  output.push({
298
294
  id: peerId,
299
- multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr),
300
- protocols: peer.protocols
295
+ multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr)
301
296
  })
302
297
  } catch (err: any) {
303
298
  if (err.code !== 'ERR_NOT_FOUND') {
package/src/providers.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { logger } from '@libp2p/logger'
2
1
  import { peerIdFromString } from '@libp2p/peer-id'
3
2
  import cache from 'hashlru'
4
3
  import { Key } from 'interface-datastore/key'
@@ -11,13 +10,10 @@ import {
11
10
  PROVIDERS_LRU_CACHE_SIZE,
12
11
  PROVIDER_KEY_PREFIX
13
12
  } from './constants.js'
14
- import type { PeerId } from '@libp2p/interface/peer-id'
15
- import type { Startable } from '@libp2p/interface/startable'
13
+ import type { ComponentLogger, Logger, PeerId, Startable } from '@libp2p/interface'
16
14
  import type { Datastore } from 'interface-datastore'
17
15
  import type { CID } from 'multiformats'
18
16
 
19
- const log = logger('libp2p:kad-dht:providers')
20
-
21
17
  export interface ProvidersInit {
22
18
  cacheSize?: number
23
19
  /**
@@ -32,6 +28,7 @@ export interface ProvidersInit {
32
28
 
33
29
  export interface ProvidersComponents {
34
30
  datastore: Datastore
31
+ logger: ComponentLogger
35
32
  }
36
33
 
37
34
  /**
@@ -47,7 +44,8 @@ export interface ProvidersComponents {
47
44
  * access is fast there is an LRU cache in front of that.
48
45
  */
49
46
  export class Providers implements Startable {
50
- private readonly components: ProvidersComponents
47
+ private readonly log: Logger
48
+ private readonly datastore: Datastore
51
49
  private readonly cache: ReturnType<typeof cache>
52
50
  private readonly cleanupInterval: number
53
51
  private readonly provideValidity: number
@@ -58,7 +56,8 @@ export class Providers implements Startable {
58
56
  constructor (components: ProvidersComponents, init: ProvidersInit = {}) {
59
57
  const { cacheSize, cleanupInterval, provideValidity } = init
60
58
 
61
- this.components = components
59
+ this.log = components.logger.forComponent('libp2p:kad-dht:providers')
60
+ this.datastore = components.datastore
62
61
  this.cleanupInterval = cleanupInterval ?? PROVIDERS_CLEANUP_INTERVAL
63
62
  this.provideValidity = provideValidity ?? PROVIDERS_VALIDITY
64
63
  this.cache = cache(cacheSize ?? PROVIDERS_LRU_CACHE_SIZE)
@@ -83,7 +82,7 @@ export class Providers implements Startable {
83
82
  this.cleaner = setInterval(
84
83
  () => {
85
84
  this._cleanup().catch(err => {
86
- log.error(err)
85
+ this.log.error(err)
87
86
  })
88
87
  },
89
88
  this.cleanupInterval
@@ -112,10 +111,10 @@ export class Providers implements Startable {
112
111
  let count = 0
113
112
  let deleteCount = 0
114
113
  const deleted = new Map<string, Set<string>>()
115
- const batch = this.components.datastore.batch()
114
+ const batch = this.datastore.batch()
116
115
 
117
116
  // Get all provider entries from the datastore
118
- const query = this.components.datastore.query({ prefix: PROVIDER_KEY_PREFIX })
117
+ const query = this.datastore.query({ prefix: PROVIDER_KEY_PREFIX })
119
118
 
120
119
  for await (const entry of query) {
121
120
  try {
@@ -126,7 +125,7 @@ export class Providers implements Startable {
126
125
  const delta = now - time
127
126
  const expired = delta > this.provideValidity
128
127
 
129
- log('comparing: %d - %d = %d > %d %s', now, time, delta, this.provideValidity, expired ? '(expired)' : '')
128
+ this.log('comparing: %d - %d = %d > %d %s', now, time, delta, this.provideValidity, expired ? '(expired)' : '')
130
129
 
131
130
  if (expired) {
132
131
  deleteCount++
@@ -137,16 +136,16 @@ export class Providers implements Startable {
137
136
  }
138
137
  count++
139
138
  } catch (err: any) {
140
- log.error(err.message)
139
+ this.log.error(err.message)
141
140
  }
142
141
  }
143
142
 
144
143
  // Commit the deletes to the datastore
145
144
  if (deleted.size > 0) {
146
- log('deleting %d / %d entries', deleteCount, count)
145
+ this.log('deleting %d / %d entries', deleteCount, count)
147
146
  await batch.commit()
148
147
  } else {
149
- log('nothing to delete')
148
+ this.log('nothing to delete')
150
149
  }
151
150
 
152
151
  // Clear expired entries from the cache
@@ -167,7 +166,7 @@ export class Providers implements Startable {
167
166
  }
168
167
  }
169
168
 
170
- log('Cleanup successful (%dms)', Date.now() - start)
169
+ this.log('Cleanup successful (%dms)', Date.now() - start)
171
170
  })
172
171
  }
173
172
 
@@ -179,7 +178,7 @@ export class Providers implements Startable {
179
178
  let provs: Map<string, Date> = this.cache.get(cacheKey)
180
179
 
181
180
  if (provs == null) {
182
- provs = await loadProviders(this.components.datastore, cid)
181
+ provs = await loadProviders(this.datastore, cid)
183
182
  this.cache.set(cacheKey, provs)
184
183
  }
185
184
 
@@ -191,17 +190,17 @@ export class Providers implements Startable {
191
190
  */
192
191
  async addProvider (cid: CID, provider: PeerId): Promise<void> {
193
192
  await this.syncQueue.add(async () => {
194
- log('%p provides %s', provider, cid)
193
+ this.log('%p provides %s', provider, cid)
195
194
  const provs = await this._getProvidersMap(cid)
196
195
 
197
- log('loaded %s provs', provs.size)
196
+ this.log('loaded %s provs', provs.size)
198
197
  const now = new Date()
199
198
  provs.set(provider.toString(), now)
200
199
 
201
200
  const dsKey = makeProviderKey(cid)
202
201
  this.cache.set(dsKey, provs)
203
202
 
204
- await writeProviderEntry(this.components.datastore, cid, provider, now)
203
+ await writeProviderEntry(this.datastore, cid, provider, now)
205
204
  })
206
205
  }
207
206
 
@@ -210,7 +209,7 @@ export class Providers implements Startable {
210
209
  */
211
210
  async getProviders (cid: CID): Promise<PeerId[]> {
212
211
  return this.syncQueue.add(async () => {
213
- log('get providers for %s', cid)
212
+ this.log('get providers for %s', cid)
214
213
  const provs = await this._getProvidersMap(cid)
215
214
 
216
215
  return [...provs.keys()].map(peerIdStr => {
@@ -1,10 +1,9 @@
1
- import { CustomEvent } from '@libp2p/interface/events'
1
+ import { CustomEvent } from '@libp2p/interface'
2
2
  import { MESSAGE_TYPE_LOOKUP } from '../message/index.js'
3
3
  import type { SendQueryEvent, PeerResponseEvent, DialPeerEvent, AddPeerEvent, ValueEvent, ProviderEvent, QueryErrorEvent, FinalPeerEvent, QueryOptions } from '../index.js'
4
4
  import type { Message } from '../message/dht.js'
5
5
  import type { Libp2pRecord } from '../record/index.js'
6
- import type { PeerId } from '@libp2p/interface/peer-id'
7
- import type { PeerInfo } from '@libp2p/interface/peer-info'
6
+ import type { PeerId, PeerInfo } from '@libp2p/interface'
8
7
 
9
8
  export interface QueryEventFields {
10
9
  to: PeerId
@@ -1,6 +1,4 @@
1
- import { AbortError } from '@libp2p/interface/errors'
2
- import { TypedEventEmitter, CustomEvent, setMaxListeners } from '@libp2p/interface/events'
3
- import { logger } from '@libp2p/logger'
1
+ import { AbortError, TypedEventEmitter, CustomEvent, setMaxListeners } from '@libp2p/interface'
4
2
  import { PeerSet } from '@libp2p/peer-collections'
5
3
  import { anySignal } from 'any-signal'
6
4
  import merge from 'it-merge'
@@ -13,9 +11,7 @@ import { queryPath } from './query-path.js'
13
11
  import type { QueryFunc } from './types.js'
14
12
  import type { QueryEvent, QueryOptions as RootQueryOptions } from '../index.js'
15
13
  import type { RoutingTable } from '../routing-table/index.js'
16
- import type { Metric, Metrics } from '@libp2p/interface/metrics'
17
- import type { PeerId } from '@libp2p/interface/peer-id'
18
- import type { Startable } from '@libp2p/interface/startable'
14
+ import type { ComponentLogger, Metric, Metrics, PeerId, Startable } from '@libp2p/interface'
19
15
  import type { DeferredPromise } from 'p-defer'
20
16
 
21
17
  export interface CleanUpEvents {
@@ -33,6 +29,7 @@ export interface QueryManagerInit {
33
29
  export interface QueryManagerComponents {
34
30
  peerId: PeerId
35
31
  metrics?: Metrics
32
+ logger: ComponentLogger
36
33
  }
37
34
 
38
35
  export interface QueryOptions extends RootQueryOptions {
@@ -44,25 +41,24 @@ export interface QueryOptions extends RootQueryOptions {
44
41
  * Keeps track of all running queries
45
42
  */
46
43
  export class QueryManager implements Startable {
47
- private readonly components: QueryManagerComponents
48
44
  private readonly lan: boolean
49
45
  public disjointPaths: number
50
46
  private readonly alpha: number
51
47
  private readonly shutDownController: AbortController
52
48
  private running: boolean
53
49
  private queries: number
54
- private metrics?: {
50
+ private readonly logger: ComponentLogger
51
+ private readonly peerId: PeerId
52
+ private readonly routingTable: RoutingTable
53
+ private initialQuerySelfHasRun?: DeferredPromise<void>
54
+ private readonly metrics?: {
55
55
  runningQueries: Metric
56
56
  queryTime: Metric
57
57
  }
58
58
 
59
- private readonly routingTable: RoutingTable
60
- private initialQuerySelfHasRun?: DeferredPromise<void>
61
-
62
59
  constructor (components: QueryManagerComponents, init: QueryManagerInit) {
63
60
  const { lan = false, disjointPaths = K, alpha = ALPHA } = init
64
61
 
65
- this.components = components
66
62
  this.disjointPaths = disjointPaths ?? K
67
63
  this.running = false
68
64
  this.alpha = alpha ?? ALPHA
@@ -70,6 +66,15 @@ export class QueryManager implements Startable {
70
66
  this.queries = 0
71
67
  this.initialQuerySelfHasRun = init.initialQuerySelfHasRun
72
68
  this.routingTable = init.routingTable
69
+ this.logger = components.logger
70
+ this.peerId = components.peerId
71
+
72
+ if (components.metrics != null) {
73
+ this.metrics = {
74
+ runningQueries: components.metrics.registerMetric(`libp2p_kad_dht_${this.lan ? 'lan' : 'wan'}_running_queries`),
75
+ queryTime: components.metrics.registerMetric(`libp2p_kad_dht_${this.lan ? 'lan' : 'wan'}_query_time_seconds`)
76
+ }
77
+ }
73
78
 
74
79
  // allow us to stop queries on shut down
75
80
  this.shutDownController = new AbortController()
@@ -86,13 +91,6 @@ export class QueryManager implements Startable {
86
91
  */
87
92
  async start (): Promise<void> {
88
93
  this.running = true
89
-
90
- if (this.components.metrics != null && this.metrics == null) {
91
- this.metrics = {
92
- runningQueries: this.components.metrics.registerMetric(`libp2p_kad_dht_${this.lan ? 'lan' : 'wan'}_running_queries`),
93
- queryTime: this.components.metrics.registerMetric(`libp2p_kad_dht_${this.lan ? 'lan' : 'wan'}_query_time_seconds`)
94
- }
95
- }
96
94
  }
97
95
 
98
96
  /**
@@ -131,7 +129,7 @@ export class QueryManager implements Startable {
131
129
  // so make sure we don't make a lot of noise in the logs
132
130
  setMaxListeners(Infinity, signal)
133
131
 
134
- const log = logger(`libp2p:kad-dht:${this.lan ? 'lan' : 'wan'}:query:` + uint8ArrayToString(key, 'base58btc'))
132
+ const log = this.logger.forComponent(`libp2p:kad-dht:${this.lan ? 'lan' : 'wan'}:query:` + uint8ArrayToString(key, 'base58btc'))
135
133
 
136
134
  // query a subset of peers up to `kBucketSize / 2` in length
137
135
  const startTime = Date.now()
@@ -174,7 +172,7 @@ export class QueryManager implements Startable {
174
172
  return queryPath({
175
173
  key,
176
174
  startingPeer: peer,
177
- ourPeerId: this.components.peerId,
175
+ ourPeerId: this.peerId,
178
176
  signal,
179
177
  query: queryFunc,
180
178
  pathIndex: index,
@@ -8,9 +8,7 @@ import { queueToGenerator } from './utils.js'
8
8
  import type { CleanUpEvents } from './manager.js'
9
9
  import type { QueryEvent, QueryOptions } from '../index.js'
10
10
  import type { QueryFunc } from '../query/types.js'
11
- import type { TypedEventTarget } from '@libp2p/interface/events'
12
- import type { PeerId } from '@libp2p/interface/peer-id'
13
- import type { Logger } from '@libp2p/logger'
11
+ import type { Logger, TypedEventTarget, PeerId } from '@libp2p/interface'
14
12
  import type { PeerSet } from '@libp2p/peer-collections'
15
13
 
16
14
  const MAX_XOR = BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
@@ -1,5 +1,5 @@
1
1
  import type { QueryEvent } from '../index.js'
2
- import type { PeerId } from '@libp2p/interface/peer-id'
2
+ import type { PeerId } from '@libp2p/interface'
3
3
 
4
4
  export interface QueryContext {
5
5
  // the key we are looking up
@@ -1,9 +1,8 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { pushable } from 'it-pushable'
3
3
  import type { CleanUpEvents } from './manager.js'
4
4
  import type { QueryEvent } from '../index.js'
5
- import type { TypedEventTarget } from '@libp2p/interface/events'
6
- import type { Logger } from '@libp2p/logger'
5
+ import type { Logger, TypedEventTarget } from '@libp2p/interface'
7
6
  import type Queue from 'p-queue'
8
7
 
9
8
  export async function * queueToGenerator (queue: Queue, signal: AbortSignal, cleanUp: TypedEventTarget<CleanUpEvents>, log: Logger): AsyncGenerator<QueryEvent, void, undefined> {
package/src/query-self.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { setMaxListeners } from '@libp2p/interface/events'
2
- import { logger, type Logger } from '@libp2p/logger'
1
+ import { setMaxListeners } from '@libp2p/interface'
3
2
  import { anySignal } from 'any-signal'
4
3
  import length from 'it-length'
5
4
  import { pipe } from 'it-pipe'
@@ -9,8 +8,7 @@ import { pEvent } from 'p-event'
9
8
  import { QUERY_SELF_INTERVAL, QUERY_SELF_TIMEOUT, K, QUERY_SELF_INITIAL_INTERVAL } from './constants.js'
10
9
  import type { PeerRouting } from './peer-routing/index.js'
11
10
  import type { RoutingTable } from './routing-table/index.js'
12
- import type { PeerId } from '@libp2p/interface/peer-id'
13
- import type { Startable } from '@libp2p/interface/startable'
11
+ import type { ComponentLogger, Logger, PeerId, Startable } from '@libp2p/interface'
14
12
  import type { DeferredPromise } from 'p-defer'
15
13
 
16
14
  export interface QuerySelfInit {
@@ -26,6 +24,7 @@ export interface QuerySelfInit {
26
24
 
27
25
  export interface QuerySelfComponents {
28
26
  peerId: PeerId
27
+ logger: ComponentLogger
29
28
  }
30
29
 
31
30
  /**
@@ -33,7 +32,7 @@ export interface QuerySelfComponents {
33
32
  */
34
33
  export class QuerySelf implements Startable {
35
34
  private readonly log: Logger
36
- private readonly components: QuerySelfComponents
35
+ private readonly peerId: PeerId
37
36
  private readonly peerRouting: PeerRouting
38
37
  private readonly routingTable: RoutingTable
39
38
  private readonly count: number
@@ -49,8 +48,8 @@ export class QuerySelf implements Startable {
49
48
  constructor (components: QuerySelfComponents, init: QuerySelfInit) {
50
49
  const { peerRouting, lan, count, interval, queryTimeout, routingTable } = init
51
50
 
52
- this.components = components
53
- this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:query-self`)
51
+ this.peerId = components.peerId
52
+ this.log = components.logger.forComponent(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:query-self`)
54
53
  this.started = false
55
54
  this.peerRouting = peerRouting
56
55
  this.routingTable = routingTable
@@ -125,7 +124,7 @@ export class QuerySelf implements Startable {
125
124
  const start = Date.now()
126
125
 
127
126
  const found = await pipe(
128
- this.peerRouting.getClosestPeers(this.components.peerId.toBytes(), {
127
+ this.peerRouting.getClosestPeers(this.peerId.toBytes(), {
129
128
  signal,
130
129
  isSelfQuery: true
131
130
  }),
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
3
3
  import type { Selectors } from '../index.js'
4
4
 
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface/errors'
1
+ import { CodeError } from '@libp2p/interface'
2
2
  import { sha256 } from 'multiformats/hashes/sha2'
3
3
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
4
4
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
@@ -1,15 +1,10 @@
1
- import { TypedEventEmitter } from '@libp2p/interface/events'
2
- import { logger } from '@libp2p/logger'
1
+ import { TypedEventEmitter } from '@libp2p/interface'
3
2
  import { PeerSet } from '@libp2p/peer-collections'
4
3
  import Queue from 'p-queue'
5
4
  import * as utils from '../utils.js'
6
5
  import { KBucket, type PingEventDetails } from './k-bucket.js'
7
- import type { Metric, Metrics } from '@libp2p/interface/metrics'
8
- import type { PeerId } from '@libp2p/interface/peer-id'
9
- import type { PeerStore } from '@libp2p/interface/peer-store'
10
- import type { Startable } from '@libp2p/interface/startable'
11
- import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
12
- import type { Logger } from '@libp2p/logger'
6
+ import type { ComponentLogger, Logger, Metric, Metrics, PeerId, PeerStore, Startable } from '@libp2p/interface'
7
+ import type { ConnectionManager } from '@libp2p/interface-internal'
13
8
 
14
9
  export const KAD_CLOSE_TAG_NAME = 'kad-close'
15
10
  export const KAD_CLOSE_TAG_VALUE = 50
@@ -32,6 +27,7 @@ export interface RoutingTableComponents {
32
27
  peerStore: PeerStore
33
28
  connectionManager: ConnectionManager
34
29
  metrics?: Metrics
30
+ logger: ComponentLogger
35
31
  }
36
32
 
37
33
  export interface RoutingTableEvents {
@@ -69,7 +65,7 @@ export class RoutingTable extends TypedEventEmitter<RoutingTableEvents> implemen
69
65
  const { kBucketSize, pingTimeout, lan, pingConcurrency, protocol, tagName, tagValue } = init
70
66
 
71
67
  this.components = components
72
- this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:routing-table`)
68
+ this.log = components.logger.forComponent(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:routing-table`)
73
69
  this.kBucketSize = kBucketSize ?? KBUCKET_SIZE
74
70
  this.pingTimeout = pingTimeout ?? PING_TIMEOUT
75
71
  this.pingConcurrency = pingConcurrency ?? PING_CONCURRENCY
@@ -27,8 +27,8 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27
27
  OTHER DEALINGS IN THE SOFTWARE.
28
28
  */
29
29
 
30
- import { TypedEventEmitter } from '@libp2p/interface/events'
31
- import type { PeerId } from '@libp2p/interface/peer-id'
30
+ import { TypedEventEmitter } from '@libp2p/interface'
31
+ import type { PeerId } from '@libp2p/interface'
32
32
 
33
33
  function arrayEquals (array1: Uint8Array, array2: Uint8Array): boolean {
34
34
  if (array1 === array2) {