@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.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +4 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/content-fetching/index.d.ts +2 -2
- package/dist/src/content-fetching/index.d.ts.map +1 -1
- package/dist/src/content-fetching/index.js +6 -6
- package/dist/src/content-fetching/index.js.map +1 -1
- package/dist/src/content-routing/index.js +3 -3
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/errors.d.ts +0 -6
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +0 -9
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +16 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/kad-dht.d.ts +6 -4
- package/dist/src/kad-dht.d.ts.map +1 -1
- package/dist/src/kad-dht.js +23 -13
- package/dist/src/kad-dht.js.map +1 -1
- package/dist/src/peer-distance-list.d.ts +4 -4
- package/dist/src/peer-distance-list.d.ts.map +1 -1
- package/dist/src/peer-distance-list.js +6 -6
- package/dist/src/peer-distance-list.js.map +1 -1
- package/dist/src/peer-routing/index.d.ts +4 -3
- package/dist/src/peer-routing/index.d.ts.map +1 -1
- package/dist/src/peer-routing/index.js +17 -17
- package/dist/src/peer-routing/index.js.map +1 -1
- package/dist/src/providers.d.ts.map +1 -1
- package/dist/src/providers.js +6 -6
- package/dist/src/providers.js.map +1 -1
- package/dist/src/query/manager.d.ts.map +1 -1
- package/dist/src/query/manager.js +3 -1
- package/dist/src/query/manager.js.map +1 -1
- package/dist/src/query/query-path.d.ts.map +1 -1
- package/dist/src/query/query-path.js +11 -5
- package/dist/src/query/query-path.js.map +1 -1
- package/dist/src/query-self.d.ts.map +1 -1
- package/dist/src/query-self.js +1 -0
- package/dist/src/query-self.js.map +1 -1
- package/dist/src/record/validators.d.ts +2 -1
- package/dist/src/record/validators.d.ts.map +1 -1
- package/dist/src/record/validators.js +3 -3
- package/dist/src/record/validators.js.map +1 -1
- package/dist/src/reprovider.d.ts.map +1 -1
- package/dist/src/reprovider.js +11 -7
- package/dist/src/reprovider.js.map +1 -1
- package/dist/src/routing-table/index.d.ts +2 -2
- package/dist/src/routing-table/index.d.ts.map +1 -1
- package/dist/src/routing-table/index.js +14 -13
- package/dist/src/routing-table/index.js.map +1 -1
- package/dist/src/routing-table/k-bucket.d.ts +12 -7
- package/dist/src/routing-table/k-bucket.d.ts.map +1 -1
- package/dist/src/routing-table/k-bucket.js +20 -14
- package/dist/src/routing-table/k-bucket.js.map +1 -1
- package/dist/src/routing-table/refresh.d.ts +5 -5
- package/dist/src/routing-table/refresh.d.ts.map +1 -1
- package/dist/src/routing-table/refresh.js +20 -14
- package/dist/src/routing-table/refresh.js.map +1 -1
- package/dist/src/utils.d.ts +3 -3
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +4 -3
- package/dist/src/utils.js.map +1 -1
- package/package.json +15 -15
- package/src/constants.ts +6 -0
- package/src/content-fetching/index.ts +7 -7
- package/src/content-routing/index.ts +3 -3
- package/src/errors.ts +0 -10
- package/src/index.ts +18 -5
- package/src/kad-dht.ts +26 -14
- package/src/peer-distance-list.ts +7 -7
- package/src/peer-routing/index.ts +18 -17
- package/src/providers.ts +10 -6
- package/src/query/manager.ts +3 -1
- package/src/query/query-path.ts +11 -5
- package/src/query-self.ts +2 -0
- package/src/record/validators.ts +4 -3
- package/src/reprovider.ts +11 -7
- package/src/routing-table/index.ts +14 -13
- package/src/routing-table/k-bucket.ts +30 -18
- package/src/routing-table/refresh.ts +20 -15
- package/src/utils.ts +5 -4
- 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 =
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
try {
|
|
146
|
+
const peers = await length(this.peerRouting.getClosestPeers(peerId.toMultihash().bytes, {
|
|
147
|
+
signal
|
|
148
|
+
}))
|
|
147
149
|
|
|
148
|
-
|
|
149
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
/**
|
package/dist/typedoc-urls.json
DELETED
|
@@ -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
|
-
}
|