@streamr/dht 100.0.0-pretestnet.4 → 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
@@ -1,46 +1,39 @@
1
1
  import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
2
- import { RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
3
- import { getMockPeers, MockDhtRpc } from '../utils/utils'
2
+ import { RpcCommunicator } from '@streamr/proto-rpc'
3
+ import { createMockDhtRpc, createMockPeerDescriptor, createMockPeers } from '../utils/utils'
4
4
  import {
5
5
  ClosestPeersRequest,
6
6
  ClosestPeersResponse,
7
- NodeType,
8
- PeerDescriptor,
9
7
  PingRequest,
10
8
  PingResponse
11
9
  } from '../../src/proto/packages/dht/protos/DhtRpc'
12
10
  import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
13
- import { DhtNodeRpcClient } from '../../src/proto/packages/dht/protos/DhtRpc.client'
14
- import { generateId } from '../utils/utils'
11
+ import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
12
+ import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
13
+
14
+ const SERVICE_ID = 'test'
15
15
 
16
16
  describe('DhtNodeRpcRemote', () => {
17
17
 
18
18
  let rpcRemote: DhtNodeRpcRemote
19
- let clientRpcCommunicator: RpcCommunicator
20
- let serverRpcCommunicator: RpcCommunicator
21
- const serviceId = 'test'
22
- const clientPeerDescriptor: PeerDescriptor = {
23
- kademliaId: generateId('client'),
24
- type: NodeType.NODEJS
25
- }
26
- const serverPeerDescriptor: PeerDescriptor = {
27
- kademliaId: generateId('server'),
28
- type: NodeType.NODEJS
29
- }
19
+ let clientRpcCommunicator: RpcCommunicator<DhtCallContext>
20
+ let serverRpcCommunicator: RpcCommunicator<DhtCallContext>
21
+ const clientPeerDescriptor = createMockPeerDescriptor()
22
+ const serverPeerDescriptor = createMockPeerDescriptor()
23
+ const mockDhtRpc = createMockDhtRpc(createMockPeers())
30
24
 
31
25
  beforeEach(() => {
32
26
  clientRpcCommunicator = new RpcCommunicator()
33
27
  serverRpcCommunicator = new RpcCommunicator()
34
- serverRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', MockDhtRpc.getClosestPeers)
35
- serverRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', MockDhtRpc.ping)
28
+ serverRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.getClosestPeers)
29
+ serverRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', mockDhtRpc.ping)
36
30
  clientRpcCommunicator.on('outgoingMessage', (message: RpcMessage) => {
37
31
  serverRpcCommunicator.handleIncomingMessage(message)
38
32
  })
39
33
  serverRpcCommunicator.on('outgoingMessage', (message: RpcMessage) => {
40
34
  clientRpcCommunicator.handleIncomingMessage(message)
41
35
  })
42
- const client = toProtoRpcClient(new DhtNodeRpcClient(clientRpcCommunicator.getRpcClientTransport()))
43
- rpcRemote = new DhtNodeRpcRemote(clientPeerDescriptor, serverPeerDescriptor, client, serviceId)
36
+ rpcRemote = new DhtNodeRpcRemote(clientPeerDescriptor, serverPeerDescriptor, SERVICE_ID, clientRpcCommunicator)
44
37
  })
45
38
 
46
39
  afterEach(() => {
@@ -54,19 +47,19 @@ describe('DhtNodeRpcRemote', () => {
54
47
  })
55
48
 
56
49
  it('getClosestPeers happy path', async () => {
57
- const neighbors = await rpcRemote.getClosestPeers(clientPeerDescriptor.kademliaId)
58
- expect(neighbors.length).toEqual(getMockPeers().length)
50
+ const neighbors = await rpcRemote.getClosestPeers(getNodeIdFromPeerDescriptor(clientPeerDescriptor))
51
+ expect(neighbors.length).toEqual(createMockPeers().length)
59
52
  })
60
53
 
61
54
  it('ping error path', async () => {
62
- serverRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', MockDhtRpc.throwPingError)
55
+ serverRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping', mockDhtRpc.throwPingError)
63
56
  const active = await rpcRemote.ping()
64
57
  expect(active).toEqual(false)
65
58
  })
66
59
 
67
60
  it('getClosestPeers error path', async () => {
68
- serverRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', MockDhtRpc.throwGetClosestPeersError)
69
- await expect(rpcRemote.getClosestPeers(clientPeerDescriptor.kademliaId))
61
+ serverRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.throwGetClosestPeersError)
62
+ await expect(rpcRemote.getClosestPeers(getNodeIdFromPeerDescriptor(clientPeerDescriptor)))
70
63
  .rejects.toThrow('Closest peers error')
71
64
  })
72
65
 
@@ -1,26 +1,22 @@
1
- import { getMockPeers, MockDhtRpc } from '../utils/utils'
1
+ import { createMockDhtRpc, createMockPeerDescriptor, createMockPeers } from '../utils/utils'
2
2
  import { ProtoRpcClient, RpcCommunicator, RpcError, toProtoRpcClient } from '@streamr/proto-rpc'
3
3
  import { DhtNodeRpcClient } from '../../src/proto/packages/dht/protos/DhtRpc.client'
4
- import { generateId } from '../utils/utils'
5
- import { ClosestPeersRequest, ClosestPeersResponse, NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
+ import { ClosestPeersRequest, ClosestPeersResponse } from '../../src/proto/packages/dht/protos/DhtRpc'
6
5
  import { wait } from '@streamr/utils'
7
6
  import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
7
+ import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
8
+ import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
8
9
 
9
10
  describe('DhtRpc', () => {
10
- let rpcCommunicator1: RpcCommunicator
11
- let rpcCommunicator2: RpcCommunicator
11
+
12
+ let rpcCommunicator1: RpcCommunicator<DhtCallContext>
13
+ let rpcCommunicator2: RpcCommunicator<DhtCallContext>
12
14
  let client1: ProtoRpcClient<DhtNodeRpcClient>
13
15
  let client2: ProtoRpcClient<DhtNodeRpcClient>
14
-
15
- const peerDescriptor1: PeerDescriptor = {
16
- kademliaId: generateId('peer1'),
17
- type: NodeType.NODEJS
18
- }
19
-
20
- const peerDescriptor2: PeerDescriptor = {
21
- kademliaId: generateId('peer2'),
22
- type: NodeType.NODEJS
23
- }
16
+ const peerDescriptor1 = createMockPeerDescriptor()
17
+ const peerDescriptor2 = createMockPeerDescriptor()
18
+ const neighbors = createMockPeers()
19
+ const mockDhtRpc = createMockDhtRpc(neighbors)
24
20
 
25
21
  const outgoingListener2 = (message: RpcMessage) => {
26
22
  rpcCommunicator1.handleIncomingMessage(message)
@@ -28,10 +24,10 @@ describe('DhtRpc', () => {
28
24
 
29
25
  beforeEach(() => {
30
26
  rpcCommunicator1 = new RpcCommunicator()
31
- rpcCommunicator1.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', MockDhtRpc.getClosestPeers)
27
+ rpcCommunicator1.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.getClosestPeers)
32
28
 
33
29
  rpcCommunicator2 = new RpcCommunicator()
34
- rpcCommunicator2.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', MockDhtRpc.getClosestPeers)
30
+ rpcCommunicator2.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', mockDhtRpc.getClosestPeers)
35
31
 
36
32
  rpcCommunicator1.on('outgoingMessage', (message: RpcMessage) => {
37
33
  rpcCommunicator2.handleIncomingMessage(message)
@@ -50,24 +46,24 @@ describe('DhtRpc', () => {
50
46
 
51
47
  it('Happy path', async () => {
52
48
  const response1 = client1.getClosestPeers(
53
- { kademliaId: peerDescriptor1.kademliaId, requestId: '1' },
49
+ { nodeId: peerDescriptor1.nodeId, requestId: '1' },
54
50
  {
55
51
  sourceDescriptor: peerDescriptor1,
56
52
  targetDescriptor: peerDescriptor2,
57
53
  }
58
54
  )
59
55
  const res1 = await response1
60
- expect(res1.peers).toEqual(getMockPeers())
56
+ expect(res1.peers.map((p) => getNodeIdFromPeerDescriptor(p))).toEqual(neighbors.map((n) => getNodeIdFromPeerDescriptor(n)))
61
57
 
62
58
  const response2 = client2.getClosestPeers(
63
- { kademliaId: peerDescriptor2.kademliaId, requestId: '1' },
59
+ { nodeId: peerDescriptor2.nodeId, requestId: '1' },
64
60
  {
65
61
  sourceDescriptor: peerDescriptor2,
66
62
  targetDescriptor: peerDescriptor1
67
63
  }
68
64
  )
69
65
  const res2 = await response2
70
- expect(res2.peers).toEqual(getMockPeers())
66
+ expect(res2.peers.map((p) => getNodeIdFromPeerDescriptor(p))).toEqual(neighbors.map((n) => getNodeIdFromPeerDescriptor(n)))
71
67
  })
72
68
 
73
69
  it('Default RPC timeout, client side', async () => {
@@ -76,7 +72,7 @@ describe('DhtRpc', () => {
76
72
  await wait(3000)
77
73
  })
78
74
  const response2 = client2.getClosestPeers(
79
- { kademliaId: peerDescriptor2.kademliaId, requestId: '1' },
75
+ { nodeId: peerDescriptor2.nodeId, requestId: '1' },
80
76
  {
81
77
  sourceDescriptor: peerDescriptor2,
82
78
  targetDescriptor: peerDescriptor1
@@ -91,7 +87,7 @@ describe('DhtRpc', () => {
91
87
  let timeout: NodeJS.Timeout
92
88
 
93
89
  async function respondGetClosestPeersWithTimeout(): Promise<ClosestPeersResponse> {
94
- const neighbors = getMockPeers()
90
+ const neighbors = createMockPeers()
95
91
  const response: ClosestPeersResponse = {
96
92
  peers: neighbors,
97
93
  requestId: 'why am i still here'
@@ -102,7 +98,7 @@ describe('DhtRpc', () => {
102
98
 
103
99
  rpcCommunicator2.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers', respondGetClosestPeersWithTimeout)
104
100
  const response = client2.getClosestPeers(
105
- { kademliaId: peerDescriptor2.kademliaId, requestId: '1' },
101
+ { nodeId: peerDescriptor2.nodeId, requestId: '1' },
106
102
  {
107
103
  sourceDescriptor: peerDescriptor2,
108
104
  targetDescriptor: peerDescriptor1
@@ -2,8 +2,10 @@ import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator
2
2
  import { DhtNode } from '../../src/dht/DhtNode'
3
3
  import { PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
4
  import { createMockConnectionDhtNode, waitConnectionManagersReadyForTesting } from '../utils/utils'
5
- import { PeerID } from '../../src/helpers/PeerID'
6
- import { peerIdFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
5
+ import { getDhtAddressFromRaw, getNodeIdFromPeerDescriptor, getRawFromDhtAddress } from '../../src/identifiers'
6
+
7
+ const NUM_NODES = 100
8
+ const K = 8
7
9
 
8
10
  describe('Find correctness', () => {
9
11
 
@@ -11,18 +13,14 @@ describe('Find correctness', () => {
11
13
  let nodes: DhtNode[]
12
14
  let entrypointDescriptor: PeerDescriptor
13
15
  const simulator = new Simulator(LatencyType.REAL)
14
- const NUM_NODES = 100
15
- const K = 2
16
16
 
17
17
  beforeEach(async () => {
18
18
  nodes = []
19
- const entryPointId = '0'
20
- entryPoint = await createMockConnectionDhtNode(entryPointId, simulator, undefined, K)
19
+ entryPoint = await createMockConnectionDhtNode(simulator, undefined, K)
21
20
  nodes.push(entryPoint)
22
21
  entrypointDescriptor = entryPoint.getLocalPeerDescriptor()
23
22
  for (let i = 1; i < NUM_NODES; i++) {
24
- const nodeId = `${i}`
25
- const node = await createMockConnectionDhtNode(nodeId, simulator, undefined, K, 20, 60000)
23
+ const node = await createMockConnectionDhtNode(simulator, undefined, K, 40, 60000)
26
24
  nodes.push(node)
27
25
  }
28
26
  await entryPoint.joinDht([entrypointDescriptor])
@@ -38,10 +36,10 @@ describe('Find correctness', () => {
38
36
  })
39
37
 
40
38
  it('Entrypoint can find a node from the network (exact match)', async () => {
41
- const kademliaIdToFind = nodes[45].getNodeId().value
42
- const results = await entryPoint.startFind(kademliaIdToFind)
43
- expect(results.closestNodes.length).toBeGreaterThanOrEqual(5)
44
- expect(PeerID.fromValue(kademliaIdToFind).equals(peerIdFromPeerDescriptor(results.closestNodes[0])))
39
+ const targetId = getRawFromDhtAddress(nodes[45].getNodeId())
40
+ const closestNodes = await entryPoint.findClosestNodesFromDht(getDhtAddressFromRaw(targetId))
41
+ expect(closestNodes.length).toBeGreaterThanOrEqual(5)
42
+ expect(getDhtAddressFromRaw(targetId)).toEqual(getNodeIdFromPeerDescriptor(closestNodes[0]))
45
43
  }, 30000)
46
44
 
47
45
  })
@@ -1,32 +1,22 @@
1
1
  import { Simulator } from '../../src/connection/simulator/Simulator'
2
- import { PeerID } from '../../src/helpers/PeerID'
3
2
  import { DhtNode } from '../../src/dht/DhtNode'
4
- import { createMockConnectionDhtNode, createMockConnectionLayer1Node } from '../utils/utils'
5
- import { UUID } from '../../src/helpers/UUID'
6
- import { NodeType } from '../../src/proto/packages/dht/protos/DhtRpc'
3
+ import { getDhtAddressFromRaw } from '../../src/identifiers'
4
+ import { createMockConnectionDhtNode, createMockConnectionLayer1Node, createMockPeerDescriptor } from '../utils/utils'
7
5
 
6
+ const NODE_COUNT = 48
8
7
  const NUM_OF_NODES_PER_KBUCKET = 8
9
8
 
10
9
  describe('Layer1', () => {
11
10
 
12
11
  let simulator: Simulator
13
- const layer0EntryPointId = new UUID().toString()
14
-
15
- const entryPoint0Descriptor = {
16
- kademliaId: PeerID.fromString(layer0EntryPointId).value,
17
- type: NodeType.NODEJS
18
- }
19
-
12
+ const entryPoint0Descriptor = createMockPeerDescriptor()
20
13
  let layer0EntryPoint: DhtNode
21
-
22
- const NODE_COUNT = 48
23
14
  let nodes: DhtNode[]
24
-
25
15
  let layer1CleanUp: DhtNode[]
26
16
 
27
17
  beforeEach(async () => {
28
18
  simulator = new Simulator()
29
- layer0EntryPoint = await createMockConnectionDhtNode(layer0EntryPointId, simulator)
19
+ layer0EntryPoint = await createMockConnectionDhtNode(simulator, getDhtAddressFromRaw(entryPoint0Descriptor.nodeId))
30
20
  await layer0EntryPoint.joinDht([entryPoint0Descriptor])
31
21
 
32
22
  nodes = []
@@ -34,7 +24,6 @@ describe('Layer1', () => {
34
24
 
35
25
  for (let i = 0; i < NODE_COUNT; i++) {
36
26
  const node = await createMockConnectionDhtNode(
37
- new UUID().toString(),
38
27
  simulator,
39
28
  undefined,
40
29
  undefined,
@@ -56,14 +45,14 @@ describe('Layer1', () => {
56
45
  })
57
46
 
58
47
  it('single layer1 dht', async () => {
59
- const layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint.getNodeId().toString(), layer0EntryPoint)
48
+ const layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint)
60
49
  await layer1EntryPoint.joinDht([entryPoint0Descriptor])
61
50
  layer1CleanUp.push(layer1EntryPoint)
62
51
 
63
52
  const layer1Nodes: DhtNode[] = []
64
53
  for (let i = 0; i < NODE_COUNT; i++) {
65
54
  const layer0 = nodes[i]
66
- const layer1 = await createMockConnectionLayer1Node(layer0.getNodeId().toString(), layer0, undefined, NUM_OF_NODES_PER_KBUCKET)
55
+ const layer1 = await createMockConnectionLayer1Node(layer0, undefined, NUM_OF_NODES_PER_KBUCKET)
67
56
  layer1Nodes.push(layer1)
68
57
  layer1CleanUp.push(layer1)
69
58
  }
@@ -73,24 +62,24 @@ describe('Layer1', () => {
73
62
  for (let i = 0; i < NODE_COUNT; i++) {
74
63
  const layer0Node = nodes[i]
75
64
  const layer1Node = layer1Nodes[i]
76
- expect(layer1Node.getNodeId().equals(layer0Node.getNodeId())).toEqual(true)
77
- expect(layer1Node.getNumberOfConnections()).toEqual(layer0Node.getNumberOfConnections())
78
- expect(layer1Node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
79
- expect(layer1Node.getAllConnectionPeerDescriptors()).toEqual(layer0Node.getAllConnectionPeerDescriptors())
65
+ expect(layer1Node.getNodeId()).toEqual(layer0Node.getNodeId())
66
+ expect(layer1Node.getConnectionCount()).toEqual(layer0Node.getConnectionCount())
67
+ expect(layer1Node.getNeighborCount()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
68
+ expect(layer1Node.getConnections()).toEqual(layer0Node.getConnections())
80
69
  }
81
70
  }, 120000)
82
71
 
83
72
  it('multiple layer1 dht', async () => {
84
- const stream1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint.getNodeId().toString(), layer0EntryPoint, 'one')
73
+ const stream1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'one')
85
74
  await stream1EntryPoint.joinDht([entryPoint0Descriptor])
86
75
 
87
- const stream2EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint.getNodeId().toString(), layer0EntryPoint, 'two')
76
+ const stream2EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'two')
88
77
  await stream2EntryPoint.joinDht([entryPoint0Descriptor])
89
78
 
90
- const stream3EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint.getNodeId().toString(), layer0EntryPoint, 'three')
79
+ const stream3EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'three')
91
80
  await stream3EntryPoint.joinDht([entryPoint0Descriptor])
92
81
 
93
- const stream4EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint.getNodeId().toString(), layer0EntryPoint, 'four')
82
+ const stream4EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'four')
94
83
  await stream4EntryPoint.joinDht([entryPoint0Descriptor])
95
84
 
96
85
  layer1CleanUp.push(stream1EntryPoint)
@@ -105,10 +94,10 @@ describe('Layer1', () => {
105
94
 
106
95
  for (let i = 0; i < NODE_COUNT; i++) {
107
96
  const layer0 = nodes[i]
108
- const one = await createMockConnectionLayer1Node(layer0.getNodeId().toString(), layer0, 'one')
109
- const two = await createMockConnectionLayer1Node(layer0.getNodeId().toString(), layer0, 'two')
110
- const three = await createMockConnectionLayer1Node(layer0.getNodeId().toString(), layer0, 'three')
111
- const four = await createMockConnectionLayer1Node(layer0.getNodeId().toString(), layer0, 'four')
97
+ const one = await createMockConnectionLayer1Node(layer0, 'one')
98
+ const two = await createMockConnectionLayer1Node(layer0, 'two')
99
+ const three = await createMockConnectionLayer1Node(layer0, 'three')
100
+ const four = await createMockConnectionLayer1Node(layer0, 'four')
112
101
 
113
102
  stream1.push(one)
114
103
  stream2.push(two)
@@ -130,10 +119,10 @@ describe('Layer1', () => {
130
119
  const stream3Node = stream3[i]
131
120
  const stream4Node = stream4[i]
132
121
 
133
- expect(layer0Node.getNumberOfConnections()).toEqual(stream1Node.getNumberOfConnections())
134
- expect(layer0Node.getNumberOfConnections()).toEqual(stream2Node.getNumberOfConnections())
135
- expect(layer0Node.getNumberOfConnections()).toEqual(stream3Node.getNumberOfConnections())
136
- expect(layer0Node.getNumberOfConnections()).toEqual(stream4Node.getNumberOfConnections())
122
+ expect(layer0Node.getConnectionCount()).toEqual(stream1Node.getConnectionCount())
123
+ expect(layer0Node.getConnectionCount()).toEqual(stream2Node.getConnectionCount())
124
+ expect(layer0Node.getConnectionCount()).toEqual(stream3Node.getConnectionCount())
125
+ expect(layer0Node.getConnectionCount()).toEqual(stream4Node.getConnectionCount())
137
126
 
138
127
  }
139
128
  }, 120000)
@@ -155,7 +144,7 @@ describe('Layer1', () => {
155
144
  // layer1CleanUp.push(layer1)
156
145
  // receivedMessages.set(layer0.getNodeId().toKey(), new Set())
157
146
  // layer1.on('message', (msg: Message) => {
158
- // const peerId = PeerID.fromValue(msg.sourceDescriptor!.kademliaId)
147
+ // const peerId = PeerID.fromValue(msg.sourceDescriptor!.nodeId)
159
148
  // receivedMessages.get(layer0.getNodeId().toKey())!.add(peerId.toKey())
160
149
  // })
161
150
  // }
@@ -170,7 +159,6 @@ describe('Layer1', () => {
170
159
  // const message: Message = {
171
160
  // serviceId: 'service',
172
161
  // messageId: v4(),
173
- // messageType: MessageType.RPC,
174
162
  // body: {
175
163
  // oneofKind: 'rpcMessage',
176
164
  // rpcMessage: rpcWrapper
@@ -180,7 +168,7 @@ describe('Layer1', () => {
180
168
  // }
181
169
  // await sender.doRouteMessage({
182
170
  // message,
183
- // destinationPeer: receiver.getPeerDescriptor(),
171
+ // target: receiver.getPeerDescriptor().nodeId,
184
172
  // sourcePeer: sender.getPeerDescriptor(),
185
173
  // requestId: v4(),
186
174
  // reachableThrough: [],
@@ -1,62 +1,42 @@
1
1
  import { Logger } from '@streamr/utils'
2
2
  import { Simulator } from '../../src/connection/simulator/Simulator'
3
3
  import { DhtNode } from '../../src/dht/DhtNode'
4
- import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
5
4
  import { createMockConnectionDhtNode, createMockConnectionLayer1Node } from '../utils/utils'
5
+ import { createRandomDhtAddress } from '../../src/identifiers'
6
6
 
7
7
  const logger = new Logger(module)
8
8
 
9
9
  describe('Layer 1 on Layer 0 with mocked connections', () => {
10
- const simulator = new Simulator()
11
- const layer0EntryPointId = 'layer0entrypoint'
12
10
 
11
+ const simulator = new Simulator()
13
12
  let layer0EntryPoint: DhtNode
14
13
  let layer1Node1: DhtNode
15
-
16
14
  let layer0Node1: DhtNode
17
15
  let layer1EntryPoint: DhtNode
18
-
19
16
  let layer0Node2: DhtNode
20
17
  let layer1Node2: DhtNode
21
-
22
18
  let layer0Node3: DhtNode
23
19
  let layer1Node3: DhtNode
24
-
25
20
  let layer0Node4: DhtNode
26
21
  let layer1Node4: DhtNode
27
22
 
28
- let entryPointDescriptor: PeerDescriptor
29
-
30
23
  beforeEach(async () => {
31
24
 
32
- layer0EntryPoint = await createMockConnectionDhtNode(layer0EntryPointId, simulator)
33
-
34
- const layer0Node1Id = 'node1'
35
- layer0Node1 = await createMockConnectionDhtNode(layer0Node1Id, simulator)
25
+ layer0EntryPoint = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
26
+ layer0Node1 = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
27
+ layer0Node2 = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
28
+ layer0Node3 = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
29
+ layer0Node4 = await createMockConnectionDhtNode(simulator, createRandomDhtAddress())
36
30
 
37
- const layer0Node2Id = 'node2'
38
- layer0Node2 = await createMockConnectionDhtNode(layer0Node2Id, simulator)
31
+ layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint)
39
32
 
40
- const layer0Node3Id = 'node3'
41
- layer0Node3 = await createMockConnectionDhtNode(layer0Node3Id, simulator)
33
+ layer1Node1 = await createMockConnectionLayer1Node(layer0Node1)
34
+ layer1Node2 = await createMockConnectionLayer1Node(layer0Node2)
35
+ layer1Node3 = await createMockConnectionLayer1Node(layer0Node3)
36
+ layer1Node4 = await createMockConnectionLayer1Node(layer0Node4)
42
37
 
43
- const layer0Node4Id = 'node4'
44
- layer0Node4 = await createMockConnectionDhtNode(layer0Node4Id, simulator)
45
-
46
- layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPointId, layer0EntryPoint)
47
-
48
- layer1Node1 = await createMockConnectionLayer1Node(layer0Node1Id, layer0Node1)
49
- layer1Node2 = await createMockConnectionLayer1Node(layer0Node2Id, layer0Node2)
50
- layer1Node3 = await createMockConnectionLayer1Node(layer0Node3Id, layer0Node3)
51
- layer1Node4 = await createMockConnectionLayer1Node(layer0Node4Id, layer0Node4)
52
-
53
- entryPointDescriptor = {
54
- kademliaId: layer0EntryPoint.getNodeId().value,
55
- type: NodeType.NODEJS
56
- }
57
-
58
- await layer0EntryPoint.joinDht([entryPointDescriptor])
59
- await layer1EntryPoint.joinDht([entryPointDescriptor])
38
+ await layer0EntryPoint.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
39
+ await layer1EntryPoint.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
60
40
  })
61
41
 
62
42
  afterEach(async () => {
@@ -75,31 +55,31 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
75
55
  })
76
56
 
77
57
  it('Happy Path', async () => {
78
- await layer0Node1.joinDht([entryPointDescriptor])
79
- await layer0Node2.joinDht([entryPointDescriptor])
80
- await layer0Node3.joinDht([entryPointDescriptor])
81
- await layer0Node4.joinDht([entryPointDescriptor])
82
-
83
- await layer1Node1.joinDht([entryPointDescriptor])
84
- await layer1Node2.joinDht([entryPointDescriptor])
85
- await layer1Node3.joinDht([entryPointDescriptor])
86
- await layer1Node4.joinDht([entryPointDescriptor])
87
-
88
- logger.info('layer1EntryPoint.getBucketSize() ' + layer1EntryPoint.getBucketSize())
89
- logger.info('layer1Node1.getBucketSize()' + layer1Node1.getBucketSize())
90
- logger.info('layer1Node2.getBucketSize()' + layer1Node2.getBucketSize())
91
- logger.info('layer1Node3.getBucketSize()' + layer1Node3.getBucketSize())
92
- logger.info('layer1Node4.getBucketSize()' + layer1Node4.getBucketSize())
93
-
94
- expect(layer1Node1.getBucketSize()).toEqual(layer0Node1.getBucketSize())
95
- expect(layer1Node2.getBucketSize()).toEqual(layer0Node2.getBucketSize())
96
- expect(layer1Node3.getBucketSize()).toEqual(layer0Node3.getBucketSize())
97
- expect(layer1Node4.getBucketSize()).toEqual(layer0Node4.getBucketSize())
98
-
99
- expect(layer1Node1.getKBucketPeers()).toContainValues(layer0Node1.getKBucketPeers())
100
- expect(layer1Node2.getKBucketPeers()).toContainValues(layer0Node2.getKBucketPeers())
101
- expect(layer1Node3.getKBucketPeers()).toContainValues(layer0Node3.getKBucketPeers())
102
- expect(layer1Node4.getKBucketPeers()).toContainValues(layer0Node4.getKBucketPeers())
58
+ await layer0Node1.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
59
+ await layer0Node2.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
60
+ await layer0Node3.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
61
+ await layer0Node4.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
62
+
63
+ await layer1Node1.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
64
+ await layer1Node2.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
65
+ await layer1Node3.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
66
+ await layer1Node4.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
67
+
68
+ logger.info('layer1EntryPoint.getNeighborCount() ' + layer1EntryPoint.getNeighborCount())
69
+ logger.info('layer1Node1.getNeighborCount()' + layer1Node1.getNeighborCount())
70
+ logger.info('layer1Node2.getNeighborCount()' + layer1Node2.getNeighborCount())
71
+ logger.info('layer1Node3.getNeighborCount()' + layer1Node3.getNeighborCount())
72
+ logger.info('layer1Node4.getNeighborCount()' + layer1Node4.getNeighborCount())
73
+
74
+ expect(layer1Node1.getNeighborCount()).toEqual(layer0Node1.getNeighborCount())
75
+ expect(layer1Node2.getNeighborCount()).toEqual(layer0Node2.getNeighborCount())
76
+ expect(layer1Node3.getNeighborCount()).toEqual(layer0Node3.getNeighborCount())
77
+ expect(layer1Node4.getNeighborCount()).toEqual(layer0Node4.getNeighborCount())
78
+
79
+ expect(layer1Node1.getNeighbors()).toContainValues(layer0Node1.getNeighbors())
80
+ expect(layer1Node2.getNeighbors()).toContainValues(layer0Node2.getNeighbors())
81
+ expect(layer1Node3.getNeighbors()).toContainValues(layer0Node3.getNeighbors())
82
+ expect(layer1Node4.getNeighbors()).toContainValues(layer0Node4.getNeighbors())
103
83
 
104
84
  }, 60000)
105
85
  })
@@ -16,9 +16,9 @@ describe('multiple entry point joining', () => {
16
16
  beforeEach(async () => {
17
17
  simulator = new Simulator(LatencyType.REAL)
18
18
 
19
- node1 = await createMockConnectionDhtNode('node1', simulator)
20
- node2 = await createMockConnectionDhtNode('node2', simulator)
21
- node3 = await createMockConnectionDhtNode('node3', simulator)
19
+ node1 = await createMockConnectionDhtNode(simulator)
20
+ node2 = await createMockConnectionDhtNode(simulator)
21
+ node3 = await createMockConnectionDhtNode(simulator)
22
22
 
23
23
  entryPoints = [
24
24
  node1.getLocalPeerDescriptor(),
@@ -42,9 +42,9 @@ describe('multiple entry point joining', () => {
42
42
  node2.joinDht(entryPoints),
43
43
  node3.joinDht(entryPoints)
44
44
  ])
45
- expect(node1.getBucketSize()).toEqual(2)
46
- expect(node2.getBucketSize()).toEqual(2)
47
- expect(node3.getBucketSize()).toEqual(2)
45
+ expect(node1.getNeighborCount()).toEqual(2)
46
+ expect(node2.getNeighborCount()).toEqual(2)
47
+ expect(node3.getNeighborCount()).toEqual(2)
48
48
  })
49
49
 
50
50
  it('can join even if a node is offline', async () => {
@@ -53,8 +53,8 @@ describe('multiple entry point joining', () => {
53
53
  node1.joinDht(entryPoints),
54
54
  node2.joinDht(entryPoints)
55
55
  ])
56
- expect(node1.getBucketSize()).toEqual(1)
57
- expect(node2.getBucketSize()).toEqual(1)
56
+ expect(node1.getNeighborCount()).toEqual(1)
57
+ expect(node2.getNeighborCount()).toEqual(1)
58
58
  }, 10000)
59
59
  })
60
60
 
@@ -69,11 +69,11 @@ describe('multiple entry point joining', () => {
69
69
  beforeEach(async () => {
70
70
  simulator = new Simulator(LatencyType.REAL)
71
71
 
72
- entryPoint1 = await createMockConnectionDhtNode('entryPoint1', simulator)
73
- entryPoint2 = await createMockConnectionDhtNode('entryPoint2', simulator)
72
+ entryPoint1 = await createMockConnectionDhtNode(simulator)
73
+ entryPoint2 = await createMockConnectionDhtNode(simulator)
74
74
 
75
- node1 = await createMockConnectionDhtNode('node1', simulator)
76
- node2 = await createMockConnectionDhtNode('node2', simulator)
75
+ node1 = await createMockConnectionDhtNode(simulator)
76
+ node2 = await createMockConnectionDhtNode(simulator)
77
77
 
78
78
  entryPoints = [
79
79
  entryPoint1.getLocalPeerDescriptor(),
@@ -96,9 +96,9 @@ describe('multiple entry point joining', () => {
96
96
 
97
97
  it('non-entry point nodes can join', async () => {
98
98
  await node1.joinDht(entryPoints)
99
- expect(node1.getBucketSize()).toEqual(2)
99
+ expect(node1.getNeighborCount()).toEqual(2)
100
100
  await node2.joinDht(entryPoints)
101
- expect(node2.getBucketSize()).toEqual(3)
101
+ expect(node2.getNeighborCount()).toEqual(3)
102
102
  })
103
103
 
104
104
  })