@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.
- 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 +6 -6
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +5 -8
- package/dist/src/connection/ConnectionManager.js +77 -107
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.d.ts +7 -6
- package/dist/src/connection/ConnectivityChecker.js +23 -20
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +15 -12
- package/dist/src/connection/ConnectorFacade.js +61 -26
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +2 -2
- package/dist/src/connection/Handshaker.js +28 -28
- 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 +3 -4
- package/dist/src/connection/ManagedConnection.js +30 -30
- 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 +22 -22
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +2 -2
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +11 -11
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js.map +1 -1
- 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} +36 -36
- 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} +20 -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} +23 -27
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcLocal.d.ts → websocket/WebsocketConnector.d.ts} +23 -15
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcLocal.js → websocket/WebsocketConnector.js} +108 -102
- 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} +5 -10
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js.map → websocket/WebsocketConnectorRpcRemote.js.map} +1 -1
- 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 +119 -150
- 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} +17 -21
- 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 +8 -8
- 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 +5 -5
- 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} +18 -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} +51 -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 +48 -90
- 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 +15 -43
- 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 +25 -24
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.js +3 -7
- 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/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 +64 -84
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +64 -66
- 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 +5 -1
- package/dist/src/transport/ListeningRpcCommunicator.js +8 -2
- 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 +32 -35
- package/src/connection/ConnectionLockHandler.ts +19 -17
- package/src/connection/ConnectionLockRpcLocal.ts +74 -0
- package/src/connection/ConnectionLockRpcRemote.ts +7 -6
- package/src/connection/ConnectionManager.ts +59 -95
- package/src/connection/ConnectivityChecker.ts +30 -26
- package/src/connection/ConnectorFacade.ts +74 -34
- package/src/connection/Handshaker.ts +9 -9
- package/src/connection/IConnection.ts +5 -6
- package/src/connection/ManagedConnection.ts +21 -22
- package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +9 -9
- package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
- package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +23 -24
- package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +13 -13
- package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
- package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +12 -13
- package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
- package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +32 -33
- package/src/connection/webrtc/WebrtcConnector.ts +225 -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} +19 -17
- package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +21 -27
- package/src/connection/{WebSocket/WebSocketConnectorRpcLocal.ts → websocket/WebsocketConnector.ts} +110 -101
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
- package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +6 -12
- package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
- package/src/dht/DhtNode.ts +144 -179
- package/src/dht/DhtNodeRpcLocal.ts +68 -0
- package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +12 -13
- 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 +23 -20
- package/src/dht/discovery/PeerDiscovery.ts +14 -17
- package/src/dht/find/FindRpcLocal.ts +35 -0
- package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +26 -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} +78 -71
- package/src/dht/routing/FindRpcRemote.ts +40 -0
- package/src/dht/routing/Router.ts +70 -105
- package/src/dht/routing/RouterRpcLocal.ts +81 -0
- package/src/dht/routing/RouterRpcRemote.ts +15 -45
- package/src/dht/routing/RoutingSession.ts +56 -61
- package/src/dht/routing/getPreviousPeer.ts +6 -0
- package/src/dht/store/StoreRpcLocal.ts +44 -37
- package/src/dht/store/StoreRpcRemote.ts +4 -8
- package/src/exports.ts +11 -5
- package/src/helpers/Connectivity.ts +19 -0
- package/src/helpers/errors.ts +3 -3
- 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 +87 -114
- package/src/rpc-protocol/DhtCallContext.ts +0 -1
- package/src/transport/ITransport.ts +5 -8
- package/src/transport/ListeningRpcCommunicator.ts +14 -4
- package/src/transport/RoutingRpcCommunicator.ts +3 -4
- package/src/types/ServiceID.ts +1 -0
- package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +6 -6
- package/test/benchmark/KademliaCorrectness.test.ts +2 -2
- 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 +24 -6
- 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 +4 -4
- package/test/integration/ConnectionManager.test.ts +37 -28
- 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} +3 -3
- package/test/integration/Layer1-scale.test.ts +1 -1
- package/test/integration/MigrateData.test.ts +6 -5
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
- package/test/integration/MultipleEntryPointJoining.test.ts +6 -6
- package/test/integration/RouteMessage.test.ts +26 -26
- package/test/integration/RpcErrors.test.ts +10 -10
- package/test/integration/ScaleDownDht.test.ts +3 -3
- package/test/integration/SimultaneousConnections.test.ts +10 -7
- package/test/integration/Store.test.ts +1 -1
- package/test/integration/StoreAndDelete.test.ts +1 -1
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
- package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +4 -4
- 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 +14 -24
- 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/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.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/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
|
@@ -6,16 +6,16 @@ import {
|
|
|
6
6
|
import { ConnectionEvents, IConnection } from './IConnection'
|
|
7
7
|
import { Logger, runAndRaceEvents3, RunAndRaceEventsReturnType } from '@streamr/utils'
|
|
8
8
|
import * as Err from '../helpers/errors'
|
|
9
|
-
import {
|
|
9
|
+
import { ClientWebsocket } from './websocket/ClientWebsocket'
|
|
10
10
|
import { v4 } from 'uuid'
|
|
11
11
|
import { NatType } from './ConnectionManager'
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { ServerWebsocket } from './websocket/ServerWebsocket'
|
|
13
|
+
import { connectivityMethodToWebsocketUrl } from './websocket/WebsocketConnector'
|
|
14
14
|
|
|
15
15
|
const logger = new Logger(module)
|
|
16
16
|
|
|
17
17
|
// Class for handling both client and server side of the connectivity
|
|
18
|
-
// checks. This is attached to all
|
|
18
|
+
// checks. This is attached to all ServerWebsockets to listen to
|
|
19
19
|
// ConnectivityRequest messages.
|
|
20
20
|
|
|
21
21
|
export enum ConnectionMode { REQUEST = 'connectivityRequest', PROBE = 'connectivityProbe' }
|
|
@@ -24,17 +24,17 @@ export class ConnectivityChecker {
|
|
|
24
24
|
private static readonly CONNECTIVITY_CHECKER_SERVICE_ID = 'system/connectivity-checker'
|
|
25
25
|
private static readonly CONNECTIVITY_CHECKER_TIMEOUT = 5000
|
|
26
26
|
private destroyed = false
|
|
27
|
-
private readonly
|
|
27
|
+
private readonly websocketPort: number
|
|
28
28
|
private readonly tls: boolean
|
|
29
|
-
private
|
|
29
|
+
private host?: string
|
|
30
30
|
|
|
31
|
-
constructor(
|
|
32
|
-
this.
|
|
31
|
+
constructor(websocketPort: number, tls: boolean, host?: string) {
|
|
32
|
+
this.websocketPort = websocketPort
|
|
33
33
|
this.tls = tls
|
|
34
34
|
this.host = host
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
public async sendConnectivityRequest(entryPoint: PeerDescriptor): Promise<ConnectivityResponse> {
|
|
37
|
+
public async sendConnectivityRequest(entryPoint: PeerDescriptor, selfSigned: boolean): Promise<ConnectivityResponse> {
|
|
38
38
|
if (this.destroyed) {
|
|
39
39
|
throw new Err.ConnectionFailed('ConnectivityChecker is destroyed')
|
|
40
40
|
}
|
|
@@ -46,13 +46,14 @@ export class ConnectivityChecker {
|
|
|
46
46
|
port: entryPoint.websocket!.port,
|
|
47
47
|
tls: entryPoint.websocket!.tls,
|
|
48
48
|
},
|
|
49
|
-
mode: ConnectionMode.REQUEST
|
|
49
|
+
mode: ConnectionMode.REQUEST,
|
|
50
|
+
selfSigned
|
|
50
51
|
})
|
|
51
52
|
} catch (e) {
|
|
52
|
-
throw new Err.ConnectionFailed(`Failed to connect to the entrypoint ${
|
|
53
|
+
throw new Err.ConnectionFailed(`Failed to connect to the entrypoint ${connectivityMethodToWebsocketUrl(entryPoint.websocket!)}`, e)
|
|
53
54
|
}
|
|
54
55
|
// send connectivity request
|
|
55
|
-
const connectivityRequestMessage: ConnectivityRequest = { port: this.
|
|
56
|
+
const connectivityRequestMessage: ConnectivityRequest = { port: this.websocketPort, host: this.host, tls: this.tls, selfSigned }
|
|
56
57
|
const msg: Message = {
|
|
57
58
|
serviceId: ConnectivityChecker.CONNECTIVITY_CHECKER_SERVICE_ID,
|
|
58
59
|
messageType: MessageType.CONNECTIVITY_REQUEST, messageId: v4(),
|
|
@@ -64,11 +65,11 @@ export class ConnectivityChecker {
|
|
|
64
65
|
const responseAwaiter = () => {
|
|
65
66
|
return new Promise((resolve: (res: ConnectivityResponse) => void, reject) => {
|
|
66
67
|
const timeoutId = setTimeout(() => {
|
|
67
|
-
outgoingConnection.close(
|
|
68
|
+
outgoingConnection.close(false)
|
|
68
69
|
reject(new Err.ConnectivityResponseTimeout('timeout'))
|
|
69
70
|
}, ConnectivityChecker.CONNECTIVITY_CHECKER_TIMEOUT)
|
|
70
71
|
const listener = (bytes: Uint8Array) => {
|
|
71
|
-
outgoingConnection.close(
|
|
72
|
+
outgoingConnection.close(false)
|
|
72
73
|
try {
|
|
73
74
|
const message: Message = Message.fromBinary(bytes)
|
|
74
75
|
if (message.body.oneofKind === 'connectivityResponse') {
|
|
@@ -98,7 +99,11 @@ export class ConnectivityChecker {
|
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
|
|
101
|
-
public
|
|
102
|
+
public setHost(hostName: string): void {
|
|
103
|
+
this.host = hostName
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public listenToIncomingConnectivityRequests(connectionToListenTo: ServerWebsocket): void {
|
|
102
107
|
connectionToListenTo.on('data', (data: Uint8Array) => {
|
|
103
108
|
logger.trace('server received data')
|
|
104
109
|
try {
|
|
@@ -120,7 +125,7 @@ export class ConnectivityChecker {
|
|
|
120
125
|
}
|
|
121
126
|
|
|
122
127
|
private async handleIncomingConnectivityRequest(
|
|
123
|
-
connection:
|
|
128
|
+
connection: ServerWebsocket,
|
|
124
129
|
connectivityRequest: ConnectivityRequest
|
|
125
130
|
): Promise<void> {
|
|
126
131
|
if (this.destroyed) {
|
|
@@ -135,24 +140,23 @@ export class ConnectivityChecker {
|
|
|
135
140
|
port: connectivityRequest.port,
|
|
136
141
|
tls: connectivityRequest.tls
|
|
137
142
|
}
|
|
138
|
-
logger.trace(`Attempting Connectivity Check to ${
|
|
143
|
+
logger.trace(`Attempting Connectivity Check to ${connectivityMethodToWebsocketUrl(wsServerInfo)}`)
|
|
139
144
|
outgoingConnection = await this.connectAsync({
|
|
140
145
|
wsServerInfo,
|
|
141
|
-
mode: ConnectionMode.PROBE
|
|
146
|
+
mode: ConnectionMode.PROBE,
|
|
147
|
+
selfSigned: connectivityRequest.selfSigned
|
|
142
148
|
})
|
|
143
149
|
} catch (err) {
|
|
144
150
|
logger.debug('error', { err })
|
|
145
151
|
connectivityResponseMessage = {
|
|
146
|
-
openInternet: false,
|
|
147
152
|
host,
|
|
148
153
|
natType: NatType.UNKNOWN
|
|
149
154
|
}
|
|
150
155
|
}
|
|
151
156
|
if (outgoingConnection) {
|
|
152
|
-
outgoingConnection.close(
|
|
157
|
+
outgoingConnection.close(false)
|
|
153
158
|
logger.trace('Connectivity test produced positive result, communicating reply to the requester ' + host + ':' + connectivityRequest.port)
|
|
154
159
|
connectivityResponseMessage = {
|
|
155
|
-
openInternet: true,
|
|
156
160
|
host,
|
|
157
161
|
natType: NatType.OPEN_INTERNET,
|
|
158
162
|
websocket: { host, port: connectivityRequest.port, tls: connectivityRequest.tls }
|
|
@@ -171,15 +175,15 @@ export class ConnectivityChecker {
|
|
|
171
175
|
}
|
|
172
176
|
|
|
173
177
|
// eslint-disable-next-line class-methods-use-this
|
|
174
|
-
private async connectAsync({ wsServerInfo, mode, timeoutMs = 1000, }:
|
|
175
|
-
{ wsServerInfo: ConnectivityMethod, mode: ConnectionMode, timeoutMs?: number }
|
|
178
|
+
private async connectAsync({ wsServerInfo, mode, selfSigned, timeoutMs = 1000, }:
|
|
179
|
+
{ wsServerInfo: ConnectivityMethod, mode: ConnectionMode, selfSigned: boolean, timeoutMs?: number }
|
|
176
180
|
): Promise<IConnection> {
|
|
177
|
-
const socket = new
|
|
178
|
-
const url = `${
|
|
181
|
+
const socket = new ClientWebsocket()
|
|
182
|
+
const url = `${connectivityMethodToWebsocketUrl(wsServerInfo)}?${mode}=true`
|
|
179
183
|
let result: RunAndRaceEventsReturnType<ConnectionEvents>
|
|
180
184
|
try {
|
|
181
185
|
result = await runAndRaceEvents3<ConnectionEvents>([
|
|
182
|
-
() => { socket.connect(url) }],
|
|
186
|
+
() => { socket.connect(url, selfSigned) }],
|
|
183
187
|
socket, ['connected', 'error'],
|
|
184
188
|
timeoutMs)
|
|
185
189
|
} 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 } 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
18
|
onIncomingConnection: (connection: ManagedConnection) => boolean,
|
|
19
|
-
canConnect: (peerDescriptor: PeerDescriptor) => 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,15 +39,18 @@ 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
|
|
@@ -53,22 +58,28 @@ export class DefaultConnectorFacade implements ConnectorFacade {
|
|
|
53
58
|
|
|
54
59
|
async start(
|
|
55
60
|
onIncomingConnection: (connection: ManagedConnection) => boolean,
|
|
56
|
-
canConnect: (peerDescriptor: PeerDescriptor) => 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
|
onIncomingConnection,
|
|
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,
|
|
@@ -79,47 +90,76 @@ export class DefaultConnectorFacade implements ConnectorFacade {
|
|
|
79
90
|
portRange: this.config.webrtcPortRange,
|
|
80
91
|
maxMessageSize: this.config.maxMessageSize
|
|
81
92
|
}, onIncomingConnection)
|
|
82
|
-
await this.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.
|
|
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
|
+
let localPeerDescriptor = this.config.createLocalPeerDescriptor(connectivityResponse)
|
|
101
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
102
|
+
this.websocketConnector.setLocalPeerDescriptor(localPeerDescriptor)
|
|
103
|
+
if (localPeerDescriptor.websocket && !this.config.tlsCertificate && this.config.websocketServerEnableTls) {
|
|
104
|
+
try {
|
|
105
|
+
await this.websocketConnector!.autoCertify()
|
|
106
|
+
const connectivityResponse = await this.websocketConnector!.checkConnectivity(false)
|
|
107
|
+
localPeerDescriptor = this.config.createLocalPeerDescriptor(connectivityResponse)
|
|
108
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
109
|
+
if (localPeerDescriptor.websocket === undefined) {
|
|
110
|
+
logger.warn('ConnectivityCheck failed after autocertification, websocket server connectivity disabled')
|
|
111
|
+
}
|
|
112
|
+
this.websocketConnector!.setLocalPeerDescriptor(localPeerDescriptor)
|
|
113
|
+
} catch (err) {
|
|
114
|
+
logger.warn('Failed to autocertify, disabling websocket server TLS')
|
|
115
|
+
await this.websocketConnector.destroy()
|
|
116
|
+
this.websocketConnector = new WebsocketConnector({
|
|
117
|
+
...webSocketConnectorConfig,
|
|
118
|
+
serverEnableTls: false,
|
|
119
|
+
})
|
|
120
|
+
await this.websocketConnector.start()
|
|
121
|
+
const connectivityResponse = await this.websocketConnector.checkConnectivity(false)
|
|
122
|
+
localPeerDescriptor = this.config.createLocalPeerDescriptor(connectivityResponse)
|
|
123
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
124
|
+
this.websocketConnector.setLocalPeerDescriptor(localPeerDescriptor)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
this.webrtcConnector.setLocalPeerDescriptor(localPeerDescriptor)
|
|
88
128
|
}
|
|
89
129
|
|
|
90
130
|
createConnection(peerDescriptor: PeerDescriptor): ManagedConnection {
|
|
91
|
-
if (this.
|
|
92
|
-
return this.
|
|
131
|
+
if (this.websocketConnector!.isPossibleToFormConnection(peerDescriptor)) {
|
|
132
|
+
return this.websocketConnector!.connect(peerDescriptor)
|
|
93
133
|
} else {
|
|
94
134
|
return this.webrtcConnector!.connect(peerDescriptor)
|
|
95
135
|
}
|
|
96
136
|
}
|
|
97
137
|
|
|
98
|
-
|
|
99
|
-
return this.
|
|
138
|
+
getLocalPeerDescriptor(): PeerDescriptor | undefined {
|
|
139
|
+
return this.localPeerDescriptor
|
|
100
140
|
}
|
|
101
141
|
|
|
102
142
|
async stop(): Promise<void> {
|
|
103
|
-
await this.
|
|
143
|
+
await this.websocketConnector!.destroy()
|
|
104
144
|
await this.webrtcConnector!.stop()
|
|
105
145
|
}
|
|
106
146
|
}
|
|
107
147
|
|
|
108
148
|
export class SimulatorConnectorFacade implements ConnectorFacade {
|
|
109
149
|
|
|
110
|
-
private readonly
|
|
150
|
+
private readonly localPeerDescriptor: PeerDescriptor
|
|
111
151
|
private simulatorConnector?: SimulatorConnector
|
|
112
152
|
private simulator: Simulator
|
|
113
153
|
|
|
114
|
-
constructor(
|
|
115
|
-
this.
|
|
154
|
+
constructor(localPeerDescriptor: PeerDescriptor, simulator: Simulator) {
|
|
155
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
116
156
|
this.simulator = simulator
|
|
117
157
|
}
|
|
118
158
|
|
|
119
159
|
async start(onIncomingConnection: (connection: ManagedConnection) => boolean): Promise<void> {
|
|
120
160
|
logger.trace(`Creating SimulatorConnector`)
|
|
121
161
|
this.simulatorConnector = new SimulatorConnector(
|
|
122
|
-
this.
|
|
162
|
+
this.localPeerDescriptor,
|
|
123
163
|
this.simulator,
|
|
124
164
|
onIncomingConnection
|
|
125
165
|
)
|
|
@@ -130,8 +170,8 @@ export class SimulatorConnectorFacade implements ConnectorFacade {
|
|
|
130
170
|
return this.simulatorConnector!.connect(peerDescriptor)
|
|
131
171
|
}
|
|
132
172
|
|
|
133
|
-
|
|
134
|
-
return this.
|
|
173
|
+
getLocalPeerDescriptor(): PeerDescriptor {
|
|
174
|
+
return this.localPeerDescriptor
|
|
135
175
|
}
|
|
136
176
|
|
|
137
177
|
async stop(): Promise<void> {
|
|
@@ -15,20 +15,20 @@ interface HandshakerEvents {
|
|
|
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') {
|
|
@@ -53,8 +53,8 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
|
|
|
53
53
|
|
|
54
54
|
public sendHandshakeRequest(): void {
|
|
55
55
|
const outgoingHandshake: HandshakeRequest = {
|
|
56
|
-
sourceId: this.
|
|
57
|
-
peerDescriptor: this.
|
|
56
|
+
sourceId: this.localPeerDescriptor.kademliaId,
|
|
57
|
+
peerDescriptor: this.localPeerDescriptor
|
|
58
58
|
}
|
|
59
59
|
const msg: Message = {
|
|
60
60
|
serviceId: Handshaker.HANDSHAKER_SERVICE_ID,
|
|
@@ -71,8 +71,8 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
|
|
|
71
71
|
|
|
72
72
|
public sendHandshakeResponse(error?: string): void {
|
|
73
73
|
const outgoingHandshakeResponse: HandshakeResponse = {
|
|
74
|
-
sourceId: this.
|
|
75
|
-
peerDescriptor: this.
|
|
74
|
+
sourceId: this.localPeerDescriptor.kademliaId,
|
|
75
|
+
peerDescriptor: this.localPeerDescriptor
|
|
76
76
|
}
|
|
77
77
|
if (error) {
|
|
78
78
|
outgoingHandshakeResponse.responseError = error
|
|
@@ -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
|
}
|
|
@@ -6,7 +6,6 @@ import { Logger, raceEvents3, runAndRaceEvents3, RunAndRaceEventsReturnType } fr
|
|
|
6
6
|
import EventEmitter from 'eventemitter3'
|
|
7
7
|
import { PeerIDKey } from '../helpers/PeerID'
|
|
8
8
|
import { keyFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
|
|
9
|
-
import { DisconnectionType } from '../transport/ITransport'
|
|
10
9
|
import { keyOrUnknownFromPeerDescriptor } from './ConnectionManager'
|
|
11
10
|
|
|
12
11
|
export interface ManagedConnectionEvents {
|
|
@@ -44,12 +43,12 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
44
43
|
private bufferSentbyOtherConnection = false
|
|
45
44
|
private closing = false
|
|
46
45
|
public replacedByOtherConnection = false
|
|
47
|
-
private
|
|
46
|
+
private localPeerDescriptor: PeerDescriptor
|
|
48
47
|
protected outgoingConnection?: IConnection
|
|
49
48
|
protected incomingConnection?: IConnection
|
|
50
49
|
|
|
51
50
|
constructor(
|
|
52
|
-
|
|
51
|
+
localPeerDescriptor: PeerDescriptor,
|
|
53
52
|
connectionType: ConnectionType,
|
|
54
53
|
outgoingConnection?: IConnection,
|
|
55
54
|
incomingConnection?: IConnection,
|
|
@@ -58,7 +57,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
58
57
|
|
|
59
58
|
this.send = this.send.bind(this)
|
|
60
59
|
|
|
61
|
-
this.
|
|
60
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
62
61
|
this.outgoingConnection = outgoingConnection
|
|
63
62
|
this.incomingConnection = incomingConnection
|
|
64
63
|
this.connectionType = connectionType
|
|
@@ -72,7 +71,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
72
71
|
}
|
|
73
72
|
|
|
74
73
|
if (outgoingConnection) {
|
|
75
|
-
this.handshaker = new Handshaker(this.
|
|
74
|
+
this.handshaker = new Handshaker(this.localPeerDescriptor, outgoingConnection)
|
|
76
75
|
|
|
77
76
|
this.handshaker.once('handshakeFailed', (errorMessage) => {
|
|
78
77
|
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' handshakeFailed: ' + errorMessage)
|
|
@@ -95,7 +94,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
95
94
|
|
|
96
95
|
} else {
|
|
97
96
|
if (incomingConnection) {
|
|
98
|
-
this.handshaker = new Handshaker(this.
|
|
97
|
+
this.handshaker = new Handshaker(this.localPeerDescriptor, incomingConnection)
|
|
99
98
|
this.handshaker.on('handshakeRequest', (peerDescriptor: PeerDescriptor) => {
|
|
100
99
|
this.setPeerDescriptor(peerDescriptor)
|
|
101
100
|
this.emit('handshakeRequest', peerDescriptor)
|
|
@@ -165,7 +164,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
165
164
|
return this.peerDescriptor
|
|
166
165
|
}
|
|
167
166
|
|
|
168
|
-
private onHandshakeCompleted
|
|
167
|
+
private onHandshakeCompleted(peerDescriptor: PeerDescriptor) {
|
|
169
168
|
this.lastUsed = Date.now()
|
|
170
169
|
|
|
171
170
|
this.setPeerDescriptor(peerDescriptor)
|
|
@@ -186,7 +185,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
186
185
|
|
|
187
186
|
impl.on('data', (bytes: Uint8Array) => {
|
|
188
187
|
this.lastUsed = Date.now()
|
|
189
|
-
if (this.listenerCount('managedData')
|
|
188
|
+
if (this.listenerCount('managedData') === 0) {
|
|
190
189
|
|
|
191
190
|
this.inputBuffer.push(bytes)
|
|
192
191
|
} else {
|
|
@@ -207,13 +206,13 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
207
206
|
impl.on('disconnected', this.onDisconnected)
|
|
208
207
|
}
|
|
209
208
|
|
|
210
|
-
private onDisconnected(
|
|
211
|
-
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' onDisconnected() ' +
|
|
209
|
+
private onDisconnected(gracefulLeave: boolean): void {
|
|
210
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' onDisconnected() ' + gracefulLeave)
|
|
212
211
|
if (this.bufferSentbyOtherConnection) {
|
|
213
212
|
return
|
|
214
213
|
}
|
|
215
214
|
this.emit('internal_disconnected')
|
|
216
|
-
this.doDisconnect(
|
|
215
|
+
this.doDisconnect(gracefulLeave)
|
|
217
216
|
}
|
|
218
217
|
|
|
219
218
|
async send(data: Uint8Array, doNotConnect = false): Promise<void> {
|
|
@@ -246,14 +245,14 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
246
245
|
|
|
247
246
|
if (result.winnerName === 'internal_disconnected') {
|
|
248
247
|
this.doNotEmitDisconnected = false
|
|
249
|
-
this.doDisconnect(
|
|
248
|
+
this.doDisconnect(false)
|
|
250
249
|
} else if (result.winnerName === 'handshakeFailed') {
|
|
251
250
|
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' handshakeFailed received')
|
|
252
251
|
|
|
253
252
|
if (this.bufferSentbyOtherConnection) {
|
|
254
253
|
logger.trace('bufferSentByOtherConnection already true')
|
|
255
254
|
this.doNotEmitDisconnected = false
|
|
256
|
-
this.doDisconnect(
|
|
255
|
+
this.doDisconnect(false)
|
|
257
256
|
} else {
|
|
258
257
|
let result2: RunAndRaceEventsReturnType<Events>
|
|
259
258
|
|
|
@@ -268,7 +267,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
268
267
|
if (result2.winnerName === 'bufferSentByOtherConnection') {
|
|
269
268
|
logger.trace('bufferSentByOtherConnection received')
|
|
270
269
|
this.doNotEmitDisconnected = false
|
|
271
|
-
this.doDisconnect(
|
|
270
|
+
this.doDisconnect(false)
|
|
272
271
|
} else if (result2.winnerName === 'closing') {
|
|
273
272
|
logger.trace('bufferSentByOtherConnection not received, instead received a closing event')
|
|
274
273
|
} else if (result2.winnerName === 'disconnected') {
|
|
@@ -305,7 +304,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
305
304
|
// This happens when connectionRequest has been made and answered
|
|
306
305
|
if (this.implementation) {
|
|
307
306
|
if (!this.handshaker) {
|
|
308
|
-
this.handshaker = new Handshaker(this.
|
|
307
|
+
this.handshaker = new Handshaker(this.localPeerDescriptor, this.implementation)
|
|
309
308
|
}
|
|
310
309
|
|
|
311
310
|
this.handshaker.sendHandshakeResponse()
|
|
@@ -322,18 +321,18 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
322
321
|
this.handshaker!.sendHandshakeResponse(errorMessage)
|
|
323
322
|
}
|
|
324
323
|
|
|
325
|
-
private doDisconnect(
|
|
324
|
+
private doDisconnect(gracefulLeave: boolean) {
|
|
326
325
|
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' doDisconnect() emitting')
|
|
327
326
|
|
|
328
327
|
if (!this.doNotEmitDisconnected) {
|
|
329
328
|
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' emitting disconnected')
|
|
330
|
-
this.emit('disconnected',
|
|
329
|
+
this.emit('disconnected', gracefulLeave)
|
|
331
330
|
} else {
|
|
332
331
|
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' not emitting disconnected because doNotEmitDisconnected flag is set')
|
|
333
332
|
}
|
|
334
333
|
}
|
|
335
334
|
|
|
336
|
-
public async close(
|
|
335
|
+
public async close(gracefulLeave: boolean): Promise<void> {
|
|
337
336
|
if (this.replacedByOtherConnection) {
|
|
338
337
|
logger.trace('close() called on replaced connection')
|
|
339
338
|
}
|
|
@@ -341,13 +340,13 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
341
340
|
this.emit('closing')
|
|
342
341
|
this.doNotEmitDisconnected = false
|
|
343
342
|
if (this.implementation) {
|
|
344
|
-
await this.implementation?.close(
|
|
343
|
+
await this.implementation?.close(gracefulLeave)
|
|
345
344
|
} else if (this.outgoingConnection) {
|
|
346
|
-
await this.outgoingConnection?.close(
|
|
345
|
+
await this.outgoingConnection?.close(gracefulLeave)
|
|
347
346
|
} else if (this.incomingConnection) {
|
|
348
|
-
await this.incomingConnection?.close(
|
|
347
|
+
await this.incomingConnection?.close(gracefulLeave)
|
|
349
348
|
} else {
|
|
350
|
-
this.doDisconnect(
|
|
349
|
+
this.doDisconnect(gracefulLeave)
|
|
351
350
|
}
|
|
352
351
|
}
|
|
353
352
|
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
|
|
2
2
|
import { ConnectionType } from './IConnection'
|
|
3
3
|
import { ManagedConnection } from './ManagedConnection'
|
|
4
|
-
import {
|
|
4
|
+
import { NodeWebrtcConnection } from './webrtc/NodeWebrtcConnection'
|
|
5
5
|
|
|
6
|
-
export class
|
|
6
|
+
export class ManagedWebrtcConnection extends ManagedConnection {
|
|
7
7
|
|
|
8
|
-
constructor(
|
|
9
|
-
connectingConnection?:
|
|
10
|
-
connectedConnection?:
|
|
8
|
+
constructor(localPeerDescriptor: PeerDescriptor,
|
|
9
|
+
connectingConnection?: NodeWebrtcConnection,
|
|
10
|
+
connectedConnection?: NodeWebrtcConnection) {
|
|
11
11
|
super(
|
|
12
|
-
|
|
12
|
+
localPeerDescriptor,
|
|
13
13
|
ConnectionType.WEBRTC,
|
|
14
14
|
connectingConnection,
|
|
15
15
|
connectedConnection)
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
public
|
|
18
|
+
public getWebrtcConnection(): NodeWebrtcConnection {
|
|
19
19
|
if (this.outgoingConnection) {
|
|
20
|
-
return this.outgoingConnection as unknown as
|
|
20
|
+
return this.outgoingConnection as unknown as NodeWebrtcConnection
|
|
21
21
|
} else {
|
|
22
|
-
return this.incomingConnection as unknown as
|
|
22
|
+
return this.incomingConnection as unknown as NodeWebrtcConnection
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -333,7 +333,7 @@ export class Simulator extends EventEmitter<ConnectionSourceEvents> {
|
|
|
333
333
|
const association = new Association(sourceConnection, undefined, connectedCallback)
|
|
334
334
|
this.associations.set(sourceConnection.connectionId, association)
|
|
335
335
|
|
|
336
|
-
const executionTime = this.generateExecutionTime(association, sourceConnection.
|
|
336
|
+
const executionTime = this.generateExecutionTime(association, sourceConnection.localPeerDescriptor.region, targetDescriptor.region)
|
|
337
337
|
association.setLastOperationAt(executionTime)
|
|
338
338
|
|
|
339
339
|
const operation = new ConnectOperation(executionTime, association,
|
|
@@ -356,7 +356,7 @@ export class Simulator extends EventEmitter<ConnectionSourceEvents> {
|
|
|
356
356
|
association.setClosing()
|
|
357
357
|
|
|
358
358
|
const executionTime = this.generateExecutionTime(association,
|
|
359
|
-
sourceConnection.
|
|
359
|
+
sourceConnection.localPeerDescriptor.region,
|
|
360
360
|
sourceConnection.getPeerDescriptor()?.region)
|
|
361
361
|
association.setLastOperationAt(executionTime)
|
|
362
362
|
|
|
@@ -382,8 +382,8 @@ export class Simulator extends EventEmitter<ConnectionSourceEvents> {
|
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
const executionTime = this.generateExecutionTime(association,
|
|
385
|
-
sourceConnection.
|
|
386
|
-
association.destinationConnection!.
|
|
385
|
+
sourceConnection.localPeerDescriptor.region,
|
|
386
|
+
association.destinationConnection!.localPeerDescriptor.region)
|
|
387
387
|
|
|
388
388
|
association.setLastOperationAt(executionTime)
|
|
389
389
|
|