@streamr/dht 0.0.1-tatum.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 (344) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc +3 -0
  3. package/README.md +38 -0
  4. package/dist/src/connection/Connection.d.ts +11 -0
  5. package/dist/src/connection/Connection.js +23 -0
  6. package/dist/src/connection/Connection.js.map +1 -0
  7. package/dist/src/connection/ConnectionLockHandler.d.ts +23 -0
  8. package/dist/src/connection/ConnectionLockHandler.js +94 -0
  9. package/dist/src/connection/ConnectionLockHandler.js.map +1 -0
  10. package/dist/src/connection/ConnectionManager.d.ts +94 -0
  11. package/dist/src/connection/ConnectionManager.js +554 -0
  12. package/dist/src/connection/ConnectionManager.js.map +1 -0
  13. package/dist/src/connection/ConnectivityChecker.d.ts +17 -0
  14. package/dist/src/connection/ConnectivityChecker.js +187 -0
  15. package/dist/src/connection/ConnectivityChecker.js.map +1 -0
  16. package/dist/src/connection/Handshaker.d.ts +19 -0
  17. package/dist/src/connection/Handshaker.js +77 -0
  18. package/dist/src/connection/Handshaker.js.map +1 -0
  19. package/dist/src/connection/IConnection.d.ts +38 -0
  20. package/dist/src/connection/IConnection.js +19 -0
  21. package/dist/src/connection/IConnection.js.map +1 -0
  22. package/dist/src/connection/IConnectionSource.d.ts +4 -0
  23. package/dist/src/connection/IConnectionSource.js +3 -0
  24. package/dist/src/connection/IConnectionSource.js.map +1 -0
  25. package/dist/src/connection/ManagedConnection.d.ts +60 -0
  26. package/dist/src/connection/ManagedConnection.js +352 -0
  27. package/dist/src/connection/ManagedConnection.js.map +1 -0
  28. package/dist/src/connection/ManagedWebRtcConnection.d.ts +7 -0
  29. package/dist/src/connection/ManagedWebRtcConnection.js +20 -0
  30. package/dist/src/connection/ManagedWebRtcConnection.js.map +1 -0
  31. package/dist/src/connection/RemoteConnectionLocker.d.ts +14 -0
  32. package/dist/src/connection/RemoteConnectionLocker.js +93 -0
  33. package/dist/src/connection/RemoteConnectionLocker.js.map +1 -0
  34. package/dist/src/connection/Simulator/Simulator.d.ts +42 -0
  35. package/dist/src/connection/Simulator/Simulator.js +325 -0
  36. package/dist/src/connection/Simulator/Simulator.js.map +1 -0
  37. package/dist/src/connection/Simulator/SimulatorConnection.d.ts +19 -0
  38. package/dist/src/connection/Simulator/SimulatorConnection.js +118 -0
  39. package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -0
  40. package/dist/src/connection/Simulator/SimulatorConnector.d.ts +17 -0
  41. package/dist/src/connection/Simulator/SimulatorConnector.js +72 -0
  42. package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -0
  43. package/dist/src/connection/Simulator/SimulatorTransport.d.ts +6 -0
  44. package/dist/src/connection/Simulator/SimulatorTransport.js +11 -0
  45. package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -0
  46. package/dist/src/connection/Simulator/pings.d.ts +21 -0
  47. package/dist/src/connection/Simulator/pings.js +61 -0
  48. package/dist/src/connection/Simulator/pings.js.map +1 -0
  49. package/dist/src/connection/WebRTC/IWebRtcConnection.d.ts +20 -0
  50. package/dist/src/connection/WebRTC/IWebRtcConnection.js +9 -0
  51. package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +1 -0
  52. package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +47 -0
  53. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +233 -0
  54. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -0
  55. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.d.ts +12 -0
  56. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js +74 -0
  57. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js.map +1 -0
  58. package/dist/src/connection/WebRTC/WebRtcConnector.d.ts +47 -0
  59. package/dist/src/connection/WebRTC/WebRtcConnector.js +227 -0
  60. package/dist/src/connection/WebRTC/WebRtcConnector.js.map +1 -0
  61. package/dist/src/connection/WebRTC/iceServerAsString.d.ts +2 -0
  62. package/dist/src/connection/WebRTC/iceServerAsString.js +18 -0
  63. package/dist/src/connection/WebRTC/iceServerAsString.js.map +1 -0
  64. package/dist/src/connection/WebSocket/ClientWebSocket.d.ts +15 -0
  65. package/dist/src/connection/WebSocket/ClientWebSocket.js +113 -0
  66. package/dist/src/connection/WebSocket/ClientWebSocket.js.map +1 -0
  67. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.d.ts +9 -0
  68. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js +63 -0
  69. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +1 -0
  70. package/dist/src/connection/WebSocket/ServerWebSocket.d.ts +18 -0
  71. package/dist/src/connection/WebSocket/ServerWebSocket.js +103 -0
  72. package/dist/src/connection/WebSocket/ServerWebSocket.js.map +1 -0
  73. package/dist/src/connection/WebSocket/WebSocketConnector.d.ts +31 -0
  74. package/dist/src/connection/WebSocket/WebSocketConnector.js +202 -0
  75. package/dist/src/connection/WebSocket/WebSocketConnector.js.map +1 -0
  76. package/dist/src/connection/WebSocket/WebSocketServer.d.ts +9 -0
  77. package/dist/src/connection/WebSocket/WebSocketServer.js +101 -0
  78. package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -0
  79. package/dist/src/dht/DhtNode.d.ts +153 -0
  80. package/dist/src/dht/DhtNode.js +599 -0
  81. package/dist/src/dht/DhtNode.js.map +1 -0
  82. package/dist/src/dht/DhtPeer.d.ts +18 -0
  83. package/dist/src/dht/DhtPeer.js +74 -0
  84. package/dist/src/dht/DhtPeer.js.map +1 -0
  85. package/dist/src/dht/ExternalApi.d.ts +8 -0
  86. package/dist/src/dht/ExternalApi.js +26 -0
  87. package/dist/src/dht/ExternalApi.js.map +1 -0
  88. package/dist/src/dht/RemoteExternalApi.d.ts +6 -0
  89. package/dist/src/dht/RemoteExternalApi.js +26 -0
  90. package/dist/src/dht/RemoteExternalApi.js.map +1 -0
  91. package/dist/src/dht/contact/Contact.d.ts +22 -0
  92. package/dist/src/dht/contact/Contact.js +25 -0
  93. package/dist/src/dht/contact/Contact.js.map +1 -0
  94. package/dist/src/dht/contact/RandomContactList.d.ts +20 -0
  95. package/dist/src/dht/contact/RandomContactList.js +78 -0
  96. package/dist/src/dht/contact/RandomContactList.js.map +1 -0
  97. package/dist/src/dht/contact/Remote.d.ts +15 -0
  98. package/dist/src/dht/contact/Remote.js +24 -0
  99. package/dist/src/dht/contact/Remote.js.map +1 -0
  100. package/dist/src/dht/contact/SortedContactList.d.ts +35 -0
  101. package/dist/src/dht/contact/SortedContactList.js +156 -0
  102. package/dist/src/dht/contact/SortedContactList.js.map +1 -0
  103. package/dist/src/dht/discovery/DiscoverySession.d.ts +36 -0
  104. package/dist/src/dht/discovery/DiscoverySession.js +116 -0
  105. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -0
  106. package/dist/src/dht/discovery/PeerDiscovery.d.ts +42 -0
  107. package/dist/src/dht/discovery/PeerDiscovery.js +157 -0
  108. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -0
  109. package/dist/src/dht/find/RecursiveFindSession.d.ts +46 -0
  110. package/dist/src/dht/find/RecursiveFindSession.js +142 -0
  111. package/dist/src/dht/find/RecursiveFindSession.js.map +1 -0
  112. package/dist/src/dht/find/RecursiveFinder.d.ts +54 -0
  113. package/dist/src/dht/find/RecursiveFinder.js +180 -0
  114. package/dist/src/dht/find/RecursiveFinder.js.map +1 -0
  115. package/dist/src/dht/find/RemoteRecursiveFindSession.d.ts +6 -0
  116. package/dist/src/dht/find/RemoteRecursiveFindSession.js +25 -0
  117. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +1 -0
  118. package/dist/src/dht/routing/DuplicateDetector.d.ts +13 -0
  119. package/dist/src/dht/routing/DuplicateDetector.js +41 -0
  120. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -0
  121. package/dist/src/dht/routing/RemoteRouter.d.ts +8 -0
  122. package/dist/src/dht/routing/RemoteRouter.js +106 -0
  123. package/dist/src/dht/routing/RemoteRouter.js.map +1 -0
  124. package/dist/src/dht/routing/Router.d.ts +60 -0
  125. package/dist/src/dht/routing/Router.js +207 -0
  126. package/dist/src/dht/routing/Router.js.map +1 -0
  127. package/dist/src/dht/routing/RoutingSession.d.ts +42 -0
  128. package/dist/src/dht/routing/RoutingSession.js +178 -0
  129. package/dist/src/dht/routing/RoutingSession.js.map +1 -0
  130. package/dist/src/dht/store/DataStore.d.ts +45 -0
  131. package/dist/src/dht/store/DataStore.js +244 -0
  132. package/dist/src/dht/store/DataStore.js.map +1 -0
  133. package/dist/src/dht/store/LocalDataStore.d.ts +19 -0
  134. package/dist/src/dht/store/LocalDataStore.js +104 -0
  135. package/dist/src/dht/store/LocalDataStore.js.map +1 -0
  136. package/dist/src/dht/store/RemoteStore.d.ts +8 -0
  137. package/dist/src/dht/store/RemoteStore.js +44 -0
  138. package/dist/src/dht/store/RemoteStore.js.map +1 -0
  139. package/dist/src/exports.d.ts +19 -0
  140. package/dist/src/exports.js +41 -0
  141. package/dist/src/exports.js.map +1 -0
  142. package/dist/src/helpers/AddressTools.d.ts +2 -0
  143. package/dist/src/helpers/AddressTools.js +31 -0
  144. package/dist/src/helpers/AddressTools.js.map +1 -0
  145. package/dist/src/helpers/PeerID.d.ts +25 -0
  146. package/dist/src/helpers/PeerID.js +84 -0
  147. package/dist/src/helpers/PeerID.js.map +1 -0
  148. package/dist/src/helpers/UUID.d.ts +7 -0
  149. package/dist/src/helpers/UUID.js +32 -0
  150. package/dist/src/helpers/UUID.js.map +1 -0
  151. package/dist/src/helpers/debugHelpers.d.ts +3 -0
  152. package/dist/src/helpers/debugHelpers.js +11 -0
  153. package/dist/src/helpers/debugHelpers.js.map +1 -0
  154. package/dist/src/helpers/errors.d.ts +72 -0
  155. package/dist/src/helpers/errors.js +95 -0
  156. package/dist/src/helpers/errors.js.map +1 -0
  157. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +5 -0
  158. package/dist/src/helpers/peerIdFromPeerDescriptor.js +17 -0
  159. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -0
  160. package/dist/src/helpers/protoClasses.d.ts +2 -0
  161. package/dist/src/helpers/protoClasses.js +35 -0
  162. package/dist/src/helpers/protoClasses.js.map +1 -0
  163. package/dist/src/helpers/protoToString.d.ts +2 -0
  164. package/dist/src/helpers/protoToString.js +20 -0
  165. package/dist/src/helpers/protoToString.js.map +1 -0
  166. package/dist/src/proto/google/protobuf/any.d.ts +173 -0
  167. package/dist/src/proto/google/protobuf/any.js +155 -0
  168. package/dist/src/proto/google/protobuf/any.js.map +1 -0
  169. package/dist/src/proto/google/protobuf/empty.d.ts +32 -0
  170. package/dist/src/proto/google/protobuf/empty.js +34 -0
  171. package/dist/src/proto/google/protobuf/empty.js.map +1 -0
  172. package/dist/src/proto/google/protobuf/timestamp.d.ts +149 -0
  173. package/dist/src/proto/google/protobuf/timestamp.js +136 -0
  174. package/dist/src/proto/google/protobuf/timestamp.js.map +1 -0
  175. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +320 -0
  176. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +245 -0
  177. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -0
  178. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +1089 -0
  179. package/dist/src/proto/packages/dht/protos/DhtRpc.js +710 -0
  180. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -0
  181. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +145 -0
  182. package/dist/src/proto/packages/dht/protos/DhtRpc.server.js +3 -0
  183. package/dist/src/proto/packages/dht/protos/DhtRpc.server.js.map +1 -0
  184. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.d.ts +87 -0
  185. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +66 -0
  186. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
  187. package/dist/src/proto/tests.d.ts +39 -0
  188. package/dist/src/proto/tests.js +34 -0
  189. package/dist/src/proto/tests.js.map +1 -0
  190. package/dist/src/rpc-protocol/DhtCallContext.d.ts +12 -0
  191. package/dist/src/rpc-protocol/DhtCallContext.js +8 -0
  192. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -0
  193. package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +8 -0
  194. package/dist/src/rpc-protocol/DhtRpcOptions.js +3 -0
  195. package/dist/src/rpc-protocol/DhtRpcOptions.js.map +1 -0
  196. package/dist/src/transport/ITransport.d.ts +22 -0
  197. package/dist/src/transport/ITransport.js +3 -0
  198. package/dist/src/transport/ITransport.js.map +1 -0
  199. package/dist/src/transport/ListeningRpcCommunicator.d.ts +6 -0
  200. package/dist/src/transport/ListeningRpcCommunicator.js +14 -0
  201. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -0
  202. package/dist/src/transport/RoutingRpcCommunicator.d.ts +8 -0
  203. package/dist/src/transport/RoutingRpcCommunicator.js +52 -0
  204. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -0
  205. package/jest.config.js +2 -0
  206. package/karma.config.js +20 -0
  207. package/package.json +64 -0
  208. package/proto.sh +3 -0
  209. package/protos/DhtRpc.proto +330 -0
  210. package/protos/tests.proto +16 -0
  211. package/src/connection/Connection.ts +23 -0
  212. package/src/connection/ConnectionLockHandler.ts +105 -0
  213. package/src/connection/ConnectionManager.ts +676 -0
  214. package/src/connection/ConnectivityChecker.ts +173 -0
  215. package/src/connection/Handshaker.ts +92 -0
  216. package/src/connection/IConnection.ts +47 -0
  217. package/src/connection/IConnectionSource.ts +6 -0
  218. package/src/connection/ManagedConnection.ts +398 -0
  219. package/src/connection/ManagedWebRtcConnection.ts +27 -0
  220. package/src/connection/RemoteConnectionLocker.ts +88 -0
  221. package/src/connection/Simulator/Simulator.ts +399 -0
  222. package/src/connection/Simulator/SimulatorConnection.ts +137 -0
  223. package/src/connection/Simulator/SimulatorConnector.ts +104 -0
  224. package/src/connection/Simulator/SimulatorTransport.ts +9 -0
  225. package/src/connection/Simulator/pings.ts +42 -0
  226. package/src/connection/WebRTC/BrowserWebRtcConnection.ts +227 -0
  227. package/src/connection/WebRTC/IWebRtcConnection.ts +24 -0
  228. package/src/connection/WebRTC/NodeWebRtcConnection.ts +256 -0
  229. package/src/connection/WebRTC/RemoteWebrtcConnector.ts +93 -0
  230. package/src/connection/WebRTC/WebRtcConnector.ts +306 -0
  231. package/src/connection/WebRTC/iceServerAsString.ts +15 -0
  232. package/src/connection/WebSocket/ClientWebSocket.ts +118 -0
  233. package/src/connection/WebSocket/RemoteWebSocketConnector.ts +49 -0
  234. package/src/connection/WebSocket/ServerWebSocket.ts +119 -0
  235. package/src/connection/WebSocket/WebSocketConnector.ts +264 -0
  236. package/src/connection/WebSocket/WebSocketServer.ts +97 -0
  237. package/src/dht/DhtNode.ts +776 -0
  238. package/src/dht/DhtPeer.ts +96 -0
  239. package/src/dht/ExternalApi.ts +29 -0
  240. package/src/dht/RemoteExternalApi.ts +25 -0
  241. package/src/dht/contact/Contact.ts +36 -0
  242. package/src/dht/contact/RandomContactList.ts +92 -0
  243. package/src/dht/contact/Remote.ts +40 -0
  244. package/src/dht/contact/SortedContactList.ts +196 -0
  245. package/src/dht/discovery/DiscoverySession.ts +150 -0
  246. package/src/dht/discovery/PeerDiscovery.ts +162 -0
  247. package/src/dht/find/RecursiveFindSession.ts +178 -0
  248. package/src/dht/find/RecursiveFinder.ts +272 -0
  249. package/src/dht/find/RemoteRecursiveFindSession.ts +33 -0
  250. package/src/dht/routing/DuplicateDetector.ts +53 -0
  251. package/src/dht/routing/RemoteRouter.ts +115 -0
  252. package/src/dht/routing/Router.ts +266 -0
  253. package/src/dht/routing/RoutingSession.ts +222 -0
  254. package/src/dht/store/DataStore.ts +321 -0
  255. package/src/dht/store/LocalDataStore.ts +114 -0
  256. package/src/dht/store/RemoteStore.ts +58 -0
  257. package/src/exports.ts +19 -0
  258. package/src/helpers/AddressTools.ts +26 -0
  259. package/src/helpers/PeerID.ts +95 -0
  260. package/src/helpers/UUID.ts +30 -0
  261. package/src/helpers/debugHelpers.ts +9 -0
  262. package/src/helpers/errors.ts +49 -0
  263. package/src/helpers/peerIdFromPeerDescriptor.ts +14 -0
  264. package/src/helpers/protoClasses.ts +63 -0
  265. package/src/helpers/protoToString.ts +21 -0
  266. package/src/proto/google/protobuf/any.ts +319 -0
  267. package/src/proto/google/protobuf/empty.ts +84 -0
  268. package/src/proto/google/protobuf/timestamp.ts +281 -0
  269. package/src/proto/packages/dht/protos/DhtRpc.client.ts +373 -0
  270. package/src/proto/packages/dht/protos/DhtRpc.server.ts +148 -0
  271. package/src/proto/packages/dht/protos/DhtRpc.ts +1399 -0
  272. package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +108 -0
  273. package/src/proto/tests.ts +52 -0
  274. package/src/rpc-protocol/DhtCallContext.ts +15 -0
  275. package/src/rpc-protocol/DhtRpcOptions.ts +9 -0
  276. package/src/transport/ITransport.ts +31 -0
  277. package/src/transport/ListeningRpcCommunicator.ts +14 -0
  278. package/src/transport/RoutingRpcCommunicator.ts +59 -0
  279. package/src/types/glogal.d.ts +1 -0
  280. package/src/types/textencoding.d.ts +7 -0
  281. package/test/RandomGraphSimulation.ts +52 -0
  282. package/test/benchmark/KademliaCorrectness.test.ts +115 -0
  283. package/test/benchmark/RecursiveFind.test.ts +87 -0
  284. package/test/benchmark/any.test.ts +28 -0
  285. package/test/benchmark/kademlia-simulation/Contact.ts +32 -0
  286. package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +94 -0
  287. package/test/benchmark/kademlia-simulation/SimulationNode.ts +125 -0
  288. package/test/data/generateGroundTruthData.ts +70 -0
  289. package/test/end-to-end/Layer0-Layer1.test.ts +87 -0
  290. package/test/end-to-end/Layer0.test.ts +60 -0
  291. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +94 -0
  292. package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +134 -0
  293. package/test/end-to-end/Layer0WebRTC.test.ts +98 -0
  294. package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +69 -0
  295. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +73 -0
  296. package/test/end-to-end/WebSocketConnectionRequest.test.ts +62 -0
  297. package/test/integration/ConnectionLocking.test.ts +166 -0
  298. package/test/integration/ConnectionManager.test.ts +291 -0
  299. package/test/integration/DhtNodeExternalAPI.test.ts +43 -0
  300. package/test/integration/DhtPeer.test.ts +73 -0
  301. package/test/integration/DhtRpc.test.ts +131 -0
  302. package/test/integration/DhtWithMockConnectionLatencies.test.ts +46 -0
  303. package/test/integration/DhtWithMockConnections.test.ts +46 -0
  304. package/test/integration/DhtWithRealConnectionLatencies.test.ts +47 -0
  305. package/test/integration/Layer1-scale.test.ts +200 -0
  306. package/test/integration/MigrateData.test.ts +203 -0
  307. package/test/integration/Mock-Layer1-Layer0.test.ts +106 -0
  308. package/test/integration/MultipleEntryPointJoining.test.ts +105 -0
  309. package/test/integration/RecursiveFind.test.ts +50 -0
  310. package/test/integration/RemoteRouter.test.ts +83 -0
  311. package/test/integration/RemoteStore.test.ts +66 -0
  312. package/test/integration/RouteMessage.test.ts +254 -0
  313. package/test/integration/RpcErrors.test.ts +153 -0
  314. package/test/integration/ScaleDownDht.test.ts +66 -0
  315. package/test/integration/SimultaneousConnections.test.ts +308 -0
  316. package/test/integration/Store.test.ts +72 -0
  317. package/test/integration/StoreAndDelete.test.ts +93 -0
  318. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +71 -0
  319. package/test/integration/WebRtcConnectionManagement.test.ts +205 -0
  320. package/test/integration/WebRtcConnectorRpc.test.ts +145 -0
  321. package/test/integration/WebSocket.test.ts +64 -0
  322. package/test/integration/WebSocketConnectionManagement.test.ts +131 -0
  323. package/test/integration/WebSocketConnectorRpc.test.ts +86 -0
  324. package/test/kademlia-simulation/data/nodeids.json +13002 -0
  325. package/test/kademlia-simulation/data/orderedneighbors.json +1001 -0
  326. package/test/unit/AddressTools.test.ts +40 -0
  327. package/test/unit/DuplicateDetector.test.ts +29 -0
  328. package/test/unit/LocalDataStore.test.ts +107 -0
  329. package/test/unit/PeerID.test.ts +22 -0
  330. package/test/unit/ProtobufMessage.test.ts +21 -0
  331. package/test/unit/RandomContactList.test.ts +87 -0
  332. package/test/unit/RecursiveFinder.test.ts +112 -0
  333. package/test/unit/Router.test.ts +124 -0
  334. package/test/unit/SortedContactList.test.ts +127 -0
  335. package/test/unit/UUID.test.ts +49 -0
  336. package/test/unit/WebSocketServer.test.ts +42 -0
  337. package/test/utils/mock/RecursiveFinder.ts +19 -0
  338. package/test/utils/mock/Router.ts +53 -0
  339. package/test/utils/mock/Transport.ts +26 -0
  340. package/test/utils/utils.ts +311 -0
  341. package/tsconfig.browser.json +15 -0
  342. package/tsconfig.jest.json +19 -0
  343. package/tsconfig.json +3 -0
  344. package/tsconfig.node.json +18 -0
@@ -0,0 +1,308 @@
1
+ import { Simulator } from '../../src/connection/Simulator/Simulator'
2
+ import { SimulatorTransport } from '../../src/connection/Simulator/SimulatorTransport'
3
+ import { PeerID } from '../../src/helpers/PeerID'
4
+ import { Message, MessageType, NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
5
+ import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
6
+ import { waitForCondition } from '@streamr/utils'
7
+ import { ConnectionManager } from '../../src/connection/ConnectionManager'
8
+
9
+ describe('SimultaneousConnections', () => {
10
+
11
+ let simulator: Simulator
12
+ let simulatorTransport1: SimulatorTransport
13
+ let simulatorTransport2: SimulatorTransport
14
+
15
+ const peerDescriptor1 = {
16
+ kademliaId: PeerID.fromString('mock1').value,
17
+ type: 0,
18
+ nodeName: 'mock1'
19
+ }
20
+
21
+ const peerDescriptor2 = {
22
+ kademliaId: PeerID.fromString('mock2').value,
23
+ type: 0,
24
+ nodeName: 'mock2'
25
+ }
26
+
27
+ const baseMsg: Message = {
28
+ serviceId: 'serviceId',
29
+ messageType: MessageType.RPC,
30
+ messageId: '1',
31
+ body: {
32
+ oneofKind: 'rpcMessage',
33
+ rpcMessage: RpcMessage.create()
34
+ }
35
+ }
36
+
37
+ beforeEach(async () => {
38
+ simulator = new Simulator()
39
+ simulatorTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
40
+ simulatorTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
41
+ })
42
+
43
+ afterEach(async () => {
44
+ await simulatorTransport1.stop()
45
+ await simulatorTransport2.stop()
46
+ })
47
+
48
+ it('simultanous simulated connection', async () => {
49
+ const msg1: Message = {
50
+ ...baseMsg,
51
+ targetDescriptor: peerDescriptor2
52
+ }
53
+ const msg2: Message = {
54
+ ...baseMsg,
55
+ targetDescriptor: peerDescriptor1
56
+ }
57
+
58
+ const promise1 = new Promise<void>((resolve, _reject) => {
59
+ simulatorTransport1.on('message', async (message: Message) => {
60
+ expect(message.messageType).toBe(MessageType.RPC)
61
+ resolve()
62
+ })
63
+ })
64
+ const promise2 = new Promise<void>((resolve, _reject) => {
65
+ simulatorTransport2.on('message', async (message: Message) => {
66
+ expect(message.messageType).toBe(MessageType.RPC)
67
+ resolve()
68
+ })
69
+ })
70
+ await Promise.all([
71
+ promise1,
72
+ promise2,
73
+ simulatorTransport1.send(msg1),
74
+ simulatorTransport2.send(msg2)
75
+ ])
76
+ await waitForCondition(() => simulatorTransport2.hasConnection(peerDescriptor1))
77
+ await waitForCondition(() => simulatorTransport1.hasConnection(peerDescriptor2))
78
+ })
79
+
80
+ describe('Websocket 2 servers', () => {
81
+
82
+ let connectionManager1: ConnectionManager
83
+ let connectionManager2: ConnectionManager
84
+
85
+ const wsPeer1: PeerDescriptor = {
86
+ kademliaId: PeerID.fromString('mock1').value,
87
+ nodeName: 'mock1WebSocket',
88
+ type: NodeType.NODEJS,
89
+ websocket: {
90
+ ip: '127.0.0.1',
91
+ port: 43432
92
+ }
93
+ }
94
+
95
+ const wsPeer2: PeerDescriptor = {
96
+ kademliaId: PeerID.fromString('mock2').value,
97
+ nodeName: 'mock2WebSocket',
98
+ type: NodeType.NODEJS,
99
+ websocket: {
100
+ ip: '127.0.0.1',
101
+ port: 43433
102
+ }
103
+ }
104
+
105
+ beforeEach(async () => {
106
+ connectionManager1 = new ConnectionManager({
107
+ transportLayer: simulatorTransport1,
108
+ ownPeerDescriptor: wsPeer1,
109
+ webSocketPort: 43432,
110
+ entryPoints: [wsPeer1]
111
+ })
112
+ connectionManager2 = new ConnectionManager({
113
+ transportLayer: simulatorTransport2,
114
+ ownPeerDescriptor: wsPeer2,
115
+ webSocketPort: 43433,
116
+ entryPoints: [wsPeer1]
117
+ })
118
+ await connectionManager1.start(() => wsPeer1)
119
+ await connectionManager2.start(() => wsPeer2)
120
+ })
121
+
122
+ afterEach(async () => {
123
+ await connectionManager1.stop()
124
+ await connectionManager2.stop()
125
+ })
126
+
127
+ it('Simultaneous Connections', async () => {
128
+ const msg1: Message = {
129
+ ...baseMsg,
130
+ targetDescriptor: wsPeer2
131
+ }
132
+ const msg2: Message = {
133
+ ...baseMsg,
134
+ targetDescriptor: wsPeer1
135
+ }
136
+
137
+ const promise1 = new Promise<void>((resolve, _reject) => {
138
+ connectionManager1.on('message', async (message: Message) => {
139
+ expect(message.messageType).toBe(MessageType.RPC)
140
+ resolve()
141
+ })
142
+ })
143
+ const promise2 = new Promise<void>((resolve, _reject) => {
144
+ connectionManager2.on('message', async (message: Message) => {
145
+ expect(message.messageType).toBe(MessageType.RPC)
146
+ resolve()
147
+ })
148
+ })
149
+
150
+ await Promise.all([
151
+ promise1,
152
+ promise2,
153
+ connectionManager1.send(msg1),
154
+ connectionManager2.send(msg2)
155
+ ])
156
+
157
+ await waitForCondition(() => connectionManager1.hasConnection(wsPeer2))
158
+ await waitForCondition(() => connectionManager2.hasConnection(wsPeer1))
159
+ })
160
+ })
161
+
162
+ describe('Websocket 1 server (ConnectionRequests)', () => {
163
+
164
+ let connectionManager1: ConnectionManager
165
+ let connectionManager2: ConnectionManager
166
+
167
+ const wsPeer1: PeerDescriptor = {
168
+ kademliaId: PeerID.fromString('mock1').value,
169
+ nodeName: 'mock1WebSocketServer',
170
+ type: NodeType.NODEJS,
171
+ websocket: {
172
+ ip: '127.0.0.1',
173
+ port: 43432
174
+ }
175
+ }
176
+
177
+ const wsPeer2: PeerDescriptor = {
178
+ kademliaId: PeerID.fromString('mock2').value,
179
+ nodeName: 'mock2WebSocketClient',
180
+ type: NodeType.NODEJS
181
+ }
182
+
183
+ beforeEach(async () => {
184
+ connectionManager1 = new ConnectionManager({
185
+ transportLayer: simulatorTransport1,
186
+ ownPeerDescriptor: wsPeer1,
187
+ webSocketPort: 43432,
188
+ entryPoints: [wsPeer1]
189
+ })
190
+ connectionManager2 = new ConnectionManager({
191
+ transportLayer: simulatorTransport2,
192
+ ownPeerDescriptor: wsPeer2
193
+ })
194
+ await connectionManager1.start(() => wsPeer1)
195
+ await connectionManager2.start(() => wsPeer2)
196
+ })
197
+
198
+ afterEach(async () => {
199
+ await connectionManager1.stop()
200
+ await connectionManager2.stop()
201
+ })
202
+
203
+ it('Simultaneous Connections', async () => {
204
+ const msg1: Message = {
205
+ ...baseMsg,
206
+ targetDescriptor: wsPeer2
207
+ }
208
+ const msg2: Message = {
209
+ ...baseMsg,
210
+ targetDescriptor: wsPeer1
211
+ }
212
+
213
+ const promise1 = new Promise<void>((resolve, _reject) => {
214
+ connectionManager1.on('message', async (message: Message) => {
215
+ expect(message.messageType).toBe(MessageType.RPC)
216
+ resolve()
217
+ })
218
+ })
219
+ const promise2 = new Promise<void>((resolve, _reject) => {
220
+ connectionManager2.on('message', async (message: Message) => {
221
+ expect(message.messageType).toBe(MessageType.RPC)
222
+ resolve()
223
+ })
224
+ })
225
+
226
+ await Promise.all([
227
+ promise1,
228
+ promise2,
229
+ connectionManager1.send(msg1),
230
+ connectionManager2.send(msg2)
231
+ ])
232
+
233
+ await waitForCondition(() => connectionManager1.hasConnection(wsPeer2))
234
+ await waitForCondition(() => connectionManager2.hasConnection(wsPeer1))
235
+ })
236
+ })
237
+
238
+ describe('WebRTC', () => {
239
+
240
+ let connectionManager1: ConnectionManager
241
+ let connectionManager2: ConnectionManager
242
+
243
+ const wrtcPeer1: PeerDescriptor = {
244
+ kademliaId: PeerID.fromString('mock1').value,
245
+ nodeName: 'mock1WebRTC',
246
+ type: NodeType.NODEJS
247
+ }
248
+
249
+ const wrtcPeer2: PeerDescriptor = {
250
+ kademliaId: PeerID.fromString('mock2').value,
251
+ nodeName: 'mock2WebRTC',
252
+ type: NodeType.NODEJS
253
+ }
254
+
255
+ beforeEach(async () => {
256
+ connectionManager1 = new ConnectionManager({
257
+ transportLayer: simulatorTransport1,
258
+ ownPeerDescriptor: wrtcPeer1,
259
+ })
260
+ connectionManager2 = new ConnectionManager({
261
+ transportLayer: simulatorTransport2,
262
+ ownPeerDescriptor: wrtcPeer1,
263
+ })
264
+ await connectionManager1.start(() => wrtcPeer1)
265
+ await connectionManager2.start(() => wrtcPeer2)
266
+ })
267
+
268
+ afterEach(async () => {
269
+ await connectionManager1.stop()
270
+ await connectionManager2.stop()
271
+ })
272
+
273
+ it('Simultaneous Connections', async () => {
274
+ const msg1: Message = {
275
+ ...baseMsg,
276
+ targetDescriptor: wrtcPeer2
277
+ }
278
+ const msg2: Message = {
279
+ ...baseMsg,
280
+ targetDescriptor: wrtcPeer1
281
+ }
282
+
283
+ const promise1 = new Promise<void>((resolve, _reject) => {
284
+ connectionManager1.on('message', async (message: Message) => {
285
+ expect(message.messageType).toBe(MessageType.RPC)
286
+ resolve()
287
+ })
288
+ })
289
+ const promise2 = new Promise<void>((resolve, _reject) => {
290
+ connectionManager2.on('message', async (message: Message) => {
291
+ expect(message.messageType).toBe(MessageType.RPC)
292
+ resolve()
293
+ })
294
+ })
295
+
296
+ await Promise.all([
297
+ promise1,
298
+ promise2,
299
+ connectionManager1.send(msg1),
300
+ connectionManager2.send(msg2)
301
+ ])
302
+
303
+ await waitForCondition(() => connectionManager1.hasConnection(wrtcPeer2))
304
+ await waitForCondition(() => connectionManager2.hasConnection(wrtcPeer1))
305
+ })
306
+ })
307
+
308
+ })
@@ -0,0 +1,72 @@
1
+ import { LatencyType, Simulator } from '../../src/connection/Simulator/Simulator'
2
+ import { DhtNode } from '../../src/dht/DhtNode'
3
+ import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
+ import { createMockConnectionDhtNode, waitConnectionManagersReadyForTesting } from '../utils/utils'
5
+ import { isSamePeerDescriptor, PeerID } from '../../src/exports'
6
+ import { Any } from '../../src/proto/google/protobuf/any'
7
+
8
+ describe('Storing data in DHT', () => {
9
+ let entryPoint: DhtNode
10
+ let nodes: DhtNode[]
11
+ let entrypointDescriptor: PeerDescriptor
12
+ const simulator = new Simulator(LatencyType.RANDOM)
13
+ const NUM_NODES = 100
14
+ const MAX_CONNECTIONS = 20
15
+ const K = 4
16
+ const nodeIndicesById: Record<string, number> = {}
17
+
18
+ const getRandomNode = () => {
19
+ return nodes[Math.floor(Math.random() * nodes.length)]
20
+ }
21
+
22
+ beforeEach(async () => {
23
+ nodes = []
24
+ const entryPointId = '0'
25
+ entryPoint = await createMockConnectionDhtNode(entryPointId, simulator,
26
+ undefined, K, entryPointId, MAX_CONNECTIONS)
27
+ nodes.push(entryPoint)
28
+ nodeIndicesById[entryPoint.getNodeId().toKey()] = 0
29
+ entrypointDescriptor = {
30
+ kademliaId: entryPoint.getNodeId().value,
31
+ type: NodeType.NODEJS,
32
+ nodeName: entryPointId
33
+ }
34
+ nodes.push(entryPoint)
35
+ for (let i = 1; i < NUM_NODES; i++) {
36
+ const nodeId = `${i}`
37
+ const node = await createMockConnectionDhtNode(nodeId, simulator,
38
+ undefined, K, nodeId, MAX_CONNECTIONS, 60000)
39
+ nodeIndicesById[node.getNodeId().toKey()] = i
40
+ nodes.push(node)
41
+ }
42
+ await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
43
+ await waitConnectionManagersReadyForTesting(nodes.map((node) => node.connectionManager!), MAX_CONNECTIONS)
44
+ }, 90000)
45
+
46
+ afterEach(async () => {
47
+ await Promise.all(nodes.map((node) => node.stop()))
48
+ })
49
+
50
+ it('Storing data works', async () => {
51
+ const storingNodeIndex = 34
52
+ const dataKey = PeerID.fromString('3232323e12r31r3')
53
+ const data = Any.pack(entrypointDescriptor, PeerDescriptor)
54
+ const successfulStorers = await nodes[storingNodeIndex].storeDataToDht(dataKey.value, data)
55
+ expect(successfulStorers.length).toBeGreaterThan(4)
56
+ }, 90000)
57
+
58
+ it('Storing and getting data works', async () => {
59
+ const storingNode = getRandomNode()
60
+ const dataKey = PeerID.fromString('3232323e12r31r3')
61
+ const data = Any.pack(entrypointDescriptor, PeerDescriptor)
62
+ const successfulStorers = await storingNode.storeDataToDht(dataKey.value, data)
63
+ expect(successfulStorers.length).toBeGreaterThan(4)
64
+
65
+ const fetchingNode = getRandomNode()
66
+ const results = await fetchingNode.getDataFromDht(dataKey.value)
67
+ results.dataEntries!.forEach((entry) => {
68
+ const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
69
+ expect(isSamePeerDescriptor(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
70
+ })
71
+ }, 90000)
72
+ })
@@ -0,0 +1,93 @@
1
+ import { LatencyType, Simulator } from '../../src/connection/Simulator/Simulator'
2
+ import { DhtNode } from '../../src/dht/DhtNode'
3
+ import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
+ import { createMockConnectionDhtNode, waitConnectionManagersReadyForTesting } from '../utils/utils'
5
+ import { isSamePeerDescriptor, PeerID } from '../../src/exports'
6
+ import { Any } from '../../src/proto/google/protobuf/any'
7
+
8
+ describe('Storing data in DHT', () => {
9
+ let entryPoint: DhtNode
10
+ let nodes: DhtNode[]
11
+ let entrypointDescriptor: PeerDescriptor
12
+ const simulator = new Simulator(LatencyType.RANDOM)
13
+ const NUM_NODES = 5
14
+ const MAX_CONNECTIONS = 5
15
+ const K = 4
16
+ const nodeIndicesById: Record<string, number> = {}
17
+
18
+ const getRandomNode = () => {
19
+ return nodes[Math.floor(Math.random() * nodes.length)]
20
+ }
21
+
22
+ beforeEach(async () => {
23
+ nodes = []
24
+ const entryPointId = '0'
25
+ entryPoint = await createMockConnectionDhtNode(entryPointId, simulator,
26
+ undefined, K, entryPointId, MAX_CONNECTIONS)
27
+ nodes.push(entryPoint)
28
+ nodeIndicesById[entryPoint.getNodeId().toKey()] = 0
29
+ entrypointDescriptor = {
30
+ kademliaId: entryPoint.getNodeId().value,
31
+ type: NodeType.NODEJS,
32
+ nodeName: entryPointId
33
+ }
34
+ nodes.push(entryPoint)
35
+ for (let i = 1; i < NUM_NODES; i++) {
36
+ const nodeId = `${i}`
37
+ const node = await createMockConnectionDhtNode(nodeId, simulator,
38
+ undefined, K, nodeId, MAX_CONNECTIONS, 60000)
39
+ nodeIndicesById[node.getNodeId().toKey()] = i
40
+ nodes.push(node)
41
+ }
42
+ await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
43
+ await waitConnectionManagersReadyForTesting(nodes.map((node) => node.connectionManager!), MAX_CONNECTIONS)
44
+ }, 90000)
45
+
46
+ afterEach(async () => {
47
+ await Promise.all(nodes.map((node) => node.stop()))
48
+ })
49
+
50
+ it('Data can be deleted', async () => {
51
+ const storingNode = getRandomNode()
52
+ const dataKey = PeerID.fromString('3232323e12r31r3')
53
+ const data = Any.pack(entrypointDescriptor, PeerDescriptor)
54
+ const successfulStorers = await storingNode.storeDataToDht(dataKey.value, data)
55
+ expect(successfulStorers.length).toBeGreaterThan(4)
56
+ await storingNode.deleteDataFromDht(dataKey.value)
57
+
58
+ const fetchingNode = getRandomNode()
59
+ const results = await fetchingNode.getDataFromDht(dataKey.value)
60
+ results.dataEntries!.forEach((entry) => {
61
+ const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
62
+ expect(entry.deleted).toBeTrue()
63
+ expect(isSamePeerDescriptor(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
64
+ })
65
+ }, 90000)
66
+
67
+ it('Data can be deleted and re-stored', async () => {
68
+ const storingNode = getRandomNode()
69
+ const dataKey = PeerID.fromString('3232323e12r31r3')
70
+ const data = Any.pack(entrypointDescriptor, PeerDescriptor)
71
+ const successfulStorers1 = await storingNode.storeDataToDht(dataKey.value, data)
72
+ expect(successfulStorers1.length).toBeGreaterThan(4)
73
+ await storingNode.deleteDataFromDht(dataKey.value)
74
+
75
+ const fetchingNode = getRandomNode()
76
+ const results1 = await fetchingNode.getDataFromDht(dataKey.value)
77
+ results1.dataEntries!.forEach((entry) => {
78
+ const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
79
+ expect(entry.deleted).toBeTrue()
80
+ expect(isSamePeerDescriptor(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
81
+ })
82
+
83
+ const successfulStorers2 = await storingNode.storeDataToDht(dataKey.value, data)
84
+ expect(successfulStorers2.length).toBeGreaterThan(4)
85
+
86
+ const results2 = await fetchingNode.getDataFromDht(dataKey.value)
87
+ results2.dataEntries!.forEach((entry) => {
88
+ const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
89
+ expect(entry.deleted).toBeFalse()
90
+ expect(isSamePeerDescriptor(fetchedDescriptor, entrypointDescriptor)).toBeTrue()
91
+ })
92
+ }, 90000)
93
+ })
@@ -0,0 +1,71 @@
1
+ import { createMockConnectionDhtNode } from '../utils/utils'
2
+ import { DhtNode } from '../../src/dht/DhtNode'
3
+ import { Simulator } from '../../src/connection/Simulator/Simulator'
4
+ import { PeerID } from '../../src/helpers/PeerID'
5
+ import { Any } from '../../src/proto/google/protobuf/any'
6
+ import { PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
7
+ import { isSamePeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
8
+ import { waitForCondition } from '@streamr/utils'
9
+
10
+ describe('Storing data in DHT with two peers', () => {
11
+
12
+ let entryPoint: DhtNode
13
+ let otherNode: DhtNode
14
+
15
+ let simulator: Simulator | undefined
16
+
17
+ beforeEach(async () => {
18
+ simulator = new Simulator()
19
+ const entryPointId = 'node0'
20
+ const otherNodeId = 'other-node'
21
+ entryPoint = await createMockConnectionDhtNode(
22
+ entryPointId,
23
+ simulator,
24
+ )
25
+ otherNode = await createMockConnectionDhtNode(
26
+ otherNodeId,
27
+ simulator
28
+ )
29
+
30
+ await entryPoint.start()
31
+ await otherNode.start()
32
+
33
+ await entryPoint.joinDht([entryPoint.getPeerDescriptor()])
34
+ await otherNode.joinDht([entryPoint.getPeerDescriptor()])
35
+ })
36
+
37
+ afterEach(async () => {
38
+ await entryPoint.stop()
39
+ await otherNode.stop()
40
+ simulator?.stop()
41
+ })
42
+
43
+ it('Node can store on two peer DHT', async () => {
44
+ const dataKey1 = PeerID.fromString('node0-stored-data')
45
+ const data1 = Any.pack(otherNode.getPeerDescriptor(), PeerDescriptor)
46
+ const dataKey2 = PeerID.fromString('other-node-stored-data')
47
+ const data2 = Any.pack(entryPoint.getPeerDescriptor(), PeerDescriptor)
48
+
49
+ const successfulStorers1 = await otherNode.storeDataToDht(dataKey1.value, data1)
50
+ const successfulStorers2 = await entryPoint.storeDataToDht(dataKey2.value, data2)
51
+ expect(successfulStorers1[0].nodeName).toEqual(entryPoint.getPeerDescriptor().nodeName)
52
+ expect(successfulStorers2[0].nodeName).toEqual(otherNode.getPeerDescriptor().nodeName)
53
+
54
+ const foundData1 = await otherNode.getDataFromDht(dataKey1.value)
55
+ const foundData2 = await entryPoint.getDataFromDht(dataKey2.value)
56
+ expect(isSamePeerDescriptor(otherNode.getPeerDescriptor(), Any.unpack(foundData1.dataEntries![0]!.data!, PeerDescriptor))).toBeTrue()
57
+ expect(isSamePeerDescriptor(entryPoint.getPeerDescriptor(), Any.unpack(foundData2.dataEntries![0]!.data!, PeerDescriptor))).toBeTrue()
58
+ })
59
+
60
+ it('Can store on one peer DHT', async () => {
61
+ await otherNode.stop()
62
+ await waitForCondition(() => entryPoint.getBucketSize() === 0)
63
+ const dataKey = PeerID.fromString('data-to-store')
64
+ const data = Any.pack(entryPoint.getPeerDescriptor(), PeerDescriptor)
65
+ const successfulStorers = await entryPoint.storeDataToDht(dataKey.value, data)
66
+ expect(successfulStorers[0].nodeName).toEqual(entryPoint.getPeerDescriptor().nodeName)
67
+
68
+ const foundData = await entryPoint.getDataFromDht(dataKey.value)
69
+ expect(isSamePeerDescriptor(entryPoint.getPeerDescriptor(), Any.unpack(foundData.dataEntries![0]!.data!, PeerDescriptor))).toBeTrue()
70
+ }, 60000)
71
+ })