@libp2p/kad-dht 14.0.2 → 14.1.0
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/README.md +36 -0
- package/dist/index.min.js +2 -2
- package/dist/src/constants.d.ts +4 -3
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +8 -3
- package/dist/src/constants.js.map +1 -1
- package/dist/src/content-fetching/index.d.ts +1 -0
- package/dist/src/content-fetching/index.d.ts.map +1 -1
- package/dist/src/content-fetching/index.js +5 -3
- package/dist/src/content-fetching/index.js.map +1 -1
- package/dist/src/index.d.ts +107 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +36 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/kad-dht.d.ts +14 -1
- package/dist/src/kad-dht.d.ts.map +1 -1
- package/dist/src/kad-dht.js +76 -27
- package/dist/src/kad-dht.js.map +1 -1
- package/dist/src/network.d.ts +1 -0
- package/dist/src/network.d.ts.map +1 -1
- package/dist/src/network.js +4 -5
- package/dist/src/network.js.map +1 -1
- package/dist/src/peer-routing/index.d.ts.map +1 -1
- package/dist/src/peer-routing/index.js +9 -10
- package/dist/src/peer-routing/index.js.map +1 -1
- package/dist/src/providers.d.ts +21 -50
- package/dist/src/providers.d.ts.map +1 -1
- package/dist/src/providers.js +51 -192
- package/dist/src/providers.js.map +1 -1
- package/dist/src/query/manager.d.ts +1 -1
- package/dist/src/query/manager.d.ts.map +1 -1
- package/dist/src/query/manager.js +8 -19
- package/dist/src/query/manager.js.map +1 -1
- package/dist/src/query-self.d.ts +3 -1
- package/dist/src/query-self.d.ts.map +1 -1
- package/dist/src/query-self.js +17 -16
- package/dist/src/query-self.js.map +1 -1
- package/dist/src/reprovider.d.ts +63 -0
- package/dist/src/reprovider.d.ts.map +1 -0
- package/dist/src/reprovider.js +161 -0
- package/dist/src/reprovider.js.map +1 -0
- package/dist/src/routing-table/closest-peers.d.ts +1 -0
- package/dist/src/routing-table/closest-peers.d.ts.map +1 -1
- package/dist/src/routing-table/closest-peers.js +7 -0
- package/dist/src/routing-table/closest-peers.js.map +1 -1
- package/dist/src/routing-table/index.d.ts +1 -0
- package/dist/src/routing-table/index.d.ts.map +1 -1
- package/dist/src/routing-table/index.js +14 -11
- package/dist/src/routing-table/index.js.map +1 -1
- package/dist/src/rpc/handlers/get-value.d.ts +1 -0
- package/dist/src/rpc/handlers/get-value.d.ts.map +1 -1
- package/dist/src/rpc/handlers/get-value.js +3 -1
- package/dist/src/rpc/handlers/get-value.js.map +1 -1
- package/dist/src/rpc/handlers/put-value.d.ts +1 -0
- package/dist/src/rpc/handlers/put-value.d.ts.map +1 -1
- package/dist/src/rpc/handlers/put-value.js +3 -1
- package/dist/src/rpc/handlers/put-value.js.map +1 -1
- package/dist/src/rpc/index.d.ts +1 -0
- package/dist/src/rpc/index.d.ts.map +1 -1
- package/dist/src/rpc/index.js +9 -10
- package/dist/src/rpc/index.js.map +1 -1
- package/dist/src/utils.d.ts +20 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +87 -4
- package/dist/src/utils.js.map +1 -1
- package/dist/typedoc-urls.json +3 -0
- package/package.json +11 -13
- package/src/constants.ts +11 -5
- package/src/content-fetching/index.ts +5 -3
- package/src/index.ts +116 -2
- package/src/kad-dht.ts +94 -41
- package/src/network.ts +5 -5
- package/src/peer-routing/index.ts +9 -11
- package/src/providers.ts +57 -244
- package/src/query/manager.ts +12 -28
- package/src/query-self.ts +20 -17
- package/src/reprovider.ts +226 -0
- package/src/routing-table/closest-peers.ts +9 -0
- package/src/routing-table/index.ts +16 -11
- package/src/rpc/handlers/get-value.ts +3 -1
- package/src/rpc/handlers/put-value.ts +3 -1
- package/src/rpc/index.ts +10 -10
- package/src/utils.ts +102 -4
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Key } from 'interface-datastore/key';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import type { Operation, OperationMetrics } from './kad-dht.js';
|
|
2
4
|
import type { PeerId, PeerInfo } from '@libp2p/interface';
|
|
3
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
4
6
|
export declare function removePrivateAddressesMapper(peer: PeerInfo): PeerInfo;
|
|
@@ -19,7 +21,7 @@ export declare function bufferToKey(buf: Uint8Array): Key;
|
|
|
19
21
|
/**
|
|
20
22
|
* Convert a Uint8Array to their SHA2-256 hash
|
|
21
23
|
*/
|
|
22
|
-
export declare function bufferToRecordKey(buf: Uint8Array): Key;
|
|
24
|
+
export declare function bufferToRecordKey(prefix: string, buf: Uint8Array): Key;
|
|
23
25
|
/**
|
|
24
26
|
* Generate the key for a public key.
|
|
25
27
|
*/
|
|
@@ -33,4 +35,21 @@ export declare function fromPublicKeyKey(key: Uint8Array): PeerId;
|
|
|
33
35
|
export declare function createPutRecord(key: Uint8Array, value: Uint8Array): Uint8Array;
|
|
34
36
|
export declare function debounce(callback: () => void, wait?: number): () => void;
|
|
35
37
|
export declare function multiaddrIsPublic(multiaddr: Multiaddr): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Parse the CID and provider peer id from the key
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseProviderKey(key: Key): {
|
|
42
|
+
cid: CID;
|
|
43
|
+
peerId: PeerId;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Encode the given key its matching datastore key
|
|
47
|
+
*/
|
|
48
|
+
export declare function toProviderKey(prefix: string, cid: CID | string, peerId?: PeerId): Key;
|
|
49
|
+
export declare function readProviderTime(buf: Uint8Array): Date;
|
|
50
|
+
/**
|
|
51
|
+
* Wraps the passed generator function with timing metrics
|
|
52
|
+
*/
|
|
53
|
+
export declare function timeOperationGenerator(fn: (...args: any[]) => AsyncGenerator<any>, operationMetrics: OperationMetrics, type: Operation): (...args: any[]) => AsyncGenerator<any>;
|
|
54
|
+
export declare function timeOperationMethod(fn: (...args: any[]) => Promise<any>, operationMetrics: OperationMetrics, type: Operation): (...args: any[]) => Promise<any>;
|
|
36
55
|
//# sourceMappingURL=utils.d.ts.map
|
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;
|
|
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;AACzD,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,GAAG,OAAO,CAAC,UAAU,CAAC,CAIzE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAExE;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;;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
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { peerIdFromMultihash } from '@libp2p/peer-id';
|
|
1
|
+
import { peerIdFromMultihash, peerIdFromString } from '@libp2p/peer-id';
|
|
2
2
|
import { Libp2pRecord } from '@libp2p/record';
|
|
3
3
|
import { isPrivateIp } from '@libp2p/utils/private-ip';
|
|
4
4
|
import { Key } from 'interface-datastore/key';
|
|
5
|
+
import { CID } from 'multiformats/cid';
|
|
6
|
+
import * as raw from 'multiformats/codecs/raw';
|
|
5
7
|
import * as Digest from 'multiformats/hashes/digest';
|
|
6
8
|
import { sha256 } from 'multiformats/hashes/sha2';
|
|
9
|
+
import * as varint from 'uint8-varint';
|
|
7
10
|
import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
|
|
8
11
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
9
12
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
10
|
-
import { RECORD_KEY_PREFIX } from './constants.js';
|
|
11
13
|
// const IPNS_PREFIX = uint8ArrayFromString('/ipns/')
|
|
12
14
|
const PK_PREFIX = uint8ArrayFromString('/pk/');
|
|
13
15
|
export function removePrivateAddressesMapper(peer) {
|
|
@@ -86,8 +88,8 @@ export function bufferToKey(buf) {
|
|
|
86
88
|
/**
|
|
87
89
|
* Convert a Uint8Array to their SHA2-256 hash
|
|
88
90
|
*/
|
|
89
|
-
export function bufferToRecordKey(buf) {
|
|
90
|
-
return new Key(`${
|
|
91
|
+
export function bufferToRecordKey(prefix, buf) {
|
|
92
|
+
return new Key(`${prefix}/${uint8ArrayToString(buf, 'base32')}`, false);
|
|
91
93
|
}
|
|
92
94
|
/**
|
|
93
95
|
* Generate the key for a public key.
|
|
@@ -150,4 +152,85 @@ export function multiaddrIsPublic(multiaddr) {
|
|
|
150
152
|
}
|
|
151
153
|
return false;
|
|
152
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Parse the CID and provider peer id from the key
|
|
157
|
+
*/
|
|
158
|
+
export function parseProviderKey(key) {
|
|
159
|
+
const parts = key.toString().split('/');
|
|
160
|
+
const peerIdStr = parts.pop();
|
|
161
|
+
const cidStr = parts.pop();
|
|
162
|
+
if (peerIdStr == null || cidStr == null) {
|
|
163
|
+
throw new Error(`incorrectly formatted provider entry key in datastore: ${key.toString()}`);
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
cid: CID.createV1(raw.code, Digest.decode(uint8ArrayFromString(cidStr, 'base32'))),
|
|
167
|
+
peerId: peerIdFromString(peerIdStr)
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Encode the given key its matching datastore key
|
|
172
|
+
*/
|
|
173
|
+
export function toProviderKey(prefix, cid, peerId) {
|
|
174
|
+
const cidStr = typeof cid === 'string' ? cid : uint8ArrayToString(cid.multihash.bytes, 'base32');
|
|
175
|
+
const parts = [
|
|
176
|
+
prefix,
|
|
177
|
+
cidStr
|
|
178
|
+
];
|
|
179
|
+
if (peerId != null) {
|
|
180
|
+
parts.push(peerId.toString());
|
|
181
|
+
}
|
|
182
|
+
return new Key(parts.join('/'));
|
|
183
|
+
}
|
|
184
|
+
export function readProviderTime(buf) {
|
|
185
|
+
return new Date(varint.decode(buf));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Wraps the passed generator function with timing metrics
|
|
189
|
+
*/
|
|
190
|
+
export function timeOperationGenerator(fn, operationMetrics, type) {
|
|
191
|
+
return async function* (...args) {
|
|
192
|
+
const stopSuccessTimer = operationMetrics.queryTime?.timer(type);
|
|
193
|
+
const stopErrorTimer = operationMetrics.errorTime?.timer(type);
|
|
194
|
+
let errored = false;
|
|
195
|
+
try {
|
|
196
|
+
operationMetrics.queries?.increment({ [type]: true });
|
|
197
|
+
yield* fn(...args);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
errored = true;
|
|
201
|
+
stopErrorTimer?.();
|
|
202
|
+
operationMetrics.errors?.increment({ [type]: true });
|
|
203
|
+
throw err;
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
operationMetrics.queries?.decrement({ [type]: true });
|
|
207
|
+
if (!errored) {
|
|
208
|
+
stopSuccessTimer?.();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
export function timeOperationMethod(fn, operationMetrics, type) {
|
|
214
|
+
return async function (...args) {
|
|
215
|
+
const stopSuccessTimer = operationMetrics?.queryTime?.timer(type);
|
|
216
|
+
const stopErrorTimer = operationMetrics?.errorTime?.timer(type);
|
|
217
|
+
let errored = false;
|
|
218
|
+
try {
|
|
219
|
+
operationMetrics.queries?.increment({ [type]: true });
|
|
220
|
+
return await fn(...args);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
errored = true;
|
|
224
|
+
stopErrorTimer?.();
|
|
225
|
+
operationMetrics.errors?.increment({ [type]: true });
|
|
226
|
+
throw err;
|
|
227
|
+
}
|
|
228
|
+
finally {
|
|
229
|
+
operationMetrics.queries?.decrement({ [type]: true });
|
|
230
|
+
if (!errored) {
|
|
231
|
+
stopSuccessTimer?.();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}
|
|
153
236
|
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAKtE,qDAAqD;AACrD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;AAE9C,MAAM,UAAU,4BAA4B,CAAE,IAAc;IAC1D,OAAO;QACL,GAAG,IAAI;QACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YAC7C,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,CAAA;YAE/C,+CAA+C;YAC/C,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAC9C,kDAAkD;gBAClD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAA;gBACd,CAAC;gBAED,OAAO,IAAI,CAAA;YACb,CAAC;YAED,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAEnC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,oBAAoB;gBACpB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,CAAC,SAAS,CAAA;QACnB,CAAC,CAAC;KACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAE,IAAc;IACzD,OAAO;QACL,GAAG,IAAI;QACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YAC7C,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,CAAA;YAE/C,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAEnC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,oBAAoB;gBACpB,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC;KACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAE,IAAc;IAC/C,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,GAAe;IAClD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAE1C,OAAO,SAAS,CAAC,MAAM,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,MAAc;IACjD,OAAO,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAA;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAe;IAC1C,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAE,MAAc,EAAE,GAAe;IAChE,OAAO,IAAI,GAAG,CAAC,GAAG,MAAM,IAAI,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAE,MAAc;IAC7C,OAAO,gBAAgB,CAAC;QACtB,SAAS;QACT,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK;KAC3B,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAE,GAAe;IAC7C,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,SAAS,CAAE,GAAe;IACxC,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,GAAe;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAE,GAAe,EAAE,KAAiB;IACjE,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IAEtD,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAE,QAAoB,EAAE,OAAe,GAAG;IAChE,IAAI,OAAsC,CAAA;IAE1C,OAAO,GAAS,EAAE;QAChB,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAA,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAClD,CAAC,CAAA;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAC5B,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,YAAY,GAAG,EAAE,CAAA;AACvB,MAAM,QAAQ,GAAG,CAAC,CAAA;AAClB,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,MAAM,UAAU,iBAAiB,CAAE,SAAoB;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,CAAA;IAEvC,4CAA4C;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAClC,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAA;QAE1C,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAE,GAAQ;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;IAE1B,IAAI,SAAS,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,0DAA0D,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAC7F,CAAC;IAED,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClF,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC;KACpC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,MAAc,EAAE,GAAiB,EAAE,MAAe;IAC/E,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAEhG,MAAM,KAAK,GAAG;QACZ,MAAM;QACN,MAAM;KACP,CAAA;IAED,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,GAAe;IAC/C,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAE,EAA2C,EAAE,gBAAkC,EAAE,IAAe;IACtI,OAAO,KAAK,SAAU,CAAC,EAAE,GAAG,IAAW;QACrC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAChE,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9D,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,IAAI,CAAC;YACH,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAErD,KAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAA;YACd,cAAc,EAAE,EAAE,CAAA;YAClB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAEpD,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAErD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,gBAAgB,EAAE,EAAE,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAE,EAAoC,EAAE,gBAAkC,EAAE,IAAe;IAC5H,OAAO,KAAK,WAAW,GAAG,IAAW;QACnC,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACjE,MAAM,cAAc,GAAG,gBAAgB,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,IAAI,CAAC;YACH,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAErD,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAA;YACd,cAAc,EAAE,EAAE,CAAA;YAClB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAEpD,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAErD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,gBAAgB,EAAE,EAAE,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
|
package/dist/typedoc-urls.json
CHANGED
|
@@ -24,8 +24,11 @@
|
|
|
24
24
|
"ProviderEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ProviderEvent.html",
|
|
25
25
|
".:ProviderEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ProviderEvent.html",
|
|
26
26
|
"ProvidersInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ProvidersInit.html",
|
|
27
|
+
".:ProvidersInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ProvidersInit.html",
|
|
27
28
|
"QueryErrorEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.QueryErrorEvent.html",
|
|
28
29
|
".:QueryErrorEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.QueryErrorEvent.html",
|
|
30
|
+
"ReProvideInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ReProvideInit.html",
|
|
31
|
+
".:ReProvideInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ReProvideInit.html",
|
|
29
32
|
"RoutingTable": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.RoutingTable.html",
|
|
30
33
|
".:RoutingTable": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.RoutingTable.html",
|
|
31
34
|
"SelectFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SelectFn.html",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/kad-dht",
|
|
3
|
-
"version": "14.0
|
|
3
|
+
"version": "14.1.0",
|
|
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",
|
|
@@ -57,16 +57,15 @@
|
|
|
57
57
|
"doc-check": "aegir doc-check"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@libp2p/crypto": "^5.0.
|
|
61
|
-
"@libp2p/interface": "^2.
|
|
62
|
-
"@libp2p/interface-internal": "^2.0.
|
|
63
|
-
"@libp2p/peer-collections": "^6.0.
|
|
64
|
-
"@libp2p/peer-id": "^5.0.
|
|
60
|
+
"@libp2p/crypto": "^5.0.6",
|
|
61
|
+
"@libp2p/interface": "^2.2.0",
|
|
62
|
+
"@libp2p/interface-internal": "^2.0.10",
|
|
63
|
+
"@libp2p/peer-collections": "^6.0.10",
|
|
64
|
+
"@libp2p/peer-id": "^5.0.7",
|
|
65
65
|
"@libp2p/record": "^4.0.4",
|
|
66
|
-
"@libp2p/utils": "^6.1.
|
|
66
|
+
"@libp2p/utils": "^6.1.3",
|
|
67
67
|
"@multiformats/multiaddr": "^12.2.3",
|
|
68
68
|
"any-signal": "^4.1.1",
|
|
69
|
-
"hashlru": "^2.3.0",
|
|
70
69
|
"interface-datastore": "^8.3.0",
|
|
71
70
|
"it-drain": "^3.0.7",
|
|
72
71
|
"it-length": "^3.0.6",
|
|
@@ -77,10 +76,10 @@
|
|
|
77
76
|
"it-pipe": "^3.0.1",
|
|
78
77
|
"it-protobuf-stream": "^1.1.3",
|
|
79
78
|
"it-take": "^3.0.5",
|
|
79
|
+
"mortice": "^3.0.4",
|
|
80
80
|
"multiformats": "^13.1.0",
|
|
81
81
|
"p-defer": "^4.0.1",
|
|
82
82
|
"p-event": "^6.0.1",
|
|
83
|
-
"p-queue": "^8.0.1",
|
|
84
83
|
"progress-events": "^1.0.0",
|
|
85
84
|
"protons-runtime": "^5.4.0",
|
|
86
85
|
"race-signal": "^1.0.2",
|
|
@@ -89,16 +88,15 @@
|
|
|
89
88
|
"uint8arrays": "^5.1.0"
|
|
90
89
|
},
|
|
91
90
|
"devDependencies": {
|
|
92
|
-
"@libp2p/interface-compliance-tests": "^6.1.
|
|
93
|
-
"@libp2p/logger": "^5.1.
|
|
94
|
-
"@libp2p/peer-store": "^11.0.
|
|
91
|
+
"@libp2p/interface-compliance-tests": "^6.1.8",
|
|
92
|
+
"@libp2p/logger": "^5.1.3",
|
|
93
|
+
"@libp2p/peer-store": "^11.0.10",
|
|
95
94
|
"@types/lodash.random": "^3.2.9",
|
|
96
95
|
"@types/lodash.range": "^3.2.9",
|
|
97
96
|
"@types/sinon": "^17.0.3",
|
|
98
97
|
"@types/which": "^3.0.3",
|
|
99
98
|
"aegir": "^44.0.1",
|
|
100
99
|
"datastore-core": "^10.0.0",
|
|
101
|
-
"datastore-level": "^11.0.0",
|
|
102
100
|
"delay": "^6.0.0",
|
|
103
101
|
"execa": "^9.1.0",
|
|
104
102
|
"it-all": "^3.0.6",
|
package/src/constants.ts
CHANGED
|
@@ -15,15 +15,21 @@ export const MAX_RECORD_AGE = 36 * hour
|
|
|
15
15
|
|
|
16
16
|
export const PROTOCOL = '/ipfs/kad/1.0.0'
|
|
17
17
|
|
|
18
|
-
export const
|
|
18
|
+
export const PROVIDERS_VALIDITY = 24 * hour
|
|
19
19
|
|
|
20
|
-
export const
|
|
20
|
+
export const PROVIDERS_CLEANUP_INTERVAL = hour
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
// Re-run the provide operation when the expiry of our provider records is within this amount
|
|
23
|
+
export const REPROVIDE_THRESHOLD = 2 * hour
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
// How many reprovide operations to run at once
|
|
26
|
+
export const REPROVIDE_CONCURRENCY = 10
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
// How long to let the reprovide queue grow before we wait for capacity
|
|
29
|
+
export const REPROVIDE_MAX_QUEUE_SIZE = 16_384
|
|
30
|
+
|
|
31
|
+
// How often to check if records need reproviding
|
|
32
|
+
export const REPROVIDE_INTERVAL = hour
|
|
27
33
|
|
|
28
34
|
export const READ_MESSAGE_TIMEOUT = 10 * second
|
|
29
35
|
|
|
@@ -41,12 +41,14 @@ export class ContentFetching {
|
|
|
41
41
|
private readonly peerRouting: PeerRouting
|
|
42
42
|
private readonly queryManager: QueryManager
|
|
43
43
|
private readonly network: Network
|
|
44
|
+
private readonly datastorePrefix: string
|
|
44
45
|
|
|
45
46
|
constructor (components: KadDHTComponents, init: ContentFetchingInit) {
|
|
46
47
|
const { validators, selectors, peerRouting, queryManager, network, logPrefix } = init
|
|
47
48
|
|
|
48
49
|
this.components = components
|
|
49
50
|
this.log = components.logger.forComponent(`${logPrefix}:content-fetching`)
|
|
51
|
+
this.datastorePrefix = `/${init.logPrefix.replaceAll(':', '/')}/record`
|
|
50
52
|
this.validators = validators
|
|
51
53
|
this.selectors = selectors
|
|
52
54
|
this.peerRouting = peerRouting
|
|
@@ -61,7 +63,7 @@ export class ContentFetching {
|
|
|
61
63
|
async getLocal (key: Uint8Array): Promise<Libp2pRecord> {
|
|
62
64
|
this.log('getLocal %b', key)
|
|
63
65
|
|
|
64
|
-
const dsKey = bufferToRecordKey(key)
|
|
66
|
+
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
|
|
65
67
|
|
|
66
68
|
this.log('fetching record for key %k', dsKey)
|
|
67
69
|
|
|
@@ -92,7 +94,7 @@ export class ContentFetching {
|
|
|
92
94
|
// correct ourself
|
|
93
95
|
if (this.components.peerId.equals(from)) {
|
|
94
96
|
try {
|
|
95
|
-
const dsKey = bufferToRecordKey(key)
|
|
97
|
+
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
|
|
96
98
|
this.log(`Storing corrected record for key ${dsKey.toString()}`)
|
|
97
99
|
await this.components.datastore.put(dsKey, fixupRec.subarray())
|
|
98
100
|
} catch (err: any) {
|
|
@@ -136,7 +138,7 @@ export class ContentFetching {
|
|
|
136
138
|
const record = createPutRecord(key, value)
|
|
137
139
|
|
|
138
140
|
// store the record locally
|
|
139
|
-
const dsKey = bufferToRecordKey(key)
|
|
141
|
+
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
|
|
140
142
|
this.log(`storing record for key ${dsKey.toString()}`)
|
|
141
143
|
await this.components.datastore.put(dsKey, record.subarray())
|
|
142
144
|
|
package/src/index.ts
CHANGED
|
@@ -78,12 +78,47 @@
|
|
|
78
78
|
*
|
|
79
79
|
* console.info(peerInfo) // peer id, multiaddrs
|
|
80
80
|
* ```
|
|
81
|
+
*
|
|
82
|
+
* @example Connecting to both a LAN-only DHT and the IPFS Amino DHT
|
|
83
|
+
*
|
|
84
|
+
* When using multiple DHTs, you should specify distinct datastore, metrics and
|
|
85
|
+
* log prefixes to ensure that data is kept separate for each instance.
|
|
86
|
+
*
|
|
87
|
+
* ```TypeScript
|
|
88
|
+
* import { kadDHT, removePublicAddressesMapper, removePrivateAddressesMapper } from '@libp2p/kad-dht'
|
|
89
|
+
* import { createLibp2p } from 'libp2p'
|
|
90
|
+
* import { peerIdFromString } from '@libp2p/peer-id'
|
|
91
|
+
*
|
|
92
|
+
* const node = await createLibp2p({
|
|
93
|
+
* services: {
|
|
94
|
+
* lanDHT: kadDHT({
|
|
95
|
+
* protocol: '/ipfs/lan/kad/1.0.0',
|
|
96
|
+
* peerInfoMapper: removePublicAddressesMapper,
|
|
97
|
+
* clientMode: false,
|
|
98
|
+
* logPrefix: 'libp2p:dht-lan',
|
|
99
|
+
* datastorePrefix: '/dht-lan',
|
|
100
|
+
* metricsPrefix: 'libp2p_dht_lan'
|
|
101
|
+
* }),
|
|
102
|
+
* aminoDHT: kadDHT({
|
|
103
|
+
* protocol: '/ipfs/kad/1.0.0',
|
|
104
|
+
* peerInfoMapper: removePrivateAddressesMapper,
|
|
105
|
+
* logPrefix: 'libp2p:dht-amino',
|
|
106
|
+
* datastorePrefix: '/dht-amino',
|
|
107
|
+
* metricsPrefix: 'libp2p_dht_amino'
|
|
108
|
+
* })
|
|
109
|
+
* }
|
|
110
|
+
* })
|
|
111
|
+
*
|
|
112
|
+
* const peerId = peerIdFromString('QmFoo')
|
|
113
|
+
* const peerInfo = await node.peerRouting.findPeer(peerId)
|
|
114
|
+
*
|
|
115
|
+
* console.info(peerInfo) // peer id, multiaddrs
|
|
116
|
+
* ```
|
|
81
117
|
*/
|
|
82
118
|
|
|
83
119
|
import { KadDHT as KadDHTClass } from './kad-dht.js'
|
|
84
120
|
import { MessageType } from './message/dht.js'
|
|
85
121
|
import { removePrivateAddressesMapper, removePublicAddressesMapper, passthroughMapper } from './utils.js'
|
|
86
|
-
import type { ProvidersInit } from './providers.js'
|
|
87
122
|
import type { Libp2pEvents, ComponentLogger, TypedEventTarget, Metrics, PeerId, PeerInfo, PeerStore, RoutingOptions, PrivateKey } from '@libp2p/interface'
|
|
88
123
|
import type { AddressManager, ConnectionManager, Registrar } from '@libp2p/interface-internal'
|
|
89
124
|
import type { AdaptiveTimeoutInit } from '@libp2p/utils/src/adaptive-timeout.js'
|
|
@@ -251,6 +286,12 @@ export interface KadDHT {
|
|
|
251
286
|
*/
|
|
252
287
|
provide(key: CID, options?: RoutingOptions): AsyncIterable<QueryEvent>
|
|
253
288
|
|
|
289
|
+
/**
|
|
290
|
+
* Provider records must be re-published every 24 hours - pass a previously
|
|
291
|
+
* provided CID here to not re-publish a record for it any more
|
|
292
|
+
*/
|
|
293
|
+
cancelReprovide(key: CID): Promise<void>
|
|
294
|
+
|
|
254
295
|
/**
|
|
255
296
|
* Store the passed value under the passed key on the DHT
|
|
256
297
|
*/
|
|
@@ -299,7 +340,61 @@ export type Selectors = Record<string, SelectFn>
|
|
|
299
340
|
*/
|
|
300
341
|
export type Validators = Record<string, ValidateFn>
|
|
301
342
|
|
|
302
|
-
export
|
|
343
|
+
export interface ProvidersInit {
|
|
344
|
+
/**
|
|
345
|
+
* @default 256
|
|
346
|
+
*/
|
|
347
|
+
cacheSize?: number
|
|
348
|
+
/**
|
|
349
|
+
* How often invalid records are cleaned. (in seconds)
|
|
350
|
+
*
|
|
351
|
+
* @default 5400
|
|
352
|
+
*/
|
|
353
|
+
cleanupInterval?: number
|
|
354
|
+
/**
|
|
355
|
+
* How long is a provider valid for. (in seconds)
|
|
356
|
+
*
|
|
357
|
+
* @default 86400
|
|
358
|
+
*/
|
|
359
|
+
provideValidity?: number
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
export interface ReProvideInit {
|
|
363
|
+
/**
|
|
364
|
+
* How many re-provide operations to run simultaneously
|
|
365
|
+
*
|
|
366
|
+
* @default 10
|
|
367
|
+
*/
|
|
368
|
+
concurrency?: number
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* How long to let the re-provide queue grow
|
|
372
|
+
*
|
|
373
|
+
* @default 16384
|
|
374
|
+
*/
|
|
375
|
+
maxQueueSize?: number
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* How long before the record expiry to re-provide in ms
|
|
379
|
+
*
|
|
380
|
+
* @default 7200000
|
|
381
|
+
*/
|
|
382
|
+
threshold?: number
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* How often to check which records need reproviding in ms
|
|
386
|
+
*
|
|
387
|
+
* @default 3600000
|
|
388
|
+
*/
|
|
389
|
+
interval?: number
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* How long provider records are valid for in ms
|
|
393
|
+
*
|
|
394
|
+
* @default 86400000
|
|
395
|
+
*/
|
|
396
|
+
validity?: number
|
|
397
|
+
}
|
|
303
398
|
|
|
304
399
|
export interface KadDHTInit {
|
|
305
400
|
/**
|
|
@@ -396,6 +491,20 @@ export interface KadDHTInit {
|
|
|
396
491
|
*/
|
|
397
492
|
logPrefix?: string
|
|
398
493
|
|
|
494
|
+
/**
|
|
495
|
+
* The datastore prefix to use
|
|
496
|
+
*
|
|
497
|
+
* @default "/dht"
|
|
498
|
+
*/
|
|
499
|
+
datastorePrefix?: string
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* The metrics prefix to use
|
|
503
|
+
*
|
|
504
|
+
* @default "libp2p_kad_dht"
|
|
505
|
+
*/
|
|
506
|
+
metricsPrefix?: string
|
|
507
|
+
|
|
399
508
|
/**
|
|
400
509
|
* Settings for how long to wait in ms when pinging DHT peers to decide if
|
|
401
510
|
* they should be evicted from the routing table or not.
|
|
@@ -459,6 +568,11 @@ export interface KadDHTInit {
|
|
|
459
568
|
*/
|
|
460
569
|
providers?: ProvidersInit
|
|
461
570
|
|
|
571
|
+
/**
|
|
572
|
+
* Initialization options for the Reprovider component
|
|
573
|
+
*/
|
|
574
|
+
reprovide?: ReProvideInit
|
|
575
|
+
|
|
462
576
|
/**
|
|
463
577
|
* For every incoming and outgoing PeerInfo, override address configuration
|
|
464
578
|
* with this filter.
|