@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,16 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
|
|
2
2
|
import { SortedContactList } from '../contact/SortedContactList'
|
|
3
3
|
import { PeerID, PeerIDKey } from '../../helpers/PeerID'
|
|
4
|
-
import {
|
|
4
|
+
import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
5
5
|
import { Logger } from '@streamr/utils'
|
|
6
6
|
import EventEmitter from 'eventemitter3'
|
|
7
7
|
import { v4 } from 'uuid'
|
|
8
8
|
import { PeerDescriptor, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
9
9
|
import { RouterRpcRemote } from './RouterRpcRemote'
|
|
10
10
|
import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
|
|
11
|
-
import { RouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
11
|
+
import { FindRpcClient, RouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
12
12
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
13
13
|
import { Contact } from '../contact/Contact'
|
|
14
|
+
import { FindRpcRemote } from './FindRpcRemote'
|
|
15
|
+
import { EXISTING_CONNECTION_TIMEOUT } from '../contact/Remote'
|
|
16
|
+
import { getPreviousPeer } from './getPreviousPeer'
|
|
14
17
|
|
|
15
18
|
const logger = new Logger(module)
|
|
16
19
|
|
|
@@ -18,20 +21,33 @@ const MAX_FAILED_HOPS = 2
|
|
|
18
21
|
|
|
19
22
|
class RemoteContact extends Contact {
|
|
20
23
|
|
|
21
|
-
private
|
|
24
|
+
private routerRpcRemote: RouterRpcRemote
|
|
25
|
+
private findRpcRemote: FindRpcRemote
|
|
22
26
|
|
|
23
|
-
constructor(peer:
|
|
27
|
+
constructor(peer: DhtNodeRpcRemote, localPeerDescriptor: PeerDescriptor, rpcCommunicator: RoutingRpcCommunicator) {
|
|
24
28
|
super(peer.getPeerDescriptor())
|
|
25
|
-
this.
|
|
26
|
-
|
|
29
|
+
this.routerRpcRemote = new RouterRpcRemote(
|
|
30
|
+
localPeerDescriptor,
|
|
27
31
|
peer.getPeerDescriptor(),
|
|
28
32
|
peer.getServiceId(),
|
|
29
|
-
toProtoRpcClient(new RouterRpcClient(rpcCommunicator.getRpcClientTransport()))
|
|
33
|
+
toProtoRpcClient(new RouterRpcClient(rpcCommunicator.getRpcClientTransport())),
|
|
34
|
+
EXISTING_CONNECTION_TIMEOUT
|
|
30
35
|
)
|
|
36
|
+
this.findRpcRemote = new FindRpcRemote(
|
|
37
|
+
localPeerDescriptor,
|
|
38
|
+
peer.getPeerDescriptor(),
|
|
39
|
+
peer.getServiceId(),
|
|
40
|
+
toProtoRpcClient(new FindRpcClient(rpcCommunicator.getRpcClientTransport())),
|
|
41
|
+
EXISTING_CONNECTION_TIMEOUT
|
|
42
|
+
)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getRouterRpcRemote(): RouterRpcRemote {
|
|
46
|
+
return this.routerRpcRemote
|
|
31
47
|
}
|
|
32
48
|
|
|
33
|
-
|
|
34
|
-
return this.
|
|
49
|
+
getFindRpcRemote(): FindRpcRemote {
|
|
50
|
+
return this.findRpcRemote
|
|
35
51
|
}
|
|
36
52
|
}
|
|
37
53
|
|
|
@@ -45,10 +61,9 @@ export interface RoutingSessionEvents {
|
|
|
45
61
|
// through, and none of them responds with a success ack
|
|
46
62
|
routingFailed: (sessionId: string) => void
|
|
47
63
|
stopped: (sessionId: string) => void
|
|
48
|
-
noCandidatesFound: (sessionId: string) => void
|
|
49
64
|
}
|
|
50
65
|
|
|
51
|
-
export enum RoutingMode { ROUTE, FORWARD,
|
|
66
|
+
export enum RoutingMode { ROUTE, FORWARD, FIND }
|
|
52
67
|
|
|
53
68
|
export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
54
69
|
|
|
@@ -56,9 +71,9 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
56
71
|
private readonly rpcCommunicator: RoutingRpcCommunicator
|
|
57
72
|
private ongoingRequests: Set<PeerIDKey> = new Set()
|
|
58
73
|
private contactList: SortedContactList<RemoteContact>
|
|
59
|
-
private readonly
|
|
74
|
+
private readonly localPeerDescriptor: PeerDescriptor
|
|
60
75
|
private readonly messageToRoute: RouteMessageWrapper
|
|
61
|
-
private connections: Map<PeerIDKey,
|
|
76
|
+
private connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
62
77
|
private readonly parallelism: number
|
|
63
78
|
private failedHopCounter = 0
|
|
64
79
|
private successfulHopCounter = 0
|
|
@@ -67,24 +82,24 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
67
82
|
|
|
68
83
|
constructor(
|
|
69
84
|
rpcCommunicator: RoutingRpcCommunicator,
|
|
70
|
-
|
|
85
|
+
localPeerDescriptor: PeerDescriptor,
|
|
71
86
|
messageToRoute: RouteMessageWrapper,
|
|
72
|
-
connections: Map<PeerIDKey,
|
|
87
|
+
connections: Map<PeerIDKey, DhtNodeRpcRemote>,
|
|
73
88
|
parallelism: number,
|
|
74
89
|
mode: RoutingMode = RoutingMode.ROUTE,
|
|
75
|
-
destinationId?: Uint8Array,
|
|
76
90
|
excludedPeerIDs?: PeerID[]
|
|
77
91
|
) {
|
|
78
92
|
super()
|
|
79
93
|
this.rpcCommunicator = rpcCommunicator
|
|
80
|
-
this.
|
|
94
|
+
this.localPeerDescriptor = localPeerDescriptor
|
|
81
95
|
this.messageToRoute = messageToRoute
|
|
82
96
|
this.connections = connections
|
|
83
97
|
this.parallelism = parallelism
|
|
84
98
|
this.mode = mode
|
|
85
|
-
const
|
|
99
|
+
const previousPeer = getPreviousPeer(messageToRoute)
|
|
100
|
+
const previousId = previousPeer ? PeerID.fromValue(previousPeer.kademliaId) : undefined
|
|
86
101
|
this.contactList = new SortedContactList(
|
|
87
|
-
|
|
102
|
+
PeerID.fromValue(this.messageToRoute.destinationPeer!.kademliaId),
|
|
88
103
|
10000,
|
|
89
104
|
undefined,
|
|
90
105
|
true,
|
|
@@ -93,7 +108,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
93
108
|
)
|
|
94
109
|
}
|
|
95
110
|
|
|
96
|
-
private onRequestFailed
|
|
111
|
+
private onRequestFailed(peerId: PeerID) {
|
|
97
112
|
logger.trace('onRequestFailed() sessionId: ' + this.sessionId)
|
|
98
113
|
if (this.stopped) {
|
|
99
114
|
return
|
|
@@ -102,8 +117,9 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
102
117
|
this.ongoingRequests.delete(peerId.toKey())
|
|
103
118
|
}
|
|
104
119
|
const contacts = this.findMoreContacts()
|
|
105
|
-
if (contacts.length
|
|
120
|
+
if (contacts.length === 0 && this.ongoingRequests.size === 0) {
|
|
106
121
|
logger.trace('routing failed, emitting routingFailed sessionId: ' + this.sessionId)
|
|
122
|
+
// TODO should call this.stop() so that we do cleanup? (after the emitFailure call)
|
|
107
123
|
this.stopped = true
|
|
108
124
|
this.emitFailure()
|
|
109
125
|
} else {
|
|
@@ -113,69 +129,63 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
113
129
|
}
|
|
114
130
|
}
|
|
115
131
|
|
|
116
|
-
private emitFailure
|
|
132
|
+
private emitFailure() {
|
|
117
133
|
if (this.successfulHopCounter >= 1) {
|
|
118
134
|
this.emit('partialSuccess', this.sessionId)
|
|
119
|
-
|
|
120
135
|
} else {
|
|
121
136
|
this.emit('routingFailed', this.sessionId)
|
|
122
137
|
}
|
|
123
138
|
}
|
|
124
139
|
|
|
125
|
-
private onRequestSucceeded
|
|
140
|
+
private onRequestSucceeded() {
|
|
126
141
|
logger.trace('onRequestSucceeded() sessionId: ' + this.sessionId)
|
|
127
142
|
if (this.stopped) {
|
|
128
143
|
return
|
|
129
144
|
}
|
|
130
145
|
this.successfulHopCounter += 1
|
|
131
146
|
const contacts = this.findMoreContacts()
|
|
132
|
-
if (this.successfulHopCounter >= this.parallelism || contacts.length
|
|
147
|
+
if (this.successfulHopCounter >= this.parallelism || contacts.length === 0) {
|
|
148
|
+
// TODO should call this.stop() so that we do cleanup? (after the routingSucceeded call)
|
|
133
149
|
this.stopped = true
|
|
134
150
|
this.emit('routingSucceeded', this.sessionId)
|
|
135
|
-
} else if (contacts.length > 0 && this.ongoingRequests.size
|
|
151
|
+
} else if (contacts.length > 0 && this.ongoingRequests.size === 0) {
|
|
136
152
|
this.sendMoreRequests(contacts)
|
|
137
153
|
}
|
|
138
154
|
}
|
|
139
155
|
|
|
140
|
-
private
|
|
156
|
+
private async sendRouteMessageRequest(contact: RemoteContact): Promise<boolean> {
|
|
141
157
|
if (this.stopped) {
|
|
142
158
|
return false
|
|
143
159
|
}
|
|
144
|
-
const
|
|
160
|
+
const msg = {
|
|
161
|
+
...this.messageToRoute,
|
|
162
|
+
routingPath: this.messageToRoute.routingPath.concat([this.localPeerDescriptor])
|
|
163
|
+
}
|
|
145
164
|
if (this.mode === RoutingMode.FORWARD) {
|
|
146
|
-
return
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
})
|
|
150
|
-
} else if (this.mode === RoutingMode.RECURSIVE_FIND) {
|
|
151
|
-
return router.findRecursively({
|
|
152
|
-
...this.messageToRoute,
|
|
153
|
-
previousPeer: this.ownPeerDescriptor
|
|
154
|
-
})
|
|
165
|
+
return contact.getRouterRpcRemote().forwardMessage(msg)
|
|
166
|
+
} else if (this.mode === RoutingMode.FIND) {
|
|
167
|
+
return contact.getFindRpcRemote().routeFindRequest(msg)
|
|
155
168
|
} else {
|
|
156
|
-
return
|
|
157
|
-
...this.messageToRoute,
|
|
158
|
-
previousPeer: this.ownPeerDescriptor
|
|
159
|
-
})
|
|
169
|
+
return contact.getRouterRpcRemote().routeMessage(msg)
|
|
160
170
|
}
|
|
161
171
|
}
|
|
162
172
|
|
|
163
|
-
|
|
173
|
+
findMoreContacts(): RemoteContact[] {
|
|
164
174
|
logger.trace('findMoreContacts() sessionId: ' + this.sessionId)
|
|
165
175
|
// the contents of the connections might have changed between the rounds
|
|
166
176
|
// addContacts() will only add new contacts that were not there yet
|
|
167
177
|
const contacts = Array.from(this.connections.values())
|
|
168
|
-
.map((peer) => new RemoteContact(peer, this.
|
|
178
|
+
.map((peer) => new RemoteContact(peer, this.localPeerDescriptor, this.rpcCommunicator))
|
|
169
179
|
this.contactList.addContacts(contacts)
|
|
170
180
|
return this.contactList.getUncontactedContacts(this.parallelism)
|
|
171
181
|
}
|
|
172
182
|
|
|
173
|
-
|
|
183
|
+
sendMoreRequests(uncontacted: RemoteContact[]): void {
|
|
174
184
|
logger.trace('sendMoreRequests() sessionId: ' + this.sessionId)
|
|
175
185
|
if (this.stopped) {
|
|
176
186
|
return
|
|
177
187
|
}
|
|
178
|
-
if (uncontacted.length
|
|
188
|
+
if (uncontacted.length === 0) {
|
|
179
189
|
this.emitFailure()
|
|
180
190
|
return
|
|
181
191
|
}
|
|
@@ -184,10 +194,10 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
184
194
|
this.emitFailure()
|
|
185
195
|
return
|
|
186
196
|
}
|
|
187
|
-
while ((this.ongoingRequests.size
|
|
197
|
+
while ((this.ongoingRequests.size < this.parallelism) && (uncontacted.length > 0) && !this.stopped) {
|
|
188
198
|
const nextPeer = uncontacted.shift()
|
|
189
199
|
// eslint-disable-next-line max-len
|
|
190
|
-
logger.trace(`Sending routeMessage request to contact: ${
|
|
200
|
+
logger.trace(`Sending routeMessage request to contact: ${getNodeIdFromPeerDescriptor(nextPeer!.getPeerDescriptor())} (sessionId=${this.sessionId})`)
|
|
191
201
|
this.contactList.setContacted(nextPeer!.getPeerId())
|
|
192
202
|
this.ongoingRequests.add(nextPeer!.getPeerId().toKey())
|
|
193
203
|
setImmediate(async () => {
|
|
@@ -207,25 +217,10 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
207
217
|
}
|
|
208
218
|
}
|
|
209
219
|
|
|
210
|
-
public start(): void {
|
|
211
|
-
logger.trace('start() sessionId: ' + this.sessionId)
|
|
212
|
-
const contacts = this.findMoreContacts()
|
|
213
|
-
if (contacts.length < 1) {
|
|
214
|
-
logger.trace('start() throwing noCandidatesFound sessionId: ' + this.sessionId)
|
|
215
|
-
|
|
216
|
-
this.stopped = true
|
|
217
|
-
this.emit('noCandidatesFound', this.sessionId)
|
|
218
|
-
throw new Error('noCandidatesFound ' + this.sessionId)
|
|
219
|
-
}
|
|
220
|
-
this.sendMoreRequests(contacts)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
220
|
public stop(): void {
|
|
224
221
|
this.stopped = true
|
|
225
222
|
this.contactList.stop()
|
|
226
|
-
|
|
227
223
|
this.emit('stopped', this.sessionId)
|
|
228
224
|
this.removeAllListeners()
|
|
229
225
|
}
|
|
230
|
-
|
|
231
226
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { last } from 'lodash'
|
|
2
|
+
import { PeerDescriptor, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
3
|
+
|
|
4
|
+
export const getPreviousPeer = (routeMessage: RouteMessageWrapper): PeerDescriptor | undefined => {
|
|
5
|
+
return last(routeMessage.routingPath!)
|
|
6
|
+
}
|
|
@@ -9,8 +9,8 @@ import { DhtCallContext } from '../../rpc-protocol/DhtCallContext'
|
|
|
9
9
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
10
10
|
import { StoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
11
11
|
import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
|
|
12
|
-
import {
|
|
13
|
-
import { areEqualPeerDescriptors,
|
|
12
|
+
import { IFinder } from '../find/Finder'
|
|
13
|
+
import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
14
14
|
import { Logger } from '@streamr/utils'
|
|
15
15
|
import { LocalDataStore } from './LocalDataStore'
|
|
16
16
|
import { IStoreRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
|
|
@@ -20,19 +20,21 @@ import EventEmitter from 'eventemitter3'
|
|
|
20
20
|
import { Events } from '../DhtNode'
|
|
21
21
|
import { SortedContactList } from '../contact/SortedContactList'
|
|
22
22
|
import { Contact } from '../contact/Contact'
|
|
23
|
-
import {
|
|
23
|
+
import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
|
|
24
|
+
import { ServiceID } from '../../types/ServiceID'
|
|
24
25
|
|
|
25
26
|
interface DataStoreConfig {
|
|
26
27
|
rpcCommunicator: RoutingRpcCommunicator
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
finder: IFinder
|
|
29
|
+
localPeerDescriptor: PeerDescriptor
|
|
29
30
|
localDataStore: LocalDataStore
|
|
30
|
-
serviceId:
|
|
31
|
+
serviceId: ServiceID
|
|
31
32
|
maxTtl: number
|
|
32
33
|
highestTtl: number
|
|
33
34
|
redundancyFactor: number
|
|
34
35
|
dhtNodeEmitter: EventEmitter<Events>
|
|
35
|
-
getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) =>
|
|
36
|
+
getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtNodeRpcRemote[]
|
|
37
|
+
rpcRequestTimeout?: number
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
const logger = new Logger(module)
|
|
@@ -40,26 +42,28 @@ const logger = new Logger(module)
|
|
|
40
42
|
export class StoreRpcLocal implements IStoreRpc {
|
|
41
43
|
|
|
42
44
|
private readonly rpcCommunicator: RoutingRpcCommunicator
|
|
43
|
-
private readonly
|
|
44
|
-
private readonly
|
|
45
|
+
private readonly finder: IFinder
|
|
46
|
+
private readonly localPeerDescriptor: PeerDescriptor
|
|
45
47
|
private readonly localDataStore: LocalDataStore
|
|
46
|
-
private readonly serviceId:
|
|
48
|
+
private readonly serviceId: ServiceID
|
|
47
49
|
private readonly maxTtl: number
|
|
48
50
|
private readonly highestTtl: number
|
|
49
51
|
private readonly redundancyFactor: number
|
|
50
52
|
private readonly dhtNodeEmitter: EventEmitter<Events>
|
|
51
|
-
private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) =>
|
|
53
|
+
private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtNodeRpcRemote[]
|
|
54
|
+
private readonly rpcRequestTimeout?: number
|
|
52
55
|
|
|
53
56
|
constructor(config: DataStoreConfig) {
|
|
54
57
|
this.rpcCommunicator = config.rpcCommunicator
|
|
55
|
-
this.
|
|
56
|
-
this.
|
|
58
|
+
this.finder = config.finder
|
|
59
|
+
this.localPeerDescriptor = config.localPeerDescriptor
|
|
57
60
|
this.localDataStore = config.localDataStore
|
|
58
61
|
this.serviceId = config.serviceId
|
|
59
62
|
this.maxTtl = config.maxTtl
|
|
60
63
|
this.highestTtl = config.highestTtl
|
|
61
64
|
this.redundancyFactor = config.redundancyFactor
|
|
62
65
|
this.dhtNodeEmitter = config.dhtNodeEmitter
|
|
66
|
+
this.rpcRequestTimeout = config.rpcRequestTimeout
|
|
63
67
|
this.getNodesClosestToIdFromBucket = config.getNodesClosestToIdFromBucket
|
|
64
68
|
this.rpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData',
|
|
65
69
|
(request: StoreDataRequest, context: ServerCallContext) => this.storeData(request, context))
|
|
@@ -83,12 +87,12 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
83
87
|
|
|
84
88
|
const dataId = PeerID.fromValue(dataEntry.kademliaId)
|
|
85
89
|
const newNodeId = PeerID.fromValue(newNode.kademliaId)
|
|
86
|
-
const
|
|
90
|
+
const localPeerId = PeerID.fromValue(this.localPeerDescriptor.kademliaId)
|
|
87
91
|
|
|
88
92
|
const closestToData = this.getNodesClosestToIdFromBucket(dataEntry.kademliaId, 10)
|
|
89
93
|
|
|
90
94
|
const sortedList = new SortedContactList<Contact>(dataId, 20, undefined, true)
|
|
91
|
-
sortedList.addContact(new Contact(this.
|
|
95
|
+
sortedList.addContact(new Contact(this.localPeerDescriptor))
|
|
92
96
|
|
|
93
97
|
closestToData.forEach((con) => {
|
|
94
98
|
if (!newNodeId.equals(PeerID.fromValue(con.getPeerDescriptor().kademliaId))) {
|
|
@@ -96,7 +100,7 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
96
100
|
}
|
|
97
101
|
})
|
|
98
102
|
|
|
99
|
-
if (!sortedList.getAllContacts()[0].getPeerId().equals(
|
|
103
|
+
if (!sortedList.getAllContacts()[0].getPeerId().equals(localPeerId)) {
|
|
100
104
|
// If we are not the closes node to the data, do not migrate
|
|
101
105
|
return false
|
|
102
106
|
}
|
|
@@ -128,10 +132,11 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
128
132
|
|
|
129
133
|
private async migrateDataToContact(dataEntry: DataEntry, contact: PeerDescriptor, doNotConnect: boolean = false): Promise<void> {
|
|
130
134
|
const rpcRemote = new StoreRpcRemote(
|
|
131
|
-
this.
|
|
135
|
+
this.localPeerDescriptor,
|
|
132
136
|
contact,
|
|
133
137
|
this.serviceId,
|
|
134
|
-
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
|
|
138
|
+
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport())),
|
|
139
|
+
this.rpcRequestTimeout
|
|
135
140
|
)
|
|
136
141
|
try {
|
|
137
142
|
const response = await rpcRemote.migrateData({ dataEntry }, doNotConnect)
|
|
@@ -145,16 +150,16 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
145
150
|
|
|
146
151
|
public async storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]> {
|
|
147
152
|
logger.debug(`Storing data to DHT ${this.serviceId}`)
|
|
148
|
-
const result = await this.
|
|
153
|
+
const result = await this.finder.startFind(key)
|
|
149
154
|
const closestNodes = result.closestNodes
|
|
150
155
|
const successfulNodes: PeerDescriptor[] = []
|
|
151
156
|
const ttl = this.highestTtl // ToDo: make TTL decrease according to some nice curve
|
|
152
157
|
const storerTime = Timestamp.now()
|
|
153
158
|
for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
|
|
154
|
-
if (areEqualPeerDescriptors(this.
|
|
159
|
+
if (areEqualPeerDescriptors(this.localPeerDescriptor, closestNodes[i])) {
|
|
155
160
|
this.localDataStore.storeEntry({
|
|
156
161
|
kademliaId: key,
|
|
157
|
-
storer: this.
|
|
162
|
+
storer: this.localPeerDescriptor,
|
|
158
163
|
ttl,
|
|
159
164
|
storedAt: Timestamp.now(),
|
|
160
165
|
data,
|
|
@@ -166,10 +171,11 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
166
171
|
continue
|
|
167
172
|
}
|
|
168
173
|
const rpcRemote = new StoreRpcRemote(
|
|
169
|
-
this.
|
|
174
|
+
this.localPeerDescriptor,
|
|
170
175
|
closestNodes[i],
|
|
171
176
|
this.serviceId,
|
|
172
|
-
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
|
|
177
|
+
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport())),
|
|
178
|
+
this.rpcRequestTimeout
|
|
173
179
|
)
|
|
174
180
|
try {
|
|
175
181
|
const response = await rpcRemote.storeData({ kademliaId: key, data, ttl, storerTime })
|
|
@@ -187,37 +193,38 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
187
193
|
}
|
|
188
194
|
|
|
189
195
|
private selfIsOneOfClosestPeers(dataId: Uint8Array): boolean {
|
|
190
|
-
const
|
|
196
|
+
const localPeerId = PeerID.fromValue(this.localPeerDescriptor.kademliaId)
|
|
191
197
|
const closestPeers = this.getNodesClosestToIdFromBucket(dataId, this.redundancyFactor)
|
|
192
|
-
const sortedList = new SortedContactList<Contact>(
|
|
193
|
-
sortedList.addContact(new Contact(this.
|
|
198
|
+
const sortedList = new SortedContactList<Contact>(localPeerId, this.redundancyFactor, undefined, true)
|
|
199
|
+
sortedList.addContact(new Contact(this.localPeerDescriptor))
|
|
194
200
|
closestPeers.forEach((con) => sortedList.addContact(new Contact(con.getPeerDescriptor())))
|
|
195
|
-
return sortedList.getClosestContacts().some((node) => node.getPeerId().equals(
|
|
201
|
+
return sortedList.getClosestContacts().some((node) => node.getPeerId().equals(localPeerId))
|
|
196
202
|
}
|
|
197
203
|
|
|
198
204
|
public async deleteDataFromDht(key: Uint8Array): Promise<void> {
|
|
199
205
|
logger.debug(`Deleting data from DHT ${this.serviceId}`)
|
|
200
|
-
const result = await this.
|
|
206
|
+
const result = await this.finder.startFind(key)
|
|
201
207
|
const closestNodes = result.closestNodes
|
|
202
208
|
const successfulNodes: PeerDescriptor[] = []
|
|
203
209
|
for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
|
|
204
|
-
if (areEqualPeerDescriptors(this.
|
|
205
|
-
this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.
|
|
210
|
+
if (areEqualPeerDescriptors(this.localPeerDescriptor, closestNodes[i])) {
|
|
211
|
+
this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.localPeerDescriptor))
|
|
206
212
|
successfulNodes.push(closestNodes[i])
|
|
207
213
|
continue
|
|
208
214
|
}
|
|
209
215
|
const rpcRemote = new StoreRpcRemote(
|
|
210
|
-
this.
|
|
216
|
+
this.localPeerDescriptor,
|
|
211
217
|
closestNodes[i],
|
|
212
218
|
this.serviceId,
|
|
213
|
-
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
|
|
219
|
+
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport())),
|
|
220
|
+
this.rpcRequestTimeout
|
|
214
221
|
)
|
|
215
222
|
try {
|
|
216
223
|
const response = await rpcRemote.deleteData({ kademliaId: key })
|
|
217
224
|
if (response.deleted) {
|
|
218
225
|
logger.trace('remote.deleteData() returned success')
|
|
219
226
|
} else {
|
|
220
|
-
logger.trace('could not delete data from ' +
|
|
227
|
+
logger.trace('could not delete data from ' + getNodeIdFromPeerDescriptor(closestNodes[i]))
|
|
221
228
|
}
|
|
222
229
|
successfulNodes.push(closestNodes[i])
|
|
223
230
|
} catch (e) {
|
|
@@ -278,25 +285,25 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
278
285
|
private migrateDataToNeighborsIfNeeded(incomingPeer: PeerDescriptor, dataEntry: DataEntry): void {
|
|
279
286
|
|
|
280
287
|
// sort own contact list according to data id
|
|
281
|
-
const
|
|
288
|
+
const localPeerId = PeerID.fromValue(this.localPeerDescriptor.kademliaId)
|
|
282
289
|
const dataId = PeerID.fromValue(dataEntry.kademliaId)
|
|
283
290
|
const incomingPeerId = PeerID.fromValue(incomingPeer.kademliaId)
|
|
284
291
|
const closestToData = this.getNodesClosestToIdFromBucket(dataEntry.kademliaId, 10)
|
|
285
292
|
|
|
286
293
|
const sortedList = new SortedContactList<Contact>(dataId, this.redundancyFactor, undefined, true)
|
|
287
|
-
sortedList.addContact(new Contact(this.
|
|
294
|
+
sortedList.addContact(new Contact(this.localPeerDescriptor))
|
|
288
295
|
|
|
289
296
|
closestToData.forEach((con) => {
|
|
290
297
|
sortedList.addContact(new Contact(con.getPeerDescriptor()))
|
|
291
298
|
})
|
|
292
299
|
|
|
293
|
-
if (!sortedList.getAllContacts()[0].getPeerId().equals(
|
|
300
|
+
if (!sortedList.getAllContacts()[0].getPeerId().equals(localPeerId)) {
|
|
294
301
|
// If we are not the closest node to the data, migrate only to the
|
|
295
302
|
// closest one to the data
|
|
296
303
|
|
|
297
304
|
const contact = sortedList.getAllContacts()[0]
|
|
298
305
|
const contactPeerId = PeerID.fromValue(contact.getPeerDescriptor().kademliaId)
|
|
299
|
-
if (!incomingPeerId.equals(contactPeerId) && !
|
|
306
|
+
if (!incomingPeerId.equals(contactPeerId) && !localPeerId.equals(contactPeerId)) {
|
|
300
307
|
setImmediate(async () => {
|
|
301
308
|
try {
|
|
302
309
|
await this.migrateDataToContact(dataEntry, contact.getPeerDescriptor())
|
|
@@ -310,8 +317,8 @@ export class StoreRpcLocal implements IStoreRpc {
|
|
|
310
317
|
// if we are the closest to the data, migrate to all storageRedundancyFactor nearest
|
|
311
318
|
sortedList.getAllContacts().forEach((contact) => {
|
|
312
319
|
const contactPeerId = PeerID.fromValue(contact.getPeerDescriptor().kademliaId)
|
|
313
|
-
if (!incomingPeerId.equals(contactPeerId) && !
|
|
314
|
-
if (!incomingPeerId.equals(contactPeerId) && !
|
|
320
|
+
if (!incomingPeerId.equals(contactPeerId) && !localPeerId.equals(contactPeerId)) {
|
|
321
|
+
if (!incomingPeerId.equals(contactPeerId) && !localPeerId.equals(contactPeerId)) {
|
|
315
322
|
setImmediate(async () => {
|
|
316
323
|
try {
|
|
317
324
|
await this.migrateDataToContact(dataEntry, contact.getPeerDescriptor())
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Remote } from '../contact/Remote'
|
|
1
|
+
import { EXISTING_CONNECTION_TIMEOUT, Remote } from '../contact/Remote'
|
|
2
2
|
import { IStoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
3
3
|
import {
|
|
4
4
|
DeleteDataRequest,
|
|
@@ -8,19 +8,17 @@ import {
|
|
|
8
8
|
StoreDataRequest,
|
|
9
9
|
StoreDataResponse
|
|
10
10
|
} from '../../proto/packages/dht/protos/DhtRpc'
|
|
11
|
-
import {
|
|
11
|
+
import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
12
12
|
|
|
13
13
|
export class StoreRpcRemote extends Remote<IStoreRpcClient> {
|
|
14
14
|
|
|
15
15
|
async storeData(request: StoreDataRequest): Promise<StoreDataResponse> {
|
|
16
|
-
const options = this.formDhtRpcOptions(
|
|
17
|
-
timeout: 10000
|
|
18
|
-
})
|
|
16
|
+
const options = this.formDhtRpcOptions()
|
|
19
17
|
try {
|
|
20
18
|
return await this.getClient().storeData(request, options)
|
|
21
19
|
} catch (err) {
|
|
22
|
-
const to =
|
|
23
|
-
const from =
|
|
20
|
+
const to = getNodeIdFromPeerDescriptor(this.getPeerDescriptor())
|
|
21
|
+
const from = getNodeIdFromPeerDescriptor(this.getLocalPeerDescriptor())
|
|
24
22
|
throw Error(
|
|
25
23
|
`Could not store data to ${to} from ${from} ${err}`
|
|
26
24
|
)
|
|
@@ -28,21 +26,19 @@ export class StoreRpcRemote extends Remote<IStoreRpcClient> {
|
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
async deleteData(request: DeleteDataRequest): Promise<DeleteDataResponse> {
|
|
31
|
-
const options = this.formDhtRpcOptions(
|
|
32
|
-
timeout: 10000
|
|
33
|
-
})
|
|
29
|
+
const options = this.formDhtRpcOptions()
|
|
34
30
|
try {
|
|
35
31
|
return await this.getClient().deleteData(request, options)
|
|
36
32
|
} catch (err) {
|
|
37
33
|
throw Error(
|
|
38
|
-
`Could not call delete data to ${
|
|
34
|
+
`Could not call delete data to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} ${err}`
|
|
39
35
|
)
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
38
|
|
|
43
39
|
async migrateData(request: MigrateDataRequest, doNotConnect: boolean = false): Promise<MigrateDataResponse> {
|
|
44
40
|
const options = this.formDhtRpcOptions({
|
|
45
|
-
timeout:
|
|
41
|
+
timeout: EXISTING_CONNECTION_TIMEOUT,
|
|
46
42
|
doNotConnect
|
|
47
43
|
})
|
|
48
44
|
return this.getClient().migrateData(request, options)
|
package/src/exports.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
export { DhtNode, DhtNodeEvents, DhtNodeOptions } from './dht/DhtNode'
|
|
2
2
|
export { ListeningRpcCommunicator } from './transport/ListeningRpcCommunicator'
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
3
|
+
export { RoutingRpcCommunicator } from './transport/RoutingRpcCommunicator'
|
|
4
|
+
export { Simulator, LatencyType } from './connection/simulator/Simulator'
|
|
5
|
+
export { SimulatorTransport } from './connection/simulator/SimulatorTransport'
|
|
6
|
+
export { getRandomRegion, getRegionDelayMatrix } from './connection/simulator/pings'
|
|
6
7
|
export { PeerDescriptor, Message, NodeType, DataEntry } from './proto/packages/dht/protos/DhtRpc'
|
|
7
8
|
export { ITransport } from './transport/ITransport'
|
|
8
9
|
export { ConnectionManager, ConnectionLocker, PortRange, TlsCertificate } from './connection/ConnectionManager'
|
|
10
|
+
export { DefaultConnectorFacade } from './connection/ConnectorFacade'
|
|
9
11
|
export { DhtRpcOptions } from './rpc-protocol/DhtRpcOptions'
|
|
10
|
-
export { Remote } from './dht/contact/Remote'
|
|
12
|
+
export { Remote, EXISTING_CONNECTION_TIMEOUT } from './dht/contact/Remote'
|
|
11
13
|
export { areEqualPeerDescriptors } from './helpers/peerIdFromPeerDescriptor'
|
|
12
|
-
export { IceServer } from './connection/
|
|
14
|
+
export { IceServer } from './connection/webrtc/WebrtcConnector'
|
|
13
15
|
export { DhtCallContext } from './rpc-protocol/DhtCallContext'
|
|
16
|
+
export { ClientWebsocket } from './connection/websocket/ClientWebsocket'
|
|
17
|
+
export { ManagedConnection } from './connection/ManagedConnection'
|
|
18
|
+
export { ConnectionType } from './connection/IConnection'
|
|
19
|
+
export { PeerID } from './helpers/PeerID'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ConnectionType } from '../connection/IConnection'
|
|
2
|
+
import { ConnectivityMethod, NodeType, PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
|
|
3
|
+
import { isPrivateIPv4 } from './AddressTools'
|
|
4
|
+
|
|
5
|
+
export const canOpenConnectionFromBrowser = (websocketServer: ConnectivityMethod): boolean => {
|
|
6
|
+
const hasPrivateAddress = ((websocketServer.host === 'localhost') || isPrivateIPv4(websocketServer.host))
|
|
7
|
+
return websocketServer.tls || hasPrivateAddress
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const expectedConnectionType = (localPeerDescriptor: PeerDescriptor, remotePeerDescriptor: PeerDescriptor): ConnectionType => {
|
|
11
|
+
if (remotePeerDescriptor.websocket
|
|
12
|
+
&& (localPeerDescriptor.type !== NodeType.BROWSER || canOpenConnectionFromBrowser(remotePeerDescriptor.websocket))) {
|
|
13
|
+
return ConnectionType.WEBSOCKET_CLIENT
|
|
14
|
+
} else if (localPeerDescriptor.websocket
|
|
15
|
+
&& (remotePeerDescriptor.type !== NodeType.BROWSER || canOpenConnectionFromBrowser(localPeerDescriptor.websocket))) {
|
|
16
|
+
return ConnectionType.WEBSOCKET_SERVER
|
|
17
|
+
}
|
|
18
|
+
return ConnectionType.WEBRTC
|
|
19
|
+
}
|
package/src/helpers/errors.ts
CHANGED
|
@@ -33,13 +33,13 @@ class Err extends Error {
|
|
|
33
33
|
|
|
34
34
|
export class ConnectionFailed extends Err { constructor( message?: string, originalError?: Error | string) { super(ErrorCode.CONNECTION_FAILED, message, originalError) } }
|
|
35
35
|
export class CouldNotRoute extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.COULD_NOT_ROUTE, message, originalError) } }
|
|
36
|
-
export class
|
|
37
|
-
export class
|
|
36
|
+
export class WebsocketServerStartError extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.STARTING_WEBSOCKET_SERVER_FAILED, message, originalError) } }
|
|
37
|
+
export class WebsocketConnectionRequestRejected extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.WEBSOCKET_CONNECTION_REQUEST_REJECTED, message, originalError) } }
|
|
38
38
|
export class CouldNotStart extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.COULD_NOT_START, message, originalError) } }
|
|
39
39
|
export class CouldNotStop extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.COULD_NOT_STOP, message, originalError) } }
|
|
40
40
|
export class CannotConnectToSelf extends Err { constructor(message?: string, originalError?: Error | string) {super(ErrorCode.CANNOT_CONNECT_TO_SELF, message, originalError) } }
|
|
41
41
|
export class NotImplemented extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.NOT_IMPLEMENTED, message, originalError) } }
|
|
42
|
-
export class
|
|
42
|
+
export class IllegalRtcPeerConnectionState extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.ILLEGAL_RTC_PEER_CONNECTION_STATE, message, originalError) } }
|
|
43
43
|
export class IllegalArguments extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.ILLEGAL_ARGUMENTS, message, originalError) } }
|
|
44
44
|
export class ConnectivityResponseTimeout extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.CONNECTIVITY_RESPONSE_NOT_RECEIVED_BEFORE_TIMEOUT, message, originalError) } }
|
|
45
45
|
export class ConnectionLocker extends Err { constructor(message?: string, originalError?: Error | string) { super(ErrorCode.CONNECTION_LOCKER, message, originalError) } }
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { binaryToHex } from '@streamr/utils'
|
|
1
2
|
import { PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
|
|
2
3
|
import { PeerID, PeerIDKey } from './PeerID'
|
|
3
4
|
|
|
@@ -5,6 +6,11 @@ export const peerIdFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerID
|
|
|
5
6
|
return PeerID.fromValue(peerDescriptor.kademliaId)
|
|
6
7
|
}
|
|
7
8
|
|
|
9
|
+
// TODO could move getNodeIdFromPeerDescriptor (and NodeID) from trackerless-network
|
|
10
|
+
export const getNodeIdFromPeerDescriptor = (peerDescriptor: PeerDescriptor): string => {
|
|
11
|
+
return binaryToHex(peerDescriptor.kademliaId)
|
|
12
|
+
}
|
|
13
|
+
|
|
8
14
|
export const keyFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerIDKey => {
|
|
9
15
|
return PeerID.fromValue(peerDescriptor.kademliaId).toKey()
|
|
10
16
|
}
|