@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,22 +1,20 @@
1
1
  import { Message, PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
2
- import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
2
+ import {
3
+ areEqualPeerDescriptors,
4
+ getNodeIdFromPeerDescriptor,
5
+ keyFromPeerDescriptor,
6
+ peerIdFromPeerDescriptor
7
+ } from '../../helpers/peerIdFromPeerDescriptor'
3
8
  import { RoutingMode, RoutingSession, RoutingSessionEvents } from './RoutingSession'
4
9
  import { Logger, executeSafePromise, raceEvents3, withTimeout } from '@streamr/utils'
5
10
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
6
11
  import { PeerIDKey } from '../../helpers/PeerID'
7
12
  import { DuplicateDetector } from './DuplicateDetector'
8
13
  import { ConnectionManager } from '../../connection/ConnectionManager'
9
- import { RemoteDhtNode } from '../RemoteDhtNode'
14
+ import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
10
15
  import { v4 } from 'uuid'
11
- import { IRouterRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
12
-
13
- export const createRouteMessageAck = (routedMessage: RouteMessageWrapper, error?: string): RouteMessageAck => {
14
- const ack: RouteMessageAck = {
15
- requestId: routedMessage.requestId,
16
- error: error ? error : ''
17
- }
18
- return ack
19
- }
16
+ import { RouterRpcLocal, createRouteMessageAck } from './RouterRpcLocal'
17
+ import { ServiceID } from '../../types/ServiceID'
20
18
 
21
19
  export enum RoutingErrors {
22
20
  NO_CANDIDATES_FOUND = 'No routing candidates found',
@@ -25,11 +23,13 @@ export enum RoutingErrors {
25
23
 
26
24
  export interface RouterConfig {
27
25
  rpcCommunicator: RoutingRpcCommunicator
28
- ownPeerDescriptor: PeerDescriptor
29
- connections: Map<PeerIDKey, RemoteDhtNode>
26
+ localPeerDescriptor: PeerDescriptor
27
+ connections: Map<PeerIDKey, DhtNodeRpcRemote>
30
28
  addContact: (contact: PeerDescriptor, setActive?: boolean) => void
31
- serviceId: string
29
+ serviceId: ServiceID
32
30
  connectionManager?: ConnectionManager
31
+ rpcRequestTimeout?: number
32
+
33
33
  }
34
34
 
35
35
  interface ForwardingTableEntry {
@@ -37,7 +37,7 @@ interface ForwardingTableEntry {
37
37
  peerDescriptors: PeerDescriptor[]
38
38
  }
39
39
 
40
- interface IRouterFunc {
40
+ export interface IRouter {
41
41
  doRouteMessage(routedMessage: RouteMessageWrapper, mode: RoutingMode, excludedPeer?: PeerDescriptor): RouteMessageAck
42
42
  send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void>
43
43
  isMostLikelyDuplicate(requestId: string): boolean
@@ -47,17 +47,13 @@ interface IRouterFunc {
47
47
  stop(): void
48
48
  }
49
49
 
50
- export interface IRouter extends Omit<IRouterRpc, 'findRecursively'>, IRouterFunc {}
51
-
52
50
  const logger = new Logger(module)
53
51
 
54
52
  export class Router implements IRouter {
55
53
  private readonly rpcCommunicator: RoutingRpcCommunicator
56
- private readonly ownPeerDescriptor: PeerDescriptor
57
- private readonly connections: Map<PeerIDKey, RemoteDhtNode>
58
- private readonly addContact: (contact: PeerDescriptor, setActive?: boolean) => void
59
- private readonly serviceId: string
60
- private readonly connectionManager?: ConnectionManager
54
+ private readonly localPeerDescriptor: PeerDescriptor
55
+ private readonly connections: Map<PeerIDKey, DhtNodeRpcRemote>
56
+ private readonly serviceId: ServiceID
61
57
  private readonly forwardingTable: Map<string, ForwardingTableEntry> = new Map()
62
58
  private ongoingRoutingSessions: Map<string, RoutingSession> = new Map()
63
59
  private readonly duplicateRequestDetector: DuplicateDetector = new DuplicateDetector(100000, 100)
@@ -65,19 +61,48 @@ export class Router implements IRouter {
65
61
 
66
62
  constructor(config: RouterConfig) {
67
63
  this.rpcCommunicator = config.rpcCommunicator
68
- this.ownPeerDescriptor = config.ownPeerDescriptor
64
+ this.localPeerDescriptor = config.localPeerDescriptor
69
65
  this.connections = config.connections
70
- this.addContact = config.addContact
71
66
  this.serviceId = config.serviceId
72
- this.connectionManager = config.connectionManager
73
- this.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'forwardMessage',
74
- (forwardMessage: RouteMessageWrapper) => this.forwardMessage(forwardMessage))
75
- this.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage',
76
- (routedMessage: RouteMessageWrapper) => this.routeMessage(routedMessage))
67
+ this.registerLocalRpcMethods(config)
68
+ }
69
+
70
+ private registerLocalRpcMethods(config: RouterConfig) {
71
+ const rpcLocal = new RouterRpcLocal({
72
+ doRouteMessage: (routedMessage: RouteMessageWrapper, mode?: RoutingMode) => this.doRouteMessage(routedMessage, mode),
73
+ addContact: (contact: PeerDescriptor, setActive: boolean) => config.addContact(contact, setActive),
74
+ setForwardingEntries: (routedMessage: RouteMessageWrapper) => this.setForwardingEntries(routedMessage),
75
+ duplicateRequestDetector: this.duplicateRequestDetector,
76
+ localPeerDescriptor: this.localPeerDescriptor,
77
+ connectionManager: config.connectionManager
78
+ })
79
+ this.rpcCommunicator.registerRpcMethod(
80
+ RouteMessageWrapper,
81
+ RouteMessageAck,
82
+ 'routeMessage',
83
+ async (routedMessage: RouteMessageWrapper) => {
84
+ if (this.stopped) {
85
+ return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
86
+ }
87
+ return rpcLocal.routeMessage(routedMessage)
88
+ }
89
+ )
90
+ this.rpcCommunicator.registerRpcMethod(
91
+ RouteMessageWrapper,
92
+ RouteMessageAck,
93
+ 'forwardMessage',
94
+ async (forwardMessage: RouteMessageWrapper) => {
95
+ if (this.stopped) {
96
+ return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
97
+ }
98
+ return rpcLocal.forwardMessage(forwardMessage)
99
+ }
100
+ )
101
+
77
102
  }
78
103
 
79
104
  public async send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void> {
80
- msg.sourceDescriptor = this.ownPeerDescriptor
105
+ msg.sourceDescriptor = this.localPeerDescriptor
81
106
  const targetPeerDescriptor = msg.targetDescriptor!
82
107
  const forwardingEntry = this.forwardingTable.get(keyFromPeerDescriptor(targetPeerDescriptor))
83
108
  if (forwardingEntry && forwardingEntry.peerDescriptors.length > 0) {
@@ -86,7 +111,7 @@ export class Router implements IRouter {
86
111
  message: msg,
87
112
  requestId: v4(),
88
113
  destinationPeer: forwardingPeer,
89
- sourcePeer: this.ownPeerDescriptor,
114
+ sourcePeer: this.localPeerDescriptor,
90
115
  reachableThrough,
91
116
  routingPath: []
92
117
  }
@@ -96,7 +121,7 @@ export class Router implements IRouter {
96
121
  message: msg,
97
122
  requestId: v4(),
98
123
  destinationPeer: targetPeerDescriptor,
99
- sourcePeer: this.ownPeerDescriptor,
124
+ sourcePeer: this.localPeerDescriptor,
100
125
  reachableThrough,
101
126
  routingPath: []
102
127
  }
@@ -104,23 +129,23 @@ export class Router implements IRouter {
104
129
  }
105
130
  }
106
131
 
107
- public doRouteMessage(routedMessage: RouteMessageWrapper, mode = RoutingMode.ROUTE, excludedPeer?: PeerDescriptor): RouteMessageAck {
132
+ public doRouteMessage(routedMessage: RouteMessageWrapper, mode = RoutingMode.ROUTE): RouteMessageAck {
108
133
  if (this.stopped) {
109
134
  return createRouteMessageAck(routedMessage, RoutingErrors.STOPPED)
110
135
  }
111
- logger.trace(`Routing message ${routedMessage.requestId} from ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
112
- + `to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}`)
113
- routedMessage.routingPath.push(this.ownPeerDescriptor)
114
- const session = this.createRoutingSession(routedMessage, mode, excludedPeer)
115
- this.addRoutingSession(session)
116
- try {
136
+ logger.trace(`Routing message ${routedMessage.requestId} from ${getNodeIdFromPeerDescriptor(routedMessage.sourcePeer!)} `
137
+ + `to ${getNodeIdFromPeerDescriptor(routedMessage.destinationPeer!)}`)
138
+ const session = this.createRoutingSession(routedMessage, mode)
139
+ const contacts = session.findMoreContacts()
140
+ if (contacts.length > 0) {
141
+ this.addRoutingSession(session)
117
142
  // eslint-disable-next-line promise/catch-or-return
118
143
  logger.trace('starting to raceEvents from routingSession: ' + session.sessionId)
119
144
  let eventReceived: Promise<unknown>
120
145
  executeSafePromise(async () => {
121
146
  eventReceived = raceEvents3<RoutingSessionEvents>(
122
147
  session,
123
- ['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped', 'noCandidatesFound'],
148
+ ['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped'],
124
149
  null
125
150
  )
126
151
  })
@@ -134,33 +159,29 @@ export class Router implements IRouter {
134
159
  session.stop()
135
160
  this.removeRoutingSession(session.sessionId)
136
161
  })
137
- session.start()
138
- } catch (e) {
139
- if (areEqualPeerDescriptors(routedMessage.sourcePeer!, this.ownPeerDescriptor)) {
140
- logger.warn(
141
- `Failed to send (routeMessage: ${this.serviceId}) to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}: ${e}`
162
+ session.sendMoreRequests(contacts)
163
+ return createRouteMessageAck(routedMessage)
164
+ } else {
165
+ if (areEqualPeerDescriptors(routedMessage.sourcePeer!, this.localPeerDescriptor)) {
166
+ logger.debug(
167
+ `Failed to send (routeMessage: ${this.serviceId}) to ${getNodeIdFromPeerDescriptor(routedMessage.destinationPeer!)}`
142
168
  )
143
169
  }
170
+ logger.trace('noCandidatesFound sessionId: ' + session.sessionId)
144
171
  return createRouteMessageAck(routedMessage, RoutingErrors.NO_CANDIDATES_FOUND)
145
172
  }
146
- return createRouteMessageAck(routedMessage)
147
173
  }
148
174
 
149
- private createRoutingSession(routedMessage: RouteMessageWrapper, mode: RoutingMode, excludedPeer?: PeerDescriptor): RoutingSession {
150
- const excludedPeers = routedMessage.routingPath.map((descriptor) => peerIdFromPeerDescriptor(descriptor))
151
- if (excludedPeer) {
152
- excludedPeers.push(peerIdFromPeerDescriptor(excludedPeer))
153
- }
154
- logger.trace(' routing session created with connections: ' + this.connections.size )
175
+ private createRoutingSession(routedMessage: RouteMessageWrapper, mode: RoutingMode): RoutingSession {
176
+ logger.trace('routing session created with connections: ' + this.connections.size)
155
177
  return new RoutingSession(
156
178
  this.rpcCommunicator,
157
- this.ownPeerDescriptor,
179
+ this.localPeerDescriptor,
158
180
  routedMessage,
159
181
  this.connections,
160
- areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.sourcePeer!) ? 2 : 1,
182
+ areEqualPeerDescriptors(this.localPeerDescriptor, routedMessage.sourcePeer!) ? 2 : 1,
161
183
  mode,
162
- undefined,
163
- excludedPeers
184
+ routedMessage.routingPath.map((descriptor) => peerIdFromPeerDescriptor(descriptor))
164
185
  )
165
186
  }
166
187
 
@@ -192,32 +213,10 @@ export class Router implements IRouter {
192
213
  this.forwardingTable.clear()
193
214
  this.duplicateRequestDetector.clear()
194
215
  }
195
-
196
- // IRouterRpc method
197
- async routeMessage(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
198
- if (this.stopped) {
199
- return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
200
- } else if (this.duplicateRequestDetector.isMostLikelyDuplicate(routedMessage.requestId)) {
201
- logger.trace(`Routing message ${routedMessage.requestId} from ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
202
- + `to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)} is likely a duplicate`)
203
- return createRouteMessageAck(routedMessage, 'message given to routeMessage() service is likely a duplicate')
204
- }
205
- logger.trace(`Processing received routeMessage ${routedMessage.requestId}`)
206
- this.addContact(routedMessage.sourcePeer!, true)
207
- this.addToDuplicateDetector(routedMessage.requestId)
208
- if (areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.destinationPeer!)) {
209
- logger.trace(`routing message targeted to self ${routedMessage.requestId}`)
210
- this.setForwardingEntries(routedMessage)
211
- this.connectionManager?.handleMessage(routedMessage.message!)
212
- return createRouteMessageAck(routedMessage)
213
- } else {
214
- return this.doRouteMessage(routedMessage)
215
- }
216
- }
217
216
 
218
217
  private setForwardingEntries(routedMessage: RouteMessageWrapper): void {
219
218
  const reachableThroughWithoutSelf = routedMessage.reachableThrough.filter((peer) => {
220
- return !areEqualPeerDescriptors(peer, this.ownPeerDescriptor)
219
+ return !areEqualPeerDescriptors(peer, this.localPeerDescriptor)
221
220
  })
222
221
 
223
222
  if (reachableThroughWithoutSelf.length > 0) {
@@ -236,34 +235,4 @@ export class Router implements IRouter {
236
235
  this.forwardingTable.set(sourceKey, forwardingEntry)
237
236
  }
238
237
  }
239
-
240
- // IRouterRpc method
241
- async forwardMessage(forwardMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
242
- if (this.stopped) {
243
- return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
244
- } else if (this.duplicateRequestDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {
245
- logger.trace(`Forwarding message ${forwardMessage.requestId} from ${keyFromPeerDescriptor(forwardMessage.sourcePeer!)} `
246
- + `to ${keyFromPeerDescriptor(forwardMessage.destinationPeer!)} is likely a duplicate`)
247
- return createRouteMessageAck(forwardMessage, 'message given to forwardMessage() service is likely a duplicate')
248
- }
249
- logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`)
250
- this.addContact(forwardMessage.sourcePeer!, true)
251
- this.addToDuplicateDetector(forwardMessage.requestId)
252
- if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardMessage.destinationPeer!)) {
253
- return this.forwardToDestination(forwardMessage)
254
- } else {
255
- return this.doRouteMessage(forwardMessage, RoutingMode.FORWARD)
256
- }
257
- }
258
-
259
- private forwardToDestination(routedMessage: RouteMessageWrapper): RouteMessageAck {
260
- logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`)
261
- const forwardedMessage = routedMessage.message!
262
- if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardedMessage.targetDescriptor!)) {
263
- this.connectionManager?.handleMessage(forwardedMessage)
264
- return createRouteMessageAck(routedMessage)
265
- }
266
- return this.doRouteMessage({ ...routedMessage, destinationPeer: forwardedMessage.targetDescriptor })
267
- }
268
-
269
238
  }
@@ -0,0 +1,81 @@
1
+ import { Logger } from '@streamr/utils'
2
+ import { ConnectionManager } from '../../connection/ConnectionManager'
3
+ import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
4
+ import { PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
5
+ import { IRouterRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
6
+ import { DuplicateDetector } from './DuplicateDetector'
7
+ import { RoutingMode } from './RoutingSession'
8
+
9
+ interface RouterRpcLocalConfig {
10
+ doRouteMessage: (routedMessage: RouteMessageWrapper, mode?: RoutingMode) => RouteMessageAck
11
+ addContact: (contact: PeerDescriptor, setActive: boolean) => void
12
+ setForwardingEntries: (routedMessage: RouteMessageWrapper) => void
13
+ duplicateRequestDetector: DuplicateDetector
14
+ localPeerDescriptor: PeerDescriptor
15
+ connectionManager?: ConnectionManager
16
+ }
17
+
18
+ const logger = new Logger(module)
19
+
20
+ export const createRouteMessageAck = (routedMessage: RouteMessageWrapper, error?: string): RouteMessageAck => {
21
+ const ack: RouteMessageAck = {
22
+ requestId: routedMessage.requestId,
23
+ error: error ? error : ''
24
+ }
25
+ return ack
26
+ }
27
+
28
+ export class RouterRpcLocal implements IRouterRpc {
29
+
30
+ private readonly config: RouterRpcLocalConfig
31
+
32
+ constructor(config: RouterRpcLocalConfig) {
33
+ this.config = config
34
+ }
35
+
36
+ async routeMessage(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
37
+ if (this.config.duplicateRequestDetector.isMostLikelyDuplicate(routedMessage.requestId)) {
38
+ logger.trace(`Routing message ${routedMessage.requestId} from ${getNodeIdFromPeerDescriptor(routedMessage.sourcePeer!)} `
39
+ + `to ${getNodeIdFromPeerDescriptor(routedMessage.destinationPeer!)} is likely a duplicate`)
40
+ return createRouteMessageAck(routedMessage, 'message given to routeMessage() service is likely a duplicate')
41
+ }
42
+ logger.trace(`Processing received routeMessage ${routedMessage.requestId}`)
43
+ this.config.addContact(routedMessage.sourcePeer!, true)
44
+ this.config.duplicateRequestDetector.add(routedMessage.requestId)
45
+ if (areEqualPeerDescriptors(this.config.localPeerDescriptor, routedMessage.destinationPeer!)) {
46
+ logger.trace(`routing message targeted to self ${routedMessage.requestId}`)
47
+ this.config.setForwardingEntries(routedMessage)
48
+ this.config.connectionManager?.handleMessage(routedMessage.message!)
49
+ return createRouteMessageAck(routedMessage)
50
+ } else {
51
+ return this.config.doRouteMessage(routedMessage)
52
+ }
53
+ }
54
+
55
+ async forwardMessage(forwardMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
56
+ if (this.config.duplicateRequestDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {
57
+ logger.trace(`Forwarding message ${forwardMessage.requestId} from ${getNodeIdFromPeerDescriptor(forwardMessage.sourcePeer!)} `
58
+ + `to ${getNodeIdFromPeerDescriptor(forwardMessage.destinationPeer!)} is likely a duplicate`)
59
+ return createRouteMessageAck(forwardMessage, 'message given to forwardMessage() service is likely a duplicate')
60
+ }
61
+ logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`)
62
+ this.config.addContact(forwardMessage.sourcePeer!, true)
63
+ this.config.duplicateRequestDetector.add(forwardMessage.requestId)
64
+ if (areEqualPeerDescriptors(this.config.localPeerDescriptor, forwardMessage.destinationPeer!)) {
65
+ return this.forwardToDestination(forwardMessage)
66
+ } else {
67
+ return this.config.doRouteMessage(forwardMessage, RoutingMode.FORWARD)
68
+ }
69
+ }
70
+
71
+ private forwardToDestination(routedMessage: RouteMessageWrapper): RouteMessageAck {
72
+ logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`)
73
+ const forwardedMessage = routedMessage.message!
74
+ if (areEqualPeerDescriptors(this.config.localPeerDescriptor, forwardedMessage.targetDescriptor!)) {
75
+ this.config.connectionManager?.handleMessage(forwardedMessage)
76
+ return createRouteMessageAck(routedMessage)
77
+ }
78
+ return this.config.doRouteMessage({ ...routedMessage, destinationPeer: forwardedMessage.targetDescriptor })
79
+ }
80
+
81
+ }
@@ -2,12 +2,12 @@ import { RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
2
2
  import { v4 } from 'uuid'
3
3
  import {
4
4
  areEqualPeerDescriptors,
5
- keyFromPeerDescriptor,
6
- peerIdFromPeerDescriptor
5
+ getNodeIdFromPeerDescriptor
7
6
  } from '../../helpers/peerIdFromPeerDescriptor'
8
7
  import { IRouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
9
8
  import { Remote } from '../contact/Remote'
10
9
  import { Logger } from '@streamr/utils'
10
+ import { getPreviousPeer } from './getPreviousPeer'
11
11
 
12
12
  const logger = new Logger(module)
13
13
 
@@ -17,15 +17,12 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
17
17
  const message: RouteMessageWrapper = {
18
18
  destinationPeer: params.destinationPeer,
19
19
  sourcePeer: params.sourcePeer,
20
- previousPeer: params.previousPeer,
21
20
  message: params.message,
22
- requestId: params.requestId || v4(),
23
- reachableThrough: params.reachableThrough || [],
21
+ requestId: params.requestId ?? v4(),
22
+ reachableThrough: params.reachableThrough ?? [],
24
23
  routingPath: params.routingPath
25
24
  }
26
- const options = this.formDhtRpcOptions({
27
- timeout: 10000
28
- })
25
+ const options = this.formDhtRpcOptions()
29
26
  try {
30
27
  const ack = await this.getClient().routeMessage(message, options)
31
28
  // Success signal if sent to destination and error includes duplicate
@@ -38,9 +35,11 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
38
35
  return false
39
36
  }
40
37
  } catch (err) {
41
- const fromNode = params.previousPeer ?
42
- peerIdFromPeerDescriptor(params.previousPeer) : keyFromPeerDescriptor(params.sourcePeer!)
43
- logger.trace(`Failed to send routeMessage from ${fromNode} to ${keyFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
38
+ const previousPeer = getPreviousPeer(params)
39
+ const fromNode = previousPeer
40
+ ? getNodeIdFromPeerDescriptor(previousPeer)
41
+ : getNodeIdFromPeerDescriptor(params.sourcePeer!)
42
+ logger.trace(`Failed to send routeMessage from ${fromNode} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
44
43
  return false
45
44
  }
46
45
  return true
@@ -50,57 +49,27 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
50
49
  const message: RouteMessageWrapper = {
51
50
  destinationPeer: params.destinationPeer,
52
51
  sourcePeer: params.sourcePeer,
53
- previousPeer: params.previousPeer,
54
52
  message: params.message,
55
- requestId: params.requestId || v4(),
56
- reachableThrough: params.reachableThrough || [],
53
+ requestId: params.requestId ?? v4(),
54
+ reachableThrough: params.reachableThrough ?? [],
57
55
  routingPath: params.routingPath
58
56
  }
59
- const options = this.formDhtRpcOptions({
60
- timeout: 10000
61
- })
57
+ const options = this.formDhtRpcOptions()
62
58
  try {
63
59
  const ack = await this.getClient().forwardMessage(message, options)
64
60
  if (ack.error.length > 0) {
65
61
  return false
66
62
  }
67
63
  } catch (err) {
68
- const fromNode = params.previousPeer ?
69
- keyFromPeerDescriptor(params.previousPeer) : keyFromPeerDescriptor(params.sourcePeer!)
70
-
64
+ const previousPeer = getPreviousPeer(params)
65
+ const fromNode = previousPeer
66
+ ? getNodeIdFromPeerDescriptor(previousPeer)
67
+ : getNodeIdFromPeerDescriptor(params.sourcePeer!)
71
68
  logger.trace(
72
- `Failed to send forwardMessage from ${fromNode} to ${keyFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`
69
+ `Failed to send forwardMessage from ${fromNode} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`
73
70
  )
74
71
  return false
75
72
  }
76
73
  return true
77
74
  }
78
-
79
- async findRecursively(params: RouteMessageWrapper): Promise<boolean> {
80
- const message: RouteMessageWrapper = {
81
- destinationPeer: params.destinationPeer,
82
- sourcePeer: params.sourcePeer,
83
- previousPeer: params.previousPeer,
84
- message: params.message,
85
- requestId: params.requestId || v4(),
86
- reachableThrough: params.reachableThrough || [],
87
- routingPath: params.routingPath
88
- }
89
- const options = this.formDhtRpcOptions({
90
- timeout: 10000
91
- })
92
- try {
93
- const ack = await this.getClient().findRecursively(message, options)
94
- if (ack.error.length > 0) {
95
- logger.debug('Next hop responded with error ' + ack.error)
96
- return false
97
- }
98
- } catch (err) {
99
- const fromNode = params.previousPeer ? keyFromPeerDescriptor(params.previousPeer) : keyFromPeerDescriptor(params.sourcePeer!)
100
- logger.debug(`Failed to send recursiveFind message from ${fromNode} to ${keyFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
101
- return false
102
- }
103
- return true
104
- }
105
-
106
75
  }