@streamr/dht 100.0.0-pretestnet.2 → 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} +107 -101
- 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} +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 +47 -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 +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 +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} +109 -100
- 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} +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 +69 -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 +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} +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
package/src/dht/DhtNode.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DhtNodeRpcRemote } from './DhtNodeRpcRemote'
|
|
2
2
|
import KBucket from 'k-bucket'
|
|
3
3
|
import { EventEmitter } from 'eventemitter3'
|
|
4
4
|
import { SortedContactList } from './contact/SortedContactList'
|
|
5
5
|
import { RoutingRpcCommunicator } from '../transport/RoutingRpcCommunicator'
|
|
6
|
-
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
7
6
|
import { PeerID, PeerIDKey } from '../helpers/PeerID'
|
|
8
7
|
import {
|
|
9
8
|
ClosestPeersRequest,
|
|
@@ -16,10 +15,14 @@ import {
|
|
|
16
15
|
PingRequest,
|
|
17
16
|
PingResponse,
|
|
18
17
|
DataEntry,
|
|
18
|
+
ExternalFindDataRequest,
|
|
19
|
+
ExternalFindDataResponse,
|
|
20
|
+
ExternalStoreDataRequest,
|
|
21
|
+
ExternalStoreDataResponse,
|
|
19
22
|
} from '../proto/packages/dht/protos/DhtRpc'
|
|
20
|
-
import {
|
|
23
|
+
import { ITransport, TransportEvents } from '../transport/ITransport'
|
|
21
24
|
import { ConnectionManager, PortRange, TlsCertificate } from '../connection/ConnectionManager'
|
|
22
|
-
import {
|
|
25
|
+
import { DhtNodeRpcClient, ExternalApiRpcClient } from '../proto/packages/dht/protos/DhtRpc.client'
|
|
23
26
|
import {
|
|
24
27
|
Logger,
|
|
25
28
|
MetricsContext,
|
|
@@ -29,32 +32,28 @@ import {
|
|
|
29
32
|
} from '@streamr/utils'
|
|
30
33
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
31
34
|
import { RandomContactList } from './contact/RandomContactList'
|
|
32
|
-
import { Empty } from '../proto/google/protobuf/empty'
|
|
33
|
-
import { DhtCallContext } from '../rpc-protocol/DhtCallContext'
|
|
34
35
|
import { Any } from '../proto/google/protobuf/any'
|
|
35
36
|
import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
|
|
36
37
|
import { Router } from './routing/Router'
|
|
37
|
-
import {
|
|
38
|
+
import { Finder, FindResult } from './find/Finder'
|
|
38
39
|
import { StoreRpcLocal } from './store/StoreRpcLocal'
|
|
39
40
|
import { PeerDiscovery } from './discovery/PeerDiscovery'
|
|
40
41
|
import { LocalDataStore } from './store/LocalDataStore'
|
|
41
|
-
import { IceServer } from '../connection/
|
|
42
|
-
import { registerExternalApiRpcMethods } from './registerExternalApiRpcMethods'
|
|
42
|
+
import { IceServer } from '../connection/webrtc/WebrtcConnector'
|
|
43
43
|
import { ExternalApiRpcRemote } from './ExternalApiRpcRemote'
|
|
44
44
|
import { UUID } from '../helpers/UUID'
|
|
45
45
|
import { isBrowserEnvironment } from '../helpers/browser/isBrowserEnvironment'
|
|
46
46
|
import { sample } from 'lodash'
|
|
47
47
|
import { DefaultConnectorFacade, DefaultConnectorFacadeConfig } from '../connection/ConnectorFacade'
|
|
48
48
|
import { MarkRequired } from 'ts-essentials'
|
|
49
|
+
import { DhtNodeRpcLocal } from './DhtNodeRpcLocal'
|
|
50
|
+
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
51
|
+
import { ExternalApiRpcLocal } from './ExternalApiRpcLocal'
|
|
49
52
|
|
|
50
53
|
export interface DhtNodeEvents {
|
|
51
54
|
newContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
52
55
|
contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
53
56
|
joinCompleted: () => void
|
|
54
|
-
newKbucketContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
55
|
-
kbucketContactRemoved: (peerDescriptor: PeerDescriptor) => void
|
|
56
|
-
newOpenInternetContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
57
|
-
openInternetContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
58
57
|
newRandomContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
59
58
|
randomContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
60
59
|
}
|
|
@@ -78,6 +77,7 @@ export interface DhtNodeOptions {
|
|
|
78
77
|
entryPoints?: PeerDescriptor[]
|
|
79
78
|
websocketHost?: string
|
|
80
79
|
websocketPortRange?: PortRange
|
|
80
|
+
websocketServerEnableTls?: boolean
|
|
81
81
|
peerId?: string
|
|
82
82
|
|
|
83
83
|
rpcRequestTimeout?: number
|
|
@@ -91,6 +91,8 @@ export interface DhtNodeOptions {
|
|
|
91
91
|
maxConnections?: number
|
|
92
92
|
tlsCertificate?: TlsCertificate
|
|
93
93
|
externalIp?: string
|
|
94
|
+
autoCertifierUrl?: string
|
|
95
|
+
autoCertifierConfigFile?: string
|
|
94
96
|
}
|
|
95
97
|
|
|
96
98
|
type StrictDhtNodeOptions = MarkRequired<DhtNodeOptions,
|
|
@@ -124,7 +126,6 @@ export const createPeerDescriptor = (msg?: ConnectivityResponse, peerId?: string
|
|
|
124
126
|
const ret: PeerDescriptor = { kademliaId, type: nodeType }
|
|
125
127
|
if (msg && msg.websocket) {
|
|
126
128
|
ret.websocket = { host: msg.websocket.host, port: msg.websocket.port, tls: msg.websocket.tls }
|
|
127
|
-
ret.openInternet = true
|
|
128
129
|
}
|
|
129
130
|
return ret
|
|
130
131
|
}
|
|
@@ -132,18 +133,17 @@ export const createPeerDescriptor = (msg?: ConnectivityResponse, peerId?: string
|
|
|
132
133
|
export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
133
134
|
|
|
134
135
|
private readonly config: StrictDhtNodeOptions
|
|
135
|
-
private bucket?: KBucket<
|
|
136
|
-
private connections: Map<PeerIDKey,
|
|
137
|
-
private neighborList?: SortedContactList<
|
|
138
|
-
private
|
|
139
|
-
private randomPeers?: RandomContactList<RemoteDhtNode>
|
|
136
|
+
private bucket?: KBucket<DhtNodeRpcRemote>
|
|
137
|
+
private connections: Map<PeerIDKey, DhtNodeRpcRemote> = new Map()
|
|
138
|
+
private neighborList?: SortedContactList<DhtNodeRpcRemote>
|
|
139
|
+
private randomPeers?: RandomContactList<DhtNodeRpcRemote>
|
|
140
140
|
private rpcCommunicator?: RoutingRpcCommunicator
|
|
141
141
|
private transport?: ITransport
|
|
142
|
-
private
|
|
142
|
+
private localPeerDescriptor?: PeerDescriptor
|
|
143
143
|
public router?: Router
|
|
144
144
|
private storeRpcLocal?: StoreRpcLocal
|
|
145
145
|
private localDataStore = new LocalDataStore()
|
|
146
|
-
private
|
|
146
|
+
private finder?: Finder
|
|
147
147
|
private peerDiscovery?: PeerDiscovery
|
|
148
148
|
|
|
149
149
|
public connectionManager?: ConnectionManager
|
|
@@ -188,7 +188,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
188
188
|
// If transport is given, do not create a ConnectionManager
|
|
189
189
|
if (this.config.transport) {
|
|
190
190
|
this.transport = this.config.transport
|
|
191
|
-
this.
|
|
191
|
+
this.localPeerDescriptor = this.transport.getLocalPeerDescriptor()
|
|
192
192
|
if (this.config.transport instanceof ConnectionManager) {
|
|
193
193
|
this.connectionManager = this.config.transport
|
|
194
194
|
}
|
|
@@ -203,9 +203,12 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
203
203
|
webrtcNewConnectionTimeout: this.config.webrtcNewConnectionTimeout,
|
|
204
204
|
webrtcPortRange: this.config.webrtcPortRange,
|
|
205
205
|
maxMessageSize: this.config.maxMessageSize,
|
|
206
|
+
websocketServerEnableTls: this.config.websocketServerEnableTls,
|
|
206
207
|
tlsCertificate: this.config.tlsCertificate,
|
|
207
208
|
externalIp: this.config.externalIp,
|
|
208
|
-
|
|
209
|
+
autoCertifierUrl: this.config.autoCertifierUrl,
|
|
210
|
+
autoCertifierConfigFile: this.config.autoCertifierConfigFile,
|
|
211
|
+
createLocalPeerDescriptor: (connectivityResponse: ConnectivityResponse) => this.generatePeerDescriptorCallBack(connectivityResponse),
|
|
209
212
|
}
|
|
210
213
|
// If own PeerDescriptor is given in config, create a ConnectionManager with ws server
|
|
211
214
|
if (this.config.peerDescriptor?.websocket) {
|
|
@@ -238,38 +241,35 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
238
241
|
|
|
239
242
|
this.transport.on('message', (message: Message) => this.handleMessage(message))
|
|
240
243
|
|
|
241
|
-
this.
|
|
242
|
-
this.initKBuckets(peerIdFromPeerDescriptor(this.ownPeerDescriptor!))
|
|
244
|
+
this.initKBuckets(peerIdFromPeerDescriptor(this.localPeerDescriptor!))
|
|
243
245
|
this.peerDiscovery = new PeerDiscovery({
|
|
244
246
|
rpcCommunicator: this.rpcCommunicator,
|
|
245
|
-
|
|
247
|
+
localPeerDescriptor: this.localPeerDescriptor!,
|
|
246
248
|
bucket: this.bucket!,
|
|
247
|
-
connections: this.connections,
|
|
248
249
|
neighborList: this.neighborList!,
|
|
249
|
-
randomPeers: this.randomPeers!,
|
|
250
|
-
openInternetPeers: this.openInternetPeers!,
|
|
251
250
|
joinNoProgressLimit: this.config.joinNoProgressLimit,
|
|
252
251
|
peerDiscoveryQueryBatchSize: this.config.peerDiscoveryQueryBatchSize,
|
|
253
252
|
joinTimeout: this.config.dhtJoinTimeout,
|
|
254
253
|
serviceId: this.config.serviceId,
|
|
255
254
|
parallelism: this.config.joinParallelism,
|
|
256
255
|
addContact: this.addNewContact.bind(this),
|
|
257
|
-
connectionManager: this.connectionManager
|
|
256
|
+
connectionManager: this.connectionManager,
|
|
257
|
+
rpcRequestTimeout: this.config.rpcRequestTimeout
|
|
258
258
|
})
|
|
259
259
|
this.router = new Router({
|
|
260
260
|
rpcCommunicator: this.rpcCommunicator,
|
|
261
261
|
connections: this.connections,
|
|
262
|
-
|
|
262
|
+
localPeerDescriptor: this.localPeerDescriptor!,
|
|
263
263
|
addContact: this.addNewContact.bind(this),
|
|
264
264
|
serviceId: this.config.serviceId,
|
|
265
265
|
connectionManager: this.connectionManager
|
|
266
266
|
})
|
|
267
|
-
this.
|
|
267
|
+
this.finder = new Finder({
|
|
268
268
|
rpcCommunicator: this.rpcCommunicator,
|
|
269
269
|
router: this.router,
|
|
270
270
|
sessionTransport: this,
|
|
271
271
|
connections: this.connections,
|
|
272
|
-
|
|
272
|
+
localPeerDescriptor: this.localPeerDescriptor!,
|
|
273
273
|
serviceId: this.config.serviceId,
|
|
274
274
|
addContact: this.addNewContact.bind(this),
|
|
275
275
|
isPeerCloserToIdThanSelf: this.isPeerCloserToIdThanSelf.bind(this),
|
|
@@ -277,8 +277,8 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
277
277
|
})
|
|
278
278
|
this.storeRpcLocal = new StoreRpcLocal({
|
|
279
279
|
rpcCommunicator: this.rpcCommunicator,
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
finder: this.finder,
|
|
281
|
+
localPeerDescriptor: this.localPeerDescriptor!,
|
|
282
282
|
serviceId: this.config.serviceId,
|
|
283
283
|
highestTtl: this.config.storeHighestTtl,
|
|
284
284
|
maxTtl: this.config.storeMaxTtl,
|
|
@@ -287,93 +287,90 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
287
287
|
dhtNodeEmitter: this,
|
|
288
288
|
getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => {
|
|
289
289
|
return this.bucket!.closest(id, n)
|
|
290
|
-
}
|
|
290
|
+
},
|
|
291
|
+
rpcRequestTimeout: this.config.rpcRequestTimeout
|
|
291
292
|
})
|
|
292
|
-
|
|
293
|
+
this.bindRpcLocalMethods()
|
|
293
294
|
if (this.connectionManager! && this.config.entryPoints && this.config.entryPoints.length > 0
|
|
294
|
-
&& !areEqualPeerDescriptors(this.config.entryPoints[0], this.
|
|
295
|
+
&& !areEqualPeerDescriptors(this.config.entryPoints[0], this.localPeerDescriptor!)) {
|
|
295
296
|
this.connectToEntryPoint(this.config.entryPoints[0])
|
|
296
297
|
}
|
|
297
298
|
}
|
|
298
299
|
|
|
299
|
-
private initKBuckets
|
|
300
|
-
this.bucket = new KBucket<
|
|
300
|
+
private initKBuckets(selfId: PeerID) {
|
|
301
|
+
this.bucket = new KBucket<DhtNodeRpcRemote>({
|
|
301
302
|
localNodeId: selfId.value,
|
|
302
303
|
numberOfNodesPerKBucket: this.config.numberOfNodesPerKBucket,
|
|
303
304
|
numberOfNodesToPing: this.config.numberOfNodesPerKBucket
|
|
304
305
|
})
|
|
305
|
-
this.bucket.on('ping', (oldContacts:
|
|
306
|
-
this.bucket.on('removed', (contact:
|
|
307
|
-
this.bucket.on('added', (contact:
|
|
306
|
+
this.bucket.on('ping', (oldContacts: DhtNodeRpcRemote[], newContact: DhtNodeRpcRemote) => this.onKBucketPing(oldContacts, newContact))
|
|
307
|
+
this.bucket.on('removed', (contact: DhtNodeRpcRemote) => this.onKBucketRemoved(contact))
|
|
308
|
+
this.bucket.on('added', (contact: DhtNodeRpcRemote) => this.onKBucketAdded(contact))
|
|
308
309
|
this.bucket.on('updated', () => {
|
|
309
310
|
// TODO: Update contact info to the connection manager and reconnect
|
|
310
311
|
})
|
|
311
312
|
this.neighborList = new SortedContactList(selfId, this.config.maxNeighborListSize)
|
|
312
|
-
this.neighborList.on('contactRemoved', (removedContact:
|
|
313
|
+
this.neighborList.on('contactRemoved', (removedContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) => {
|
|
313
314
|
if (this.stopped) {
|
|
314
315
|
return
|
|
315
316
|
}
|
|
316
317
|
this.emit('contactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
317
318
|
this.randomPeers!.addContact(
|
|
318
|
-
new
|
|
319
|
-
this.
|
|
319
|
+
new DhtNodeRpcRemote(
|
|
320
|
+
this.localPeerDescriptor!,
|
|
320
321
|
removedContact.getPeerDescriptor(),
|
|
321
|
-
toProtoRpcClient(new
|
|
322
|
-
this.config.serviceId
|
|
322
|
+
toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
|
|
323
|
+
this.config.serviceId,
|
|
324
|
+
this.config.rpcRequestTimeout
|
|
323
325
|
)
|
|
324
326
|
)
|
|
325
327
|
})
|
|
326
|
-
this.neighborList.on('newContact', (newContact:
|
|
328
|
+
this.neighborList.on('newContact', (newContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) =>
|
|
327
329
|
this.emit('newContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
328
330
|
)
|
|
329
|
-
this.openInternetPeers = new SortedContactList(selfId, this.config.maxNeighborListSize / 2)
|
|
330
|
-
this.openInternetPeers.on('contactRemoved', (removedContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
|
|
331
|
-
this.emit('openInternetContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
332
|
-
)
|
|
333
|
-
this.openInternetPeers.on('newContact', (newContact: RemoteDhtNode, activeContacts: RemoteDhtNode[]) =>
|
|
334
|
-
this.emit('newOpenInternetContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
335
|
-
)
|
|
336
331
|
this.transport!.on('connected', (peerDescriptor: PeerDescriptor) => this.onTransportConnected(peerDescriptor))
|
|
337
332
|
|
|
338
|
-
this.transport!.on('disconnected', (peerDescriptor: PeerDescriptor,
|
|
339
|
-
this.onTransportDisconnected(peerDescriptor,
|
|
333
|
+
this.transport!.on('disconnected', (peerDescriptor: PeerDescriptor, gracefulLeave: boolean) => {
|
|
334
|
+
this.onTransportDisconnected(peerDescriptor, gracefulLeave)
|
|
340
335
|
})
|
|
341
336
|
|
|
342
337
|
this.transport!.getAllConnectionPeerDescriptors().forEach((peer) => {
|
|
343
|
-
const
|
|
344
|
-
this.
|
|
338
|
+
const rpcRemote = new DhtNodeRpcRemote(
|
|
339
|
+
this.localPeerDescriptor!,
|
|
345
340
|
peer,
|
|
346
|
-
toProtoRpcClient(new
|
|
347
|
-
this.config.serviceId
|
|
341
|
+
toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
|
|
342
|
+
this.config.serviceId,
|
|
343
|
+
this.config.rpcRequestTimeout
|
|
348
344
|
)
|
|
349
|
-
if (areEqualPeerDescriptors(peer, this.
|
|
345
|
+
if (areEqualPeerDescriptors(peer, this.localPeerDescriptor!)) {
|
|
350
346
|
logger.error('own peerdescriptor added to connections in initKBucket')
|
|
351
347
|
}
|
|
352
|
-
this.connections.set(keyFromPeerDescriptor(peer),
|
|
348
|
+
this.connections.set(keyFromPeerDescriptor(peer), rpcRemote)
|
|
353
349
|
})
|
|
354
350
|
this.randomPeers = new RandomContactList(selfId, this.config.maxNeighborListSize)
|
|
355
|
-
this.randomPeers.on('contactRemoved', (removedContact:
|
|
351
|
+
this.randomPeers.on('contactRemoved', (removedContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) =>
|
|
356
352
|
this.emit('randomContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
357
353
|
)
|
|
358
|
-
this.randomPeers.on('newContact', (newContact:
|
|
354
|
+
this.randomPeers.on('newContact', (newContact: DhtNodeRpcRemote, activeContacts: DhtNodeRpcRemote[]) =>
|
|
359
355
|
this.emit('newRandomContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
360
356
|
)
|
|
361
357
|
}
|
|
362
358
|
|
|
363
359
|
private onTransportConnected(peerDescriptor: PeerDescriptor): void {
|
|
364
360
|
|
|
365
|
-
if (areEqualPeerDescriptors(this.
|
|
361
|
+
if (areEqualPeerDescriptors(this.localPeerDescriptor!, peerDescriptor)) {
|
|
366
362
|
logger.error('onTransportConnected() to self')
|
|
367
363
|
}
|
|
368
364
|
|
|
369
|
-
const
|
|
370
|
-
this.
|
|
365
|
+
const rpcRemote = new DhtNodeRpcRemote(
|
|
366
|
+
this.localPeerDescriptor!,
|
|
371
367
|
peerDescriptor,
|
|
372
|
-
toProtoRpcClient(new
|
|
373
|
-
this.config.serviceId
|
|
368
|
+
toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
|
|
369
|
+
this.config.serviceId,
|
|
370
|
+
this.config.rpcRequestTimeout
|
|
374
371
|
)
|
|
375
|
-
if (!this.connections.has(PeerID.fromValue(
|
|
376
|
-
this.connections.set(PeerID.fromValue(
|
|
372
|
+
if (!this.connections.has(PeerID.fromValue(rpcRemote.id).toKey())) {
|
|
373
|
+
this.connections.set(PeerID.fromValue(rpcRemote.id).toKey(), rpcRemote)
|
|
377
374
|
logger.trace('connectionschange add ' + this.connections.size)
|
|
378
375
|
} else {
|
|
379
376
|
logger.trace('new connection not set to connections, there is already a connection with the peer ID')
|
|
@@ -382,40 +379,66 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
382
379
|
this.emit('connected', peerDescriptor)
|
|
383
380
|
}
|
|
384
381
|
|
|
385
|
-
private onTransportDisconnected(peerDescriptor: PeerDescriptor,
|
|
382
|
+
private onTransportDisconnected(peerDescriptor: PeerDescriptor, gracefulLeave: boolean): void {
|
|
386
383
|
logger.trace('disconnected: ' + keyFromPeerDescriptor(peerDescriptor))
|
|
387
384
|
this.connections.delete(keyFromPeerDescriptor(peerDescriptor))
|
|
388
385
|
// only remove from bucket if we are on layer 0
|
|
389
386
|
if (this.connectionManager) {
|
|
390
387
|
this.bucket!.remove(peerDescriptor.kademliaId)
|
|
391
388
|
|
|
392
|
-
if (
|
|
393
|
-
logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with
|
|
394
|
-
this.removeContact(peerDescriptor
|
|
389
|
+
if (gracefulLeave === true) {
|
|
390
|
+
logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
|
|
391
|
+
this.removeContact(peerDescriptor)
|
|
395
392
|
} else {
|
|
396
|
-
logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with
|
|
393
|
+
logger.trace(keyFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
|
|
397
394
|
}
|
|
398
395
|
}
|
|
399
396
|
|
|
400
|
-
this.emit('disconnected', peerDescriptor,
|
|
397
|
+
this.emit('disconnected', peerDescriptor, gracefulLeave)
|
|
401
398
|
}
|
|
402
399
|
|
|
403
|
-
private
|
|
400
|
+
private bindRpcLocalMethods(): void {
|
|
404
401
|
if (!this.started || this.stopped) {
|
|
405
402
|
return
|
|
406
403
|
}
|
|
407
|
-
|
|
404
|
+
const dhtNodeRpcLocal = new DhtNodeRpcLocal({
|
|
405
|
+
bucket: this.bucket!,
|
|
406
|
+
serviceId: this.config.serviceId,
|
|
407
|
+
peerDiscoveryQueryBatchSize: this.config.peerDiscoveryQueryBatchSize,
|
|
408
|
+
addNewContact: (contact: PeerDescriptor) => this.addNewContact(contact),
|
|
409
|
+
removeContact: (contact: PeerDescriptor) => this.removeContact(contact)
|
|
410
|
+
})
|
|
408
411
|
this.rpcCommunicator!.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers',
|
|
409
|
-
(req: ClosestPeersRequest, context) =>
|
|
412
|
+
(req: ClosestPeersRequest, context) => dhtNodeRpcLocal.getClosestPeers(req, context))
|
|
410
413
|
this.rpcCommunicator!.registerRpcMethod(PingRequest, PingResponse, 'ping',
|
|
411
|
-
(req: PingRequest, context) =>
|
|
414
|
+
(req: PingRequest, context) => dhtNodeRpcLocal.ping(req, context))
|
|
412
415
|
this.rpcCommunicator!.registerRpcNotification(LeaveNotice, 'leaveNotice',
|
|
413
|
-
(req: LeaveNotice, context) =>
|
|
416
|
+
(req: LeaveNotice, context) => dhtNodeRpcLocal.leaveNotice(req, context))
|
|
417
|
+
const externalApiRpcLocal = new ExternalApiRpcLocal({
|
|
418
|
+
startFind: (idToFind: Uint8Array, fetchData: boolean, excludedPeer: PeerDescriptor) => {
|
|
419
|
+
return this.startFind(idToFind, fetchData, excludedPeer)
|
|
420
|
+
},
|
|
421
|
+
storeDataToDht: (key: Uint8Array, data: Any) => this.storeDataToDht(key, data)
|
|
422
|
+
})
|
|
423
|
+
this.rpcCommunicator!.registerRpcMethod(
|
|
424
|
+
ExternalFindDataRequest,
|
|
425
|
+
ExternalFindDataResponse,
|
|
426
|
+
'externalFindData',
|
|
427
|
+
(req: ExternalFindDataRequest, context: ServerCallContext) => externalApiRpcLocal.externalFindData(req, context),
|
|
428
|
+
{ timeout: 10000 }
|
|
429
|
+
)
|
|
430
|
+
this.rpcCommunicator!.registerRpcMethod(
|
|
431
|
+
ExternalStoreDataRequest,
|
|
432
|
+
ExternalStoreDataResponse,
|
|
433
|
+
'externalStoreData',
|
|
434
|
+
(req: ExternalStoreDataRequest) => externalApiRpcLocal.externalStoreData(req),
|
|
435
|
+
{ timeout: 10000 }
|
|
436
|
+
)
|
|
414
437
|
}
|
|
415
438
|
|
|
416
439
|
private isPeerCloserToIdThanSelf(peer1: PeerDescriptor, compareToId: PeerID): boolean {
|
|
417
440
|
const distance1 = this.bucket!.distance(peer1.kademliaId, compareToId.value)
|
|
418
|
-
const distance2 = this.bucket!.distance(this.
|
|
441
|
+
const distance2 = this.bucket!.distance(this.localPeerDescriptor!.kademliaId, compareToId.value)
|
|
419
442
|
return distance1 < distance2
|
|
420
443
|
}
|
|
421
444
|
|
|
@@ -430,25 +453,20 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
430
453
|
}
|
|
431
454
|
}
|
|
432
455
|
|
|
433
|
-
private generatePeerDescriptorCallBack
|
|
456
|
+
private generatePeerDescriptorCallBack(connectivityResponse: ConnectivityResponse) {
|
|
434
457
|
if (this.config.peerDescriptor) {
|
|
435
|
-
this.
|
|
458
|
+
this.localPeerDescriptor = this.config.peerDescriptor
|
|
436
459
|
} else {
|
|
437
|
-
this.
|
|
460
|
+
this.localPeerDescriptor = createPeerDescriptor(connectivityResponse, this.config.peerId)
|
|
438
461
|
}
|
|
439
|
-
return this.
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
private getClosestPeerDescriptors(kademliaId: Uint8Array, limit: number): PeerDescriptor[] {
|
|
443
|
-
const closestPeers = this.bucket!.closest(kademliaId, limit)
|
|
444
|
-
return closestPeers.map((remoteDhtNode: RemoteDhtNode) => remoteDhtNode.getPeerDescriptor())
|
|
462
|
+
return this.localPeerDescriptor
|
|
445
463
|
}
|
|
446
464
|
|
|
447
|
-
private onKBucketPing(oldContacts:
|
|
465
|
+
private onKBucketPing(oldContacts: DhtNodeRpcRemote[], newContact: DhtNodeRpcRemote): void {
|
|
448
466
|
if (this.stopped) {
|
|
449
467
|
return
|
|
450
468
|
}
|
|
451
|
-
const sortingList: SortedContactList<
|
|
469
|
+
const sortingList: SortedContactList<DhtNodeRpcRemote> = new SortedContactList(this.getNodeId(), 100)
|
|
452
470
|
sortingList.addContacts(oldContacts)
|
|
453
471
|
const sortedContacts = sortingList.getAllContacts()
|
|
454
472
|
this.connectionManager?.weakUnlockConnection(sortedContacts[sortedContacts.length - 1].getPeerDescriptor())
|
|
@@ -456,16 +474,12 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
456
474
|
this.bucket!.add(newContact)
|
|
457
475
|
}
|
|
458
476
|
|
|
459
|
-
private onKBucketRemoved(contact:
|
|
477
|
+
private onKBucketRemoved(contact: DhtNodeRpcRemote): void {
|
|
460
478
|
if (this.stopped) {
|
|
461
479
|
return
|
|
462
480
|
}
|
|
463
481
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
|
|
464
482
|
logger.trace(`Removed contact ${keyFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
465
|
-
this.emit(
|
|
466
|
-
'kbucketContactRemoved',
|
|
467
|
-
contact.getPeerDescriptor()
|
|
468
|
-
)
|
|
469
483
|
if (this.bucket!.count() === 0
|
|
470
484
|
&& !this.peerDiscovery!.isJoinOngoing()
|
|
471
485
|
&& this.config.entryPoints
|
|
@@ -479,30 +493,20 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
479
493
|
}
|
|
480
494
|
}
|
|
481
495
|
|
|
482
|
-
private onKBucketAdded(contact:
|
|
496
|
+
private onKBucketAdded(contact: DhtNodeRpcRemote): void {
|
|
483
497
|
if (this.stopped) {
|
|
484
498
|
return
|
|
485
499
|
}
|
|
486
|
-
if (!
|
|
500
|
+
if (!contact.getPeerId().equals(this.getNodeId())) {
|
|
487
501
|
// Important to lock here, before the ping result is known
|
|
488
502
|
this.connectionManager?.weakLockConnection(contact.getPeerDescriptor())
|
|
489
503
|
if (this.connections.has(contact.getPeerId().toKey())) {
|
|
490
504
|
logger.trace(`Added new contact ${keyFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
491
|
-
this.emit(
|
|
492
|
-
'newKbucketContact',
|
|
493
|
-
contact.getPeerDescriptor(),
|
|
494
|
-
this.neighborList!.getClosestContacts(this.config.peerDiscoveryQueryBatchSize).map((peer) => peer.getPeerDescriptor())
|
|
495
|
-
)
|
|
496
505
|
} else { // open connection by pinging
|
|
497
506
|
logger.trace('starting ping ' + keyFromPeerDescriptor(contact.getPeerDescriptor()))
|
|
498
507
|
contact.ping().then((result) => {
|
|
499
508
|
if (result) {
|
|
500
509
|
logger.trace(`Added new contact ${keyFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
501
|
-
this.emit(
|
|
502
|
-
'newKbucketContact',
|
|
503
|
-
contact.getPeerDescriptor(),
|
|
504
|
-
this.neighborList!.getClosestContacts(this.config.peerDiscoveryQueryBatchSize).map((peer) => peer.getPeerDescriptor())
|
|
505
|
-
)
|
|
506
510
|
} else {
|
|
507
511
|
logger.trace('ping failed ' + keyFromPeerDescriptor(contact.getPeerDescriptor()))
|
|
508
512
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
|
|
@@ -529,7 +533,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
529
533
|
}
|
|
530
534
|
}
|
|
531
535
|
|
|
532
|
-
private getClosestActiveContactNotInBucket():
|
|
536
|
+
private getClosestActiveContactNotInBucket(): DhtNodeRpcRemote | undefined {
|
|
533
537
|
for (const contactId of this.neighborList!.getContactIds()) {
|
|
534
538
|
if (!this.bucket!.get(contactId.value) && this.neighborList!.isActive(contactId)) {
|
|
535
539
|
return this.neighborList!.getContact(contactId).contact
|
|
@@ -543,7 +547,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
543
547
|
}
|
|
544
548
|
|
|
545
549
|
public getNodeId(): PeerID {
|
|
546
|
-
return peerIdFromPeerDescriptor(this.
|
|
550
|
+
return peerIdFromPeerDescriptor(this.localPeerDescriptor!)
|
|
547
551
|
}
|
|
548
552
|
|
|
549
553
|
public getBucketSize(): number {
|
|
@@ -554,27 +558,24 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
554
558
|
if (!this.started || this.stopped) {
|
|
555
559
|
return
|
|
556
560
|
}
|
|
557
|
-
if (!areEqualPeerDescriptors(contact, this.
|
|
561
|
+
if (!areEqualPeerDescriptors(contact, this.localPeerDescriptor!)) {
|
|
558
562
|
logger.trace(`Adding new contact ${keyFromPeerDescriptor(contact)}`)
|
|
559
|
-
const
|
|
560
|
-
this.
|
|
563
|
+
const rpcRemote = new DhtNodeRpcRemote(
|
|
564
|
+
this.localPeerDescriptor!,
|
|
561
565
|
contact,
|
|
562
|
-
toProtoRpcClient(new
|
|
563
|
-
this.config.serviceId
|
|
566
|
+
toProtoRpcClient(new DhtNodeRpcClient(this.rpcCommunicator!.getRpcClientTransport())),
|
|
567
|
+
this.config.serviceId,
|
|
568
|
+
this.config.rpcRequestTimeout
|
|
564
569
|
)
|
|
565
570
|
if (!this.bucket!.get(contact.kademliaId) && !this.neighborList!.getContact(peerIdFromPeerDescriptor(contact))) {
|
|
566
|
-
this.neighborList!.addContact(
|
|
567
|
-
if (contact.openInternet) {
|
|
568
|
-
this.openInternetPeers!.addContact(remoteDhtNode)
|
|
569
|
-
}
|
|
571
|
+
this.neighborList!.addContact(rpcRemote)
|
|
570
572
|
if (setActive) {
|
|
571
573
|
const peerId = peerIdFromPeerDescriptor(contact)
|
|
572
574
|
this.neighborList!.setActive(peerId)
|
|
573
|
-
this.openInternetPeers!.setActive(peerId)
|
|
574
575
|
}
|
|
575
|
-
this.bucket!.add(
|
|
576
|
+
this.bucket!.add(rpcRemote)
|
|
576
577
|
} else {
|
|
577
|
-
this.randomPeers!.addContact(
|
|
578
|
+
this.randomPeers!.addContact(rpcRemote)
|
|
578
579
|
}
|
|
579
580
|
}
|
|
580
581
|
}
|
|
@@ -586,7 +587,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
586
587
|
}, 10 * 1000)
|
|
587
588
|
}
|
|
588
589
|
|
|
589
|
-
public removeContact(contact: PeerDescriptor
|
|
590
|
+
public removeContact(contact: PeerDescriptor): void {
|
|
590
591
|
if (!this.started || this.stopped) {
|
|
591
592
|
return
|
|
592
593
|
}
|
|
@@ -595,16 +596,13 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
595
596
|
this.bucket!.remove(peerId.value)
|
|
596
597
|
this.neighborList!.removeContact(peerId)
|
|
597
598
|
this.randomPeers!.removeContact(peerId)
|
|
598
|
-
if (removeFromOpenInternetPeers) {
|
|
599
|
-
this.openInternetPeers!.removeContact(peerId)
|
|
600
|
-
}
|
|
601
599
|
}
|
|
602
600
|
|
|
603
601
|
public async send(msg: Message): Promise<void> {
|
|
604
602
|
if (!this.started || this.stopped) {
|
|
605
603
|
return
|
|
606
604
|
}
|
|
607
|
-
const reachableThrough = this.peerDiscovery!.isJoinOngoing() ? this.config.entryPoints
|
|
605
|
+
const reachableThrough = this.peerDiscovery!.isJoinOngoing() ? this.config.entryPoints ?? [] : []
|
|
608
606
|
await this.router!.send(msg, reachableThrough)
|
|
609
607
|
}
|
|
610
608
|
|
|
@@ -617,8 +615,8 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
617
615
|
))
|
|
618
616
|
}
|
|
619
617
|
|
|
620
|
-
public async
|
|
621
|
-
return this.
|
|
618
|
+
public async startFind(idToFind: Uint8Array, fetchData?: boolean, excludedPeer?: PeerDescriptor): Promise<FindResult> {
|
|
619
|
+
return this.finder!.startFind(idToFind, fetchData, excludedPeer)
|
|
622
620
|
}
|
|
623
621
|
|
|
624
622
|
public async storeDataToDht(key: Uint8Array, data: Any): Promise<PeerDescriptor[]> {
|
|
@@ -630,7 +628,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
630
628
|
|
|
631
629
|
public async storeDataViaPeer(key: Uint8Array, data: Any, peer: PeerDescriptor): Promise<PeerDescriptor[]> {
|
|
632
630
|
const rpcRemote = new ExternalApiRpcRemote(
|
|
633
|
-
this.
|
|
631
|
+
this.localPeerDescriptor!,
|
|
634
632
|
peer,
|
|
635
633
|
this.config.serviceId,
|
|
636
634
|
toProtoRpcClient(new ExternalApiRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
|
|
@@ -642,7 +640,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
642
640
|
if (this.peerDiscovery!.isJoinOngoing() && this.config.entryPoints && this.config.entryPoints.length > 0) {
|
|
643
641
|
return this.findDataViaPeer(idToFind, sample(this.config.entryPoints)!)
|
|
644
642
|
}
|
|
645
|
-
const result = await this.
|
|
643
|
+
const result = await this.finder!.startFind(idToFind, true)
|
|
646
644
|
return result.dataEntries ?? []
|
|
647
645
|
}
|
|
648
646
|
|
|
@@ -654,24 +652,20 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
654
652
|
|
|
655
653
|
public async findDataViaPeer(idToFind: Uint8Array, peer: PeerDescriptor): Promise<DataEntry[]> {
|
|
656
654
|
const rpcRemote = new ExternalApiRpcRemote(
|
|
657
|
-
this.
|
|
655
|
+
this.localPeerDescriptor!,
|
|
658
656
|
peer,
|
|
659
657
|
this.config.serviceId,
|
|
660
658
|
toProtoRpcClient(new ExternalApiRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
|
|
661
659
|
)
|
|
662
|
-
return await rpcRemote.
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
public getRpcCommunicator(): RoutingRpcCommunicator {
|
|
666
|
-
return this.rpcCommunicator!
|
|
660
|
+
return await rpcRemote.externalFindData(idToFind)
|
|
667
661
|
}
|
|
668
662
|
|
|
669
663
|
public getTransport(): ITransport {
|
|
670
664
|
return this.transport!
|
|
671
665
|
}
|
|
672
666
|
|
|
673
|
-
public
|
|
674
|
-
return this.
|
|
667
|
+
public getLocalPeerDescriptor(): PeerDescriptor {
|
|
668
|
+
return this.localPeerDescriptor!
|
|
675
669
|
}
|
|
676
670
|
|
|
677
671
|
public getAllConnectionPeerDescriptors(): PeerDescriptor[] {
|
|
@@ -679,7 +673,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
679
673
|
}
|
|
680
674
|
|
|
681
675
|
public getKBucketPeers(): PeerDescriptor[] {
|
|
682
|
-
return this.bucket!.toArray().map((
|
|
676
|
+
return this.bucket!.toArray().map((rpcRemote: DhtNodeRpcRemote) => rpcRemote.getPeerDescriptor())
|
|
683
677
|
}
|
|
684
678
|
|
|
685
679
|
public getNumberOfConnections(): number {
|
|
@@ -716,15 +710,17 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
716
710
|
if (this.entryPointDisconnectTimeout) {
|
|
717
711
|
clearTimeout(this.entryPointDisconnectTimeout)
|
|
718
712
|
}
|
|
719
|
-
this.bucket!.toArray().forEach((
|
|
713
|
+
this.bucket!.toArray().forEach((rpcRemote: DhtNodeRpcRemote) => {
|
|
714
|
+
rpcRemote.leaveNotice()
|
|
715
|
+
this.bucket!.remove(rpcRemote.id)
|
|
716
|
+
})
|
|
720
717
|
this.bucket!.removeAllListeners()
|
|
721
718
|
this.localDataStore.clear()
|
|
722
719
|
this.neighborList!.stop()
|
|
723
720
|
this.randomPeers!.stop()
|
|
724
|
-
this.openInternetPeers!.stop()
|
|
725
721
|
this.rpcCommunicator!.stop()
|
|
726
722
|
this.router!.stop()
|
|
727
|
-
this.
|
|
723
|
+
this.finder!.stop()
|
|
728
724
|
this.peerDiscovery!.stop()
|
|
729
725
|
if (this.connectionManager) {
|
|
730
726
|
await this.connectionManager.stop()
|
|
@@ -734,35 +730,4 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
734
730
|
this.connections.clear()
|
|
735
731
|
this.removeAllListeners()
|
|
736
732
|
}
|
|
737
|
-
|
|
738
|
-
// IDHTRpcService implementation
|
|
739
|
-
private async getClosestPeers(request: ClosestPeersRequest, context: ServerCallContext): Promise<ClosestPeersResponse> {
|
|
740
|
-
this.addNewContact((context as DhtCallContext).incomingSourceDescriptor!)
|
|
741
|
-
const response = {
|
|
742
|
-
peers: this.getClosestPeerDescriptors(request.kademliaId, this.config.peerDiscoveryQueryBatchSize),
|
|
743
|
-
requestId: request.requestId
|
|
744
|
-
}
|
|
745
|
-
return response
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
// IDHTRpcService implementation
|
|
749
|
-
private async ping(request: PingRequest, context: ServerCallContext): Promise<PingResponse> {
|
|
750
|
-
logger.trace('received ping request: ' + keyFromPeerDescriptor((context as DhtCallContext).incomingSourceDescriptor!))
|
|
751
|
-
setImmediate(() => {
|
|
752
|
-
this.addNewContact((context as DhtCallContext).incomingSourceDescriptor!)
|
|
753
|
-
})
|
|
754
|
-
const response: PingResponse = {
|
|
755
|
-
requestId: request.requestId
|
|
756
|
-
}
|
|
757
|
-
return response
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
// IDHTRpcService implementation
|
|
761
|
-
private async leaveNotice(request: LeaveNotice, context: ServerCallContext): Promise<Empty> {
|
|
762
|
-
// TODO check signature??
|
|
763
|
-
if (request.serviceId === this.config.serviceId) {
|
|
764
|
-
this.removeContact((context as DhtCallContext).incomingSourceDescriptor!)
|
|
765
|
-
}
|
|
766
|
-
return {}
|
|
767
|
-
}
|
|
768
733
|
}
|