@libp2p/kad-dht 15.1.1 → 15.1.2-5b004c0c4
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 +21 -12
- 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 +24 -13
- 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';
|
|
@@ -48,7 +49,7 @@ export class RoutingTableRefresh {
|
|
|
48
49
|
* that is close to the requested peer ID and query that, then network
|
|
49
50
|
* peers will tell us who they know who is close to the fake ID
|
|
50
51
|
*/
|
|
51
|
-
refreshTable(force = false) {
|
|
52
|
+
refreshTable(force = false, options) {
|
|
52
53
|
this.log('refreshing routing table');
|
|
53
54
|
const prefixLength = this._maxCommonPrefix();
|
|
54
55
|
const refreshCommonPrefixLengths = this._getTrackedCommonPrefixLengthsForRefresh(prefixLength);
|
|
@@ -71,12 +72,12 @@ export class RoutingTableRefresh {
|
|
|
71
72
|
*/
|
|
72
73
|
Promise.all(refreshCommonPrefixLengths.map(async (lastRefresh, index) => {
|
|
73
74
|
try {
|
|
74
|
-
await this._refreshCommonPrefixLength(index, lastRefresh, force);
|
|
75
|
+
await this._refreshCommonPrefixLength(index, lastRefresh, force, options);
|
|
75
76
|
if (this._numPeersForCpl(prefixLength) === 0) {
|
|
76
77
|
const lastCpl = Math.min(2 * (index + 1), refreshCommonPrefixLengths.length - 1);
|
|
77
78
|
for (let n = index + 1; n < lastCpl + 1; n++) {
|
|
78
79
|
try {
|
|
79
|
-
await this._refreshCommonPrefixLength(n, lastRefresh, force);
|
|
80
|
+
await this._refreshCommonPrefixLength(n, lastRefresh, force, options);
|
|
80
81
|
}
|
|
81
82
|
catch (err) {
|
|
82
83
|
this.log.error(err);
|
|
@@ -98,21 +99,26 @@ export class RoutingTableRefresh {
|
|
|
98
99
|
this.log.error(err);
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
|
-
async _refreshCommonPrefixLength(cpl, lastRefresh, force) {
|
|
102
|
+
async _refreshCommonPrefixLength(cpl, lastRefresh, force, options) {
|
|
102
103
|
if (!force && lastRefresh.getTime() > (Date.now() - this.refreshInterval)) {
|
|
103
104
|
this.log('not running refresh for cpl %s as time since last refresh not above interval', cpl);
|
|
104
105
|
return;
|
|
105
106
|
}
|
|
106
107
|
// gen a key for the query to refresh the cpl
|
|
107
|
-
const peerId =
|
|
108
|
+
const peerId = this._generateRandomPeerId(cpl);
|
|
108
109
|
this.log('starting refreshing cpl %s with key %p (routing table size was %s)', cpl, peerId, this.routingTable.size);
|
|
109
|
-
const signal = AbortSignal.timeout(this.refreshQueryTimeout);
|
|
110
|
+
const signal = anySignal([options?.signal, AbortSignal.timeout(this.refreshQueryTimeout)]);
|
|
110
111
|
setMaxListeners(Infinity, signal);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
try {
|
|
113
|
+
const peers = await length(this.peerRouting.getClosestPeers(peerId.toMultihash().bytes, {
|
|
114
|
+
signal
|
|
115
|
+
}));
|
|
116
|
+
this.log(`found ${peers} peers that were close to imaginary peer %p`, peerId);
|
|
117
|
+
this.log('finished refreshing cpl %s with key %p (routing table size is now %s)', cpl, peerId, this.routingTable.size);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
signal.clear();
|
|
121
|
+
}
|
|
116
122
|
}
|
|
117
123
|
_getTrackedCommonPrefixLengthsForRefresh(maxCommonPrefix) {
|
|
118
124
|
if (maxCommonPrefix > MAX_COMMON_PREFIX_LENGTH) {
|
|
@@ -125,7 +131,7 @@ export class RoutingTableRefresh {
|
|
|
125
131
|
}
|
|
126
132
|
return dates;
|
|
127
133
|
}
|
|
128
|
-
|
|
134
|
+
_generateRandomPeerId(targetCommonPrefixLength) {
|
|
129
135
|
if (this.routingTable.kb == null) {
|
|
130
136
|
throw new Error('Routing table not started');
|
|
131
137
|
}
|
|
@@ -134,11 +140,11 @@ export class RoutingTableRefresh {
|
|
|
134
140
|
}
|
|
135
141
|
const randomData = randomBytes(2);
|
|
136
142
|
const randomUint16 = (randomData[1] << 8) + randomData[0];
|
|
137
|
-
const key =
|
|
143
|
+
const key = this._makePeerId(this.routingTable.kb.localPeer.kadId, randomUint16, targetCommonPrefixLength);
|
|
138
144
|
const multihash = Digest.decode(key);
|
|
139
145
|
return peerIdFromMultihash(multihash);
|
|
140
146
|
}
|
|
141
|
-
|
|
147
|
+
_makePeerId(localKadId, randomPrefix, targetCommonPrefixLength) {
|
|
142
148
|
if (targetCommonPrefixLength > MAX_COMMON_PREFIX_LENGTH) {
|
|
143
149
|
throw new Error(`Cannot generate peer ID for common prefix length greater than ${MAX_COMMON_PREFIX_LENGTH}`);
|
|
144
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/routing-table/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACrF,OAAO,kBAAkB,MAAM,4BAA4B,CAAA;AAK3D;;GAEG;AACH,MAAM,wBAAwB,GAAG,EAAE,CAAA;AAcnC;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACb,GAAG,CAAQ;IACX,WAAW,CAAa;IACxB,YAAY,CAAc;IAC1B,eAAe,CAAQ;IACvB,mBAAmB,CAAQ;IAC3B,6BAA6B,CAAQ;IAC9C,gBAAgB,CAAgC;IAExD,YAAa,UAAyC,EAAE,IAA6B;QACnF,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAC3F,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,wBAAwB,CAAC,CAAA;QAC/E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,sBAAsB,CAAA;QAChE,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,IAAI,2BAA2B,CAAA;QAC7E,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAA;QAEvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,GAAG,CAAC,kCAAkC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAA;QACpE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAE,QAAiB,KAAK;
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/routing-table/refresh.ts"],"names":[],"mappings":"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"}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Key } from 'interface-datastore/key';
|
|
2
2
|
import { CID } from 'multiformats/cid';
|
|
3
3
|
import type { Operation, OperationMetrics } from './kad-dht.js';
|
|
4
|
-
import type { PeerId, PeerInfo } from '@libp2p/interface';
|
|
4
|
+
import type { AbortOptions, PeerId, PeerInfo } from '@libp2p/interface';
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
6
|
export declare function removePrivateAddressesMapper(peer: PeerInfo): PeerInfo;
|
|
7
7
|
export declare function removePublicAddressesMapper(peer: PeerInfo): PeerInfo;
|
|
@@ -9,11 +9,11 @@ export declare function passthroughMapper(info: PeerInfo): PeerInfo;
|
|
|
9
9
|
/**
|
|
10
10
|
* Creates a DHT ID by hashing a given Uint8Array
|
|
11
11
|
*/
|
|
12
|
-
export declare function convertBuffer(buf: Uint8Array): Promise<Uint8Array>;
|
|
12
|
+
export declare function convertBuffer(buf: Uint8Array, options?: AbortOptions): Promise<Uint8Array>;
|
|
13
13
|
/**
|
|
14
14
|
* Creates a DHT ID by hashing a Peer ID
|
|
15
15
|
*/
|
|
16
|
-
export declare function convertPeerId(peerId: PeerId): Promise<Uint8Array>;
|
|
16
|
+
export declare function convertPeerId(peerId: PeerId, options?: AbortOptions): Promise<Uint8Array>;
|
|
17
17
|
/**
|
|
18
18
|
* Convert a Uint8Array to their SHA2-256 hash
|
|
19
19
|
*/
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAQtC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAQtC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAKxD,wBAAgB,4BAA4B,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAkCtE;AAED,wBAAgB,2BAA2B,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CA4BrE;AAED,wBAAgB,iBAAiB,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAE3D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAKjG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAEhG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,GAAG,GAAG,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,GAAG,CAEvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAK3D;AAED,wBAAgB,cAAc,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAExD;AAED,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAEnD;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAO3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAK/E;AAED,wBAAgB,QAAQ,CAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,IAAI,GAAE,MAAY,GAAG,MAAM,IAAI,CAO9E;AAUD,wBAAgB,iBAAiB,CAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAwBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,GAAG,GAAG;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAaxE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,CAatF;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC,GAAG,CAAC,CAwBjL;AAED,wBAAgB,mBAAmB,CAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAwBhK"}
|
package/dist/src/utils.js
CHANGED
|
@@ -69,15 +69,16 @@ export function passthroughMapper(info) {
|
|
|
69
69
|
/**
|
|
70
70
|
* Creates a DHT ID by hashing a given Uint8Array
|
|
71
71
|
*/
|
|
72
|
-
export async function convertBuffer(buf) {
|
|
72
|
+
export async function convertBuffer(buf, options) {
|
|
73
73
|
const multihash = await sha256.digest(buf);
|
|
74
|
+
options?.signal?.throwIfAborted();
|
|
74
75
|
return multihash.digest;
|
|
75
76
|
}
|
|
76
77
|
/**
|
|
77
78
|
* Creates a DHT ID by hashing a Peer ID
|
|
78
79
|
*/
|
|
79
|
-
export async function convertPeerId(peerId) {
|
|
80
|
-
return convertBuffer(peerId.toMultihash().bytes);
|
|
80
|
+
export async function convertPeerId(peerId, options) {
|
|
81
|
+
return convertBuffer(peerId.toMultihash().bytes, options);
|
|
81
82
|
}
|
|
82
83
|
/**
|
|
83
84
|
* Convert a Uint8Array to their SHA2-256 hash
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/kad-dht",
|
|
3
|
-
"version": "15.1.
|
|
3
|
+
"version": "15.1.2-5b004c0c4",
|
|
4
4
|
"description": "JavaScript implementation of the Kad-DHT for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/kad-dht#readme",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"doc-check": "aegir doc-check"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@libp2p/crypto": "
|
|
51
|
-
"@libp2p/interface": "
|
|
52
|
-
"@libp2p/interface-internal": "
|
|
53
|
-
"@libp2p/peer-collections": "
|
|
54
|
-
"@libp2p/peer-id": "
|
|
55
|
-
"@libp2p/ping": "
|
|
56
|
-
"@libp2p/record": "
|
|
57
|
-
"@libp2p/utils": "
|
|
50
|
+
"@libp2p/crypto": "5.1.4-5b004c0c4",
|
|
51
|
+
"@libp2p/interface": "2.10.2-5b004c0c4",
|
|
52
|
+
"@libp2p/interface-internal": "2.3.14-5b004c0c4",
|
|
53
|
+
"@libp2p/peer-collections": "6.0.30-5b004c0c4",
|
|
54
|
+
"@libp2p/peer-id": "5.1.5-5b004c0c4",
|
|
55
|
+
"@libp2p/ping": "2.0.32-5b004c0c4",
|
|
56
|
+
"@libp2p/record": "4.0.6-5b004c0c4",
|
|
57
|
+
"@libp2p/utils": "6.6.5-5b004c0c4",
|
|
58
58
|
"@multiformats/multiaddr": "^12.4.0",
|
|
59
59
|
"any-signal": "^4.1.1",
|
|
60
60
|
"interface-datastore": "^8.3.1",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"it-pushable": "^3.2.3",
|
|
71
71
|
"it-take": "^3.0.8",
|
|
72
72
|
"mortice": "^3.0.6",
|
|
73
|
-
"multiformats": "^13.3.
|
|
73
|
+
"multiformats": "^13.3.6",
|
|
74
74
|
"p-defer": "^4.0.1",
|
|
75
75
|
"p-event": "^6.0.1",
|
|
76
76
|
"progress-events": "^1.0.1",
|
|
@@ -81,14 +81,14 @@
|
|
|
81
81
|
"uint8arrays": "^5.1.0"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
|
-
"@libp2p/interface-compliance-tests": "
|
|
85
|
-
"@libp2p/logger": "
|
|
86
|
-
"@libp2p/peer-store": "
|
|
84
|
+
"@libp2p/interface-compliance-tests": "6.4.8-5b004c0c4",
|
|
85
|
+
"@libp2p/logger": "5.1.18-5b004c0c4",
|
|
86
|
+
"@libp2p/peer-store": "11.2.2-5b004c0c4",
|
|
87
87
|
"@types/lodash.random": "^3.2.9",
|
|
88
88
|
"@types/lodash.range": "^3.2.9",
|
|
89
89
|
"@types/sinon": "^17.0.4",
|
|
90
90
|
"@types/which": "^3.0.4",
|
|
91
|
-
"aegir": "^47.0.
|
|
91
|
+
"aegir": "^47.0.14",
|
|
92
92
|
"benchmark": "^2.1.4",
|
|
93
93
|
"datastore-core": "^10.0.2",
|
|
94
94
|
"delay": "^6.0.0",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"lodash.random": "^3.2.0",
|
|
101
101
|
"lodash.range": "^3.2.0",
|
|
102
102
|
"p-retry": "^6.2.1",
|
|
103
|
-
"protons": "^7.6.
|
|
103
|
+
"protons": "^7.6.1",
|
|
104
104
|
"sinon": "^20.0.0",
|
|
105
105
|
"sinon-ts": "^2.0.0",
|
|
106
106
|
"which": "^5.0.0"
|
package/src/constants.ts
CHANGED
|
@@ -27,8 +27,14 @@ export const REPROVIDE_MAX_QUEUE_SIZE = 16_384
|
|
|
27
27
|
// How often to check if records need re-providing
|
|
28
28
|
export const REPROVIDE_INTERVAL = hour
|
|
29
29
|
|
|
30
|
+
// How long to reprovide for
|
|
31
|
+
export const REPROVIDE_TIMEOUT = hour
|
|
32
|
+
|
|
30
33
|
export const READ_MESSAGE_TIMEOUT = 10 * second
|
|
31
34
|
|
|
35
|
+
// How long to process newly connected peers for
|
|
36
|
+
export const ON_PEER_CONNECT_TIMEOUT = 10 * second
|
|
37
|
+
|
|
32
38
|
// The number of records that will be retrieved on a call to getMany()
|
|
33
39
|
export const GET_MANY_RECORD_COUNT = 16
|
|
34
40
|
|
|
@@ -22,7 +22,7 @@ import type { Network, SendMessageOptions } from '../network.js'
|
|
|
22
22
|
import type { PeerRouting } from '../peer-routing/index.js'
|
|
23
23
|
import type { QueryManager } from '../query/manager.js'
|
|
24
24
|
import type { QueryFunc } from '../query/types.js'
|
|
25
|
-
import type { Logger, RoutingOptions } from '@libp2p/interface'
|
|
25
|
+
import type { AbortOptions, Logger, RoutingOptions } from '@libp2p/interface'
|
|
26
26
|
|
|
27
27
|
export interface ContentFetchingInit {
|
|
28
28
|
validators: Validators
|
|
@@ -68,19 +68,19 @@ export class ContentFetching {
|
|
|
68
68
|
* Attempt to retrieve the value for the given key from
|
|
69
69
|
* the local datastore
|
|
70
70
|
*/
|
|
71
|
-
async getLocal (key: Uint8Array): Promise<Libp2pRecord> {
|
|
71
|
+
async getLocal (key: Uint8Array, options?: AbortOptions): Promise<Libp2pRecord> {
|
|
72
72
|
this.log('getLocal %b', key)
|
|
73
73
|
|
|
74
74
|
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
|
|
75
75
|
|
|
76
76
|
this.log('fetching record for key %k', dsKey)
|
|
77
77
|
|
|
78
|
-
const raw = await this.components.datastore.get(dsKey)
|
|
78
|
+
const raw = await this.components.datastore.get(dsKey, options)
|
|
79
79
|
this.log('found %k in local datastore', dsKey)
|
|
80
80
|
|
|
81
81
|
const rec = Libp2pRecord.deserialize(raw)
|
|
82
82
|
|
|
83
|
-
await verifyRecord(this.validators, rec)
|
|
83
|
+
await verifyRecord(this.validators, rec, options)
|
|
84
84
|
|
|
85
85
|
return rec
|
|
86
86
|
}
|
|
@@ -104,7 +104,7 @@ export class ContentFetching {
|
|
|
104
104
|
try {
|
|
105
105
|
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
|
|
106
106
|
this.log(`Storing corrected record for key ${dsKey.toString()}`)
|
|
107
|
-
await this.components.datastore.put(dsKey, fixupRec.subarray())
|
|
107
|
+
await this.components.datastore.put(dsKey, fixupRec.subarray(), options)
|
|
108
108
|
} catch (err: any) {
|
|
109
109
|
this.log.error('Failed error correcting self', err)
|
|
110
110
|
}
|
|
@@ -148,7 +148,7 @@ export class ContentFetching {
|
|
|
148
148
|
// store the record locally
|
|
149
149
|
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
|
|
150
150
|
this.log(`storing record for key ${dsKey.toString()}`)
|
|
151
|
-
await this.components.datastore.put(dsKey, record.subarray())
|
|
151
|
+
await this.components.datastore.put(dsKey, record.subarray(), options)
|
|
152
152
|
|
|
153
153
|
// put record to the closest peers
|
|
154
154
|
yield * pipe(
|
|
@@ -265,7 +265,7 @@ export class ContentFetching {
|
|
|
265
265
|
this.log('getMany values for %b', key)
|
|
266
266
|
|
|
267
267
|
try {
|
|
268
|
-
const localRec = await this.getLocal(key)
|
|
268
|
+
const localRec = await this.getLocal(key, options)
|
|
269
269
|
|
|
270
270
|
yield valueEvent({
|
|
271
271
|
value: localRec.value,
|
|
@@ -83,7 +83,7 @@ export class ContentRouting {
|
|
|
83
83
|
const target = key.multihash.bytes
|
|
84
84
|
|
|
85
85
|
// Add peer as provider
|
|
86
|
-
await this.providers.addProvider(key, this.components.peerId)
|
|
86
|
+
await this.providers.addProvider(key, this.components.peerId, options)
|
|
87
87
|
|
|
88
88
|
const msg: Partial<Message> = {
|
|
89
89
|
type: MessageType.ADD_PROVIDER,
|
|
@@ -182,7 +182,7 @@ export class ContentRouting {
|
|
|
182
182
|
|
|
183
183
|
this.log('findProviders %c', key)
|
|
184
184
|
|
|
185
|
-
const provs = await this.providers.getProviders(key)
|
|
185
|
+
const provs = await this.providers.getProviders(key, options)
|
|
186
186
|
|
|
187
187
|
// yield values if we have some, also slice because maybe we got lucky and already have too many?
|
|
188
188
|
if (provs.length > 0) {
|
|
@@ -190,7 +190,7 @@ export class ContentRouting {
|
|
|
190
190
|
|
|
191
191
|
for (const peerId of provs.slice(0, toFind)) {
|
|
192
192
|
try {
|
|
193
|
-
const peer = await this.components.peerStore.get(peerId)
|
|
193
|
+
const peer = await this.components.peerStore.get(peerId, options)
|
|
194
194
|
|
|
195
195
|
providers.push({
|
|
196
196
|
id: peerId,
|
package/src/errors.ts
CHANGED
|
@@ -8,16 +8,6 @@ export class QueryError extends Error {
|
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
* A query was aborted
|
|
13
|
-
*/
|
|
14
|
-
export class QueryAbortedError extends Error {
|
|
15
|
-
constructor (message = 'Query aborted') {
|
|
16
|
-
super(message)
|
|
17
|
-
this.name = 'QueryAbortedError'
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
11
|
/**
|
|
22
12
|
* An invalid record was received
|
|
23
13
|
*/
|
package/src/index.ts
CHANGED
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
import { KadDHT as KadDHTClass } from './kad-dht.js'
|
|
136
136
|
import { MessageType } from './message/dht.js'
|
|
137
137
|
import { removePrivateAddressesMapper, removePublicAddressesMapper, passthroughMapper } from './utils.js'
|
|
138
|
-
import type { Libp2pEvents, ComponentLogger, TypedEventTarget, Metrics, PeerId, PeerInfo, PeerStore, RoutingOptions, PrivateKey } from '@libp2p/interface'
|
|
138
|
+
import type { Libp2pEvents, ComponentLogger, TypedEventTarget, Metrics, PeerId, PeerInfo, PeerStore, RoutingOptions, PrivateKey, AbortOptions } from '@libp2p/interface'
|
|
139
139
|
import type { AddressManager, ConnectionManager, Registrar } from '@libp2p/interface-internal'
|
|
140
140
|
import type { Ping } from '@libp2p/ping'
|
|
141
141
|
import type { AdaptiveTimeoutInit } from '@libp2p/utils/adaptive-timeout'
|
|
@@ -302,6 +302,10 @@ export interface PeerInfoMapper {
|
|
|
302
302
|
(peer: PeerInfo): PeerInfo
|
|
303
303
|
}
|
|
304
304
|
|
|
305
|
+
export interface SetModeOptions extends AbortOptions {
|
|
306
|
+
force?: boolean
|
|
307
|
+
}
|
|
308
|
+
|
|
305
309
|
export interface KadDHT {
|
|
306
310
|
/**
|
|
307
311
|
* This is the maximum size of the k-buckets and how many peers are looked up
|
|
@@ -350,7 +354,7 @@ export interface KadDHT {
|
|
|
350
354
|
* Provider records must be re-published every 24 hours - pass a previously
|
|
351
355
|
* provided CID here to not re-publish a record for it any more
|
|
352
356
|
*/
|
|
353
|
-
cancelReprovide(key: CID): Promise<void>
|
|
357
|
+
cancelReprovide(key: CID, options?: AbortOptions): Promise<void>
|
|
354
358
|
|
|
355
359
|
/**
|
|
356
360
|
* Store the passed value under the passed key on the DHT
|
|
@@ -366,12 +370,12 @@ export interface KadDHT {
|
|
|
366
370
|
* If 'server' this node will respond to DHT queries, if 'client' this node
|
|
367
371
|
* will not.
|
|
368
372
|
*/
|
|
369
|
-
setMode(mode: 'client' | 'server'): Promise<void>
|
|
373
|
+
setMode(mode: 'client' | 'server', options?: SetModeOptions): Promise<void>
|
|
370
374
|
|
|
371
375
|
/**
|
|
372
376
|
* Force a routing table refresh
|
|
373
377
|
*/
|
|
374
|
-
refreshRoutingTable(): Promise<void>
|
|
378
|
+
refreshRoutingTable(options?: AbortOptions): Promise<void>
|
|
375
379
|
}
|
|
376
380
|
|
|
377
381
|
export interface SingleKadDHT extends KadDHT {
|
|
@@ -388,7 +392,7 @@ export interface SelectFn { (key: Uint8Array, records: Uint8Array[]): number }
|
|
|
388
392
|
* A validator function takes a DHT key and the value of the record for that key
|
|
389
393
|
* and throws if the record is invalid
|
|
390
394
|
*/
|
|
391
|
-
export interface ValidateFn { (key: Uint8Array, value: Uint8Array): Promise<void> }
|
|
395
|
+
export interface ValidateFn { (key: Uint8Array, value: Uint8Array, options?: AbortOptions): Promise<void> }
|
|
392
396
|
|
|
393
397
|
/**
|
|
394
398
|
* Selectors are a map of key prefixes to selector functions
|
|
@@ -680,6 +684,15 @@ export interface KadDHTInit {
|
|
|
680
684
|
* Dynamic network timeout settings for sending messages to peers
|
|
681
685
|
*/
|
|
682
686
|
networkDialTimeout?: Omit<AdaptiveTimeoutInit, 'metricsName' | 'metrics'>
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* When a peer that supports the KAD-DHT protocol connects we try to add it to
|
|
690
|
+
* the routing table. This setting is how long we will try to do that for in
|
|
691
|
+
* ms.
|
|
692
|
+
*
|
|
693
|
+
* @default 10_000
|
|
694
|
+
*/
|
|
695
|
+
onPeerConnectTimeout?: number
|
|
683
696
|
}
|
|
684
697
|
|
|
685
698
|
export interface KadDHTComponents {
|
package/src/kad-dht.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { NotFoundError, TypedEventEmitter, contentRoutingSymbol, peerDiscoverySymbol, peerRoutingSymbol, serviceCapabilities, serviceDependencies, start, stop } from '@libp2p/interface'
|
|
1
|
+
import { NotFoundError, TypedEventEmitter, contentRoutingSymbol, peerDiscoverySymbol, peerRoutingSymbol, serviceCapabilities, serviceDependencies, setMaxListeners, start, stop } from '@libp2p/interface'
|
|
2
2
|
import drain from 'it-drain'
|
|
3
3
|
import createMortice from 'mortice'
|
|
4
4
|
import pDefer from 'p-defer'
|
|
5
|
-
import { ALPHA, PROTOCOL } from './constants.js'
|
|
5
|
+
import { ALPHA, ON_PEER_CONNECT_TIMEOUT, PROTOCOL } from './constants.js'
|
|
6
6
|
import { ContentFetching } from './content-fetching/index.js'
|
|
7
7
|
import { ContentRouting as KADDHTContentRouting } from './content-routing/index.js'
|
|
8
8
|
import { Network } from './network.js'
|
|
@@ -22,8 +22,9 @@ import {
|
|
|
22
22
|
removePrivateAddressesMapper,
|
|
23
23
|
timeOperationGenerator
|
|
24
24
|
} from './utils.js'
|
|
25
|
-
import type { KadDHTComponents, KadDHTInit, Validators, Selectors, KadDHT as KadDHTInterface, QueryEvent, PeerInfoMapper } from './index.js'
|
|
25
|
+
import type { KadDHTComponents, KadDHTInit, Validators, Selectors, KadDHT as KadDHTInterface, QueryEvent, PeerInfoMapper, SetModeOptions } from './index.js'
|
|
26
26
|
import type { ContentRouting, CounterGroup, Logger, MetricGroup, PeerDiscovery, PeerDiscoveryEvents, PeerId, PeerInfo, PeerRouting, RoutingOptions, Startable } from '@libp2p/interface'
|
|
27
|
+
import type { AbortOptions } from 'it-pushable'
|
|
27
28
|
import type { CID } from 'multiformats/cid'
|
|
28
29
|
|
|
29
30
|
/**
|
|
@@ -142,6 +143,7 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
142
143
|
private readonly dhtPeerRouting: DHTPeerRouting
|
|
143
144
|
private readonly peerInfoMapper: PeerInfoMapper
|
|
144
145
|
private readonly reprovider: Reprovider
|
|
146
|
+
private readonly onPeerConnectTimeout: number
|
|
145
147
|
|
|
146
148
|
/**
|
|
147
149
|
* Create a new KadDHT
|
|
@@ -171,6 +173,7 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
171
173
|
this.maxInboundStreams = init.maxInboundStreams ?? DEFAULT_MAX_INBOUND_STREAMS
|
|
172
174
|
this.maxOutboundStreams = init.maxOutboundStreams ?? DEFAULT_MAX_OUTBOUND_STREAMS
|
|
173
175
|
this.peerInfoMapper = init.peerInfoMapper ?? removePrivateAddressesMapper
|
|
176
|
+
this.onPeerConnectTimeout = init.onPeerConnectTimeout ?? ON_PEER_CONNECT_TIMEOUT
|
|
174
177
|
|
|
175
178
|
const providerLock = createMortice()
|
|
176
179
|
|
|
@@ -396,8 +399,13 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
396
399
|
return
|
|
397
400
|
}
|
|
398
401
|
|
|
402
|
+
const signal = AbortSignal.timeout(this.onPeerConnectTimeout)
|
|
403
|
+
setMaxListeners(Infinity, signal)
|
|
404
|
+
|
|
399
405
|
try {
|
|
400
|
-
await this.routingTable.add(peerData.id
|
|
406
|
+
await this.routingTable.add(peerData.id, {
|
|
407
|
+
signal
|
|
408
|
+
})
|
|
401
409
|
} catch (err: any) {
|
|
402
410
|
this.log.error('could not add %p to routing table', peerData.id, err)
|
|
403
411
|
}
|
|
@@ -420,16 +428,16 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
420
428
|
/**
|
|
421
429
|
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
422
430
|
*/
|
|
423
|
-
async setMode (mode: 'client' | 'server',
|
|
424
|
-
if (mode === this.getMode() &&
|
|
431
|
+
async setMode (mode: 'client' | 'server', options?: SetModeOptions): Promise<void> {
|
|
432
|
+
if (mode === this.getMode() && options?.force !== true) {
|
|
425
433
|
this.log('already in %s mode', mode)
|
|
426
434
|
return
|
|
427
435
|
}
|
|
428
436
|
|
|
429
|
-
await this.components.registrar.unhandle(this.protocol)
|
|
437
|
+
await this.components.registrar.unhandle(this.protocol, options)
|
|
430
438
|
|
|
431
439
|
// check again after async work
|
|
432
|
-
if (mode === this.getMode() &&
|
|
440
|
+
if (mode === this.getMode() && options?.force !== true) {
|
|
433
441
|
this.log('already in %s mode', mode)
|
|
434
442
|
return
|
|
435
443
|
}
|
|
@@ -441,6 +449,7 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
441
449
|
this.log('enabling server mode while in %s mode', this.getMode())
|
|
442
450
|
this.clientMode = false
|
|
443
451
|
await this.components.registrar.handle(this.protocol, this.rpc.onIncomingStream.bind(this.rpc), {
|
|
452
|
+
signal: options?.signal,
|
|
444
453
|
maxInboundStreams: this.maxInboundStreams,
|
|
445
454
|
maxOutboundStreams: this.maxOutboundStreams
|
|
446
455
|
})
|
|
@@ -458,7 +467,9 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
458
467
|
this.running = true
|
|
459
468
|
|
|
460
469
|
// Only respond to queries when not in client mode
|
|
461
|
-
await this.setMode(this.clientMode ? 'client' : 'server',
|
|
470
|
+
await this.setMode(this.clientMode ? 'client' : 'server', {
|
|
471
|
+
force: true
|
|
472
|
+
})
|
|
462
473
|
|
|
463
474
|
await start(
|
|
464
475
|
this.routingTable,
|
|
@@ -520,8 +531,8 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
520
531
|
* Provider records must be re-published every 24 hours - pass a previously
|
|
521
532
|
* provided CID here to not re-publish a record for it any more
|
|
522
533
|
*/
|
|
523
|
-
async cancelReprovide (key: CID): Promise<void> {
|
|
524
|
-
await this.providers.removeProvider(key, this.components.peerId)
|
|
534
|
+
async cancelReprovide (key: CID, options?: AbortOptions): Promise<void> {
|
|
535
|
+
await this.providers.removeProvider(key, this.components.peerId, options)
|
|
525
536
|
}
|
|
526
537
|
|
|
527
538
|
/**
|
|
@@ -547,7 +558,7 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
547
558
|
yield * this.peerRouting.getClosestPeers(key, options)
|
|
548
559
|
}
|
|
549
560
|
|
|
550
|
-
async refreshRoutingTable (): Promise<void> {
|
|
551
|
-
this.routingTableRefresh.refreshTable(true)
|
|
561
|
+
async refreshRoutingTable (options?: AbortOptions): Promise<void> {
|
|
562
|
+
this.routingTableRefresh.refreshTable(true, options)
|
|
552
563
|
}
|
|
553
564
|
}
|
|
@@ -2,7 +2,7 @@ import { xor as uint8ArrayXor } from 'uint8arrays/xor'
|
|
|
2
2
|
import { xorCompare as uint8ArrayXorCompare } from 'uint8arrays/xor-compare'
|
|
3
3
|
import { convertPeerId } from './utils.js'
|
|
4
4
|
import type { DisjointPath } from './index.js'
|
|
5
|
-
import type { PeerId, PeerInfo } from '@libp2p/interface'
|
|
5
|
+
import type { AbortOptions, PeerId, PeerInfo } from '@libp2p/interface'
|
|
6
6
|
|
|
7
7
|
interface PeerDistance {
|
|
8
8
|
peer: PeerInfo
|
|
@@ -49,8 +49,8 @@ export class PeerDistanceList {
|
|
|
49
49
|
/**
|
|
50
50
|
* Add a peerId to the list.
|
|
51
51
|
*/
|
|
52
|
-
async add (peer: PeerInfo, path: DisjointPath = { index: -1, queued: 0, running: 0, total: 0 }): Promise<void> {
|
|
53
|
-
const dhtKey = await convertPeerId(peer.id)
|
|
52
|
+
async add (peer: PeerInfo, path: DisjointPath = { index: -1, queued: 0, running: 0, total: 0 }, options?: AbortOptions): Promise<void> {
|
|
53
|
+
const dhtKey = await convertPeerId(peer.id, options)
|
|
54
54
|
|
|
55
55
|
this.addWithKadId(peer, dhtKey, path)
|
|
56
56
|
}
|
|
@@ -100,12 +100,12 @@ export class PeerDistanceList {
|
|
|
100
100
|
* Indicates whether any of the peerIds passed as a parameter are closer
|
|
101
101
|
* to the origin key than the furthest peerId in the PeerDistanceList.
|
|
102
102
|
*/
|
|
103
|
-
async isCloser (peerId: PeerId): Promise<boolean> {
|
|
103
|
+
async isCloser (peerId: PeerId, options?: AbortOptions): Promise<boolean> {
|
|
104
104
|
if (this.length === 0) {
|
|
105
105
|
return true
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const dhtKey = await convertPeerId(peerId)
|
|
108
|
+
const dhtKey = await convertPeerId(peerId, options)
|
|
109
109
|
const dhtKeyXor = uint8ArrayXor(dhtKey, this.originDhtKey)
|
|
110
110
|
const furthestDistance = this.peerDistances[this.peerDistances.length - 1].distance
|
|
111
111
|
|
|
@@ -116,13 +116,13 @@ export class PeerDistanceList {
|
|
|
116
116
|
* Indicates whether any of the peerIds passed as a parameter are closer
|
|
117
117
|
* to the origin key than the furthest peerId in the PeerDistanceList.
|
|
118
118
|
*/
|
|
119
|
-
async anyCloser (peerIds: PeerId[]): Promise<boolean> {
|
|
119
|
+
async anyCloser (peerIds: PeerId[], options?: AbortOptions): Promise<boolean> {
|
|
120
120
|
if (peerIds.length === 0) {
|
|
121
121
|
return false
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
return Promise.any(
|
|
125
|
-
peerIds.map(async peerId => this.isCloser(peerId))
|
|
125
|
+
peerIds.map(async peerId => this.isCloser(peerId, options))
|
|
126
126
|
)
|
|
127
127
|
}
|
|
128
128
|
}
|