@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';
|
|
@@ -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-3528df829",
|
|
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-3528df829",
|
|
51
|
+
"@libp2p/interface": "2.10.2-3528df829",
|
|
52
|
+
"@libp2p/interface-internal": "2.3.14-3528df829",
|
|
53
|
+
"@libp2p/peer-collections": "6.0.30-3528df829",
|
|
54
|
+
"@libp2p/peer-id": "5.1.5-3528df829",
|
|
55
|
+
"@libp2p/ping": "2.0.32-3528df829",
|
|
56
|
+
"@libp2p/record": "4.0.6-3528df829",
|
|
57
|
+
"@libp2p/utils": "6.6.5-3528df829",
|
|
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-3528df829",
|
|
85
|
+
"@libp2p/logger": "5.1.18-3528df829",
|
|
86
|
+
"@libp2p/peer-store": "11.2.2-3528df829",
|
|
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
|
|
|
@@ -366,7 +369,8 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
366
369
|
readonly [serviceCapabilities]: string[] = [
|
|
367
370
|
'@libp2p/content-routing',
|
|
368
371
|
'@libp2p/peer-routing',
|
|
369
|
-
'@libp2p/peer-discovery'
|
|
372
|
+
'@libp2p/peer-discovery',
|
|
373
|
+
'@libp2p/kad-dht'
|
|
370
374
|
]
|
|
371
375
|
|
|
372
376
|
readonly [serviceDependencies]: string[] = [
|
|
@@ -396,8 +400,13 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
396
400
|
return
|
|
397
401
|
}
|
|
398
402
|
|
|
403
|
+
const signal = AbortSignal.timeout(this.onPeerConnectTimeout)
|
|
404
|
+
setMaxListeners(Infinity, signal)
|
|
405
|
+
|
|
399
406
|
try {
|
|
400
|
-
await this.routingTable.add(peerData.id
|
|
407
|
+
await this.routingTable.add(peerData.id, {
|
|
408
|
+
signal
|
|
409
|
+
})
|
|
401
410
|
} catch (err: any) {
|
|
402
411
|
this.log.error('could not add %p to routing table', peerData.id, err)
|
|
403
412
|
}
|
|
@@ -420,16 +429,16 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
420
429
|
/**
|
|
421
430
|
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
422
431
|
*/
|
|
423
|
-
async setMode (mode: 'client' | 'server',
|
|
424
|
-
if (mode === this.getMode() &&
|
|
432
|
+
async setMode (mode: 'client' | 'server', options?: SetModeOptions): Promise<void> {
|
|
433
|
+
if (mode === this.getMode() && options?.force !== true) {
|
|
425
434
|
this.log('already in %s mode', mode)
|
|
426
435
|
return
|
|
427
436
|
}
|
|
428
437
|
|
|
429
|
-
await this.components.registrar.unhandle(this.protocol)
|
|
438
|
+
await this.components.registrar.unhandle(this.protocol, options)
|
|
430
439
|
|
|
431
440
|
// check again after async work
|
|
432
|
-
if (mode === this.getMode() &&
|
|
441
|
+
if (mode === this.getMode() && options?.force !== true) {
|
|
433
442
|
this.log('already in %s mode', mode)
|
|
434
443
|
return
|
|
435
444
|
}
|
|
@@ -441,6 +450,7 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
441
450
|
this.log('enabling server mode while in %s mode', this.getMode())
|
|
442
451
|
this.clientMode = false
|
|
443
452
|
await this.components.registrar.handle(this.protocol, this.rpc.onIncomingStream.bind(this.rpc), {
|
|
453
|
+
signal: options?.signal,
|
|
444
454
|
maxInboundStreams: this.maxInboundStreams,
|
|
445
455
|
maxOutboundStreams: this.maxOutboundStreams
|
|
446
456
|
})
|
|
@@ -458,7 +468,9 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
458
468
|
this.running = true
|
|
459
469
|
|
|
460
470
|
// Only respond to queries when not in client mode
|
|
461
|
-
await this.setMode(this.clientMode ? 'client' : 'server',
|
|
471
|
+
await this.setMode(this.clientMode ? 'client' : 'server', {
|
|
472
|
+
force: true
|
|
473
|
+
})
|
|
462
474
|
|
|
463
475
|
await start(
|
|
464
476
|
this.routingTable,
|
|
@@ -520,8 +532,8 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
520
532
|
* Provider records must be re-published every 24 hours - pass a previously
|
|
521
533
|
* provided CID here to not re-publish a record for it any more
|
|
522
534
|
*/
|
|
523
|
-
async cancelReprovide (key: CID): Promise<void> {
|
|
524
|
-
await this.providers.removeProvider(key, this.components.peerId)
|
|
535
|
+
async cancelReprovide (key: CID, options?: AbortOptions): Promise<void> {
|
|
536
|
+
await this.providers.removeProvider(key, this.components.peerId, options)
|
|
525
537
|
}
|
|
526
538
|
|
|
527
539
|
/**
|
|
@@ -547,7 +559,7 @@ export class KadDHT extends TypedEventEmitter<PeerDiscoveryEvents> implements Ka
|
|
|
547
559
|
yield * this.peerRouting.getClosestPeers(key, options)
|
|
548
560
|
}
|
|
549
561
|
|
|
550
|
-
async refreshRoutingTable (): Promise<void> {
|
|
551
|
-
this.routingTableRefresh.refreshTable(true)
|
|
562
|
+
async refreshRoutingTable (options?: AbortOptions): Promise<void> {
|
|
563
|
+
this.routingTableRefresh.refreshTable(true, options)
|
|
552
564
|
}
|
|
553
565
|
}
|
|
@@ -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
|
}
|