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