@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.
- package/dist/src/connection/ConnectionLockHandler.d.ts +7 -8
- package/dist/src/connection/ConnectionLockHandler.js +16 -14
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcLocal.d.ts +20 -0
- package/dist/src/connection/ConnectionLockRpcLocal.js +47 -0
- package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -0
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +4 -3
- package/dist/src/connection/ConnectionLockRpcRemote.js +9 -9
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +9 -16
- package/dist/src/connection/ConnectionManager.js +101 -132
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.d.ts +7 -10
- package/dist/src/connection/ConnectivityChecker.js +30 -32
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +19 -13
- package/dist/src/connection/ConnectorFacade.js +74 -29
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +8 -8
- package/dist/src/connection/Handshaker.js +30 -33
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/IConnection.d.ts +5 -6
- package/dist/src/connection/IConnection.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +9 -13
- package/dist/src/connection/ManagedConnection.js +63 -99
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/ManagedWebrtcConnection.d.ts +7 -0
- package/dist/src/connection/ManagedWebrtcConnection.js +20 -0
- package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/Simulator.js +3 -3
- package/dist/src/connection/{Simulator → simulator}/Simulator.js.map +1 -1
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.d.ts +3 -4
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.js +25 -24
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +3 -3
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +17 -18
- package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.d.ts +1 -1
- package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.js +2 -2
- package/dist/src/connection/simulator/SimulatorTransport.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/pings.js.map +1 -1
- package/dist/src/connection/{WebRTC/IWebRtcConnection.d.ts → webrtc/IWebrtcConnection.d.ts} +2 -2
- package/dist/src/connection/{WebRTC/IWebRtcConnection.js → webrtc/IWebrtcConnection.js} +1 -1
- package/dist/src/connection/webrtc/IWebrtcConnection.js.map +1 -0
- package/dist/src/connection/{WebRTC/NodeWebRtcConnection.d.ts → webrtc/NodeWebrtcConnection.d.ts} +6 -7
- package/dist/src/connection/{WebRTC/NodeWebRtcConnection.js → webrtc/NodeWebrtcConnection.js} +41 -42
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -0
- package/dist/src/connection/webrtc/WebrtcConnector.d.ts +38 -0
- package/dist/src/connection/webrtc/WebrtcConnector.js +178 -0
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -0
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +26 -0
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +99 -0
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.d.ts → webrtc/WebrtcConnectorRpcRemote.d.ts} +4 -4
- package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.js → webrtc/WebrtcConnectorRpcRemote.js} +6 -8
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.d.ts +1 -1
- package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js.map +1 -1
- package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +26 -0
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js +37 -0
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -0
- package/dist/src/connection/{WebSocket/ClientWebSocket.d.ts → websocket/ClientWebsocket.d.ts} +5 -4
- package/dist/src/connection/{WebSocket/ClientWebSocket.js → websocket/ClientWebsocket.js} +23 -16
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -0
- package/dist/src/connection/{WebSocket/ServerWebSocket.d.ts → websocket/ServerWebsocket.d.ts} +2 -2
- package/dist/src/connection/{WebSocket/ServerWebSocket.js → websocket/ServerWebsocket.js} +25 -27
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +53 -0
- package/dist/src/connection/websocket/WebsocketConnector.js +242 -0
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -0
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +17 -0
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +26 -0
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.d.ts → websocket/WebsocketConnectorRpcRemote.d.ts} +3 -3
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js → websocket/WebsocketConnectorRpcRemote.js} +6 -11
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/{WebSocket/WebSocketServer.d.ts → websocket/WebsocketServer.d.ts} +6 -3
- package/dist/src/connection/{WebSocket/WebSocketServer.js → websocket/WebsocketServer.js} +39 -19
- package/dist/src/connection/websocket/WebsocketServer.js.map +1 -0
- package/dist/src/dht/DhtNode.d.ts +11 -19
- package/dist/src/dht/DhtNode.js +135 -163
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +22 -0
- package/dist/src/dht/DhtNodeRpcLocal.js +42 -0
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -0
- package/dist/src/dht/{RemoteDhtNode.d.ts → DhtNodeRpcRemote.d.ts} +5 -3
- package/dist/src/dht/{RemoteDhtNode.js → DhtNodeRpcRemote.js} +20 -24
- package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -0
- package/dist/src/dht/ExternalApiRpcLocal.d.ts +16 -0
- package/dist/src/dht/ExternalApiRpcLocal.js +30 -0
- package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -0
- package/dist/src/dht/ExternalApiRpcRemote.d.ts +1 -1
- package/dist/src/dht/ExternalApiRpcRemote.js +2 -2
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
- package/dist/src/dht/contact/Remote.d.ts +4 -1
- package/dist/src/dht/contact/Remote.js +28 -2
- package/dist/src/dht/contact/Remote.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +2 -2
- package/dist/src/dht/contact/SortedContactList.js +3 -3
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +9 -7
- package/dist/src/dht/discovery/DiscoverySession.js +9 -9
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +7 -10
- package/dist/src/dht/discovery/PeerDiscovery.js +6 -6
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/FindRpcLocal.d.ts +14 -0
- package/dist/src/dht/find/FindRpcLocal.js +25 -0
- package/dist/src/dht/find/FindRpcLocal.js.map +1 -0
- package/dist/src/dht/find/{RecursiveFindSession.d.ts → FindSession.d.ts} +12 -13
- package/dist/src/dht/find/{RecursiveFindSession.js → FindSession.js} +17 -15
- package/dist/src/dht/find/FindSession.js.map +1 -0
- package/dist/src/dht/find/FindSessionRpcLocal.d.ts +12 -0
- package/dist/src/dht/find/FindSessionRpcLocal.js +17 -0
- package/dist/src/dht/find/FindSessionRpcLocal.js.map +1 -0
- package/dist/src/dht/find/{RemoteRecursiveFindSession.d.ts → FindSessionRpcRemote.d.ts} +2 -2
- package/dist/src/dht/find/{RemoteRecursiveFindSession.js → FindSessionRpcRemote.js} +5 -5
- package/dist/src/dht/find/FindSessionRpcRemote.js.map +1 -0
- package/dist/src/dht/find/{RecursiveFinder.d.ts → Finder.d.ts} +16 -19
- package/dist/src/dht/find/{RecursiveFinder.js → Finder.js} +50 -46
- package/dist/src/dht/find/Finder.js.map +1 -0
- package/dist/src/dht/routing/FindRpcRemote.d.ts +6 -0
- package/dist/src/dht/routing/FindRpcRemote.js +41 -0
- package/dist/src/dht/routing/FindRpcRemote.js.map +1 -0
- package/dist/src/dht/routing/Router.d.ts +10 -17
- package/dist/src/dht/routing/Router.js +50 -93
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.d.ts +22 -0
- package/dist/src/dht/routing/RouterRpcLocal.js +66 -0
- package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -0
- package/dist/src/dht/routing/RouterRpcRemote.d.ts +0 -1
- package/dist/src/dht/routing/RouterRpcRemote.js +17 -45
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +17 -8
- package/dist/src/dht/routing/RoutingSession.js +124 -131
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/routing/getPreviousPeer.d.ts +2 -0
- package/dist/src/dht/routing/getPreviousPeer.js +9 -0
- package/dist/src/dht/routing/getPreviousPeer.js.map +1 -0
- package/dist/src/dht/store/StoreRpcLocal.d.ts +11 -8
- package/dist/src/dht/store/StoreRpcLocal.js +26 -25
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.js +6 -10
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
- package/dist/src/exports.d.ts +11 -5
- package/dist/src/exports.js +17 -4
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/Connectivity.d.ts +4 -0
- package/dist/src/helpers/Connectivity.js +24 -0
- package/dist/src/helpers/Connectivity.js.map +1 -0
- package/dist/src/helpers/errors.d.ts +3 -3
- package/dist/src/helpers/errors.js +7 -7
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +7 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/helpers/protoClasses.js +3 -3
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +56 -39
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +49 -36
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +85 -96
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +82 -71
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -21
- package/dist/src/rpc-protocol/DhtCallContext.d.ts +0 -1
- package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
- package/dist/src/transport/ITransport.d.ts +5 -6
- package/dist/src/transport/ListeningRpcCommunicator.d.ts +2 -1
- package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
- package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
- package/dist/src/transport/RoutingRpcCommunicator.js +0 -1
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/dist/src/types/ServiceID.d.ts +1 -0
- package/dist/src/types/ServiceID.js +3 -0
- package/dist/src/types/ServiceID.js.map +1 -0
- package/karma.config.js +4 -4
- package/package.json +10 -8
- package/protos/DhtRpc.proto +41 -40
- package/src/connection/ConnectionLockHandler.ts +19 -17
- package/src/connection/ConnectionLockRpcLocal.ts +74 -0
- package/src/connection/ConnectionLockRpcRemote.ts +11 -11
- package/src/connection/ConnectionManager.ts +88 -130
- package/src/connection/ConnectivityChecker.ts +36 -34
- package/src/connection/ConnectorFacade.ts +91 -40
- package/src/connection/Handshaker.ts +20 -23
- package/src/connection/IConnection.ts +5 -6
- package/src/connection/ManagedConnection.ts +76 -101
- package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +12 -10
- package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
- package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +27 -27
- package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +22 -23
- package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
- package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +13 -14
- package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
- package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +38 -40
- package/src/connection/webrtc/WebrtcConnector.ts +226 -0
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +132 -0
- package/src/connection/{WebRTC/WebRtcConnectorRpcRemote.ts → webrtc/WebrtcConnectorRpcRemote.ts} +6 -7
- package/src/connection/{WebRTC → webrtc}/iceServerAsString.ts +1 -1
- package/src/connection/websocket/AutoCertifierClientFacade.ts +91 -0
- package/src/connection/{WebSocket/ClientWebSocket.ts → websocket/ClientWebsocket.ts} +22 -17
- package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +23 -27
- package/src/connection/websocket/WebsocketConnector.ts +328 -0
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
- package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +8 -14
- package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
- package/src/dht/DhtNode.ts +166 -193
- package/src/dht/DhtNodeRpcLocal.ts +68 -0
- package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +17 -18
- package/src/dht/ExternalApiRpcLocal.ts +46 -0
- package/src/dht/ExternalApiRpcRemote.ts +4 -4
- package/src/dht/contact/Remote.ts +32 -4
- package/src/dht/contact/SortedContactList.ts +4 -4
- package/src/dht/discovery/DiscoverySession.ts +25 -22
- package/src/dht/discovery/PeerDiscovery.ts +16 -19
- package/src/dht/find/FindRpcLocal.ts +35 -0
- package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +25 -25
- package/src/dht/find/FindSessionRpcLocal.ts +25 -0
- package/src/dht/find/{RemoteRecursiveFindSession.ts → FindSessionRpcRemote.ts} +9 -5
- package/src/dht/find/{RecursiveFinder.ts → Finder.ts} +77 -71
- package/src/dht/routing/FindRpcRemote.ts +40 -0
- package/src/dht/routing/Router.ts +78 -109
- package/src/dht/routing/RouterRpcLocal.ts +81 -0
- package/src/dht/routing/RouterRpcRemote.ts +18 -49
- package/src/dht/routing/RoutingSession.ts +58 -63
- package/src/dht/routing/getPreviousPeer.ts +6 -0
- package/src/dht/store/StoreRpcLocal.ts +46 -39
- package/src/dht/store/StoreRpcRemote.ts +8 -12
- package/src/exports.ts +11 -5
- package/src/helpers/Connectivity.ts +19 -0
- package/src/helpers/errors.ts +3 -3
- package/src/helpers/peerIdFromPeerDescriptor.ts +6 -0
- package/src/helpers/protoClasses.ts +6 -6
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +75 -59
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +26 -21
- package/src/proto/packages/dht/protos/DhtRpc.ts +112 -131
- package/src/rpc-protocol/DhtCallContext.ts +0 -1
- package/src/transport/ITransport.ts +5 -8
- package/src/transport/ListeningRpcCommunicator.ts +2 -1
- package/src/transport/RoutingRpcCommunicator.ts +3 -4
- package/src/types/ServiceID.ts +1 -0
- package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +7 -7
- package/test/benchmark/KademliaCorrectness.test.ts +3 -3
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +3 -3
- package/test/end-to-end/Layer0-Layer1.test.ts +13 -5
- package/test/end-to-end/Layer0.test.ts +35 -17
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +28 -9
- package/test/end-to-end/{Layer0WebRTC-Layer1.test.ts → Layer0Webrtc-Layer1.test.ts} +1 -1
- package/test/end-to-end/{Layer0WebRTC.test.ts → Layer0Webrtc.test.ts} +14 -10
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -4
- package/test/end-to-end/{Layer1-Scale-WebRTC.test.ts → Layer1-Scale-Webrtc.test.ts} +2 -2
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +52 -0
- package/test/end-to-end/{WebSocketConnectionRequest.test.ts → WebsocketConnectionRequest.test.ts} +16 -8
- package/test/end-to-end/memory-leak.test.ts +85 -0
- package/test/integration/ConnectionLocking.test.ts +10 -7
- package/test/integration/ConnectionManager.test.ts +107 -30
- package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
- package/test/integration/DhtNodeExternalAPI.test.ts +10 -10
- package/test/integration/{RemoteDhtNode.test.ts → DhtNodeRpcRemote.test.ts} +10 -10
- package/test/integration/DhtRpc.test.ts +5 -5
- package/test/integration/{RecursiveFind.test.ts → Find.test.ts} +6 -9
- package/test/integration/Layer1-scale.test.ts +1 -1
- package/test/integration/MigrateData.test.ts +8 -7
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
- package/test/integration/MultipleEntryPointJoining.test.ts +8 -8
- package/test/integration/RouteMessage.test.ts +26 -26
- package/test/integration/RpcErrors.test.ts +10 -10
- package/test/integration/ScaleDownDht.test.ts +6 -6
- package/test/integration/SimultaneousConnections.test.ts +10 -7
- package/test/integration/Store.test.ts +4 -7
- package/test/integration/StoreAndDelete.test.ts +4 -7
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
- package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +5 -5
- package/test/integration/{WebRtcConnectorRpc.test.ts → WebrtcConnectorRpc.test.ts} +7 -8
- package/test/integration/{WebSocket.test.ts → Websocket.test.ts} +14 -13
- package/test/integration/{WebSocketConnectionManagement.test.ts → WebsocketConnectionManagement.test.ts} +4 -4
- package/test/integration/{WebSocketConnectorRpc.test.ts → WebsocketConnectorRpc.test.ts} +15 -15
- package/test/unit/AutoCertifierClientFacade.test.ts +58 -0
- package/test/unit/ConnectivityHelpers.test.ts +69 -0
- package/test/unit/{RecursiveFinder.test.ts → Finder.test.ts} +19 -17
- package/test/unit/Router.test.ts +26 -26
- package/test/unit/UUID.test.ts +1 -1
- package/test/unit/{WebSocketConnectorRpcLocal.test.ts → WebsocketConnector.test.ts} +8 -8
- package/test/unit/{WebSocketServer.test.ts → WebsocketServer.test.ts} +20 -14
- package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +1 -1
- package/test/utils/FakeRpcCommunicator.ts +23 -0
- package/test/utils/mock/Transport.ts +1 -1
- package/test/utils/utils.ts +22 -26
- package/tsconfig.browser.json +1 -1
- package/tsconfig.jest.json +3 -2
- package/tsconfig.node.json +3 -2
- package/dist/src/connection/ManagedWebRtcConnection.d.ts +0 -7
- package/dist/src/connection/ManagedWebRtcConnection.js +0 -20
- package/dist/src/connection/ManagedWebRtcConnection.js.map +0 -1
- package/dist/src/connection/Simulator/SimulatorConnection.js.map +0 -1
- package/dist/src/connection/Simulator/SimulatorConnector.js.map +0 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js.map +0 -1
- package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +0 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +0 -1
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.d.ts +0 -51
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js +0 -249
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +0 -1
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +0 -1
- package/dist/src/connection/WebSocket/ClientWebSocket.js.map +0 -1
- package/dist/src/connection/WebSocket/ServerWebSocket.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.d.ts +0 -45
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js +0 -234
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketServer.js.map +0 -1
- package/dist/src/dht/RemoteDhtNode.js.map +0 -1
- package/dist/src/dht/find/RecursiveFindSession.js.map +0 -1
- package/dist/src/dht/find/RecursiveFinder.js.map +0 -1
- package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +0 -1
- package/dist/src/dht/registerExternalApiRpcMethods.d.ts +0 -2
- package/dist/src/dht/registerExternalApiRpcMethods.js +0 -32
- package/dist/src/dht/registerExternalApiRpcMethods.js.map +0 -1
- package/src/connection/WebRTC/WebRtcConnectorRpcLocal.ts +0 -335
- package/src/connection/WebSocket/WebSocketConnectorRpcLocal.ts +0 -295
- package/src/dht/registerExternalApiRpcMethods.ts +0 -44
- package/test/utils/mock/RecursiveFinder.ts +0 -19
- /package/dist/src/connection/{Simulator → simulator}/Simulator.d.ts +0 -0
- /package/dist/src/connection/{Simulator → simulator}/pings.d.ts +0 -0
- /package/dist/src/connection/{Simulator → simulator}/pings.js +0 -0
- /package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js +0 -0
- /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 {
|
|
8
|
+
import { ClientWebsocket } from './websocket/ClientWebsocket'
|
|
10
9
|
import { v4 } from 'uuid'
|
|
11
10
|
import { NatType } from './ConnectionManager'
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
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
|
|
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
|
|
25
|
+
private readonly websocketPort: number
|
|
28
26
|
private readonly tls: boolean
|
|
29
|
-
private
|
|
27
|
+
private host?: string
|
|
30
28
|
|
|
31
|
-
constructor(
|
|
32
|
-
this.
|
|
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
|
-
|
|
45
|
-
|
|
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 ${
|
|
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.
|
|
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(
|
|
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(
|
|
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
|
|
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:
|
|
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
|
-
|
|
142
|
+
const url = connectivityMethodToWebsocketUrl(wsServerInfo, 'connectivityProbe')
|
|
143
|
+
logger.trace(`Attempting Connectivity Check to ${url}`)
|
|
139
144
|
outgoingConnection = await this.connectAsync({
|
|
140
|
-
|
|
141
|
-
|
|
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(
|
|
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({
|
|
175
|
-
{
|
|
177
|
+
private async connectAsync({ url, selfSigned, timeoutMs = 1000, }:
|
|
178
|
+
{ url: string, selfSigned: boolean, timeoutMs?: number }
|
|
176
179
|
): Promise<IConnection> {
|
|
177
|
-
const socket = new
|
|
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 './
|
|
10
|
-
import { SimulatorConnector } from './
|
|
11
|
-
import { IceServer,
|
|
12
|
-
import {
|
|
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
|
-
|
|
16
|
+
getLocalPeerDescriptor: () => PeerDescriptor | undefined
|
|
17
17
|
start: (
|
|
18
|
-
|
|
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
|
-
|
|
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
|
|
47
|
-
private
|
|
48
|
-
private webrtcConnector?:
|
|
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
|
-
|
|
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
|
|
59
|
-
|
|
64
|
+
logger.trace(`Creating WebsocketConnectorRpcLocal`)
|
|
65
|
+
const webSocketConnectorConfig = {
|
|
60
66
|
transport: this.config.transport!,
|
|
61
|
-
// TODO should we use canConnect also for
|
|
67
|
+
// TODO should we use canConnect also for WebrtcConnector? (NET-1142)
|
|
62
68
|
canConnect: (peerDescriptor: PeerDescriptor) => canConnect(peerDescriptor),
|
|
63
|
-
|
|
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
|
-
|
|
71
|
-
|
|
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
|
-
},
|
|
82
|
-
await this.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.
|
|
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.
|
|
92
|
-
return this.
|
|
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
|
-
|
|
99
|
-
return this.
|
|
149
|
+
getLocalPeerDescriptor(): PeerDescriptor | undefined {
|
|
150
|
+
return this.localPeerDescriptor
|
|
100
151
|
}
|
|
101
152
|
|
|
102
153
|
async stop(): Promise<void> {
|
|
103
|
-
await this.
|
|
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
|
|
161
|
+
private readonly localPeerDescriptor: PeerDescriptor
|
|
111
162
|
private simulatorConnector?: SimulatorConnector
|
|
112
163
|
private simulator: Simulator
|
|
113
164
|
|
|
114
|
-
constructor(
|
|
115
|
-
this.
|
|
165
|
+
constructor(localPeerDescriptor: PeerDescriptor, simulator: Simulator) {
|
|
166
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
116
167
|
this.simulator = simulator
|
|
117
168
|
}
|
|
118
169
|
|
|
119
|
-
async start(
|
|
170
|
+
async start(onNewConnection: (connection: ManagedConnection) => boolean): Promise<void> {
|
|
120
171
|
logger.trace(`Creating SimulatorConnector`)
|
|
121
172
|
this.simulatorConnector = new SimulatorConnector(
|
|
122
|
-
this.
|
|
173
|
+
this.localPeerDescriptor,
|
|
123
174
|
this.simulator,
|
|
124
|
-
|
|
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
|
-
|
|
134
|
-
return this.
|
|
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: (
|
|
11
|
-
handshakeCompleted: (
|
|
12
|
-
handshakeFailed: (
|
|
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
|
|
18
|
+
private localPeerDescriptor: PeerDescriptor
|
|
19
19
|
private connection: IConnection
|
|
20
20
|
|
|
21
21
|
constructor(
|
|
22
|
-
|
|
22
|
+
localPeerDescriptor: PeerDescriptor,
|
|
23
23
|
connection: IConnection
|
|
24
24
|
) {
|
|
25
25
|
super()
|
|
26
|
-
this.
|
|
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
|
|
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.
|
|
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.
|
|
43
|
-
this.emit('handshakeFailed', handshake.
|
|
42
|
+
if (handshake.error !== undefined) {
|
|
43
|
+
this.emit('handshakeFailed', handshake.error)
|
|
44
44
|
} else {
|
|
45
|
-
this.emit('handshakeCompleted', handshake.
|
|
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
|
-
|
|
57
|
-
|
|
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?:
|
|
72
|
+
public sendHandshakeResponse(error?: HandshakeError): void {
|
|
73
73
|
const outgoingHandshakeResponse: HandshakeResponse = {
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
41
|
+
off(event: 'disconnected', listener: (gracefulLeave: boolean, code?: number, reason?: string) => void): void
|
|
43
42
|
|
|
44
43
|
send(data: Uint8Array): void
|
|
45
|
-
close(
|
|
44
|
+
close(gracefulLeave: boolean): Promise<void>
|
|
46
45
|
destroy(): void
|
|
47
46
|
}
|