@streamr/dht 0.0.1-tatum.5 → 0.0.1-tatum.7
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/src/connection/ConnectionLockHandler.d.ts +1 -1
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +17 -39
- package/dist/src/connection/ConnectionManager.js +138 -192
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.js +14 -11
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +49 -0
- package/dist/src/connection/ConnectorFacade.js +86 -0
- package/dist/src/connection/ConnectorFacade.js.map +1 -0
- package/dist/src/connection/ManagedConnection.d.ts +1 -4
- package/dist/src/connection/ManagedConnection.js +23 -31
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/RemoteConnectionLocker.js +4 -3
- package/dist/src/connection/RemoteConnectionLocker.js.map +1 -1
- package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
- package/dist/src/connection/Simulator/Simulator.js +0 -5
- package/dist/src/connection/Simulator/Simulator.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
- package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -2
- package/dist/src/connection/Simulator/SimulatorConnector.js +10 -11
- package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +2 -0
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
- package/dist/src/connection/WebRTC/WebRtcConnector.d.ts +9 -9
- package/dist/src/connection/WebRTC/WebRtcConnector.js +22 -22
- package/dist/src/connection/WebRTC/WebRtcConnector.js.map +1 -1
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js +2 -1
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +1 -1
- package/dist/src/connection/WebSocket/WebSocketConnector.d.ts +19 -8
- package/dist/src/connection/WebSocket/WebSocketConnector.js +67 -46
- package/dist/src/connection/WebSocket/WebSocketConnector.js.map +1 -1
- package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
- package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
- package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +16 -54
- package/dist/src/dht/DhtNode.js +116 -137
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +3 -2
- package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +22 -16
- package/dist/src/dht/RemoteDhtNode.js.map +1 -0
- package/dist/src/dht/contact/Contact.d.ts +1 -15
- package/dist/src/dht/contact/Contact.js +1 -9
- package/dist/src/dht/contact/Contact.js.map +1 -1
- package/dist/src/dht/contact/ContactList.d.ts +13 -3
- package/dist/src/dht/contact/ContactList.js +9 -4
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +3 -3
- package/dist/src/dht/contact/RandomContactList.js +4 -8
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/Remote.d.ts +1 -5
- package/dist/src/dht/contact/Remote.js +0 -5
- package/dist/src/dht/contact/Remote.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +3 -5
- package/dist/src/dht/contact/SortedContactList.js +9 -19
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
- package/dist/src/dht/discovery/DiscoverySession.js +9 -10
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +11 -10
- package/dist/src/dht/discovery/PeerDiscovery.js +32 -37
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/RecursiveFindSession.d.ts +5 -6
- package/dist/src/dht/find/RecursiveFindSession.js +8 -8
- package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
- package/dist/src/dht/find/RecursiveFinder.d.ts +2 -4
- package/dist/src/dht/find/RecursiveFinder.js +11 -12
- package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
- package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
- package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
- package/dist/src/dht/routing/DuplicateDetector.js +2 -7
- package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
- package/dist/src/dht/routing/RemoteRouter.js +4 -4
- package/dist/src/dht/routing/RemoteRouter.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +10 -13
- package/dist/src/dht/routing/Router.js +28 -29
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +3 -5
- package/dist/src/dht/routing/RoutingSession.js +19 -13
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/DataStore.d.ts +2 -2
- package/dist/src/dht/store/DataStore.js +7 -7
- package/dist/src/dht/store/DataStore.js.map +1 -1
- package/dist/src/exports.d.ts +1 -8
- package/dist/src/exports.js +2 -16
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +0 -1
- package/dist/src/helpers/PeerID.js +0 -6
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
- package/dist/src/helpers/kademliaId.d.ts +1 -0
- package/dist/src/helpers/kademliaId.js +14 -0
- package/dist/src/helpers/kademliaId.js.map +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +0 -4
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +1 -2
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/package.json +10 -9
- package/protos/DhtRpc.proto +0 -1
- package/src/connection/ConnectionLockHandler.ts +1 -1
- package/src/connection/ConnectionManager.ts +156 -240
- package/src/connection/ConnectivityChecker.ts +14 -11
- package/src/connection/ConnectorFacade.ts +143 -0
- package/src/connection/ManagedConnection.ts +23 -34
- package/src/connection/RemoteConnectionLocker.ts +4 -3
- package/src/connection/Simulator/Simulator.ts +0 -7
- package/src/connection/Simulator/SimulatorConnection.ts +16 -13
- package/src/connection/Simulator/SimulatorConnector.ts +11 -12
- package/src/connection/Simulator/SimulatorTransport.ts +6 -1
- package/src/connection/WebRTC/NodeWebRtcConnection.ts +14 -13
- package/src/connection/WebRTC/WebRtcConnector.ts +31 -31
- package/src/connection/WebSocket/RemoteWebSocketConnector.ts +2 -1
- package/src/connection/WebSocket/WebSocketConnector.ts +85 -62
- package/src/connection/WebSocket/WebSocketServer.ts +26 -8
- package/src/dht/DhtNode.ts +164 -189
- package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +14 -7
- package/src/dht/contact/Contact.ts +1 -18
- package/src/dht/contact/ContactList.ts +16 -6
- package/src/dht/contact/RandomContactList.ts +6 -11
- package/src/dht/contact/Remote.ts +1 -10
- package/src/dht/contact/SortedContactList.ts +12 -25
- package/src/dht/discovery/DiscoverySession.ts +20 -23
- package/src/dht/discovery/PeerDiscovery.ts +45 -44
- package/src/dht/find/RecursiveFindSession.ts +12 -13
- package/src/dht/find/RecursiveFinder.ts +16 -19
- package/src/dht/registerExternalApiRpcMethods.ts +1 -1
- package/src/dht/routing/DuplicateDetector.ts +3 -10
- package/src/dht/routing/RemoteRouter.ts +5 -5
- package/src/dht/routing/Router.ts +35 -39
- package/src/dht/routing/RoutingSession.ts +37 -28
- package/src/dht/store/DataStore.ts +11 -11
- package/src/exports.ts +1 -8
- package/src/helpers/PeerID.ts +0 -7
- package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
- package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
- package/src/helpers/kademliaId.ts +8 -0
- package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
- package/src/proto/packages/dht/protos/DhtRpc.ts +1 -6
- package/test/benchmark/KademliaCorrectness.test.ts +5 -2
- package/test/benchmark/RecursiveFind.test.ts +6 -6
- package/test/end-to-end/Layer0-Layer1.test.ts +14 -14
- package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
- package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
- package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
- package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
- package/test/integration/ConnectionLocking.test.ts +32 -26
- package/test/integration/ConnectionManager.test.ts +90 -93
- package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
- package/test/integration/DhtRpc.test.ts +4 -6
- package/test/integration/Layer1-scale.test.ts +8 -8
- package/test/integration/MigrateData.test.ts +9 -9
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
- package/test/integration/RecursiveFind.test.ts +5 -5
- package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
- package/test/integration/RemoteRouter.test.ts +5 -6
- package/test/integration/RemoteStore.test.ts +4 -5
- package/test/integration/RouteMessage.test.ts +7 -9
- package/test/integration/RpcErrors.test.ts +25 -10
- package/test/integration/ScaleDownDht.test.ts +8 -8
- package/test/integration/SimultaneousConnections.test.ts +35 -36
- package/test/integration/Store.test.ts +8 -9
- package/test/integration/StoreAndDelete.test.ts +11 -11
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
- package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
- package/test/integration/WebRtcConnectorRpc.test.ts +6 -8
- package/test/integration/WebSocket.test.ts +4 -2
- package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
- package/test/integration/WebSocketConnectorRpc.test.ts +2 -3
- package/test/unit/DuplicateDetector.test.ts +3 -4
- package/test/unit/LocalDataStore.test.ts +6 -8
- package/test/unit/RandomContactList.test.ts +25 -74
- package/test/unit/RecursiveFinder.test.ts +8 -12
- package/test/unit/Router.test.ts +18 -21
- package/test/unit/SortedContactList.test.ts +62 -112
- package/test/unit/WebSocketConnector.test.ts +64 -0
- package/test/unit/WebSocketServer.test.ts +24 -12
- package/test/utils/mock/RecursiveFinder.ts +2 -2
- package/test/utils/mock/Router.ts +9 -11
- package/test/utils/mock/Transport.ts +2 -2
- package/test/utils/utils.ts +40 -49
- package/dist/src/dht/DhtPeer.js.map +0 -1
- package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
- package/dist/src/helpers/browser/isBrowser.js +0 -6
- package/dist/src/helpers/browser/isBrowser.js.map +0 -1
- package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
- package/dist/src/helpers/browser/isNodeJS.js +0 -6
- package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
- package/src/helpers/browser/isBrowser.ts +0 -1
- package/src/helpers/browser/isNodeJS.ts +0 -1
- package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
- package/test/integration/DhtWithMockConnections.test.ts +0 -46
- package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
- /package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +0 -0
package/dist/src/dht/DhtNode.js
CHANGED
|
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DhtNode = exports.createPeerDescriptor =
|
|
7
|
-
const
|
|
6
|
+
exports.DhtNode = exports.createPeerDescriptor = void 0;
|
|
7
|
+
const RemoteDhtNode_1 = require("./RemoteDhtNode");
|
|
8
8
|
const k_bucket_1 = __importDefault(require("k-bucket"));
|
|
9
9
|
const eventemitter3_1 = require("eventemitter3");
|
|
10
10
|
const SortedContactList_1 = require("./contact/SortedContactList");
|
|
@@ -24,37 +24,12 @@ const PeerDiscovery_1 = require("./discovery/PeerDiscovery");
|
|
|
24
24
|
const LocalDataStore_1 = require("./store/LocalDataStore");
|
|
25
25
|
const registerExternalApiRpcMethods_1 = require("./registerExternalApiRpcMethods");
|
|
26
26
|
const RemoteExternalApi_1 = require("./RemoteExternalApi");
|
|
27
|
-
const
|
|
28
|
-
const
|
|
27
|
+
const UUID_1 = require("../helpers/UUID");
|
|
28
|
+
const isBrowserEnvironment_1 = require("../helpers/browser/isBrowserEnvironment");
|
|
29
29
|
const lodash_1 = require("lodash");
|
|
30
|
-
|
|
31
|
-
constructor(conf) {
|
|
32
|
-
this.serviceId = 'layer0';
|
|
33
|
-
this.joinParallelism = 3;
|
|
34
|
-
this.maxNeighborListSize = 200;
|
|
35
|
-
this.numberOfNodesPerKBucket = 8;
|
|
36
|
-
this.joinNoProgressLimit = 4;
|
|
37
|
-
this.dhtJoinTimeout = 60000;
|
|
38
|
-
this.getClosestContactsLimit = 5;
|
|
39
|
-
this.maxConnections = 80;
|
|
40
|
-
this.storeHighestTtl = 60000;
|
|
41
|
-
this.storeMaxTtl = 60000;
|
|
42
|
-
this.storeNumberOfCopies = 5;
|
|
43
|
-
this.metricsContext = new utils_1.MetricsContext();
|
|
44
|
-
this.peerId = new exports_1.UUID().toHex();
|
|
45
|
-
// assign given non-undefined config vars over defaults
|
|
46
|
-
let k;
|
|
47
|
-
for (k in conf) {
|
|
48
|
-
if (conf[k] === undefined) {
|
|
49
|
-
delete conf[k];
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
Object.assign(this, conf);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.DhtNodeConfig = DhtNodeConfig;
|
|
30
|
+
const ConnectorFacade_1 = require("../connection/ConnectorFacade");
|
|
56
31
|
const logger = new utils_1.Logger(module);
|
|
57
|
-
const createPeerDescriptor = (msg, peerId
|
|
32
|
+
const createPeerDescriptor = (msg, peerId) => {
|
|
58
33
|
let kademliaId;
|
|
59
34
|
if (msg) {
|
|
60
35
|
kademliaId = peerId ? (0, utils_1.hexToBinary)(peerId) : PeerID_1.PeerID.fromIp(msg.host).value;
|
|
@@ -62,7 +37,8 @@ const createPeerDescriptor = (msg, peerId, nodeName) => {
|
|
|
62
37
|
else {
|
|
63
38
|
kademliaId = (0, utils_1.hexToBinary)(peerId);
|
|
64
39
|
}
|
|
65
|
-
const
|
|
40
|
+
const nodeType = (0, isBrowserEnvironment_1.isBrowserEnvironment)() ? DhtRpc_1.NodeType.BROWSER : DhtRpc_1.NodeType.NODEJS;
|
|
41
|
+
const ret = { kademliaId, type: nodeType };
|
|
66
42
|
if (msg && msg.websocket) {
|
|
67
43
|
ret.websocket = { host: msg.websocket.host, port: msg.websocket.port, tls: msg.websocket.tls };
|
|
68
44
|
ret.openInternet = true;
|
|
@@ -77,8 +53,6 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
77
53
|
this.localDataStore = new LocalDataStore_1.LocalDataStore();
|
|
78
54
|
this.started = false;
|
|
79
55
|
this.stopped = false;
|
|
80
|
-
this.contactAddCounter = 0;
|
|
81
|
-
this.contactOnAddedCounter = 0;
|
|
82
56
|
this.initKBuckets = (selfId) => {
|
|
83
57
|
this.bucket = new k_bucket_1.default({
|
|
84
58
|
localNodeId: selfId.value,
|
|
@@ -88,47 +62,62 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
88
62
|
this.bucket.on('ping', (oldContacts, newContact) => this.onKBucketPing(oldContacts, newContact));
|
|
89
63
|
this.bucket.on('removed', (contact) => this.onKBucketRemoved(contact));
|
|
90
64
|
this.bucket.on('added', (contact) => this.onKBucketAdded(contact));
|
|
91
|
-
this.bucket.on('updated', (
|
|
65
|
+
this.bucket.on('updated', () => {
|
|
92
66
|
// TODO: Update contact info to the connection manager and reconnect
|
|
93
67
|
});
|
|
94
68
|
this.neighborList = new SortedContactList_1.SortedContactList(selfId, this.config.maxNeighborListSize);
|
|
95
|
-
this.neighborList.on('contactRemoved', (
|
|
69
|
+
this.neighborList.on('contactRemoved', (removedContact, activeContacts) => {
|
|
96
70
|
if (this.stopped) {
|
|
97
71
|
return;
|
|
98
72
|
}
|
|
99
|
-
this.emit('contactRemoved',
|
|
100
|
-
this.randomPeers.addContact(new
|
|
73
|
+
this.emit('contactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()));
|
|
74
|
+
this.randomPeers.addContact(new RemoteDhtNode_1.RemoteDhtNode(this.ownPeerDescriptor, removedContact.getPeerDescriptor(), (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId));
|
|
101
75
|
});
|
|
102
|
-
this.neighborList.on('newContact', (
|
|
76
|
+
this.neighborList.on('newContact', (newContact, activeContacts) => this.emit('newContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
|
|
103
77
|
this.openInternetPeers = new SortedContactList_1.SortedContactList(selfId, this.config.maxNeighborListSize / 2);
|
|
104
|
-
this.openInternetPeers.on('contactRemoved', (
|
|
105
|
-
this.openInternetPeers.on('newContact', (
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
78
|
+
this.openInternetPeers.on('contactRemoved', (removedContact, activeContacts) => this.emit('openInternetContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
|
|
79
|
+
this.openInternetPeers.on('newContact', (newContact, activeContacts) => this.emit('newOpenInternetContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
|
|
80
|
+
this.transport.on('connected', (peerDescriptor) => this.onTransportConnected(peerDescriptor));
|
|
81
|
+
this.transport.on('disconnected', (peerDescriptor, disonnectionType) => {
|
|
108
82
|
this.onTransportDisconnected(peerDescriptor, disonnectionType);
|
|
109
83
|
});
|
|
110
|
-
this.
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
if (peerId.equals(this.ownPeerId)) {
|
|
84
|
+
this.transport.getAllConnectionPeerDescriptors().forEach((peer) => {
|
|
85
|
+
const remoteDhtNode = new RemoteDhtNode_1.RemoteDhtNode(this.ownPeerDescriptor, peer, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId);
|
|
86
|
+
if ((0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(peer, this.ownPeerDescriptor)) {
|
|
114
87
|
logger.error('own peerdescriptor added to connections in initKBucket');
|
|
115
88
|
}
|
|
116
|
-
this.connections.set(
|
|
89
|
+
this.connections.set((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peer), remoteDhtNode);
|
|
117
90
|
});
|
|
118
91
|
this.randomPeers = new RandomContactList_1.RandomContactList(selfId, this.config.maxNeighborListSize);
|
|
119
|
-
this.randomPeers.on('contactRemoved', (
|
|
120
|
-
this.randomPeers.on('newContact', (
|
|
92
|
+
this.randomPeers.on('contactRemoved', (removedContact, activeContacts) => this.emit('randomContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
|
|
93
|
+
this.randomPeers.on('newContact', (newContact, activeContacts) => this.emit('newRandomContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
|
|
121
94
|
};
|
|
122
95
|
this.generatePeerDescriptorCallBack = (connectivityResponse) => {
|
|
123
96
|
if (this.config.peerDescriptor) {
|
|
124
97
|
this.ownPeerDescriptor = this.config.peerDescriptor;
|
|
125
98
|
}
|
|
126
99
|
else {
|
|
127
|
-
this.ownPeerDescriptor = (0, exports.createPeerDescriptor)(connectivityResponse, this.config.peerId
|
|
100
|
+
this.ownPeerDescriptor = (0, exports.createPeerDescriptor)(connectivityResponse, this.config.peerId);
|
|
128
101
|
}
|
|
129
102
|
return this.ownPeerDescriptor;
|
|
130
103
|
};
|
|
131
|
-
this.config =
|
|
104
|
+
this.config = {
|
|
105
|
+
serviceId: 'layer0',
|
|
106
|
+
joinParallelism: 3,
|
|
107
|
+
maxNeighborListSize: 200,
|
|
108
|
+
numberOfNodesPerKBucket: 8,
|
|
109
|
+
joinNoProgressLimit: 4,
|
|
110
|
+
dhtJoinTimeout: 60000,
|
|
111
|
+
getClosestContactsLimit: 5,
|
|
112
|
+
maxConnections: 80,
|
|
113
|
+
storeHighestTtl: 60000,
|
|
114
|
+
storeMaxTtl: 60000,
|
|
115
|
+
networkConnectivityTimeout: 10000,
|
|
116
|
+
storeNumberOfCopies: 5,
|
|
117
|
+
metricsContext: new utils_1.MetricsContext(),
|
|
118
|
+
peerId: new UUID_1.UUID().toHex(),
|
|
119
|
+
...conf // TODO use merge() if we don't want that explicit undefined values override defaults?
|
|
120
|
+
};
|
|
132
121
|
this.send = this.send.bind(this);
|
|
133
122
|
}
|
|
134
123
|
async start() {
|
|
@@ -137,62 +126,64 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
137
126
|
}
|
|
138
127
|
logger.trace(`Starting new Streamr Network DHT Node with serviceId ${this.config.serviceId}`);
|
|
139
128
|
this.started = true;
|
|
140
|
-
if (
|
|
129
|
+
if ((0, isBrowserEnvironment_1.isBrowserEnvironment)()) {
|
|
141
130
|
this.config.websocketPortRange = undefined;
|
|
142
131
|
if (this.config.peerDescriptor) {
|
|
143
132
|
this.config.peerDescriptor.websocket = undefined;
|
|
144
133
|
}
|
|
145
134
|
}
|
|
146
|
-
// If
|
|
147
|
-
if (this.config.
|
|
148
|
-
this.
|
|
149
|
-
this.ownPeerDescriptor = this.
|
|
150
|
-
if (this.config.
|
|
151
|
-
this.connectionManager = this.config.
|
|
135
|
+
// If transport is given, do not create a ConnectionManager
|
|
136
|
+
if (this.config.transport) {
|
|
137
|
+
this.transport = this.config.transport;
|
|
138
|
+
this.ownPeerDescriptor = this.transport.getPeerDescriptor();
|
|
139
|
+
if (this.config.transport instanceof ConnectionManager_1.ConnectionManager) {
|
|
140
|
+
this.connectionManager = this.config.transport;
|
|
152
141
|
}
|
|
153
142
|
}
|
|
154
143
|
else {
|
|
155
|
-
const
|
|
156
|
-
|
|
144
|
+
const connectorFacadeConfig = {
|
|
145
|
+
transport: this,
|
|
157
146
|
entryPoints: this.config.entryPoints,
|
|
158
147
|
iceServers: this.config.iceServers,
|
|
159
|
-
metricsContext: this.config.metricsContext,
|
|
160
148
|
webrtcAllowPrivateAddresses: this.config.webrtcAllowPrivateAddresses,
|
|
161
149
|
webrtcDatachannelBufferThresholdLow: this.config.webrtcDatachannelBufferThresholdLow,
|
|
162
150
|
webrtcDatachannelBufferThresholdHigh: this.config.webrtcDatachannelBufferThresholdHigh,
|
|
163
151
|
webrtcNewConnectionTimeout: this.config.webrtcNewConnectionTimeout,
|
|
164
152
|
webrtcPortRange: this.config.webrtcPortRange,
|
|
165
|
-
|
|
153
|
+
maxMessageSize: this.config.maxMessageSize,
|
|
166
154
|
tlsCertificate: this.config.tlsCertificate,
|
|
167
|
-
externalIp: this.config.externalIp
|
|
155
|
+
externalIp: this.config.externalIp,
|
|
156
|
+
createOwnPeerDescriptor: (connectivityResponse) => this.generatePeerDescriptorCallBack(connectivityResponse),
|
|
168
157
|
};
|
|
169
158
|
// If own PeerDescriptor is given in config, create a ConnectionManager with ws server
|
|
170
159
|
if (this.config.peerDescriptor?.websocket) {
|
|
171
|
-
|
|
172
|
-
|
|
160
|
+
connectorFacadeConfig.websocketHost = this.config.peerDescriptor.websocket.host;
|
|
161
|
+
connectorFacadeConfig.websocketPortRange = {
|
|
173
162
|
min: this.config.peerDescriptor.websocket.port,
|
|
174
163
|
max: this.config.peerDescriptor.websocket.port
|
|
175
164
|
};
|
|
176
165
|
// If websocketPortRange is given, create ws server using it, websocketHost can be undefined
|
|
177
166
|
}
|
|
178
167
|
else if (this.config.websocketPortRange) {
|
|
179
|
-
|
|
180
|
-
|
|
168
|
+
connectorFacadeConfig.websocketHost = this.config.websocketHost;
|
|
169
|
+
connectorFacadeConfig.websocketPortRange = this.config.websocketPortRange;
|
|
181
170
|
}
|
|
182
|
-
const connectionManager = new ConnectionManager_1.ConnectionManager(
|
|
183
|
-
|
|
171
|
+
const connectionManager = new ConnectionManager_1.ConnectionManager({
|
|
172
|
+
createConnectorFacade: () => new ConnectorFacade_1.DefaultConnectorFacade(connectorFacadeConfig),
|
|
173
|
+
maxConnections: this.config.maxConnections,
|
|
174
|
+
metricsContext: this.config.metricsContext
|
|
175
|
+
});
|
|
176
|
+
await connectionManager.start();
|
|
184
177
|
this.connectionManager = connectionManager;
|
|
185
|
-
this.
|
|
178
|
+
this.transport = connectionManager;
|
|
186
179
|
}
|
|
187
|
-
this.rpcCommunicator = new RoutingRpcCommunicator_1.RoutingRpcCommunicator(this.config.serviceId, this.
|
|
188
|
-
this.
|
|
180
|
+
this.rpcCommunicator = new RoutingRpcCommunicator_1.RoutingRpcCommunicator(this.config.serviceId, this.transport.send, { rpcRequestTimeout: this.config.rpcRequestTimeout });
|
|
181
|
+
this.transport.on('message', (message) => this.handleMessage(message));
|
|
189
182
|
this.bindDefaultServerMethods();
|
|
190
|
-
this.
|
|
191
|
-
this.initKBuckets(this.ownPeerId);
|
|
183
|
+
this.initKBuckets((0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(this.ownPeerDescriptor));
|
|
192
184
|
this.peerDiscovery = new PeerDiscovery_1.PeerDiscovery({
|
|
193
185
|
rpcCommunicator: this.rpcCommunicator,
|
|
194
186
|
ownPeerDescriptor: this.ownPeerDescriptor,
|
|
195
|
-
ownPeerId: this.ownPeerId,
|
|
196
187
|
bucket: this.bucket,
|
|
197
188
|
connections: this.connections,
|
|
198
189
|
neighborList: this.neighborList,
|
|
@@ -210,7 +201,6 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
210
201
|
rpcCommunicator: this.rpcCommunicator,
|
|
211
202
|
connections: this.connections,
|
|
212
203
|
ownPeerDescriptor: this.ownPeerDescriptor,
|
|
213
|
-
ownPeerId: this.ownPeerId,
|
|
214
204
|
addContact: this.addNewContact.bind(this),
|
|
215
205
|
serviceId: this.config.serviceId,
|
|
216
206
|
connectionManager: this.connectionManager
|
|
@@ -222,7 +212,6 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
222
212
|
connections: this.connections,
|
|
223
213
|
ownPeerDescriptor: this.ownPeerDescriptor,
|
|
224
214
|
serviceId: this.config.serviceId,
|
|
225
|
-
ownPeerId: this.ownPeerId,
|
|
226
215
|
addContact: this.addNewContact.bind(this),
|
|
227
216
|
isPeerCloserToIdThanSelf: this.isPeerCloserToIdThanSelf.bind(this),
|
|
228
217
|
localDataStore: this.localDataStore
|
|
@@ -243,39 +232,37 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
243
232
|
});
|
|
244
233
|
(0, registerExternalApiRpcMethods_1.registerExternalApiRpcMethods)(this);
|
|
245
234
|
if (this.connectionManager && this.config.entryPoints && this.config.entryPoints.length > 0
|
|
246
|
-
&& !(0, peerIdFromPeerDescriptor_1.
|
|
235
|
+
&& !(0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(this.config.entryPoints[0], this.ownPeerDescriptor)) {
|
|
247
236
|
this.connectToEntryPoint(this.config.entryPoints[0]);
|
|
248
237
|
}
|
|
249
238
|
}
|
|
250
239
|
onTransportConnected(peerDescriptor) {
|
|
251
|
-
if (
|
|
240
|
+
if ((0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(this.ownPeerDescriptor, peerDescriptor)) {
|
|
252
241
|
logger.error('onTransportConnected() to self');
|
|
253
242
|
}
|
|
254
|
-
const
|
|
255
|
-
if (!this.connections.has(PeerID_1.PeerID.fromValue(
|
|
256
|
-
this.connections.set(PeerID_1.PeerID.fromValue(
|
|
257
|
-
logger.trace('
|
|
243
|
+
const remoteDhtNode = new RemoteDhtNode_1.RemoteDhtNode(this.ownPeerDescriptor, peerDescriptor, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId);
|
|
244
|
+
if (!this.connections.has(PeerID_1.PeerID.fromValue(remoteDhtNode.id).toKey())) {
|
|
245
|
+
this.connections.set(PeerID_1.PeerID.fromValue(remoteDhtNode.id).toKey(), remoteDhtNode);
|
|
246
|
+
logger.trace('connectionschange add ' + this.connections.size);
|
|
258
247
|
}
|
|
259
248
|
else {
|
|
260
249
|
logger.trace('new connection not set to connections, there is already a connection with the peer ID');
|
|
261
250
|
}
|
|
262
|
-
|
|
263
|
-
logger.trace('connected: ' + this.ownPeerDescriptor.nodeName + ', ' + peerDescriptor.nodeName + ' ' + this.connections.size);
|
|
264
|
-
}
|
|
251
|
+
logger.trace('connected: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor) + ' ' + this.connections.size);
|
|
265
252
|
this.emit('connected', peerDescriptor);
|
|
266
253
|
}
|
|
267
254
|
onTransportDisconnected(peerDescriptor, dicsonnectionType) {
|
|
268
|
-
logger.trace('disconnected: ' +
|
|
255
|
+
logger.trace('disconnected: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor));
|
|
269
256
|
this.connections.delete((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor));
|
|
270
257
|
// only remove from bucket if we are on layer 0
|
|
271
258
|
if (this.connectionManager) {
|
|
272
259
|
this.bucket.remove(peerDescriptor.kademliaId);
|
|
273
260
|
if (dicsonnectionType === 'OUTGOING_GRACEFUL_LEAVE' || dicsonnectionType === 'INCOMING_GRACEFUL_LEAVE') {
|
|
274
|
-
logger.trace(
|
|
261
|
+
logger.trace((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor) + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
|
|
275
262
|
this.removeContact(peerDescriptor, true);
|
|
276
263
|
}
|
|
277
264
|
else {
|
|
278
|
-
logger.trace(
|
|
265
|
+
logger.trace((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor) + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
|
|
279
266
|
}
|
|
280
267
|
}
|
|
281
268
|
this.emit('disconnected', peerDescriptor, dicsonnectionType);
|
|
@@ -296,25 +283,24 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
296
283
|
}
|
|
297
284
|
handleMessage(message) {
|
|
298
285
|
if (message.serviceId === this.config.serviceId) {
|
|
299
|
-
logger.trace('callig this.handleMessageFromPeer ' +
|
|
300
|
-
|
|
286
|
+
logger.trace('callig this.handleMessageFromPeer ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(message.sourceDescriptor)
|
|
287
|
+
+ ' ' + message.serviceId + ' ' + message.messageId);
|
|
301
288
|
this.rpcCommunicator?.handleMessageFromPeer(message);
|
|
302
289
|
}
|
|
303
290
|
else {
|
|
304
|
-
logger.trace('emit "message" ' +
|
|
305
|
-
' ' + message.serviceId + ' ' + message.messageId);
|
|
291
|
+
logger.trace('emit "message" ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(message.sourceDescriptor) + ' ' + message.serviceId + ' ' + message.messageId);
|
|
306
292
|
this.emit('message', message);
|
|
307
293
|
}
|
|
308
294
|
}
|
|
309
295
|
getClosestPeerDescriptors(kademliaId, limit) {
|
|
310
296
|
const closestPeers = this.bucket.closest(kademliaId, limit);
|
|
311
|
-
return closestPeers.map((
|
|
297
|
+
return closestPeers.map((remoteDhtNode) => remoteDhtNode.getPeerDescriptor());
|
|
312
298
|
}
|
|
313
299
|
onKBucketPing(oldContacts, newContact) {
|
|
314
300
|
if (this.stopped) {
|
|
315
301
|
return;
|
|
316
302
|
}
|
|
317
|
-
const sortingList = new SortedContactList_1.SortedContactList(this.
|
|
303
|
+
const sortingList = new SortedContactList_1.SortedContactList(this.getNodeId(), 100);
|
|
318
304
|
sortingList.addContacts(oldContacts);
|
|
319
305
|
const sortedContacts = sortingList.getAllContacts();
|
|
320
306
|
this.connectionManager?.weakUnlockConnection(sortedContacts[sortedContacts.length - 1].getPeerDescriptor());
|
|
@@ -326,7 +312,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
326
312
|
return;
|
|
327
313
|
}
|
|
328
314
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor());
|
|
329
|
-
logger.trace(`Removed contact ${
|
|
315
|
+
logger.trace(`Removed contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor())}`);
|
|
330
316
|
this.emit('kbucketContactRemoved', contact.getPeerDescriptor());
|
|
331
317
|
if (this.bucket.count() === 0
|
|
332
318
|
&& !this.peerDiscovery.isJoinOngoing()
|
|
@@ -341,23 +327,22 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
341
327
|
if (this.stopped) {
|
|
342
328
|
return;
|
|
343
329
|
}
|
|
344
|
-
this.
|
|
345
|
-
if (!this.stopped && !contact.getPeerId().equals(this.ownPeerId)) {
|
|
330
|
+
if (!this.stopped && !contact.getPeerId().equals(this.getNodeId())) {
|
|
346
331
|
// Important to lock here, before the ping result is known
|
|
347
332
|
this.connectionManager?.weakLockConnection(contact.getPeerDescriptor());
|
|
348
333
|
if (this.connections.has(contact.getPeerId().toKey())) {
|
|
349
|
-
logger.trace(`Added new contact ${
|
|
334
|
+
logger.trace(`Added new contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor())}`);
|
|
350
335
|
this.emit('newKbucketContact', contact.getPeerDescriptor(), this.neighborList.getClosestContacts(this.config.getClosestContactsLimit).map((peer) => peer.getPeerDescriptor()));
|
|
351
336
|
}
|
|
352
337
|
else { // open connection by pinging
|
|
353
|
-
logger.trace('starting ping ' +
|
|
338
|
+
logger.trace('starting ping ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor()));
|
|
354
339
|
contact.ping().then((result) => {
|
|
355
340
|
if (result) {
|
|
356
|
-
logger.trace(`Added new contact ${
|
|
341
|
+
logger.trace(`Added new contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor())}`);
|
|
357
342
|
this.emit('newKbucketContact', contact.getPeerDescriptor(), this.neighborList.getClosestContacts(this.config.getClosestContactsLimit).map((peer) => peer.getPeerDescriptor()));
|
|
358
343
|
}
|
|
359
344
|
else {
|
|
360
|
-
logger.trace('ping failed ' +
|
|
345
|
+
logger.trace('ping failed ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor()));
|
|
361
346
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor());
|
|
362
347
|
this.removeContact(contact.getPeerDescriptor());
|
|
363
348
|
this.addClosestContactToBucket();
|
|
@@ -388,11 +373,11 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
388
373
|
}
|
|
389
374
|
return undefined;
|
|
390
375
|
}
|
|
391
|
-
|
|
392
|
-
return this.neighborList;
|
|
376
|
+
getClosestContacts(maxCount) {
|
|
377
|
+
return this.neighborList.getClosestContacts(maxCount).map((c) => c.getPeerDescriptor());
|
|
393
378
|
}
|
|
394
379
|
getNodeId() {
|
|
395
|
-
return this.
|
|
380
|
+
return (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(this.ownPeerDescriptor);
|
|
396
381
|
}
|
|
397
382
|
getBucketSize() {
|
|
398
383
|
return this.bucket.count();
|
|
@@ -401,24 +386,23 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
401
386
|
if (!this.started || this.stopped) {
|
|
402
387
|
return;
|
|
403
388
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
const dhtPeer = new DhtPeer_1.DhtPeer(this.ownPeerDescriptor, contact, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId);
|
|
389
|
+
if (!(0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(contact, this.ownPeerDescriptor)) {
|
|
390
|
+
logger.trace(`Adding new contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact)}`);
|
|
391
|
+
const remoteDhtNode = new RemoteDhtNode_1.RemoteDhtNode(this.ownPeerDescriptor, contact, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId);
|
|
408
392
|
if (!this.bucket.get(contact.kademliaId) && !this.neighborList.getContact((0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact))) {
|
|
409
|
-
this.neighborList.addContact(
|
|
393
|
+
this.neighborList.addContact(remoteDhtNode);
|
|
410
394
|
if (contact.openInternet) {
|
|
411
|
-
this.openInternetPeers.addContact(
|
|
395
|
+
this.openInternetPeers.addContact(remoteDhtNode);
|
|
412
396
|
}
|
|
413
397
|
if (setActive) {
|
|
398
|
+
const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
|
|
414
399
|
this.neighborList.setActive(peerId);
|
|
415
400
|
this.openInternetPeers.setActive(peerId);
|
|
416
401
|
}
|
|
417
|
-
this.
|
|
418
|
-
this.bucket.add(dhtPeer);
|
|
402
|
+
this.bucket.add(remoteDhtNode);
|
|
419
403
|
}
|
|
420
404
|
else {
|
|
421
|
-
this.randomPeers.addContact(
|
|
405
|
+
this.randomPeers.addContact(remoteDhtNode);
|
|
422
406
|
}
|
|
423
407
|
}
|
|
424
408
|
}
|
|
@@ -432,7 +416,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
432
416
|
if (!this.started || this.stopped) {
|
|
433
417
|
return;
|
|
434
418
|
}
|
|
435
|
-
logger.trace(`Removing contact ${
|
|
419
|
+
logger.trace(`Removing contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact)}`);
|
|
436
420
|
const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
|
|
437
421
|
this.bucket.remove(peerId.value);
|
|
438
422
|
this.neighborList.removeContact(peerId);
|
|
@@ -441,24 +425,24 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
441
425
|
this.openInternetPeers.removeContact(peerId);
|
|
442
426
|
}
|
|
443
427
|
}
|
|
444
|
-
async send(msg
|
|
428
|
+
async send(msg) {
|
|
445
429
|
if (!this.started || this.stopped) {
|
|
446
430
|
return;
|
|
447
431
|
}
|
|
448
432
|
const reachableThrough = this.peerDiscovery.isJoinOngoing() ? this.config.entryPoints || [] : [];
|
|
449
433
|
await this.router.send(msg, reachableThrough);
|
|
450
434
|
}
|
|
451
|
-
async joinDht(entryPointDescriptors,
|
|
435
|
+
async joinDht(entryPointDescriptors, doAdditionalRandomPeerDiscovery, retry) {
|
|
452
436
|
if (!this.started) {
|
|
453
437
|
throw new Error('Cannot join DHT before calling start() on DhtNode');
|
|
454
438
|
}
|
|
455
|
-
await Promise.all(entryPointDescriptors.map((entryPoint) => this.peerDiscovery.joinDht(entryPoint,
|
|
439
|
+
await Promise.all(entryPointDescriptors.map((entryPoint) => this.peerDiscovery.joinDht(entryPoint, doAdditionalRandomPeerDiscovery, retry)));
|
|
456
440
|
}
|
|
457
441
|
async startRecursiveFind(idToFind, findMode, excludedPeer) {
|
|
458
442
|
return this.recursiveFinder.startRecursiveFind(idToFind, findMode, excludedPeer);
|
|
459
443
|
}
|
|
460
444
|
async storeDataToDht(key, data) {
|
|
461
|
-
if (this.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
|
|
445
|
+
if (this.peerDiscovery.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
|
|
462
446
|
return this.storeDataViaPeer(key, data, (0, lodash_1.sample)(this.config.entryPoints));
|
|
463
447
|
}
|
|
464
448
|
return this.dataStore.storeDataToDht(key, data);
|
|
@@ -468,7 +452,11 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
468
452
|
return await target.storeData(key, data);
|
|
469
453
|
}
|
|
470
454
|
async getDataFromDht(idToFind) {
|
|
471
|
-
|
|
455
|
+
if (this.peerDiscovery.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
|
|
456
|
+
return this.findDataViaPeer(idToFind, (0, lodash_1.sample)(this.config.entryPoints));
|
|
457
|
+
}
|
|
458
|
+
const result = await this.recursiveFinder.startRecursiveFind(idToFind, DhtRpc_1.FindMode.DATA);
|
|
459
|
+
return result.dataEntries ?? [];
|
|
472
460
|
}
|
|
473
461
|
async deleteDataFromDht(idToDelete) {
|
|
474
462
|
if (!this.stopped) {
|
|
@@ -483,7 +471,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
483
471
|
return this.rpcCommunicator;
|
|
484
472
|
}
|
|
485
473
|
getTransport() {
|
|
486
|
-
return this.
|
|
474
|
+
return this.transport;
|
|
487
475
|
}
|
|
488
476
|
getPeerDescriptor() {
|
|
489
477
|
return this.ownPeerDescriptor;
|
|
@@ -491,14 +479,8 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
491
479
|
getAllConnectionPeerDescriptors() {
|
|
492
480
|
return Array.from(this.connections.values()).map((peer) => peer.getPeerDescriptor());
|
|
493
481
|
}
|
|
494
|
-
getK() {
|
|
495
|
-
return this.config.numberOfNodesPerKBucket;
|
|
496
|
-
}
|
|
497
482
|
getKBucketPeers() {
|
|
498
|
-
return this.bucket.toArray().map((
|
|
499
|
-
}
|
|
500
|
-
getOpenInternetPeerDescriptors() {
|
|
501
|
-
return this.openInternetPeers.getAllContacts().map((contact) => contact.getPeerDescriptor());
|
|
483
|
+
return this.bucket.toArray().map((remoteDhtNode) => remoteDhtNode.getPeerDescriptor());
|
|
502
484
|
}
|
|
503
485
|
getNumberOfConnections() {
|
|
504
486
|
return this.connections.size;
|
|
@@ -512,15 +494,12 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
512
494
|
getNumberOfWeakLockedConnections() {
|
|
513
495
|
return this.connectionManager.getNumberOfWeakLockedConnections();
|
|
514
496
|
}
|
|
515
|
-
|
|
516
|
-
|
|
497
|
+
async waitForNetworkConnectivity() {
|
|
498
|
+
await (0, utils_1.waitForCondition)(() => this.connections.size > 0, this.config.networkConnectivityTimeout);
|
|
517
499
|
}
|
|
518
500
|
hasJoined() {
|
|
519
501
|
return this.peerDiscovery.isJoinCalled();
|
|
520
502
|
}
|
|
521
|
-
getKnownEntryPoints() {
|
|
522
|
-
return this.config.entryPoints || [];
|
|
523
|
-
}
|
|
524
503
|
async stop() {
|
|
525
504
|
if (this.stopped || !this.started) {
|
|
526
505
|
return;
|
|
@@ -530,7 +509,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
530
509
|
if (this.entryPointDisconnectTimeout) {
|
|
531
510
|
clearTimeout(this.entryPointDisconnectTimeout);
|
|
532
511
|
}
|
|
533
|
-
this.bucket.toArray().
|
|
512
|
+
this.bucket.toArray().forEach((remoteDhtNode) => this.bucket.remove(remoteDhtNode.id));
|
|
534
513
|
this.bucket.removeAllListeners();
|
|
535
514
|
this.localDataStore.clear();
|
|
536
515
|
this.neighborList.stop();
|
|
@@ -543,7 +522,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
543
522
|
if (this.connectionManager) {
|
|
544
523
|
await this.connectionManager.stop();
|
|
545
524
|
}
|
|
546
|
-
this.
|
|
525
|
+
this.transport = undefined;
|
|
547
526
|
this.connectionManager = undefined;
|
|
548
527
|
this.connections.clear();
|
|
549
528
|
this.removeAllListeners();
|
|
@@ -559,7 +538,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
559
538
|
}
|
|
560
539
|
// IDHTRpcService implementation
|
|
561
540
|
async ping(request, context) {
|
|
562
|
-
logger.trace('received ping request: ' +
|
|
541
|
+
logger.trace('received ping request: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(context.incomingSourceDescriptor));
|
|
563
542
|
setImmediate(() => {
|
|
564
543
|
this.addNewContact(context.incomingSourceDescriptor);
|
|
565
544
|
});
|