@libp2p/kad-dht 15.1.1 → 15.1.2-3528df829

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 (86) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/constants.d.ts +2 -0
  4. package/dist/src/constants.d.ts.map +1 -1
  5. package/dist/src/constants.js +4 -0
  6. package/dist/src/constants.js.map +1 -1
  7. package/dist/src/content-fetching/index.d.ts +2 -2
  8. package/dist/src/content-fetching/index.d.ts.map +1 -1
  9. package/dist/src/content-fetching/index.js +6 -6
  10. package/dist/src/content-fetching/index.js.map +1 -1
  11. package/dist/src/content-routing/index.js +3 -3
  12. package/dist/src/content-routing/index.js.map +1 -1
  13. package/dist/src/errors.d.ts +0 -6
  14. package/dist/src/errors.d.ts.map +1 -1
  15. package/dist/src/errors.js +0 -9
  16. package/dist/src/errors.js.map +1 -1
  17. package/dist/src/index.d.ts +16 -5
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js.map +1 -1
  20. package/dist/src/kad-dht.d.ts +6 -4
  21. package/dist/src/kad-dht.d.ts.map +1 -1
  22. package/dist/src/kad-dht.js +23 -13
  23. package/dist/src/kad-dht.js.map +1 -1
  24. package/dist/src/peer-distance-list.d.ts +4 -4
  25. package/dist/src/peer-distance-list.d.ts.map +1 -1
  26. package/dist/src/peer-distance-list.js +6 -6
  27. package/dist/src/peer-distance-list.js.map +1 -1
  28. package/dist/src/peer-routing/index.d.ts +4 -3
  29. package/dist/src/peer-routing/index.d.ts.map +1 -1
  30. package/dist/src/peer-routing/index.js +17 -17
  31. package/dist/src/peer-routing/index.js.map +1 -1
  32. package/dist/src/providers.d.ts.map +1 -1
  33. package/dist/src/providers.js +6 -6
  34. package/dist/src/providers.js.map +1 -1
  35. package/dist/src/query/manager.d.ts.map +1 -1
  36. package/dist/src/query/manager.js +3 -1
  37. package/dist/src/query/manager.js.map +1 -1
  38. package/dist/src/query/query-path.d.ts.map +1 -1
  39. package/dist/src/query/query-path.js +11 -5
  40. package/dist/src/query/query-path.js.map +1 -1
  41. package/dist/src/query-self.d.ts.map +1 -1
  42. package/dist/src/query-self.js +1 -0
  43. package/dist/src/query-self.js.map +1 -1
  44. package/dist/src/record/validators.d.ts +2 -1
  45. package/dist/src/record/validators.d.ts.map +1 -1
  46. package/dist/src/record/validators.js +3 -3
  47. package/dist/src/record/validators.js.map +1 -1
  48. package/dist/src/reprovider.d.ts.map +1 -1
  49. package/dist/src/reprovider.js +11 -7
  50. package/dist/src/reprovider.js.map +1 -1
  51. package/dist/src/routing-table/index.d.ts +2 -2
  52. package/dist/src/routing-table/index.d.ts.map +1 -1
  53. package/dist/src/routing-table/index.js +14 -13
  54. package/dist/src/routing-table/index.js.map +1 -1
  55. package/dist/src/routing-table/k-bucket.d.ts +12 -7
  56. package/dist/src/routing-table/k-bucket.d.ts.map +1 -1
  57. package/dist/src/routing-table/k-bucket.js +20 -14
  58. package/dist/src/routing-table/k-bucket.js.map +1 -1
  59. package/dist/src/routing-table/refresh.d.ts +5 -5
  60. package/dist/src/routing-table/refresh.d.ts.map +1 -1
  61. package/dist/src/routing-table/refresh.js +20 -14
  62. package/dist/src/routing-table/refresh.js.map +1 -1
  63. package/dist/src/utils.d.ts +3 -3
  64. package/dist/src/utils.d.ts.map +1 -1
  65. package/dist/src/utils.js +4 -3
  66. package/dist/src/utils.js.map +1 -1
  67. package/package.json +15 -15
  68. package/src/constants.ts +6 -0
  69. package/src/content-fetching/index.ts +7 -7
  70. package/src/content-routing/index.ts +3 -3
  71. package/src/errors.ts +0 -10
  72. package/src/index.ts +18 -5
  73. package/src/kad-dht.ts +26 -14
  74. package/src/peer-distance-list.ts +7 -7
  75. package/src/peer-routing/index.ts +18 -17
  76. package/src/providers.ts +10 -6
  77. package/src/query/manager.ts +3 -1
  78. package/src/query/query-path.ts +11 -5
  79. package/src/query-self.ts +2 -0
  80. package/src/record/validators.ts +4 -3
  81. package/src/reprovider.ts +11 -7
  82. package/src/routing-table/index.ts +14 -13
  83. package/src/routing-table/k-bucket.ts +30 -18
  84. package/src/routing-table/refresh.ts +20 -15
  85. package/src/utils.ts +5 -4
  86. package/dist/typedoc-urls.json +0 -63
@@ -1,6 +1,7 @@
1
1
  import { randomBytes } from '@libp2p/crypto'
2
2
  import { setMaxListeners } from '@libp2p/interface'
3
3
  import { peerIdFromMultihash } from '@libp2p/peer-id'
4
+ import { anySignal } from 'any-signal'
4
5
  import length from 'it-length'
5
6
  import * as Digest from 'multiformats/hashes/digest'
6
7
  import { sha256 } from 'multiformats/hashes/sha2'
@@ -9,7 +10,7 @@ import { TABLE_REFRESH_INTERVAL, TABLE_REFRESH_QUERY_TIMEOUT } from '../constant
9
10
  import GENERATED_PREFIXES from './generated-prefix-list.js'
10
11
  import type { RoutingTable } from './index.js'
11
12
  import type { PeerRouting } from '../peer-routing/index.js'
12
- import type { ComponentLogger, Logger, PeerId } from '@libp2p/interface'
13
+ import type { AbortOptions, ComponentLogger, Logger, PeerId } from '@libp2p/interface'
13
14
 
14
15
  /**
15
16
  * Cannot generate random KadIds longer than this + 1
@@ -70,7 +71,7 @@ export class RoutingTableRefresh {
70
71
  * that is close to the requested peer ID and query that, then network
71
72
  * peers will tell us who they know who is close to the fake ID
72
73
  */
73
- refreshTable (force: boolean = false): void {
74
+ refreshTable (force: boolean = false, options?: AbortOptions): void {
74
75
  this.log('refreshing routing table')
75
76
 
76
77
  const prefixLength = this._maxCommonPrefix()
@@ -97,14 +98,14 @@ export class RoutingTableRefresh {
97
98
  Promise.all(
98
99
  refreshCommonPrefixLengths.map(async (lastRefresh, index) => {
99
100
  try {
100
- await this._refreshCommonPrefixLength(index, lastRefresh, force)
101
+ await this._refreshCommonPrefixLength(index, lastRefresh, force, options)
101
102
 
102
103
  if (this._numPeersForCpl(prefixLength) === 0) {
103
104
  const lastCpl = Math.min(2 * (index + 1), refreshCommonPrefixLengths.length - 1)
104
105
 
105
106
  for (let n = index + 1; n < lastCpl + 1; n++) {
106
107
  try {
107
- await this._refreshCommonPrefixLength(n, lastRefresh, force)
108
+ await this._refreshCommonPrefixLength(n, lastRefresh, force, options)
108
109
  } catch (err: any) {
109
110
  this.log.error(err)
110
111
  }
@@ -127,26 +128,30 @@ export class RoutingTableRefresh {
127
128
  })
128
129
  }
129
130
 
130
- async _refreshCommonPrefixLength (cpl: number, lastRefresh: Date, force: boolean): Promise<void> {
131
+ async _refreshCommonPrefixLength (cpl: number, lastRefresh: Date, force: boolean, options?: AbortOptions): Promise<void> {
131
132
  if (!force && lastRefresh.getTime() > (Date.now() - this.refreshInterval)) {
132
133
  this.log('not running refresh for cpl %s as time since last refresh not above interval', cpl)
133
134
  return
134
135
  }
135
136
 
136
137
  // gen a key for the query to refresh the cpl
137
- const peerId = await this._generateRandomPeerId(cpl)
138
+ const peerId = this._generateRandomPeerId(cpl)
138
139
 
139
140
  this.log('starting refreshing cpl %s with key %p (routing table size was %s)', cpl, peerId, this.routingTable.size)
140
141
 
141
- const signal = AbortSignal.timeout(this.refreshQueryTimeout)
142
+ const signal = anySignal([options?.signal, AbortSignal.timeout(this.refreshQueryTimeout)])
142
143
  setMaxListeners(Infinity, signal)
143
144
 
144
- const peers = await length(this.peerRouting.getClosestPeers(peerId.toMultihash().bytes, {
145
- signal
146
- }))
145
+ try {
146
+ const peers = await length(this.peerRouting.getClosestPeers(peerId.toMultihash().bytes, {
147
+ signal
148
+ }))
147
149
 
148
- this.log(`found ${peers} peers that were close to imaginary peer %p`, peerId)
149
- this.log('finished refreshing cpl %s with key %p (routing table size is now %s)', cpl, peerId, this.routingTable.size)
150
+ this.log(`found ${peers} peers that were close to imaginary peer %p`, peerId)
151
+ this.log('finished refreshing cpl %s with key %p (routing table size is now %s)', cpl, peerId, this.routingTable.size)
152
+ } finally {
153
+ signal.clear()
154
+ }
150
155
  }
151
156
 
152
157
  _getTrackedCommonPrefixLengthsForRefresh (maxCommonPrefix: number): Date[] {
@@ -164,7 +169,7 @@ export class RoutingTableRefresh {
164
169
  return dates
165
170
  }
166
171
 
167
- async _generateRandomPeerId (targetCommonPrefixLength: number): Promise<PeerId> {
172
+ _generateRandomPeerId (targetCommonPrefixLength: number): PeerId {
168
173
  if (this.routingTable.kb == null) {
169
174
  throw new Error('Routing table not started')
170
175
  }
@@ -176,13 +181,13 @@ export class RoutingTableRefresh {
176
181
  const randomData = randomBytes(2)
177
182
  const randomUint16 = (randomData[1] << 8) + randomData[0]
178
183
 
179
- const key = await this._makePeerId(this.routingTable.kb.localPeer.kadId, randomUint16, targetCommonPrefixLength)
184
+ const key = this._makePeerId(this.routingTable.kb.localPeer.kadId, randomUint16, targetCommonPrefixLength)
180
185
  const multihash = Digest.decode(key)
181
186
 
182
187
  return peerIdFromMultihash(multihash)
183
188
  }
184
189
 
185
- async _makePeerId (localKadId: Uint8Array, randomPrefix: number, targetCommonPrefixLength: number): Promise<Uint8Array> {
190
+ _makePeerId (localKadId: Uint8Array, randomPrefix: number, targetCommonPrefixLength: number): Uint8Array {
186
191
  if (targetCommonPrefixLength > MAX_COMMON_PREFIX_LENGTH) {
187
192
  throw new Error(`Cannot generate peer ID for common prefix length greater than ${MAX_COMMON_PREFIX_LENGTH}`)
188
193
  }
package/src/utils.ts CHANGED
@@ -11,7 +11,7 @@ import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
11
11
  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
- import type { PeerId, PeerInfo } from '@libp2p/interface'
14
+ import type { AbortOptions, PeerId, PeerInfo } from '@libp2p/interface'
15
15
  import type { Multiaddr } from '@multiformats/multiaddr'
16
16
 
17
17
  // const IPNS_PREFIX = uint8ArrayFromString('/ipns/')
@@ -90,8 +90,9 @@ export function passthroughMapper (info: PeerInfo): PeerInfo {
90
90
  /**
91
91
  * Creates a DHT ID by hashing a given Uint8Array
92
92
  */
93
- export async function convertBuffer (buf: Uint8Array): Promise<Uint8Array> {
93
+ export async function convertBuffer (buf: Uint8Array, options?: AbortOptions): Promise<Uint8Array> {
94
94
  const multihash = await sha256.digest(buf)
95
+ options?.signal?.throwIfAborted()
95
96
 
96
97
  return multihash.digest
97
98
  }
@@ -99,8 +100,8 @@ export async function convertBuffer (buf: Uint8Array): Promise<Uint8Array> {
99
100
  /**
100
101
  * Creates a DHT ID by hashing a Peer ID
101
102
  */
102
- export async function convertPeerId (peerId: PeerId): Promise<Uint8Array> {
103
- return convertBuffer(peerId.toMultihash().bytes)
103
+ export async function convertPeerId (peerId: PeerId, options?: AbortOptions): Promise<Uint8Array> {
104
+ return convertBuffer(peerId.toMultihash().bytes, options)
104
105
  }
105
106
 
106
107
  /**
@@ -1,63 +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
- "SingleKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SingleKadDHT.html",
43
- ".:SingleKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.SingleKadDHT.html",
44
- "ValidateFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValidateFn.html",
45
- ".:ValidateFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValidateFn.html",
46
- "ValueEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValueEvent.html",
47
- ".:ValueEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad-dht.ValueEvent.html",
48
- "DHTProgressEvents": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.DHTProgressEvents.html",
49
- ".:DHTProgressEvents": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.DHTProgressEvents.html",
50
- "MessageName": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.MessageName.html",
51
- ".:MessageName": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.MessageName.html",
52
- "QueryEvent": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.QueryEvent.html",
53
- ".:QueryEvent": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.QueryEvent.html",
54
- "Selectors": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Selectors.html",
55
- ".:Selectors": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Selectors.html",
56
- "Validators": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Validators.html",
57
- ".:Validators": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad-dht.Validators.html",
58
- "kadDHT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.kadDHT.html",
59
- ".:kadDHT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.kadDHT.html",
60
- "passthroughMapper": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.passthroughMapper.html",
61
- "removePrivateAddressesMapper": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.removePrivateAddressesMapper.html",
62
- "removePublicAddressesMapper": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad-dht.removePublicAddressesMapper.html"
63
- }