@streamr/dht 100.0.0-pretestnet.0 → 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 (317) 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} +108 -102
  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} +18 -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} +51 -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 +48 -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 +5 -1
  165. package/dist/src/transport/ListeningRpcCommunicator.js +8 -2
  166. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  167. package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
  168. package/dist/src/transport/RoutingRpcCommunicator.js +0 -1
  169. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  170. package/dist/src/types/ServiceID.d.ts +1 -0
  171. package/dist/src/types/ServiceID.js +3 -0
  172. package/dist/src/types/ServiceID.js.map +1 -0
  173. package/karma.config.js +4 -4
  174. package/package.json +10 -8
  175. package/protos/DhtRpc.proto +32 -35
  176. package/src/connection/ConnectionLockHandler.ts +19 -17
  177. package/src/connection/ConnectionLockRpcLocal.ts +74 -0
  178. package/src/connection/ConnectionLockRpcRemote.ts +7 -6
  179. package/src/connection/ConnectionManager.ts +59 -95
  180. package/src/connection/ConnectivityChecker.ts +30 -26
  181. package/src/connection/ConnectorFacade.ts +74 -34
  182. package/src/connection/Handshaker.ts +9 -9
  183. package/src/connection/IConnection.ts +5 -6
  184. package/src/connection/ManagedConnection.ts +21 -22
  185. package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +9 -9
  186. package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
  187. package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +23 -24
  188. package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +13 -13
  189. package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
  190. package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +12 -13
  191. package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
  192. package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +32 -33
  193. package/src/connection/webrtc/WebrtcConnector.ts +225 -0
  194. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +132 -0
  195. package/src/connection/{WebRTC/WebRtcConnectorRpcRemote.ts → webrtc/WebrtcConnectorRpcRemote.ts} +6 -7
  196. package/src/connection/{WebRTC → webrtc}/iceServerAsString.ts +1 -1
  197. package/src/connection/websocket/AutoCertifierClientFacade.ts +91 -0
  198. package/src/connection/{WebSocket/ClientWebSocket.ts → websocket/ClientWebsocket.ts} +19 -17
  199. package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +21 -27
  200. package/src/connection/{WebSocket/WebSocketConnectorRpcLocal.ts → websocket/WebsocketConnector.ts} +110 -101
  201. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
  202. package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +6 -12
  203. package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
  204. package/src/dht/DhtNode.ts +144 -179
  205. package/src/dht/DhtNodeRpcLocal.ts +68 -0
  206. package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +12 -13
  207. package/src/dht/ExternalApiRpcLocal.ts +46 -0
  208. package/src/dht/ExternalApiRpcRemote.ts +4 -4
  209. package/src/dht/contact/Remote.ts +32 -4
  210. package/src/dht/contact/SortedContactList.ts +4 -4
  211. package/src/dht/discovery/DiscoverySession.ts +23 -20
  212. package/src/dht/discovery/PeerDiscovery.ts +14 -17
  213. package/src/dht/find/FindRpcLocal.ts +35 -0
  214. package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +26 -25
  215. package/src/dht/find/FindSessionRpcLocal.ts +25 -0
  216. package/src/dht/find/{RemoteRecursiveFindSession.ts → FindSessionRpcRemote.ts} +9 -5
  217. package/src/dht/find/{RecursiveFinder.ts → Finder.ts} +78 -71
  218. package/src/dht/routing/FindRpcRemote.ts +40 -0
  219. package/src/dht/routing/Router.ts +70 -105
  220. package/src/dht/routing/RouterRpcLocal.ts +81 -0
  221. package/src/dht/routing/RouterRpcRemote.ts +15 -45
  222. package/src/dht/routing/RoutingSession.ts +56 -61
  223. package/src/dht/routing/getPreviousPeer.ts +6 -0
  224. package/src/dht/store/StoreRpcLocal.ts +44 -37
  225. package/src/dht/store/StoreRpcRemote.ts +4 -8
  226. package/src/exports.ts +11 -5
  227. package/src/helpers/Connectivity.ts +19 -0
  228. package/src/helpers/errors.ts +3 -3
  229. package/src/helpers/protoClasses.ts +6 -6
  230. package/src/proto/packages/dht/protos/DhtRpc.client.ts +75 -59
  231. package/src/proto/packages/dht/protos/DhtRpc.server.ts +26 -21
  232. package/src/proto/packages/dht/protos/DhtRpc.ts +87 -114
  233. package/src/rpc-protocol/DhtCallContext.ts +0 -1
  234. package/src/transport/ITransport.ts +5 -8
  235. package/src/transport/ListeningRpcCommunicator.ts +14 -4
  236. package/src/transport/RoutingRpcCommunicator.ts +3 -4
  237. package/src/types/ServiceID.ts +1 -0
  238. package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +6 -6
  239. package/test/benchmark/KademliaCorrectness.test.ts +2 -2
  240. package/test/benchmark/kademlia-simulation/SimulationNode.ts +3 -3
  241. package/test/end-to-end/Layer0-Layer1.test.ts +13 -5
  242. package/test/end-to-end/Layer0.test.ts +35 -17
  243. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +24 -6
  244. package/test/end-to-end/{Layer0WebRTC-Layer1.test.ts → Layer0Webrtc-Layer1.test.ts} +1 -1
  245. package/test/end-to-end/{Layer0WebRTC.test.ts → Layer0Webrtc.test.ts} +14 -10
  246. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -4
  247. package/test/end-to-end/{Layer1-Scale-WebRTC.test.ts → Layer1-Scale-Webrtc.test.ts} +2 -2
  248. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +52 -0
  249. package/test/end-to-end/{WebSocketConnectionRequest.test.ts → WebsocketConnectionRequest.test.ts} +16 -8
  250. package/test/end-to-end/memory-leak.test.ts +85 -0
  251. package/test/integration/ConnectionLocking.test.ts +4 -4
  252. package/test/integration/ConnectionManager.test.ts +37 -28
  253. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
  254. package/test/integration/DhtNodeExternalAPI.test.ts +10 -10
  255. package/test/integration/{RemoteDhtNode.test.ts → DhtNodeRpcRemote.test.ts} +10 -10
  256. package/test/integration/DhtRpc.test.ts +5 -5
  257. package/test/integration/{RecursiveFind.test.ts → Find.test.ts} +3 -3
  258. package/test/integration/Layer1-scale.test.ts +1 -1
  259. package/test/integration/MigrateData.test.ts +6 -5
  260. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
  261. package/test/integration/MultipleEntryPointJoining.test.ts +6 -6
  262. package/test/integration/RouteMessage.test.ts +26 -26
  263. package/test/integration/RpcErrors.test.ts +10 -10
  264. package/test/integration/ScaleDownDht.test.ts +3 -3
  265. package/test/integration/SimultaneousConnections.test.ts +10 -7
  266. package/test/integration/Store.test.ts +1 -1
  267. package/test/integration/StoreAndDelete.test.ts +1 -1
  268. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
  269. package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +4 -4
  270. package/test/integration/{WebRtcConnectorRpc.test.ts → WebrtcConnectorRpc.test.ts} +7 -8
  271. package/test/integration/{WebSocket.test.ts → Websocket.test.ts} +14 -13
  272. package/test/integration/{WebSocketConnectionManagement.test.ts → WebsocketConnectionManagement.test.ts} +4 -4
  273. package/test/integration/{WebSocketConnectorRpc.test.ts → WebsocketConnectorRpc.test.ts} +15 -15
  274. package/test/unit/AutoCertifierClientFacade.test.ts +58 -0
  275. package/test/unit/ConnectivityHelpers.test.ts +69 -0
  276. package/test/unit/{RecursiveFinder.test.ts → Finder.test.ts} +19 -17
  277. package/test/unit/Router.test.ts +26 -26
  278. package/test/unit/UUID.test.ts +1 -1
  279. package/test/unit/{WebSocketConnectorRpcLocal.test.ts → WebsocketConnector.test.ts} +8 -8
  280. package/test/unit/{WebSocketServer.test.ts → WebsocketServer.test.ts} +20 -14
  281. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +1 -1
  282. package/test/utils/FakeRpcCommunicator.ts +23 -0
  283. package/test/utils/mock/Transport.ts +1 -1
  284. package/test/utils/utils.ts +14 -24
  285. package/tsconfig.browser.json +1 -1
  286. package/tsconfig.jest.json +3 -2
  287. package/tsconfig.node.json +3 -2
  288. package/dist/src/connection/ManagedWebRtcConnection.d.ts +0 -7
  289. package/dist/src/connection/ManagedWebRtcConnection.js +0 -20
  290. package/dist/src/connection/ManagedWebRtcConnection.js.map +0 -1
  291. package/dist/src/connection/Simulator/SimulatorConnection.js.map +0 -1
  292. package/dist/src/connection/Simulator/SimulatorTransport.js.map +0 -1
  293. package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +0 -1
  294. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +0 -1
  295. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.d.ts +0 -51
  296. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js +0 -249
  297. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +0 -1
  298. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +0 -1
  299. package/dist/src/connection/WebSocket/ClientWebSocket.js.map +0 -1
  300. package/dist/src/connection/WebSocket/ServerWebSocket.js.map +0 -1
  301. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +0 -1
  302. package/dist/src/connection/WebSocket/WebSocketServer.js.map +0 -1
  303. package/dist/src/dht/RemoteDhtNode.js.map +0 -1
  304. package/dist/src/dht/find/RecursiveFindSession.js.map +0 -1
  305. package/dist/src/dht/find/RecursiveFinder.js.map +0 -1
  306. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +0 -1
  307. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +0 -2
  308. package/dist/src/dht/registerExternalApiRpcMethods.js +0 -32
  309. package/dist/src/dht/registerExternalApiRpcMethods.js.map +0 -1
  310. package/src/connection/WebRTC/WebRtcConnectorRpcLocal.ts +0 -335
  311. package/src/dht/registerExternalApiRpcMethods.ts +0 -44
  312. package/test/utils/mock/RecursiveFinder.ts +0 -19
  313. /package/dist/src/connection/{Simulator → simulator}/Simulator.d.ts +0 -0
  314. /package/dist/src/connection/{Simulator → simulator}/pings.d.ts +0 -0
  315. /package/dist/src/connection/{Simulator → simulator}/pings.js +0 -0
  316. /package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js +0 -0
  317. /package/src/connection/{Simulator → simulator}/pings.ts +0 -0
@@ -3,12 +3,14 @@
3
3
 
4
4
  import { PeerIDKey } from '../helpers/PeerID'
5
5
 
6
- type ServiceName = string
6
+ export type LockID = string
7
7
 
8
8
  export class ConnectionLockHandler {
9
9
 
10
- private localLocks: Map<PeerIDKey, Set<ServiceName>> = new Map()
11
- private remoteLocks: Map<PeerIDKey, Set<ServiceName>> = new Map()
10
+ private localLocks: Map<PeerIDKey, Set<LockID>> = new Map()
11
+ private remoteLocks: Map<PeerIDKey, Set<LockID>> = new Map()
12
+ // TODO: remove weakLocks use localLocks instead. When opening weakLocks from the ConnectioManager,
13
+ // simply do not send lock requests.
12
14
  private weakLocks: Set<PeerIDKey> = new Set()
13
15
 
14
16
  public getNumberOfLocalLockedConnections(): number {
@@ -23,19 +25,19 @@ export class ConnectionLockHandler {
23
25
  return this.weakLocks.size
24
26
  }
25
27
 
26
- public isLocalLocked(id: PeerIDKey, serviceName?: ServiceName): boolean {
27
- if (!serviceName) {
28
+ public isLocalLocked(id: PeerIDKey, lockId?: LockID): boolean {
29
+ if (!lockId) {
28
30
  return this.localLocks.has(id)
29
31
  } else {
30
- return this.localLocks.has(id) && this.localLocks.get(id)!.has(serviceName)
32
+ return this.localLocks.has(id) && this.localLocks.get(id)!.has(lockId)
31
33
  }
32
34
  }
33
35
 
34
- public isRemoteLocked(id: PeerIDKey, serviceName?: ServiceName): boolean {
35
- if (!serviceName) {
36
+ public isRemoteLocked(id: PeerIDKey, lockId?: LockID): boolean {
37
+ if (!lockId) {
36
38
  return this.remoteLocks.has(id)
37
39
  } else {
38
- if (this.remoteLocks.has(id) && this.remoteLocks.get(id)!.has(serviceName)) {
40
+ if (this.remoteLocks.has(id) && this.remoteLocks.get(id)!.has(lockId)) {
39
41
  return true
40
42
  } else {
41
43
  return false
@@ -51,36 +53,36 @@ export class ConnectionLockHandler {
51
53
  return (this.isLocalLocked(id) || this.isRemoteLocked(id) || this.isWeakLocked(id))
52
54
  }
53
55
 
54
- public addLocalLocked(id: PeerIDKey, serviceName: ServiceName): void {
56
+ public addLocalLocked(id: PeerIDKey, lockId: LockID): void {
55
57
  if (!this.localLocks.has(id)) {
56
58
  this.localLocks.set(id, new Set())
57
59
  }
58
- this.localLocks.get(id)!.add(serviceName)
60
+ this.localLocks.get(id)!.add(lockId)
59
61
  }
60
62
 
61
- public addRemoteLocked(id: PeerIDKey, serviceName: ServiceName): void {
63
+ public addRemoteLocked(id: PeerIDKey, lockId: LockID): void {
62
64
  if (!this.remoteLocks.has(id)) {
63
65
  this.remoteLocks.set(id, new Set())
64
66
  }
65
- this.remoteLocks.get(id)!.add(serviceName)
67
+ this.remoteLocks.get(id)!.add(lockId)
66
68
  }
67
69
 
68
70
  public addWeakLocked(id: PeerIDKey): void {
69
71
  this.weakLocks.add(id)
70
72
  }
71
73
 
72
- public removeLocalLocked(id: PeerIDKey, serviceName: ServiceName): void {
74
+ public removeLocalLocked(id: PeerIDKey, lockId: LockID): void {
73
75
  if (this.localLocks.has(id)) {
74
- this.localLocks.get(id)?.delete(serviceName)
76
+ this.localLocks.get(id)?.delete(lockId)
75
77
  if (this.localLocks.get(id)?.size === 0) {
76
78
  this.localLocks.delete(id)
77
79
  }
78
80
  }
79
81
  }
80
82
 
81
- public removeRemoteLocked(id: PeerIDKey, serviceName: ServiceName): void {
83
+ public removeRemoteLocked(id: PeerIDKey, lockId: LockID): void {
82
84
  if (this.remoteLocks.has(id)) {
83
- this.remoteLocks.get(id)?.delete(serviceName)
85
+ this.remoteLocks.get(id)?.delete(lockId)
84
86
  if (this.remoteLocks.get(id)?.size === 0) {
85
87
  this.remoteLocks.delete(id)
86
88
  }
@@ -0,0 +1,74 @@
1
+ import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
2
+ import { Logger } from '@streamr/utils'
3
+ import {
4
+ areEqualPeerDescriptors,
5
+ keyFromPeerDescriptor,
6
+ peerIdFromPeerDescriptor
7
+ } from '../helpers/peerIdFromPeerDescriptor'
8
+ import { Empty } from '../proto/google/protobuf/empty'
9
+ import {
10
+ DisconnectMode,
11
+ DisconnectNotice,
12
+ LockRequest,
13
+ LockResponse,
14
+ PeerDescriptor,
15
+ UnlockRequest
16
+ } from '../proto/packages/dht/protos/DhtRpc'
17
+ import { IConnectionLockRpc } from '../proto/packages/dht/protos/DhtRpc.server'
18
+ import { DhtCallContext } from '../rpc-protocol/DhtCallContext'
19
+ import { PeerIDKey } from '../helpers/PeerID'
20
+ import { keyOrUnknownFromPeerDescriptor } from './ConnectionManager'
21
+ import { LockID } from './ConnectionLockHandler'
22
+
23
+ interface ConnectionLockRpcLocalConfig {
24
+ addRemoteLocked: (id: PeerIDKey, lockId: LockID) => void
25
+ removeRemoteLocked: (id: PeerIDKey, lockId: LockID) => void
26
+ closeConnection: (peerDescriptor: PeerDescriptor, gracefulLeave: boolean, reason?: string) => void
27
+ getLocalPeerDescriptor: () => PeerDescriptor
28
+ }
29
+
30
+ const logger = new Logger(module)
31
+
32
+ export class ConnectionLockRpcLocal implements IConnectionLockRpc {
33
+
34
+ private readonly config: ConnectionLockRpcLocalConfig
35
+
36
+ constructor(config: ConnectionLockRpcLocalConfig) {
37
+ this.config = config
38
+ }
39
+
40
+ async lockRequest(lockRequest: LockRequest, context: ServerCallContext): Promise<LockResponse> {
41
+ const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
42
+ const remotePeerId = peerIdFromPeerDescriptor(senderPeerDescriptor)
43
+ if (areEqualPeerDescriptors(senderPeerDescriptor, this.config.getLocalPeerDescriptor())) {
44
+ const response: LockResponse = {
45
+ accepted: false
46
+ }
47
+ return response
48
+ }
49
+ this.config.addRemoteLocked(remotePeerId.toKey(), lockRequest.lockId)
50
+ const response: LockResponse = {
51
+ accepted: true
52
+ }
53
+ return response
54
+ }
55
+
56
+ async unlockRequest(unlockRequest: UnlockRequest, context: ServerCallContext): Promise<Empty> {
57
+ const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
58
+ const peerIdKey = keyFromPeerDescriptor(senderPeerDescriptor)
59
+ this.config.removeRemoteLocked(peerIdKey, unlockRequest.lockId)
60
+ return {}
61
+ }
62
+
63
+ async gracefulDisconnect(disconnectNotice: DisconnectNotice, context: ServerCallContext): Promise<Empty> {
64
+ const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
65
+ logger.trace(keyOrUnknownFromPeerDescriptor(senderPeerDescriptor) + ' received gracefulDisconnect notice')
66
+
67
+ if (disconnectNotice.disconnectMode === DisconnectMode.LEAVING) {
68
+ this.config.closeConnection(senderPeerDescriptor, true, 'graceful leave notified')
69
+ } else {
70
+ this.config.closeConnection(senderPeerDescriptor, false, 'graceful disconnect notified')
71
+ }
72
+ return {}
73
+ }
74
+ }
@@ -6,23 +6,24 @@ import { LockRequest, UnlockRequest, PeerDescriptor, DisconnectNotice, Disconnec
6
6
  import * as Err from '../helpers/errors'
7
7
  import { keyFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
8
8
  import { Remote } from '../dht/contact/Remote'
9
+ import { LockID } from './ConnectionLockHandler'
9
10
 
10
11
  const logger = new Logger(module)
11
12
 
12
13
  export class ConnectionLockRpcRemote extends Remote<IConnectionLockRpcClient> {
13
14
 
14
15
  constructor(
15
- ownPeerDescriptor: PeerDescriptor,
16
+ localPeerDescriptor: PeerDescriptor,
16
17
  targetPeerDescriptor: PeerDescriptor,
17
18
  client: ProtoRpcClient<IConnectionLockRpcClient>
18
19
  ) {
19
- super(ownPeerDescriptor, targetPeerDescriptor, 'DUMMY', client)
20
+ super(localPeerDescriptor, targetPeerDescriptor, 'DUMMY', client)
20
21
  }
21
22
 
22
- public async lockRequest(serviceId: string): Promise<boolean> {
23
+ public async lockRequest(lockId: LockID): Promise<boolean> {
23
24
  logger.trace(`Requesting locked connection to ${keyFromPeerDescriptor(this.getPeerDescriptor())}`)
24
25
  const request: LockRequest = {
25
- serviceId
26
+ lockId
26
27
  }
27
28
  const options = this.formDhtRpcOptions()
28
29
  try {
@@ -34,10 +35,10 @@ export class ConnectionLockRpcRemote extends Remote<IConnectionLockRpcClient> {
34
35
  }
35
36
  }
36
37
 
37
- public unlockRequest(serviceId: string): void {
38
+ public unlockRequest(lockId: LockID): void {
38
39
  logger.trace(`Requesting connection to be unlocked from ${keyFromPeerDescriptor(this.getPeerDescriptor())}`)
39
40
  const request: UnlockRequest = {
40
- serviceId
41
+ lockId
41
42
  }
42
43
  const options = this.formDhtRpcOptions({
43
44
  notification: true
@@ -12,7 +12,6 @@ import {
12
12
  peerIdFromPeerDescriptor
13
13
  } from '../helpers/peerIdFromPeerDescriptor'
14
14
  import { protoToString } from '../helpers/protoToString'
15
- import { Empty } from '../proto/google/protobuf/empty'
16
15
  import {
17
16
  DisconnectMode,
18
17
  DisconnectNotice,
@@ -25,15 +24,15 @@ import {
25
24
  UnlockRequest
26
25
  } from '../proto/packages/dht/protos/DhtRpc'
27
26
  import { ConnectionLockRpcClient } from '../proto/packages/dht/protos/DhtRpc.client'
28
- import { DisconnectionType, ITransport, TransportEvents } from '../transport/ITransport'
27
+ import { ITransport, TransportEvents } from '../transport/ITransport'
29
28
  import { RoutingRpcCommunicator } from '../transport/RoutingRpcCommunicator'
30
- import { ConnectionLockHandler } from './ConnectionLockHandler'
29
+ import { ConnectionLockHandler, LockID } from './ConnectionLockHandler'
31
30
  import { ConnectorFacade } from './ConnectorFacade'
32
31
  import { ManagedConnection, Events as ManagedConnectionEvents } from './ManagedConnection'
33
32
  import { ConnectionLockRpcRemote } from './ConnectionLockRpcRemote'
34
- import { WEB_RTC_CLEANUP } from './WebRTC/NodeWebRtcConnection'
33
+ import { WEBRTC_CLEANUP } from './webrtc/NodeWebrtcConnection'
35
34
  import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
36
- import { DhtCallContext } from '../rpc-protocol/DhtCallContext'
35
+ import { ConnectionLockRpcLocal } from './ConnectionLockRpcLocal'
37
36
 
38
37
  export interface ConnectionManagerConfig {
39
38
  maxConnections?: number
@@ -96,7 +95,7 @@ const INTERNAL_SERVICE_ID = 'system/connection-manager'
96
95
  // should only be used only for log output. TODO remove this method if we no longer use
97
96
  // peerDescriptors which can be undefined, e.g.
98
97
  // - if we refactor ConnectionManager so that it doesn't process handshake requests too early
99
- // and therefore this.ownPeerDescriptor can't be undefine (NET-1129)
98
+ // and therefore this.localPeerDescriptor can't be undefine (NET-1129)
100
99
  // - if the peerDescriptor of ManagedConnection is always available
101
100
  // - if we create stricter types for incoming messages (message.sourceDescriptor or
102
101
  // disconnectNotice.peerDescriptor)
@@ -126,8 +125,9 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
126
125
  super()
127
126
  this.config = config
128
127
  this.onData = this.onData.bind(this)
128
+ this.send = this.send.bind(this)
129
129
  this.onIncomingConnection = this.onIncomingConnection.bind(this)
130
- this.metricsContext = this.config.metricsContext || new MetricsContext()
130
+ this.metricsContext = this.config.metricsContext ?? new MetricsContext()
131
131
  this.metrics = {
132
132
  sendMessagesPerSecond: new RateMetric(),
133
133
  sendBytesPerSecond: new RateMetric(),
@@ -142,19 +142,27 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
142
142
  this.rpcCommunicator = new RoutingRpcCommunicator(INTERNAL_SERVICE_ID, this.send, {
143
143
  rpcRequestTimeout: 10000
144
144
  })
145
+ const lockRpcLocal = new ConnectionLockRpcLocal({
146
+ addRemoteLocked: (id: PeerIDKey, serviceId: string) => this.locks.addRemoteLocked(id, serviceId),
147
+ removeRemoteLocked: (id: PeerIDKey, serviceId: string) => this.locks.removeRemoteLocked(id, serviceId),
148
+ closeConnection: (peerDescriptor: PeerDescriptor, gracefulLeave: boolean, reason?: string) => {
149
+ this.closeConnection(peerDescriptor, gracefulLeave, reason)
150
+ },
151
+ getLocalPeerDescriptor: () => this.getLocalPeerDescriptor()
152
+ })
145
153
  this.rpcCommunicator.registerRpcMethod(LockRequest, LockResponse, 'lockRequest',
146
- (req: LockRequest, context: ServerCallContext) => this.lockRequest(req, context))
154
+ (req: LockRequest, context: ServerCallContext) => lockRpcLocal.lockRequest(req, context))
147
155
  this.rpcCommunicator.registerRpcNotification(UnlockRequest, 'unlockRequest',
148
- (req: UnlockRequest, context: ServerCallContext) => this.unlockRequest(req, context))
156
+ (req: UnlockRequest, context: ServerCallContext) => lockRpcLocal.unlockRequest(req, context))
149
157
  this.rpcCommunicator.registerRpcMethod(DisconnectNotice, DisconnectNoticeResponse, 'gracefulDisconnect',
150
- (req: DisconnectNotice, context: ServerCallContext) => this.gracefulDisconnect(req, context))
158
+ (req: DisconnectNotice, context: ServerCallContext) => lockRpcLocal.gracefulDisconnect(req, context))
151
159
  }
152
160
 
153
161
  public garbageCollectConnections(maxConnections: number, lastUsedLimit: number): void {
154
162
  if (this.connections.size <= maxConnections) {
155
163
  return
156
164
  }
157
- const disconnectionCandidates = new SortedContactList<Contact>(peerIdFromPeerDescriptor(this.getOwnPeerDescriptor()), 100000)
165
+ const disconnectionCandidates = new SortedContactList<Contact>(peerIdFromPeerDescriptor(this.getLocalPeerDescriptor()), 100000)
158
166
  this.connections.forEach((connection) => {
159
167
  if (!this.locks.isLocked(connection.peerIdKey) && Date.now() - connection.getLastUsed() > lastUsedLimit) {
160
168
  logger.trace('disconnecting in timeout interval: ' + keyOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()))
@@ -178,7 +186,8 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
178
186
  logger.trace(`Starting ConnectionManager...`)
179
187
  await this.connectorFacade.start(
180
188
  (connection: ManagedConnection) => this.onIncomingConnection(connection),
181
- (peerDescriptor: PeerDescriptor) => this.canConnect(peerDescriptor)
189
+ (peerDescriptor: PeerDescriptor) => this.canConnect(peerDescriptor),
190
+ this
182
191
  )
183
192
  // Garbage collection of connections
184
193
  this.disconnectorIntervalRef = setInterval(() => {
@@ -209,7 +218,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
209
218
  } else {
210
219
  logger.trace('handshake of connection not completed, force-closing')
211
220
  const eventReceived = waitForEvent3<ManagedConnectionEvents>(peer, 'disconnected', 2000)
212
- peer.close('OTHER')
221
+ peer.close(true)
213
222
  try {
214
223
  await eventReceived
215
224
  logger.trace('resolving after receiving disconnected event from non-handshaked connection')
@@ -224,10 +233,10 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
224
233
  this.duplicateMessageDetector.clear()
225
234
  this.locks.clear()
226
235
  this.removeAllListeners()
227
- // TODO would it make sense to move this call to WebRtcConnector#stop()?
236
+ // TODO would it make sense to move this call to WebrtcConnector#stop()?
228
237
  // - but note that we should call this only after connections have been closed
229
238
  // (i.e the this.gracefullyDisconnectAsync() calls above)
230
- WEB_RTC_CLEANUP.cleanUp()
239
+ WEBRTC_CLEANUP.cleanUp()
231
240
  }
232
241
 
233
242
  public getNumberOfLocalLockedConnections(): number {
@@ -246,7 +255,6 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
246
255
  if (this.state === ConnectionManagerState.STOPPED && !doNotMindStopped) {
247
256
  return
248
257
  }
249
-
250
258
  const peerDescriptor = message.targetDescriptor!
251
259
  if (this.isConnectionToSelf(peerDescriptor)) {
252
260
  throw new Err.CannotConnectToSelf('Cannot send to self')
@@ -254,8 +262,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
254
262
  logger.trace(`Sending message to: ${keyFromPeerDescriptor(peerDescriptor)}`)
255
263
  message = {
256
264
  ...message,
257
- targetDescriptor: message.targetDescriptor || peerDescriptor,
258
- sourceDescriptor: message.sourceDescriptor || this.getOwnPeerDescriptor(),
265
+ sourceDescriptor: this.getLocalPeerDescriptor()
259
266
  }
260
267
  const peerIdKey = keyFromPeerDescriptor(peerDescriptor)
261
268
  let connection = this.connections.get(peerIdKey)
@@ -272,14 +279,14 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
272
279
  }
273
280
 
274
281
  private isConnectionToSelf(peerDescriptor: PeerDescriptor): boolean {
275
- return areEqualPeerDescriptors(peerDescriptor, this.getOwnPeerDescriptor()) || this.isOwnWebSocketServer(peerDescriptor)
282
+ return areEqualPeerDescriptors(peerDescriptor, this.getLocalPeerDescriptor()) || this.isOwnWebsocketServer(peerDescriptor)
276
283
  }
277
284
 
278
- private isOwnWebSocketServer(peerDescriptor: PeerDescriptor): boolean {
279
- const ownPeerDescriptor = this.getOwnPeerDescriptor()
280
- if ((peerDescriptor.websocket !== undefined) && (ownPeerDescriptor.websocket !== undefined)) {
281
- return ((peerDescriptor.websocket.port === ownPeerDescriptor.websocket.port)
282
- && (peerDescriptor.websocket.host === ownPeerDescriptor.websocket.host))
285
+ private isOwnWebsocketServer(peerDescriptor: PeerDescriptor): boolean {
286
+ const localPeerDescriptor = this.getLocalPeerDescriptor()
287
+ if ((peerDescriptor.websocket !== undefined) && (localPeerDescriptor.websocket !== undefined)) {
288
+ return ((peerDescriptor.websocket.port === localPeerDescriptor.websocket.port)
289
+ && (peerDescriptor.websocket.host === localPeerDescriptor.websocket.host))
283
290
  } else {
284
291
  return false
285
292
  }
@@ -290,13 +297,8 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
290
297
  return this.connections.get(peerIdKey)
291
298
  }
292
299
 
293
- // TODO remove this method or getOwnPeerDescriptor
294
- public getPeerDescriptor(): PeerDescriptor {
295
- return this.getOwnPeerDescriptor()
296
- }
297
-
298
- private getOwnPeerDescriptor(): PeerDescriptor {
299
- return this.connectorFacade.getOwnPeerDescriptor()!
300
+ public getLocalPeerDescriptor(): PeerDescriptor {
301
+ return this.connectorFacade.getLocalPeerDescriptor()!
300
302
  }
301
303
 
302
304
  public hasConnection(peerDescriptor: PeerDescriptor): boolean {
@@ -361,15 +363,15 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
361
363
  }
362
364
  }
363
365
 
364
- private onConnected = (connection: ManagedConnection) => {
366
+ private onConnected(connection: ManagedConnection) {
365
367
  const peerDescriptor = connection.getPeerDescriptor()!
366
368
  this.emit('connected', peerDescriptor)
367
369
  logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' onConnected() ' + connection.connectionType)
368
370
  this.onConnectionCountChange()
369
371
  }
370
372
 
371
- private onDisconnected = (connection: ManagedConnection, disconnectionType: DisconnectionType) => {
372
- logger.trace(keyOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()) + ' onDisconnected() ' + disconnectionType)
373
+ private onDisconnected(connection: ManagedConnection, gracefulLeave: boolean) {
374
+ logger.trace(keyOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()) + ' onDisconnected() gracefulLeave: ' + gracefulLeave)
373
375
 
374
376
  const peerIdKey = keyFromPeerDescriptor(connection.getPeerDescriptor()!)
375
377
  const storedConnection = this.connections.get(peerIdKey)
@@ -377,8 +379,8 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
377
379
  this.locks.clearAllLocks(peerIdKey)
378
380
  this.connections.delete(peerIdKey)
379
381
  logger.trace(keyOrUnknownFromPeerDescriptor(connection.getPeerDescriptor())
380
- + ' deleted connection in onDisconnected() ' + disconnectionType)
381
- this.emit('disconnected', connection.getPeerDescriptor()!, disconnectionType)
382
+ + ' deleted connection in onDisconnected() gracefulLeave: ' + gracefulLeave)
383
+ this.emit('disconnected', connection.getPeerDescriptor()!, gracefulLeave)
382
384
  this.onConnectionCountChange()
383
385
  } else {
384
386
  logger.trace(keyOrUnknownFromPeerDescriptor(connection.getPeerDescriptor())
@@ -401,14 +403,14 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
401
403
  return false
402
404
  }
403
405
  connection.on('managedData', this.onData)
404
- connection.on('disconnected', (disconnectionType: DisconnectionType) => {
405
- this.onDisconnected(connection, disconnectionType)
406
+ connection.on('disconnected', (gracefulLeave: boolean) => {
407
+ this.onDisconnected(connection, gracefulLeave)
406
408
  })
407
409
  this.emit('newConnection', connection)
408
410
  if (connection.isHandshakeCompleted()) {
409
411
  this.onConnected(connection)
410
412
  } else {
411
- connection.once('handshakeCompleted', ()=> {
413
+ connection.once('handshakeCompleted', () => {
412
414
  this.onConnected(connection)
413
415
  })
414
416
  }
@@ -420,7 +422,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
420
422
  const newPeerID = peerIdFromPeerDescriptor(newConnection.getPeerDescriptor()!)
421
423
  const peerIdKey = keyFromPeerDescriptor(newConnection.getPeerDescriptor()!)
422
424
  if (this.connections.has(peerIdKey)) {
423
- if (newPeerID.hasSmallerHashThan(peerIdFromPeerDescriptor(this.getOwnPeerDescriptor()))) {
425
+ if (newPeerID.hasSmallerHashThan(peerIdFromPeerDescriptor(this.getLocalPeerDescriptor()))) {
424
426
  logger.trace(keyOrUnknownFromPeerDescriptor(newConnection.getPeerDescriptor())
425
427
  + ' acceptIncomingConnection() replace current connection')
426
428
  // replace the current connection
@@ -446,54 +448,54 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
446
448
  return true
447
449
  }
448
450
 
449
- private async closeConnection(peerDescriptor: PeerDescriptor, disconnectionType: DisconnectionType, reason?: string): Promise<void> {
451
+ private async closeConnection(peerDescriptor: PeerDescriptor, gracefulLeave: boolean, reason?: string): Promise<void> {
450
452
  logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'closeConnection() ' + reason)
451
453
  const id = keyFromPeerDescriptor(peerDescriptor)
452
454
  this.locks.clearAllLocks(id)
453
455
  if (this.connections.has(id)) {
454
456
  const connectionToClose = this.connections.get(id)!
455
- await connectionToClose.close(disconnectionType)
457
+ await connectionToClose.close(gracefulLeave)
456
458
 
457
459
  } else {
458
460
  logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'closeConnection() this.connections did not have the id')
459
- this.emit('disconnected', peerDescriptor, 'OTHER')
461
+ this.emit('disconnected', peerDescriptor, false)
460
462
  }
461
463
  }
462
464
 
463
- public lockConnection(targetDescriptor: PeerDescriptor, serviceId: ServiceId): void {
464
- if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getOwnPeerDescriptor())) {
465
+ public lockConnection(targetDescriptor: PeerDescriptor, lockId: LockID): void {
466
+ if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
465
467
  return
466
468
  }
467
469
  const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
468
470
  const rpcRemote = new ConnectionLockRpcRemote(
469
- this.getOwnPeerDescriptor(),
471
+ this.getLocalPeerDescriptor(),
470
472
  targetDescriptor,
471
473
  toProtoRpcClient(new ConnectionLockRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
472
474
  )
473
- this.locks.addLocalLocked(peerIdKey, serviceId)
474
- rpcRemote.lockRequest(serviceId)
475
+ this.locks.addLocalLocked(peerIdKey, lockId)
476
+ rpcRemote.lockRequest(lockId)
475
477
  .then((_accepted) => logger.trace('LockRequest successful'))
476
478
  .catch((err) => { logger.debug(err) })
477
479
  }
478
480
 
479
- public unlockConnection(targetDescriptor: PeerDescriptor, serviceId: ServiceId): void {
480
- if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getOwnPeerDescriptor())) {
481
+ public unlockConnection(targetDescriptor: PeerDescriptor, lockId: LockID): void {
482
+ if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
481
483
  return
482
484
  }
483
485
  const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
484
- this.locks.removeLocalLocked(peerIdKey, serviceId)
486
+ this.locks.removeLocalLocked(peerIdKey, lockId)
485
487
  const rpcRemote = new ConnectionLockRpcRemote(
486
- this.getOwnPeerDescriptor(),
488
+ this.getLocalPeerDescriptor(),
487
489
  targetDescriptor,
488
490
  toProtoRpcClient(new ConnectionLockRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
489
491
  )
490
492
  if (this.connections.has(peerIdKey)) {
491
- rpcRemote.unlockRequest(serviceId)
493
+ rpcRemote.unlockRequest(lockId)
492
494
  }
493
495
  }
494
496
 
495
497
  public weakLockConnection(targetDescriptor: PeerDescriptor): void {
496
- if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getOwnPeerDescriptor())) {
498
+ if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
497
499
  return
498
500
  }
499
501
  const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
@@ -501,7 +503,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
501
503
  }
502
504
 
503
505
  public weakUnlockConnection(targetDescriptor: PeerDescriptor): void {
504
- if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getOwnPeerDescriptor())) {
506
+ if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
505
507
  return
506
508
  }
507
509
  const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
@@ -526,7 +528,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
526
528
  })
527
529
  .catch((e) => {
528
530
  logger.trace('force-closing connection after timeout ' + e)
529
- connection.close('OTHER')
531
+ connection.close(true)
530
532
  })
531
533
  .finally(() => {
532
534
  logger.trace('resolving after receiving disconnected event')
@@ -546,7 +548,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
546
548
  private async doGracefullyDisconnectAsync(targetDescriptor: PeerDescriptor, disconnectMode: DisconnectMode): Promise<void> {
547
549
  logger.trace(keyFromPeerDescriptor(targetDescriptor) + ' gracefullyDisconnectAsync()')
548
550
  const rpcRemote = new ConnectionLockRpcRemote(
549
- this.getOwnPeerDescriptor(),
551
+ this.getLocalPeerDescriptor(),
550
552
  targetDescriptor,
551
553
  toProtoRpcClient(new ConnectionLockRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
552
554
  )
@@ -563,44 +565,6 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
563
565
  .map((managedConnection: ManagedConnection) => managedConnection.getPeerDescriptor()!)
564
566
  }
565
567
 
566
- // ConnectionLockRpc local RPC method
567
- private async lockRequest(lockRequest: LockRequest, context: ServerCallContext): Promise<LockResponse> {
568
- const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
569
- const remotePeerId = peerIdFromPeerDescriptor(senderPeerDescriptor)
570
- if (areEqualPeerDescriptors(senderPeerDescriptor, this.getOwnPeerDescriptor())) {
571
- const response: LockResponse = {
572
- accepted: false
573
- }
574
- return response
575
- }
576
- this.locks.addRemoteLocked(remotePeerId.toKey(), lockRequest.serviceId)
577
- const response: LockResponse = {
578
- accepted: true
579
- }
580
- return response
581
- }
582
-
583
- // ConnectionLockRpc local RPC method
584
- private async unlockRequest(unlockRequest: UnlockRequest, context: ServerCallContext): Promise<Empty> {
585
- const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
586
- const peerIdKey = keyFromPeerDescriptor(senderPeerDescriptor)
587
- this.locks.removeRemoteLocked(peerIdKey, unlockRequest.serviceId)
588
- return {}
589
- }
590
-
591
- // ConnectionLockRpc local RPC method
592
- private async gracefulDisconnect(disconnectNotice: DisconnectNotice, context: ServerCallContext): Promise<Empty> {
593
- const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
594
- logger.trace(keyOrUnknownFromPeerDescriptor(senderPeerDescriptor) + ' received gracefulDisconnect notice')
595
-
596
- if (disconnectNotice.disconnectMode === DisconnectMode.LEAVING) {
597
- this.closeConnection(senderPeerDescriptor, 'INCOMING_GRACEFUL_LEAVE', 'graceful leave notified')
598
- } else {
599
- this.closeConnection(senderPeerDescriptor, 'INCOMING_GRACEFUL_DISCONNECT', 'graceful disconnect notified')
600
- }
601
- return {}
602
- }
603
-
604
568
  private onConnectionCountChange() {
605
569
  this.metrics.connectionAverageCount.record(this.connections.size)
606
570
  }