@streamr/dht 100.0.0-pretestnet.2 → 100.0.0-pretestnet.3

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 (316) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +7 -8
  2. package/dist/src/connection/ConnectionLockHandler.js +16 -14
  3. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  4. package/dist/src/connection/ConnectionLockRpcLocal.d.ts +20 -0
  5. package/dist/src/connection/ConnectionLockRpcLocal.js +47 -0
  6. package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -0
  7. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +4 -3
  8. package/dist/src/connection/ConnectionLockRpcRemote.js +6 -6
  9. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  10. package/dist/src/connection/ConnectionManager.d.ts +5 -8
  11. package/dist/src/connection/ConnectionManager.js +77 -107
  12. package/dist/src/connection/ConnectionManager.js.map +1 -1
  13. package/dist/src/connection/ConnectivityChecker.d.ts +7 -6
  14. package/dist/src/connection/ConnectivityChecker.js +23 -20
  15. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  16. package/dist/src/connection/ConnectorFacade.d.ts +15 -12
  17. package/dist/src/connection/ConnectorFacade.js +61 -26
  18. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  19. package/dist/src/connection/Handshaker.d.ts +2 -2
  20. package/dist/src/connection/Handshaker.js +28 -28
  21. package/dist/src/connection/Handshaker.js.map +1 -1
  22. package/dist/src/connection/IConnection.d.ts +5 -6
  23. package/dist/src/connection/IConnection.js.map +1 -1
  24. package/dist/src/connection/ManagedConnection.d.ts +3 -4
  25. package/dist/src/connection/ManagedConnection.js +30 -30
  26. package/dist/src/connection/ManagedConnection.js.map +1 -1
  27. package/dist/src/connection/ManagedWebrtcConnection.d.ts +7 -0
  28. package/dist/src/connection/ManagedWebrtcConnection.js +20 -0
  29. package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -0
  30. package/dist/src/connection/{Simulator → simulator}/Simulator.js +3 -3
  31. package/dist/src/connection/{Simulator → simulator}/Simulator.js.map +1 -1
  32. package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.d.ts +3 -4
  33. package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.js +22 -22
  34. package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
  35. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +2 -2
  36. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +11 -11
  37. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js.map +1 -1
  38. package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.d.ts +1 -1
  39. package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.js +2 -2
  40. package/dist/src/connection/simulator/SimulatorTransport.js.map +1 -0
  41. package/dist/src/connection/{Simulator → simulator}/pings.js.map +1 -1
  42. package/dist/src/connection/{WebRTC/IWebRtcConnection.d.ts → webrtc/IWebrtcConnection.d.ts} +2 -2
  43. package/dist/src/connection/{WebRTC/IWebRtcConnection.js → webrtc/IWebrtcConnection.js} +1 -1
  44. package/dist/src/connection/webrtc/IWebrtcConnection.js.map +1 -0
  45. package/dist/src/connection/{WebRTC/NodeWebRtcConnection.d.ts → webrtc/NodeWebrtcConnection.d.ts} +6 -7
  46. package/dist/src/connection/{WebRTC/NodeWebRtcConnection.js → webrtc/NodeWebrtcConnection.js} +36 -36
  47. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -0
  48. package/dist/src/connection/webrtc/WebrtcConnector.d.ts +38 -0
  49. package/dist/src/connection/webrtc/WebrtcConnector.js +178 -0
  50. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -0
  51. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +26 -0
  52. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +99 -0
  53. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -0
  54. package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.d.ts → webrtc/WebrtcConnectorRpcRemote.d.ts} +4 -4
  55. package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.js → webrtc/WebrtcConnectorRpcRemote.js} +6 -8
  56. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -0
  57. package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.d.ts +1 -1
  58. package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js.map +1 -1
  59. package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +26 -0
  60. package/dist/src/connection/websocket/AutoCertifierClientFacade.js +37 -0
  61. package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -0
  62. package/dist/src/connection/{WebSocket/ClientWebSocket.d.ts → websocket/ClientWebsocket.d.ts} +5 -4
  63. package/dist/src/connection/{WebSocket/ClientWebSocket.js → websocket/ClientWebsocket.js} +20 -16
  64. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -0
  65. package/dist/src/connection/{WebSocket/ServerWebSocket.d.ts → websocket/ServerWebsocket.d.ts} +2 -2
  66. package/dist/src/connection/{WebSocket/ServerWebSocket.js → websocket/ServerWebsocket.js} +23 -27
  67. package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
  68. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcLocal.d.ts → websocket/WebsocketConnector.d.ts} +23 -15
  69. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcLocal.js → websocket/WebsocketConnector.js} +107 -101
  70. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -0
  71. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +17 -0
  72. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +26 -0
  73. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -0
  74. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.d.ts → websocket/WebsocketConnectorRpcRemote.d.ts} +3 -3
  75. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js → websocket/WebsocketConnectorRpcRemote.js} +5 -10
  76. package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js.map → websocket/WebsocketConnectorRpcRemote.js.map} +1 -1
  77. package/dist/src/connection/{WebSocket/WebSocketServer.d.ts → websocket/WebsocketServer.d.ts} +6 -3
  78. package/dist/src/connection/{WebSocket/WebSocketServer.js → websocket/WebsocketServer.js} +39 -19
  79. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -0
  80. package/dist/src/dht/DhtNode.d.ts +11 -19
  81. package/dist/src/dht/DhtNode.js +119 -150
  82. package/dist/src/dht/DhtNode.js.map +1 -1
  83. package/dist/src/dht/DhtNodeRpcLocal.d.ts +22 -0
  84. package/dist/src/dht/DhtNodeRpcLocal.js +42 -0
  85. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -0
  86. package/dist/src/dht/{RemoteDhtNode.d.ts → DhtNodeRpcRemote.d.ts} +5 -3
  87. package/dist/src/dht/{RemoteDhtNode.js → DhtNodeRpcRemote.js} +17 -21
  88. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -0
  89. package/dist/src/dht/ExternalApiRpcLocal.d.ts +16 -0
  90. package/dist/src/dht/ExternalApiRpcLocal.js +30 -0
  91. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -0
  92. package/dist/src/dht/ExternalApiRpcRemote.d.ts +1 -1
  93. package/dist/src/dht/ExternalApiRpcRemote.js +2 -2
  94. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  95. package/dist/src/dht/contact/Remote.d.ts +4 -1
  96. package/dist/src/dht/contact/Remote.js +28 -2
  97. package/dist/src/dht/contact/Remote.js.map +1 -1
  98. package/dist/src/dht/contact/SortedContactList.d.ts +2 -2
  99. package/dist/src/dht/contact/SortedContactList.js +3 -3
  100. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  101. package/dist/src/dht/discovery/DiscoverySession.d.ts +9 -7
  102. package/dist/src/dht/discovery/DiscoverySession.js +8 -8
  103. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  104. package/dist/src/dht/discovery/PeerDiscovery.d.ts +7 -10
  105. package/dist/src/dht/discovery/PeerDiscovery.js +5 -5
  106. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  107. package/dist/src/dht/find/FindRpcLocal.d.ts +14 -0
  108. package/dist/src/dht/find/FindRpcLocal.js +25 -0
  109. package/dist/src/dht/find/FindRpcLocal.js.map +1 -0
  110. package/dist/src/dht/find/{RecursiveFindSession.d.ts → FindSession.d.ts} +12 -13
  111. package/dist/src/dht/find/{RecursiveFindSession.js → FindSession.js} +17 -15
  112. package/dist/src/dht/find/FindSession.js.map +1 -0
  113. package/dist/src/dht/find/FindSessionRpcLocal.d.ts +12 -0
  114. package/dist/src/dht/find/FindSessionRpcLocal.js +17 -0
  115. package/dist/src/dht/find/FindSessionRpcLocal.js.map +1 -0
  116. package/dist/src/dht/find/{RemoteRecursiveFindSession.d.ts → FindSessionRpcRemote.d.ts} +2 -2
  117. package/dist/src/dht/find/{RemoteRecursiveFindSession.js → FindSessionRpcRemote.js} +5 -5
  118. package/dist/src/dht/find/FindSessionRpcRemote.js.map +1 -0
  119. package/dist/src/dht/find/{RecursiveFinder.d.ts → Finder.d.ts} +16 -19
  120. package/dist/src/dht/find/{RecursiveFinder.js → Finder.js} +50 -46
  121. package/dist/src/dht/find/Finder.js.map +1 -0
  122. package/dist/src/dht/routing/FindRpcRemote.d.ts +6 -0
  123. package/dist/src/dht/routing/FindRpcRemote.js +41 -0
  124. package/dist/src/dht/routing/FindRpcRemote.js.map +1 -0
  125. package/dist/src/dht/routing/Router.d.ts +10 -17
  126. package/dist/src/dht/routing/Router.js +47 -90
  127. package/dist/src/dht/routing/Router.js.map +1 -1
  128. package/dist/src/dht/routing/RouterRpcLocal.d.ts +22 -0
  129. package/dist/src/dht/routing/RouterRpcLocal.js +66 -0
  130. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -0
  131. package/dist/src/dht/routing/RouterRpcRemote.d.ts +0 -1
  132. package/dist/src/dht/routing/RouterRpcRemote.js +15 -43
  133. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  134. package/dist/src/dht/routing/RoutingSession.d.ts +17 -8
  135. package/dist/src/dht/routing/RoutingSession.js +124 -131
  136. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  137. package/dist/src/dht/routing/getPreviousPeer.d.ts +2 -0
  138. package/dist/src/dht/routing/getPreviousPeer.js +9 -0
  139. package/dist/src/dht/routing/getPreviousPeer.js.map +1 -0
  140. package/dist/src/dht/store/StoreRpcLocal.d.ts +11 -8
  141. package/dist/src/dht/store/StoreRpcLocal.js +25 -24
  142. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  143. package/dist/src/dht/store/StoreRpcRemote.js +3 -7
  144. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
  145. package/dist/src/exports.d.ts +11 -5
  146. package/dist/src/exports.js +17 -4
  147. package/dist/src/exports.js.map +1 -1
  148. package/dist/src/helpers/Connectivity.d.ts +4 -0
  149. package/dist/src/helpers/Connectivity.js +24 -0
  150. package/dist/src/helpers/Connectivity.js.map +1 -0
  151. package/dist/src/helpers/errors.d.ts +3 -3
  152. package/dist/src/helpers/errors.js +7 -7
  153. package/dist/src/helpers/protoClasses.js +3 -3
  154. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +56 -39
  155. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +49 -36
  156. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  157. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +64 -84
  158. package/dist/src/proto/packages/dht/protos/DhtRpc.js +64 -66
  159. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  160. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -21
  161. package/dist/src/rpc-protocol/DhtCallContext.d.ts +0 -1
  162. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
  163. package/dist/src/transport/ITransport.d.ts +5 -6
  164. package/dist/src/transport/ListeningRpcCommunicator.d.ts +2 -1
  165. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  166. package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
  167. package/dist/src/transport/RoutingRpcCommunicator.js +0 -1
  168. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  169. package/dist/src/types/ServiceID.d.ts +1 -0
  170. package/dist/src/types/ServiceID.js +3 -0
  171. package/dist/src/types/ServiceID.js.map +1 -0
  172. package/karma.config.js +4 -4
  173. package/package.json +10 -8
  174. package/protos/DhtRpc.proto +32 -35
  175. package/src/connection/ConnectionLockHandler.ts +19 -17
  176. package/src/connection/ConnectionLockRpcLocal.ts +74 -0
  177. package/src/connection/ConnectionLockRpcRemote.ts +7 -6
  178. package/src/connection/ConnectionManager.ts +59 -95
  179. package/src/connection/ConnectivityChecker.ts +30 -26
  180. package/src/connection/ConnectorFacade.ts +74 -34
  181. package/src/connection/Handshaker.ts +9 -9
  182. package/src/connection/IConnection.ts +5 -6
  183. package/src/connection/ManagedConnection.ts +21 -22
  184. package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +9 -9
  185. package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
  186. package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +23 -24
  187. package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +13 -13
  188. package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
  189. package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +12 -13
  190. package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
  191. package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +32 -33
  192. package/src/connection/webrtc/WebrtcConnector.ts +225 -0
  193. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +132 -0
  194. package/src/connection/{WebRTC/WebRtcConnectorRpcRemote.ts → webrtc/WebrtcConnectorRpcRemote.ts} +6 -7
  195. package/src/connection/{WebRTC → webrtc}/iceServerAsString.ts +1 -1
  196. package/src/connection/websocket/AutoCertifierClientFacade.ts +91 -0
  197. package/src/connection/{WebSocket/ClientWebSocket.ts → websocket/ClientWebsocket.ts} +19 -17
  198. package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +21 -27
  199. package/src/connection/{WebSocket/WebSocketConnectorRpcLocal.ts → websocket/WebsocketConnector.ts} +109 -100
  200. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
  201. package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +6 -12
  202. package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
  203. package/src/dht/DhtNode.ts +144 -179
  204. package/src/dht/DhtNodeRpcLocal.ts +68 -0
  205. package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +12 -13
  206. package/src/dht/ExternalApiRpcLocal.ts +46 -0
  207. package/src/dht/ExternalApiRpcRemote.ts +4 -4
  208. package/src/dht/contact/Remote.ts +32 -4
  209. package/src/dht/contact/SortedContactList.ts +4 -4
  210. package/src/dht/discovery/DiscoverySession.ts +23 -20
  211. package/src/dht/discovery/PeerDiscovery.ts +14 -17
  212. package/src/dht/find/FindRpcLocal.ts +35 -0
  213. package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +25 -25
  214. package/src/dht/find/FindSessionRpcLocal.ts +25 -0
  215. package/src/dht/find/{RemoteRecursiveFindSession.ts → FindSessionRpcRemote.ts} +9 -5
  216. package/src/dht/find/{RecursiveFinder.ts → Finder.ts} +77 -71
  217. package/src/dht/routing/FindRpcRemote.ts +40 -0
  218. package/src/dht/routing/Router.ts +69 -105
  219. package/src/dht/routing/RouterRpcLocal.ts +81 -0
  220. package/src/dht/routing/RouterRpcRemote.ts +15 -45
  221. package/src/dht/routing/RoutingSession.ts +56 -61
  222. package/src/dht/routing/getPreviousPeer.ts +6 -0
  223. package/src/dht/store/StoreRpcLocal.ts +44 -37
  224. package/src/dht/store/StoreRpcRemote.ts +4 -8
  225. package/src/exports.ts +11 -5
  226. package/src/helpers/Connectivity.ts +19 -0
  227. package/src/helpers/errors.ts +3 -3
  228. package/src/helpers/protoClasses.ts +6 -6
  229. package/src/proto/packages/dht/protos/DhtRpc.client.ts +75 -59
  230. package/src/proto/packages/dht/protos/DhtRpc.server.ts +26 -21
  231. package/src/proto/packages/dht/protos/DhtRpc.ts +87 -114
  232. package/src/rpc-protocol/DhtCallContext.ts +0 -1
  233. package/src/transport/ITransport.ts +5 -8
  234. package/src/transport/ListeningRpcCommunicator.ts +2 -1
  235. package/src/transport/RoutingRpcCommunicator.ts +3 -4
  236. package/src/types/ServiceID.ts +1 -0
  237. package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +6 -6
  238. package/test/benchmark/KademliaCorrectness.test.ts +2 -2
  239. package/test/benchmark/kademlia-simulation/SimulationNode.ts +3 -3
  240. package/test/end-to-end/Layer0-Layer1.test.ts +13 -5
  241. package/test/end-to-end/Layer0.test.ts +35 -17
  242. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +24 -6
  243. package/test/end-to-end/{Layer0WebRTC-Layer1.test.ts → Layer0Webrtc-Layer1.test.ts} +1 -1
  244. package/test/end-to-end/{Layer0WebRTC.test.ts → Layer0Webrtc.test.ts} +14 -10
  245. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -4
  246. package/test/end-to-end/{Layer1-Scale-WebRTC.test.ts → Layer1-Scale-Webrtc.test.ts} +2 -2
  247. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +52 -0
  248. package/test/end-to-end/{WebSocketConnectionRequest.test.ts → WebsocketConnectionRequest.test.ts} +16 -8
  249. package/test/end-to-end/memory-leak.test.ts +85 -0
  250. package/test/integration/ConnectionLocking.test.ts +4 -4
  251. package/test/integration/ConnectionManager.test.ts +37 -28
  252. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
  253. package/test/integration/DhtNodeExternalAPI.test.ts +10 -10
  254. package/test/integration/{RemoteDhtNode.test.ts → DhtNodeRpcRemote.test.ts} +10 -10
  255. package/test/integration/DhtRpc.test.ts +5 -5
  256. package/test/integration/{RecursiveFind.test.ts → Find.test.ts} +3 -3
  257. package/test/integration/Layer1-scale.test.ts +1 -1
  258. package/test/integration/MigrateData.test.ts +6 -5
  259. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
  260. package/test/integration/MultipleEntryPointJoining.test.ts +6 -6
  261. package/test/integration/RouteMessage.test.ts +26 -26
  262. package/test/integration/RpcErrors.test.ts +10 -10
  263. package/test/integration/ScaleDownDht.test.ts +3 -3
  264. package/test/integration/SimultaneousConnections.test.ts +10 -7
  265. package/test/integration/Store.test.ts +1 -1
  266. package/test/integration/StoreAndDelete.test.ts +1 -1
  267. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
  268. package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +4 -4
  269. package/test/integration/{WebRtcConnectorRpc.test.ts → WebrtcConnectorRpc.test.ts} +7 -8
  270. package/test/integration/{WebSocket.test.ts → Websocket.test.ts} +14 -13
  271. package/test/integration/{WebSocketConnectionManagement.test.ts → WebsocketConnectionManagement.test.ts} +4 -4
  272. package/test/integration/{WebSocketConnectorRpc.test.ts → WebsocketConnectorRpc.test.ts} +15 -15
  273. package/test/unit/AutoCertifierClientFacade.test.ts +58 -0
  274. package/test/unit/ConnectivityHelpers.test.ts +69 -0
  275. package/test/unit/{RecursiveFinder.test.ts → Finder.test.ts} +19 -17
  276. package/test/unit/Router.test.ts +26 -26
  277. package/test/unit/UUID.test.ts +1 -1
  278. package/test/unit/{WebSocketConnectorRpcLocal.test.ts → WebsocketConnector.test.ts} +8 -8
  279. package/test/unit/{WebSocketServer.test.ts → WebsocketServer.test.ts} +20 -14
  280. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +1 -1
  281. package/test/utils/FakeRpcCommunicator.ts +23 -0
  282. package/test/utils/mock/Transport.ts +1 -1
  283. package/test/utils/utils.ts +14 -24
  284. package/tsconfig.browser.json +1 -1
  285. package/tsconfig.jest.json +3 -2
  286. package/tsconfig.node.json +3 -2
  287. package/dist/src/connection/ManagedWebRtcConnection.d.ts +0 -7
  288. package/dist/src/connection/ManagedWebRtcConnection.js +0 -20
  289. package/dist/src/connection/ManagedWebRtcConnection.js.map +0 -1
  290. package/dist/src/connection/Simulator/SimulatorConnection.js.map +0 -1
  291. package/dist/src/connection/Simulator/SimulatorTransport.js.map +0 -1
  292. package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +0 -1
  293. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +0 -1
  294. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.d.ts +0 -51
  295. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js +0 -249
  296. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +0 -1
  297. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +0 -1
  298. package/dist/src/connection/WebSocket/ClientWebSocket.js.map +0 -1
  299. package/dist/src/connection/WebSocket/ServerWebSocket.js.map +0 -1
  300. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +0 -1
  301. package/dist/src/connection/WebSocket/WebSocketServer.js.map +0 -1
  302. package/dist/src/dht/RemoteDhtNode.js.map +0 -1
  303. package/dist/src/dht/find/RecursiveFindSession.js.map +0 -1
  304. package/dist/src/dht/find/RecursiveFinder.js.map +0 -1
  305. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +0 -1
  306. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +0 -2
  307. package/dist/src/dht/registerExternalApiRpcMethods.js +0 -32
  308. package/dist/src/dht/registerExternalApiRpcMethods.js.map +0 -1
  309. package/src/connection/WebRTC/WebRtcConnectorRpcLocal.ts +0 -335
  310. package/src/dht/registerExternalApiRpcMethods.ts +0 -44
  311. package/test/utils/mock/RecursiveFinder.ts +0 -19
  312. /package/dist/src/connection/{Simulator → simulator}/Simulator.d.ts +0 -0
  313. /package/dist/src/connection/{Simulator → simulator}/pings.d.ts +0 -0
  314. /package/dist/src/connection/{Simulator → simulator}/pings.js +0 -0
  315. /package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js +0 -0
  316. /package/src/connection/{Simulator → simulator}/pings.ts +0 -0
@@ -1,9 +1,8 @@
1
- import { RemoteDhtNode } from './RemoteDhtNode'
1
+ import { DhtNodeRpcRemote } from './DhtNodeRpcRemote'
2
2
  import KBucket from 'k-bucket'
3
3
  import { EventEmitter } from 'eventemitter3'
4
4
  import { SortedContactList } from './contact/SortedContactList'
5
5
  import { RoutingRpcCommunicator } from '../transport/RoutingRpcCommunicator'
6
- import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
7
6
  import { PeerID, PeerIDKey } from '../helpers/PeerID'
8
7
  import {
9
8
  ClosestPeersRequest,
@@ -16,10 +15,14 @@ import {
16
15
  PingRequest,
17
16
  PingResponse,
18
17
  DataEntry,
18
+ ExternalFindDataRequest,
19
+ ExternalFindDataResponse,
20
+ ExternalStoreDataRequest,
21
+ ExternalStoreDataResponse,
19
22
  } from '../proto/packages/dht/protos/DhtRpc'
20
- import { DisconnectionType, ITransport, TransportEvents } from '../transport/ITransport'
23
+ import { ITransport, TransportEvents } from '../transport/ITransport'
21
24
  import { ConnectionManager, PortRange, TlsCertificate } from '../connection/ConnectionManager'
22
- import { DhtRpcServiceClient, ExternalApiRpcClient } from '../proto/packages/dht/protos/DhtRpc.client'
25
+ import { DhtNodeRpcClient, ExternalApiRpcClient } from '../proto/packages/dht/protos/DhtRpc.client'
23
26
  import {
24
27
  Logger,
25
28
  MetricsContext,
@@ -29,32 +32,28 @@ import {
29
32
  } from '@streamr/utils'
30
33
  import { toProtoRpcClient } from '@streamr/proto-rpc'
31
34
  import { RandomContactList } from './contact/RandomContactList'
32
- import { Empty } from '../proto/google/protobuf/empty'
33
- import { DhtCallContext } from '../rpc-protocol/DhtCallContext'
34
35
  import { Any } from '../proto/google/protobuf/any'
35
36
  import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
36
37
  import { Router } from './routing/Router'
37
- import { RecursiveFinder, RecursiveFindResult } from './find/RecursiveFinder'
38
+ import { Finder, FindResult } from './find/Finder'
38
39
  import { StoreRpcLocal } from './store/StoreRpcLocal'
39
40
  import { PeerDiscovery } from './discovery/PeerDiscovery'
40
41
  import { LocalDataStore } from './store/LocalDataStore'
41
- import { IceServer } from '../connection/WebRTC/WebRtcConnectorRpcLocal'
42
- import { registerExternalApiRpcMethods } from './registerExternalApiRpcMethods'
42
+ import { IceServer } from '../connection/webrtc/WebrtcConnector'
43
43
  import { ExternalApiRpcRemote } from './ExternalApiRpcRemote'
44
44
  import { UUID } from '../helpers/UUID'
45
45
  import { isBrowserEnvironment } from '../helpers/browser/isBrowserEnvironment'
46
46
  import { sample } from 'lodash'
47
47
  import { DefaultConnectorFacade, DefaultConnectorFacadeConfig } from '../connection/ConnectorFacade'
48
48
  import { MarkRequired } from 'ts-essentials'
49
+ import { DhtNodeRpcLocal } from './DhtNodeRpcLocal'
50
+ import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
51
+ import { ExternalApiRpcLocal } from './ExternalApiRpcLocal'
49
52
 
50
53
  export interface DhtNodeEvents {
51
54
  newContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
52
55
  contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
53
56
  joinCompleted: () => void
54
- newKbucketContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
55
- kbucketContactRemoved: (peerDescriptor: PeerDescriptor) => void
56
- newOpenInternetContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
57
- openInternetContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
58
57
  newRandomContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
59
58
  randomContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
60
59
  }
@@ -78,6 +77,7 @@ export interface DhtNodeOptions {
78
77
  entryPoints?: PeerDescriptor[]
79
78
  websocketHost?: string
80
79
  websocketPortRange?: PortRange
80
+ websocketServerEnableTls?: boolean
81
81
  peerId?: string
82
82
 
83
83
  rpcRequestTimeout?: number
@@ -91,6 +91,8 @@ export interface DhtNodeOptions {
91
91
  maxConnections?: number
92
92
  tlsCertificate?: TlsCertificate
93
93
  externalIp?: string
94
+ autoCertifierUrl?: string
95
+ autoCertifierConfigFile?: string
94
96
  }
95
97
 
96
98
  type StrictDhtNodeOptions = MarkRequired<DhtNodeOptions,
@@ -124,7 +126,6 @@ export const createPeerDescriptor = (msg?: ConnectivityResponse, peerId?: string
124
126
  const ret: PeerDescriptor = { kademliaId, type: nodeType }
125
127
  if (msg && msg.websocket) {
126
128
  ret.websocket = { host: msg.websocket.host, port: msg.websocket.port, tls: msg.websocket.tls }
127
- ret.openInternet = true
128
129
  }
129
130
  return ret
130
131
  }
@@ -132,18 +133,17 @@ export const createPeerDescriptor = (msg?: ConnectivityResponse, peerId?: string
132
133
  export class DhtNode extends EventEmitter<Events> implements ITransport {
133
134
 
134
135
  private readonly config: StrictDhtNodeOptions
135
- private bucket?: KBucket<RemoteDhtNode>
136
- private connections: Map<PeerIDKey, RemoteDhtNode> = new Map()
137
- private neighborList?: SortedContactList<RemoteDhtNode>
138
- private openInternetPeers?: SortedContactList<RemoteDhtNode>
139
- private randomPeers?: RandomContactList<RemoteDhtNode>
136
+ private bucket?: KBucket<DhtNodeRpcRemote>
137
+ private connections: Map<PeerIDKey, DhtNodeRpcRemote> = new Map()
138
+ private neighborList?: SortedContactList<DhtNodeRpcRemote>
139
+ private randomPeers?: RandomContactList<DhtNodeRpcRemote>
140
140
  private rpcCommunicator?: RoutingRpcCommunicator
141
141
  private transport?: ITransport
142
- private ownPeerDescriptor?: PeerDescriptor
142
+ private localPeerDescriptor?: PeerDescriptor
143
143
  public router?: Router
144
144
  private storeRpcLocal?: StoreRpcLocal
145
145
  private localDataStore = new LocalDataStore()
146
- private recursiveFinder?: RecursiveFinder
146
+ private finder?: Finder
147
147
  private peerDiscovery?: PeerDiscovery
148
148
 
149
149
  public connectionManager?: ConnectionManager
@@ -188,7 +188,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
188
188
  // If transport is given, do not create a ConnectionManager
189
189
  if (this.config.transport) {
190
190
  this.transport = this.config.transport
191
- this.ownPeerDescriptor = this.transport.getPeerDescriptor()
191
+ this.localPeerDescriptor = this.transport.getLocalPeerDescriptor()
192
192
  if (this.config.transport instanceof ConnectionManager) {
193
193
  this.connectionManager = this.config.transport
194
194
  }
@@ -203,9 +203,12 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
203
203
  webrtcNewConnectionTimeout: this.config.webrtcNewConnectionTimeout,
204
204
  webrtcPortRange: this.config.webrtcPortRange,
205
205
  maxMessageSize: this.config.maxMessageSize,
206
+ websocketServerEnableTls: this.config.websocketServerEnableTls,
206
207
  tlsCertificate: this.config.tlsCertificate,
207
208
  externalIp: this.config.externalIp,
208
- createOwnPeerDescriptor: (connectivityResponse: ConnectivityResponse) => this.generatePeerDescriptorCallBack(connectivityResponse),
209
+ autoCertifierUrl: this.config.autoCertifierUrl,
210
+ autoCertifierConfigFile: this.config.autoCertifierConfigFile,
211
+ createLocalPeerDescriptor: (connectivityResponse: ConnectivityResponse) => this.generatePeerDescriptorCallBack(connectivityResponse),
209
212
  }
210
213
  // If own PeerDescriptor is given in config, create a ConnectionManager with ws server
211
214
  if (this.config.peerDescriptor?.websocket) {
@@ -238,38 +241,35 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
238
241
 
239
242
  this.transport.on('message', (message: Message) => this.handleMessage(message))
240
243
 
241
- this.bindDefaultServerMethods()
242
- this.initKBuckets(peerIdFromPeerDescriptor(this.ownPeerDescriptor!))
244
+ this.initKBuckets(peerIdFromPeerDescriptor(this.localPeerDescriptor!))
243
245
  this.peerDiscovery = new PeerDiscovery({
244
246
  rpcCommunicator: this.rpcCommunicator,
245
- ownPeerDescriptor: this.ownPeerDescriptor!,
247
+ localPeerDescriptor: this.localPeerDescriptor!,
246
248
  bucket: this.bucket!,
247
- connections: this.connections,
248
249
  neighborList: this.neighborList!,
249
- randomPeers: this.randomPeers!,
250
- openInternetPeers: this.openInternetPeers!,
251
250
  joinNoProgressLimit: this.config.joinNoProgressLimit,
252
251
  peerDiscoveryQueryBatchSize: this.config.peerDiscoveryQueryBatchSize,
253
252
  joinTimeout: this.config.dhtJoinTimeout,
254
253
  serviceId: this.config.serviceId,
255
254
  parallelism: this.config.joinParallelism,
256
255
  addContact: this.addNewContact.bind(this),
257
- connectionManager: this.connectionManager
256
+ connectionManager: this.connectionManager,
257
+ rpcRequestTimeout: this.config.rpcRequestTimeout
258
258
  })
259
259
  this.router = new Router({
260
260
  rpcCommunicator: this.rpcCommunicator,
261
261
  connections: this.connections,
262
- ownPeerDescriptor: this.ownPeerDescriptor!,
262
+ localPeerDescriptor: this.localPeerDescriptor!,
263
263
  addContact: this.addNewContact.bind(this),
264
264
  serviceId: this.config.serviceId,
265
265
  connectionManager: this.connectionManager
266
266
  })
267
- this.recursiveFinder = new RecursiveFinder({
267
+ this.finder = new Finder({
268
268
  rpcCommunicator: this.rpcCommunicator,
269
269
  router: this.router,
270
270
  sessionTransport: this,
271
271
  connections: this.connections,
272
- ownPeerDescriptor: this.ownPeerDescriptor!,
272
+ localPeerDescriptor: this.localPeerDescriptor!,
273
273
  serviceId: this.config.serviceId,
274
274
  addContact: this.addNewContact.bind(this),
275
275
  isPeerCloserToIdThanSelf: this.isPeerCloserToIdThanSelf.bind(this),
@@ -277,8 +277,8 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
277
277
  })
278
278
  this.storeRpcLocal = new StoreRpcLocal({
279
279
  rpcCommunicator: this.rpcCommunicator,
280
- recursiveFinder: this.recursiveFinder,
281
- ownPeerDescriptor: this.ownPeerDescriptor!,
280
+ finder: this.finder,
281
+ localPeerDescriptor: this.localPeerDescriptor!,
282
282
  serviceId: this.config.serviceId,
283
283
  highestTtl: this.config.storeHighestTtl,
284
284
  maxTtl: this.config.storeMaxTtl,
@@ -287,93 +287,90 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
287
287
  dhtNodeEmitter: this,
288
288
  getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => {
289
289
  return this.bucket!.closest(id, n)
290
- }
290
+ },
291
+ rpcRequestTimeout: this.config.rpcRequestTimeout
291
292
  })
292
- registerExternalApiRpcMethods(this)
293
+ this.bindRpcLocalMethods()
293
294
  if (this.connectionManager! && this.config.entryPoints && this.config.entryPoints.length > 0
294
- && !areEqualPeerDescriptors(this.config.entryPoints[0], this.ownPeerDescriptor!)) {
295
+ && !areEqualPeerDescriptors(this.config.entryPoints[0], this.localPeerDescriptor!)) {
295
296
  this.connectToEntryPoint(this.config.entryPoints[0])
296
297
  }
297
298
  }
298
299
 
299
- private initKBuckets = (selfId: PeerID) => {
300
- this.bucket = new KBucket<RemoteDhtNode>({
300
+ private initKBuckets(selfId: PeerID) {
301
+ this.bucket = new KBucket<DhtNodeRpcRemote>({
301
302
  localNodeId: selfId.value,
302
303
  numberOfNodesPerKBucket: this.config.numberOfNodesPerKBucket,
303
304
  numberOfNodesToPing: this.config.numberOfNodesPerKBucket
304
305
  })
305
- this.bucket.on('ping', (oldContacts: RemoteDhtNode[], newContact: RemoteDhtNode) => this.onKBucketPing(oldContacts, newContact))
306
- this.bucket.on('removed', (contact: RemoteDhtNode) => this.onKBucketRemoved(contact))
307
- this.bucket.on('added', (contact: RemoteDhtNode) => this.onKBucketAdded(contact))
306
+ this.bucket.on('ping', (oldContacts: DhtNodeRpcRemote[], newContact: DhtNodeRpcRemote) => this.onKBucketPing(oldContacts, newContact))
307
+ this.bucket.on('removed', (contact: DhtNodeRpcRemote) => this.onKBucketRemoved(contact))
308
+ this.bucket.on('added', (contact: DhtNodeRpcRemote) => this.onKBucketAdded(contact))
308
309
  this.bucket.on('updated', () => {
309
310
  // TODO: Update contact info to the connection manager and reconnect
310
311
  })
311
312
  this.neighborList = new SortedContactList(selfId, this.config.maxNeighborListSize)
312
- this.neighborList.on('contactRemoved', (removedContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) => {
313
+ this.neighborList.on('contactRemoved', (removedContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) => {
313
314
  if (this.stopped) {
314
315
  return
315
316
  }
316
317
  this.emit('contactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
317
318
  this.randomPeers!.addContact(
318
- new RemoteDhtNode(
319
- this.ownPeerDescriptor!,
319
+ new DhtNodeRpcRemote(
320
+ this.localPeerDescriptor!,
320
321
  removedContact.getPeerDescriptor(),
321
- toProtoRpcClient(new DhtRpcServiceClient(this.rpcCommunicator!.getRpcClientTransport())),
322
- this.config.serviceId
322
+ toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
323
+ this.config.serviceId,
324
+ this.config.rpcRequestTimeout
323
325
  )
324
326
  )
325
327
  })
326
- this.neighborList.on('newContact', (newContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
328
+ this.neighborList.on('newContact', (newContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) =>
327
329
  this.emit('newContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
328
330
  )
329
- this.openInternetPeers = new SortedContactList(selfId, this.config.maxNeighborListSize / 2)
330
- this.openInternetPeers.on('contactRemoved', (removedContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
331
- this.emit('openInternetContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
332
- )
333
- this.openInternetPeers.on('newContact', (newContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
334
- this.emit('newOpenInternetContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
335
- )
336
331
  this.transport!.on('connected', (peerDescriptor: PeerDescriptor) => this.onTransportConnected(peerDescriptor))
337
332
 
338
- this.transport!.on('disconnected', (peerDescriptor: PeerDescriptor, disonnectionType: DisconnectionType) => {
339
- this.onTransportDisconnected(peerDescriptor, disonnectionType)
333
+ this.transport!.on('disconnected', (peerDescriptor: PeerDescriptor, gracefulLeave: boolean) => {
334
+ this.onTransportDisconnected(peerDescriptor, gracefulLeave)
340
335
  })
341
336
 
342
337
  this.transport!.getAllConnectionPeerDescriptors().forEach((peer) => {
343
- const remoteDhtNode = new RemoteDhtNode(
344
- this.ownPeerDescriptor!,
338
+ const rpcRemote = new DhtNodeRpcRemote(
339
+ this.localPeerDescriptor!,
345
340
  peer,
346
- toProtoRpcClient(new DhtRpcServiceClient(this.rpcCommunicator!.getRpcClientTransport())),
347
- this.config.serviceId
341
+ toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
342
+ this.config.serviceId,
343
+ this.config.rpcRequestTimeout
348
344
  )
349
- if (areEqualPeerDescriptors(peer, this.ownPeerDescriptor!)) {
345
+ if (areEqualPeerDescriptors(peer, this.localPeerDescriptor!)) {
350
346
  logger.error('own peerdescriptor added to connections in initKBucket')
351
347
  }
352
- this.connections.set(keyFromPeerDescriptor(peer), remoteDhtNode)
348
+ this.connections.set(keyFromPeerDescriptor(peer), rpcRemote)
353
349
  })
354
350
  this.randomPeers = new RandomContactList(selfId, this.config.maxNeighborListSize)
355
- this.randomPeers.on('contactRemoved', (removedContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
351
+ this.randomPeers.on('contactRemoved', (removedContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) =>
356
352
  this.emit('randomContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
357
353
  )
358
- this.randomPeers.on('newContact', (newContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
354
+ this.randomPeers.on('newContact', (newContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) =>
359
355
  this.emit('newRandomContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
360
356
  )
361
357
  }
362
358
 
363
359
  private onTransportConnected(peerDescriptor: PeerDescriptor): void {
364
360
 
365
- if (areEqualPeerDescriptors(this.ownPeerDescriptor!, peerDescriptor)) {
361
+ if (areEqualPeerDescriptors(this.localPeerDescriptor!, peerDescriptor)) {
366
362
  logger.error('onTransportConnected() to self')
367
363
  }
368
364
 
369
- const remoteDhtNode = new RemoteDhtNode(
370
- this.ownPeerDescriptor!,
365
+ const rpcRemote = new DhtNodeRpcRemote(
366
+ this.localPeerDescriptor!,
371
367
  peerDescriptor,
372
- toProtoRpcClient(new DhtRpcServiceClient(this.rpcCommunicator!.getRpcClientTransport())),
373
- this.config.serviceId
368
+ toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
369
+ this.config.serviceId,
370
+ this.config.rpcRequestTimeout
374
371
  )
375
- if (!this.connections.has(PeerID.fromValue(remoteDhtNode.id).toKey())) {
376
- this.connections.set(PeerID.fromValue(remoteDhtNode.id).toKey(), remoteDhtNode)
372
+ if (!this.connections.has(PeerID.fromValue(rpcRemote.id).toKey())) {
373
+ this.connections.set(PeerID.fromValue(rpcRemote.id).toKey(), rpcRemote)
377
374
  logger.trace('connectionschange add ' + this.connections.size)
378
375
  } else {
379
376
  logger.trace('new connection not set to connections, there is already a connection with the peer ID')
@@ -382,40 +379,66 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
382
379
  this.emit('connected', peerDescriptor)
383
380
  }
384
381
 
385
- private onTransportDisconnected(peerDescriptor: PeerDescriptor, dicsonnectionType: DisconnectionType): void {
382
+ private onTransportDisconnected(peerDescriptor: PeerDescriptor, gracefulLeave: boolean): void {
386
383
  logger.trace('disconnected: ' + keyFromPeerDescriptor(peerDescriptor))
387
384
  this.connections.delete(keyFromPeerDescriptor(peerDescriptor))
388
385
  // only remove from bucket if we are on layer 0
389
386
  if (this.connectionManager) {
390
387
  this.bucket!.remove(peerDescriptor.kademliaId)
391
388
 
392
- if (dicsonnectionType === 'OUTGOING_GRACEFUL_LEAVE' || dicsonnectionType === 'INCOMING_GRACEFUL_LEAVE') {
393
- logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType)
394
- this.removeContact(peerDescriptor, true)
389
+ if (gracefulLeave === true) {
390
+ logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
391
+ this.removeContact(peerDescriptor)
395
392
  } else {
396
- logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with type ' + dicsonnectionType)
393
+ logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
397
394
  }
398
395
  }
399
396
 
400
- this.emit('disconnected', peerDescriptor, dicsonnectionType)
397
+ this.emit('disconnected', peerDescriptor, gracefulLeave)
401
398
  }
402
399
 
403
- private bindDefaultServerMethods(): void {
400
+ private bindRpcLocalMethods(): void {
404
401
  if (!this.started || this.stopped) {
405
402
  return
406
403
  }
407
- logger.trace(`Binding default DHT RPC methods`)
404
+ const dhtNodeRpcLocal = new DhtNodeRpcLocal({
405
+ bucket: this.bucket!,
406
+ serviceId: this.config.serviceId,
407
+ peerDiscoveryQueryBatchSize: this.config.peerDiscoveryQueryBatchSize,
408
+ addNewContact: (contact: PeerDescriptor) => this.addNewContact(contact),
409
+ removeContact: (contact: PeerDescriptor) => this.removeContact(contact)
410
+ })
408
411
  this.rpcCommunicator!.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers',
409
- (req: ClosestPeersRequest, context) => this.getClosestPeers(req, context))
412
+ (req: ClosestPeersRequest, context) => dhtNodeRpcLocal.getClosestPeers(req, context))
410
413
  this.rpcCommunicator!.registerRpcMethod(PingRequest, PingResponse, 'ping',
411
- (req: PingRequest, context) => this.ping(req, context))
414
+ (req: PingRequest, context) => dhtNodeRpcLocal.ping(req, context))
412
415
  this.rpcCommunicator!.registerRpcNotification(LeaveNotice, 'leaveNotice',
413
- (req: LeaveNotice, context) => this.leaveNotice(req, context))
416
+ (req: LeaveNotice, context) => dhtNodeRpcLocal.leaveNotice(req, context))
417
+ const externalApiRpcLocal = new ExternalApiRpcLocal({
418
+ startFind: (idToFind: Uint8Array, fetchData: boolean, excludedPeer: PeerDescriptor) => {
419
+ return this.startFind(idToFind, fetchData, excludedPeer)
420
+ },
421
+ storeDataToDht: (key: Uint8Array, data: Any) => this.storeDataToDht(key, data)
422
+ })
423
+ this.rpcCommunicator!.registerRpcMethod(
424
+ ExternalFindDataRequest,
425
+ ExternalFindDataResponse,
426
+ 'externalFindData',
427
+ (req: ExternalFindDataRequest, context: ServerCallContext) => externalApiRpcLocal.externalFindData(req, context),
428
+ { timeout: 10000 }
429
+ )
430
+ this.rpcCommunicator!.registerRpcMethod(
431
+ ExternalStoreDataRequest,
432
+ ExternalStoreDataResponse,
433
+ 'externalStoreData',
434
+ (req: ExternalStoreDataRequest) => externalApiRpcLocal.externalStoreData(req),
435
+ { timeout: 10000 }
436
+ )
414
437
  }
415
438
 
416
439
  private isPeerCloserToIdThanSelf(peer1: PeerDescriptor, compareToId: PeerID): boolean {
417
440
  const distance1 = this.bucket!.distance(peer1.kademliaId, compareToId.value)
418
- const distance2 = this.bucket!.distance(this.ownPeerDescriptor!.kademliaId, compareToId.value)
441
+ const distance2 = this.bucket!.distance(this.localPeerDescriptor!.kademliaId, compareToId.value)
419
442
  return distance1 < distance2
420
443
  }
421
444
 
@@ -430,25 +453,20 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
430
453
  }
431
454
  }
432
455
 
433
- private generatePeerDescriptorCallBack = (connectivityResponse: ConnectivityResponse) => {
456
+ private generatePeerDescriptorCallBack(connectivityResponse: ConnectivityResponse) {
434
457
  if (this.config.peerDescriptor) {
435
- this.ownPeerDescriptor = this.config.peerDescriptor
458
+ this.localPeerDescriptor = this.config.peerDescriptor
436
459
  } else {
437
- this.ownPeerDescriptor = createPeerDescriptor(connectivityResponse, this.config.peerId)
460
+ this.localPeerDescriptor = createPeerDescriptor(connectivityResponse, this.config.peerId)
438
461
  }
439
- return this.ownPeerDescriptor
440
- }
441
-
442
- private getClosestPeerDescriptors(kademliaId: Uint8Array, limit: number): PeerDescriptor[] {
443
- const closestPeers = this.bucket!.closest(kademliaId, limit)
444
- return closestPeers.map((remoteDhtNode: RemoteDhtNode) => remoteDhtNode.getPeerDescriptor())
462
+ return this.localPeerDescriptor
445
463
  }
446
464
 
447
- private onKBucketPing(oldContacts: RemoteDhtNode[], newContact: RemoteDhtNode): void {
465
+ private onKBucketPing(oldContacts: DhtNodeRpcRemote[], newContact: DhtNodeRpcRemote): void {
448
466
  if (this.stopped) {
449
467
  return
450
468
  }
451
- const sortingList: SortedContactList<RemoteDhtNode> = new SortedContactList(this.getNodeId(), 100)
469
+ const sortingList: SortedContactList<DhtNodeRpcRemote> = new SortedContactList(this.getNodeId(), 100)
452
470
  sortingList.addContacts(oldContacts)
453
471
  const sortedContacts = sortingList.getAllContacts()
454
472
  this.connectionManager?.weakUnlockConnection(sortedContacts[sortedContacts.length - 1].getPeerDescriptor())
@@ -456,16 +474,12 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
456
474
  this.bucket!.add(newContact)
457
475
  }
458
476
 
459
- private onKBucketRemoved(contact: RemoteDhtNode): void {
477
+ private onKBucketRemoved(contact: DhtNodeRpcRemote): void {
460
478
  if (this.stopped) {
461
479
  return
462
480
  }
463
481
  this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
464
482
  logger.trace(`Removed contact ${keyFromPeerDescriptor(contact.getPeerDescriptor())}`)
465
- this.emit(
466
- 'kbucketContactRemoved',
467
- contact.getPeerDescriptor()
468
- )
469
483
  if (this.bucket!.count() === 0
470
484
  && !this.peerDiscovery!.isJoinOngoing()
471
485
  && this.config.entryPoints
@@ -479,30 +493,20 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
479
493
  }
480
494
  }
481
495
 
482
- private onKBucketAdded(contact: RemoteDhtNode): void {
496
+ private onKBucketAdded(contact: DhtNodeRpcRemote): void {
483
497
  if (this.stopped) {
484
498
  return
485
499
  }
486
- if (!this.stopped && !contact.getPeerId().equals(this.getNodeId())) {
500
+ if (!contact.getPeerId().equals(this.getNodeId())) {
487
501
  // Important to lock here, before the ping result is known
488
502
  this.connectionManager?.weakLockConnection(contact.getPeerDescriptor())
489
503
  if (this.connections.has(contact.getPeerId().toKey())) {
490
504
  logger.trace(`Added new contact ${keyFromPeerDescriptor(contact.getPeerDescriptor())}`)
491
- this.emit(
492
- 'newKbucketContact',
493
- contact.getPeerDescriptor(),
494
- this.neighborList!.getClosestContacts(this.config.peerDiscoveryQueryBatchSize).map((peer) => peer.getPeerDescriptor())
495
- )
496
505
  } else { // open connection by pinging
497
506
  logger.trace('starting ping ' + keyFromPeerDescriptor(contact.getPeerDescriptor()))
498
507
  contact.ping().then((result) => {
499
508
  if (result) {
500
509
  logger.trace(`Added new contact ${keyFromPeerDescriptor(contact.getPeerDescriptor())}`)
501
- this.emit(
502
- 'newKbucketContact',
503
- contact.getPeerDescriptor(),
504
- this.neighborList!.getClosestContacts(this.config.peerDiscoveryQueryBatchSize).map((peer) => peer.getPeerDescriptor())
505
- )
506
510
  } else {
507
511
  logger.trace('ping failed ' + keyFromPeerDescriptor(contact.getPeerDescriptor()))
508
512
  this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
@@ -529,7 +533,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
529
533
  }
530
534
  }
531
535
 
532
- private getClosestActiveContactNotInBucket(): RemoteDhtNode | undefined {
536
+ private getClosestActiveContactNotInBucket(): DhtNodeRpcRemote | undefined {
533
537
  for (const contactId of this.neighborList!.getContactIds()) {
534
538
  if (!this.bucket!.get(contactId.value) && this.neighborList!.isActive(contactId)) {
535
539
  return this.neighborList!.getContact(contactId).contact
@@ -543,7 +547,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
543
547
  }
544
548
 
545
549
  public getNodeId(): PeerID {
546
- return peerIdFromPeerDescriptor(this.ownPeerDescriptor!)
550
+ return peerIdFromPeerDescriptor(this.localPeerDescriptor!)
547
551
  }
548
552
 
549
553
  public getBucketSize(): number {
@@ -554,27 +558,24 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
554
558
  if (!this.started || this.stopped) {
555
559
  return
556
560
  }
557
- if (!areEqualPeerDescriptors(contact, this.ownPeerDescriptor!)) {
561
+ if (!areEqualPeerDescriptors(contact, this.localPeerDescriptor!)) {
558
562
  logger.trace(`Adding new contact ${keyFromPeerDescriptor(contact)}`)
559
- const remoteDhtNode = new RemoteDhtNode(
560
- this.ownPeerDescriptor!,
563
+ const rpcRemote = new DhtNodeRpcRemote(
564
+ this.localPeerDescriptor!,
561
565
  contact,
562
- toProtoRpcClient(new DhtRpcServiceClient(this.rpcCommunicator!.getRpcClientTransport())),
563
- this.config.serviceId
566
+ toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
567
+ this.config.serviceId,
568
+ this.config.rpcRequestTimeout
564
569
  )
565
570
  if (!this.bucket!.get(contact.kademliaId) && !this.neighborList!.getContact(peerIdFromPeerDescriptor(contact))) {
566
- this.neighborList!.addContact(remoteDhtNode)
567
- if (contact.openInternet) {
568
- this.openInternetPeers!.addContact(remoteDhtNode)
569
- }
571
+ this.neighborList!.addContact(rpcRemote)
570
572
  if (setActive) {
571
573
  const peerId = peerIdFromPeerDescriptor(contact)
572
574
  this.neighborList!.setActive(peerId)
573
- this.openInternetPeers!.setActive(peerId)
574
575
  }
575
- this.bucket!.add(remoteDhtNode)
576
+ this.bucket!.add(rpcRemote)
576
577
  } else {
577
- this.randomPeers!.addContact(remoteDhtNode)
578
+ this.randomPeers!.addContact(rpcRemote)
578
579
  }
579
580
  }
580
581
  }
@@ -586,7 +587,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
586
587
  }, 10 * 1000)
587
588
  }
588
589
 
589
- public removeContact(contact: PeerDescriptor, removeFromOpenInternetPeers = false): void {
590
+ public removeContact(contact: PeerDescriptor): void {
590
591
  if (!this.started || this.stopped) {
591
592
  return
592
593
  }
@@ -595,16 +596,13 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
595
596
  this.bucket!.remove(peerId.value)
596
597
  this.neighborList!.removeContact(peerId)
597
598
  this.randomPeers!.removeContact(peerId)
598
- if (removeFromOpenInternetPeers) {
599
- this.openInternetPeers!.removeContact(peerId)
600
- }
601
599
  }
602
600
 
603
601
  public async send(msg: Message): Promise<void> {
604
602
  if (!this.started || this.stopped) {
605
603
  return
606
604
  }
607
- const reachableThrough = this.peerDiscovery!.isJoinOngoing() ? this.config.entryPoints || [] : []
605
+ const reachableThrough = this.peerDiscovery!.isJoinOngoing() ? this.config.entryPoints ?? [] : []
608
606
  await this.router!.send(msg, reachableThrough)
609
607
  }
610
608
 
@@ -617,8 +615,8 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
617
615
  ))
618
616
  }
619
617
 
620
- public async startRecursiveFind(idToFind: Uint8Array, fetchData?: boolean, excludedPeer?: PeerDescriptor): Promise<RecursiveFindResult> {
621
- return this.recursiveFinder!.startRecursiveFind(idToFind, fetchData, excludedPeer)
618
+ public async startFind(idToFind: Uint8Array, fetchData?: boolean, excludedPeer?: PeerDescriptor): Promise<FindResult> {
619
+ return this.finder!.startFind(idToFind, fetchData, excludedPeer)
622
620
  }
623
621
 
624
622
  public async storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]> {
@@ -630,7 +628,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
630
628
 
631
629
  public async storeDataViaPeer(key: Uint8Array, data: Any, peer: PeerDescriptor): Promise<PeerDescriptor[]> {
632
630
  const rpcRemote = new ExternalApiRpcRemote(
633
- this.ownPeerDescriptor!,
631
+ this.localPeerDescriptor!,
634
632
  peer,
635
633
  this.config.serviceId,
636
634
  toProtoRpcClient(new ExternalApiRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
@@ -642,7 +640,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
642
640
  if (this.peerDiscovery!.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
643
641
  return this.findDataViaPeer(idToFind, sample(this.config.entryPoints)!)
644
642
  }
645
- const result = await this.recursiveFinder!.startRecursiveFind(idToFind, true)
643
+ const result = await this.finder!.startFind(idToFind, true)
646
644
  return result.dataEntries ?? []
647
645
  }
648
646
 
@@ -654,24 +652,20 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
654
652
 
655
653
  public async findDataViaPeer(idToFind: Uint8Array, peer: PeerDescriptor): Promise<DataEntry[]> {
656
654
  const rpcRemote = new ExternalApiRpcRemote(
657
- this.ownPeerDescriptor!,
655
+ this.localPeerDescriptor!,
658
656
  peer,
659
657
  this.config.serviceId,
660
658
  toProtoRpcClient(new ExternalApiRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
661
659
  )
662
- return await rpcRemote.findData(idToFind)
663
- }
664
-
665
- public getRpcCommunicator(): RoutingRpcCommunicator {
666
- return this.rpcCommunicator!
660
+ return await rpcRemote.externalFindData(idToFind)
667
661
  }
668
662
 
669
663
  public getTransport(): ITransport {
670
664
  return this.transport!
671
665
  }
672
666
 
673
- public getPeerDescriptor(): PeerDescriptor {
674
- return this.ownPeerDescriptor!
667
+ public getLocalPeerDescriptor(): PeerDescriptor {
668
+ return this.localPeerDescriptor!
675
669
  }
676
670
 
677
671
  public getAllConnectionPeerDescriptors(): PeerDescriptor[] {
@@ -679,7 +673,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
679
673
  }
680
674
 
681
675
  public getKBucketPeers(): PeerDescriptor[] {
682
- return this.bucket!.toArray().map((remoteDhtNode: RemoteDhtNode) => remoteDhtNode.getPeerDescriptor())
676
+ return this.bucket!.toArray().map((rpcRemote: DhtNodeRpcRemote) => rpcRemote.getPeerDescriptor())
683
677
  }
684
678
 
685
679
  public getNumberOfConnections(): number {
@@ -716,15 +710,17 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
716
710
  if (this.entryPointDisconnectTimeout) {
717
711
  clearTimeout(this.entryPointDisconnectTimeout)
718
712
  }
719
- this.bucket!.toArray().forEach((remoteDhtNode: RemoteDhtNode) => this.bucket!.remove(remoteDhtNode.id))
713
+ this.bucket!.toArray().forEach((rpcRemote: DhtNodeRpcRemote) => {
714
+ rpcRemote.leaveNotice()
715
+ this.bucket!.remove(rpcRemote.id)
716
+ })
720
717
  this.bucket!.removeAllListeners()
721
718
  this.localDataStore.clear()
722
719
  this.neighborList!.stop()
723
720
  this.randomPeers!.stop()
724
- this.openInternetPeers!.stop()
725
721
  this.rpcCommunicator!.stop()
726
722
  this.router!.stop()
727
- this.recursiveFinder!.stop()
723
+ this.finder!.stop()
728
724
  this.peerDiscovery!.stop()
729
725
  if (this.connectionManager) {
730
726
  await this.connectionManager.stop()
@@ -734,35 +730,4 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
734
730
  this.connections.clear()
735
731
  this.removeAllListeners()
736
732
  }
737
-
738
- // IDHTRpcService implementation
739
- private async getClosestPeers(request: ClosestPeersRequest, context: ServerCallContext): Promise<ClosestPeersResponse> {
740
- this.addNewContact((context as DhtCallContext).incomingSourceDescriptor!)
741
- const response = {
742
- peers: this.getClosestPeerDescriptors(request.kademliaId, this.config.peerDiscoveryQueryBatchSize),
743
- requestId: request.requestId
744
- }
745
- return response
746
- }
747
-
748
- // IDHTRpcService implementation
749
- private async ping(request: PingRequest, context: ServerCallContext): Promise<PingResponse> {
750
- logger.trace('received ping request: ' + keyFromPeerDescriptor((context as DhtCallContext).incomingSourceDescriptor!))
751
- setImmediate(() => {
752
- this.addNewContact((context as DhtCallContext).incomingSourceDescriptor!)
753
- })
754
- const response: PingResponse = {
755
- requestId: request.requestId
756
- }
757
- return response
758
- }
759
-
760
- // IDHTRpcService implementation
761
- private async leaveNotice(request: LeaveNotice, context: ServerCallContext): Promise<Empty> {
762
- // TODO check signature??
763
- if (request.serviceId === this.config.serviceId) {
764
- this.removeContact((context as DhtCallContext).incomingSourceDescriptor!)
765
- }
766
- return {}
767
- }
768
733
  }