@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.
Files changed (196) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +1 -1
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionManager.d.ts +17 -40
  4. package/dist/src/connection/ConnectionManager.js +138 -204
  5. package/dist/src/connection/ConnectionManager.js.map +1 -1
  6. package/dist/src/connection/ConnectivityChecker.js +14 -11
  7. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  8. package/dist/src/connection/ConnectorFacade.d.ts +49 -0
  9. package/dist/src/connection/ConnectorFacade.js +86 -0
  10. package/dist/src/connection/ConnectorFacade.js.map +1 -0
  11. package/dist/src/connection/ManagedConnection.d.ts +1 -4
  12. package/dist/src/connection/ManagedConnection.js +23 -31
  13. package/dist/src/connection/ManagedConnection.js.map +1 -1
  14. package/dist/src/connection/RemoteConnectionLocker.js +4 -3
  15. package/dist/src/connection/RemoteConnectionLocker.js.map +1 -1
  16. package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
  17. package/dist/src/connection/Simulator/Simulator.js +0 -5
  18. package/dist/src/connection/Simulator/Simulator.js.map +1 -1
  19. package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
  20. package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
  21. package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -2
  22. package/dist/src/connection/Simulator/SimulatorConnector.js +10 -11
  23. package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
  24. package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
  25. package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
  26. package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +2 -0
  27. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
  28. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
  29. package/dist/src/connection/WebRTC/WebRtcConnector.d.ts +9 -9
  30. package/dist/src/connection/WebRTC/WebRtcConnector.js +22 -22
  31. package/dist/src/connection/WebRTC/WebRtcConnector.js.map +1 -1
  32. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js +2 -1
  33. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +1 -1
  34. package/dist/src/connection/WebSocket/WebSocketConnector.d.ts +19 -8
  35. package/dist/src/connection/WebSocket/WebSocketConnector.js +67 -46
  36. package/dist/src/connection/WebSocket/WebSocketConnector.js.map +1 -1
  37. package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
  38. package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
  39. package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
  40. package/dist/src/dht/DhtNode.d.ts +15 -51
  41. package/dist/src/dht/DhtNode.js +107 -129
  42. package/dist/src/dht/DhtNode.js.map +1 -1
  43. package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +2 -3
  44. package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +21 -19
  45. package/dist/src/dht/RemoteDhtNode.js.map +1 -0
  46. package/dist/src/dht/contact/ContactList.d.ts +0 -1
  47. package/dist/src/dht/contact/ContactList.js +0 -3
  48. package/dist/src/dht/contact/ContactList.js.map +1 -1
  49. package/dist/src/dht/contact/RandomContactList.d.ts +0 -1
  50. package/dist/src/dht/contact/RandomContactList.js +0 -3
  51. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  52. package/dist/src/dht/contact/SortedContactList.d.ts +0 -3
  53. package/dist/src/dht/contact/SortedContactList.js +0 -9
  54. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  55. package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
  56. package/dist/src/dht/discovery/DiscoverySession.js +9 -10
  57. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  58. package/dist/src/dht/discovery/PeerDiscovery.d.ts +11 -10
  59. package/dist/src/dht/discovery/PeerDiscovery.js +32 -37
  60. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  61. package/dist/src/dht/find/RecursiveFindSession.d.ts +5 -6
  62. package/dist/src/dht/find/RecursiveFindSession.js +8 -8
  63. package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
  64. package/dist/src/dht/find/RecursiveFinder.d.ts +2 -4
  65. package/dist/src/dht/find/RecursiveFinder.js +11 -12
  66. package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
  67. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
  68. package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
  69. package/dist/src/dht/routing/DuplicateDetector.js +2 -7
  70. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  71. package/dist/src/dht/routing/RemoteRouter.js +1 -1
  72. package/dist/src/dht/routing/RemoteRouter.js.map +1 -1
  73. package/dist/src/dht/routing/Router.d.ts +10 -13
  74. package/dist/src/dht/routing/Router.js +28 -29
  75. package/dist/src/dht/routing/Router.js.map +1 -1
  76. package/dist/src/dht/routing/RoutingSession.d.ts +3 -4
  77. package/dist/src/dht/routing/RoutingSession.js +4 -3
  78. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  79. package/dist/src/dht/store/DataStore.d.ts +2 -2
  80. package/dist/src/dht/store/DataStore.js +7 -7
  81. package/dist/src/dht/store/DataStore.js.map +1 -1
  82. package/dist/src/exports.d.ts +1 -7
  83. package/dist/src/exports.js +2 -14
  84. package/dist/src/exports.js.map +1 -1
  85. package/dist/src/helpers/PeerID.d.ts +0 -1
  86. package/dist/src/helpers/PeerID.js +0 -6
  87. package/dist/src/helpers/PeerID.js.map +1 -1
  88. package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
  89. package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
  90. package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
  91. package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
  92. package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
  93. package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
  94. package/dist/src/helpers/kademliaId.d.ts +1 -0
  95. package/dist/src/helpers/kademliaId.js +14 -0
  96. package/dist/src/helpers/kademliaId.js.map +1 -0
  97. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
  98. package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
  99. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  100. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +0 -4
  101. package/dist/src/proto/packages/dht/protos/DhtRpc.js +1 -2
  102. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  103. package/package.json +10 -9
  104. package/protos/DhtRpc.proto +0 -1
  105. package/src/connection/ConnectionLockHandler.ts +1 -1
  106. package/src/connection/ConnectionManager.ts +157 -254
  107. package/src/connection/ConnectivityChecker.ts +14 -11
  108. package/src/connection/ConnectorFacade.ts +143 -0
  109. package/src/connection/ManagedConnection.ts +23 -34
  110. package/src/connection/RemoteConnectionLocker.ts +4 -3
  111. package/src/connection/Simulator/Simulator.ts +0 -7
  112. package/src/connection/Simulator/SimulatorConnection.ts +16 -13
  113. package/src/connection/Simulator/SimulatorConnector.ts +11 -12
  114. package/src/connection/Simulator/SimulatorTransport.ts +6 -1
  115. package/src/connection/WebRTC/NodeWebRtcConnection.ts +14 -13
  116. package/src/connection/WebRTC/WebRtcConnector.ts +31 -31
  117. package/src/connection/WebSocket/RemoteWebSocketConnector.ts +2 -1
  118. package/src/connection/WebSocket/WebSocketConnector.ts +85 -62
  119. package/src/connection/WebSocket/WebSocketServer.ts +26 -8
  120. package/src/dht/DhtNode.ts +155 -181
  121. package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +11 -9
  122. package/src/dht/contact/ContactList.ts +0 -4
  123. package/src/dht/contact/RandomContactList.ts +0 -4
  124. package/src/dht/contact/SortedContactList.ts +0 -12
  125. package/src/dht/discovery/DiscoverySession.ts +20 -23
  126. package/src/dht/discovery/PeerDiscovery.ts +45 -44
  127. package/src/dht/find/RecursiveFindSession.ts +12 -13
  128. package/src/dht/find/RecursiveFinder.ts +16 -19
  129. package/src/dht/registerExternalApiRpcMethods.ts +1 -1
  130. package/src/dht/routing/DuplicateDetector.ts +3 -10
  131. package/src/dht/routing/RemoteRouter.ts +2 -2
  132. package/src/dht/routing/Router.ts +35 -39
  133. package/src/dht/routing/RoutingSession.ts +9 -9
  134. package/src/dht/store/DataStore.ts +11 -11
  135. package/src/exports.ts +1 -7
  136. package/src/helpers/PeerID.ts +0 -7
  137. package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
  138. package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
  139. package/src/helpers/kademliaId.ts +8 -0
  140. package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
  141. package/src/proto/packages/dht/protos/DhtRpc.ts +1 -6
  142. package/test/benchmark/KademliaCorrectness.test.ts +4 -2
  143. package/test/benchmark/RecursiveFind.test.ts +6 -6
  144. package/test/end-to-end/Layer0-Layer1.test.ts +9 -9
  145. package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
  146. package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
  147. package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
  148. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
  149. package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
  150. package/test/integration/ConnectionLocking.test.ts +32 -26
  151. package/test/integration/ConnectionManager.test.ts +90 -93
  152. package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
  153. package/test/integration/DhtRpc.test.ts +4 -6
  154. package/test/integration/Layer1-scale.test.ts +8 -8
  155. package/test/integration/MigrateData.test.ts +9 -9
  156. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
  157. package/test/integration/RecursiveFind.test.ts +5 -5
  158. package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
  159. package/test/integration/RemoteRouter.test.ts +5 -6
  160. package/test/integration/RemoteStore.test.ts +4 -5
  161. package/test/integration/RouteMessage.test.ts +7 -9
  162. package/test/integration/RpcErrors.test.ts +25 -10
  163. package/test/integration/ScaleDownDht.test.ts +8 -8
  164. package/test/integration/SimultaneousConnections.test.ts +35 -36
  165. package/test/integration/Store.test.ts +8 -9
  166. package/test/integration/StoreAndDelete.test.ts +11 -11
  167. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
  168. package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
  169. package/test/integration/WebRtcConnectorRpc.test.ts +6 -8
  170. package/test/integration/WebSocket.test.ts +4 -2
  171. package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
  172. package/test/integration/WebSocketConnectorRpc.test.ts +2 -3
  173. package/test/unit/DuplicateDetector.test.ts +3 -4
  174. package/test/unit/LocalDataStore.test.ts +6 -8
  175. package/test/unit/RandomContactList.test.ts +1 -1
  176. package/test/unit/RecursiveFinder.test.ts +8 -12
  177. package/test/unit/Router.test.ts +18 -21
  178. package/test/unit/WebSocketConnector.test.ts +64 -0
  179. package/test/unit/WebSocketServer.test.ts +24 -12
  180. package/test/utils/mock/RecursiveFinder.ts +2 -2
  181. package/test/utils/mock/Router.ts +9 -11
  182. package/test/utils/mock/Transport.ts +2 -2
  183. package/test/utils/utils.ts +40 -49
  184. package/dist/src/dht/DhtPeer.js.map +0 -1
  185. package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
  186. package/dist/src/helpers/browser/isBrowser.js +0 -6
  187. package/dist/src/helpers/browser/isBrowser.js.map +0 -1
  188. package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
  189. package/dist/src/helpers/browser/isNodeJS.js +0 -6
  190. package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
  191. package/src/helpers/browser/isBrowser.ts +0 -1
  192. package/src/helpers/browser/isNodeJS.ts +0 -1
  193. package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
  194. package/test/integration/DhtWithMockConnections.test.ts +0 -46
  195. package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
  196. /package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +0 -0
@@ -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 = exports.DhtNodeConfig = void 0;
7
- const DhtPeer_1 = require("./DhtPeer");
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 exports_1 = require("../exports");
28
- const isNodeJS_1 = require("../helpers/browser/isNodeJS");
27
+ const UUID_1 = require("../helpers/UUID");
28
+ const isBrowserEnvironment_1 = require("../helpers/browser/isBrowserEnvironment");
29
29
  const lodash_1 = require("lodash");
30
- class DhtNodeConfig {
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, nodeName) => {
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, isNodeJS_1.isNodeJS)() ? DhtRpc_1.NodeType.NODEJS : DhtRpc_1.NodeType.BROWSER;
66
- const ret = { kademliaId, nodeName: nodeName ? nodeName : (0, utils_1.binaryToHex)(kademliaId), type: nodeType };
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', (_oldContact, _newContact) => {
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 DhtPeer_1.DhtPeer(this.ownPeerDescriptor, removedContact.getPeerDescriptor(), (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId));
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.transportLayer.on('connected', (peerDescriptor) => this.onTransportConnected(peerDescriptor));
108
- this.transportLayer.on('disconnected', (peerDescriptor, disonnectionType) => {
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.transportLayer.getAllConnectionPeerDescriptors().map((peer) => {
112
- const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(peer);
113
- const dhtPeer = new DhtPeer_1.DhtPeer(this.ownPeerDescriptor, peer, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId);
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(peerId.toKey(), dhtPeer);
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, this.config.nodeName);
100
+ this.ownPeerDescriptor = (0, exports.createPeerDescriptor)(connectivityResponse, this.config.peerId);
129
101
  }
130
102
  return this.ownPeerDescriptor;
131
103
  };
132
- this.config = new DhtNodeConfig(conf);
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 (!(0, isNodeJS_1.isNodeJS)()) {
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 transportLayer is given, do not create a ConnectionManager
148
- if (this.config.transportLayer) {
149
- this.transportLayer = this.config.transportLayer;
150
- this.ownPeerDescriptor = this.transportLayer.getPeerDescriptor();
151
- if (this.config.transportLayer instanceof ConnectionManager_1.ConnectionManager) {
152
- this.connectionManager = this.config.transportLayer;
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 connectionManagerConfig = {
157
- transportLayer: this,
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
- maxConnections: this.config.maxConnections,
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
- connectionManagerConfig.websocketHost = this.config.peerDescriptor.websocket.host;
173
- connectionManagerConfig.websocketPortRange = {
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
- connectionManagerConfig.websocketHost = this.config.websocketHost;
181
- connectionManagerConfig.websocketPortRange = this.config.websocketPortRange;
168
+ connectorFacadeConfig.websocketHost = this.config.websocketHost;
169
+ connectorFacadeConfig.websocketPortRange = this.config.websocketPortRange;
182
170
  }
183
- const connectionManager = new ConnectionManager_1.ConnectionManager(connectionManagerConfig);
184
- await connectionManager.start(this.generatePeerDescriptorCallBack);
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.transportLayer = connectionManager;
178
+ this.transport = connectionManager;
187
179
  }
188
- this.rpcCommunicator = new RoutingRpcCommunicator_1.RoutingRpcCommunicator(this.config.serviceId, this.transportLayer.send, { rpcRequestTimeout: this.config.rpcRequestTimeout });
189
- this.transportLayer.on('message', (message) => this.handleMessage(message));
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.ownPeerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(this.ownPeerDescriptor);
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.isSamePeerDescriptor)(this.config.entryPoints[0], this.ownPeerDescriptor)) {
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 (this.ownPeerId.equals(PeerID_1.PeerID.fromValue(peerDescriptor.kademliaId))) {
240
+ if ((0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(this.ownPeerDescriptor, peerDescriptor)) {
253
241
  logger.error('onTransportConnected() to self');
254
242
  }
255
- const dhtPeer = new DhtPeer_1.DhtPeer(this.ownPeerDescriptor, peerDescriptor, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.DhtRpcServiceClient(this.rpcCommunicator.getRpcClientTransport())), this.config.serviceId);
256
- if (!this.connections.has(PeerID_1.PeerID.fromValue(dhtPeer.id).toKey())) {
257
- this.connections.set(PeerID_1.PeerID.fromValue(dhtPeer.id).toKey(), dhtPeer);
258
- logger.trace(' ' + this.config.nodeName + ' connectionschange add ' + this.connections.size);
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
- if (this.ownPeerDescriptor.nodeName === 'entrypoint') {
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: ' + this.config.nodeName + ', ' + peerDescriptor.nodeName + ' ');
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(this.config.nodeName + ', ' + peerDescriptor.nodeName + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
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(this.config.nodeName + ', ' + peerDescriptor.nodeName + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
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 ' + this.config.nodeName + ', ' +
301
- message.sourceDescriptor?.nodeName + ' ' + message.serviceId + ' ' + message.messageId);
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" ' + this.config.nodeName + ', ' + message.sourceDescriptor?.nodeName +
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((dhtPeer) => dhtPeer.getPeerDescriptor());
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.ownPeerId, 100);
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 ${contact.getPeerId().value.toString()}`);
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.contactOnAddedCounter++;
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 ${contact.getPeerId().value.toString()}`);
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 ' + this.config.nodeName + ', ' + contact.getPeerDescriptor().nodeName + ' ');
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 ${contact.getPeerId().value.toString()}`);
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 ' + this.config.nodeName + ', ' + contact.getPeerDescriptor().nodeName + ' ');
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.ownPeerId;
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
- const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
406
- if (!peerId.equals(this.ownPeerId)) {
407
- logger.trace(`Adding new contact ${contact.kademliaId.toString()}`);
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(dhtPeer);
393
+ this.neighborList.addContact(remoteDhtNode);
411
394
  if (contact.openInternet) {
412
- this.openInternetPeers.addContact(dhtPeer);
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.contactAddCounter++;
419
- this.bucket.add(dhtPeer);
402
+ this.bucket.add(remoteDhtNode);
420
403
  }
421
404
  else {
422
- this.randomPeers.addContact(dhtPeer);
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 ${contact.kademliaId.toString()}`);
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, _doNotConnect) {
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, doRandomJoin, retry) {
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, doRandomJoin, retry)));
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
- return this.recursiveFinder.startRecursiveFind(idToFind, DhtRpc_1.FindMode.DATA);
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.transportLayer;
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((dhtPeer) => dhtPeer.getPeerDescriptor());
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
- isJoinOngoing() {
517
- return this.peerDiscovery.isJoinOngoing();
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().map((dhtPeer) => this.bucket.remove(dhtPeer.id));
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.transportLayer = undefined;
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: ' + this.config.nodeName + ', ' + context.incomingSourceDescriptor?.nodeName);
541
+ logger.trace('received ping request: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(context.incomingSourceDescriptor));
564
542
  setImmediate(() => {
565
543
  this.addNewContact(context.incomingSourceDescriptor);
566
544
  });