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

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 (325) 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 +9 -9
  9. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  10. package/dist/src/connection/ConnectionManager.d.ts +9 -16
  11. package/dist/src/connection/ConnectionManager.js +101 -132
  12. package/dist/src/connection/ConnectionManager.js.map +1 -1
  13. package/dist/src/connection/ConnectivityChecker.d.ts +7 -10
  14. package/dist/src/connection/ConnectivityChecker.js +30 -32
  15. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  16. package/dist/src/connection/ConnectorFacade.d.ts +19 -13
  17. package/dist/src/connection/ConnectorFacade.js +74 -29
  18. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  19. package/dist/src/connection/Handshaker.d.ts +8 -8
  20. package/dist/src/connection/Handshaker.js +30 -33
  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 +9 -13
  25. package/dist/src/connection/ManagedConnection.js +63 -99
  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 +25 -24
  34. package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
  35. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +3 -3
  36. package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +17 -18
  37. package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -0
  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} +41 -42
  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} +23 -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} +25 -27
  67. package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
  68. package/dist/src/connection/websocket/WebsocketConnector.d.ts +53 -0
  69. package/dist/src/connection/websocket/WebsocketConnector.js +242 -0
  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} +6 -11
  76. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -0
  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 +135 -163
  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} +20 -24
  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 +9 -9
  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 +6 -6
  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 +50 -93
  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 +17 -45
  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 +26 -25
  142. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  143. package/dist/src/dht/store/StoreRpcRemote.js +6 -10
  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/peerIdFromPeerDescriptor.d.ts +1 -0
  154. package/dist/src/helpers/peerIdFromPeerDescriptor.js +7 -1
  155. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  156. package/dist/src/helpers/protoClasses.js +3 -3
  157. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +56 -39
  158. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +49 -36
  159. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  160. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +85 -96
  161. package/dist/src/proto/packages/dht/protos/DhtRpc.js +82 -71
  162. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  163. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -21
  164. package/dist/src/rpc-protocol/DhtCallContext.d.ts +0 -1
  165. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
  166. package/dist/src/transport/ITransport.d.ts +5 -6
  167. package/dist/src/transport/ListeningRpcCommunicator.d.ts +2 -1
  168. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  169. package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
  170. package/dist/src/transport/RoutingRpcCommunicator.js +0 -1
  171. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  172. package/dist/src/types/ServiceID.d.ts +1 -0
  173. package/dist/src/types/ServiceID.js +3 -0
  174. package/dist/src/types/ServiceID.js.map +1 -0
  175. package/karma.config.js +4 -4
  176. package/package.json +10 -8
  177. package/protos/DhtRpc.proto +41 -40
  178. package/src/connection/ConnectionLockHandler.ts +19 -17
  179. package/src/connection/ConnectionLockRpcLocal.ts +74 -0
  180. package/src/connection/ConnectionLockRpcRemote.ts +11 -11
  181. package/src/connection/ConnectionManager.ts +88 -130
  182. package/src/connection/ConnectivityChecker.ts +36 -34
  183. package/src/connection/ConnectorFacade.ts +91 -40
  184. package/src/connection/Handshaker.ts +20 -23
  185. package/src/connection/IConnection.ts +5 -6
  186. package/src/connection/ManagedConnection.ts +76 -101
  187. package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +12 -10
  188. package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
  189. package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +27 -27
  190. package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +22 -23
  191. package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
  192. package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +13 -14
  193. package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
  194. package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +38 -40
  195. package/src/connection/webrtc/WebrtcConnector.ts +226 -0
  196. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +132 -0
  197. package/src/connection/{WebRTC/WebRtcConnectorRpcRemote.ts → webrtc/WebrtcConnectorRpcRemote.ts} +6 -7
  198. package/src/connection/{WebRTC → webrtc}/iceServerAsString.ts +1 -1
  199. package/src/connection/websocket/AutoCertifierClientFacade.ts +91 -0
  200. package/src/connection/{WebSocket/ClientWebSocket.ts → websocket/ClientWebsocket.ts} +22 -17
  201. package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +23 -27
  202. package/src/connection/websocket/WebsocketConnector.ts +328 -0
  203. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
  204. package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +8 -14
  205. package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
  206. package/src/dht/DhtNode.ts +166 -193
  207. package/src/dht/DhtNodeRpcLocal.ts +68 -0
  208. package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +17 -18
  209. package/src/dht/ExternalApiRpcLocal.ts +46 -0
  210. package/src/dht/ExternalApiRpcRemote.ts +4 -4
  211. package/src/dht/contact/Remote.ts +32 -4
  212. package/src/dht/contact/SortedContactList.ts +4 -4
  213. package/src/dht/discovery/DiscoverySession.ts +25 -22
  214. package/src/dht/discovery/PeerDiscovery.ts +16 -19
  215. package/src/dht/find/FindRpcLocal.ts +35 -0
  216. package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +25 -25
  217. package/src/dht/find/FindSessionRpcLocal.ts +25 -0
  218. package/src/dht/find/{RemoteRecursiveFindSession.ts → FindSessionRpcRemote.ts} +9 -5
  219. package/src/dht/find/{RecursiveFinder.ts → Finder.ts} +77 -71
  220. package/src/dht/routing/FindRpcRemote.ts +40 -0
  221. package/src/dht/routing/Router.ts +78 -109
  222. package/src/dht/routing/RouterRpcLocal.ts +81 -0
  223. package/src/dht/routing/RouterRpcRemote.ts +18 -49
  224. package/src/dht/routing/RoutingSession.ts +58 -63
  225. package/src/dht/routing/getPreviousPeer.ts +6 -0
  226. package/src/dht/store/StoreRpcLocal.ts +46 -39
  227. package/src/dht/store/StoreRpcRemote.ts +8 -12
  228. package/src/exports.ts +11 -5
  229. package/src/helpers/Connectivity.ts +19 -0
  230. package/src/helpers/errors.ts +3 -3
  231. package/src/helpers/peerIdFromPeerDescriptor.ts +6 -0
  232. package/src/helpers/protoClasses.ts +6 -6
  233. package/src/proto/packages/dht/protos/DhtRpc.client.ts +75 -59
  234. package/src/proto/packages/dht/protos/DhtRpc.server.ts +26 -21
  235. package/src/proto/packages/dht/protos/DhtRpc.ts +112 -131
  236. package/src/rpc-protocol/DhtCallContext.ts +0 -1
  237. package/src/transport/ITransport.ts +5 -8
  238. package/src/transport/ListeningRpcCommunicator.ts +2 -1
  239. package/src/transport/RoutingRpcCommunicator.ts +3 -4
  240. package/src/types/ServiceID.ts +1 -0
  241. package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +7 -7
  242. package/test/benchmark/KademliaCorrectness.test.ts +3 -3
  243. package/test/benchmark/kademlia-simulation/SimulationNode.ts +3 -3
  244. package/test/end-to-end/Layer0-Layer1.test.ts +13 -5
  245. package/test/end-to-end/Layer0.test.ts +35 -17
  246. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +28 -9
  247. package/test/end-to-end/{Layer0WebRTC-Layer1.test.ts → Layer0Webrtc-Layer1.test.ts} +1 -1
  248. package/test/end-to-end/{Layer0WebRTC.test.ts → Layer0Webrtc.test.ts} +14 -10
  249. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -4
  250. package/test/end-to-end/{Layer1-Scale-WebRTC.test.ts → Layer1-Scale-Webrtc.test.ts} +2 -2
  251. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +52 -0
  252. package/test/end-to-end/{WebSocketConnectionRequest.test.ts → WebsocketConnectionRequest.test.ts} +16 -8
  253. package/test/end-to-end/memory-leak.test.ts +85 -0
  254. package/test/integration/ConnectionLocking.test.ts +10 -7
  255. package/test/integration/ConnectionManager.test.ts +107 -30
  256. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
  257. package/test/integration/DhtNodeExternalAPI.test.ts +10 -10
  258. package/test/integration/{RemoteDhtNode.test.ts → DhtNodeRpcRemote.test.ts} +10 -10
  259. package/test/integration/DhtRpc.test.ts +5 -5
  260. package/test/integration/{RecursiveFind.test.ts → Find.test.ts} +6 -9
  261. package/test/integration/Layer1-scale.test.ts +1 -1
  262. package/test/integration/MigrateData.test.ts +8 -7
  263. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
  264. package/test/integration/MultipleEntryPointJoining.test.ts +8 -8
  265. package/test/integration/RouteMessage.test.ts +26 -26
  266. package/test/integration/RpcErrors.test.ts +10 -10
  267. package/test/integration/ScaleDownDht.test.ts +6 -6
  268. package/test/integration/SimultaneousConnections.test.ts +10 -7
  269. package/test/integration/Store.test.ts +4 -7
  270. package/test/integration/StoreAndDelete.test.ts +4 -7
  271. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
  272. package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +5 -5
  273. package/test/integration/{WebRtcConnectorRpc.test.ts → WebrtcConnectorRpc.test.ts} +7 -8
  274. package/test/integration/{WebSocket.test.ts → Websocket.test.ts} +14 -13
  275. package/test/integration/{WebSocketConnectionManagement.test.ts → WebsocketConnectionManagement.test.ts} +4 -4
  276. package/test/integration/{WebSocketConnectorRpc.test.ts → WebsocketConnectorRpc.test.ts} +15 -15
  277. package/test/unit/AutoCertifierClientFacade.test.ts +58 -0
  278. package/test/unit/ConnectivityHelpers.test.ts +69 -0
  279. package/test/unit/{RecursiveFinder.test.ts → Finder.test.ts} +19 -17
  280. package/test/unit/Router.test.ts +26 -26
  281. package/test/unit/UUID.test.ts +1 -1
  282. package/test/unit/{WebSocketConnectorRpcLocal.test.ts → WebsocketConnector.test.ts} +8 -8
  283. package/test/unit/{WebSocketServer.test.ts → WebsocketServer.test.ts} +20 -14
  284. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +1 -1
  285. package/test/utils/FakeRpcCommunicator.ts +23 -0
  286. package/test/utils/mock/Transport.ts +1 -1
  287. package/test/utils/utils.ts +22 -26
  288. package/tsconfig.browser.json +1 -1
  289. package/tsconfig.jest.json +3 -2
  290. package/tsconfig.node.json +3 -2
  291. package/dist/src/connection/ManagedWebRtcConnection.d.ts +0 -7
  292. package/dist/src/connection/ManagedWebRtcConnection.js +0 -20
  293. package/dist/src/connection/ManagedWebRtcConnection.js.map +0 -1
  294. package/dist/src/connection/Simulator/SimulatorConnection.js.map +0 -1
  295. package/dist/src/connection/Simulator/SimulatorConnector.js.map +0 -1
  296. package/dist/src/connection/Simulator/SimulatorTransport.js.map +0 -1
  297. package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +0 -1
  298. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +0 -1
  299. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.d.ts +0 -51
  300. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js +0 -249
  301. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +0 -1
  302. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +0 -1
  303. package/dist/src/connection/WebSocket/ClientWebSocket.js.map +0 -1
  304. package/dist/src/connection/WebSocket/ServerWebSocket.js.map +0 -1
  305. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.d.ts +0 -45
  306. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js +0 -234
  307. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +0 -1
  308. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +0 -1
  309. package/dist/src/connection/WebSocket/WebSocketServer.js.map +0 -1
  310. package/dist/src/dht/RemoteDhtNode.js.map +0 -1
  311. package/dist/src/dht/find/RecursiveFindSession.js.map +0 -1
  312. package/dist/src/dht/find/RecursiveFinder.js.map +0 -1
  313. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +0 -1
  314. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +0 -2
  315. package/dist/src/dht/registerExternalApiRpcMethods.js +0 -32
  316. package/dist/src/dht/registerExternalApiRpcMethods.js.map +0 -1
  317. package/src/connection/WebRTC/WebRtcConnectorRpcLocal.ts +0 -335
  318. package/src/connection/WebSocket/WebSocketConnectorRpcLocal.ts +0 -295
  319. package/src/dht/registerExternalApiRpcMethods.ts +0 -44
  320. package/test/utils/mock/RecursiveFinder.ts +0 -19
  321. /package/dist/src/connection/{Simulator → simulator}/Simulator.d.ts +0 -0
  322. /package/dist/src/connection/{Simulator → simulator}/pings.d.ts +0 -0
  323. /package/dist/src/connection/{Simulator → simulator}/pings.js +0 -0
  324. /package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js +0 -0
  325. /package/src/connection/{Simulator → simulator}/pings.ts +0 -0
@@ -1,58 +1,58 @@
1
1
  import {
2
- ConnectivityMethod,
3
2
  ConnectivityRequest, ConnectivityResponse,
4
3
  Message, MessageType, PeerDescriptor
5
4
  } from '../proto/packages/dht/protos/DhtRpc'
6
5
  import { ConnectionEvents, IConnection } from './IConnection'
7
6
  import { Logger, runAndRaceEvents3, RunAndRaceEventsReturnType } from '@streamr/utils'
8
7
  import * as Err from '../helpers/errors'
9
- import { ClientWebSocket } from './WebSocket/ClientWebSocket'
8
+ import { ClientWebsocket } from './websocket/ClientWebsocket'
10
9
  import { v4 } from 'uuid'
11
10
  import { NatType } from './ConnectionManager'
12
- import { ServerWebSocket } from './WebSocket/ServerWebSocket'
13
- import { connectivityMethodToWebSocketUrl } from './WebSocket/WebSocketConnectorRpcLocal'
11
+ import { ServerWebsocket } from './websocket/ServerWebsocket'
12
+ import { connectivityMethodToWebsocketUrl } from './websocket/WebsocketConnector'
14
13
 
15
14
  const logger = new Logger(module)
16
15
 
17
16
  // Class for handling both client and server side of the connectivity
18
- // checks. This is attached to all ServerWebSockets to listen to
17
+ // checks. This is attached to all ServerWebsockets to listen to
19
18
  // ConnectivityRequest messages.
20
19
 
21
- export enum ConnectionMode { REQUEST = 'connectivityRequest', PROBE = 'connectivityProbe' }
22
20
  export class ConnectivityChecker {
23
21
 
24
22
  private static readonly CONNECTIVITY_CHECKER_SERVICE_ID = 'system/connectivity-checker'
25
23
  private static readonly CONNECTIVITY_CHECKER_TIMEOUT = 5000
26
24
  private destroyed = false
27
- private readonly webSocketPort: number
25
+ private readonly websocketPort: number
28
26
  private readonly tls: boolean
29
- private readonly host?: string
27
+ private host?: string
30
28
 
31
- constructor(webSocketPort: number, tls: boolean, host?: string) {
32
- this.webSocketPort = webSocketPort
29
+ constructor(websocketPort: number, tls: boolean, host?: string) {
30
+ this.websocketPort = websocketPort
33
31
  this.tls = tls
34
32
  this.host = host
35
33
  }
36
34
 
37
- public async sendConnectivityRequest(entryPoint: PeerDescriptor): Promise<ConnectivityResponse> {
35
+ public async sendConnectivityRequest(entryPoint: PeerDescriptor, selfSigned: boolean): Promise<ConnectivityResponse> {
38
36
  if (this.destroyed) {
39
37
  throw new Err.ConnectionFailed('ConnectivityChecker is destroyed')
40
38
  }
41
39
  let outgoingConnection: IConnection
40
+ const wsServerInfo = {
41
+ host: entryPoint.websocket!.host,
42
+ port: entryPoint.websocket!.port,
43
+ tls: entryPoint.websocket!.tls,
44
+ }
45
+ const url = connectivityMethodToWebsocketUrl(wsServerInfo, 'connectivityRequest')
42
46
  try {
43
47
  outgoingConnection = await this.connectAsync({
44
- wsServerInfo: {
45
- host: entryPoint.websocket!.host,
46
- port: entryPoint.websocket!.port,
47
- tls: entryPoint.websocket!.tls,
48
- },
49
- mode: ConnectionMode.REQUEST
48
+ url,
49
+ selfSigned
50
50
  })
51
51
  } catch (e) {
52
- throw new Err.ConnectionFailed(`Failed to connect to the entrypoint ${connectivityMethodToWebSocketUrl(entryPoint.websocket!)}`, e)
52
+ throw new Err.ConnectionFailed(`Failed to connect to the entrypoint ${url}`, e)
53
53
  }
54
54
  // send connectivity request
55
- const connectivityRequestMessage: ConnectivityRequest = { port: this.webSocketPort, host: this.host, tls: this.tls }
55
+ const connectivityRequestMessage: ConnectivityRequest = { port: this.websocketPort, host: this.host, tls: this.tls, selfSigned }
56
56
  const msg: Message = {
57
57
  serviceId: ConnectivityChecker.CONNECTIVITY_CHECKER_SERVICE_ID,
58
58
  messageType: MessageType.CONNECTIVITY_REQUEST, messageId: v4(),
@@ -64,11 +64,11 @@ export class ConnectivityChecker {
64
64
  const responseAwaiter = () => {
65
65
  return new Promise((resolve: (res: ConnectivityResponse) => void, reject) => {
66
66
  const timeoutId = setTimeout(() => {
67
- outgoingConnection.close('OTHER')
67
+ outgoingConnection.close(false)
68
68
  reject(new Err.ConnectivityResponseTimeout('timeout'))
69
69
  }, ConnectivityChecker.CONNECTIVITY_CHECKER_TIMEOUT)
70
70
  const listener = (bytes: Uint8Array) => {
71
- outgoingConnection.close('OTHER')
71
+ outgoingConnection.close(false)
72
72
  try {
73
73
  const message: Message = Message.fromBinary(bytes)
74
74
  if (message.body.oneofKind === 'connectivityResponse') {
@@ -98,7 +98,11 @@ export class ConnectivityChecker {
98
98
  }
99
99
  }
100
100
 
101
- public listenToIncomingConnectivityRequests(connectionToListenTo: ServerWebSocket): void {
101
+ public setHost(hostName: string): void {
102
+ this.host = hostName
103
+ }
104
+
105
+ public listenToIncomingConnectivityRequests(connectionToListenTo: ServerWebsocket): void {
102
106
  connectionToListenTo.on('data', (data: Uint8Array) => {
103
107
  logger.trace('server received data')
104
108
  try {
@@ -120,7 +124,7 @@ export class ConnectivityChecker {
120
124
  }
121
125
 
122
126
  private async handleIncomingConnectivityRequest(
123
- connection: ServerWebSocket,
127
+ connection: ServerWebsocket,
124
128
  connectivityRequest: ConnectivityRequest
125
129
  ): Promise<void> {
126
130
  if (this.destroyed) {
@@ -135,24 +139,23 @@ export class ConnectivityChecker {
135
139
  port: connectivityRequest.port,
136
140
  tls: connectivityRequest.tls
137
141
  }
138
- logger.trace(`Attempting Connectivity Check to ${connectivityMethodToWebSocketUrl(wsServerInfo)}`)
142
+ const url = connectivityMethodToWebsocketUrl(wsServerInfo, 'connectivityProbe')
143
+ logger.trace(`Attempting Connectivity Check to ${url}`)
139
144
  outgoingConnection = await this.connectAsync({
140
- wsServerInfo,
141
- mode: ConnectionMode.PROBE
145
+ url,
146
+ selfSigned: connectivityRequest.selfSigned
142
147
  })
143
148
  } catch (err) {
144
149
  logger.debug('error', { err })
145
150
  connectivityResponseMessage = {
146
- openInternet: false,
147
151
  host,
148
152
  natType: NatType.UNKNOWN
149
153
  }
150
154
  }
151
155
  if (outgoingConnection) {
152
- outgoingConnection.close('OTHER')
156
+ outgoingConnection.close(false)
153
157
  logger.trace('Connectivity test produced positive result, communicating reply to the requester ' + host + ':' + connectivityRequest.port)
154
158
  connectivityResponseMessage = {
155
- openInternet: true,
156
159
  host,
157
160
  natType: NatType.OPEN_INTERNET,
158
161
  websocket: { host, port: connectivityRequest.port, tls: connectivityRequest.tls }
@@ -171,15 +174,14 @@ export class ConnectivityChecker {
171
174
  }
172
175
 
173
176
  // eslint-disable-next-line class-methods-use-this
174
- private async connectAsync({ wsServerInfo, mode, timeoutMs = 1000, }:
175
- { wsServerInfo: ConnectivityMethod, mode: ConnectionMode, timeoutMs?: number }
177
+ private async connectAsync({ url, selfSigned, timeoutMs = 1000, }:
178
+ { url: string, selfSigned: boolean, timeoutMs?: number }
176
179
  ): Promise<IConnection> {
177
- const socket = new ClientWebSocket()
178
- const url = `${connectivityMethodToWebSocketUrl(wsServerInfo)}?${mode}=true`
180
+ const socket = new ClientWebsocket()
179
181
  let result: RunAndRaceEventsReturnType<ConnectionEvents>
180
182
  try {
181
183
  result = await runAndRaceEvents3<ConnectionEvents>([
182
- () => { socket.connect(url) }],
184
+ () => { socket.connect(url, selfSigned) }],
183
185
  socket, ['connected', 'error'],
184
186
  timeoutMs)
185
187
  } catch (e) {
@@ -6,23 +6,25 @@ import {
6
6
  import { ITransport } from '../transport/ITransport'
7
7
  import { PortRange, TlsCertificate } from './ConnectionManager'
8
8
  import { ManagedConnection } from './ManagedConnection'
9
- import { Simulator } from './Simulator/Simulator'
10
- import { SimulatorConnector } from './Simulator/SimulatorConnector'
11
- import { IceServer, WebRtcConnectorRpcLocal } from './WebRTC/WebRtcConnectorRpcLocal'
12
- import { WebSocketConnectorRpcLocal } from './WebSocket/WebSocketConnectorRpcLocal'
9
+ import { Simulator } from './simulator/Simulator'
10
+ import { SimulatorConnector } from './simulator/SimulatorConnector'
11
+ import { IceServer, WebrtcConnector } from './webrtc/WebrtcConnector'
12
+ import { WebsocketConnector, WebsocketConnectorConfig } from './websocket/WebsocketConnector'
13
13
 
14
14
  export interface ConnectorFacade {
15
15
  createConnection: (peerDescriptor: PeerDescriptor) => ManagedConnection
16
- getOwnPeerDescriptor: () => PeerDescriptor | undefined
16
+ getLocalPeerDescriptor: () => PeerDescriptor | undefined
17
17
  start: (
18
- onIncomingConnection: (connection: ManagedConnection) => boolean,
19
- canConnect: (peerDescriptor: PeerDescriptor) => boolean
18
+ onNewConnection: (connection: ManagedConnection) => boolean,
19
+ canConnect: (peerDescriptor: PeerDescriptor) => boolean,
20
+ autoCertifierTransport: ITransport
20
21
  ) => Promise<void>
21
22
  stop: () => Promise<void>
22
23
  }
23
24
 
24
25
  const logger = new Logger(module)
25
26
 
27
+ // TODO: Wrap component specific configs to their own objects.
26
28
  export interface DefaultConnectorFacadeConfig {
27
29
  transport: ITransport
28
30
  websocketHost?: string
@@ -37,38 +39,47 @@ export interface DefaultConnectorFacadeConfig {
37
39
  webrtcPortRange?: PortRange
38
40
  maxMessageSize?: number
39
41
  tlsCertificate?: TlsCertificate
40
- createOwnPeerDescriptor: (connectivityResponse: ConnectivityResponse) => PeerDescriptor
42
+ websocketServerEnableTls?: boolean
43
+ autoCertifierUrl?: string
44
+ autoCertifierConfigFile?: string
45
+ createLocalPeerDescriptor: (connectivityResponse: ConnectivityResponse) => PeerDescriptor
41
46
  }
42
47
 
43
48
  export class DefaultConnectorFacade implements ConnectorFacade {
44
49
 
45
50
  private readonly config: DefaultConnectorFacadeConfig
46
- private ownPeerDescriptor?: PeerDescriptor
47
- private webSocketConnector?: WebSocketConnectorRpcLocal
48
- private webrtcConnector?: WebRtcConnectorRpcLocal
51
+ private localPeerDescriptor?: PeerDescriptor
52
+ private websocketConnector?: WebsocketConnector
53
+ private webrtcConnector?: WebrtcConnector
49
54
 
50
55
  constructor(config: DefaultConnectorFacadeConfig) {
51
56
  this.config = config
52
57
  }
53
58
 
54
59
  async start(
55
- onIncomingConnection: (connection: ManagedConnection) => boolean,
56
- canConnect: (peerDescriptor: PeerDescriptor) => boolean
60
+ onNewConnection: (connection: ManagedConnection) => boolean,
61
+ canConnect: (peerDescriptor: PeerDescriptor) => boolean,
62
+ autoCertifierTransport: ITransport
57
63
  ): Promise<void> {
58
- logger.trace(`Creating WebSocketConnector`)
59
- this.webSocketConnector = new WebSocketConnectorRpcLocal({
64
+ logger.trace(`Creating WebsocketConnectorRpcLocal`)
65
+ const webSocketConnectorConfig = {
60
66
  transport: this.config.transport!,
61
- // TODO should we use canConnect also for WebRtcConnector? (NET-1142)
67
+ // TODO should we use canConnect also for WebrtcConnector? (NET-1142)
62
68
  canConnect: (peerDescriptor: PeerDescriptor) => canConnect(peerDescriptor),
63
- onIncomingConnection,
69
+ onNewConnection,
64
70
  portRange: this.config.websocketPortRange,
65
71
  host: this.config.websocketHost,
66
72
  entrypoints: this.config.entryPoints,
67
73
  tlsCertificate: this.config.tlsCertificate,
74
+ serverEnableTls: this.config.websocketServerEnableTls!,
75
+ autoCertifierUrl: this.config.autoCertifierUrl!,
76
+ autoCertifierConfigFile: this.config.autoCertifierConfigFile!,
77
+ autoCertifierTransport,
68
78
  maxMessageSize: this.config.maxMessageSize
69
- })
70
- logger.trace(`Creating WebRTCConnector`)
71
- this.webrtcConnector = new WebRtcConnectorRpcLocal({
79
+ }
80
+ this.websocketConnector = new WebsocketConnector(webSocketConnectorConfig)
81
+ logger.trace(`Creating WebRtcConnectorRpcLocal`)
82
+ this.webrtcConnector = new WebrtcConnector({
72
83
  transport: this.config.transport!,
73
84
  iceServers: this.config.iceServers,
74
85
  allowPrivateAddresses: this.config.webrtcAllowPrivateAddresses,
@@ -78,50 +89,90 @@ export class DefaultConnectorFacade implements ConnectorFacade {
78
89
  externalIp: this.config.externalIp,
79
90
  portRange: this.config.webrtcPortRange,
80
91
  maxMessageSize: this.config.maxMessageSize
81
- }, onIncomingConnection)
82
- await this.webSocketConnector.start()
83
- const connectivityResponse = await this.webSocketConnector.checkConnectivity()
84
- const ownPeerDescriptor = this.config.createOwnPeerDescriptor(connectivityResponse)
85
- this.ownPeerDescriptor = ownPeerDescriptor
86
- this.webSocketConnector.setOwnPeerDescriptor(ownPeerDescriptor)
87
- this.webrtcConnector.setOwnPeerDescriptor(ownPeerDescriptor)
92
+ }, onNewConnection)
93
+ await this.websocketConnector.start()
94
+ // TODO: generate a PeerDescriptor in a single function. Requires changes to the createOwnPeerDescriptor
95
+ // function in the config. Currently it's given by the DhtNode and it sets the PeerDescriptor for the
96
+ // DhtNode in each call.
97
+ // LocalPeerDescriptor could be stored in one place and passed from there to the connectors
98
+ const temporarilySelfSigned = (!this.config.tlsCertificate && this.config.websocketServerEnableTls === true)
99
+ const connectivityResponse = await this.websocketConnector.checkConnectivity(temporarilySelfSigned)
100
+ const localPeerDescriptor = this.config.createLocalPeerDescriptor(connectivityResponse)
101
+ this.setLocalPeerDescriptor(localPeerDescriptor)
102
+ if (localPeerDescriptor.websocket && !this.config.tlsCertificate && this.config.websocketServerEnableTls) {
103
+ try {
104
+ await this.websocketConnector!.autoCertify()
105
+ const connectivityResponse = await this.websocketConnector!.checkConnectivity(false)
106
+ const autocertifiedLocalPeerDescriptor = this.config.createLocalPeerDescriptor(connectivityResponse)
107
+ if (autocertifiedLocalPeerDescriptor.websocket !== undefined) {
108
+ this.setLocalPeerDescriptor(autocertifiedLocalPeerDescriptor)
109
+ } else {
110
+ logger.warn('Connectivity check failed after auto-certification, disabling WebSocket server TLS')
111
+ await this.restartWebsocketConnector({
112
+ ...webSocketConnectorConfig,
113
+ serverEnableTls: false
114
+ })
115
+ }
116
+ } catch (err) {
117
+ logger.warn('Failed to auto-certify, disabling WebSocket server TLS')
118
+ await this.restartWebsocketConnector({
119
+ ...webSocketConnectorConfig,
120
+ serverEnableTls: false
121
+ })
122
+ }
123
+ }
124
+ }
125
+
126
+ private setLocalPeerDescriptor(peerDescriptor: PeerDescriptor) {
127
+ this.localPeerDescriptor = peerDescriptor
128
+ this.websocketConnector!.setLocalPeerDescriptor(peerDescriptor)
129
+ this.webrtcConnector!.setLocalPeerDescriptor(peerDescriptor)
130
+ }
131
+
132
+ async restartWebsocketConnector(webSocketConnectorConfig: WebsocketConnectorConfig): Promise<void> {
133
+ await this.websocketConnector!.destroy()
134
+ this.websocketConnector = new WebsocketConnector(webSocketConnectorConfig)
135
+ await this.websocketConnector.start()
136
+ const connectivityResponse = await this.websocketConnector.checkConnectivity(false)
137
+ const localPeerDescriptor = this.config.createLocalPeerDescriptor(connectivityResponse)
138
+ this.setLocalPeerDescriptor(localPeerDescriptor)
88
139
  }
89
140
 
90
141
  createConnection(peerDescriptor: PeerDescriptor): ManagedConnection {
91
- if (this.webSocketConnector!.isPossibleToFormConnection(peerDescriptor)) {
92
- return this.webSocketConnector!.connect(peerDescriptor)
142
+ if (this.websocketConnector!.isPossibleToFormConnection(peerDescriptor)) {
143
+ return this.websocketConnector!.connect(peerDescriptor)
93
144
  } else {
94
145
  return this.webrtcConnector!.connect(peerDescriptor)
95
146
  }
96
147
  }
97
148
 
98
- getOwnPeerDescriptor(): PeerDescriptor | undefined {
99
- return this.ownPeerDescriptor
149
+ getLocalPeerDescriptor(): PeerDescriptor | undefined {
150
+ return this.localPeerDescriptor
100
151
  }
101
152
 
102
153
  async stop(): Promise<void> {
103
- await this.webSocketConnector!.destroy()
154
+ await this.websocketConnector!.destroy()
104
155
  await this.webrtcConnector!.stop()
105
156
  }
106
157
  }
107
158
 
108
159
  export class SimulatorConnectorFacade implements ConnectorFacade {
109
160
 
110
- private readonly ownPeerDescriptor: PeerDescriptor
161
+ private readonly localPeerDescriptor: PeerDescriptor
111
162
  private simulatorConnector?: SimulatorConnector
112
163
  private simulator: Simulator
113
164
 
114
- constructor(ownPeerDescriptor: PeerDescriptor, simulator: Simulator) {
115
- this.ownPeerDescriptor = ownPeerDescriptor
165
+ constructor(localPeerDescriptor: PeerDescriptor, simulator: Simulator) {
166
+ this.localPeerDescriptor = localPeerDescriptor
116
167
  this.simulator = simulator
117
168
  }
118
169
 
119
- async start(onIncomingConnection: (connection: ManagedConnection) => boolean): Promise<void> {
170
+ async start(onNewConnection: (connection: ManagedConnection) => boolean): Promise<void> {
120
171
  logger.trace(`Creating SimulatorConnector`)
121
172
  this.simulatorConnector = new SimulatorConnector(
122
- this.ownPeerDescriptor,
173
+ this.localPeerDescriptor,
123
174
  this.simulator,
124
- onIncomingConnection
175
+ onNewConnection
125
176
  )
126
177
  this.simulator.addConnector(this.simulatorConnector)
127
178
  }
@@ -130,8 +181,8 @@ export class SimulatorConnectorFacade implements ConnectorFacade {
130
181
  return this.simulatorConnector!.connect(peerDescriptor)
131
182
  }
132
183
 
133
- getOwnPeerDescriptor(): PeerDescriptor {
134
- return this.ownPeerDescriptor
184
+ getLocalPeerDescriptor(): PeerDescriptor {
185
+ return this.localPeerDescriptor
135
186
  }
136
187
 
137
188
  async stop(): Promise<void> {
@@ -1,48 +1,48 @@
1
1
  import { Logger } from '@streamr/utils'
2
2
  import { EventEmitter } from 'eventemitter3'
3
3
  import { v4 } from 'uuid'
4
- import { Message, HandshakeRequest, HandshakeResponse, MessageType, PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
4
+ import { Message, HandshakeRequest, HandshakeResponse, MessageType, PeerDescriptor, HandshakeError } from '../proto/packages/dht/protos/DhtRpc'
5
5
  import { IConnection } from './IConnection'
6
6
 
7
7
  const logger = new Logger(module)
8
8
 
9
9
  interface HandshakerEvents {
10
- handshakeRequest: (peerDescriptor: PeerDescriptor) => void
11
- handshakeCompleted: (peerDescriptor: PeerDescriptor) => void
12
- handshakeFailed: (reason?: string) => void
10
+ handshakeRequest: (source: PeerDescriptor, target?: PeerDescriptor) => void
11
+ handshakeCompleted: (remote: PeerDescriptor) => void
12
+ handshakeFailed: (error?: HandshakeError) => void
13
13
  }
14
14
 
15
15
  export class Handshaker extends EventEmitter<HandshakerEvents> {
16
16
 
17
17
  private static readonly HANDSHAKER_SERVICE_ID = 'system/handshaker'
18
- private ownPeerDescriptor: PeerDescriptor
18
+ private localPeerDescriptor: PeerDescriptor
19
19
  private connection: IConnection
20
20
 
21
21
  constructor(
22
- ownPeerDescriptor: PeerDescriptor,
22
+ localPeerDescriptor: PeerDescriptor,
23
23
  connection: IConnection
24
24
  ) {
25
25
  super()
26
- this.ownPeerDescriptor = ownPeerDescriptor
26
+ this.localPeerDescriptor = localPeerDescriptor
27
27
  this.connection = connection
28
- this.connection.on('data', this.onData)
28
+ this.connection.on('data', (data: Uint8Array) => this.onData(data))
29
29
  }
30
30
 
31
- private onData = (data: Uint8Array) => {
31
+ private onData(data: Uint8Array) {
32
32
  try {
33
33
  const message = Message.fromBinary(data)
34
34
  if (message.body.oneofKind === 'handshakeRequest') {
35
35
  logger.trace('handshake request received')
36
36
  const handshake = message.body.handshakeRequest
37
- this.emit('handshakeRequest', handshake.peerDescriptor!)
37
+ this.emit('handshakeRequest', handshake.sourcePeerDescriptor!, handshake.targetPeerDescriptor)
38
38
  }
39
39
  if (message.body.oneofKind === 'handshakeResponse') {
40
40
  logger.trace('handshake response received')
41
41
  const handshake = message.body.handshakeResponse
42
- if (handshake.responseError) {
43
- this.emit('handshakeFailed', handshake.responseError)
42
+ if (handshake.error !== undefined) {
43
+ this.emit('handshakeFailed', handshake.error)
44
44
  } else {
45
- this.emit('handshakeCompleted', handshake.peerDescriptor!)
45
+ this.emit('handshakeCompleted', handshake.sourcePeerDescriptor!)
46
46
  }
47
47
  }
48
48
  } catch (err) {
@@ -51,10 +51,10 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
51
51
 
52
52
  }
53
53
 
54
- public sendHandshakeRequest(): void {
54
+ public sendHandshakeRequest(remotePeerDescriptor?: PeerDescriptor): void {
55
55
  const outgoingHandshake: HandshakeRequest = {
56
- sourceId: this.ownPeerDescriptor.kademliaId,
57
- peerDescriptor: this.ownPeerDescriptor
56
+ sourcePeerDescriptor: this.localPeerDescriptor,
57
+ targetPeerDescriptor: remotePeerDescriptor
58
58
  }
59
59
  const msg: Message = {
60
60
  serviceId: Handshaker.HANDSHAKER_SERVICE_ID,
@@ -69,13 +69,10 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
69
69
  logger.trace('handshake request sent')
70
70
  }
71
71
 
72
- public sendHandshakeResponse(error?: string): void {
72
+ public sendHandshakeResponse(error?: HandshakeError): void {
73
73
  const outgoingHandshakeResponse: HandshakeResponse = {
74
- sourceId: this.ownPeerDescriptor.kademliaId,
75
- peerDescriptor: this.ownPeerDescriptor
76
- }
77
- if (error) {
78
- outgoingHandshakeResponse.responseError = error
74
+ sourcePeerDescriptor: this.localPeerDescriptor,
75
+ error
79
76
  }
80
77
  const msg: Message = {
81
78
  serviceId: Handshaker.HANDSHAKER_SERVICE_ID,
@@ -87,6 +84,6 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
87
84
  }
88
85
  }
89
86
  this.connection.send(Message.toBinary(msg))
90
- logger.trace('handshake request sent')
87
+ logger.trace('handshake response sent')
91
88
  }
92
89
  }
@@ -1,10 +1,9 @@
1
1
  import { UUID } from '../helpers/UUID'
2
- import { DisconnectionType } from '../transport/ITransport'
3
2
 
4
3
  export interface ConnectionEvents {
5
4
  data: (bytes: Uint8Array) => void
6
5
  connected: () => void
7
- disconnected: (disconnectionType: DisconnectionType, code?: number, reason?: string) => void
6
+ disconnected: (gracefulLeave: boolean, code?: number, reason?: string) => void
8
7
  error: (name: string) => void
9
8
  }
10
9
 
@@ -29,19 +28,19 @@ export interface IConnection {
29
28
  on(event: 'data', listener: (bytes: Uint8Array) => void): this
30
29
  on(event: 'error', listener: (name: string) => void): this
31
30
  on(event: 'connected', listener: () => void): this
32
- on(event: 'disconnected', listener: (disconnectionType: DisconnectionType, code?: number, reason?: string) => void): this
31
+ on(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): this
33
32
 
34
33
  once(event: 'data', listener: (bytes: Uint8Array) => void): this
35
34
  once(event: 'error', listener: (name: string) => void): this
36
35
  once(event: 'connected', listener: () => void): this
37
- once(event: 'disconnected', listener: (disconnectionType: DisconnectionType, code?: number, reason?: string) => void): this
36
+ once(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): this
38
37
 
39
38
  off(event: 'data', listener: (bytes: Uint8Array) => void): void
40
39
  off(event: 'error', listener: (name: string) => void): void
41
40
  off(event: 'connected', listener: () => void): void
42
- off(event: 'disconnected', listener: (disconnectionType: DisconnectionType, code?: number, reason?: string) => void): void
41
+ off(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): void
43
42
 
44
43
  send(data: Uint8Array): void
45
- close(disconnectionType: DisconnectionType): Promise<void>
44
+ close(gracefulLeave: boolean): Promise<void>
46
45
  destroy(): void
47
46
  }