@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
@@ -1,11 +1,23 @@
1
1
  import { MetricsContext, waitForCondition } from '@streamr/utils'
2
2
  import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
3
  import { DefaultConnectorFacade, DefaultConnectorFacadeConfig } from '../../src/connection/ConnectorFacade'
4
- import { Simulator } from '../../src/connection/simulator/Simulator'
4
+ import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
5
5
  import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
6
- import { PeerID } from '../../src/helpers/PeerID'
7
- import { Message, MessageType, NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
6
+ import { Message, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
8
7
  import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
8
+ import { createMockPeerDescriptor } from '../utils/utils'
9
+ import { getRandomRegion } from '../../src/connection/simulator/pings'
10
+ import { MockTransport } from '../utils/mock/Transport'
11
+ import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
12
+
13
+ const BASE_MESSAGE: Message = {
14
+ serviceId: 'serviceId',
15
+ messageId: '1',
16
+ body: {
17
+ oneofKind: 'rpcMessage',
18
+ rpcMessage: RpcMessage.create()
19
+ }
20
+ }
9
21
 
10
22
  const createConnectionManager = (localPeerDescriptor: PeerDescriptor, opts: Omit<DefaultConnectorFacadeConfig, 'createLocalPeerDescriptor'>) => {
11
23
  return new ConnectionManager({
@@ -20,111 +32,92 @@ const createConnectionManager = (localPeerDescriptor: PeerDescriptor, opts: Omit
20
32
  describe('SimultaneousConnections', () => {
21
33
 
22
34
  let simulator: Simulator
23
- let simulatorTransport1: SimulatorTransport
24
- let simulatorTransport2: SimulatorTransport
25
-
26
- const peerDescriptor1 = {
27
- kademliaId: PeerID.fromString('mock1').value,
28
- type: NodeType.NODEJS
29
- }
30
-
31
- const peerDescriptor2 = {
32
- kademliaId: PeerID.fromString('mock2').value,
33
- type: NodeType.NODEJS
34
- }
35
-
36
- const baseMsg: Message = {
37
- serviceId: 'serviceId',
38
- messageType: MessageType.RPC,
39
- messageId: '1',
40
- body: {
41
- oneofKind: 'rpcMessage',
42
- rpcMessage: RpcMessage.create()
43
- }
44
- }
35
+ let simTransport1: SimulatorTransport
36
+ let simTransport2: SimulatorTransport
37
+ const peerDescriptor1 = createMockPeerDescriptor({ region: getRandomRegion() })
38
+ const peerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
45
39
 
46
40
  beforeEach(async () => {
47
- simulator = new Simulator()
48
- simulatorTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
49
- await simulatorTransport1.start()
50
- simulatorTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
51
- await simulatorTransport2.start()
41
+ simulator = new Simulator(LatencyType.REAL)
42
+ simTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
43
+ await simTransport1.start()
44
+ simTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
45
+ await simTransport2.start()
52
46
  })
53
47
 
54
48
  afterEach(async () => {
55
- await simulatorTransport1.stop()
56
- await simulatorTransport2.stop()
49
+ await simTransport1.stop()
50
+ await simTransport2.stop()
57
51
  })
58
52
 
59
53
  it('simultanous simulated connection', async () => {
60
54
  const msg1: Message = {
61
- ...baseMsg,
55
+ ...BASE_MESSAGE,
62
56
  targetDescriptor: peerDescriptor2
63
57
  }
64
58
  const msg2: Message = {
65
- ...baseMsg,
59
+ ...BASE_MESSAGE,
66
60
  targetDescriptor: peerDescriptor1
67
61
  }
68
62
 
69
63
  const promise1 = new Promise<void>((resolve, _reject) => {
70
- simulatorTransport1.on('message', async (message: Message) => {
71
- expect(message.messageType).toBe(MessageType.RPC)
64
+ simTransport1.on('message', async (message: Message) => {
65
+ expect(message.body.oneofKind).toBe('rpcMessage')
72
66
  resolve()
73
67
  })
74
68
  })
75
69
  const promise2 = new Promise<void>((resolve, _reject) => {
76
- simulatorTransport2.on('message', async (message: Message) => {
77
- expect(message.messageType).toBe(MessageType.RPC)
70
+ simTransport2.on('message', async (message: Message) => {
71
+ expect(message.body.oneofKind).toBe('rpcMessage')
78
72
  resolve()
79
73
  })
80
74
  })
81
75
  await Promise.all([
82
76
  promise1,
83
77
  promise2,
84
- simulatorTransport1.send(msg1),
85
- simulatorTransport2.send(msg2)
78
+ simTransport1.send(msg1),
79
+ simTransport2.send(msg2)
86
80
  ])
87
- await waitForCondition(() => simulatorTransport2.hasConnection(peerDescriptor1))
88
- await waitForCondition(() => simulatorTransport1.hasConnection(peerDescriptor2))
81
+ await waitForCondition(() => simTransport2.hasConnection(getNodeIdFromPeerDescriptor(peerDescriptor1)))
82
+ await waitForCondition(() => simTransport1.hasConnection(getNodeIdFromPeerDescriptor(peerDescriptor2)))
89
83
  })
90
84
 
91
85
  describe('Websocket 2 servers', () => {
92
86
 
93
87
  let connectionManager1: ConnectionManager
94
88
  let connectionManager2: ConnectionManager
95
-
96
- const wsPeer1: PeerDescriptor = {
97
- kademliaId: PeerID.fromString('mock1').value,
98
- type: NodeType.NODEJS,
89
+
90
+ const wsPeerDescriptor1 = createMockPeerDescriptor({
99
91
  websocket: {
100
92
  host: '127.0.0.1',
101
93
  port: 43432,
102
94
  tls: false
103
- }
104
- }
95
+ },
96
+ region: getRandomRegion()
97
+ })
105
98
 
106
- const wsPeer2: PeerDescriptor = {
107
- kademliaId: PeerID.fromString('mock2').value,
108
- type: NodeType.NODEJS,
99
+ const wsPeerDescriptor2 = createMockPeerDescriptor({
109
100
  websocket: {
110
101
  host: '127.0.0.1',
111
102
  port: 43433,
112
103
  tls: false
113
- }
114
- }
104
+ },
105
+ region: getRandomRegion()
106
+ })
115
107
 
116
108
  beforeEach(async () => {
109
+
117
110
  const websocketPortRange = { min: 43432, max: 43433 }
118
- connectionManager1 = createConnectionManager(wsPeer1, {
119
- transport: simulatorTransport1,
111
+ connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
112
+ transport: new MockTransport(),
120
113
  websocketPortRange,
121
- entryPoints: [wsPeer1],
114
+ entryPoints: [wsPeerDescriptor1],
122
115
  websocketServerEnableTls: false
123
116
  })
124
- connectionManager2 = createConnectionManager(wsPeer2, {
125
- transport: simulatorTransport2,
117
+ connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
118
+ transport: new MockTransport(),
126
119
  websocketPortRange,
127
- entryPoints: [wsPeer1],
120
+ entryPoints: [wsPeerDescriptor1],
128
121
  websocketServerEnableTls: false
129
122
  })
130
123
  await connectionManager1.start()
@@ -138,23 +131,23 @@ describe('SimultaneousConnections', () => {
138
131
 
139
132
  it('Simultaneous Connections', async () => {
140
133
  const msg1: Message = {
141
- ...baseMsg,
142
- targetDescriptor: wsPeer2
134
+ ...BASE_MESSAGE,
135
+ targetDescriptor: wsPeerDescriptor2
143
136
  }
144
137
  const msg2: Message = {
145
- ...baseMsg,
146
- targetDescriptor: wsPeer1
138
+ ...BASE_MESSAGE,
139
+ targetDescriptor: wsPeerDescriptor1
147
140
  }
148
141
 
149
142
  const promise1 = new Promise<void>((resolve, _reject) => {
150
143
  connectionManager1.on('message', async (message: Message) => {
151
- expect(message.messageType).toBe(MessageType.RPC)
144
+ expect(message.body.oneofKind).toBe('rpcMessage')
152
145
  resolve()
153
146
  })
154
147
  })
155
148
  const promise2 = new Promise<void>((resolve, _reject) => {
156
149
  connectionManager2.on('message', async (message: Message) => {
157
- expect(message.messageType).toBe(MessageType.RPC)
150
+ expect(message.body.oneofKind).toBe('rpcMessage')
158
151
  resolve()
159
152
  })
160
153
  })
@@ -166,40 +159,44 @@ describe('SimultaneousConnections', () => {
166
159
  connectionManager2.send(msg2)
167
160
  ])
168
161
 
169
- await waitForCondition(() => connectionManager1.hasConnection(wsPeer2))
170
- await waitForCondition(() => connectionManager2.hasConnection(wsPeer1))
162
+ await waitForCondition(() => connectionManager1.hasConnection(getNodeIdFromPeerDescriptor(wsPeerDescriptor2)))
163
+ await waitForCondition(() => connectionManager2.hasConnection(getNodeIdFromPeerDescriptor(wsPeerDescriptor1)))
171
164
  })
172
165
  })
173
166
 
174
167
  describe('Websocket 1 server (ConnectionRequests)', () => {
175
-
168
+
169
+ let simTransport1: SimulatorTransport
170
+ let simTransport2: SimulatorTransport
176
171
  let connectionManager1: ConnectionManager
177
172
  let connectionManager2: ConnectionManager
178
173
 
179
- const wsPeer1: PeerDescriptor = {
180
- kademliaId: PeerID.fromString('mock1').value,
181
- type: NodeType.NODEJS,
174
+ const wsPeerDescriptor1 = createMockPeerDescriptor({
182
175
  websocket: {
183
176
  host: '127.0.0.1',
184
177
  port: 43432,
185
178
  tls: false
186
- }
187
- }
179
+ },
180
+ region: getRandomRegion()
181
+ })
188
182
 
189
- const wsPeer2: PeerDescriptor = {
190
- kademliaId: PeerID.fromString('mock2').value,
191
- type: NodeType.NODEJS
192
- }
183
+ const wsPeerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
193
184
 
194
185
  beforeEach(async () => {
195
- connectionManager1 = createConnectionManager(wsPeer1, {
196
- transport: simulatorTransport1,
186
+ simulator = new Simulator(LatencyType.REAL)
187
+ simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
188
+ await simTransport1.start()
189
+ simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
190
+ await simTransport2.start()
191
+
192
+ connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
193
+ transport: simTransport1,
197
194
  websocketPortRange: { min: 43432, max: 43432 },
198
- entryPoints: [wsPeer1],
195
+ entryPoints: [wsPeerDescriptor1],
199
196
  websocketServerEnableTls: false
200
197
  })
201
- connectionManager2 = createConnectionManager(wsPeer2, {
202
- transport: simulatorTransport2
198
+ connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
199
+ transport: simTransport2
203
200
  })
204
201
  await connectionManager1.start()
205
202
  await connectionManager2.start()
@@ -208,27 +205,29 @@ describe('SimultaneousConnections', () => {
208
205
  afterEach(async () => {
209
206
  await connectionManager1.stop()
210
207
  await connectionManager2.stop()
208
+ await simTransport1.stop()
209
+ await simTransport2.stop()
211
210
  })
212
211
 
213
212
  it('Simultaneous Connections', async () => {
214
213
  const msg1: Message = {
215
- ...baseMsg,
216
- targetDescriptor: wsPeer2
214
+ ...BASE_MESSAGE,
215
+ targetDescriptor: wsPeerDescriptor2
217
216
  }
218
217
  const msg2: Message = {
219
- ...baseMsg,
220
- targetDescriptor: wsPeer1
218
+ ...BASE_MESSAGE,
219
+ targetDescriptor: wsPeerDescriptor1
221
220
  }
222
221
 
223
222
  const promise1 = new Promise<void>((resolve, _reject) => {
224
223
  connectionManager1.on('message', async (message: Message) => {
225
- expect(message.messageType).toBe(MessageType.RPC)
224
+ expect(message.body.oneofKind).toBe('rpcMessage')
226
225
  resolve()
227
226
  })
228
227
  })
229
228
  const promise2 = new Promise<void>((resolve, _reject) => {
230
229
  connectionManager2.on('message', async (message: Message) => {
231
- expect(message.messageType).toBe(MessageType.RPC)
230
+ expect(message.body.oneofKind).toBe('rpcMessage')
232
231
  resolve()
233
232
  })
234
233
  })
@@ -240,32 +239,32 @@ describe('SimultaneousConnections', () => {
240
239
  connectionManager2.send(msg2)
241
240
  ])
242
241
 
243
- await waitForCondition(() => connectionManager1.hasConnection(wsPeer2))
244
- await waitForCondition(() => connectionManager2.hasConnection(wsPeer1))
242
+ await waitForCondition(() => connectionManager1.hasConnection(getNodeIdFromPeerDescriptor(wsPeerDescriptor2)))
243
+ await waitForCondition(() => connectionManager2.hasConnection(getNodeIdFromPeerDescriptor(wsPeerDescriptor1)))
245
244
  })
246
245
  })
247
246
 
248
247
  describe('WebRTC', () => {
249
248
 
249
+ let simTransport1: SimulatorTransport
250
+ let simTransport2: SimulatorTransport
250
251
  let connectionManager1: ConnectionManager
251
252
  let connectionManager2: ConnectionManager
252
253
 
253
- const wrtcPeer1: PeerDescriptor = {
254
- kademliaId: PeerID.fromString('mock1').value,
255
- type: NodeType.NODEJS
256
- }
257
-
258
- const wrtcPeer2: PeerDescriptor = {
259
- kademliaId: PeerID.fromString('mock2').value,
260
- type: NodeType.NODEJS
261
- }
254
+ const wrtcPeerDescriptor1 = createMockPeerDescriptor({ region: getRandomRegion() })
255
+ const wrtcPeerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
262
256
 
263
257
  beforeEach(async () => {
264
- connectionManager1 = createConnectionManager(wrtcPeer1, {
265
- transport: simulatorTransport1,
258
+ simulator = new Simulator(LatencyType.REAL)
259
+ simTransport1 = new SimulatorTransport(wrtcPeerDescriptor1, simulator)
260
+ await simTransport1.start()
261
+ simTransport2 = new SimulatorTransport(wrtcPeerDescriptor2, simulator)
262
+ await simTransport2.start()
263
+ connectionManager1 = createConnectionManager(wrtcPeerDescriptor1, {
264
+ transport: simTransport1,
266
265
  })
267
- connectionManager2 = createConnectionManager(wrtcPeer2, {
268
- transport: simulatorTransport2,
266
+ connectionManager2 = createConnectionManager(wrtcPeerDescriptor2, {
267
+ transport: simTransport2,
269
268
  })
270
269
  await connectionManager1.start()
271
270
  await connectionManager2.start()
@@ -274,27 +273,29 @@ describe('SimultaneousConnections', () => {
274
273
  afterEach(async () => {
275
274
  await connectionManager1.stop()
276
275
  await connectionManager2.stop()
276
+ await simTransport1.stop()
277
+ await simTransport2.stop()
277
278
  })
278
279
 
279
280
  it('Simultaneous Connections', async () => {
280
281
  const msg1: Message = {
281
- ...baseMsg,
282
- targetDescriptor: wrtcPeer2
282
+ ...BASE_MESSAGE,
283
+ targetDescriptor: wrtcPeerDescriptor2
283
284
  }
284
285
  const msg2: Message = {
285
- ...baseMsg,
286
- targetDescriptor: wrtcPeer1
286
+ ...BASE_MESSAGE,
287
+ targetDescriptor: wrtcPeerDescriptor1
287
288
  }
288
289
 
289
290
  const promise1 = new Promise<void>((resolve, _reject) => {
290
291
  connectionManager1.on('message', async (message: Message) => {
291
- expect(message.messageType).toBe(MessageType.RPC)
292
+ expect(message.body.oneofKind).toBe('rpcMessage')
292
293
  resolve()
293
294
  })
294
295
  })
295
296
  const promise2 = new Promise<void>((resolve, _reject) => {
296
297
  connectionManager2.on('message', async (message: Message) => {
297
- expect(message.messageType).toBe(MessageType.RPC)
298
+ expect(message.body.oneofKind).toBe('rpcMessage')
298
299
  resolve()
299
300
  })
300
301
  })
@@ -306,8 +307,8 @@ describe('SimultaneousConnections', () => {
306
307
  connectionManager2.send(msg2)
307
308
  ])
308
309
 
309
- await waitForCondition(() => connectionManager1.hasConnection(wrtcPeer2))
310
- await waitForCondition(() => connectionManager2.hasConnection(wrtcPeer1))
310
+ await waitForCondition(() => connectionManager1.hasConnection(getNodeIdFromPeerDescriptor(wrtcPeerDescriptor2)))
311
+ await waitForCondition(() => connectionManager2.hasConnection(getNodeIdFromPeerDescriptor(wrtcPeerDescriptor1)))
311
312
  })
312
313
  })
313
314
 
@@ -1,20 +1,20 @@
1
1
  import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
2
2
  import { DhtNode } from '../../src/dht/DhtNode'
3
+ import { getDhtAddressFromRaw, getNodeIdFromPeerDescriptor } from '../../src/identifiers'
3
4
  import { PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
- import { createMockConnectionDhtNode, waitConnectionManagersReadyForTesting } from '../utils/utils'
5
- import { PeerID } from '../../src/helpers/PeerID'
6
- import { areEqualPeerDescriptors } from '../../src/helpers/peerIdFromPeerDescriptor'
7
- import { Any } from '../../src/proto/google/protobuf/any'
5
+ import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
6
+ import { createMockConnectionDhtNode, createMockPeerDescriptor, waitConnectionManagersReadyForTesting } from '../utils/utils'
7
+
8
+ const NUM_NODES = 100
9
+ const MAX_CONNECTIONS = 20
10
+ const K = 4
8
11
 
9
12
  describe('Storing data in DHT', () => {
13
+
10
14
  let entryPoint: DhtNode
11
15
  let nodes: DhtNode[]
12
16
  let entrypointDescriptor: PeerDescriptor
13
17
  const simulator = new Simulator(LatencyType.REAL)
14
- const NUM_NODES = 100
15
- const MAX_CONNECTIONS = 20
16
- const K = 4
17
- const nodeIndicesById: Record<string, number> = {}
18
18
 
19
19
  const getRandomNode = () => {
20
20
  return nodes[Math.floor(Math.random() * nodes.length)]
@@ -22,18 +22,14 @@ describe('Storing data in DHT', () => {
22
22
 
23
23
  beforeEach(async () => {
24
24
  nodes = []
25
- const entryPointId = '0'
26
- entryPoint = await createMockConnectionDhtNode(entryPointId, simulator,
25
+ entryPoint = await createMockConnectionDhtNode(simulator,
27
26
  undefined, K, MAX_CONNECTIONS)
28
27
  nodes.push(entryPoint)
29
- nodeIndicesById[entryPoint.getNodeId().toKey()] = 0
30
28
  entrypointDescriptor = entryPoint.getLocalPeerDescriptor()
31
29
  nodes.push(entryPoint)
32
30
  for (let i = 1; i < NUM_NODES; i++) {
33
- const nodeId = `${i}`
34
- const node = await createMockConnectionDhtNode(nodeId, simulator,
31
+ const node = await createMockConnectionDhtNode(simulator,
35
32
  undefined, K, MAX_CONNECTIONS, 60000)
36
- nodeIndicesById[node.getNodeId().toKey()] = i
37
33
  nodes.push(node)
38
34
  }
39
35
  await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
@@ -42,28 +38,48 @@ describe('Storing data in DHT', () => {
42
38
 
43
39
  afterEach(async () => {
44
40
  await Promise.all(nodes.map((node) => node.stop()))
45
- })
41
+ }, 15000)
46
42
 
47
43
  it('Storing data works', async () => {
48
44
  const storingNodeIndex = 34
49
- const dataKey = PeerID.fromString('3232323e12r31r3')
50
- const data = Any.pack(entrypointDescriptor, PeerDescriptor)
51
- const successfulStorers = await nodes[storingNodeIndex].storeDataToDht(dataKey.value, data)
45
+ const entry = createMockDataEntry()
46
+ const successfulStorers = await nodes[storingNodeIndex].storeDataToDht(
47
+ getDhtAddressFromRaw(entry.key),
48
+ entry.data!
49
+ )
52
50
  expect(successfulStorers.length).toBeGreaterThan(4)
53
- }, 90000)
51
+ }, 30000)
54
52
 
55
53
  it('Storing and getting data works', async () => {
56
54
  const storingNode = getRandomNode()
57
- const dataKey = PeerID.fromString('3232323e12r31r3')
58
- const data = Any.pack(entrypointDescriptor, PeerDescriptor)
59
- const successfulStorers = await storingNode.storeDataToDht(dataKey.value, data)
55
+ const entry = createMockDataEntry()
56
+ const successfulStorers = await storingNode.storeDataToDht(
57
+ getDhtAddressFromRaw(entry.key),
58
+ entry.data!
59
+ )
60
60
  expect(successfulStorers.length).toBeGreaterThan(4)
61
+ const fetchingNode = getRandomNode()
62
+ const results = await fetchingNode.fetchDataFromDht(getDhtAddressFromRaw(entry.key))
63
+ results.forEach((result) => {
64
+ expectEqualData(result, entry)
65
+ })
66
+ }, 30000)
61
67
 
68
+ it('storing with explicit creator', async () => {
69
+ const storingNode = getRandomNode()
70
+ const entry = createMockDataEntry()
71
+ const requestor = createMockPeerDescriptor()
72
+ const successfulStorers = await storingNode.storeDataToDht(
73
+ getDhtAddressFromRaw(entry.key),
74
+ entry.data!,
75
+ getDhtAddressFromRaw(requestor.nodeId)
76
+ )
77
+ expect(successfulStorers.length).toBeGreaterThan(4)
62
78
  const fetchingNode = getRandomNode()
63
- const results = await fetchingNode.getDataFromDht(dataKey.value)
64
- results.forEach((entry) => {
65
- const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
66
- expect(areEqualPeerDescriptors(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
79
+ const results = await fetchingNode.fetchDataFromDht(getDhtAddressFromRaw(entry.key))
80
+ results.forEach((result) => {
81
+ expectEqualData(result, entry)
82
+ expect(getDhtAddressFromRaw(result.creator)).toEqual(getNodeIdFromPeerDescriptor(requestor))
67
83
  })
68
- }, 90000)
84
+ }, 30000)
69
85
  })
@@ -1,20 +1,19 @@
1
1
  import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
2
2
  import { DhtNode } from '../../src/dht/DhtNode'
3
- import { PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
3
  import { createMockConnectionDhtNode, waitConnectionManagersReadyForTesting } from '../utils/utils'
5
- import { PeerID } from '../../src/helpers/PeerID'
6
- import { areEqualPeerDescriptors } from '../../src/helpers/peerIdFromPeerDescriptor'
7
- import { Any } from '../../src/proto/google/protobuf/any'
4
+ import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
5
+ import { createRandomDhtAddress } from '../../src/identifiers'
6
+ import { getDhtAddressFromRaw } from '../../src/identifiers'
7
+ import { wait } from '@streamr/utils'
8
+
9
+ const NUM_NODES = 5
10
+ const MAX_CONNECTIONS = 5
11
+ const K = 4
8
12
 
9
13
  describe('Storing data in DHT', () => {
10
- let entryPoint: DhtNode
14
+
11
15
  let nodes: DhtNode[]
12
- let entrypointDescriptor: PeerDescriptor
13
16
  const simulator = new Simulator(LatencyType.REAL)
14
- const NUM_NODES = 5
15
- const MAX_CONNECTIONS = 5
16
- const K = 4
17
- const nodeIndicesById: Record<string, number> = {}
18
17
 
19
18
  const getRandomNode = () => {
20
19
  return nodes[Math.floor(Math.random() * nodes.length)]
@@ -22,21 +21,15 @@ describe('Storing data in DHT', () => {
22
21
 
23
22
  beforeEach(async () => {
24
23
  nodes = []
25
- const entryPointId = '0'
26
- entryPoint = await createMockConnectionDhtNode(entryPointId, simulator,
27
- undefined, K, MAX_CONNECTIONS)
28
- nodes.push(entryPoint)
29
- nodeIndicesById[entryPoint.getNodeId().toKey()] = 0
30
- entrypointDescriptor = entryPoint.getLocalPeerDescriptor()
24
+ const entryPoint = await createMockConnectionDhtNode(simulator,
25
+ createRandomDhtAddress(), K, MAX_CONNECTIONS)
31
26
  nodes.push(entryPoint)
32
27
  for (let i = 1; i < NUM_NODES; i++) {
33
- const nodeId = `${i}`
34
- const node = await createMockConnectionDhtNode(nodeId, simulator,
28
+ const node = await createMockConnectionDhtNode(simulator,
35
29
  undefined, K, MAX_CONNECTIONS, 60000)
36
- nodeIndicesById[node.getNodeId().toKey()] = i
37
30
  nodes.push(node)
38
31
  }
39
- await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
32
+ await Promise.all(nodes.map((node) => node.joinDht([entryPoint.getLocalPeerDescriptor()])))
40
33
  await waitConnectionManagersReadyForTesting(nodes.map((node) => node.connectionManager!), MAX_CONNECTIONS)
41
34
  }, 90000)
42
35
 
@@ -46,45 +39,40 @@ describe('Storing data in DHT', () => {
46
39
 
47
40
  it('Data can be deleted', async () => {
48
41
  const storingNode = getRandomNode()
49
- const dataKey = PeerID.fromString('3232323e12r31r3')
50
- const data = Any.pack(entrypointDescriptor, PeerDescriptor)
51
- const successfulStorers = await storingNode.storeDataToDht(dataKey.value, data)
42
+ const entry = createMockDataEntry()
43
+ const successfulStorers = await storingNode.storeDataToDht(getDhtAddressFromRaw(entry.key), entry.data!)
52
44
  expect(successfulStorers.length).toBeGreaterThan(4)
53
- await storingNode.deleteDataFromDht(dataKey.value)
54
-
45
+ await storingNode.deleteDataFromDht(getDhtAddressFromRaw(entry.key), true)
46
+ // Wait for the delete operation to propagate
47
+ await wait(500)
55
48
  const fetchingNode = getRandomNode()
56
- const results = await fetchingNode.getDataFromDht(dataKey.value)
57
- results.forEach((entry) => {
58
- const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
59
- expect(entry.deleted).toBeTrue()
60
- expect(areEqualPeerDescriptors(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
49
+ const results = await fetchingNode.fetchDataFromDht(getDhtAddressFromRaw(entry.key))
50
+ results.forEach((result) => {
51
+ expect(result.deleted).toBeTrue()
52
+ expectEqualData(result, entry)
61
53
  })
62
54
  }, 90000)
63
55
 
64
56
  it('Data can be deleted and re-stored', async () => {
65
57
  const storingNode = getRandomNode()
66
- const dataKey = PeerID.fromString('3232323e12r31r3')
67
- const data = Any.pack(entrypointDescriptor, PeerDescriptor)
68
- const successfulStorers1 = await storingNode.storeDataToDht(dataKey.value, data)
58
+ const entry = createMockDataEntry()
59
+ const successfulStorers1 = await storingNode.storeDataToDht(getDhtAddressFromRaw(entry.key), entry.data!)
69
60
  expect(successfulStorers1.length).toBeGreaterThan(4)
70
- await storingNode.deleteDataFromDht(dataKey.value)
71
-
61
+ await storingNode.deleteDataFromDht(getDhtAddressFromRaw(entry.key), true)
62
+ // Wait for the delete operation to propagate
63
+ await wait(500)
72
64
  const fetchingNode = getRandomNode()
73
- const results1 = await fetchingNode.getDataFromDht(dataKey.value)
74
- results1.forEach((entry) => {
75
- const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
76
- expect(entry.deleted).toBeTrue()
77
- expect(areEqualPeerDescriptors(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
65
+ const results1 = await fetchingNode.fetchDataFromDht(getDhtAddressFromRaw(entry.key))
66
+ results1.forEach((result) => {
67
+ expect(result.deleted).toBeTrue()
68
+ expectEqualData(result, entry)
78
69
  })
79
-
80
- const successfulStorers2 = await storingNode.storeDataToDht(dataKey.value, data)
70
+ const successfulStorers2 = await storingNode.storeDataToDht(getDhtAddressFromRaw(entry.key), entry.data!)
81
71
  expect(successfulStorers2.length).toBeGreaterThan(4)
82
-
83
- const results2 = await fetchingNode.getDataFromDht(dataKey.value)
84
- results2.forEach((entry) => {
85
- const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
86
- expect(entry.deleted).toBeFalse()
87
- expect(areEqualPeerDescriptors(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
72
+ const results2 = await fetchingNode.fetchDataFromDht(getDhtAddressFromRaw(entry.key))
73
+ results2.forEach((result) => {
74
+ expect(result.deleted).toBeFalse()
75
+ expectEqualData(result, entry)
88
76
  })
89
77
  }, 90000)
90
78
  })