@libp2p/kad-dht 0.28.6
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/LICENSE +4 -0
- package/README.md +105 -0
- package/dist/src/constants.d.ts +20 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +34 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/content-fetching/index.d.ts +55 -0
- package/dist/src/content-fetching/index.d.ts.map +1 -0
- package/dist/src/content-fetching/index.js +190 -0
- package/dist/src/content-fetching/index.js.map +1 -0
- package/dist/src/content-routing/index.d.ts +42 -0
- package/dist/src/content-routing/index.d.ts.map +1 -0
- package/dist/src/content-routing/index.js +129 -0
- package/dist/src/content-routing/index.js.map +1 -0
- package/dist/src/dual-kad-dht.d.ts +65 -0
- package/dist/src/dual-kad-dht.d.ts.map +1 -0
- package/dist/src/dual-kad-dht.js +191 -0
- package/dist/src/dual-kad-dht.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kad-dht.d.ts +131 -0
- package/dist/src/kad-dht.d.ts.map +1 -0
- package/dist/src/kad-dht.js +268 -0
- package/dist/src/kad-dht.js.map +1 -0
- package/dist/src/message/dht.d.ts +297 -0
- package/dist/src/message/dht.js +921 -0
- package/dist/src/message/index.d.ts +32 -0
- package/dist/src/message/index.d.ts.map +1 -0
- package/dist/src/message/index.js +81 -0
- package/dist/src/message/index.js.map +1 -0
- package/dist/src/network.d.ts +60 -0
- package/dist/src/network.d.ts.map +1 -0
- package/dist/src/network.js +124 -0
- package/dist/src/network.js.map +1 -0
- package/dist/src/peer-list/index.d.ts +29 -0
- package/dist/src/peer-list/index.d.ts.map +1 -0
- package/dist/src/peer-list/index.js +44 -0
- package/dist/src/peer-list/index.js.map +1 -0
- package/dist/src/peer-list/peer-distance-list.d.ts +34 -0
- package/dist/src/peer-list/peer-distance-list.d.ts.map +1 -0
- package/dist/src/peer-list/peer-distance-list.js +64 -0
- package/dist/src/peer-list/peer-distance-list.js.map +1 -0
- package/dist/src/peer-routing/index.d.ts +71 -0
- package/dist/src/peer-routing/index.d.ts.map +1 -0
- package/dist/src/peer-routing/index.js +256 -0
- package/dist/src/peer-routing/index.js.map +1 -0
- package/dist/src/providers.d.ts +64 -0
- package/dist/src/providers.d.ts.map +1 -0
- package/dist/src/providers.js +208 -0
- package/dist/src/providers.js.map +1 -0
- package/dist/src/query/events.d.ts +46 -0
- package/dist/src/query/events.d.ts.map +1 -0
- package/dist/src/query/events.js +73 -0
- package/dist/src/query/events.js.map +1 -0
- package/dist/src/query/manager.d.ts +40 -0
- package/dist/src/query/manager.d.ts.map +1 -0
- package/dist/src/query/manager.js +140 -0
- package/dist/src/query/manager.js.map +1 -0
- package/dist/src/query/query-path.d.ts +58 -0
- package/dist/src/query/query-path.d.ts.map +1 -0
- package/dist/src/query/query-path.js +171 -0
- package/dist/src/query/query-path.js.map +1 -0
- package/dist/src/query/types.d.ts +16 -0
- package/dist/src/query/types.d.ts.map +1 -0
- package/dist/src/query/types.js +2 -0
- package/dist/src/query/types.js.map +1 -0
- package/dist/src/query-self.d.ts +31 -0
- package/dist/src/query-self.d.ts.map +1 -0
- package/dist/src/query-self.js +73 -0
- package/dist/src/query-self.js.map +1 -0
- package/dist/src/routing-table/generated-prefix-list-browser.d.ts +3 -0
- package/dist/src/routing-table/generated-prefix-list-browser.d.ts.map +1 -0
- package/dist/src/routing-table/generated-prefix-list-browser.js +1027 -0
- package/dist/src/routing-table/generated-prefix-list-browser.js.map +1 -0
- package/dist/src/routing-table/generated-prefix-list.d.ts +3 -0
- package/dist/src/routing-table/generated-prefix-list.d.ts.map +1 -0
- package/dist/src/routing-table/generated-prefix-list.js +4099 -0
- package/dist/src/routing-table/generated-prefix-list.js.map +1 -0
- package/dist/src/routing-table/index.d.ts +91 -0
- package/dist/src/routing-table/index.d.ts.map +1 -0
- package/dist/src/routing-table/index.js +183 -0
- package/dist/src/routing-table/index.js.map +1 -0
- package/dist/src/routing-table/refresh.d.ts +50 -0
- package/dist/src/routing-table/refresh.d.ts.map +1 -0
- package/dist/src/routing-table/refresh.js +204 -0
- package/dist/src/routing-table/refresh.js.map +1 -0
- package/dist/src/routing-table/types.d.ts +24 -0
- package/dist/src/routing-table/types.d.ts.map +1 -0
- package/dist/src/rpc/handlers/add-provider.d.ts +13 -0
- package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -0
- package/dist/src/rpc/handlers/add-provider.js +42 -0
- package/dist/src/rpc/handlers/add-provider.js.map +1 -0
- package/dist/src/rpc/handlers/find-node.d.ts +18 -0
- package/dist/src/rpc/handlers/find-node.d.ts.map +1 -0
- package/dist/src/rpc/handlers/find-node.js +32 -0
- package/dist/src/rpc/handlers/find-node.js.map +1 -0
- package/dist/src/rpc/handlers/get-providers.d.ts +24 -0
- package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -0
- package/dist/src/rpc/handlers/get-providers.js +60 -0
- package/dist/src/rpc/handlers/get-providers.js.map +1 -0
- package/dist/src/rpc/handlers/get-value.d.ts +27 -0
- package/dist/src/rpc/handlers/get-value.d.ts.map +1 -0
- package/dist/src/rpc/handlers/get-value.js +94 -0
- package/dist/src/rpc/handlers/get-value.js.map +1 -0
- package/dist/src/rpc/handlers/index.d.ts +13 -0
- package/dist/src/rpc/handlers/index.d.ts.map +1 -0
- package/dist/src/rpc/handlers/ping.d.ts +7 -0
- package/dist/src/rpc/handlers/ping.d.ts.map +1 -0
- package/dist/src/rpc/handlers/ping.js +9 -0
- package/dist/src/rpc/handlers/ping.js.map +1 -0
- package/dist/src/rpc/handlers/put-value.d.ts +18 -0
- package/dist/src/rpc/handlers/put-value.d.ts.map +1 -0
- package/dist/src/rpc/handlers/put-value.js +35 -0
- package/dist/src/rpc/handlers/put-value.js.map +1 -0
- package/dist/src/rpc/index.d.ts +38 -0
- package/dist/src/rpc/index.d.ts.map +1 -0
- package/dist/src/rpc/index.js +75 -0
- package/dist/src/rpc/index.js.map +1 -0
- package/dist/src/rpc/types.d.ts +6 -0
- package/dist/src/rpc/types.d.ts.map +1 -0
- package/dist/src/topology-listener.d.ts +33 -0
- package/dist/src/topology-listener.d.ts.map +1 -0
- package/dist/src/topology-listener.js +50 -0
- package/dist/src/topology-listener.js.map +1 -0
- package/dist/src/types.d.ts +143 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/utils.d.ts +33 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +89 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +200 -0
- package/src/constants.ts +50 -0
- package/src/content-fetching/index.ts +276 -0
- package/src/content-routing/index.ts +202 -0
- package/src/dual-kad-dht.ts +257 -0
- package/src/index.ts +21 -0
- package/src/kad-dht.ts +396 -0
- package/src/message/dht.d.ts +297 -0
- package/src/message/dht.js +921 -0
- package/src/message/dht.proto +75 -0
- package/src/message/index.ts +111 -0
- package/src/network.ts +185 -0
- package/src/peer-list/index.ts +54 -0
- package/src/peer-list/peer-distance-list.ts +93 -0
- package/src/peer-routing/index.ts +332 -0
- package/src/providers.ts +278 -0
- package/src/query/events.ts +126 -0
- package/src/query/manager.ts +188 -0
- package/src/query/query-path.ts +263 -0
- package/src/query/types.ts +22 -0
- package/src/query-self.ts +106 -0
- package/src/routing-table/generated-prefix-list-browser.ts +1026 -0
- package/src/routing-table/generated-prefix-list.ts +4098 -0
- package/src/routing-table/index.ts +265 -0
- package/src/routing-table/refresh.ts +263 -0
- package/src/rpc/handlers/add-provider.ts +63 -0
- package/src/rpc/handlers/find-node.ts +57 -0
- package/src/rpc/handlers/get-providers.ts +95 -0
- package/src/rpc/handlers/get-value.ts +130 -0
- package/src/rpc/handlers/ping.ts +13 -0
- package/src/rpc/handlers/put-value.ts +58 -0
- package/src/rpc/index.ts +118 -0
- package/src/topology-listener.ts +78 -0
- package/src/utils.ts +108 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { KadDHT } from './kad-dht.js';
|
|
2
|
+
import type { DHT, QueryOptions } from '@libp2p/interfaces/dht';
|
|
3
|
+
import { AbortOptions, EventEmitter } from '@libp2p/interfaces';
|
|
4
|
+
import type { CID } from 'multiformats';
|
|
5
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
6
|
+
import type { PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery';
|
|
7
|
+
import type { PeerStore } from '@libp2p/interfaces/peer-store';
|
|
8
|
+
/**
|
|
9
|
+
* A DHT implementation modelled after Kademlia with S/Kademlia modifications.
|
|
10
|
+
* Original implementation in go: https://github.com/libp2p/go-libp2p-kad-dht.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DualKadDHT extends EventEmitter<PeerDiscoveryEvents> implements DHT {
|
|
13
|
+
wan: KadDHT;
|
|
14
|
+
lan: KadDHT;
|
|
15
|
+
peerId: PeerId;
|
|
16
|
+
peerStore: PeerStore;
|
|
17
|
+
constructor(wan: KadDHT, lan: KadDHT, peerId: PeerId, peerStore: PeerStore);
|
|
18
|
+
/**
|
|
19
|
+
* Is this DHT running.
|
|
20
|
+
*/
|
|
21
|
+
isStarted(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
24
|
+
*/
|
|
25
|
+
getMode(): Promise<"client" | "server">;
|
|
26
|
+
/**
|
|
27
|
+
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
28
|
+
*/
|
|
29
|
+
setMode(mode: 'client' | 'server'): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Start listening to incoming connections.
|
|
32
|
+
*/
|
|
33
|
+
start(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Stop accepting incoming connections and sending outgoing
|
|
36
|
+
* messages.
|
|
37
|
+
*/
|
|
38
|
+
stop(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Store the given key/value pair in the DHT
|
|
41
|
+
*/
|
|
42
|
+
put(key: Uint8Array, value: Uint8Array, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").SendingQueryEvent | import("@libp2p/interfaces/dht").PeerResponseEvent | import("@libp2p/interfaces/dht").QueryErrorEvent | import("@libp2p/interfaces/dht").ProviderEvent | import("@libp2p/interfaces/dht").ValueEvent | import("@libp2p/interfaces/dht").AddingPeerEvent | import("@libp2p/interfaces/dht").DialingPeerEvent, void, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Get the value that corresponds to the passed key
|
|
45
|
+
*/
|
|
46
|
+
get(key: Uint8Array, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, unknown>;
|
|
47
|
+
/**
|
|
48
|
+
* Announce to the network that we can provide given key's value
|
|
49
|
+
*/
|
|
50
|
+
provide(key: CID, options?: AbortOptions): AsyncGenerator<import("@libp2p/interfaces/dht").SendingQueryEvent | import("@libp2p/interfaces/dht").PeerResponseEvent | import("@libp2p/interfaces/dht").QueryErrorEvent | import("@libp2p/interfaces/dht").ProviderEvent | import("@libp2p/interfaces/dht").ValueEvent | import("@libp2p/interfaces/dht").AddingPeerEvent | import("@libp2p/interfaces/dht").DialingPeerEvent, void, unknown>;
|
|
51
|
+
/**
|
|
52
|
+
* Search the dht for up to `K` providers of the given CID
|
|
53
|
+
*/
|
|
54
|
+
findProviders(key: CID, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Search for a peer with the given ID
|
|
57
|
+
*/
|
|
58
|
+
findPeer(id: PeerId, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* Kademlia 'node lookup' operation
|
|
61
|
+
*/
|
|
62
|
+
getClosestPeers(key: Uint8Array, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, undefined>;
|
|
63
|
+
refreshRoutingTable(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=dual-kad-dht.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dual-kad-dht.d.ts","sourceRoot":"","sources":["../../src/dual-kad-dht.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAC5E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAI9D;;;GAGG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,GAAG;IACvE,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;gBAEd,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;IAqB3E;;OAEG;IACH,SAAS;IAIT;;OAEG;IACG,OAAO;IAIb;;OAEG;IACG,OAAO,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ;IAIxC;;OAEG;IACG,KAAK;IAOX;;;OAGG;IACG,IAAI;IAOV;;OAEG;IACK,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB;IA8B3E;;OAEG;IACK,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB;IAyCxD;;OAEG;IACK,OAAO,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAiB;IAuCrD;;OAEG;IACK,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAiB;IAS3D;;OAEG;IACK,QAAQ,CAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IAmBxD;;OAEG;IACK,eAAe,CAAE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB;IAO9D,mBAAmB;CAM1B"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import errCode from 'err-code';
|
|
3
|
+
import merge from 'it-merge';
|
|
4
|
+
import { queryErrorEvent } from './query/events.js';
|
|
5
|
+
import { EventEmitter, CustomEvent } from '@libp2p/interfaces';
|
|
6
|
+
const log = logger('libp2p:kad-dht');
|
|
7
|
+
/**
|
|
8
|
+
* A DHT implementation modelled after Kademlia with S/Kademlia modifications.
|
|
9
|
+
* Original implementation in go: https://github.com/libp2p/go-libp2p-kad-dht.
|
|
10
|
+
*/
|
|
11
|
+
export class DualKadDHT extends EventEmitter {
|
|
12
|
+
constructor(wan, lan, peerId, peerStore) {
|
|
13
|
+
super();
|
|
14
|
+
this.wan = wan;
|
|
15
|
+
this.lan = lan;
|
|
16
|
+
this.peerId = peerId;
|
|
17
|
+
this.peerStore = peerStore;
|
|
18
|
+
// handle peers being discovered during processing of DHT messages
|
|
19
|
+
this.wan.addEventListener('peer', (evt) => {
|
|
20
|
+
this.dispatchEvent(new CustomEvent('peer', {
|
|
21
|
+
detail: evt.detail
|
|
22
|
+
}));
|
|
23
|
+
});
|
|
24
|
+
this.lan.addEventListener('peer', (evt) => {
|
|
25
|
+
this.dispatchEvent(new CustomEvent('peer', {
|
|
26
|
+
detail: evt.detail
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Is this DHT running.
|
|
32
|
+
*/
|
|
33
|
+
isStarted() {
|
|
34
|
+
return this.wan.isStarted() && this.lan.isStarted();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
38
|
+
*/
|
|
39
|
+
async getMode() {
|
|
40
|
+
return await this.wan.getMode();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
44
|
+
*/
|
|
45
|
+
async setMode(mode) {
|
|
46
|
+
await this.wan.setMode(mode);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start listening to incoming connections.
|
|
50
|
+
*/
|
|
51
|
+
async start() {
|
|
52
|
+
await Promise.all([
|
|
53
|
+
this.lan.start(),
|
|
54
|
+
this.wan.start()
|
|
55
|
+
]);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Stop accepting incoming connections and sending outgoing
|
|
59
|
+
* messages.
|
|
60
|
+
*/
|
|
61
|
+
async stop() {
|
|
62
|
+
await Promise.all([
|
|
63
|
+
this.lan.stop(),
|
|
64
|
+
this.wan.stop()
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Store the given key/value pair in the DHT
|
|
69
|
+
*/
|
|
70
|
+
async *put(key, value, options = {}) {
|
|
71
|
+
let counterAll = 0;
|
|
72
|
+
let counterSuccess = 0;
|
|
73
|
+
for await (const event of merge(this.lan.put(key, value, options), this.wan.put(key, value, options))) {
|
|
74
|
+
yield event;
|
|
75
|
+
if (event.name === 'SENDING_QUERY' && event.messageName === 'PUT_VALUE') {
|
|
76
|
+
counterAll++;
|
|
77
|
+
}
|
|
78
|
+
if (event.name === 'PEER_RESPONSE' && event.messageName === 'PUT_VALUE') {
|
|
79
|
+
counterSuccess++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Ensure we have a default `minPeers`
|
|
83
|
+
const minPeers = options.minPeers == null ? counterAll ?? 1 : options.minPeers;
|
|
84
|
+
// verify if we were able to put to enough peers
|
|
85
|
+
if (counterSuccess < minPeers) {
|
|
86
|
+
const error = errCode(new Error(`Failed to put value to enough peers: ${counterSuccess}/${minPeers}`), 'ERR_NOT_ENOUGH_PUT_PEERS');
|
|
87
|
+
log.error(error);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the value that corresponds to the passed key
|
|
93
|
+
*/
|
|
94
|
+
async *get(key, options = {}) {
|
|
95
|
+
let queriedPeers = false;
|
|
96
|
+
let foundValue = false;
|
|
97
|
+
for await (const event of merge(this.lan.get(key, options), this.wan.get(key, options))) {
|
|
98
|
+
yield event;
|
|
99
|
+
if (event.name === 'DIALING_PEER') {
|
|
100
|
+
queriedPeers = true;
|
|
101
|
+
}
|
|
102
|
+
if (event.name === 'VALUE') {
|
|
103
|
+
queriedPeers = true;
|
|
104
|
+
if (event.value != null) {
|
|
105
|
+
foundValue = true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (event.name === 'SENDING_QUERY') {
|
|
109
|
+
queriedPeers = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (!queriedPeers) {
|
|
113
|
+
throw errCode(new Error('No peers found in routing table!'), 'ERR_NO_PEERS_IN_ROUTING_TABLE');
|
|
114
|
+
}
|
|
115
|
+
if (!foundValue) {
|
|
116
|
+
yield queryErrorEvent({
|
|
117
|
+
from: this.peerId,
|
|
118
|
+
error: errCode(new Error('Not found'), 'ERR_NOT_FOUND')
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ----------- Content Routing
|
|
123
|
+
/**
|
|
124
|
+
* Announce to the network that we can provide given key's value
|
|
125
|
+
*/
|
|
126
|
+
async *provide(key, options = {}) {
|
|
127
|
+
let sent = 0;
|
|
128
|
+
let success = 0;
|
|
129
|
+
const errors = [];
|
|
130
|
+
const dhts = [this.lan];
|
|
131
|
+
// only run provide on the wan if we are in server mode
|
|
132
|
+
if ((await this.wan.getMode()) === 'server') {
|
|
133
|
+
dhts.push(this.wan);
|
|
134
|
+
}
|
|
135
|
+
for await (const event of merge(...dhts.map(dht => dht.provide(key, options)))) {
|
|
136
|
+
yield event;
|
|
137
|
+
if (event.name === 'SENDING_QUERY') {
|
|
138
|
+
sent++;
|
|
139
|
+
}
|
|
140
|
+
if (event.name === 'QUERY_ERROR') {
|
|
141
|
+
errors.push(event.error);
|
|
142
|
+
}
|
|
143
|
+
if (event.name === 'PEER_RESPONSE' && event.messageName === 'ADD_PROVIDER') {
|
|
144
|
+
log('sent provider record for %s to %p', key, event.from);
|
|
145
|
+
success++;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (success === 0) {
|
|
149
|
+
if (errors.length > 0) {
|
|
150
|
+
// if all sends failed, throw an error to inform the caller
|
|
151
|
+
throw errCode(new Error(`Failed to provide to ${errors.length} of ${sent} peers`), 'ERR_PROVIDES_FAILED', { errors });
|
|
152
|
+
}
|
|
153
|
+
throw errCode(new Error('Failed to provide - no peers found'), 'ERR_PROVIDES_FAILED');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Search the dht for up to `K` providers of the given CID
|
|
158
|
+
*/
|
|
159
|
+
async *findProviders(key, options = {}) {
|
|
160
|
+
yield* merge(this.lan.findProviders(key, options), this.wan.findProviders(key, options));
|
|
161
|
+
}
|
|
162
|
+
// ----------- Peer Routing -----------
|
|
163
|
+
/**
|
|
164
|
+
* Search for a peer with the given ID
|
|
165
|
+
*/
|
|
166
|
+
async *findPeer(id, options = {}) {
|
|
167
|
+
let queriedPeers = false;
|
|
168
|
+
for await (const event of merge(this.lan.findPeer(id, options), this.wan.findPeer(id, options))) {
|
|
169
|
+
yield event;
|
|
170
|
+
if (event.name === 'SENDING_QUERY' || event.name === 'FINAL_PEER') {
|
|
171
|
+
queriedPeers = true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (!queriedPeers) {
|
|
175
|
+
throw errCode(new Error('Peer lookup failed'), 'ERR_LOOKUP_FAILED');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Kademlia 'node lookup' operation
|
|
180
|
+
*/
|
|
181
|
+
async *getClosestPeers(key, options = {}) {
|
|
182
|
+
yield* merge(this.lan.getClosestPeers(key, options), this.wan.getClosestPeers(key, options));
|
|
183
|
+
}
|
|
184
|
+
async refreshRoutingTable() {
|
|
185
|
+
await Promise.all([
|
|
186
|
+
this.lan.refreshRoutingTable(),
|
|
187
|
+
this.wan.refreshRoutingTable()
|
|
188
|
+
]);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=dual-kad-dht.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dual-kad-dht.js","sourceRoot":"","sources":["../../src/dual-kad-dht.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAA;AAEjD,wBAAgB,YAAY,CAAE,IAAI,EAAE,aAAa,GAAG,GAAG,CAgBtD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { KadDHT } from './kad-dht.js';
|
|
2
|
+
import { DualKadDHT } from './dual-kad-dht.js';
|
|
3
|
+
export function createKadDHT(opts) {
|
|
4
|
+
return new DualKadDHT(new KadDHT({
|
|
5
|
+
...opts,
|
|
6
|
+
protocol: '/ipfs/kad/1.0.0',
|
|
7
|
+
lan: false
|
|
8
|
+
}), new KadDHT({
|
|
9
|
+
...opts,
|
|
10
|
+
protocol: '/ipfs/lan/kad/1.0.0',
|
|
11
|
+
clientMode: false,
|
|
12
|
+
lan: true
|
|
13
|
+
}), opts.peerId, opts.peerStore);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C,MAAM,UAAU,YAAY,CAAE,IAAmB;IAC/C,OAAO,IAAI,UAAU,CACnB,IAAI,MAAM,CAAC;QACT,GAAG,IAAI;QACP,QAAQ,EAAE,iBAAiB;QAC3B,GAAG,EAAE,KAAK;KACX,CAAC,EACF,IAAI,MAAM,CAAC;QACT,GAAG,IAAI;QACP,QAAQ,EAAE,qBAAqB;QAC/B,UAAU,EAAE,KAAK;QACjB,GAAG,EAAE,IAAI;KACV,CAAC,EACF,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CACf,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { RoutingTable } from './routing-table/index.js';
|
|
2
|
+
import { Network } from './network.js';
|
|
3
|
+
import { PeerRouting } from './peer-routing/index.js';
|
|
4
|
+
import { Providers } from './providers.js';
|
|
5
|
+
import type { DHT, QueryOptions, Validators, Selectors } from '@libp2p/interfaces/dht';
|
|
6
|
+
import type { PeerData } from '@libp2p/interfaces/peer-data';
|
|
7
|
+
import { EventEmitter } from '@libp2p/interfaces';
|
|
8
|
+
import type { Addressable, Dialer } from '@libp2p/interfaces';
|
|
9
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
10
|
+
import type { PeerStore } from '@libp2p/interfaces/peer-store';
|
|
11
|
+
import type { ComponentMetricsTracker } from '@libp2p/interfaces/metrics';
|
|
12
|
+
import type { Datastore } from 'interface-datastore';
|
|
13
|
+
import type { Registrar } from '@libp2p/interfaces/registrar';
|
|
14
|
+
import type { CID } from 'multiformats/cid';
|
|
15
|
+
import type { PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery';
|
|
16
|
+
export interface KadDHTOptions {
|
|
17
|
+
/**
|
|
18
|
+
* libp2p registrar handle protocol
|
|
19
|
+
*/
|
|
20
|
+
protocol: string;
|
|
21
|
+
/**
|
|
22
|
+
* k-bucket size (default 20)
|
|
23
|
+
*/
|
|
24
|
+
kBucketSize?: number;
|
|
25
|
+
/**
|
|
26
|
+
* If true, the DHT will not respond to queries. This should be true if your node will not be dialable. (default: false)
|
|
27
|
+
*/
|
|
28
|
+
clientMode?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* validators object with namespace as keys and function(key, record, callback)
|
|
31
|
+
*/
|
|
32
|
+
validators: Validators;
|
|
33
|
+
/**
|
|
34
|
+
* selectors object with namespace as keys and function(key, records)
|
|
35
|
+
*/
|
|
36
|
+
selectors: Selectors;
|
|
37
|
+
/**
|
|
38
|
+
* how often to search the network for peers close to ourselves
|
|
39
|
+
*/
|
|
40
|
+
querySelfInterval: number;
|
|
41
|
+
lan: boolean;
|
|
42
|
+
bootstrapPeers: PeerData[];
|
|
43
|
+
dialer: Dialer;
|
|
44
|
+
addressable: Addressable;
|
|
45
|
+
peerStore: PeerStore;
|
|
46
|
+
peerId: PeerId;
|
|
47
|
+
datastore: Datastore;
|
|
48
|
+
registrar: Registrar;
|
|
49
|
+
metrics?: ComponentMetricsTracker;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A DHT implementation modelled after Kademlia with S/Kademlia modifications.
|
|
53
|
+
* Original implementation in go: https://github.com/libp2p/go-libp2p-kad-dht.
|
|
54
|
+
*/
|
|
55
|
+
export declare class KadDHT extends EventEmitter<PeerDiscoveryEvents> implements DHT {
|
|
56
|
+
private readonly log;
|
|
57
|
+
private running;
|
|
58
|
+
protocol: string;
|
|
59
|
+
private readonly kBucketSize;
|
|
60
|
+
private clientMode;
|
|
61
|
+
private readonly bootstrapPeers;
|
|
62
|
+
routingTable: RoutingTable;
|
|
63
|
+
providers: Providers;
|
|
64
|
+
private readonly lan;
|
|
65
|
+
private readonly validators;
|
|
66
|
+
private readonly selectors;
|
|
67
|
+
network: Network;
|
|
68
|
+
private readonly queryManager;
|
|
69
|
+
peerRouting: PeerRouting;
|
|
70
|
+
private readonly contentFetching;
|
|
71
|
+
private readonly contentRouting;
|
|
72
|
+
private readonly routingTableRefresh;
|
|
73
|
+
private readonly rpc;
|
|
74
|
+
private readonly topologyListener;
|
|
75
|
+
private readonly querySelf;
|
|
76
|
+
addressable: Addressable;
|
|
77
|
+
registrar: Registrar;
|
|
78
|
+
private registrarHandleId?;
|
|
79
|
+
/**
|
|
80
|
+
* Create a new KadDHT
|
|
81
|
+
*/
|
|
82
|
+
constructor(options: KadDHTOptions);
|
|
83
|
+
onPeerConnect(peerData: PeerData): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Is this DHT running.
|
|
86
|
+
*/
|
|
87
|
+
isStarted(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
90
|
+
*/
|
|
91
|
+
getMode(): Promise<"client" | "server">;
|
|
92
|
+
/**
|
|
93
|
+
* If 'server' this node will respond to DHT queries, if 'client' this node will not
|
|
94
|
+
*/
|
|
95
|
+
setMode(mode: 'client' | 'server'): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Start listening to incoming connections.
|
|
98
|
+
*/
|
|
99
|
+
start(): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Stop accepting incoming connections and sending outgoing
|
|
102
|
+
* messages.
|
|
103
|
+
*/
|
|
104
|
+
stop(): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Store the given key/value pair in the DHT
|
|
107
|
+
*/
|
|
108
|
+
put(key: Uint8Array, value: Uint8Array, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").SendingQueryEvent | import("@libp2p/interfaces/dht").PeerResponseEvent | import("@libp2p/interfaces/dht").QueryErrorEvent | import("@libp2p/interfaces/dht").ProviderEvent | import("@libp2p/interfaces/dht").ValueEvent | import("@libp2p/interfaces/dht").AddingPeerEvent | import("@libp2p/interfaces/dht").DialingPeerEvent, void, undefined>;
|
|
109
|
+
/**
|
|
110
|
+
* Get the value that corresponds to the passed key
|
|
111
|
+
*/
|
|
112
|
+
get(key: Uint8Array, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, unknown>;
|
|
113
|
+
/**
|
|
114
|
+
* Announce to the network that we can provide given key's value
|
|
115
|
+
*/
|
|
116
|
+
provide(key: CID, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").SendingQueryEvent | import("@libp2p/interfaces/dht").PeerResponseEvent | import("@libp2p/interfaces/dht").QueryErrorEvent | import("@libp2p/interfaces/dht").ProviderEvent | import("@libp2p/interfaces/dht").ValueEvent | import("@libp2p/interfaces/dht").AddingPeerEvent | import("@libp2p/interfaces/dht").DialingPeerEvent, void, undefined>;
|
|
117
|
+
/**
|
|
118
|
+
* Search the dht for providers of the given CID
|
|
119
|
+
*/
|
|
120
|
+
findProviders(key: CID, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, unknown>;
|
|
121
|
+
/**
|
|
122
|
+
* Search for a peer with the given ID
|
|
123
|
+
*/
|
|
124
|
+
findPeer(id: PeerId, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, unknown>;
|
|
125
|
+
/**
|
|
126
|
+
* Kademlia 'node lookup' operation
|
|
127
|
+
*/
|
|
128
|
+
getClosestPeers(key: Uint8Array, options?: QueryOptions): AsyncGenerator<import("@libp2p/interfaces/dht").QueryEvent, void, unknown>;
|
|
129
|
+
refreshRoutingTable(): Promise<void>;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=kad-dht.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kad-dht.d.ts","sourceRoot":"","sources":["../../src/kad-dht.ts"],"names":[],"mappings":"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"}
|