@streamr/dht 100.0.0-testnet-one.4 → 100.0.0-testnet-two.0

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 (307) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +11 -11
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionLockRpcLocal.d.ts +3 -3
  4. package/dist/src/connection/ConnectionLockRpcLocal.js +4 -4
  5. package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -1
  6. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +3 -5
  7. package/dist/src/connection/ConnectionLockRpcRemote.js +4 -7
  8. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  9. package/dist/src/connection/ConnectionManager.d.ts +4 -6
  10. package/dist/src/connection/ConnectionManager.js +48 -46
  11. package/dist/src/connection/ConnectionManager.js.map +1 -1
  12. package/dist/src/connection/ConnectorFacade.d.ts +2 -2
  13. package/dist/src/connection/ConnectorFacade.js +2 -1
  14. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  15. package/dist/src/connection/ManagedConnection.d.ts +3 -6
  16. package/dist/src/connection/ManagedConnection.js +6 -10
  17. package/dist/src/connection/ManagedConnection.js.map +1 -1
  18. package/dist/src/connection/connectivityChecker.js +1 -0
  19. package/dist/src/connection/connectivityChecker.js.map +1 -1
  20. package/dist/src/connection/simulator/Simulator.d.ts +0 -3
  21. package/dist/src/connection/simulator/Simulator.js +3 -51
  22. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  23. package/dist/src/connection/simulator/SimulatorConnector.js +5 -5
  24. package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
  25. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +2 -2
  26. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  27. package/dist/src/connection/webrtc/WebrtcConnector.d.ts +0 -1
  28. package/dist/src/connection/webrtc/WebrtcConnector.js +7 -9
  29. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  30. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +2 -2
  31. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +11 -12
  32. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
  33. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +2 -5
  34. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +1 -4
  35. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
  36. package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +1 -2
  37. package/dist/src/connection/websocket/AutoCertifierClientFacade.js +3 -4
  38. package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -1
  39. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
  40. package/dist/src/connection/websocket/WebsocketConnector.d.ts +2 -7
  41. package/dist/src/connection/websocket/WebsocketConnector.js +32 -38
  42. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  43. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +3 -2
  44. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -10
  45. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
  46. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +3 -6
  47. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +0 -3
  48. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
  49. package/dist/src/connection/websocket/WebsocketServer.d.ts +1 -4
  50. package/dist/src/connection/websocket/WebsocketServer.js +11 -12
  51. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
  52. package/dist/src/dht/DhtNode.d.ts +10 -13
  53. package/dist/src/dht/DhtNode.js +39 -52
  54. package/dist/src/dht/DhtNode.js.map +1 -1
  55. package/dist/src/dht/DhtNodeRpcLocal.d.ts +0 -1
  56. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  57. package/dist/src/dht/DhtNodeRpcRemote.d.ts +7 -7
  58. package/dist/src/dht/DhtNodeRpcRemote.js +8 -7
  59. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
  60. package/dist/src/dht/ExternalApiRpcLocal.d.ts +5 -4
  61. package/dist/src/dht/ExternalApiRpcLocal.js +3 -2
  62. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
  63. package/dist/src/dht/ExternalApiRpcRemote.d.ts +2 -2
  64. package/dist/src/dht/ExternalApiRpcRemote.js +2 -0
  65. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  66. package/dist/src/dht/PeerManager.d.ts +13 -14
  67. package/dist/src/dht/PeerManager.js +45 -60
  68. package/dist/src/dht/PeerManager.js.map +1 -1
  69. package/dist/src/dht/contact/Contact.d.ts +2 -2
  70. package/dist/src/dht/contact/Contact.js +2 -2
  71. package/dist/src/dht/contact/Contact.js.map +1 -1
  72. package/dist/src/dht/contact/ContactList.d.ts +7 -7
  73. package/dist/src/dht/contact/ContactList.js +3 -3
  74. package/dist/src/dht/contact/ContactList.js.map +1 -1
  75. package/dist/src/dht/contact/RandomContactList.d.ts +4 -4
  76. package/dist/src/dht/contact/RandomContactList.js +12 -11
  77. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  78. package/dist/src/dht/contact/RpcRemote.d.ts +7 -4
  79. package/dist/src/dht/contact/RpcRemote.js +5 -2
  80. package/dist/src/dht/contact/RpcRemote.js.map +1 -1
  81. package/dist/src/dht/contact/SortedContactList.d.ts +13 -13
  82. package/dist/src/dht/contact/SortedContactList.js +33 -29
  83. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  84. package/dist/src/dht/discovery/DiscoverySession.d.ts +2 -4
  85. package/dist/src/dht/discovery/DiscoverySession.js +19 -20
  86. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  87. package/dist/src/dht/discovery/PeerDiscovery.d.ts +2 -5
  88. package/dist/src/dht/discovery/PeerDiscovery.js +12 -20
  89. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  90. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +36 -0
  91. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +165 -0
  92. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +1 -0
  93. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.d.ts +14 -0
  94. package/dist/src/dht/{find/FindRpcLocal.js → recursive-operation/RecursiveOperationRpcLocal.js} +7 -7
  95. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +1 -0
  96. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.d.ts +6 -0
  97. package/dist/src/dht/{routing/FindRpcRemote.js → recursive-operation/RecursiveOperationRpcRemote.js} +11 -11
  98. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +1 -0
  99. package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +42 -0
  100. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +182 -0
  101. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +1 -0
  102. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.d.ts +12 -0
  103. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js +17 -0
  104. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js.map +1 -0
  105. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.d.ts +6 -0
  106. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js +21 -0
  107. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js.map +1 -0
  108. package/dist/src/dht/routing/Router.d.ts +4 -19
  109. package/dist/src/dht/routing/Router.js +41 -33
  110. package/dist/src/dht/routing/Router.js.map +1 -1
  111. package/dist/src/dht/routing/RouterRpcLocal.js +6 -5
  112. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
  113. package/dist/src/dht/routing/RouterRpcRemote.d.ts +2 -2
  114. package/dist/src/dht/routing/RouterRpcRemote.js +7 -7
  115. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  116. package/dist/src/dht/routing/RoutingSession.d.ts +20 -16
  117. package/dist/src/dht/routing/RoutingSession.js +37 -45
  118. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  119. package/dist/src/dht/store/LocalDataStore.d.ts +11 -13
  120. package/dist/src/dht/store/LocalDataStore.js +36 -56
  121. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  122. package/dist/src/dht/store/StoreManager.d.ts +33 -0
  123. package/dist/src/dht/store/StoreManager.js +186 -0
  124. package/dist/src/dht/store/StoreManager.js.map +1 -0
  125. package/dist/src/dht/store/StoreRpcLocal.d.ts +8 -40
  126. package/dist/src/dht/store/StoreRpcLocal.js +13 -229
  127. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  128. package/dist/src/dht/store/StoreRpcRemote.d.ts +5 -5
  129. package/dist/src/dht/store/StoreRpcRemote.js +4 -5
  130. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
  131. package/dist/src/exports.d.ts +2 -0
  132. package/dist/src/exports.js.map +1 -1
  133. package/dist/src/helpers/MapWithTtl.d.ts +14 -0
  134. package/dist/src/helpers/MapWithTtl.js +59 -0
  135. package/dist/src/helpers/MapWithTtl.js.map +1 -0
  136. package/dist/src/helpers/PeerID.d.ts +2 -0
  137. package/dist/src/helpers/PeerID.js +4 -0
  138. package/dist/src/helpers/PeerID.js.map +1 -1
  139. package/dist/src/helpers/nodeId.d.ts +5 -0
  140. package/dist/src/helpers/nodeId.js +18 -1
  141. package/dist/src/helpers/nodeId.js.map +1 -1
  142. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +2 -1
  143. package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -1
  144. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  145. package/dist/src/helpers/protoClasses.js +2 -3
  146. package/dist/src/helpers/protoClasses.js.map +1 -1
  147. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +21 -22
  148. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +18 -18
  149. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  150. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +36 -60
  151. package/dist/src/proto/packages/dht/protos/DhtRpc.js +34 -53
  152. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  153. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +11 -12
  154. package/dist/src/rpc-protocol/DhtCallContext.d.ts +2 -1
  155. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
  156. package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +2 -1
  157. package/dist/src/transport/ITransport.d.ts +9 -1
  158. package/dist/src/transport/ITransport.js +5 -0
  159. package/dist/src/transport/ITransport.js.map +1 -1
  160. package/dist/src/transport/ListeningRpcCommunicator.js +1 -1
  161. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  162. package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
  163. package/dist/src/transport/RoutingRpcCommunicator.js +16 -11
  164. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  165. package/jest.config.js +4 -1
  166. package/karma-setup.js +2 -0
  167. package/karma.config.js +11 -7
  168. package/package.json +6 -7
  169. package/protos/DhtRpc.proto +17 -23
  170. package/src/connection/ConnectionLockHandler.ts +15 -15
  171. package/src/connection/ConnectionLockRpcLocal.ts +8 -9
  172. package/src/connection/ConnectionLockRpcRemote.ts +7 -16
  173. package/src/connection/ConnectionManager.ts +58 -55
  174. package/src/connection/ConnectorFacade.ts +3 -0
  175. package/src/connection/ManagedConnection.ts +12 -30
  176. package/src/connection/connectivityChecker.ts +1 -0
  177. package/src/connection/simulator/Simulator.ts +5 -36
  178. package/src/connection/simulator/SimulatorConnector.ts +8 -8
  179. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -3
  180. package/src/connection/webrtc/NodeWebrtcConnection.ts +3 -4
  181. package/src/connection/webrtc/WebrtcConnector.ts +11 -13
  182. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +16 -16
  183. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +3 -13
  184. package/src/connection/websocket/AutoCertifierClientFacade.ts +4 -6
  185. package/src/connection/websocket/ClientWebsocket.ts +1 -0
  186. package/src/connection/websocket/WebsocketConnector.ts +43 -56
  187. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +11 -13
  188. package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +4 -15
  189. package/src/connection/websocket/WebsocketServer.ts +14 -17
  190. package/src/dht/DhtNode.ts +67 -69
  191. package/src/dht/DhtNodeRpcLocal.ts +0 -1
  192. package/src/dht/DhtNodeRpcRemote.ts +13 -13
  193. package/src/dht/ExternalApiRpcLocal.ts +16 -6
  194. package/src/dht/ExternalApiRpcRemote.ts +5 -3
  195. package/src/dht/PeerManager.ts +73 -90
  196. package/src/dht/contact/Contact.ts +5 -4
  197. package/src/dht/contact/ContactList.ts +9 -9
  198. package/src/dht/contact/RandomContactList.ts +14 -14
  199. package/src/dht/contact/RpcRemote.ts +10 -7
  200. package/src/dht/contact/SortedContactList.ts +48 -45
  201. package/src/dht/discovery/DiscoverySession.ts +25 -25
  202. package/src/dht/discovery/PeerDiscovery.ts +16 -37
  203. package/src/dht/recursive-operation/RecursiveOperationManager.ts +240 -0
  204. package/src/dht/{find/FindRpcLocal.ts → recursive-operation/RecursiveOperationRpcLocal.ts} +9 -9
  205. package/src/dht/{routing/FindRpcRemote.ts → recursive-operation/RecursiveOperationRpcRemote.ts} +10 -10
  206. package/src/dht/recursive-operation/RecursiveOperationSession.ts +224 -0
  207. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +25 -0
  208. package/src/dht/{find/FindSessionRpcRemote.ts → recursive-operation/RecursiveOperationSessionRpcRemote.ts} +8 -8
  209. package/src/dht/routing/Router.ts +45 -64
  210. package/src/dht/routing/RouterRpcLocal.ts +7 -6
  211. package/src/dht/routing/RouterRpcRemote.ts +9 -10
  212. package/src/dht/routing/RoutingSession.ts +59 -68
  213. package/src/dht/store/LocalDataStore.ts +47 -66
  214. package/src/dht/store/StoreManager.ts +217 -0
  215. package/src/dht/store/StoreRpcLocal.ts +26 -302
  216. package/src/dht/store/StoreRpcRemote.ts +9 -11
  217. package/src/exports.ts +2 -0
  218. package/src/helpers/MapWithTtl.ts +71 -0
  219. package/src/helpers/PeerID.ts +5 -0
  220. package/src/helpers/nodeId.ts +20 -0
  221. package/src/helpers/peerIdFromPeerDescriptor.ts +5 -3
  222. package/src/helpers/protoClasses.ts +4 -6
  223. package/src/proto/packages/dht/protos/DhtRpc.client.ts +31 -32
  224. package/src/proto/packages/dht/protos/DhtRpc.server.ts +11 -12
  225. package/src/proto/packages/dht/protos/DhtRpc.ts +49 -80
  226. package/src/rpc-protocol/DhtCallContext.ts +2 -1
  227. package/src/rpc-protocol/DhtRpcOptions.ts +2 -1
  228. package/src/transport/ITransport.ts +10 -1
  229. package/src/transport/ListeningRpcCommunicator.ts +1 -1
  230. package/src/transport/RoutingRpcCommunicator.ts +18 -12
  231. package/test/benchmark/Find.test.ts +8 -21
  232. package/test/benchmark/KademliaCorrectness.test.ts +11 -20
  233. package/test/benchmark/SortedContactListBenchmark.test.ts +9 -9
  234. package/test/benchmark/kademlia-simulation/Contact.ts +9 -8
  235. package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +2 -2
  236. package/test/benchmark/kademlia-simulation/SimulationNode.ts +17 -17
  237. package/test/end-to-end/Layer0-Layer1.test.ts +10 -14
  238. package/test/end-to-end/Layer0.test.ts +15 -18
  239. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +7 -9
  240. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -10
  241. package/test/end-to-end/Layer0Webrtc.test.ts +5 -6
  242. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -16
  243. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +6 -13
  244. package/test/end-to-end/WebsocketConnectionRequest.test.ts +5 -6
  245. package/test/end-to-end/memory-leak.test.ts +6 -8
  246. package/test/integration/ConnectionLocking.test.ts +6 -13
  247. package/test/integration/ConnectionManager.test.ts +26 -43
  248. package/test/integration/DhtJoinPeerDiscovery.test.ts +5 -10
  249. package/test/integration/DhtNodeExternalAPI.test.ts +16 -22
  250. package/test/integration/DhtNodeRpcRemote.test.ts +13 -22
  251. package/test/integration/DhtRpc.test.ts +13 -18
  252. package/test/integration/Find.test.ts +10 -10
  253. package/test/integration/Layer1-scale.test.ts +17 -28
  254. package/test/integration/Mock-Layer1-Layer0.test.ts +25 -43
  255. package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
  256. package/test/integration/ReplicateData.test.ts +28 -30
  257. package/test/integration/RouteMessage.test.ts +30 -27
  258. package/test/integration/RouterRpcRemote.test.ts +12 -18
  259. package/test/integration/RpcErrors.test.ts +8 -21
  260. package/test/integration/ScaleDownDht.test.ts +11 -10
  261. package/test/integration/SimultaneousConnections.test.ts +43 -67
  262. package/test/integration/Store.test.ts +23 -36
  263. package/test/integration/StoreAndDelete.test.ts +30 -50
  264. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +16 -37
  265. package/test/integration/StoreRpcRemote.test.ts +20 -30
  266. package/test/integration/WebrtcConnectionManagement.test.ts +3 -13
  267. package/test/integration/WebrtcConnectorRpc.test.ts +3 -9
  268. package/test/integration/WebsocketConnectionManagement.test.ts +7 -10
  269. package/test/integration/WebsocketConnectorRpc.test.ts +8 -17
  270. package/test/unit/ConnectivityHelpers.test.ts +9 -17
  271. package/test/unit/DuplicateDetector.test.ts +7 -4
  272. package/test/unit/LocalDataStore.test.ts +66 -77
  273. package/test/unit/PeerManager.test.ts +31 -0
  274. package/test/unit/RandomContactList.test.ts +13 -8
  275. package/test/unit/{Finder.test.ts → RecursiveOperationManager.test.ts} +38 -43
  276. package/test/unit/RecursiveOperationSession.test.ts +68 -0
  277. package/test/unit/Router.test.ts +15 -22
  278. package/test/unit/RoutingSession.test.ts +23 -25
  279. package/test/unit/SortedContactList.test.ts +41 -26
  280. package/test/unit/StoreManager.test.ts +132 -0
  281. package/test/unit/WebsocketConnector.test.ts +27 -35
  282. package/test/unit/customMatchers.test.ts +16 -0
  283. package/test/utils/FakeTransport.ts +44 -0
  284. package/test/utils/customMatchers.ts +70 -0
  285. package/test/utils/mock/MockRpcCommunicator.ts +7 -0
  286. package/test/utils/mock/Router.ts +3 -2
  287. package/test/utils/mock/mockDataEntry.ts +36 -0
  288. package/test/utils/utils.ts +49 -87
  289. package/dist/src/dht/find/FindRpcLocal.d.ts +0 -14
  290. package/dist/src/dht/find/FindRpcLocal.js.map +0 -1
  291. package/dist/src/dht/find/FindSession.d.ts +0 -44
  292. package/dist/src/dht/find/FindSession.js +0 -150
  293. package/dist/src/dht/find/FindSession.js.map +0 -1
  294. package/dist/src/dht/find/FindSessionRpcLocal.d.ts +0 -12
  295. package/dist/src/dht/find/FindSessionRpcLocal.js +0 -17
  296. package/dist/src/dht/find/FindSessionRpcLocal.js.map +0 -1
  297. package/dist/src/dht/find/FindSessionRpcRemote.d.ts +0 -6
  298. package/dist/src/dht/find/FindSessionRpcRemote.js +0 -21
  299. package/dist/src/dht/find/FindSessionRpcRemote.js.map +0 -1
  300. package/dist/src/dht/find/Finder.d.ts +0 -49
  301. package/dist/src/dht/find/Finder.js +0 -197
  302. package/dist/src/dht/find/Finder.js.map +0 -1
  303. package/dist/src/dht/routing/FindRpcRemote.d.ts +0 -6
  304. package/dist/src/dht/routing/FindRpcRemote.js.map +0 -1
  305. package/src/dht/find/FindSession.ts +0 -183
  306. package/src/dht/find/FindSessionRpcLocal.ts +0 -25
  307. package/src/dht/find/Finder.ts +0 -295
@@ -9,8 +9,7 @@ import {
9
9
  ConnectivityResponse,
10
10
  HandshakeError,
11
11
  PeerDescriptor,
12
- WebsocketConnectionRequest,
13
- WebsocketConnectionResponse
12
+ WebsocketConnectionRequest
14
13
  } from '../../proto/packages/dht/protos/DhtRpc'
15
14
  import { WebsocketConnectorRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
16
15
  import { Logger, binaryToHex, wait } from '@streamr/utils'
@@ -18,11 +17,9 @@ import { ManagedConnection } from '../ManagedConnection'
18
17
  import { WebsocketServer } from './WebsocketServer'
19
18
  import { sendConnectivityRequest } from '../connectivityChecker'
20
19
  import { NatType, PortRange, TlsCertificate } from '../ConnectionManager'
21
- import { PeerIDKey } from '../../helpers/PeerID'
22
20
  import { ServerWebsocket } from './ServerWebsocket'
23
- import { toProtoRpcClient } from '@streamr/proto-rpc'
24
21
  import { Handshaker } from '../Handshaker'
25
- import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
22
+ import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
26
23
  import { ParsedUrlQuery } from 'querystring'
27
24
  import { range, sample } from 'lodash'
28
25
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
@@ -31,6 +28,8 @@ import { WebsocketServerStartError } from '../../helpers/errors'
31
28
  import { AutoCertifierClientFacade } from './AutoCertifierClientFacade'
32
29
  import { attachConnectivityRequestHandler } from '../connectivityRequestHandler'
33
30
  import * as Err from '../../helpers/errors'
31
+ import { Empty } from '../../proto/google/protobuf/empty'
32
+ import { NodeID } from '../../helpers/nodeId'
34
33
 
35
34
  const logger = new Logger(module)
36
35
 
@@ -45,6 +44,7 @@ const ENTRY_POINT_CONNECTION_ATTEMPTS = 5
45
44
  export interface WebsocketConnectorConfig {
46
45
  transport: ITransport
47
46
  onNewConnection: (connection: ManagedConnection) => boolean
47
+ hasConnection: (peerDescriptor: PeerDescriptor) => boolean
48
48
  portRange?: PortRange
49
49
  maxMessageSize?: number
50
50
  host?: string
@@ -61,38 +61,26 @@ export class WebsocketConnector {
61
61
  private static readonly WEBSOCKET_CONNECTOR_SERVICE_ID = 'system/websocket-connector'
62
62
  private readonly rpcCommunicator: ListeningRpcCommunicator
63
63
  private readonly websocketServer?: WebsocketServer
64
- private readonly ongoingConnectRequests: Map<PeerIDKey, ManagedConnection> = new Map()
65
- private onNewConnection: (connection: ManagedConnection) => boolean
64
+ private readonly ongoingConnectRequests: Map<NodeID, ManagedConnection> = new Map()
66
65
  private host?: string
67
- private readonly entrypoints?: PeerDescriptor[]
68
- private readonly tlsCertificate?: TlsCertificate
69
- private readonly autoCertifierTransport: ITransport
70
- private readonly autoCertifierUrl: string
71
- private readonly autoCertifierConfigFile: string
72
- private readonly serverEnableTls: boolean
73
66
  private autoCertifierClient?: AutoCertifierClientFacade
74
67
  private selectedPort?: number
75
68
  private localPeerDescriptor?: PeerDescriptor
76
- private connectingConnections: Map<PeerIDKey, ManagedConnection> = new Map()
69
+ private connectingConnections: Map<NodeID, ManagedConnection> = new Map()
77
70
  private abortController = new AbortController()
71
+ private readonly config: WebsocketConnectorConfig
78
72
 
79
73
  constructor(config: WebsocketConnectorConfig) {
74
+ this.config = config
80
75
  this.websocketServer = config.portRange ? new WebsocketServer({
81
76
  portRange: config.portRange,
82
77
  tlsCertificate: config.tlsCertificate,
83
78
  maxMessageSize: config.maxMessageSize,
84
79
  enableTls: config.serverEnableTls
85
80
  }) : undefined
86
- this.onNewConnection = config.onNewConnection
87
81
  this.host = config.host
88
- this.entrypoints = config.entrypoints
89
- this.tlsCertificate = config.tlsCertificate
90
- this.autoCertifierTransport = config.autoCertifierTransport
91
- this.autoCertifierUrl = config.autoCertifierUrl
92
- this.autoCertifierConfigFile = config.autoCertifierConfigFile
93
- this.serverEnableTls = config.serverEnableTls
94
82
  this.rpcCommunicator = new ListeningRpcCommunicator(WebsocketConnector.WEBSOCKET_CONNECTOR_SERVICE_ID, config.transport, {
95
- rpcRequestTimeout: 15000
83
+ rpcRequestTimeout: 15000 // TODO use config option or named constant?
96
84
  })
97
85
  this.registerLocalRpcMethods(config)
98
86
  }
@@ -101,10 +89,11 @@ export class WebsocketConnector {
101
89
  const rpcLocal = new WebsocketConnectorRpcLocal({
102
90
  connect: (targetPeerDescriptor: PeerDescriptor) => this.connect(targetPeerDescriptor),
103
91
  hasConnection: (targetPeerDescriptor: PeerDescriptor): boolean => {
104
- const peerKey = keyFromPeerDescriptor(targetPeerDescriptor)
105
- if (this.connectingConnections.has(peerKey)
106
- || this.connectingConnections.has(peerKey)
107
- || this.ongoingConnectRequests.has(peerKey)
92
+ const nodeId = getNodeIdFromPeerDescriptor(targetPeerDescriptor)
93
+ if (this.connectingConnections.has(nodeId)
94
+ || this.connectingConnections.has(nodeId)
95
+ || this.ongoingConnectRequests.has(nodeId)
96
+ || config.hasConnection(targetPeerDescriptor)
108
97
  ) {
109
98
  return true
110
99
  } else {
@@ -114,15 +103,14 @@ export class WebsocketConnector {
114
103
  onNewConnection: (connection: ManagedConnection) => config.onNewConnection(connection),
115
104
  abortSignal: this.abortController.signal
116
105
  })
117
- this.rpcCommunicator.registerRpcMethod(
106
+ this.rpcCommunicator.registerRpcNotification(
118
107
  WebsocketConnectionRequest,
119
- WebsocketConnectionResponse,
120
108
  'requestConnection',
121
- async (req: WebsocketConnectionRequest, context: ServerCallContext): Promise<WebsocketConnectionResponse> => {
109
+ async (req: WebsocketConnectionRequest, context: ServerCallContext): Promise<Empty> => {
122
110
  if (!this.abortController.signal.aborted) {
123
111
  return rpcLocal.requestConnection(req, context)
124
112
  } else {
125
- return { accepted: false }
113
+ return {}
126
114
  }
127
115
  }
128
116
  )
@@ -137,9 +125,9 @@ export class WebsocketConnector {
137
125
 
138
126
  public async autoCertify(): Promise<void> {
139
127
  this.autoCertifierClient = new AutoCertifierClientFacade({
140
- configFile: this.autoCertifierConfigFile,
141
- transport: this.autoCertifierTransport,
142
- url: this.autoCertifierUrl,
128
+ configFile: this.config.autoCertifierConfigFile,
129
+ transport: this.config.autoCertifierTransport,
130
+ url: this.config.autoCertifierUrl,
143
131
  wsServerPort: this.selectedPort!,
144
132
  setHost: (hostName: string) => this.setHost(hostName),
145
133
  updateCertificate: (certificate: string, privateKey: string) => this.websocketServer!.updateCertificate(certificate, privateKey)
@@ -183,17 +171,17 @@ export class WebsocketConnector {
183
171
  return noServerConnectivityResponse
184
172
  }
185
173
  for (const reattempt of range(ENTRY_POINT_CONNECTION_ATTEMPTS)) {
186
- const entryPoint = sample(this.entrypoints)!
174
+ const entryPoint = sample(this.config.entrypoints)!
187
175
  try {
188
176
  if (!this.websocketServer) {
189
177
  return noServerConnectivityResponse
190
178
  } else {
191
- if (!this.entrypoints || this.entrypoints.length === 0) {
179
+ if (!this.config.entrypoints || this.config.entrypoints.length === 0) {
192
180
  // return connectivity info given in config
193
181
  const preconfiguredConnectivityResponse: ConnectivityResponse = {
194
182
  host: this.host!,
195
183
  natType: NatType.OPEN_INTERNET,
196
- websocket: { host: this.host!, port: this.selectedPort!, tls: this.tlsCertificate !== undefined }
184
+ websocket: { host: this.host!, port: this.selectedPort!, tls: this.config.tlsCertificate !== undefined }
197
185
  }
198
186
  return preconfiguredConnectivityResponse
199
187
  } else {
@@ -201,7 +189,7 @@ export class WebsocketConnector {
201
189
  const connectivityRequest = {
202
190
  port: this.selectedPort!,
203
191
  host: this.host,
204
- tls: this.serverEnableTls,
192
+ tls: this.config.serverEnableTls,
205
193
  selfSigned
206
194
  }
207
195
  if (!this.abortController.signal.aborted) {
@@ -229,8 +217,8 @@ export class WebsocketConnector {
229
217
  }
230
218
 
231
219
  public connect(targetPeerDescriptor: PeerDescriptor): ManagedConnection {
232
- const peerKey = keyFromPeerDescriptor(targetPeerDescriptor)
233
- const existingConnection = this.connectingConnections.get(peerKey)
220
+ const nodeId = getNodeIdFromPeerDescriptor(targetPeerDescriptor)
221
+ const existingConnection = this.connectingConnections.get(nodeId)
234
222
  if (existingConnection) {
235
223
  return existingConnection
236
224
  }
@@ -251,11 +239,11 @@ export class WebsocketConnector {
251
239
  )
252
240
  managedConnection.setRemotePeerDescriptor(targetPeerDescriptor)
253
241
 
254
- this.connectingConnections.set(keyFromPeerDescriptor(targetPeerDescriptor), managedConnection)
242
+ this.connectingConnections.set(getNodeIdFromPeerDescriptor(targetPeerDescriptor), managedConnection)
255
243
 
256
244
  const delFunc = () => {
257
- if (this.connectingConnections.has(peerKey)) {
258
- this.connectingConnections.delete(peerKey)
245
+ if (this.connectingConnections.has(nodeId)) {
246
+ this.connectingConnections.delete(nodeId)
259
247
  }
260
248
  socket.off('disconnected', delFunc)
261
249
  managedConnection.off('handshakeCompleted', delFunc)
@@ -274,13 +262,15 @@ export class WebsocketConnector {
274
262
  const remoteConnector = new WebsocketConnectorRpcRemote(
275
263
  localPeerDescriptor,
276
264
  targetPeerDescriptor,
277
- toProtoRpcClient(new WebsocketConnectorRpcClient(this.rpcCommunicator.getRpcClientTransport()))
265
+ 'DUMMY',
266
+ this.rpcCommunicator,
267
+ WebsocketConnectorRpcClient
278
268
  )
279
- remoteConnector.requestConnection().then((_response: WebsocketConnectionResponse) => {
280
- logger.trace('Sent WebsocketConnectionRequest request to peer', { targetPeerDescriptor })
269
+ remoteConnector.requestConnection().then(() => {
270
+ logger.trace('Sent WebsocketConnectionRequest notification to peer', { targetPeerDescriptor })
281
271
  return
282
272
  }, (err) => {
283
- logger.debug('Failed to send WebsocketConnectionRequest request to peer of failed to get the response ', {
273
+ logger.debug('Failed to send WebsocketConnectionRequest notification to peer ', {
284
274
  error: err, targetPeerDescriptor
285
275
  })
286
276
  })
@@ -292,9 +282,9 @@ export class WebsocketConnector {
292
282
  undefined,
293
283
  targetPeerDescriptor
294
284
  )
295
- managedConnection.on('disconnected', () => this.ongoingConnectRequests.delete(keyFromPeerDescriptor(targetPeerDescriptor)))
285
+ managedConnection.on('disconnected', () => this.ongoingConnectRequests.delete(getNodeIdFromPeerDescriptor(targetPeerDescriptor)))
296
286
  managedConnection.setRemotePeerDescriptor(targetPeerDescriptor)
297
- this.ongoingConnectRequests.set(keyFromPeerDescriptor(targetPeerDescriptor), managedConnection)
287
+ this.ongoingConnectRequests.set(getNodeIdFromPeerDescriptor(targetPeerDescriptor), managedConnection)
298
288
  return managedConnection
299
289
  }
300
290
 
@@ -303,13 +293,12 @@ export class WebsocketConnector {
303
293
  serverWebsocket: IConnection,
304
294
  targetPeerDescriptor?: PeerDescriptor
305
295
  ) {
306
- const peerId = peerIdFromPeerDescriptor(sourcePeerDescriptor)
307
-
308
- if (this.ongoingConnectRequests.has(peerId.toKey())) {
309
- const ongoingConnectRequest = this.ongoingConnectRequests.get(peerId.toKey())!
296
+ const nodeId = getNodeIdFromPeerDescriptor(sourcePeerDescriptor)
297
+ if (this.ongoingConnectRequests.has(nodeId)) {
298
+ const ongoingConnectRequest = this.ongoingConnectRequests.get(nodeId)!
310
299
  ongoingConnectRequest.attachImplementation(serverWebsocket)
311
300
  ongoingConnectRequest.acceptHandshake()
312
- this.ongoingConnectRequests.delete(peerId.toKey())
301
+ this.ongoingConnectRequests.delete(nodeId)
313
302
  } else {
314
303
  const managedConnection = new ManagedConnection(
315
304
  this.localPeerDescriptor!,
@@ -318,12 +307,10 @@ export class WebsocketConnector {
318
307
  serverWebsocket,
319
308
  targetPeerDescriptor
320
309
  )
321
-
322
310
  managedConnection.setRemotePeerDescriptor(sourcePeerDescriptor)
323
-
324
311
  if (targetPeerDescriptor && !areEqualPeerDescriptors(this.localPeerDescriptor!, targetPeerDescriptor)) {
325
312
  managedConnection.rejectHandshake(HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR)
326
- } else if (this.onNewConnection(managedConnection)) {
313
+ } else if (this.config.onNewConnection(managedConnection)) {
327
314
  managedConnection.acceptHandshake()
328
315
  } else {
329
316
  managedConnection.rejectHandshake(HandshakeError.DUPLICATE_CONNECTION)
@@ -1,12 +1,12 @@
1
1
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
2
2
  import {
3
3
  PeerDescriptor,
4
- WebsocketConnectionRequest,
5
- WebsocketConnectionResponse
4
+ WebsocketConnectionRequest
6
5
  } from '../../proto/packages/dht/protos/DhtRpc'
7
6
  import { IWebsocketConnectorRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
8
7
  import { DhtCallContext } from '../../rpc-protocol/DhtCallContext'
9
8
  import { ManagedConnection } from '../ManagedConnection'
9
+ import { Empty } from '../../proto/google/protobuf/empty'
10
10
 
11
11
  interface WebsocketConnectorRpcLocalConfig {
12
12
  connect: (targetPeerDescriptor: PeerDescriptor) => ManagedConnection
@@ -23,17 +23,15 @@ export class WebsocketConnectorRpcLocal implements IWebsocketConnectorRpc {
23
23
  this.config = config
24
24
  }
25
25
 
26
- public async requestConnection(_request: WebsocketConnectionRequest, context: ServerCallContext): Promise<WebsocketConnectionResponse> {
26
+ public async requestConnection(_request: WebsocketConnectionRequest, context: ServerCallContext): Promise<Empty> {
27
+ if (this.config.abortSignal.aborted) {
28
+ return {}
29
+ }
27
30
  const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
28
- setImmediate(() => {
29
- if (this.config.abortSignal.aborted) {
30
- return
31
- }
32
- if (!this.config.hasConnection(senderPeerDescriptor)) {
33
- const connection = this.config.connect(senderPeerDescriptor)
34
- this.config.onNewConnection(connection)
35
- }
36
- })
37
- return { accepted: true }
31
+ if (!this.config.hasConnection(senderPeerDescriptor)) {
32
+ const connection = this.config.connect(senderPeerDescriptor)
33
+ this.config.onNewConnection(connection)
34
+ }
35
+ return {}
38
36
  }
39
37
  }
@@ -1,27 +1,16 @@
1
1
  import {
2
- PeerDescriptor,
3
- WebsocketConnectionRequest,
4
- WebsocketConnectionResponse
2
+ WebsocketConnectionRequest
5
3
  } from '../../proto/packages/dht/protos/DhtRpc'
6
- import { IWebsocketConnectorRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
7
4
  import { Logger } from '@streamr/utils'
8
- import { ProtoRpcClient } from '@streamr/proto-rpc'
9
5
  import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
10
6
  import { RpcRemote } from '../../dht/contact/RpcRemote'
7
+ import { WebsocketConnectorRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
11
8
 
12
9
  const logger = new Logger(module)
13
10
 
14
- export class WebsocketConnectorRpcRemote extends RpcRemote<IWebsocketConnectorRpcClient> {
11
+ export class WebsocketConnectorRpcRemote extends RpcRemote<WebsocketConnectorRpcClient> {
15
12
 
16
- constructor(
17
- localPeerDescriptor: PeerDescriptor,
18
- remotePeerDescriptor: PeerDescriptor,
19
- client: ProtoRpcClient<IWebsocketConnectorRpcClient>
20
- ) {
21
- super(localPeerDescriptor, remotePeerDescriptor, 'DUMMY', client)
22
- }
23
-
24
- async requestConnection(): Promise<WebsocketConnectionResponse> {
13
+ async requestConnection(): Promise<void> {
25
14
  logger.trace(`Requesting WebSocket connection from ${getNodeIdFromPeerDescriptor(this.getLocalPeerDescriptor())}`)
26
15
  const request: WebsocketConnectionRequest = {}
27
16
  const options = this.formDhtRpcOptions()
@@ -33,24 +33,18 @@ export class WebsocketServer extends EventEmitter<ConnectionSourceEvents> {
33
33
  private httpServer?: HttpServer | HttpsServer
34
34
  private wsServer?: WsServer
35
35
  private readonly abortController = new AbortController()
36
- private readonly portRange: PortRange
37
- private readonly tlsCertificate?: TlsCertificate
38
- private readonly enableTls: boolean
39
- private readonly maxMessageSize: number
36
+ private readonly config: WebsocketServerConfig
40
37
 
41
38
  constructor(config: WebsocketServerConfig) {
42
39
  super()
43
- this.portRange = config.portRange
44
- this.enableTls = config.enableTls
45
- this.tlsCertificate = config.tlsCertificate
46
- this.maxMessageSize = config.maxMessageSize ?? 1048576
40
+ this.config = config
47
41
  }
48
42
 
49
43
  public async start(): Promise<number> {
50
- const ports = range(this.portRange.min, this.portRange.max + 1)
44
+ const ports = range(this.config.portRange.min, this.config.portRange.max + 1)
51
45
  for (const port of ports) {
52
46
  try {
53
- await asAbortable(this.startServer(port, this.enableTls), this.abortController.signal)
47
+ await asAbortable(this.startServer(port, this.config.enableTls), this.abortController.signal)
54
48
  return port
55
49
  } catch (err) {
56
50
  if (err.originalError?.code === 'EADDRINUSE') {
@@ -60,7 +54,9 @@ export class WebsocketServer extends EventEmitter<ConnectionSourceEvents> {
60
54
  }
61
55
  }
62
56
  }
63
- throw new WebsocketServerStartError(`Failed to start WebSocket server on any port in range: ${this.portRange.min}-${this.portRange.min}`)
57
+ throw new WebsocketServerStartError(
58
+ `Failed to start WebSocket server on any port in range: ${this.config.portRange.min}-${this.config.portRange.min}`
59
+ )
64
60
  }
65
61
 
66
62
  // If tlsCertificate has been given the tls boolean is ignored
@@ -72,14 +68,15 @@ export class WebsocketServer extends EventEmitter<ConnectionSourceEvents> {
72
68
  response.end()
73
69
  }
74
70
  return new Promise((resolve, reject) => {
75
- if (this.tlsCertificate) {
71
+ if (this.config.tlsCertificate) {
76
72
  this.httpServer = createHttpsServer({
77
- key: fs.readFileSync(this.tlsCertificate.privateKeyFileName),
78
- cert: fs.readFileSync(this.tlsCertificate.certFileName)
73
+ key: fs.readFileSync(this.config.tlsCertificate.privateKeyFileName),
74
+ cert: fs.readFileSync(this.config.tlsCertificate.certFileName)
79
75
  }, requestListener)
80
76
  } else if (!tls) {
81
77
  this.httpServer = createHttpServer(requestListener)
82
78
  } else {
79
+ // TODO use config option or named constant?
83
80
  const certificate = createSelfSignedCertificate('streamr-self-signed-' + new UUID().toString(), 1000)
84
81
  this.httpServer = createHttpsServer({
85
82
  key: certificate.serverKey,
@@ -159,19 +156,19 @@ export class WebsocketServer extends EventEmitter<ConnectionSourceEvents> {
159
156
  }
160
157
 
161
158
  private createWsServer(httpServer: HttpServer | HttpsServer): WsServer {
159
+ const maxReceivedMessageSize = this.config.maxMessageSize ?? 1048576
162
160
  // Use the real nodejs WebSocket server in Electron tests
163
-
164
161
  if (typeof NodeJsWsServer !== 'undefined') {
165
162
  return new NodeJsWsServer({
166
163
  httpServer,
167
164
  autoAcceptConnections: false,
168
- maxReceivedMessageSize: this.maxMessageSize
165
+ maxReceivedMessageSize
169
166
  })
170
167
  } else {
171
168
  return this.wsServer = new WsServer({
172
169
  httpServer,
173
170
  autoAcceptConnections: false,
174
- maxReceivedMessageSize: this.maxMessageSize
171
+ maxReceivedMessageSize
175
172
  })
176
173
  }
177
174
  }