@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.
Files changed (255) 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/ConnectionLockRpcRemote.d.ts +10 -0
  4. package/dist/src/connection/{RemoteConnectionLocker.js → ConnectionLockRpcRemote.js} +21 -35
  5. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -0
  6. package/dist/src/connection/ConnectionManager.d.ts +17 -41
  7. package/dist/src/connection/ConnectionManager.js +148 -212
  8. package/dist/src/connection/ConnectionManager.js.map +1 -1
  9. package/dist/src/connection/ConnectivityChecker.js +16 -13
  10. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  11. package/dist/src/connection/ConnectorFacade.d.ts +49 -0
  12. package/dist/src/connection/ConnectorFacade.js +83 -0
  13. package/dist/src/connection/ConnectorFacade.js.map +1 -0
  14. package/dist/src/connection/Handshaker.d.ts +1 -2
  15. package/dist/src/connection/Handshaker.js +1 -4
  16. package/dist/src/connection/Handshaker.js.map +1 -1
  17. package/dist/src/connection/ManagedConnection.d.ts +2 -6
  18. package/dist/src/connection/ManagedConnection.js +27 -36
  19. package/dist/src/connection/ManagedConnection.js.map +1 -1
  20. package/dist/src/connection/ManagedWebRtcConnection.d.ts +1 -1
  21. package/dist/src/connection/ManagedWebRtcConnection.js +2 -2
  22. package/dist/src/connection/ManagedWebRtcConnection.js.map +1 -1
  23. package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
  24. package/dist/src/connection/Simulator/Simulator.js +0 -5
  25. package/dist/src/connection/Simulator/Simulator.js.map +1 -1
  26. package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
  27. package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
  28. package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -3
  29. package/dist/src/connection/Simulator/SimulatorConnector.js +12 -14
  30. package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
  31. package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
  32. package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
  33. package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +3 -1
  34. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
  35. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
  36. package/dist/src/connection/WebRTC/{WebRtcConnector.d.ts → WebRtcConnectorRpcLocal.d.ts} +13 -13
  37. package/dist/src/connection/WebRTC/{WebRtcConnector.js → WebRtcConnectorRpcLocal.js} +46 -38
  38. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +1 -0
  39. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.d.ts +11 -0
  40. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js +55 -0
  41. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +1 -0
  42. package/dist/src/connection/WebRTC/iceServerAsString.d.ts +1 -1
  43. package/dist/src/connection/WebSocket/{WebSocketConnector.d.ts → WebSocketConnectorRpcLocal.d.ts} +21 -11
  44. package/dist/src/connection/WebSocket/{WebSocketConnector.js → WebSocketConnectorRpcLocal.js} +80 -59
  45. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +1 -0
  46. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.d.ts +8 -0
  47. package/dist/src/connection/WebSocket/{RemoteWebSocketConnector.js → WebSocketConnectorRpcRemote.js} +12 -16
  48. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +1 -0
  49. package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
  50. package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
  51. package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
  52. package/dist/src/dht/DhtNode.d.ts +18 -55
  53. package/dist/src/dht/DhtNode.js +122 -145
  54. package/dist/src/dht/DhtNode.js.map +1 -1
  55. package/dist/src/dht/{RemoteExternalApi.d.ts → ExternalApiRpcRemote.d.ts} +2 -2
  56. package/dist/src/dht/{RemoteExternalApi.js → ExternalApiRpcRemote.js} +5 -6
  57. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -0
  58. package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +2 -3
  59. package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +21 -19
  60. package/dist/src/dht/RemoteDhtNode.js.map +1 -0
  61. package/dist/src/dht/contact/ContactList.d.ts +0 -1
  62. package/dist/src/dht/contact/ContactList.js +0 -3
  63. package/dist/src/dht/contact/ContactList.js.map +1 -1
  64. package/dist/src/dht/contact/RandomContactList.d.ts +0 -1
  65. package/dist/src/dht/contact/RandomContactList.js +0 -3
  66. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  67. package/dist/src/dht/contact/SortedContactList.d.ts +0 -3
  68. package/dist/src/dht/contact/SortedContactList.js +0 -9
  69. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  70. package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
  71. package/dist/src/dht/discovery/DiscoverySession.js +9 -10
  72. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  73. package/dist/src/dht/discovery/PeerDiscovery.d.ts +12 -11
  74. package/dist/src/dht/discovery/PeerDiscovery.js +33 -37
  75. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  76. package/dist/src/dht/find/RecursiveFindSession.d.ts +9 -10
  77. package/dist/src/dht/find/RecursiveFindSession.js +13 -13
  78. package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
  79. package/dist/src/dht/find/RecursiveFinder.d.ts +9 -11
  80. package/dist/src/dht/find/RecursiveFinder.js +35 -36
  81. package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
  82. package/dist/src/dht/find/RemoteRecursiveFindSession.d.ts +1 -1
  83. package/dist/src/dht/find/RemoteRecursiveFindSession.js +4 -4
  84. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +1 -1
  85. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
  86. package/dist/src/dht/registerExternalApiRpcMethods.js +4 -3
  87. package/dist/src/dht/registerExternalApiRpcMethods.js.map +1 -1
  88. package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
  89. package/dist/src/dht/routing/DuplicateDetector.js +2 -7
  90. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  91. package/dist/src/dht/routing/Router.d.ts +12 -15
  92. package/dist/src/dht/routing/Router.js +30 -33
  93. package/dist/src/dht/routing/Router.js.map +1 -1
  94. package/dist/src/dht/routing/{RemoteRouter.d.ts → RouterRpcRemote.d.ts} +2 -2
  95. package/dist/src/dht/routing/{RemoteRouter.js → RouterRpcRemote.js} +5 -5
  96. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -0
  97. package/dist/src/dht/routing/RoutingSession.d.ts +3 -4
  98. package/dist/src/dht/routing/RoutingSession.js +6 -5
  99. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  100. package/dist/src/dht/store/{DataStore.d.ts → StoreRpcLocal.d.ts} +6 -6
  101. package/dist/src/dht/store/{DataStore.js → StoreRpcLocal.js} +34 -34
  102. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -0
  103. package/dist/src/dht/store/{RemoteStore.d.ts → StoreRpcRemote.d.ts} +2 -2
  104. package/dist/src/dht/store/{RemoteStore.js → StoreRpcRemote.js} +4 -4
  105. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -0
  106. package/dist/src/exports.d.ts +2 -8
  107. package/dist/src/exports.js +2 -14
  108. package/dist/src/exports.js.map +1 -1
  109. package/dist/src/helpers/PeerID.d.ts +0 -1
  110. package/dist/src/helpers/PeerID.js +0 -6
  111. package/dist/src/helpers/PeerID.js.map +1 -1
  112. package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
  113. package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
  114. package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
  115. package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
  116. package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
  117. package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
  118. package/dist/src/helpers/kademliaId.d.ts +1 -0
  119. package/dist/src/helpers/kademliaId.js +14 -0
  120. package/dist/src/helpers/kademliaId.js.map +1 -0
  121. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
  122. package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
  123. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  124. package/dist/src/helpers/protoClasses.js +2 -2
  125. package/dist/src/helpers/protoClasses.js.map +1 -1
  126. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +29 -29
  127. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +39 -39
  128. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  129. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +49 -162
  130. package/dist/src/proto/packages/dht/protos/DhtRpc.js +47 -88
  131. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  132. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +15 -15
  133. package/dist/src/transport/RoutingRpcCommunicator.js +1 -0
  134. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  135. package/package.json +10 -9
  136. package/protos/DhtRpc.proto +30 -60
  137. package/src/connection/ConnectionLockHandler.ts +1 -1
  138. package/src/connection/ConnectionLockRpcRemote.ts +62 -0
  139. package/src/connection/ConnectionManager.ts +178 -274
  140. package/src/connection/ConnectivityChecker.ts +15 -12
  141. package/src/connection/ConnectorFacade.ts +140 -0
  142. package/src/connection/Handshaker.ts +0 -5
  143. package/src/connection/ManagedConnection.ts +26 -40
  144. package/src/connection/ManagedWebRtcConnection.ts +0 -2
  145. package/src/connection/Simulator/Simulator.ts +0 -7
  146. package/src/connection/Simulator/SimulatorConnection.ts +16 -13
  147. package/src/connection/Simulator/SimulatorConnector.ts +13 -19
  148. package/src/connection/Simulator/SimulatorTransport.ts +6 -1
  149. package/src/connection/WebRTC/NodeWebRtcConnection.ts +15 -14
  150. package/src/connection/WebRTC/{WebRtcConnector.ts → WebRtcConnectorRpcLocal.ts} +68 -56
  151. package/src/connection/WebRTC/WebRtcConnectorRpcRemote.ts +71 -0
  152. package/src/connection/WebRTC/iceServerAsString.ts +1 -1
  153. package/src/connection/WebSocket/{WebSocketConnector.ts → WebSocketConnectorRpcLocal.ts} +102 -79
  154. package/src/connection/WebSocket/WebSocketConnectorRpcRemote.ts +45 -0
  155. package/src/connection/WebSocket/WebSocketServer.ts +26 -8
  156. package/src/dht/DhtNode.ts +176 -203
  157. package/src/dht/{RemoteExternalApi.ts → ExternalApiRpcRemote.ts} +3 -4
  158. package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +11 -9
  159. package/src/dht/contact/ContactList.ts +0 -4
  160. package/src/dht/contact/RandomContactList.ts +0 -4
  161. package/src/dht/contact/SortedContactList.ts +0 -12
  162. package/src/dht/discovery/DiscoverySession.ts +20 -23
  163. package/src/dht/discovery/PeerDiscovery.ts +47 -45
  164. package/src/dht/find/RecursiveFindSession.ts +21 -22
  165. package/src/dht/find/RecursiveFinder.ts +45 -49
  166. package/src/dht/find/RemoteRecursiveFindSession.ts +6 -6
  167. package/src/dht/registerExternalApiRpcMethods.ts +8 -5
  168. package/src/dht/routing/DuplicateDetector.ts +3 -10
  169. package/src/dht/routing/Router.ts +39 -45
  170. package/src/dht/routing/{RemoteRouter.ts → RouterRpcRemote.ts} +4 -4
  171. package/src/dht/routing/RoutingSession.ts +15 -15
  172. package/src/dht/store/{DataStore.ts → StoreRpcLocal.ts} +42 -42
  173. package/src/dht/store/{RemoteStore.ts → StoreRpcRemote.ts} +2 -2
  174. package/src/exports.ts +2 -8
  175. package/src/helpers/PeerID.ts +0 -7
  176. package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
  177. package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
  178. package/src/helpers/kademliaId.ts +8 -0
  179. package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
  180. package/src/helpers/protoClasses.ts +4 -4
  181. package/src/proto/packages/dht/protos/DhtRpc.client.ts +54 -54
  182. package/src/proto/packages/dht/protos/DhtRpc.server.ts +15 -15
  183. package/src/proto/packages/dht/protos/DhtRpc.ts +77 -216
  184. package/src/transport/RoutingRpcCommunicator.ts +1 -0
  185. package/test/benchmark/KademliaCorrectness.test.ts +4 -2
  186. package/test/benchmark/RecursiveFind.test.ts +6 -6
  187. package/test/end-to-end/Layer0-Layer1.test.ts +9 -9
  188. package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
  189. package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
  190. package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
  191. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
  192. package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
  193. package/test/integration/ConnectionLocking.test.ts +32 -26
  194. package/test/integration/ConnectionManager.test.ts +90 -93
  195. package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
  196. package/test/integration/DhtRpc.test.ts +4 -6
  197. package/test/integration/Layer1-scale.test.ts +8 -8
  198. package/test/integration/MigrateData.test.ts +9 -9
  199. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
  200. package/test/integration/RecursiveFind.test.ts +5 -5
  201. package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
  202. package/test/integration/RouteMessage.test.ts +7 -9
  203. package/test/integration/{RemoteRouter.test.ts → RouterRpcRemote.test.ts} +13 -14
  204. package/test/integration/RpcErrors.test.ts +25 -10
  205. package/test/integration/ScaleDownDht.test.ts +8 -8
  206. package/test/integration/SimultaneousConnections.test.ts +35 -36
  207. package/test/integration/Store.test.ts +8 -9
  208. package/test/integration/StoreAndDelete.test.ts +11 -11
  209. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
  210. package/test/integration/{RemoteStore.test.ts → StoreRpcRemote.test.ts} +17 -18
  211. package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
  212. package/test/integration/WebRtcConnectorRpc.test.ts +17 -32
  213. package/test/integration/WebSocket.test.ts +4 -2
  214. package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
  215. package/test/integration/WebSocketConnectorRpc.test.ts +10 -15
  216. package/test/unit/DuplicateDetector.test.ts +3 -4
  217. package/test/unit/LocalDataStore.test.ts +6 -8
  218. package/test/unit/RandomContactList.test.ts +1 -1
  219. package/test/unit/RecursiveFinder.test.ts +13 -18
  220. package/test/unit/Router.test.ts +18 -21
  221. package/test/unit/WebSocketConnectorRpcLocal.test.ts +64 -0
  222. package/test/unit/WebSocketServer.test.ts +24 -12
  223. package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +1 -1
  224. package/test/utils/mock/RecursiveFinder.ts +2 -2
  225. package/test/utils/mock/Router.ts +9 -11
  226. package/test/utils/mock/Transport.ts +2 -2
  227. package/test/utils/utils.ts +55 -74
  228. package/dist/src/connection/RemoteConnectionLocker.d.ts +0 -13
  229. package/dist/src/connection/RemoteConnectionLocker.js.map +0 -1
  230. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.d.ts +0 -12
  231. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js +0 -74
  232. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js.map +0 -1
  233. package/dist/src/connection/WebRTC/WebRtcConnector.js.map +0 -1
  234. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.d.ts +0 -9
  235. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +0 -1
  236. package/dist/src/connection/WebSocket/WebSocketConnector.js.map +0 -1
  237. package/dist/src/dht/DhtPeer.js.map +0 -1
  238. package/dist/src/dht/RemoteExternalApi.js.map +0 -1
  239. package/dist/src/dht/routing/RemoteRouter.js.map +0 -1
  240. package/dist/src/dht/store/DataStore.js.map +0 -1
  241. package/dist/src/dht/store/RemoteStore.js.map +0 -1
  242. package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
  243. package/dist/src/helpers/browser/isBrowser.js +0 -6
  244. package/dist/src/helpers/browser/isBrowser.js.map +0 -1
  245. package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
  246. package/dist/src/helpers/browser/isNodeJS.js +0 -6
  247. package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
  248. package/src/connection/RemoteConnectionLocker.ts +0 -84
  249. package/src/connection/WebRTC/RemoteWebrtcConnector.ts +0 -93
  250. package/src/connection/WebSocket/RemoteWebSocketConnector.ts +0 -49
  251. package/src/helpers/browser/isBrowser.ts +0 -1
  252. package/src/helpers/browser/isNodeJS.ts +0 -1
  253. package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
  254. package/test/integration/DhtWithMockConnections.test.ts +0 -46
  255. package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
@@ -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");
@@ -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 DataStore_1 = require("./store/DataStore");
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 RemoteExternalApi_1 = require("./RemoteExternalApi");
27
- const exports_1 = require("../exports");
28
- const isNodeJS_1 = require("../helpers/browser/isNodeJS");
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
- 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,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, 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 = (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 (!(0, isNodeJS_1.isNodeJS)()) {
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 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;
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 connectionManagerConfig = {
157
- transportLayer: this,
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
- maxConnections: this.config.maxConnections,
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
- connectionManagerConfig.websocketHost = this.config.peerDescriptor.websocket.host;
173
- connectionManagerConfig.websocketPortRange = {
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
- connectionManagerConfig.websocketHost = this.config.websocketHost;
181
- connectionManagerConfig.websocketPortRange = this.config.websocketPortRange;
167
+ connectorFacadeConfig.websocketHost = this.config.websocketHost;
168
+ connectorFacadeConfig.websocketPortRange = this.config.websocketPortRange;
182
169
  }
183
- const connectionManager = new ConnectionManager_1.ConnectionManager(connectionManagerConfig);
184
- await connectionManager.start(this.generatePeerDescriptorCallBack);
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.transportLayer = connectionManager;
177
+ this.transport = connectionManager;
187
178
  }
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));
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.ownPeerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(this.ownPeerDescriptor);
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
- getClosestContactsLimit: this.config.getClosestContactsLimit,
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.dataStore = new DataStore_1.DataStore({
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
- numberOfCopies: this.config.storeNumberOfCopies,
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.isSamePeerDescriptor)(this.config.entryPoints[0], this.ownPeerDescriptor)) {
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 (this.ownPeerId.equals(PeerID_1.PeerID.fromValue(peerDescriptor.kademliaId))) {
239
+ if ((0, peerIdFromPeerDescriptor_1.areEqualPeerDescriptors)(this.ownPeerDescriptor, peerDescriptor)) {
253
240
  logger.error('onTransportConnected() to self');
254
241
  }
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);
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
- if (this.ownPeerDescriptor.nodeName === 'entrypoint') {
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: ' + this.config.nodeName + ', ' + peerDescriptor.nodeName + ' ');
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(this.config.nodeName + ', ' + peerDescriptor.nodeName + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
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(this.config.nodeName + ', ' + peerDescriptor.nodeName + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType);
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 ' + this.config.nodeName + ', ' +
301
- message.sourceDescriptor?.nodeName + ' ' + message.serviceId + ' ' + message.messageId);
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" ' + this.config.nodeName + ', ' + message.sourceDescriptor?.nodeName +
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((dhtPeer) => dhtPeer.getPeerDescriptor());
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.ownPeerId, 100);
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 ${contact.getPeerId().value.toString()}`);
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.contactOnAddedCounter++;
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 ${contact.getPeerId().value.toString()}`);
351
- this.emit('newKbucketContact', contact.getPeerDescriptor(), this.neighborList.getClosestContacts(this.config.getClosestContactsLimit).map((peer) => peer.getPeerDescriptor()));
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 ' + this.config.nodeName + ', ' + contact.getPeerDescriptor().nodeName + ' ');
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 ${contact.getPeerId().value.toString()}`);
358
- this.emit('newKbucketContact', contact.getPeerDescriptor(), this.neighborList.getClosestContacts(this.config.getClosestContactsLimit).map((peer) => peer.getPeerDescriptor()));
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 ' + this.config.nodeName + ', ' + contact.getPeerDescriptor().nodeName + ' ');
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.ownPeerId;
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
- 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);
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(dhtPeer);
392
+ this.neighborList.addContact(remoteDhtNode);
411
393
  if (contact.openInternet) {
412
- this.openInternetPeers.addContact(dhtPeer);
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.contactAddCounter++;
419
- this.bucket.add(dhtPeer);
401
+ this.bucket.add(remoteDhtNode);
420
402
  }
421
403
  else {
422
- this.randomPeers.addContact(dhtPeer);
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 ${contact.kademliaId.toString()}`);
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, _doNotConnect) {
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, doRandomJoin, retry) {
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, doRandomJoin, retry)));
438
+ await Promise.all(entryPointDescriptors.map((entryPoint) => this.peerDiscovery.joinDht(entryPoint, doAdditionalRandomPeerDiscovery, retry)));
457
439
  }
458
- async startRecursiveFind(idToFind, findMode, excludedPeer) {
459
- return this.recursiveFinder.startRecursiveFind(idToFind, findMode, excludedPeer);
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.dataStore.storeDataToDht(key, data);
447
+ return this.storeRpcLocal.storeDataToDht(key, data);
466
448
  }
467
449
  async storeDataViaPeer(key, data, peer) {
468
- const target = new RemoteExternalApi_1.RemoteExternalApi(this.ownPeerDescriptor, peer, this.config.serviceId, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.ExternalApiServiceClient(this.rpcCommunicator.getRpcClientTransport())));
469
- return await target.storeData(key, data);
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
- return this.recursiveFinder.startRecursiveFind(idToFind, DhtRpc_1.FindMode.DATA);
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.dataStore.deleteDataFromDht(idToDelete);
462
+ return this.storeRpcLocal.deleteDataFromDht(idToDelete);
477
463
  }
478
464
  }
479
465
  async findDataViaPeer(idToFind, peer) {
480
- const target = new RemoteExternalApi_1.RemoteExternalApi(this.ownPeerDescriptor, peer, this.config.serviceId, (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.ExternalApiServiceClient(this.rpcCommunicator.getRpcClientTransport())));
481
- return await target.findData(idToFind);
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.transportLayer;
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((dhtPeer) => dhtPeer.getPeerDescriptor());
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
- isJoinOngoing() {
517
- return this.peerDiscovery.isJoinOngoing();
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().map((dhtPeer) => this.bucket.remove(dhtPeer.id));
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.transportLayer = undefined;
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.getClosestContactsLimit),
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: ' + this.config.nodeName + ', ' + context.incomingSourceDescriptor?.nodeName);
540
+ logger.trace('received ping request: ' + (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(context.incomingSourceDescriptor));
564
541
  setImmediate(() => {
565
542
  this.addNewContact(context.incomingSourceDescriptor);
566
543
  });