@streamr/dht 100.0.0-pretestnet.6 → 100.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/README.md +90 -8
  2. package/dist/package.json +70 -0
  3. package/dist/src/connection/Connection.d.ts +1 -0
  4. package/dist/src/connection/Connection.js +10 -3
  5. package/dist/src/connection/Connection.js.map +1 -1
  6. package/dist/src/connection/ConnectionLockHandler.d.ts +14 -14
  7. package/dist/src/connection/ConnectionLockHandler.js +22 -16
  8. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  9. package/dist/src/connection/ConnectionLockRpcLocal.d.ts +3 -3
  10. package/dist/src/connection/ConnectionLockRpcLocal.js +7 -6
  11. package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -1
  12. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +4 -6
  13. package/dist/src/connection/ConnectionLockRpcRemote.js +10 -37
  14. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  15. package/dist/src/connection/ConnectionManager.d.ts +19 -20
  16. package/dist/src/connection/ConnectionManager.js +132 -117
  17. package/dist/src/connection/ConnectionManager.js.map +1 -1
  18. package/dist/src/connection/ConnectorFacade.d.ts +3 -2
  19. package/dist/src/connection/ConnectorFacade.js +10 -3
  20. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  21. package/dist/src/connection/Handshaker.d.ts +3 -1
  22. package/dist/src/connection/Handshaker.js +18 -9
  23. package/dist/src/connection/Handshaker.js.map +1 -1
  24. package/dist/src/connection/IConnection.d.ts +2 -7
  25. package/dist/src/connection/IConnection.js +1 -8
  26. package/dist/src/connection/IConnection.js.map +1 -1
  27. package/dist/src/connection/ManagedConnection.d.ts +5 -7
  28. package/dist/src/connection/ManagedConnection.js +42 -26
  29. package/dist/src/connection/ManagedConnection.js.map +1 -1
  30. package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -1
  31. package/dist/src/connection/connectivityChecker.d.ts +9 -0
  32. package/dist/src/connection/connectivityChecker.js +130 -0
  33. package/dist/src/connection/connectivityChecker.js.map +1 -0
  34. package/dist/src/connection/connectivityRequestHandler.d.ts +3 -0
  35. package/dist/src/connection/connectivityRequestHandler.js +101 -0
  36. package/dist/src/connection/connectivityRequestHandler.js.map +1 -0
  37. package/dist/src/connection/simulator/Simulator.d.ts +0 -3
  38. package/dist/src/connection/simulator/Simulator.js +34 -69
  39. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  40. package/dist/src/connection/simulator/SimulatorConnection.js +27 -25
  41. package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -1
  42. package/dist/src/connection/simulator/SimulatorConnector.js +16 -12
  43. package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
  44. package/dist/src/connection/simulator/pings.js.map +1 -1
  45. package/dist/src/connection/webrtc/NodeWebrtcConnection.d.ts +2 -3
  46. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +40 -27
  47. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  48. package/dist/src/connection/webrtc/WebrtcConnector.d.ts +0 -2
  49. package/dist/src/connection/webrtc/WebrtcConnector.js +24 -25
  50. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  51. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +2 -2
  52. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +27 -20
  53. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
  54. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +3 -6
  55. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +2 -5
  56. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
  57. package/dist/src/connection/webrtc/iceServerAsString.js +1 -1
  58. package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
  59. package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +1 -2
  60. package/dist/src/connection/websocket/AutoCertifierClientFacade.js +6 -4
  61. package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -1
  62. package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
  63. package/dist/src/connection/websocket/ClientWebsocket.js +14 -7
  64. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
  65. package/dist/src/connection/websocket/WebsocketConnector.d.ts +3 -9
  66. package/dist/src/connection/websocket/WebsocketConnector.js +142 -74
  67. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  68. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +5 -3
  69. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +9 -12
  70. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
  71. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +4 -7
  72. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +7 -44
  73. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
  74. package/dist/src/connection/websocket/WebsocketServer.d.ts +1 -4
  75. package/dist/src/connection/websocket/WebsocketServer.js +49 -40
  76. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
  77. package/dist/src/connection/websocket/{ServerWebsocket.d.ts → WebsocketServerConnection.d.ts} +8 -4
  78. package/dist/src/connection/websocket/WebsocketServerConnection.js +97 -0
  79. package/dist/src/connection/websocket/WebsocketServerConnection.js.map +1 -0
  80. package/dist/src/dht/DhtNode.d.ts +45 -49
  81. package/dist/src/dht/DhtNode.js +229 -317
  82. package/dist/src/dht/DhtNode.js.map +1 -1
  83. package/dist/src/dht/DhtNodeRpcLocal.d.ts +10 -9
  84. package/dist/src/dht/DhtNodeRpcLocal.js +19 -11
  85. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  86. package/dist/src/dht/DhtNodeRpcRemote.d.ts +15 -10
  87. package/dist/src/dht/DhtNodeRpcRemote.js +38 -21
  88. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
  89. package/dist/src/dht/ExternalApiRpcLocal.d.ts +7 -6
  90. package/dist/src/dht/ExternalApiRpcLocal.js +9 -13
  91. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
  92. package/dist/src/dht/ExternalApiRpcRemote.d.ts +6 -5
  93. package/dist/src/dht/ExternalApiRpcRemote.js +10 -7
  94. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  95. package/dist/src/dht/PeerManager.d.ts +61 -0
  96. package/dist/src/dht/PeerManager.js +288 -0
  97. package/dist/src/dht/PeerManager.js.map +1 -0
  98. package/dist/src/dht/contact/Contact.d.ts +2 -2
  99. package/dist/src/dht/contact/Contact.js +4 -3
  100. package/dist/src/dht/contact/Contact.js.map +1 -1
  101. package/dist/src/dht/contact/ContactList.d.ts +8 -8
  102. package/dist/src/dht/contact/ContactList.js +12 -7
  103. package/dist/src/dht/contact/ContactList.js.map +1 -1
  104. package/dist/src/dht/contact/RandomContactList.d.ts +4 -4
  105. package/dist/src/dht/contact/RandomContactList.js +13 -12
  106. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  107. package/dist/src/dht/contact/RingContactList.d.ts +31 -0
  108. package/dist/src/dht/contact/RingContactList.js +133 -0
  109. package/dist/src/dht/contact/RingContactList.js.map +1 -0
  110. package/dist/src/dht/contact/{Remote.d.ts → RpcRemote.d.ts} +8 -7
  111. package/dist/src/dht/contact/{Remote.js → RpcRemote.js} +16 -13
  112. package/dist/src/dht/contact/RpcRemote.js.map +1 -0
  113. package/dist/src/dht/contact/SortedContactList.d.ts +29 -15
  114. package/dist/src/dht/contact/SortedContactList.js +79 -42
  115. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  116. package/dist/src/dht/contact/ringIdentifiers.d.ts +16 -0
  117. package/dist/src/dht/contact/ringIdentifiers.js +54 -0
  118. package/dist/src/dht/contact/ringIdentifiers.js.map +1 -0
  119. package/dist/src/dht/discovery/DiscoverySession.d.ts +8 -18
  120. package/dist/src/dht/discovery/DiscoverySession.js +32 -48
  121. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  122. package/dist/src/dht/discovery/PeerDiscovery.d.ts +16 -12
  123. package/dist/src/dht/discovery/PeerDiscovery.js +82 -39
  124. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  125. package/dist/src/dht/discovery/RingDiscoverySession.d.ts +29 -0
  126. package/dist/src/dht/discovery/RingDiscoverySession.js +123 -0
  127. package/dist/src/dht/discovery/RingDiscoverySession.js.map +1 -0
  128. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +36 -0
  129. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +166 -0
  130. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +1 -0
  131. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.d.ts +14 -0
  132. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js +26 -0
  133. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +1 -0
  134. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.d.ts +6 -0
  135. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js +44 -0
  136. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +1 -0
  137. package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +44 -0
  138. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +187 -0
  139. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +1 -0
  140. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.d.ts +14 -0
  141. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js +20 -0
  142. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js.map +1 -0
  143. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.d.ts +6 -0
  144. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js +21 -0
  145. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js.map +1 -0
  146. package/dist/src/dht/routing/DuplicateDetector.d.ts +2 -4
  147. package/dist/src/dht/routing/DuplicateDetector.js +10 -15
  148. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  149. package/dist/src/dht/routing/Router.d.ts +11 -27
  150. package/dist/src/dht/routing/Router.js +92 -58
  151. package/dist/src/dht/routing/Router.js.map +1 -1
  152. package/dist/src/dht/routing/RouterRpcLocal.d.ts +3 -4
  153. package/dist/src/dht/routing/RouterRpcLocal.js +17 -16
  154. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
  155. package/dist/src/dht/routing/RouterRpcRemote.d.ts +3 -3
  156. package/dist/src/dht/routing/RouterRpcRemote.js +29 -20
  157. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  158. package/dist/src/dht/routing/RoutingSession.d.ts +29 -21
  159. package/dist/src/dht/routing/RoutingSession.js +93 -68
  160. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  161. package/dist/src/dht/routing/RoutingTablesCache.d.ts +24 -0
  162. package/dist/src/dht/routing/RoutingTablesCache.js +46 -0
  163. package/dist/src/dht/routing/RoutingTablesCache.js.map +1 -0
  164. package/dist/src/dht/routing/getPreviousPeer.js.map +1 -1
  165. package/dist/src/dht/store/LocalDataStore.d.ts +9 -14
  166. package/dist/src/dht/store/LocalDataStore.js +46 -72
  167. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  168. package/dist/src/dht/store/StoreManager.d.ts +33 -0
  169. package/dist/src/dht/store/StoreManager.js +182 -0
  170. package/dist/src/dht/store/StoreManager.js.map +1 -0
  171. package/dist/src/dht/store/StoreRpcLocal.d.ts +11 -41
  172. package/dist/src/dht/store/StoreRpcLocal.js +27 -234
  173. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  174. package/dist/src/dht/store/StoreRpcRemote.d.ts +6 -7
  175. package/dist/src/dht/store/StoreRpcRemote.js +10 -20
  176. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
  177. package/dist/src/exports.d.ts +5 -3
  178. package/dist/src/exports.js +10 -8
  179. package/dist/src/exports.js.map +1 -1
  180. package/dist/src/helpers/AddressTools.js +2 -0
  181. package/dist/src/helpers/AddressTools.js.map +1 -1
  182. package/dist/src/helpers/Connectivity.js.map +1 -1
  183. package/dist/src/helpers/MapWithTtl.d.ts +14 -0
  184. package/dist/src/helpers/MapWithTtl.js +60 -0
  185. package/dist/src/helpers/MapWithTtl.js.map +1 -0
  186. package/dist/src/helpers/createPeerDescriptor.d.ts +3 -0
  187. package/dist/src/helpers/createPeerDescriptor.js +57 -0
  188. package/dist/src/helpers/createPeerDescriptor.js.map +1 -0
  189. package/dist/src/helpers/createPeerDescriptorSignaturePayload.d.ts +2 -0
  190. package/dist/src/helpers/createPeerDescriptorSignaturePayload.js +30 -0
  191. package/dist/src/helpers/createPeerDescriptorSignaturePayload.js.map +1 -0
  192. package/dist/src/helpers/debugHelpers.js.map +1 -1
  193. package/dist/src/helpers/errors.js +2 -0
  194. package/dist/src/helpers/errors.js.map +1 -1
  195. package/dist/src/helpers/offering.d.ts +4 -0
  196. package/dist/src/helpers/offering.js +18 -0
  197. package/dist/src/helpers/offering.js.map +1 -0
  198. package/dist/src/helpers/protoClasses.js +2 -3
  199. package/dist/src/helpers/protoClasses.js.map +1 -1
  200. package/dist/src/helpers/protoToString.js.map +1 -1
  201. package/dist/src/helpers/version.d.ts +6 -0
  202. package/dist/src/helpers/version.js +38 -0
  203. package/dist/src/helpers/version.js.map +1 -0
  204. package/dist/src/identifiers.d.ts +10 -0
  205. package/dist/src/identifiers.js +31 -0
  206. package/dist/src/identifiers.js.map +1 -0
  207. package/dist/src/proto/google/protobuf/any.js +8 -8
  208. package/dist/src/proto/google/protobuf/any.js.map +1 -1
  209. package/dist/src/proto/google/protobuf/empty.js +2 -4
  210. package/dist/src/proto/google/protobuf/empty.js.map +1 -1
  211. package/dist/src/proto/google/protobuf/timestamp.js +10 -10
  212. package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
  213. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +46 -49
  214. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +63 -54
  215. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  216. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +226 -232
  217. package/dist/src/proto/packages/dht/protos/DhtRpc.js +146 -168
  218. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  219. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -29
  220. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
  221. package/dist/src/rpc-protocol/DhtCallContext.d.ts +2 -2
  222. package/dist/src/rpc-protocol/DhtCallContext.js +8 -0
  223. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
  224. package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +2 -1
  225. package/dist/src/transport/ITransport.d.ts +10 -2
  226. package/dist/src/transport/ITransport.js +5 -0
  227. package/dist/src/transport/ITransport.js.map +1 -1
  228. package/dist/src/transport/ListeningRpcCommunicator.js +3 -1
  229. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  230. package/dist/src/transport/RoutingRpcCommunicator.d.ts +4 -2
  231. package/dist/src/transport/RoutingRpcCommunicator.js +19 -12
  232. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  233. package/jest.config.js +4 -1
  234. package/karma-setup.js +2 -0
  235. package/karma.config.js +13 -9
  236. package/package.json +16 -13
  237. package/protos/DhtRpc.proto +76 -76
  238. package/src/connection/Connection.ts +6 -1
  239. package/src/connection/ConnectionLockHandler.ts +30 -22
  240. package/src/connection/ConnectionLockRpcLocal.ts +7 -12
  241. package/src/connection/ConnectionLockRpcRemote.ts +9 -19
  242. package/src/connection/ConnectionManager.ts +132 -138
  243. package/src/connection/ConnectorFacade.ts +10 -9
  244. package/src/connection/Handshaker.ts +23 -11
  245. package/src/connection/IConnection.ts +2 -8
  246. package/src/connection/ManagedConnection.ts +34 -35
  247. package/src/connection/connectivityChecker.ts +109 -0
  248. package/src/connection/connectivityRequestHandler.ts +103 -0
  249. package/src/connection/simulator/Simulator.ts +6 -37
  250. package/src/connection/simulator/SimulatorConnection.ts +23 -25
  251. package/src/connection/simulator/SimulatorConnector.ts +11 -11
  252. package/src/connection/webrtc/BrowserWebrtcConnection.ts +17 -25
  253. package/src/connection/webrtc/NodeWebrtcConnection.ts +24 -26
  254. package/src/connection/webrtc/WebrtcConnector.ts +18 -29
  255. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +29 -24
  256. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +4 -14
  257. package/src/connection/webrtc/iceServerAsString.ts +1 -1
  258. package/src/connection/websocket/AutoCertifierClientFacade.ts +4 -6
  259. package/src/connection/websocket/ClientWebsocket.ts +10 -4
  260. package/src/connection/websocket/WebsocketConnector.ts +120 -97
  261. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +13 -15
  262. package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +7 -27
  263. package/src/connection/websocket/WebsocketServer.ts +50 -53
  264. package/src/connection/websocket/WebsocketServerConnection.ts +104 -0
  265. package/src/dht/DhtNode.ts +289 -410
  266. package/src/dht/DhtNodeRpcLocal.ts +25 -17
  267. package/src/dht/DhtNodeRpcRemote.ts +43 -27
  268. package/src/dht/ExternalApiRpcLocal.ts +30 -17
  269. package/src/dht/ExternalApiRpcRemote.ts +14 -11
  270. package/src/dht/PeerManager.ts +339 -0
  271. package/src/dht/contact/Contact.ts +4 -4
  272. package/src/dht/contact/ContactList.ts +11 -10
  273. package/src/dht/contact/RandomContactList.ts +15 -15
  274. package/src/dht/contact/RingContactList.ts +151 -0
  275. package/src/dht/contact/{Remote.ts → RpcRemote.ts} +16 -19
  276. package/src/dht/contact/SortedContactList.ts +120 -72
  277. package/src/dht/contact/ringIdentifiers.ts +62 -0
  278. package/src/dht/discovery/DiscoverySession.ts +36 -61
  279. package/src/dht/discovery/PeerDiscovery.ts +98 -43
  280. package/src/dht/discovery/RingDiscoverySession.ts +160 -0
  281. package/src/dht/recursive-operation/RecursiveOperationManager.ts +246 -0
  282. package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +34 -0
  283. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +43 -0
  284. package/src/dht/recursive-operation/RecursiveOperationSession.ts +232 -0
  285. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +35 -0
  286. package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +30 -0
  287. package/src/dht/routing/DuplicateDetector.ts +9 -21
  288. package/src/dht/routing/Router.ts +95 -92
  289. package/src/dht/routing/RouterRpcLocal.ts +16 -18
  290. package/src/dht/routing/RouterRpcRemote.ts +26 -24
  291. package/src/dht/routing/RoutingSession.ts +119 -98
  292. package/src/dht/routing/RoutingTablesCache.ts +58 -0
  293. package/src/dht/routing/getPreviousPeer.ts +1 -1
  294. package/src/dht/store/LocalDataStore.ts +47 -77
  295. package/src/dht/store/StoreManager.ts +209 -0
  296. package/src/dht/store/StoreRpcLocal.ts +39 -308
  297. package/src/dht/store/StoreRpcRemote.ts +13 -31
  298. package/src/exports.ts +13 -3
  299. package/src/helpers/AddressTools.ts +2 -0
  300. package/src/helpers/MapWithTtl.ts +71 -0
  301. package/src/helpers/createPeerDescriptor.ts +57 -0
  302. package/src/helpers/createPeerDescriptorSignaturePayload.ts +28 -0
  303. package/src/helpers/offering.ts +15 -0
  304. package/src/helpers/protoClasses.ts +4 -6
  305. package/src/helpers/version.ts +32 -0
  306. package/src/identifiers.ts +29 -0
  307. package/src/proto/google/protobuf/any.ts +4 -4
  308. package/src/proto/google/protobuf/empty.ts +2 -4
  309. package/src/proto/google/protobuf/timestamp.ts +4 -4
  310. package/src/proto/packages/dht/protos/DhtRpc.client.ts +65 -68
  311. package/src/proto/packages/dht/protos/DhtRpc.server.ts +27 -30
  312. package/src/proto/packages/dht/protos/DhtRpc.ts +297 -313
  313. package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
  314. package/src/rpc-protocol/DhtCallContext.ts +2 -2
  315. package/src/rpc-protocol/DhtRpcOptions.ts +2 -1
  316. package/src/transport/ITransport.ts +11 -2
  317. package/src/transport/ListeningRpcCommunicator.ts +1 -1
  318. package/src/transport/RoutingRpcCommunicator.ts +21 -14
  319. package/test/RandomGraphSimulation.ts +3 -2
  320. package/test/benchmark/Find.test.ts +13 -28
  321. package/test/benchmark/KademliaCorrectness.test.ts +24 -28
  322. package/test/benchmark/RingCorrectness.test.ts +157 -0
  323. package/test/benchmark/SortedContactListBenchmark.test.ts +151 -0
  324. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
  325. package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +72 -0
  326. package/test/benchmark/kademlia-simulation/Contact.ts +9 -9
  327. package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +11 -11
  328. package/test/benchmark/kademlia-simulation/SimulationNode.ts +29 -25
  329. package/test/data/generateGroundTruthData.ts +7 -6
  330. package/test/end-to-end/Layer0-Layer1.test.ts +11 -15
  331. package/test/end-to-end/Layer0.test.ts +19 -22
  332. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +19 -21
  333. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +26 -28
  334. package/test/end-to-end/Layer0Webrtc.test.ts +19 -19
  335. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +10 -18
  336. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +8 -15
  337. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +2 -2
  338. package/test/end-to-end/WebsocketConnectionRequest.test.ts +8 -9
  339. package/test/end-to-end/memory-leak.test.ts +19 -24
  340. package/test/integration/ConnectionLocking.test.ts +66 -60
  341. package/test/integration/ConnectionManager.test.ts +43 -63
  342. package/test/integration/ConnectivityChecking.test.ts +52 -0
  343. package/test/integration/DhtJoinPeerDiscovery.test.ts +8 -12
  344. package/test/integration/DhtNodeExternalAPI.test.ts +17 -21
  345. package/test/integration/DhtNodeRpcRemote.test.ts +19 -26
  346. package/test/integration/DhtRpc.test.ts +20 -24
  347. package/test/integration/Find.test.ts +10 -12
  348. package/test/integration/Layer1-scale.test.ts +25 -37
  349. package/test/integration/Mock-Layer1-Layer0.test.ts +39 -59
  350. package/test/integration/MultipleEntryPointJoining.test.ts +14 -14
  351. package/test/integration/ReplicateData.test.ts +106 -0
  352. package/test/integration/RouteMessage.test.ts +42 -68
  353. package/test/integration/RouterRpcRemote.test.ts +19 -24
  354. package/test/integration/ScaleDownDht.test.ts +14 -12
  355. package/test/integration/SimultaneousConnections.test.ts +112 -111
  356. package/test/integration/Store.test.ts +43 -27
  357. package/test/integration/StoreAndDelete.test.ts +36 -48
  358. package/test/integration/StoreOnDhtWithThreeNodes.test.ts +59 -0
  359. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +17 -37
  360. package/test/integration/StoreRpcRemote.test.ts +20 -32
  361. package/test/integration/WebrtcConnectionManagement.test.ts +39 -25
  362. package/test/integration/WebrtcConnectorRpc.test.ts +6 -11
  363. package/test/integration/WebsocketConnectionManagement.test.ts +87 -22
  364. package/test/integration/WebsocketConnectorRpc.test.ts +14 -24
  365. package/test/integration/{RpcErrors.test.ts → rpc-connections-over-webrpc.test.ts} +15 -26
  366. package/test/unit/AddressTools.test.ts +4 -0
  367. package/test/unit/ConnectivityHelpers.test.ts +9 -17
  368. package/test/unit/DuplicateDetector.test.ts +8 -5
  369. package/test/unit/LocalDataStore.test.ts +78 -75
  370. package/test/unit/PeerManager.test.ts +33 -0
  371. package/test/unit/RandomContactList.test.ts +12 -9
  372. package/test/unit/RecursiveOperationManager.test.ts +157 -0
  373. package/test/unit/RecursiveOperationSession.test.ts +68 -0
  374. package/test/unit/Router.test.ts +52 -35
  375. package/test/unit/RoutingSession.test.ts +79 -0
  376. package/test/unit/SortedContactList.test.ts +61 -30
  377. package/test/unit/StoreManager.test.ts +138 -0
  378. package/test/unit/WebsocketConnector.test.ts +27 -35
  379. package/test/unit/connectivityRequestHandler.test.ts +104 -0
  380. package/test/unit/createPeerDescriptor.test.ts +69 -0
  381. package/test/unit/customMatchers.test.ts +16 -0
  382. package/test/unit/version.test.ts +18 -0
  383. package/test/utils/FakeTransport.ts +47 -0
  384. package/test/utils/customMatchers.ts +71 -0
  385. package/test/utils/mock/MockRpcCommunicator.ts +7 -0
  386. package/test/utils/mock/Router.ts +13 -3
  387. package/test/utils/mock/Transport.ts +1 -1
  388. package/test/utils/mock/mockDataEntry.ts +38 -0
  389. package/test/utils/utils.ts +104 -107
  390. package/tsconfig.browser.json +2 -1
  391. package/tsconfig.jest.json +4 -2
  392. package/tsconfig.node.json +4 -2
  393. package/dist/src/connection/ConnectivityChecker.d.ts +0 -17
  394. package/dist/src/connection/ConnectivityChecker.js +0 -208
  395. package/dist/src/connection/ConnectivityChecker.js.map +0 -1
  396. package/dist/src/connection/websocket/ServerWebsocket.js +0 -100
  397. package/dist/src/connection/websocket/ServerWebsocket.js.map +0 -1
  398. package/dist/src/dht/contact/Remote.js.map +0 -1
  399. package/dist/src/dht/find/FindRpcLocal.d.ts +0 -14
  400. package/dist/src/dht/find/FindRpcLocal.js +0 -25
  401. package/dist/src/dht/find/FindRpcLocal.js.map +0 -1
  402. package/dist/src/dht/find/FindSession.d.ts +0 -44
  403. package/dist/src/dht/find/FindSession.js +0 -145
  404. package/dist/src/dht/find/FindSession.js.map +0 -1
  405. package/dist/src/dht/find/FindSessionRpcLocal.d.ts +0 -12
  406. package/dist/src/dht/find/FindSessionRpcLocal.js +0 -17
  407. package/dist/src/dht/find/FindSessionRpcLocal.js.map +0 -1
  408. package/dist/src/dht/find/FindSessionRpcRemote.d.ts +0 -6
  409. package/dist/src/dht/find/FindSessionRpcRemote.js +0 -21
  410. package/dist/src/dht/find/FindSessionRpcRemote.js.map +0 -1
  411. package/dist/src/dht/find/Finder.d.ts +0 -49
  412. package/dist/src/dht/find/Finder.js +0 -184
  413. package/dist/src/dht/find/Finder.js.map +0 -1
  414. package/dist/src/dht/routing/FindRpcRemote.d.ts +0 -6
  415. package/dist/src/dht/routing/FindRpcRemote.js +0 -41
  416. package/dist/src/dht/routing/FindRpcRemote.js.map +0 -1
  417. package/dist/src/helpers/PeerID.d.ts +0 -24
  418. package/dist/src/helpers/PeerID.js +0 -78
  419. package/dist/src/helpers/PeerID.js.map +0 -1
  420. package/dist/src/helpers/UUID.d.ts +0 -8
  421. package/dist/src/helpers/UUID.js +0 -36
  422. package/dist/src/helpers/UUID.js.map +0 -1
  423. package/dist/src/helpers/kademliaId.d.ts +0 -1
  424. package/dist/src/helpers/kademliaId.js +0 -14
  425. package/dist/src/helpers/kademliaId.js.map +0 -1
  426. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +0 -6
  427. package/dist/src/helpers/peerIdFromPeerDescriptor.js +0 -23
  428. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +0 -1
  429. package/src/connection/ConnectivityChecker.ts +0 -199
  430. package/src/connection/websocket/ServerWebsocket.ts +0 -114
  431. package/src/dht/find/FindRpcLocal.ts +0 -35
  432. package/src/dht/find/FindSession.ts +0 -178
  433. package/src/dht/find/FindSessionRpcLocal.ts +0 -25
  434. package/src/dht/find/FindSessionRpcRemote.ts +0 -30
  435. package/src/dht/find/Finder.ts +0 -275
  436. package/src/dht/routing/FindRpcRemote.ts +0 -40
  437. package/src/helpers/PeerID.ts +0 -88
  438. package/src/helpers/UUID.ts +0 -35
  439. package/src/helpers/kademliaId.ts +0 -8
  440. package/src/helpers/peerIdFromPeerDescriptor.ts +0 -20
  441. package/test/integration/MigrateData.test.ts +0 -204
  442. package/test/unit/Finder.test.ts +0 -110
  443. package/test/unit/PeerID.test.ts +0 -22
  444. package/test/unit/UUID.test.ts +0 -55
@@ -0,0 +1,106 @@
1
+ /* eslint-disable no-console */
2
+ import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
3
+ import { DhtNode } from '../../src/dht/DhtNode'
4
+ import { createMockConnectionDhtNode, waitNodesReadyForTesting } from '../utils/utils'
5
+ import { SortedContactList } from '../../src/dht/contact/SortedContactList'
6
+ import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
7
+ import { DhtAddress, createRandomDhtAddress, getDhtAddressFromRaw, getNodeIdFromPeerDescriptor } from '../../src/identifiers'
8
+ import { sample } from 'lodash'
9
+ import { DataEntry, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
10
+
11
+ const DATA = createMockDataEntry()
12
+ const NUM_NODES = 100
13
+ const MAX_CONNECTIONS = 80
14
+ const K = 8
15
+ const ENTRY_POINT_INDEX = 0
16
+
17
+ const getDataEntries = (node: DhtNode): DataEntry[] => {
18
+ // @ts-expect-error private field
19
+ const store = node.localDataStore
20
+ return Array.from(store.values(getDhtAddressFromRaw(DATA.key)))
21
+ }
22
+
23
+ describe('Replicate data from node to node in DHT', () => {
24
+
25
+ let nodes: DhtNode[]
26
+ let entryPointDescriptor: PeerDescriptor
27
+ const simulator = new Simulator(LatencyType.FIXED, 20)
28
+
29
+ beforeEach(async () => {
30
+ const entryPoint = await createMockConnectionDhtNode(simulator, createRandomDhtAddress(), K, MAX_CONNECTIONS)
31
+ entryPointDescriptor = entryPoint.getLocalPeerDescriptor()
32
+ await entryPoint.joinDht([entryPointDescriptor])
33
+ nodes = []
34
+ nodes.push(entryPoint)
35
+ for (let i = 1; i < NUM_NODES; i++) {
36
+ const node = await createMockConnectionDhtNode(
37
+ simulator,
38
+ createRandomDhtAddress(),
39
+ K,
40
+ MAX_CONNECTIONS
41
+ )
42
+ nodes.push(node)
43
+ }
44
+ }, 60000)
45
+
46
+ afterEach(async () => {
47
+ await Promise.all(nodes.map(async (node) => await node.stop()))
48
+ }, 60000)
49
+
50
+ afterAll(async () => {
51
+ simulator.stop()
52
+ })
53
+
54
+ it('Data replicates to the closest node no matter where it is stored', async () => {
55
+ // calculate offline which node is closest to the data
56
+ const sortedList = new SortedContactList<DhtNode>({
57
+ referenceId: getDhtAddressFromRaw(DATA.key),
58
+ maxSize: 10000,
59
+ allowToContainReferenceId: true,
60
+ emitEvents: false
61
+ })
62
+ nodes.forEach((node) => sortedList.addContact(node))
63
+
64
+ const closest = sortedList.getAllContacts()
65
+ const successfulStorers = await nodes[0].storeDataToDht(getDhtAddressFromRaw(DATA.key), DATA.data!)
66
+ expect(successfulStorers.length).toBe(1)
67
+
68
+ await Promise.all(
69
+ nodes.map(async (node, i) => {
70
+ if (i !== ENTRY_POINT_INDEX) {
71
+ await node.joinDht([entryPointDescriptor])
72
+ }
73
+ })
74
+ )
75
+ await waitNodesReadyForTesting(nodes)
76
+
77
+ const data = getDataEntries(closest[0])
78
+ expect(data).toHaveLength(1)
79
+ expectEqualData(data[0], DATA)
80
+ }, 180000)
81
+
82
+ it('Data replicates to the other nodes when storers are stopped', async () => {
83
+ await Promise.all(
84
+ nodes.map(async (node, i) => {
85
+ if (i !== ENTRY_POINT_INDEX) {
86
+ await node.joinDht([entryPointDescriptor])
87
+ }
88
+ })
89
+ )
90
+ await waitNodesReadyForTesting(nodes)
91
+
92
+ const randomIndex = Math.floor(Math.random() * nodes.length)
93
+ const storerDescriptors = await nodes[randomIndex].storeDataToDht(getDhtAddressFromRaw(DATA.key), DATA.data!)
94
+ const stoppedNodeIds: DhtAddress[] = []
95
+ await Promise.all(storerDescriptors.map(async (storerDescriptor) => {
96
+ const storer = nodes.find((n) => n.getNodeId() === getNodeIdFromPeerDescriptor(storerDescriptor))!
97
+ await storer.stop()
98
+ stoppedNodeIds.push(storer.getNodeId())
99
+ }))
100
+
101
+ const randomNonStoppedNode = sample(nodes.filter((n) => !stoppedNodeIds.includes(n.getNodeId())))!
102
+ const data = await randomNonStoppedNode.fetchDataFromDht(getDhtAddressFromRaw(DATA.key))
103
+ expect(data).toHaveLength(1)
104
+ expectEqualData(data[0], DATA)
105
+ }, 180000)
106
+ })
@@ -1,17 +1,20 @@
1
1
  import { DhtNode, Events as DhtNodeEvents } from '../../src/dht/DhtNode'
2
- import { Message, MessageType, NodeType, PeerDescriptor, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
2
+ import { Message, NodeType, PeerDescriptor, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
3
3
  import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
4
4
  import { Logger, runAndWaitForEvents3, waitForCondition } from '@streamr/utils'
5
5
  import { createMockConnectionDhtNode, createWrappedClosestPeersRequest } from '../utils/utils'
6
- import { PeerID } from '../../src/helpers/PeerID'
7
6
  import { Simulator } from '../../src/connection/simulator/Simulator'
8
7
  import { v4 } from 'uuid'
9
8
  import { Any } from '../../src/proto/google/protobuf/any'
10
9
  import { RoutingMode } from '../../src/dht/routing/RoutingSession'
10
+ import { DhtAddress, createRandomDhtAddress, getRawFromDhtAddress } from '../../src/identifiers'
11
11
 
12
12
  const logger = new Logger(module)
13
13
 
14
+ const NUM_NODES = 30
15
+
14
16
  describe('Route Message With Mock Connections', () => {
17
+
15
18
  let entryPoint: DhtNode
16
19
  let sourceNode: DhtNode
17
20
  let destinationNode: DhtNode
@@ -19,29 +22,21 @@ describe('Route Message With Mock Connections', () => {
19
22
  let simulator: Simulator
20
23
  let entryPointDescriptor: PeerDescriptor
21
24
 
22
- const entryPointId = '0'
23
- const sourceId = 'eeeeeeeee'
24
- const destinationId = '000000000'
25
- const NUM_NODES = 30
26
-
27
- const receiveMatrix: Array<Array<number>> = []
28
-
29
25
  beforeEach(async () => {
30
26
  routerNodes = []
31
27
  simulator = new Simulator()
32
- entryPoint = await createMockConnectionDhtNode(entryPointId, simulator)
28
+ entryPoint = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
33
29
 
34
30
  entryPointDescriptor = {
35
- kademliaId: entryPoint.getNodeId().value,
31
+ nodeId: getRawFromDhtAddress(entryPoint.getNodeId()),
36
32
  type: NodeType.NODEJS
37
33
  }
38
34
 
39
- sourceNode = await createMockConnectionDhtNode(sourceId, simulator)
40
- destinationNode = await createMockConnectionDhtNode(destinationId, simulator)
35
+ sourceNode = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
36
+ destinationNode = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
41
37
 
42
38
  for (let i = 1; i < NUM_NODES; i++) {
43
- const nodeId = `${i}`
44
- const node = await createMockConnectionDhtNode(nodeId, simulator)
39
+ const node = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
45
40
  routerNodes.push(node)
46
41
  }
47
42
 
@@ -69,7 +64,6 @@ describe('Route Message With Mock Connections', () => {
69
64
  const message: Message = {
70
65
  serviceId: 'unknown',
71
66
  messageId: v4(),
72
- messageType: MessageType.RPC,
73
67
  body: {
74
68
  oneofKind: 'rpcMessage',
75
69
  rpcMessage: rpcWrapper
@@ -81,29 +75,28 @@ describe('Route Message With Mock Connections', () => {
81
75
  await runAndWaitForEvents3<DhtNodeEvents>([() => {
82
76
  sourceNode.router!.doRouteMessage({
83
77
  message,
84
- destinationPeer: destinationNode.getLocalPeerDescriptor(),
78
+ target: destinationNode.getLocalPeerDescriptor().nodeId,
85
79
  requestId: v4(),
86
80
  sourcePeer: sourceNode.getLocalPeerDescriptor(),
87
81
  reachableThrough: [],
88
- routingPath: []
89
-
82
+ routingPath: [],
83
+ parallelRootNodeIds: []
90
84
  })
91
85
  }], [[destinationNode, 'message']], 20000)
92
86
  }, 30000)
93
87
 
94
88
  it('Receives multiple messages', async () => {
95
- const numOfMessages = 20
89
+ const messageCount = 20
96
90
  let receivedMessages = 0
97
91
  destinationNode.on('message', () => {
98
92
  receivedMessages += 1
99
93
  })
100
94
  const rpcWrapper = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
101
95
 
102
- for (let i = 0; i < numOfMessages; i++) {
96
+ for (let i = 0; i < messageCount; i++) {
103
97
  const message: Message = {
104
98
  serviceId: 'unknown',
105
99
  messageId: v4(),
106
- messageType: MessageType.RPC,
107
100
  body: {
108
101
  oneofKind: 'rpcMessage',
109
102
  rpcMessage: rpcWrapper
@@ -113,53 +106,34 @@ describe('Route Message With Mock Connections', () => {
113
106
  }
114
107
  sourceNode.router!.doRouteMessage({
115
108
  message,
116
- destinationPeer: destinationNode.getLocalPeerDescriptor(),
109
+ target: destinationNode.getLocalPeerDescriptor().nodeId,
117
110
  requestId: v4(),
118
111
  sourcePeer: sourceNode.getLocalPeerDescriptor(),
119
112
  reachableThrough: [],
120
- routingPath: []
113
+ routingPath: [],
114
+ parallelRootNodeIds: []
121
115
  })
122
116
  }
123
- await waitForCondition(() => receivedMessages === numOfMessages)
117
+ await waitForCondition(() => receivedMessages === messageCount)
124
118
  })
125
119
 
126
120
  it('From all to all', async () => {
127
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
128
- for (const i in routerNodes) {
129
- const arr: Array<number> = []
130
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
131
- for (const j in routerNodes) {
132
- arr.push(0)
133
- }
134
- receiveMatrix.push(arr)
135
- }
136
-
137
- const numsOfReceivedMessages: Record<string, number> = {}
121
+ const receivedMessageCounts: Record<DhtAddress, number> = {}
138
122
  routerNodes.forEach((node) => {
139
- numsOfReceivedMessages[node.getNodeId().toKey()] = 0
140
- node.on('message', (msg: Message) => {
141
- numsOfReceivedMessages[node.getNodeId().toKey()] = numsOfReceivedMessages[node.getNodeId().toKey()] + 1
142
- try {
143
- const target = receiveMatrix[parseInt(node.getNodeId().toString()) - 1]
144
- target[parseInt(PeerID.fromValue(msg.sourceDescriptor!.kademliaId).toString()) - 1]++
145
- } catch (e) {
146
- console.error(e)
147
- }
148
- if (parseInt(node.getNodeId().toString()) > routerNodes.length || parseInt(node.getNodeId().toString()) === 0) {
149
- console.error(node.getNodeId().toString())
150
- }
123
+ const key = node.getNodeId()
124
+ receivedMessageCounts[key] = 0
125
+ node.on('message', () => {
126
+ receivedMessageCounts[key] = receivedMessageCounts[key] + 1
151
127
  })
152
- }
153
- )
128
+ })
154
129
  await Promise.all(
155
130
  routerNodes.map(async (node) =>
156
131
  Promise.all(routerNodes.map(async (receiver) => {
157
- if (!node.getNodeId().equals(receiver.getNodeId())) {
132
+ if (node.getNodeId() !== receiver.getNodeId()) {
158
133
  const rpcWrapper = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
159
134
  const message: Message = {
160
135
  serviceId: 'nonexisting_service',
161
136
  messageId: v4(),
162
- messageType: MessageType.RPC,
163
137
  body: {
164
138
  oneofKind: 'rpcMessage',
165
139
  rpcMessage: rpcWrapper
@@ -169,21 +143,21 @@ describe('Route Message With Mock Connections', () => {
169
143
  }
170
144
  node.router!.doRouteMessage({
171
145
  message,
172
- destinationPeer: receiver.getLocalPeerDescriptor(),
146
+ target: receiver.getLocalPeerDescriptor().nodeId,
173
147
  sourcePeer: node.getLocalPeerDescriptor(),
174
148
  requestId: v4(),
175
149
  reachableThrough: [],
176
- routingPath: []
150
+ routingPath: [],
151
+ parallelRootNodeIds: []
177
152
  })
178
153
  }
179
154
  }))
180
155
  )
181
156
  )
182
- await waitForCondition(() => numsOfReceivedMessages[PeerID.fromString('1').toKey()] >= routerNodes.length - 1
183
- , 30000)
157
+ await waitForCondition(() => receivedMessageCounts[routerNodes[0].getNodeId()] >= routerNodes.length - 1, 30000)
184
158
  await Promise.all(
185
- Object.keys(numsOfReceivedMessages).map(async (key) =>
186
- waitForCondition(() => numsOfReceivedMessages[key] >= routerNodes.length - 1, 30000)
159
+ Object.keys(receivedMessageCounts).map(async (key) =>
160
+ waitForCondition(() => receivedMessageCounts[key as DhtAddress] >= routerNodes.length - 1, 30000)
187
161
  )
188
162
  )
189
163
 
@@ -194,22 +168,22 @@ describe('Route Message With Mock Connections', () => {
194
168
  const closestPeersRequestMessage: Message = {
195
169
  serviceId: 'unknown',
196
170
  messageId: v4(),
197
- messageType: MessageType.RPC,
198
171
  body: {
199
172
  oneofKind: 'rpcMessage',
200
173
  rpcMessage: closestPeersRequest
201
174
  },
202
- sourceDescriptor: sourceNode.getLocalPeerDescriptor()!,
203
- targetDescriptor: destinationNode.getLocalPeerDescriptor()!
175
+ sourceDescriptor: sourceNode.getLocalPeerDescriptor(),
176
+ targetDescriptor: destinationNode.getLocalPeerDescriptor()
204
177
  }
205
178
 
206
179
  const routeMessageWrapper: RouteMessageWrapper = {
207
180
  message: closestPeersRequestMessage,
208
- destinationPeer: destinationNode.getLocalPeerDescriptor(),
181
+ target: destinationNode.getLocalPeerDescriptor().nodeId,
209
182
  requestId: v4(),
210
183
  sourcePeer: sourceNode.getLocalPeerDescriptor(),
211
184
  reachableThrough: [entryPointDescriptor],
212
- routingPath: []
185
+ routingPath: [],
186
+ parallelRootNodeIds: []
213
187
  }
214
188
 
215
189
  const rpcMessage: RpcMessage = {
@@ -224,22 +198,22 @@ describe('Route Message With Mock Connections', () => {
224
198
  const requestMessage: Message = {
225
199
  serviceId: 'layer0',
226
200
  messageId: v4(),
227
- messageType: MessageType.RPC,
228
201
  body: {
229
202
  oneofKind: 'rpcMessage',
230
203
  rpcMessage
231
204
  },
232
- sourceDescriptor: sourceNode.getLocalPeerDescriptor()!,
233
- targetDescriptor: entryPoint.getLocalPeerDescriptor()!
205
+ sourceDescriptor: sourceNode.getLocalPeerDescriptor(),
206
+ targetDescriptor: entryPoint.getLocalPeerDescriptor()
234
207
  }
235
208
 
236
209
  const forwardedMessage: RouteMessageWrapper = {
237
210
  message: requestMessage,
238
211
  requestId: v4(),
239
212
  sourcePeer: sourceNode.getLocalPeerDescriptor(),
240
- destinationPeer: entryPoint.getLocalPeerDescriptor()!,
213
+ target: entryPoint.getLocalPeerDescriptor().nodeId,
241
214
  reachableThrough: [],
242
- routingPath: []
215
+ routingPath: [],
216
+ parallelRootNodeIds: []
243
217
  }
244
218
 
245
219
  await runAndWaitForEvents3<DhtNodeEvents>([() => {
@@ -1,24 +1,20 @@
1
- import { RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
1
+ import { RpcCommunicator } from '@streamr/proto-rpc'
2
2
  import { RouterRpcRemote } from '../../src/dht/routing/RouterRpcRemote'
3
- import { Message, MessageType, NodeType, PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
3
+ import { Message, RouteMessageAck, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
4
4
  import { RouterRpcClient } from '../../src/proto/packages/dht/protos/DhtRpc.client'
5
5
  import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
6
- import { createWrappedClosestPeersRequest, generateId, mockRouterRpc } from '../utils/utils'
6
+ import { createMockPeerDescriptor, createWrappedClosestPeersRequest, mockRouterRpc } from '../utils/utils'
7
+ import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
8
+
9
+ const SERVICE_ID = 'test'
7
10
 
8
11
  describe('RemoteRouter', () => {
9
12
 
10
13
  let remoteRouter: RouterRpcRemote
11
- let clientRpcCommunicator: RpcCommunicator
12
- let serverRpcCommunicator: RpcCommunicator
13
- const serviceId = 'test'
14
- const clientPeerDescriptor: PeerDescriptor = {
15
- kademliaId: generateId('client'),
16
- type: NodeType.NODEJS
17
- }
18
- const serverPeerDescriptor: PeerDescriptor = {
19
- kademliaId: generateId('server'),
20
- type: NodeType.NODEJS
21
- }
14
+ let clientRpcCommunicator: RpcCommunicator<DhtCallContext>
15
+ let serverRpcCommunicator: RpcCommunicator<DhtCallContext>
16
+ const clientPeerDescriptor = createMockPeerDescriptor()
17
+ const serverPeerDescriptor = createMockPeerDescriptor()
22
18
 
23
19
  beforeEach(() => {
24
20
  clientRpcCommunicator = new RpcCommunicator()
@@ -30,16 +26,14 @@ describe('RemoteRouter', () => {
30
26
  serverRpcCommunicator.on('outgoingMessage', (message: RpcMessage) => {
31
27
  clientRpcCommunicator.handleIncomingMessage(message)
32
28
  })
33
- const client = toProtoRpcClient(new RouterRpcClient(clientRpcCommunicator.getRpcClientTransport()))
34
- remoteRouter = new RouterRpcRemote(clientPeerDescriptor, serverPeerDescriptor, serviceId, client)
29
+ remoteRouter = new RouterRpcRemote(clientPeerDescriptor, serverPeerDescriptor, clientRpcCommunicator, RouterRpcClient)
35
30
  })
36
31
 
37
32
  it('routeMessage happy path', async () => {
38
33
  const rpcWrapper = createWrappedClosestPeersRequest(clientPeerDescriptor)
39
34
  const routed: Message = {
40
- serviceId,
35
+ serviceId: SERVICE_ID,
41
36
  messageId: 'routed',
42
- messageType: MessageType.RPC,
43
37
  body: {
44
38
  oneofKind: 'rpcMessage',
45
39
  rpcMessage: rpcWrapper
@@ -49,9 +43,10 @@ describe('RemoteRouter', () => {
49
43
  requestId: 'routed',
50
44
  message: routed,
51
45
  sourcePeer: clientPeerDescriptor,
52
- destinationPeer: serverPeerDescriptor,
46
+ target: serverPeerDescriptor.nodeId,
53
47
  reachableThrough: [],
54
- routingPath: []
48
+ routingPath: [],
49
+ parallelRootNodeIds: []
55
50
  })
56
51
  expect(routable).toEqual(true)
57
52
  })
@@ -60,9 +55,8 @@ describe('RemoteRouter', () => {
60
55
  serverRpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage', mockRouterRpc.throwRouteMessageError)
61
56
  const rpcWrapper = createWrappedClosestPeersRequest(clientPeerDescriptor)
62
57
  const routed: Message = {
63
- serviceId,
58
+ serviceId: SERVICE_ID,
64
59
  messageId: 'routed',
65
- messageType: MessageType.RPC,
66
60
  body: {
67
61
  oneofKind: 'rpcMessage',
68
62
  rpcMessage: rpcWrapper
@@ -72,9 +66,10 @@ describe('RemoteRouter', () => {
72
66
  requestId: 'routed',
73
67
  message: routed,
74
68
  sourcePeer: clientPeerDescriptor,
75
- destinationPeer: serverPeerDescriptor,
69
+ target: serverPeerDescriptor.nodeId,
76
70
  reachableThrough: [],
77
- routingPath: []
71
+ routingPath: [],
72
+ parallelRootNodeIds: []
78
73
  })
79
74
  expect(routable).toEqual(false)
80
75
  })
@@ -2,35 +2,37 @@ import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator
2
2
  import { DhtNode } from '../../src/dht/DhtNode'
3
3
  import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
4
  import { createMockConnectionDhtNode } from '../utils/utils'
5
- import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
6
5
  import { Logger } from '@streamr/utils'
6
+ import { getRandomRegion } from '../../src/connection/simulator/pings'
7
+ import { areEqualPeerDescriptors, createRandomDhtAddress, getNodeIdFromPeerDescriptor, getRawFromDhtAddress } from '../../src/identifiers'
7
8
 
8
9
  const logger = new Logger(module)
9
10
 
11
+ const NUM_NODES = 80
12
+ const MAX_CONNECTIONS = 15
13
+ const K = 2
14
+
10
15
  describe('Scaling down a Dht network', () => {
16
+
11
17
  let entryPoint: DhtNode
12
18
  let nodes: DhtNode[]
13
19
  let entrypointDescriptor: PeerDescriptor
14
20
  const simulator = new Simulator(LatencyType.REAL)
15
- const NUM_NODES = 80
16
- const MAX_CONNECTIONS = 15
17
- const K = 2
18
21
 
19
22
  beforeEach(async () => {
20
23
  nodes = []
21
- const entryPointId = '0'
22
- entryPoint = await createMockConnectionDhtNode(entryPointId, simulator,
23
- undefined, K, MAX_CONNECTIONS)
24
+ entryPoint = await createMockConnectionDhtNode(simulator,
25
+ createRandomDhtAddress(), K, MAX_CONNECTIONS)
24
26
  nodes.push(entryPoint)
25
27
 
26
28
  entrypointDescriptor = {
27
- kademliaId: entryPoint.getNodeId().value,
28
- type: NodeType.NODEJS
29
+ nodeId: getRawFromDhtAddress(entryPoint.getNodeId()),
30
+ type: NodeType.NODEJS,
31
+ region: getRandomRegion()
29
32
  }
30
33
 
31
34
  for (let i = 1; i < NUM_NODES; i++) {
32
- const nodeId = `${i}`
33
- const node = await createMockConnectionDhtNode(nodeId, simulator, undefined, K, MAX_CONNECTIONS)
35
+ const node = await createMockConnectionDhtNode(simulator, undefined, K, MAX_CONNECTIONS)
34
36
  nodes.push(node)
35
37
  }
36
38
  await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
@@ -52,7 +54,7 @@ describe('Scaling down a Dht network', () => {
52
54
  const stoppingPeerDescriptor = nodes[nodeIndex].getLocalPeerDescriptor()
53
55
  await nodes[nodeIndex].stop()
54
56
  const nodeIsCleaned = nodes.every((node) =>
55
- node.getAllConnectionPeerDescriptors().every((peer) => {
57
+ node.getConnections().every((peer) => {
56
58
  if (areEqualPeerDescriptors(peer, stoppingPeerDescriptor)) {
57
59
  logger.error(getNodeIdFromPeerDescriptor(node.getLocalPeerDescriptor()) + ', '
58
60
  + getNodeIdFromPeerDescriptor(stoppingPeerDescriptor) + ' cleaning up failed')