@streamr/dht 0.0.1-tatum.6 → 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 -40
- package/dist/src/connection/ConnectionManager.js +138 -204
- 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 +15 -51
- package/dist/src/dht/DhtNode.js +107 -129
- package/dist/src/dht/DhtNode.js.map +1 -1
- 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 +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 +1 -1
- 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 -4
- package/dist/src/dht/routing/RoutingSession.js +4 -3
- 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 -7
- 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/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 +157 -254
- 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 +155 -181
- 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 +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 +2 -2
- package/src/dht/routing/Router.ts +35 -39
- package/src/dht/routing/RoutingSession.ts +9 -9
- package/src/dht/store/DataStore.ts +11 -11
- package/src/exports.ts +1 -7
- 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 +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/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 +1 -1
- package/test/unit/RecursiveFinder.test.ts +8 -12
- package/test/unit/Router.test.ts +18 -21
- 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,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,27 @@ 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 = {
|
|
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
|
+
};
|
|
133
121
|
this.send = this.send.bind(this);
|
|
134
122
|
}
|
|
135
123
|
async start() {
|
|
@@ -138,62 +126,64 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
138
126
|
}
|
|
139
127
|
logger.trace(`Starting new Streamr Network DHT Node with serviceId ${this.config.serviceId}`);
|
|
140
128
|
this.started = true;
|
|
141
|
-
if (
|
|
129
|
+
if ((0, isBrowserEnvironment_1.isBrowserEnvironment)()) {
|
|
142
130
|
this.config.websocketPortRange = undefined;
|
|
143
131
|
if (this.config.peerDescriptor) {
|
|
144
132
|
this.config.peerDescriptor.websocket = undefined;
|
|
145
133
|
}
|
|
146
134
|
}
|
|
147
|
-
// If
|
|
148
|
-
if (this.config.
|
|
149
|
-
this.
|
|
150
|
-
this.ownPeerDescriptor = this.
|
|
151
|
-
if (this.config.
|
|
152
|
-
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;
|
|
153
141
|
}
|
|
154
142
|
}
|
|
155
143
|
else {
|
|
156
|
-
const
|
|
157
|
-
|
|
144
|
+
const connectorFacadeConfig = {
|
|
145
|
+
transport: this,
|
|
158
146
|
entryPoints: this.config.entryPoints,
|
|
159
147
|
iceServers: this.config.iceServers,
|
|
160
|
-
metricsContext: this.config.metricsContext,
|
|
161
148
|
webrtcAllowPrivateAddresses: this.config.webrtcAllowPrivateAddresses,
|
|
162
149
|
webrtcDatachannelBufferThresholdLow: this.config.webrtcDatachannelBufferThresholdLow,
|
|
163
150
|
webrtcDatachannelBufferThresholdHigh: this.config.webrtcDatachannelBufferThresholdHigh,
|
|
164
151
|
webrtcNewConnectionTimeout: this.config.webrtcNewConnectionTimeout,
|
|
165
152
|
webrtcPortRange: this.config.webrtcPortRange,
|
|
166
|
-
|
|
153
|
+
maxMessageSize: this.config.maxMessageSize,
|
|
167
154
|
tlsCertificate: this.config.tlsCertificate,
|
|
168
|
-
externalIp: this.config.externalIp
|
|
155
|
+
externalIp: this.config.externalIp,
|
|
156
|
+
createOwnPeerDescriptor: (connectivityResponse) => this.generatePeerDescriptorCallBack(connectivityResponse),
|
|
169
157
|
};
|
|
170
158
|
// If own PeerDescriptor is given in config, create a ConnectionManager with ws server
|
|
171
159
|
if (this.config.peerDescriptor?.websocket) {
|
|
172
|
-
|
|
173
|
-
|
|
160
|
+
connectorFacadeConfig.websocketHost = this.config.peerDescriptor.websocket.host;
|
|
161
|
+
connectorFacadeConfig.websocketPortRange = {
|
|
174
162
|
min: this.config.peerDescriptor.websocket.port,
|
|
175
163
|
max: this.config.peerDescriptor.websocket.port
|
|
176
164
|
};
|
|
177
165
|
// If websocketPortRange is given, create ws server using it, websocketHost can be undefined
|
|
178
166
|
}
|
|
179
167
|
else if (this.config.websocketPortRange) {
|
|
180
|
-
|
|
181
|
-
|
|
168
|
+
connectorFacadeConfig.websocketHost = this.config.websocketHost;
|
|
169
|
+
connectorFacadeConfig.websocketPortRange = this.config.websocketPortRange;
|
|
182
170
|
}
|
|
183
|
-
const connectionManager = new ConnectionManager_1.ConnectionManager(
|
|
184
|
-
|
|
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();
|
|
185
177
|
this.connectionManager = connectionManager;
|
|
186
|
-
this.
|
|
178
|
+
this.transport = connectionManager;
|
|
187
179
|
}
|
|
188
|
-
this.rpcCommunicator = new RoutingRpcCommunicator_1.RoutingRpcCommunicator(this.config.serviceId, this.
|
|
189
|
-
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));
|
|
190
182
|
this.bindDefaultServerMethods();
|
|
191
|
-
this.
|
|
192
|
-
this.initKBuckets(this.ownPeerId);
|
|
183
|
+
this.initKBuckets((0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(this.ownPeerDescriptor));
|
|
193
184
|
this.peerDiscovery = new PeerDiscovery_1.PeerDiscovery({
|
|
194
185
|
rpcCommunicator: this.rpcCommunicator,
|
|
195
186
|
ownPeerDescriptor: this.ownPeerDescriptor,
|
|
196
|
-
ownPeerId: this.ownPeerId,
|
|
197
187
|
bucket: this.bucket,
|
|
198
188
|
connections: this.connections,
|
|
199
189
|
neighborList: this.neighborList,
|
|
@@ -211,7 +201,6 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
211
201
|
rpcCommunicator: this.rpcCommunicator,
|
|
212
202
|
connections: this.connections,
|
|
213
203
|
ownPeerDescriptor: this.ownPeerDescriptor,
|
|
214
|
-
ownPeerId: this.ownPeerId,
|
|
215
204
|
addContact: this.addNewContact.bind(this),
|
|
216
205
|
serviceId: this.config.serviceId,
|
|
217
206
|
connectionManager: this.connectionManager
|
|
@@ -223,7 +212,6 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
223
212
|
connections: this.connections,
|
|
224
213
|
ownPeerDescriptor: this.ownPeerDescriptor,
|
|
225
214
|
serviceId: this.config.serviceId,
|
|
226
|
-
ownPeerId: this.ownPeerId,
|
|
227
215
|
addContact: this.addNewContact.bind(this),
|
|
228
216
|
isPeerCloserToIdThanSelf: this.isPeerCloserToIdThanSelf.bind(this),
|
|
229
217
|
localDataStore: this.localDataStore
|
|
@@ -244,39 +232,37 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
244
232
|
});
|
|
245
233
|
(0, registerExternalApiRpcMethods_1.registerExternalApiRpcMethods)(this);
|
|
246
234
|
if (this.connectionManager && this.config.entryPoints && this.config.entryPoints.length > 0
|
|
247
|
-
&& !(0, peerIdFromPeerDescriptor_1.
|
|
235
|
+
&& !(0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(this.config.entryPoints[0], this.ownPeerDescriptor)) {
|
|
248
236
|
this.connectToEntryPoint(this.config.entryPoints[0]);
|
|
249
237
|
}
|
|
250
238
|
}
|
|
251
239
|
onTransportConnected(peerDescriptor) {
|
|
252
|
-
if (
|
|
240
|
+
if ((0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(this.ownPeerDescriptor, peerDescriptor)) {
|
|
253
241
|
logger.error('onTransportConnected() to self');
|
|
254
242
|
}
|
|
255
|
-
const
|
|
256
|
-
if (!this.connections.has(PeerID_1.PeerID.fromValue(
|
|
257
|
-
this.connections.set(PeerID_1.PeerID.fromValue(
|
|
258
|
-
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);
|
|
259
247
|
}
|
|
260
248
|
else {
|
|
261
249
|
logger.trace('new connection not set to connections, there is already a connection with the peer ID');
|
|
262
250
|
}
|
|
263
|
-
|
|
264
|
-
logger.trace('connected: ' + this.ownPeerDescriptor.nodeName + ', ' + peerDescriptor.nodeName + ' ' + this.connections.size);
|
|
265
|
-
}
|
|
251
|
+
logger.trace('connected: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor) + ' ' + this.connections.size);
|
|
266
252
|
this.emit('connected', peerDescriptor);
|
|
267
253
|
}
|
|
268
254
|
onTransportDisconnected(peerDescriptor, dicsonnectionType) {
|
|
269
|
-
logger.trace('disconnected: ' +
|
|
255
|
+
logger.trace('disconnected: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor));
|
|
270
256
|
this.connections.delete((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor));
|
|
271
257
|
// only remove from bucket if we are on layer 0
|
|
272
258
|
if (this.connectionManager) {
|
|
273
259
|
this.bucket.remove(peerDescriptor.kademliaId);
|
|
274
260
|
if (dicsonnectionType === 'OUTGOING_GRACEFUL_LEAVE' || dicsonnectionType === 'INCOMING_GRACEFUL_LEAVE') {
|
|
275
|
-
logger.trace(
|
|
261
|
+
logger.trace((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor) + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
|
|
276
262
|
this.removeContact(peerDescriptor, true);
|
|
277
263
|
}
|
|
278
264
|
else {
|
|
279
|
-
logger.trace(
|
|
265
|
+
logger.trace((0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(peerDescriptor) + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
|
|
280
266
|
}
|
|
281
267
|
}
|
|
282
268
|
this.emit('disconnected', peerDescriptor, dicsonnectionType);
|
|
@@ -297,25 +283,24 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
297
283
|
}
|
|
298
284
|
handleMessage(message) {
|
|
299
285
|
if (message.serviceId === this.config.serviceId) {
|
|
300
|
-
logger.trace('callig this.handleMessageFromPeer ' +
|
|
301
|
-
|
|
286
|
+
logger.trace('callig this.handleMessageFromPeer ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(message.sourceDescriptor)
|
|
287
|
+
+ ' ' + message.serviceId + ' ' + message.messageId);
|
|
302
288
|
this.rpcCommunicator?.handleMessageFromPeer(message);
|
|
303
289
|
}
|
|
304
290
|
else {
|
|
305
|
-
logger.trace('emit "message" ' +
|
|
306
|
-
' ' + message.serviceId + ' ' + message.messageId);
|
|
291
|
+
logger.trace('emit "message" ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(message.sourceDescriptor) + ' ' + message.serviceId + ' ' + message.messageId);
|
|
307
292
|
this.emit('message', message);
|
|
308
293
|
}
|
|
309
294
|
}
|
|
310
295
|
getClosestPeerDescriptors(kademliaId, limit) {
|
|
311
296
|
const closestPeers = this.bucket.closest(kademliaId, limit);
|
|
312
|
-
return closestPeers.map((
|
|
297
|
+
return closestPeers.map((remoteDhtNode) => remoteDhtNode.getPeerDescriptor());
|
|
313
298
|
}
|
|
314
299
|
onKBucketPing(oldContacts, newContact) {
|
|
315
300
|
if (this.stopped) {
|
|
316
301
|
return;
|
|
317
302
|
}
|
|
318
|
-
const sortingList = new SortedContactList_1.SortedContactList(this.
|
|
303
|
+
const sortingList = new SortedContactList_1.SortedContactList(this.getNodeId(), 100);
|
|
319
304
|
sortingList.addContacts(oldContacts);
|
|
320
305
|
const sortedContacts = sortingList.getAllContacts();
|
|
321
306
|
this.connectionManager?.weakUnlockConnection(sortedContacts[sortedContacts.length - 1].getPeerDescriptor());
|
|
@@ -327,7 +312,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
327
312
|
return;
|
|
328
313
|
}
|
|
329
314
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor());
|
|
330
|
-
logger.trace(`Removed contact ${
|
|
315
|
+
logger.trace(`Removed contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor())}`);
|
|
331
316
|
this.emit('kbucketContactRemoved', contact.getPeerDescriptor());
|
|
332
317
|
if (this.bucket.count() === 0
|
|
333
318
|
&& !this.peerDiscovery.isJoinOngoing()
|
|
@@ -342,23 +327,22 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
342
327
|
if (this.stopped) {
|
|
343
328
|
return;
|
|
344
329
|
}
|
|
345
|
-
this.
|
|
346
|
-
if (!this.stopped && !contact.getPeerId().equals(this.ownPeerId)) {
|
|
330
|
+
if (!this.stopped && !contact.getPeerId().equals(this.getNodeId())) {
|
|
347
331
|
// Important to lock here, before the ping result is known
|
|
348
332
|
this.connectionManager?.weakLockConnection(contact.getPeerDescriptor());
|
|
349
333
|
if (this.connections.has(contact.getPeerId().toKey())) {
|
|
350
|
-
logger.trace(`Added new contact ${
|
|
334
|
+
logger.trace(`Added new contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor())}`);
|
|
351
335
|
this.emit('newKbucketContact', contact.getPeerDescriptor(), this.neighborList.getClosestContacts(this.config.getClosestContactsLimit).map((peer) => peer.getPeerDescriptor()));
|
|
352
336
|
}
|
|
353
337
|
else { // open connection by pinging
|
|
354
|
-
logger.trace('starting ping ' +
|
|
338
|
+
logger.trace('starting ping ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor()));
|
|
355
339
|
contact.ping().then((result) => {
|
|
356
340
|
if (result) {
|
|
357
|
-
logger.trace(`Added new contact ${
|
|
341
|
+
logger.trace(`Added new contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor())}`);
|
|
358
342
|
this.emit('newKbucketContact', contact.getPeerDescriptor(), this.neighborList.getClosestContacts(this.config.getClosestContactsLimit).map((peer) => peer.getPeerDescriptor()));
|
|
359
343
|
}
|
|
360
344
|
else {
|
|
361
|
-
logger.trace('ping failed ' +
|
|
345
|
+
logger.trace('ping failed ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact.getPeerDescriptor()));
|
|
362
346
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor());
|
|
363
347
|
this.removeContact(contact.getPeerDescriptor());
|
|
364
348
|
this.addClosestContactToBucket();
|
|
@@ -393,7 +377,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
393
377
|
return this.neighborList.getClosestContacts(maxCount).map((c) => c.getPeerDescriptor());
|
|
394
378
|
}
|
|
395
379
|
getNodeId() {
|
|
396
|
-
return this.
|
|
380
|
+
return (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(this.ownPeerDescriptor);
|
|
397
381
|
}
|
|
398
382
|
getBucketSize() {
|
|
399
383
|
return this.bucket.count();
|
|
@@ -402,24 +386,23 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
402
386
|
if (!this.started || this.stopped) {
|
|
403
387
|
return;
|
|
404
388
|
}
|
|
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);
|
|
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);
|
|
409
392
|
if (!this.bucket.get(contact.kademliaId) && !this.neighborList.getContact((0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact))) {
|
|
410
|
-
this.neighborList.addContact(
|
|
393
|
+
this.neighborList.addContact(remoteDhtNode);
|
|
411
394
|
if (contact.openInternet) {
|
|
412
|
-
this.openInternetPeers.addContact(
|
|
395
|
+
this.openInternetPeers.addContact(remoteDhtNode);
|
|
413
396
|
}
|
|
414
397
|
if (setActive) {
|
|
398
|
+
const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
|
|
415
399
|
this.neighborList.setActive(peerId);
|
|
416
400
|
this.openInternetPeers.setActive(peerId);
|
|
417
401
|
}
|
|
418
|
-
this.
|
|
419
|
-
this.bucket.add(dhtPeer);
|
|
402
|
+
this.bucket.add(remoteDhtNode);
|
|
420
403
|
}
|
|
421
404
|
else {
|
|
422
|
-
this.randomPeers.addContact(
|
|
405
|
+
this.randomPeers.addContact(remoteDhtNode);
|
|
423
406
|
}
|
|
424
407
|
}
|
|
425
408
|
}
|
|
@@ -433,7 +416,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
433
416
|
if (!this.started || this.stopped) {
|
|
434
417
|
return;
|
|
435
418
|
}
|
|
436
|
-
logger.trace(`Removing contact ${
|
|
419
|
+
logger.trace(`Removing contact ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(contact)}`);
|
|
437
420
|
const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
|
|
438
421
|
this.bucket.remove(peerId.value);
|
|
439
422
|
this.neighborList.removeContact(peerId);
|
|
@@ -442,24 +425,24 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
442
425
|
this.openInternetPeers.removeContact(peerId);
|
|
443
426
|
}
|
|
444
427
|
}
|
|
445
|
-
async send(msg
|
|
428
|
+
async send(msg) {
|
|
446
429
|
if (!this.started || this.stopped) {
|
|
447
430
|
return;
|
|
448
431
|
}
|
|
449
432
|
const reachableThrough = this.peerDiscovery.isJoinOngoing() ? this.config.entryPoints || [] : [];
|
|
450
433
|
await this.router.send(msg, reachableThrough);
|
|
451
434
|
}
|
|
452
|
-
async joinDht(entryPointDescriptors,
|
|
435
|
+
async joinDht(entryPointDescriptors, doAdditionalRandomPeerDiscovery, retry) {
|
|
453
436
|
if (!this.started) {
|
|
454
437
|
throw new Error('Cannot join DHT before calling start() on DhtNode');
|
|
455
438
|
}
|
|
456
|
-
await Promise.all(entryPointDescriptors.map((entryPoint) => this.peerDiscovery.joinDht(entryPoint,
|
|
439
|
+
await Promise.all(entryPointDescriptors.map((entryPoint) => this.peerDiscovery.joinDht(entryPoint, doAdditionalRandomPeerDiscovery, retry)));
|
|
457
440
|
}
|
|
458
441
|
async startRecursiveFind(idToFind, findMode, excludedPeer) {
|
|
459
442
|
return this.recursiveFinder.startRecursiveFind(idToFind, findMode, excludedPeer);
|
|
460
443
|
}
|
|
461
444
|
async storeDataToDht(key, data) {
|
|
462
|
-
if (this.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
|
|
445
|
+
if (this.peerDiscovery.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
|
|
463
446
|
return this.storeDataViaPeer(key, data, (0, lodash_1.sample)(this.config.entryPoints));
|
|
464
447
|
}
|
|
465
448
|
return this.dataStore.storeDataToDht(key, data);
|
|
@@ -469,7 +452,11 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
469
452
|
return await target.storeData(key, data);
|
|
470
453
|
}
|
|
471
454
|
async getDataFromDht(idToFind) {
|
|
472
|
-
|
|
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 ?? [];
|
|
473
460
|
}
|
|
474
461
|
async deleteDataFromDht(idToDelete) {
|
|
475
462
|
if (!this.stopped) {
|
|
@@ -484,7 +471,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
484
471
|
return this.rpcCommunicator;
|
|
485
472
|
}
|
|
486
473
|
getTransport() {
|
|
487
|
-
return this.
|
|
474
|
+
return this.transport;
|
|
488
475
|
}
|
|
489
476
|
getPeerDescriptor() {
|
|
490
477
|
return this.ownPeerDescriptor;
|
|
@@ -492,14 +479,8 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
492
479
|
getAllConnectionPeerDescriptors() {
|
|
493
480
|
return Array.from(this.connections.values()).map((peer) => peer.getPeerDescriptor());
|
|
494
481
|
}
|
|
495
|
-
getK() {
|
|
496
|
-
return this.config.numberOfNodesPerKBucket;
|
|
497
|
-
}
|
|
498
482
|
getKBucketPeers() {
|
|
499
|
-
return this.bucket.toArray().map((
|
|
500
|
-
}
|
|
501
|
-
getOpenInternetPeerDescriptors() {
|
|
502
|
-
return this.openInternetPeers.getAllContacts().map((contact) => contact.getPeerDescriptor());
|
|
483
|
+
return this.bucket.toArray().map((remoteDhtNode) => remoteDhtNode.getPeerDescriptor());
|
|
503
484
|
}
|
|
504
485
|
getNumberOfConnections() {
|
|
505
486
|
return this.connections.size;
|
|
@@ -513,15 +494,12 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
513
494
|
getNumberOfWeakLockedConnections() {
|
|
514
495
|
return this.connectionManager.getNumberOfWeakLockedConnections();
|
|
515
496
|
}
|
|
516
|
-
|
|
517
|
-
|
|
497
|
+
async waitForNetworkConnectivity() {
|
|
498
|
+
await (0, utils_1.waitForCondition)(() => this.connections.size > 0, this.config.networkConnectivityTimeout);
|
|
518
499
|
}
|
|
519
500
|
hasJoined() {
|
|
520
501
|
return this.peerDiscovery.isJoinCalled();
|
|
521
502
|
}
|
|
522
|
-
getKnownEntryPoints() {
|
|
523
|
-
return this.config.entryPoints || [];
|
|
524
|
-
}
|
|
525
503
|
async stop() {
|
|
526
504
|
if (this.stopped || !this.started) {
|
|
527
505
|
return;
|
|
@@ -531,7 +509,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
531
509
|
if (this.entryPointDisconnectTimeout) {
|
|
532
510
|
clearTimeout(this.entryPointDisconnectTimeout);
|
|
533
511
|
}
|
|
534
|
-
this.bucket.toArray().
|
|
512
|
+
this.bucket.toArray().forEach((remoteDhtNode) => this.bucket.remove(remoteDhtNode.id));
|
|
535
513
|
this.bucket.removeAllListeners();
|
|
536
514
|
this.localDataStore.clear();
|
|
537
515
|
this.neighborList.stop();
|
|
@@ -544,7 +522,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
544
522
|
if (this.connectionManager) {
|
|
545
523
|
await this.connectionManager.stop();
|
|
546
524
|
}
|
|
547
|
-
this.
|
|
525
|
+
this.transport = undefined;
|
|
548
526
|
this.connectionManager = undefined;
|
|
549
527
|
this.connections.clear();
|
|
550
528
|
this.removeAllListeners();
|
|
@@ -560,7 +538,7 @@ class DhtNode extends eventemitter3_1.EventEmitter {
|
|
|
560
538
|
}
|
|
561
539
|
// IDHTRpcService implementation
|
|
562
540
|
async ping(request, context) {
|
|
563
|
-
logger.trace('received ping request: ' +
|
|
541
|
+
logger.trace('received ping request: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(context.incomingSourceDescriptor));
|
|
564
542
|
setImmediate(() => {
|
|
565
543
|
this.addNewContact(context.incomingSourceDescriptor);
|
|
566
544
|
});
|