@streamr/dht 100.0.0-pretestnet.2 → 100.0.0-pretestnet.4

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 (325) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +7 -8
  2. package/dist/src/connection/ConnectionLockHandler.js +16 -14
  3. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  4. package/dist/src/connection/ConnectionLockRpcLocal.d.ts +20 -0
  5. package/dist/src/connection/ConnectionLockRpcLocal.js +47 -0
  6. package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -0
  7. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +4 -3
  8. package/dist/src/connection/ConnectionLockRpcRemote.js +9 -9
  9. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  10. package/dist/src/connection/ConnectionManager.d.ts +9 -16
  11. package/dist/src/connection/ConnectionManager.js +101 -132
  12. package/dist/src/connection/ConnectionManager.js.map +1 -1
  13. package/dist/src/connection/ConnectivityChecker.d.ts +7 -10
  14. package/dist/src/connection/ConnectivityChecker.js +30 -32
  15. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  16. package/dist/src/connection/ConnectorFacade.d.ts +19 -13
  17. package/dist/src/connection/ConnectorFacade.js +74 -29
  18. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  19. package/dist/src/connection/Handshaker.d.ts +8 -8
  20. package/dist/src/connection/Handshaker.js +30 -33
  21. package/dist/src/connection/Handshaker.js.map +1 -1
  22. package/dist/src/connection/IConnection.d.ts +5 -6
  23. package/dist/src/connection/IConnection.js.map +1 -1
  24. package/dist/src/connection/ManagedConnection.d.ts +9 -13
  25. package/dist/src/connection/ManagedConnection.js +63 -99
  26. package/dist/src/connection/ManagedConnection.js.map +1 -1
  27. package/dist/src/connection/ManagedWebrtcConnection.d.ts +7 -0
  28. package/dist/src/connection/ManagedWebrtcConnection.js +20 -0
  29. package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -0
  30. package/dist/src/connection/{Simulator → simulator}/Simulator.js +3 -3
  31. package/dist/src/connection/{Simulator → simulator}/Simulator.js.map +1 -1
  32. package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.d.ts +3 -4
  33. package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.js +25 -24
  34. package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
  35. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +3 -3
  36. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +17 -18
  37. package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -0
  38. package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.d.ts +1 -1
  39. package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.js +2 -2
  40. package/dist/src/connection/simulator/SimulatorTransport.js.map +1 -0
  41. package/dist/src/connection/{Simulator → simulator}/pings.js.map +1 -1
  42. package/dist/src/connection/{WebRTC/IWebRtcConnection.d.ts → webrtc/IWebrtcConnection.d.ts} +2 -2
  43. package/dist/src/connection/{WebRTC/IWebRtcConnection.js → webrtc/IWebrtcConnection.js} +1 -1
  44. package/dist/src/connection/webrtc/IWebrtcConnection.js.map +1 -0
  45. package/dist/src/connection/{WebRTC/NodeWebRtcConnection.d.ts → webrtc/NodeWebrtcConnection.d.ts} +6 -7
  46. package/dist/src/connection/{WebRTC/NodeWebRtcConnection.js → webrtc/NodeWebrtcConnection.js} +41 -42
  47. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -0
  48. package/dist/src/connection/webrtc/WebrtcConnector.d.ts +38 -0
  49. package/dist/src/connection/webrtc/WebrtcConnector.js +178 -0
  50. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -0
  51. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +26 -0
  52. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +99 -0
  53. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -0
  54. package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.d.ts → webrtc/WebrtcConnectorRpcRemote.d.ts} +4 -4
  55. package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.js → webrtc/WebrtcConnectorRpcRemote.js} +6 -8
  56. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -0
  57. package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.d.ts +1 -1
  58. package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js.map +1 -1
  59. package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +26 -0
  60. package/dist/src/connection/websocket/AutoCertifierClientFacade.js +37 -0
  61. package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -0
  62. package/dist/src/connection/{WebSocket/ClientWebSocket.d.ts → websocket/ClientWebsocket.d.ts} +5 -4
  63. package/dist/src/connection/{WebSocket/ClientWebSocket.js → websocket/ClientWebsocket.js} +23 -16
  64. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -0
  65. package/dist/src/connection/{WebSocket/ServerWebSocket.d.ts → websocket/ServerWebsocket.d.ts} +2 -2
  66. package/dist/src/connection/{WebSocket/ServerWebSocket.js → websocket/ServerWebsocket.js} +25 -27
  67. package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
  68. package/dist/src/connection/websocket/WebsocketConnector.d.ts +53 -0
  69. package/dist/src/connection/websocket/WebsocketConnector.js +242 -0
  70. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -0
  71. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +17 -0
  72. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +26 -0
  73. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -0
  74. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.d.ts → websocket/WebsocketConnectorRpcRemote.d.ts} +3 -3
  75. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js → websocket/WebsocketConnectorRpcRemote.js} +6 -11
  76. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -0
  77. package/dist/src/connection/{WebSocket/WebSocketServer.d.ts → websocket/WebsocketServer.d.ts} +6 -3
  78. package/dist/src/connection/{WebSocket/WebSocketServer.js → websocket/WebsocketServer.js} +39 -19
  79. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -0
  80. package/dist/src/dht/DhtNode.d.ts +11 -19
  81. package/dist/src/dht/DhtNode.js +135 -163
  82. package/dist/src/dht/DhtNode.js.map +1 -1
  83. package/dist/src/dht/DhtNodeRpcLocal.d.ts +22 -0
  84. package/dist/src/dht/DhtNodeRpcLocal.js +42 -0
  85. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -0
  86. package/dist/src/dht/{RemoteDhtNode.d.ts → DhtNodeRpcRemote.d.ts} +5 -3
  87. package/dist/src/dht/{RemoteDhtNode.js → DhtNodeRpcRemote.js} +20 -24
  88. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -0
  89. package/dist/src/dht/ExternalApiRpcLocal.d.ts +16 -0
  90. package/dist/src/dht/ExternalApiRpcLocal.js +30 -0
  91. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -0
  92. package/dist/src/dht/ExternalApiRpcRemote.d.ts +1 -1
  93. package/dist/src/dht/ExternalApiRpcRemote.js +2 -2
  94. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  95. package/dist/src/dht/contact/Remote.d.ts +4 -1
  96. package/dist/src/dht/contact/Remote.js +28 -2
  97. package/dist/src/dht/contact/Remote.js.map +1 -1
  98. package/dist/src/dht/contact/SortedContactList.d.ts +2 -2
  99. package/dist/src/dht/contact/SortedContactList.js +3 -3
  100. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  101. package/dist/src/dht/discovery/DiscoverySession.d.ts +9 -7
  102. package/dist/src/dht/discovery/DiscoverySession.js +9 -9
  103. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  104. package/dist/src/dht/discovery/PeerDiscovery.d.ts +7 -10
  105. package/dist/src/dht/discovery/PeerDiscovery.js +6 -6
  106. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  107. package/dist/src/dht/find/FindRpcLocal.d.ts +14 -0
  108. package/dist/src/dht/find/FindRpcLocal.js +25 -0
  109. package/dist/src/dht/find/FindRpcLocal.js.map +1 -0
  110. package/dist/src/dht/find/{RecursiveFindSession.d.ts → FindSession.d.ts} +12 -13
  111. package/dist/src/dht/find/{RecursiveFindSession.js → FindSession.js} +17 -15
  112. package/dist/src/dht/find/FindSession.js.map +1 -0
  113. package/dist/src/dht/find/FindSessionRpcLocal.d.ts +12 -0
  114. package/dist/src/dht/find/FindSessionRpcLocal.js +17 -0
  115. package/dist/src/dht/find/FindSessionRpcLocal.js.map +1 -0
  116. package/dist/src/dht/find/{RemoteRecursiveFindSession.d.ts → FindSessionRpcRemote.d.ts} +2 -2
  117. package/dist/src/dht/find/{RemoteRecursiveFindSession.js → FindSessionRpcRemote.js} +5 -5
  118. package/dist/src/dht/find/FindSessionRpcRemote.js.map +1 -0
  119. package/dist/src/dht/find/{RecursiveFinder.d.ts → Finder.d.ts} +16 -19
  120. package/dist/src/dht/find/{RecursiveFinder.js → Finder.js} +50 -46
  121. package/dist/src/dht/find/Finder.js.map +1 -0
  122. package/dist/src/dht/routing/FindRpcRemote.d.ts +6 -0
  123. package/dist/src/dht/routing/FindRpcRemote.js +41 -0
  124. package/dist/src/dht/routing/FindRpcRemote.js.map +1 -0
  125. package/dist/src/dht/routing/Router.d.ts +10 -17
  126. package/dist/src/dht/routing/Router.js +50 -93
  127. package/dist/src/dht/routing/Router.js.map +1 -1
  128. package/dist/src/dht/routing/RouterRpcLocal.d.ts +22 -0
  129. package/dist/src/dht/routing/RouterRpcLocal.js +66 -0
  130. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -0
  131. package/dist/src/dht/routing/RouterRpcRemote.d.ts +0 -1
  132. package/dist/src/dht/routing/RouterRpcRemote.js +17 -45
  133. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  134. package/dist/src/dht/routing/RoutingSession.d.ts +17 -8
  135. package/dist/src/dht/routing/RoutingSession.js +124 -131
  136. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  137. package/dist/src/dht/routing/getPreviousPeer.d.ts +2 -0
  138. package/dist/src/dht/routing/getPreviousPeer.js +9 -0
  139. package/dist/src/dht/routing/getPreviousPeer.js.map +1 -0
  140. package/dist/src/dht/store/StoreRpcLocal.d.ts +11 -8
  141. package/dist/src/dht/store/StoreRpcLocal.js +26 -25
  142. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  143. package/dist/src/dht/store/StoreRpcRemote.js +6 -10
  144. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
  145. package/dist/src/exports.d.ts +11 -5
  146. package/dist/src/exports.js +17 -4
  147. package/dist/src/exports.js.map +1 -1
  148. package/dist/src/helpers/Connectivity.d.ts +4 -0
  149. package/dist/src/helpers/Connectivity.js +24 -0
  150. package/dist/src/helpers/Connectivity.js.map +1 -0
  151. package/dist/src/helpers/errors.d.ts +3 -3
  152. package/dist/src/helpers/errors.js +7 -7
  153. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -0
  154. package/dist/src/helpers/peerIdFromPeerDescriptor.js +7 -1
  155. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  156. package/dist/src/helpers/protoClasses.js +3 -3
  157. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +56 -39
  158. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +49 -36
  159. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  160. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +85 -96
  161. package/dist/src/proto/packages/dht/protos/DhtRpc.js +82 -71
  162. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  163. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -21
  164. package/dist/src/rpc-protocol/DhtCallContext.d.ts +0 -1
  165. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
  166. package/dist/src/transport/ITransport.d.ts +5 -6
  167. package/dist/src/transport/ListeningRpcCommunicator.d.ts +2 -1
  168. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  169. package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
  170. package/dist/src/transport/RoutingRpcCommunicator.js +0 -1
  171. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  172. package/dist/src/types/ServiceID.d.ts +1 -0
  173. package/dist/src/types/ServiceID.js +3 -0
  174. package/dist/src/types/ServiceID.js.map +1 -0
  175. package/karma.config.js +4 -4
  176. package/package.json +10 -8
  177. package/protos/DhtRpc.proto +41 -40
  178. package/src/connection/ConnectionLockHandler.ts +19 -17
  179. package/src/connection/ConnectionLockRpcLocal.ts +74 -0
  180. package/src/connection/ConnectionLockRpcRemote.ts +11 -11
  181. package/src/connection/ConnectionManager.ts +88 -130
  182. package/src/connection/ConnectivityChecker.ts +36 -34
  183. package/src/connection/ConnectorFacade.ts +91 -40
  184. package/src/connection/Handshaker.ts +20 -23
  185. package/src/connection/IConnection.ts +5 -6
  186. package/src/connection/ManagedConnection.ts +76 -101
  187. package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +12 -10
  188. package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
  189. package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +27 -27
  190. package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +22 -23
  191. package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
  192. package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +13 -14
  193. package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
  194. package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +38 -40
  195. package/src/connection/webrtc/WebrtcConnector.ts +226 -0
  196. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +132 -0
  197. package/src/connection/{WebRTC/WebRtcConnectorRpcRemote.ts → webrtc/WebrtcConnectorRpcRemote.ts} +6 -7
  198. package/src/connection/{WebRTC → webrtc}/iceServerAsString.ts +1 -1
  199. package/src/connection/websocket/AutoCertifierClientFacade.ts +91 -0
  200. package/src/connection/{WebSocket/ClientWebSocket.ts → websocket/ClientWebsocket.ts} +22 -17
  201. package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +23 -27
  202. package/src/connection/websocket/WebsocketConnector.ts +328 -0
  203. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
  204. package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +8 -14
  205. package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
  206. package/src/dht/DhtNode.ts +166 -193
  207. package/src/dht/DhtNodeRpcLocal.ts +68 -0
  208. package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +17 -18
  209. package/src/dht/ExternalApiRpcLocal.ts +46 -0
  210. package/src/dht/ExternalApiRpcRemote.ts +4 -4
  211. package/src/dht/contact/Remote.ts +32 -4
  212. package/src/dht/contact/SortedContactList.ts +4 -4
  213. package/src/dht/discovery/DiscoverySession.ts +25 -22
  214. package/src/dht/discovery/PeerDiscovery.ts +16 -19
  215. package/src/dht/find/FindRpcLocal.ts +35 -0
  216. package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +25 -25
  217. package/src/dht/find/FindSessionRpcLocal.ts +25 -0
  218. package/src/dht/find/{RemoteRecursiveFindSession.ts → FindSessionRpcRemote.ts} +9 -5
  219. package/src/dht/find/{RecursiveFinder.ts → Finder.ts} +77 -71
  220. package/src/dht/routing/FindRpcRemote.ts +40 -0
  221. package/src/dht/routing/Router.ts +78 -109
  222. package/src/dht/routing/RouterRpcLocal.ts +81 -0
  223. package/src/dht/routing/RouterRpcRemote.ts +18 -49
  224. package/src/dht/routing/RoutingSession.ts +58 -63
  225. package/src/dht/routing/getPreviousPeer.ts +6 -0
  226. package/src/dht/store/StoreRpcLocal.ts +46 -39
  227. package/src/dht/store/StoreRpcRemote.ts +8 -12
  228. package/src/exports.ts +11 -5
  229. package/src/helpers/Connectivity.ts +19 -0
  230. package/src/helpers/errors.ts +3 -3
  231. package/src/helpers/peerIdFromPeerDescriptor.ts +6 -0
  232. package/src/helpers/protoClasses.ts +6 -6
  233. package/src/proto/packages/dht/protos/DhtRpc.client.ts +75 -59
  234. package/src/proto/packages/dht/protos/DhtRpc.server.ts +26 -21
  235. package/src/proto/packages/dht/protos/DhtRpc.ts +112 -131
  236. package/src/rpc-protocol/DhtCallContext.ts +0 -1
  237. package/src/transport/ITransport.ts +5 -8
  238. package/src/transport/ListeningRpcCommunicator.ts +2 -1
  239. package/src/transport/RoutingRpcCommunicator.ts +3 -4
  240. package/src/types/ServiceID.ts +1 -0
  241. package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +7 -7
  242. package/test/benchmark/KademliaCorrectness.test.ts +3 -3
  243. package/test/benchmark/kademlia-simulation/SimulationNode.ts +3 -3
  244. package/test/end-to-end/Layer0-Layer1.test.ts +13 -5
  245. package/test/end-to-end/Layer0.test.ts +35 -17
  246. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +28 -9
  247. package/test/end-to-end/{Layer0WebRTC-Layer1.test.ts → Layer0Webrtc-Layer1.test.ts} +1 -1
  248. package/test/end-to-end/{Layer0WebRTC.test.ts → Layer0Webrtc.test.ts} +14 -10
  249. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -4
  250. package/test/end-to-end/{Layer1-Scale-WebRTC.test.ts → Layer1-Scale-Webrtc.test.ts} +2 -2
  251. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +52 -0
  252. package/test/end-to-end/{WebSocketConnectionRequest.test.ts → WebsocketConnectionRequest.test.ts} +16 -8
  253. package/test/end-to-end/memory-leak.test.ts +85 -0
  254. package/test/integration/ConnectionLocking.test.ts +10 -7
  255. package/test/integration/ConnectionManager.test.ts +107 -30
  256. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
  257. package/test/integration/DhtNodeExternalAPI.test.ts +10 -10
  258. package/test/integration/{RemoteDhtNode.test.ts → DhtNodeRpcRemote.test.ts} +10 -10
  259. package/test/integration/DhtRpc.test.ts +5 -5
  260. package/test/integration/{RecursiveFind.test.ts → Find.test.ts} +6 -9
  261. package/test/integration/Layer1-scale.test.ts +1 -1
  262. package/test/integration/MigrateData.test.ts +8 -7
  263. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
  264. package/test/integration/MultipleEntryPointJoining.test.ts +8 -8
  265. package/test/integration/RouteMessage.test.ts +26 -26
  266. package/test/integration/RpcErrors.test.ts +10 -10
  267. package/test/integration/ScaleDownDht.test.ts +6 -6
  268. package/test/integration/SimultaneousConnections.test.ts +10 -7
  269. package/test/integration/Store.test.ts +4 -7
  270. package/test/integration/StoreAndDelete.test.ts +4 -7
  271. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
  272. package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +5 -5
  273. package/test/integration/{WebRtcConnectorRpc.test.ts → WebrtcConnectorRpc.test.ts} +7 -8
  274. package/test/integration/{WebSocket.test.ts → Websocket.test.ts} +14 -13
  275. package/test/integration/{WebSocketConnectionManagement.test.ts → WebsocketConnectionManagement.test.ts} +4 -4
  276. package/test/integration/{WebSocketConnectorRpc.test.ts → WebsocketConnectorRpc.test.ts} +15 -15
  277. package/test/unit/AutoCertifierClientFacade.test.ts +58 -0
  278. package/test/unit/ConnectivityHelpers.test.ts +69 -0
  279. package/test/unit/{RecursiveFinder.test.ts → Finder.test.ts} +19 -17
  280. package/test/unit/Router.test.ts +26 -26
  281. package/test/unit/UUID.test.ts +1 -1
  282. package/test/unit/{WebSocketConnectorRpcLocal.test.ts → WebsocketConnector.test.ts} +8 -8
  283. package/test/unit/{WebSocketServer.test.ts → WebsocketServer.test.ts} +20 -14
  284. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +1 -1
  285. package/test/utils/FakeRpcCommunicator.ts +23 -0
  286. package/test/utils/mock/Transport.ts +1 -1
  287. package/test/utils/utils.ts +22 -26
  288. package/tsconfig.browser.json +1 -1
  289. package/tsconfig.jest.json +3 -2
  290. package/tsconfig.node.json +3 -2
  291. package/dist/src/connection/ManagedWebRtcConnection.d.ts +0 -7
  292. package/dist/src/connection/ManagedWebRtcConnection.js +0 -20
  293. package/dist/src/connection/ManagedWebRtcConnection.js.map +0 -1
  294. package/dist/src/connection/Simulator/SimulatorConnection.js.map +0 -1
  295. package/dist/src/connection/Simulator/SimulatorConnector.js.map +0 -1
  296. package/dist/src/connection/Simulator/SimulatorTransport.js.map +0 -1
  297. package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +0 -1
  298. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +0 -1
  299. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.d.ts +0 -51
  300. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js +0 -249
  301. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +0 -1
  302. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +0 -1
  303. package/dist/src/connection/WebSocket/ClientWebSocket.js.map +0 -1
  304. package/dist/src/connection/WebSocket/ServerWebSocket.js.map +0 -1
  305. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.d.ts +0 -45
  306. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js +0 -234
  307. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +0 -1
  308. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +0 -1
  309. package/dist/src/connection/WebSocket/WebSocketServer.js.map +0 -1
  310. package/dist/src/dht/RemoteDhtNode.js.map +0 -1
  311. package/dist/src/dht/find/RecursiveFindSession.js.map +0 -1
  312. package/dist/src/dht/find/RecursiveFinder.js.map +0 -1
  313. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +0 -1
  314. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +0 -2
  315. package/dist/src/dht/registerExternalApiRpcMethods.js +0 -32
  316. package/dist/src/dht/registerExternalApiRpcMethods.js.map +0 -1
  317. package/src/connection/WebRTC/WebRtcConnectorRpcLocal.ts +0 -335
  318. package/src/connection/WebSocket/WebSocketConnectorRpcLocal.ts +0 -295
  319. package/src/dht/registerExternalApiRpcMethods.ts +0 -44
  320. package/test/utils/mock/RecursiveFinder.ts +0 -19
  321. /package/dist/src/connection/{Simulator → simulator}/Simulator.d.ts +0 -0
  322. /package/dist/src/connection/{Simulator → simulator}/pings.d.ts +0 -0
  323. /package/dist/src/connection/{Simulator → simulator}/pings.js +0 -0
  324. /package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js +0 -0
  325. /package/src/connection/{Simulator → simulator}/pings.ts +0 -0
@@ -1,16 +1,19 @@
1
- import { RemoteDhtNode } from '../RemoteDhtNode'
1
+ import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
2
2
  import { SortedContactList } from '../contact/SortedContactList'
3
3
  import { PeerID, PeerIDKey } from '../../helpers/PeerID'
4
- import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
4
+ import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
5
5
  import { Logger } from '@streamr/utils'
6
6
  import EventEmitter from 'eventemitter3'
7
7
  import { v4 } from 'uuid'
8
8
  import { PeerDescriptor, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
9
9
  import { RouterRpcRemote } from './RouterRpcRemote'
10
10
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
11
- import { RouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
11
+ import { FindRpcClient, RouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
12
12
  import { toProtoRpcClient } from '@streamr/proto-rpc'
13
13
  import { Contact } from '../contact/Contact'
14
+ import { FindRpcRemote } from './FindRpcRemote'
15
+ import { EXISTING_CONNECTION_TIMEOUT } from '../contact/Remote'
16
+ import { getPreviousPeer } from './getPreviousPeer'
14
17
 
15
18
  const logger = new Logger(module)
16
19
 
@@ -18,20 +21,33 @@ const MAX_FAILED_HOPS = 2
18
21
 
19
22
  class RemoteContact extends Contact {
20
23
 
21
- private router: RouterRpcRemote
24
+ private routerRpcRemote: RouterRpcRemote
25
+ private findRpcRemote: FindRpcRemote
22
26
 
23
- constructor(peer: RemoteDhtNode, ownPeerDescriptor: PeerDescriptor, rpcCommunicator: RoutingRpcCommunicator) {
27
+ constructor(peer: DhtNodeRpcRemote, localPeerDescriptor: PeerDescriptor, rpcCommunicator: RoutingRpcCommunicator) {
24
28
  super(peer.getPeerDescriptor())
25
- this.router = new RouterRpcRemote(
26
- ownPeerDescriptor,
29
+ this.routerRpcRemote = new RouterRpcRemote(
30
+ localPeerDescriptor,
27
31
  peer.getPeerDescriptor(),
28
32
  peer.getServiceId(),
29
- toProtoRpcClient(new RouterRpcClient(rpcCommunicator.getRpcClientTransport()))
33
+ toProtoRpcClient(new RouterRpcClient(rpcCommunicator.getRpcClientTransport())),
34
+ EXISTING_CONNECTION_TIMEOUT
30
35
  )
36
+ this.findRpcRemote = new FindRpcRemote(
37
+ localPeerDescriptor,
38
+ peer.getPeerDescriptor(),
39
+ peer.getServiceId(),
40
+ toProtoRpcClient(new FindRpcClient(rpcCommunicator.getRpcClientTransport())),
41
+ EXISTING_CONNECTION_TIMEOUT
42
+ )
43
+ }
44
+
45
+ getRouterRpcRemote(): RouterRpcRemote {
46
+ return this.routerRpcRemote
31
47
  }
32
48
 
33
- getRouter(): RouterRpcRemote {
34
- return this.router
49
+ getFindRpcRemote(): FindRpcRemote {
50
+ return this.findRpcRemote
35
51
  }
36
52
  }
37
53
 
@@ -45,10 +61,9 @@ export interface RoutingSessionEvents {
45
61
  // through, and none of them responds with a success ack
46
62
  routingFailed: (sessionId: string) => void
47
63
  stopped: (sessionId: string) => void
48
- noCandidatesFound: (sessionId: string) => void
49
64
  }
50
65
 
51
- export enum RoutingMode { ROUTE, FORWARD, RECURSIVE_FIND }
66
+ export enum RoutingMode { ROUTE, FORWARD, FIND }
52
67
 
53
68
  export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
54
69
 
@@ -56,9 +71,9 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
56
71
  private readonly rpcCommunicator: RoutingRpcCommunicator
57
72
  private ongoingRequests: Set<PeerIDKey> = new Set()
58
73
  private contactList: SortedContactList<RemoteContact>
59
- private readonly ownPeerDescriptor: PeerDescriptor
74
+ private readonly localPeerDescriptor: PeerDescriptor
60
75
  private readonly messageToRoute: RouteMessageWrapper
61
- private connections: Map<PeerIDKey, RemoteDhtNode>
76
+ private connections: Map<PeerIDKey, DhtNodeRpcRemote>
62
77
  private readonly parallelism: number
63
78
  private failedHopCounter = 0
64
79
  private successfulHopCounter = 0
@@ -67,24 +82,24 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
67
82
 
68
83
  constructor(
69
84
  rpcCommunicator: RoutingRpcCommunicator,
70
- ownPeerDescriptor: PeerDescriptor,
85
+ localPeerDescriptor: PeerDescriptor,
71
86
  messageToRoute: RouteMessageWrapper,
72
- connections: Map<PeerIDKey, RemoteDhtNode>,
87
+ connections: Map<PeerIDKey, DhtNodeRpcRemote>,
73
88
  parallelism: number,
74
89
  mode: RoutingMode = RoutingMode.ROUTE,
75
- destinationId?: Uint8Array,
76
90
  excludedPeerIDs?: PeerID[]
77
91
  ) {
78
92
  super()
79
93
  this.rpcCommunicator = rpcCommunicator
80
- this.ownPeerDescriptor = ownPeerDescriptor
94
+ this.localPeerDescriptor = localPeerDescriptor
81
95
  this.messageToRoute = messageToRoute
82
96
  this.connections = connections
83
97
  this.parallelism = parallelism
84
98
  this.mode = mode
85
- const previousId = messageToRoute.previousPeer ? PeerID.fromValue(messageToRoute.previousPeer.kademliaId) : undefined
99
+ const previousPeer = getPreviousPeer(messageToRoute)
100
+ const previousId = previousPeer ? PeerID.fromValue(previousPeer.kademliaId) : undefined
86
101
  this.contactList = new SortedContactList(
87
- destinationId ? PeerID.fromValue(destinationId) : PeerID.fromValue(this.messageToRoute.destinationPeer!.kademliaId),
102
+ PeerID.fromValue(this.messageToRoute.destinationPeer!.kademliaId),
88
103
  10000,
89
104
  undefined,
90
105
  true,
@@ -93,7 +108,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
93
108
  )
94
109
  }
95
110
 
96
- private onRequestFailed = (peerId: PeerID) => {
111
+ private onRequestFailed(peerId: PeerID) {
97
112
  logger.trace('onRequestFailed() sessionId: ' + this.sessionId)
98
113
  if (this.stopped) {
99
114
  return
@@ -102,8 +117,9 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
102
117
  this.ongoingRequests.delete(peerId.toKey())
103
118
  }
104
119
  const contacts = this.findMoreContacts()
105
- if (contacts.length < 1 && this.ongoingRequests.size < 1) {
120
+ if (contacts.length === 0 && this.ongoingRequests.size === 0) {
106
121
  logger.trace('routing failed, emitting routingFailed sessionId: ' + this.sessionId)
122
+ // TODO should call this.stop() so that we do cleanup? (after the emitFailure call)
107
123
  this.stopped = true
108
124
  this.emitFailure()
109
125
  } else {
@@ -113,69 +129,63 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
113
129
  }
114
130
  }
115
131
 
116
- private emitFailure = () => {
132
+ private emitFailure() {
117
133
  if (this.successfulHopCounter >= 1) {
118
134
  this.emit('partialSuccess', this.sessionId)
119
-
120
135
  } else {
121
136
  this.emit('routingFailed', this.sessionId)
122
137
  }
123
138
  }
124
139
 
125
- private onRequestSucceeded = () => {
140
+ private onRequestSucceeded() {
126
141
  logger.trace('onRequestSucceeded() sessionId: ' + this.sessionId)
127
142
  if (this.stopped) {
128
143
  return
129
144
  }
130
145
  this.successfulHopCounter += 1
131
146
  const contacts = this.findMoreContacts()
132
- if (this.successfulHopCounter >= this.parallelism || contacts.length < 1) {
147
+ if (this.successfulHopCounter >= this.parallelism || contacts.length === 0) {
148
+ // TODO should call this.stop() so that we do cleanup? (after the routingSucceeded call)
133
149
  this.stopped = true
134
150
  this.emit('routingSucceeded', this.sessionId)
135
- } else if (contacts.length > 0 && this.ongoingRequests.size < 1) {
151
+ } else if (contacts.length > 0 && this.ongoingRequests.size === 0) {
136
152
  this.sendMoreRequests(contacts)
137
153
  }
138
154
  }
139
155
 
140
- private sendRouteMessageRequest = async (contact: RemoteContact): Promise<boolean> => {
156
+ private async sendRouteMessageRequest(contact: RemoteContact): Promise<boolean> {
141
157
  if (this.stopped) {
142
158
  return false
143
159
  }
144
- const router = contact.getRouter()
160
+ const msg = {
161
+ ...this.messageToRoute,
162
+ routingPath: this.messageToRoute.routingPath.concat([this.localPeerDescriptor])
163
+ }
145
164
  if (this.mode === RoutingMode.FORWARD) {
146
- return router.forwardMessage({
147
- ...this.messageToRoute,
148
- previousPeer: this.ownPeerDescriptor
149
- })
150
- } else if (this.mode === RoutingMode.RECURSIVE_FIND) {
151
- return router.findRecursively({
152
- ...this.messageToRoute,
153
- previousPeer: this.ownPeerDescriptor
154
- })
165
+ return contact.getRouterRpcRemote().forwardMessage(msg)
166
+ } else if (this.mode === RoutingMode.FIND) {
167
+ return contact.getFindRpcRemote().routeFindRequest(msg)
155
168
  } else {
156
- return router.routeMessage({
157
- ...this.messageToRoute,
158
- previousPeer: this.ownPeerDescriptor
159
- })
169
+ return contact.getRouterRpcRemote().routeMessage(msg)
160
170
  }
161
171
  }
162
172
 
163
- private findMoreContacts = (): RemoteContact[] => {
173
+ findMoreContacts(): RemoteContact[] {
164
174
  logger.trace('findMoreContacts() sessionId: ' + this.sessionId)
165
175
  // the contents of the connections might have changed between the rounds
166
176
  // addContacts() will only add new contacts that were not there yet
167
177
  const contacts = Array.from(this.connections.values())
168
- .map((peer) => new RemoteContact(peer, this.ownPeerDescriptor, this.rpcCommunicator))
178
+ .map((peer) => new RemoteContact(peer, this.localPeerDescriptor, this.rpcCommunicator))
169
179
  this.contactList.addContacts(contacts)
170
180
  return this.contactList.getUncontactedContacts(this.parallelism)
171
181
  }
172
182
 
173
- private sendMoreRequests = (uncontacted: RemoteContact[]) => {
183
+ sendMoreRequests(uncontacted: RemoteContact[]): void {
174
184
  logger.trace('sendMoreRequests() sessionId: ' + this.sessionId)
175
185
  if (this.stopped) {
176
186
  return
177
187
  }
178
- if (uncontacted.length < 1) {
188
+ if (uncontacted.length === 0) {
179
189
  this.emitFailure()
180
190
  return
181
191
  }
@@ -184,10 +194,10 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
184
194
  this.emitFailure()
185
195
  return
186
196
  }
187
- while ((this.ongoingRequests.size) < this.parallelism && (uncontacted.length > 0) && !this.stopped) {
197
+ while ((this.ongoingRequests.size < this.parallelism) && (uncontacted.length > 0) && !this.stopped) {
188
198
  const nextPeer = uncontacted.shift()
189
199
  // eslint-disable-next-line max-len
190
- logger.trace(`Sending routeMessage request to contact: ${keyFromPeerDescriptor(nextPeer!.getPeerDescriptor())} (sessionId=${this.sessionId})`)
200
+ logger.trace(`Sending routeMessage request to contact: ${getNodeIdFromPeerDescriptor(nextPeer!.getPeerDescriptor())} (sessionId=${this.sessionId})`)
191
201
  this.contactList.setContacted(nextPeer!.getPeerId())
192
202
  this.ongoingRequests.add(nextPeer!.getPeerId().toKey())
193
203
  setImmediate(async () => {
@@ -207,25 +217,10 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
207
217
  }
208
218
  }
209
219
 
210
- public start(): void {
211
- logger.trace('start() sessionId: ' + this.sessionId)
212
- const contacts = this.findMoreContacts()
213
- if (contacts.length < 1) {
214
- logger.trace('start() throwing noCandidatesFound sessionId: ' + this.sessionId)
215
-
216
- this.stopped = true
217
- this.emit('noCandidatesFound', this.sessionId)
218
- throw new Error('noCandidatesFound ' + this.sessionId)
219
- }
220
- this.sendMoreRequests(contacts)
221
- }
222
-
223
220
  public stop(): void {
224
221
  this.stopped = true
225
222
  this.contactList.stop()
226
-
227
223
  this.emit('stopped', this.sessionId)
228
224
  this.removeAllListeners()
229
225
  }
230
-
231
226
  }
@@ -0,0 +1,6 @@
1
+ import { last } from 'lodash'
2
+ import { PeerDescriptor, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
3
+
4
+ export const getPreviousPeer = (routeMessage: RouteMessageWrapper): PeerDescriptor | undefined => {
5
+ return last(routeMessage.routingPath!)
6
+ }
@@ -9,8 +9,8 @@ import { DhtCallContext } from '../../rpc-protocol/DhtCallContext'
9
9
  import { toProtoRpcClient } from '@streamr/proto-rpc'
10
10
  import { StoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
11
11
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
12
- import { IRecursiveFinder } from '../find/RecursiveFinder'
13
- import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
12
+ import { IFinder } from '../find/Finder'
13
+ import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
14
14
  import { Logger } from '@streamr/utils'
15
15
  import { LocalDataStore } from './LocalDataStore'
16
16
  import { IStoreRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
@@ -20,19 +20,21 @@ import EventEmitter from 'eventemitter3'
20
20
  import { Events } from '../DhtNode'
21
21
  import { SortedContactList } from '../contact/SortedContactList'
22
22
  import { Contact } from '../contact/Contact'
23
- import { RemoteDhtNode } from '../RemoteDhtNode'
23
+ import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
24
+ import { ServiceID } from '../../types/ServiceID'
24
25
 
25
26
  interface DataStoreConfig {
26
27
  rpcCommunicator: RoutingRpcCommunicator
27
- recursiveFinder: IRecursiveFinder
28
- ownPeerDescriptor: PeerDescriptor
28
+ finder: IFinder
29
+ localPeerDescriptor: PeerDescriptor
29
30
  localDataStore: LocalDataStore
30
- serviceId: string
31
+ serviceId: ServiceID
31
32
  maxTtl: number
32
33
  highestTtl: number
33
34
  redundancyFactor: number
34
35
  dhtNodeEmitter: EventEmitter<Events>
35
- getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
36
+ getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtNodeRpcRemote[]
37
+ rpcRequestTimeout?: number
36
38
  }
37
39
 
38
40
  const logger = new Logger(module)
@@ -40,26 +42,28 @@ const logger = new Logger(module)
40
42
  export class StoreRpcLocal implements IStoreRpc {
41
43
 
42
44
  private readonly rpcCommunicator: RoutingRpcCommunicator
43
- private readonly recursiveFinder: IRecursiveFinder
44
- private readonly ownPeerDescriptor: PeerDescriptor
45
+ private readonly finder: IFinder
46
+ private readonly localPeerDescriptor: PeerDescriptor
45
47
  private readonly localDataStore: LocalDataStore
46
- private readonly serviceId: string
48
+ private readonly serviceId: ServiceID
47
49
  private readonly maxTtl: number
48
50
  private readonly highestTtl: number
49
51
  private readonly redundancyFactor: number
50
52
  private readonly dhtNodeEmitter: EventEmitter<Events>
51
- private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
53
+ private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtNodeRpcRemote[]
54
+ private readonly rpcRequestTimeout?: number
52
55
 
53
56
  constructor(config: DataStoreConfig) {
54
57
  this.rpcCommunicator = config.rpcCommunicator
55
- this.recursiveFinder = config.recursiveFinder
56
- this.ownPeerDescriptor = config.ownPeerDescriptor
58
+ this.finder = config.finder
59
+ this.localPeerDescriptor = config.localPeerDescriptor
57
60
  this.localDataStore = config.localDataStore
58
61
  this.serviceId = config.serviceId
59
62
  this.maxTtl = config.maxTtl
60
63
  this.highestTtl = config.highestTtl
61
64
  this.redundancyFactor = config.redundancyFactor
62
65
  this.dhtNodeEmitter = config.dhtNodeEmitter
66
+ this.rpcRequestTimeout = config.rpcRequestTimeout
63
67
  this.getNodesClosestToIdFromBucket = config.getNodesClosestToIdFromBucket
64
68
  this.rpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData',
65
69
  (request: StoreDataRequest, context: ServerCallContext) => this.storeData(request, context))
@@ -83,12 +87,12 @@ export class StoreRpcLocal implements IStoreRpc {
83
87
 
84
88
  const dataId = PeerID.fromValue(dataEntry.kademliaId)
85
89
  const newNodeId = PeerID.fromValue(newNode.kademliaId)
86
- const ownPeerId = PeerID.fromValue(this.ownPeerDescriptor.kademliaId)
90
+ const localPeerId = PeerID.fromValue(this.localPeerDescriptor.kademliaId)
87
91
 
88
92
  const closestToData = this.getNodesClosestToIdFromBucket(dataEntry.kademliaId, 10)
89
93
 
90
94
  const sortedList = new SortedContactList<Contact>(dataId, 20, undefined, true)
91
- sortedList.addContact(new Contact(this.ownPeerDescriptor))
95
+ sortedList.addContact(new Contact(this.localPeerDescriptor))
92
96
 
93
97
  closestToData.forEach((con) => {
94
98
  if (!newNodeId.equals(PeerID.fromValue(con.getPeerDescriptor().kademliaId))) {
@@ -96,7 +100,7 @@ export class StoreRpcLocal implements IStoreRpc {
96
100
  }
97
101
  })
98
102
 
99
- if (!sortedList.getAllContacts()[0].getPeerId().equals(ownPeerId)) {
103
+ if (!sortedList.getAllContacts()[0].getPeerId().equals(localPeerId)) {
100
104
  // If we are not the closes node to the data, do not migrate
101
105
  return false
102
106
  }
@@ -128,10 +132,11 @@ export class StoreRpcLocal implements IStoreRpc {
128
132
 
129
133
  private async migrateDataToContact(dataEntry: DataEntry, contact: PeerDescriptor, doNotConnect: boolean = false): Promise<void> {
130
134
  const rpcRemote = new StoreRpcRemote(
131
- this.ownPeerDescriptor,
135
+ this.localPeerDescriptor,
132
136
  contact,
133
137
  this.serviceId,
134
- toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
138
+ toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport())),
139
+ this.rpcRequestTimeout
135
140
  )
136
141
  try {
137
142
  const response = await rpcRemote.migrateData({ dataEntry }, doNotConnect)
@@ -145,16 +150,16 @@ export class StoreRpcLocal implements IStoreRpc {
145
150
 
146
151
  public async storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]> {
147
152
  logger.debug(`Storing data to DHT ${this.serviceId}`)
148
- const result = await this.recursiveFinder.startRecursiveFind(key)
153
+ const result = await this.finder.startFind(key)
149
154
  const closestNodes = result.closestNodes
150
155
  const successfulNodes: PeerDescriptor[] = []
151
156
  const ttl = this.highestTtl // ToDo: make TTL decrease according to some nice curve
152
157
  const storerTime = Timestamp.now()
153
158
  for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
154
- if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
159
+ if (areEqualPeerDescriptors(this.localPeerDescriptor, closestNodes[i])) {
155
160
  this.localDataStore.storeEntry({
156
161
  kademliaId: key,
157
- storer: this.ownPeerDescriptor,
162
+ storer: this.localPeerDescriptor,
158
163
  ttl,
159
164
  storedAt: Timestamp.now(),
160
165
  data,
@@ -166,10 +171,11 @@ export class StoreRpcLocal implements IStoreRpc {
166
171
  continue
167
172
  }
168
173
  const rpcRemote = new StoreRpcRemote(
169
- this.ownPeerDescriptor,
174
+ this.localPeerDescriptor,
170
175
  closestNodes[i],
171
176
  this.serviceId,
172
- toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
177
+ toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport())),
178
+ this.rpcRequestTimeout
173
179
  )
174
180
  try {
175
181
  const response = await rpcRemote.storeData({ kademliaId: key, data, ttl, storerTime })
@@ -187,37 +193,38 @@ export class StoreRpcLocal implements IStoreRpc {
187
193
  }
188
194
 
189
195
  private selfIsOneOfClosestPeers(dataId: Uint8Array): boolean {
190
- const ownPeerId = PeerID.fromValue(this.ownPeerDescriptor.kademliaId)
196
+ const localPeerId = PeerID.fromValue(this.localPeerDescriptor.kademliaId)
191
197
  const closestPeers = this.getNodesClosestToIdFromBucket(dataId, this.redundancyFactor)
192
- const sortedList = new SortedContactList<Contact>(ownPeerId, this.redundancyFactor, undefined, true)
193
- sortedList.addContact(new Contact(this.ownPeerDescriptor))
198
+ const sortedList = new SortedContactList<Contact>(localPeerId, this.redundancyFactor, undefined, true)
199
+ sortedList.addContact(new Contact(this.localPeerDescriptor))
194
200
  closestPeers.forEach((con) => sortedList.addContact(new Contact(con.getPeerDescriptor())))
195
- return sortedList.getClosestContacts().some((node) => node.getPeerId().equals(ownPeerId))
201
+ return sortedList.getClosestContacts().some((node) => node.getPeerId().equals(localPeerId))
196
202
  }
197
203
 
198
204
  public async deleteDataFromDht(key: Uint8Array): Promise<void> {
199
205
  logger.debug(`Deleting data from DHT ${this.serviceId}`)
200
- const result = await this.recursiveFinder.startRecursiveFind(key)
206
+ const result = await this.finder.startFind(key)
201
207
  const closestNodes = result.closestNodes
202
208
  const successfulNodes: PeerDescriptor[] = []
203
209
  for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
204
- if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
205
- this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.ownPeerDescriptor))
210
+ if (areEqualPeerDescriptors(this.localPeerDescriptor, closestNodes[i])) {
211
+ this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.localPeerDescriptor))
206
212
  successfulNodes.push(closestNodes[i])
207
213
  continue
208
214
  }
209
215
  const rpcRemote = new StoreRpcRemote(
210
- this.ownPeerDescriptor,
216
+ this.localPeerDescriptor,
211
217
  closestNodes[i],
212
218
  this.serviceId,
213
- toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
219
+ toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport())),
220
+ this.rpcRequestTimeout
214
221
  )
215
222
  try {
216
223
  const response = await rpcRemote.deleteData({ kademliaId: key })
217
224
  if (response.deleted) {
218
225
  logger.trace('remote.deleteData() returned success')
219
226
  } else {
220
- logger.trace('could not delete data from ' + keyFromPeerDescriptor(closestNodes[i]))
227
+ logger.trace('could not delete data from ' + getNodeIdFromPeerDescriptor(closestNodes[i]))
221
228
  }
222
229
  successfulNodes.push(closestNodes[i])
223
230
  } catch (e) {
@@ -278,25 +285,25 @@ export class StoreRpcLocal implements IStoreRpc {
278
285
  private migrateDataToNeighborsIfNeeded(incomingPeer: PeerDescriptor, dataEntry: DataEntry): void {
279
286
 
280
287
  // sort own contact list according to data id
281
- const ownPeerId = PeerID.fromValue(this.ownPeerDescriptor.kademliaId)
288
+ const localPeerId = PeerID.fromValue(this.localPeerDescriptor.kademliaId)
282
289
  const dataId = PeerID.fromValue(dataEntry.kademliaId)
283
290
  const incomingPeerId = PeerID.fromValue(incomingPeer.kademliaId)
284
291
  const closestToData = this.getNodesClosestToIdFromBucket(dataEntry.kademliaId, 10)
285
292
 
286
293
  const sortedList = new SortedContactList<Contact>(dataId, this.redundancyFactor, undefined, true)
287
- sortedList.addContact(new Contact(this.ownPeerDescriptor))
294
+ sortedList.addContact(new Contact(this.localPeerDescriptor))
288
295
 
289
296
  closestToData.forEach((con) => {
290
297
  sortedList.addContact(new Contact(con.getPeerDescriptor()))
291
298
  })
292
299
 
293
- if (!sortedList.getAllContacts()[0].getPeerId().equals(ownPeerId)) {
300
+ if (!sortedList.getAllContacts()[0].getPeerId().equals(localPeerId)) {
294
301
  // If we are not the closest node to the data, migrate only to the
295
302
  // closest one to the data
296
303
 
297
304
  const contact = sortedList.getAllContacts()[0]
298
305
  const contactPeerId = PeerID.fromValue(contact.getPeerDescriptor().kademliaId)
299
- if (!incomingPeerId.equals(contactPeerId) && !ownPeerId.equals(contactPeerId)) {
306
+ if (!incomingPeerId.equals(contactPeerId) && !localPeerId.equals(contactPeerId)) {
300
307
  setImmediate(async () => {
301
308
  try {
302
309
  await this.migrateDataToContact(dataEntry, contact.getPeerDescriptor())
@@ -310,8 +317,8 @@ export class StoreRpcLocal implements IStoreRpc {
310
317
  // if we are the closest to the data, migrate to all storageRedundancyFactor nearest
311
318
  sortedList.getAllContacts().forEach((contact) => {
312
319
  const contactPeerId = PeerID.fromValue(contact.getPeerDescriptor().kademliaId)
313
- if (!incomingPeerId.equals(contactPeerId) && !ownPeerId.equals(contactPeerId)) {
314
- if (!incomingPeerId.equals(contactPeerId) && !ownPeerId.equals(contactPeerId)) {
320
+ if (!incomingPeerId.equals(contactPeerId) && !localPeerId.equals(contactPeerId)) {
321
+ if (!incomingPeerId.equals(contactPeerId) && !localPeerId.equals(contactPeerId)) {
315
322
  setImmediate(async () => {
316
323
  try {
317
324
  await this.migrateDataToContact(dataEntry, contact.getPeerDescriptor())
@@ -1,4 +1,4 @@
1
- import { Remote } from '../contact/Remote'
1
+ import { EXISTING_CONNECTION_TIMEOUT, Remote } from '../contact/Remote'
2
2
  import { IStoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
3
3
  import {
4
4
  DeleteDataRequest,
@@ -8,19 +8,17 @@ import {
8
8
  StoreDataRequest,
9
9
  StoreDataResponse
10
10
  } from '../../proto/packages/dht/protos/DhtRpc'
11
- import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
11
+ import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
12
12
 
13
13
  export class StoreRpcRemote extends Remote<IStoreRpcClient> {
14
14
 
15
15
  async storeData(request: StoreDataRequest): Promise<StoreDataResponse> {
16
- const options = this.formDhtRpcOptions({
17
- timeout: 10000
18
- })
16
+ const options = this.formDhtRpcOptions()
19
17
  try {
20
18
  return await this.getClient().storeData(request, options)
21
19
  } catch (err) {
22
- const to = keyFromPeerDescriptor(this.getPeerDescriptor())
23
- const from = keyFromPeerDescriptor(this.getLocalPeerDescriptor())
20
+ const to = getNodeIdFromPeerDescriptor(this.getPeerDescriptor())
21
+ const from = getNodeIdFromPeerDescriptor(this.getLocalPeerDescriptor())
24
22
  throw Error(
25
23
  `Could not store data to ${to} from ${from} ${err}`
26
24
  )
@@ -28,21 +26,19 @@ export class StoreRpcRemote extends Remote<IStoreRpcClient> {
28
26
  }
29
27
 
30
28
  async deleteData(request: DeleteDataRequest): Promise<DeleteDataResponse> {
31
- const options = this.formDhtRpcOptions({
32
- timeout: 10000
33
- })
29
+ const options = this.formDhtRpcOptions()
34
30
  try {
35
31
  return await this.getClient().deleteData(request, options)
36
32
  } catch (err) {
37
33
  throw Error(
38
- `Could not call delete data to ${keyFromPeerDescriptor(this.getPeerDescriptor())} ${err}`
34
+ `Could not call delete data to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} ${err}`
39
35
  )
40
36
  }
41
37
  }
42
38
 
43
39
  async migrateData(request: MigrateDataRequest, doNotConnect: boolean = false): Promise<MigrateDataResponse> {
44
40
  const options = this.formDhtRpcOptions({
45
- timeout: 10000,
41
+ timeout: EXISTING_CONNECTION_TIMEOUT,
46
42
  doNotConnect
47
43
  })
48
44
  return this.getClient().migrateData(request, options)
package/src/exports.ts CHANGED
@@ -1,13 +1,19 @@
1
1
  export { DhtNode, DhtNodeEvents, DhtNodeOptions } from './dht/DhtNode'
2
2
  export { ListeningRpcCommunicator } from './transport/ListeningRpcCommunicator'
3
- export { Simulator, LatencyType } from './connection/Simulator/Simulator'
4
- export { SimulatorTransport } from './connection/Simulator/SimulatorTransport'
5
- export { getRandomRegion, getRegionDelayMatrix } from './connection/Simulator/pings'
3
+ export { RoutingRpcCommunicator } from './transport/RoutingRpcCommunicator'
4
+ export { Simulator, LatencyType } from './connection/simulator/Simulator'
5
+ export { SimulatorTransport } from './connection/simulator/SimulatorTransport'
6
+ export { getRandomRegion, getRegionDelayMatrix } from './connection/simulator/pings'
6
7
  export { PeerDescriptor, Message, NodeType, DataEntry } from './proto/packages/dht/protos/DhtRpc'
7
8
  export { ITransport } from './transport/ITransport'
8
9
  export { ConnectionManager, ConnectionLocker, PortRange, TlsCertificate } from './connection/ConnectionManager'
10
+ export { DefaultConnectorFacade } from './connection/ConnectorFacade'
9
11
  export { DhtRpcOptions } from './rpc-protocol/DhtRpcOptions'
10
- export { Remote } from './dht/contact/Remote'
12
+ export { Remote, EXISTING_CONNECTION_TIMEOUT } from './dht/contact/Remote'
11
13
  export { areEqualPeerDescriptors } from './helpers/peerIdFromPeerDescriptor'
12
- export { IceServer } from './connection/WebRTC/WebRtcConnectorRpcLocal'
14
+ export { IceServer } from './connection/webrtc/WebrtcConnector'
13
15
  export { DhtCallContext } from './rpc-protocol/DhtCallContext'
16
+ export { ClientWebsocket } from './connection/websocket/ClientWebsocket'
17
+ export { ManagedConnection } from './connection/ManagedConnection'
18
+ export { ConnectionType } from './connection/IConnection'
19
+ export { PeerID } from './helpers/PeerID'
@@ -0,0 +1,19 @@
1
+ import { ConnectionType } from '../connection/IConnection'
2
+ import { ConnectivityMethod, NodeType, PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
3
+ import { isPrivateIPv4 } from './AddressTools'
4
+
5
+ export const canOpenConnectionFromBrowser = (websocketServer: ConnectivityMethod): boolean => {
6
+ const hasPrivateAddress = ((websocketServer.host === 'localhost') || isPrivateIPv4(websocketServer.host))
7
+ return websocketServer.tls || hasPrivateAddress
8
+ }
9
+
10
+ export const expectedConnectionType = (localPeerDescriptor: PeerDescriptor, remotePeerDescriptor: PeerDescriptor): ConnectionType => {
11
+ if (remotePeerDescriptor.websocket
12
+ && (localPeerDescriptor.type !== NodeType.BROWSER || canOpenConnectionFromBrowser(remotePeerDescriptor.websocket))) {
13
+ return ConnectionType.WEBSOCKET_CLIENT
14
+ } else if (localPeerDescriptor.websocket
15
+ && (remotePeerDescriptor.type !== NodeType.BROWSER || canOpenConnectionFromBrowser(localPeerDescriptor.websocket))) {
16
+ return ConnectionType.WEBSOCKET_SERVER
17
+ }
18
+ return ConnectionType.WEBRTC
19
+ }
@@ -33,13 +33,13 @@ class Err extends Error {
33
33
 
34
34
  export class ConnectionFailed extends Err { constructor( message?: string, originalError?: Error | string) { super(ErrorCode.CONNECTION_FAILED, message, originalError) } }
35
35
  export class CouldNotRoute extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.COULD_NOT_ROUTE, message, originalError) } }
36
- export class WebSocketServerStartError extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.STARTING_WEBSOCKET_SERVER_FAILED, message, originalError) } }
37
- export class WebSocketConnectionRequestRejected extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.WEBSOCKET_CONNECTION_REQUEST_REJECTED, message, originalError) } }
36
+ export class WebsocketServerStartError extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.STARTING_WEBSOCKET_SERVER_FAILED, message, originalError) } }
37
+ export class WebsocketConnectionRequestRejected extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.WEBSOCKET_CONNECTION_REQUEST_REJECTED, message, originalError) } }
38
38
  export class CouldNotStart extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.COULD_NOT_START, message, originalError) } }
39
39
  export class CouldNotStop extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.COULD_NOT_STOP, message, originalError) } }
40
40
  export class CannotConnectToSelf extends Err { constructor(message?: string, originalError?: Error | string) {super(ErrorCode.CANNOT_CONNECT_TO_SELF, message, originalError) } }
41
41
  export class NotImplemented extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.NOT_IMPLEMENTED, message, originalError) } }
42
- export class IllegalRTCPeerConnectionState extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.ILLEGAL_RTC_PEER_CONNECTION_STATE, message, originalError) } }
42
+ export class IllegalRtcPeerConnectionState extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.ILLEGAL_RTC_PEER_CONNECTION_STATE, message, originalError) } }
43
43
  export class IllegalArguments extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.ILLEGAL_ARGUMENTS, message, originalError) } }
44
44
  export class ConnectivityResponseTimeout extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.CONNECTIVITY_RESPONSE_NOT_RECEIVED_BEFORE_TIMEOUT, message, originalError) } }
45
45
  export class ConnectionLocker extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.CONNECTION_LOCKER, message, originalError) } }
@@ -1,3 +1,4 @@
1
+ import { binaryToHex } from '@streamr/utils'
1
2
  import { PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
2
3
  import { PeerID, PeerIDKey } from './PeerID'
3
4
 
@@ -5,6 +6,11 @@ export const peerIdFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerID
5
6
  return PeerID.fromValue(peerDescriptor.kademliaId)
6
7
  }
7
8
 
9
+ // TODO could move getNodeIdFromPeerDescriptor (and NodeID) from trackerless-network
10
+ export const getNodeIdFromPeerDescriptor = (peerDescriptor: PeerDescriptor): string => {
11
+ return binaryToHex(peerDescriptor.kademliaId)
12
+ }
13
+
8
14
  export const keyFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerIDKey => {
9
15
  return PeerID.fromValue(peerDescriptor.kademliaId).toKey()
10
16
  }