@streamr/dht 100.0.0-pretestnet.4 → 100.0.0-rc.0
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/README.md +90 -8
- package/dist/package.json +70 -0
- package/dist/src/connection/Connection.d.ts +1 -0
- package/dist/src/connection/Connection.js +10 -3
- package/dist/src/connection/Connection.js.map +1 -1
- package/dist/src/connection/ConnectionLockHandler.d.ts +14 -14
- package/dist/src/connection/ConnectionLockHandler.js +22 -16
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcLocal.d.ts +3 -3
- package/dist/src/connection/ConnectionLockRpcLocal.js +7 -6
- package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +4 -6
- package/dist/src/connection/ConnectionLockRpcRemote.js +10 -37
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +19 -20
- package/dist/src/connection/ConnectionManager.js +132 -117
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +3 -2
- package/dist/src/connection/ConnectorFacade.js +10 -3
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +3 -1
- package/dist/src/connection/Handshaker.js +18 -9
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/IConnection.d.ts +2 -7
- package/dist/src/connection/IConnection.js +1 -8
- package/dist/src/connection/IConnection.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +5 -7
- package/dist/src/connection/ManagedConnection.js +42 -26
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -1
- package/dist/src/connection/connectivityChecker.d.ts +9 -0
- package/dist/src/connection/connectivityChecker.js +130 -0
- package/dist/src/connection/connectivityChecker.js.map +1 -0
- package/dist/src/connection/connectivityRequestHandler.d.ts +3 -0
- package/dist/src/connection/connectivityRequestHandler.js +101 -0
- package/dist/src/connection/connectivityRequestHandler.js.map +1 -0
- package/dist/src/connection/simulator/Simulator.d.ts +0 -3
- package/dist/src/connection/simulator/Simulator.js +34 -69
- package/dist/src/connection/simulator/Simulator.js.map +1 -1
- package/dist/src/connection/simulator/SimulatorConnection.js +27 -25
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/simulator/SimulatorConnector.js +16 -12
- package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/simulator/pings.js.map +1 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.d.ts +2 -3
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js +40 -27
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.d.ts +0 -2
- package/dist/src/connection/webrtc/WebrtcConnector.js +24 -25
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +2 -2
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +27 -20
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +3 -6
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +2 -5
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/webrtc/iceServerAsString.js +1 -1
- package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
- package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +1 -2
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js +6 -4
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -1
- package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
- package/dist/src/connection/websocket/ClientWebsocket.js +14 -7
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +3 -9
- package/dist/src/connection/websocket/WebsocketConnector.js +142 -74
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +5 -3
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +9 -12
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +4 -7
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +7 -44
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketServer.d.ts +1 -4
- package/dist/src/connection/websocket/WebsocketServer.js +49 -40
- package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
- package/dist/src/connection/websocket/{ServerWebsocket.d.ts → WebsocketServerConnection.d.ts} +8 -4
- package/dist/src/connection/websocket/WebsocketServerConnection.js +97 -0
- package/dist/src/connection/websocket/WebsocketServerConnection.js.map +1 -0
- package/dist/src/dht/DhtNode.d.ts +45 -49
- package/dist/src/dht/DhtNode.js +229 -317
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +10 -9
- package/dist/src/dht/DhtNodeRpcLocal.js +19 -11
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcRemote.d.ts +15 -10
- package/dist/src/dht/DhtNodeRpcRemote.js +38 -21
- package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
- package/dist/src/dht/ExternalApiRpcLocal.d.ts +7 -6
- package/dist/src/dht/ExternalApiRpcLocal.js +9 -13
- package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
- package/dist/src/dht/ExternalApiRpcRemote.d.ts +6 -5
- package/dist/src/dht/ExternalApiRpcRemote.js +10 -7
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
- package/dist/src/dht/PeerManager.d.ts +61 -0
- package/dist/src/dht/PeerManager.js +288 -0
- package/dist/src/dht/PeerManager.js.map +1 -0
- package/dist/src/dht/contact/Contact.d.ts +2 -2
- package/dist/src/dht/contact/Contact.js +4 -3
- package/dist/src/dht/contact/Contact.js.map +1 -1
- package/dist/src/dht/contact/ContactList.d.ts +8 -8
- package/dist/src/dht/contact/ContactList.js +12 -7
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +4 -4
- package/dist/src/dht/contact/RandomContactList.js +13 -12
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/RingContactList.d.ts +31 -0
- package/dist/src/dht/contact/RingContactList.js +133 -0
- package/dist/src/dht/contact/RingContactList.js.map +1 -0
- package/dist/src/dht/contact/{Remote.d.ts → RpcRemote.d.ts} +8 -7
- package/dist/src/dht/contact/{Remote.js → RpcRemote.js} +16 -13
- package/dist/src/dht/contact/RpcRemote.js.map +1 -0
- package/dist/src/dht/contact/SortedContactList.d.ts +29 -15
- package/dist/src/dht/contact/SortedContactList.js +79 -42
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/contact/ringIdentifiers.d.ts +16 -0
- package/dist/src/dht/contact/ringIdentifiers.js +54 -0
- package/dist/src/dht/contact/ringIdentifiers.js.map +1 -0
- package/dist/src/dht/discovery/DiscoverySession.d.ts +8 -18
- package/dist/src/dht/discovery/DiscoverySession.js +32 -48
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +16 -12
- package/dist/src/dht/discovery/PeerDiscovery.js +82 -39
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/discovery/RingDiscoverySession.d.ts +29 -0
- package/dist/src/dht/discovery/RingDiscoverySession.js +123 -0
- package/dist/src/dht/discovery/RingDiscoverySession.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +36 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +166 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.d.ts +14 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js +26 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.d.ts +6 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js +44 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +44 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +187 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.d.ts +14 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js +20 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.d.ts +6 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js +21 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js.map +1 -0
- package/dist/src/dht/routing/DuplicateDetector.d.ts +2 -4
- package/dist/src/dht/routing/DuplicateDetector.js +10 -15
- package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +11 -27
- package/dist/src/dht/routing/Router.js +92 -58
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.d.ts +3 -4
- package/dist/src/dht/routing/RouterRpcLocal.js +17 -16
- package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcRemote.d.ts +3 -3
- package/dist/src/dht/routing/RouterRpcRemote.js +29 -20
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +29 -21
- package/dist/src/dht/routing/RoutingSession.js +93 -68
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/routing/RoutingTablesCache.d.ts +24 -0
- package/dist/src/dht/routing/RoutingTablesCache.js +46 -0
- package/dist/src/dht/routing/RoutingTablesCache.js.map +1 -0
- package/dist/src/dht/routing/getPreviousPeer.js.map +1 -1
- package/dist/src/dht/store/LocalDataStore.d.ts +9 -14
- package/dist/src/dht/store/LocalDataStore.js +46 -72
- package/dist/src/dht/store/LocalDataStore.js.map +1 -1
- package/dist/src/dht/store/StoreManager.d.ts +33 -0
- package/dist/src/dht/store/StoreManager.js +182 -0
- package/dist/src/dht/store/StoreManager.js.map +1 -0
- package/dist/src/dht/store/StoreRpcLocal.d.ts +11 -41
- package/dist/src/dht/store/StoreRpcLocal.js +27 -234
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.d.ts +6 -7
- package/dist/src/dht/store/StoreRpcRemote.js +10 -20
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
- package/dist/src/exports.d.ts +5 -3
- package/dist/src/exports.js +10 -8
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/AddressTools.js +2 -0
- package/dist/src/helpers/AddressTools.js.map +1 -1
- package/dist/src/helpers/Connectivity.js.map +1 -1
- package/dist/src/helpers/MapWithTtl.d.ts +14 -0
- package/dist/src/helpers/MapWithTtl.js +60 -0
- package/dist/src/helpers/MapWithTtl.js.map +1 -0
- package/dist/src/helpers/createPeerDescriptor.d.ts +3 -0
- package/dist/src/helpers/createPeerDescriptor.js +57 -0
- package/dist/src/helpers/createPeerDescriptor.js.map +1 -0
- package/dist/src/helpers/createPeerDescriptorSignaturePayload.d.ts +2 -0
- package/dist/src/helpers/createPeerDescriptorSignaturePayload.js +30 -0
- package/dist/src/helpers/createPeerDescriptorSignaturePayload.js.map +1 -0
- package/dist/src/helpers/debugHelpers.js.map +1 -1
- package/dist/src/helpers/errors.js +2 -0
- package/dist/src/helpers/errors.js.map +1 -1
- package/dist/src/helpers/offering.d.ts +4 -0
- package/dist/src/helpers/offering.js +18 -0
- package/dist/src/helpers/offering.js.map +1 -0
- package/dist/src/helpers/protoClasses.js +2 -3
- package/dist/src/helpers/protoClasses.js.map +1 -1
- package/dist/src/helpers/protoToString.js.map +1 -1
- package/dist/src/helpers/version.d.ts +6 -0
- package/dist/src/helpers/version.js +38 -0
- package/dist/src/helpers/version.js.map +1 -0
- package/dist/src/identifiers.d.ts +10 -0
- package/dist/src/identifiers.js +31 -0
- package/dist/src/identifiers.js.map +1 -0
- package/dist/src/proto/google/protobuf/any.js +8 -8
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.js +2 -4
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.js +10 -10
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +46 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +63 -54
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +226 -232
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +146 -168
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -29
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
- package/dist/src/rpc-protocol/DhtCallContext.d.ts +2 -2
- package/dist/src/rpc-protocol/DhtCallContext.js +8 -0
- package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
- package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +2 -1
- package/dist/src/transport/ITransport.d.ts +10 -2
- package/dist/src/transport/ITransport.js +5 -0
- package/dist/src/transport/ITransport.js.map +1 -1
- package/dist/src/transport/ListeningRpcCommunicator.js +3 -1
- package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
- package/dist/src/transport/RoutingRpcCommunicator.d.ts +4 -2
- package/dist/src/transport/RoutingRpcCommunicator.js +19 -12
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/jest.config.js +4 -1
- package/karma-setup.js +2 -0
- package/karma.config.js +13 -9
- package/package.json +16 -13
- package/protos/DhtRpc.proto +76 -76
- package/src/connection/Connection.ts +6 -1
- package/src/connection/ConnectionLockHandler.ts +30 -22
- package/src/connection/ConnectionLockRpcLocal.ts +7 -12
- package/src/connection/ConnectionLockRpcRemote.ts +9 -19
- package/src/connection/ConnectionManager.ts +132 -138
- package/src/connection/ConnectorFacade.ts +10 -9
- package/src/connection/Handshaker.ts +23 -11
- package/src/connection/IConnection.ts +2 -8
- package/src/connection/ManagedConnection.ts +34 -35
- package/src/connection/connectivityChecker.ts +109 -0
- package/src/connection/connectivityRequestHandler.ts +103 -0
- package/src/connection/simulator/Simulator.ts +6 -37
- package/src/connection/simulator/SimulatorConnection.ts +23 -25
- package/src/connection/simulator/SimulatorConnector.ts +11 -11
- package/src/connection/webrtc/BrowserWebrtcConnection.ts +17 -25
- package/src/connection/webrtc/NodeWebrtcConnection.ts +24 -26
- package/src/connection/webrtc/WebrtcConnector.ts +18 -29
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +29 -24
- package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +4 -14
- package/src/connection/webrtc/iceServerAsString.ts +1 -1
- package/src/connection/websocket/AutoCertifierClientFacade.ts +4 -6
- package/src/connection/websocket/ClientWebsocket.ts +10 -4
- package/src/connection/websocket/WebsocketConnector.ts +120 -97
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +13 -15
- package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +7 -27
- package/src/connection/websocket/WebsocketServer.ts +50 -53
- package/src/connection/websocket/WebsocketServerConnection.ts +104 -0
- package/src/dht/DhtNode.ts +289 -410
- package/src/dht/DhtNodeRpcLocal.ts +25 -17
- package/src/dht/DhtNodeRpcRemote.ts +43 -27
- package/src/dht/ExternalApiRpcLocal.ts +30 -17
- package/src/dht/ExternalApiRpcRemote.ts +14 -11
- package/src/dht/PeerManager.ts +339 -0
- package/src/dht/contact/Contact.ts +4 -4
- package/src/dht/contact/ContactList.ts +11 -10
- package/src/dht/contact/RandomContactList.ts +15 -15
- package/src/dht/contact/RingContactList.ts +151 -0
- package/src/dht/contact/{Remote.ts → RpcRemote.ts} +16 -19
- package/src/dht/contact/SortedContactList.ts +120 -72
- package/src/dht/contact/ringIdentifiers.ts +62 -0
- package/src/dht/discovery/DiscoverySession.ts +36 -61
- package/src/dht/discovery/PeerDiscovery.ts +98 -43
- package/src/dht/discovery/RingDiscoverySession.ts +160 -0
- package/src/dht/recursive-operation/RecursiveOperationManager.ts +246 -0
- package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +34 -0
- package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +43 -0
- package/src/dht/recursive-operation/RecursiveOperationSession.ts +232 -0
- package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +35 -0
- package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +30 -0
- package/src/dht/routing/DuplicateDetector.ts +9 -21
- package/src/dht/routing/Router.ts +95 -92
- package/src/dht/routing/RouterRpcLocal.ts +16 -18
- package/src/dht/routing/RouterRpcRemote.ts +26 -24
- package/src/dht/routing/RoutingSession.ts +119 -98
- package/src/dht/routing/RoutingTablesCache.ts +58 -0
- package/src/dht/routing/getPreviousPeer.ts +1 -1
- package/src/dht/store/LocalDataStore.ts +47 -77
- package/src/dht/store/StoreManager.ts +209 -0
- package/src/dht/store/StoreRpcLocal.ts +39 -308
- package/src/dht/store/StoreRpcRemote.ts +13 -31
- package/src/exports.ts +13 -3
- package/src/helpers/AddressTools.ts +2 -0
- package/src/helpers/MapWithTtl.ts +71 -0
- package/src/helpers/createPeerDescriptor.ts +57 -0
- package/src/helpers/createPeerDescriptorSignaturePayload.ts +28 -0
- package/src/helpers/offering.ts +15 -0
- package/src/helpers/protoClasses.ts +4 -6
- package/src/helpers/version.ts +32 -0
- package/src/identifiers.ts +29 -0
- package/src/proto/google/protobuf/any.ts +4 -4
- package/src/proto/google/protobuf/empty.ts +2 -4
- package/src/proto/google/protobuf/timestamp.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +65 -68
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +27 -30
- package/src/proto/packages/dht/protos/DhtRpc.ts +297 -313
- package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
- package/src/rpc-protocol/DhtCallContext.ts +2 -2
- package/src/rpc-protocol/DhtRpcOptions.ts +2 -1
- package/src/transport/ITransport.ts +11 -2
- package/src/transport/ListeningRpcCommunicator.ts +1 -1
- package/src/transport/RoutingRpcCommunicator.ts +21 -14
- package/test/RandomGraphSimulation.ts +3 -2
- package/test/benchmark/Find.test.ts +13 -28
- package/test/benchmark/KademliaCorrectness.test.ts +24 -28
- package/test/benchmark/RingCorrectness.test.ts +157 -0
- package/test/benchmark/SortedContactListBenchmark.test.ts +151 -0
- package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
- package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +72 -0
- package/test/benchmark/kademlia-simulation/Contact.ts +9 -9
- package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +11 -11
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +29 -25
- package/test/data/generateGroundTruthData.ts +7 -6
- package/test/end-to-end/Layer0-Layer1.test.ts +11 -15
- package/test/end-to-end/Layer0.test.ts +19 -22
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +19 -21
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +26 -28
- package/test/end-to-end/Layer0Webrtc.test.ts +19 -19
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +10 -18
- package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +8 -15
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +2 -2
- package/test/end-to-end/WebsocketConnectionRequest.test.ts +8 -9
- package/test/end-to-end/memory-leak.test.ts +19 -24
- package/test/integration/ConnectionLocking.test.ts +66 -60
- package/test/integration/ConnectionManager.test.ts +43 -63
- package/test/integration/ConnectivityChecking.test.ts +52 -0
- package/test/integration/DhtJoinPeerDiscovery.test.ts +8 -12
- package/test/integration/DhtNodeExternalAPI.test.ts +17 -21
- package/test/integration/DhtNodeRpcRemote.test.ts +19 -26
- package/test/integration/DhtRpc.test.ts +20 -24
- package/test/integration/Find.test.ts +10 -12
- package/test/integration/Layer1-scale.test.ts +25 -37
- package/test/integration/Mock-Layer1-Layer0.test.ts +39 -59
- package/test/integration/MultipleEntryPointJoining.test.ts +14 -14
- package/test/integration/ReplicateData.test.ts +106 -0
- package/test/integration/RouteMessage.test.ts +42 -68
- package/test/integration/RouterRpcRemote.test.ts +19 -24
- package/test/integration/ScaleDownDht.test.ts +14 -12
- package/test/integration/SimultaneousConnections.test.ts +112 -111
- package/test/integration/Store.test.ts +43 -27
- package/test/integration/StoreAndDelete.test.ts +36 -48
- package/test/integration/StoreOnDhtWithThreeNodes.test.ts +59 -0
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +17 -37
- package/test/integration/StoreRpcRemote.test.ts +20 -32
- package/test/integration/WebrtcConnectionManagement.test.ts +39 -25
- package/test/integration/WebrtcConnectorRpc.test.ts +6 -11
- package/test/integration/WebsocketConnectionManagement.test.ts +87 -22
- package/test/integration/WebsocketConnectorRpc.test.ts +14 -24
- package/test/integration/{RpcErrors.test.ts → rpc-connections-over-webrpc.test.ts} +15 -26
- package/test/unit/AddressTools.test.ts +4 -0
- package/test/unit/ConnectivityHelpers.test.ts +9 -17
- package/test/unit/DuplicateDetector.test.ts +8 -5
- package/test/unit/LocalDataStore.test.ts +78 -75
- package/test/unit/PeerManager.test.ts +33 -0
- package/test/unit/RandomContactList.test.ts +12 -9
- package/test/unit/RecursiveOperationManager.test.ts +157 -0
- package/test/unit/RecursiveOperationSession.test.ts +68 -0
- package/test/unit/Router.test.ts +52 -35
- package/test/unit/RoutingSession.test.ts +79 -0
- package/test/unit/SortedContactList.test.ts +61 -30
- package/test/unit/StoreManager.test.ts +138 -0
- package/test/unit/WebsocketConnector.test.ts +27 -35
- package/test/unit/connectivityRequestHandler.test.ts +104 -0
- package/test/unit/createPeerDescriptor.test.ts +69 -0
- package/test/unit/customMatchers.test.ts +16 -0
- package/test/unit/version.test.ts +18 -0
- package/test/utils/FakeTransport.ts +47 -0
- package/test/utils/customMatchers.ts +71 -0
- package/test/utils/mock/MockRpcCommunicator.ts +7 -0
- package/test/utils/mock/Router.ts +13 -3
- package/test/utils/mock/Transport.ts +1 -1
- package/test/utils/mock/mockDataEntry.ts +38 -0
- package/test/utils/utils.ts +104 -107
- package/tsconfig.browser.json +2 -1
- package/tsconfig.jest.json +4 -2
- package/tsconfig.node.json +4 -2
- package/dist/src/connection/ConnectivityChecker.d.ts +0 -17
- package/dist/src/connection/ConnectivityChecker.js +0 -208
- package/dist/src/connection/ConnectivityChecker.js.map +0 -1
- package/dist/src/connection/websocket/ServerWebsocket.js +0 -100
- package/dist/src/connection/websocket/ServerWebsocket.js.map +0 -1
- package/dist/src/dht/contact/Remote.js.map +0 -1
- package/dist/src/dht/find/FindRpcLocal.d.ts +0 -14
- package/dist/src/dht/find/FindRpcLocal.js +0 -25
- package/dist/src/dht/find/FindRpcLocal.js.map +0 -1
- package/dist/src/dht/find/FindSession.d.ts +0 -44
- package/dist/src/dht/find/FindSession.js +0 -145
- package/dist/src/dht/find/FindSession.js.map +0 -1
- package/dist/src/dht/find/FindSessionRpcLocal.d.ts +0 -12
- package/dist/src/dht/find/FindSessionRpcLocal.js +0 -17
- package/dist/src/dht/find/FindSessionRpcLocal.js.map +0 -1
- package/dist/src/dht/find/FindSessionRpcRemote.d.ts +0 -6
- package/dist/src/dht/find/FindSessionRpcRemote.js +0 -21
- package/dist/src/dht/find/FindSessionRpcRemote.js.map +0 -1
- package/dist/src/dht/find/Finder.d.ts +0 -49
- package/dist/src/dht/find/Finder.js +0 -184
- package/dist/src/dht/find/Finder.js.map +0 -1
- package/dist/src/dht/routing/FindRpcRemote.d.ts +0 -6
- package/dist/src/dht/routing/FindRpcRemote.js +0 -41
- package/dist/src/dht/routing/FindRpcRemote.js.map +0 -1
- package/dist/src/helpers/PeerID.d.ts +0 -24
- package/dist/src/helpers/PeerID.js +0 -78
- package/dist/src/helpers/PeerID.js.map +0 -1
- package/dist/src/helpers/UUID.d.ts +0 -8
- package/dist/src/helpers/UUID.js +0 -36
- package/dist/src/helpers/UUID.js.map +0 -1
- package/dist/src/helpers/kademliaId.d.ts +0 -1
- package/dist/src/helpers/kademliaId.js +0 -14
- package/dist/src/helpers/kademliaId.js.map +0 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +0 -6
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +0 -23
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +0 -1
- package/src/connection/ConnectivityChecker.ts +0 -199
- package/src/connection/websocket/ServerWebsocket.ts +0 -114
- package/src/dht/find/FindRpcLocal.ts +0 -35
- package/src/dht/find/FindSession.ts +0 -178
- package/src/dht/find/FindSessionRpcLocal.ts +0 -25
- package/src/dht/find/FindSessionRpcRemote.ts +0 -30
- package/src/dht/find/Finder.ts +0 -275
- package/src/dht/routing/FindRpcRemote.ts +0 -40
- package/src/helpers/PeerID.ts +0 -88
- package/src/helpers/UUID.ts +0 -35
- package/src/helpers/kademliaId.ts +0 -8
- package/src/helpers/peerIdFromPeerDescriptor.ts +0 -20
- package/test/integration/MigrateData.test.ts +0 -204
- package/test/unit/Finder.test.ts +0 -110
- package/test/unit/PeerID.test.ts +0 -22
- package/test/unit/UUID.test.ts +0 -55
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WebsocketConnectorRpcLocal = void 0;
|
|
4
|
+
const identifiers_1 = require("../../identifiers");
|
|
4
5
|
class WebsocketConnectorRpcLocal {
|
|
6
|
+
config;
|
|
5
7
|
constructor(config) {
|
|
6
8
|
this.config = config;
|
|
7
9
|
}
|
|
8
10
|
async requestConnection(_request, context) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
setImmediate(() => {
|
|
12
|
-
if (this.config.abortSignal.aborted) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const connection = this.config.connect(senderPeerDescriptor);
|
|
16
|
-
this.config.onNewConnection(connection);
|
|
17
|
-
});
|
|
18
|
-
return { accepted: true };
|
|
11
|
+
if (this.config.abortSignal.aborted) {
|
|
12
|
+
return {};
|
|
19
13
|
}
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
const senderPeerDescriptor = context.incomingSourceDescriptor;
|
|
15
|
+
if (!this.config.hasConnection((0, identifiers_1.getNodeIdFromPeerDescriptor)(senderPeerDescriptor))) {
|
|
16
|
+
const connection = this.config.connect(senderPeerDescriptor);
|
|
17
|
+
this.config.onNewConnection(connection);
|
|
22
18
|
}
|
|
19
|
+
return {};
|
|
23
20
|
}
|
|
24
21
|
}
|
|
25
22
|
exports.WebsocketConnectorRpcLocal = WebsocketConnectorRpcLocal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebsocketConnectorRpcLocal.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketConnectorRpcLocal.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"WebsocketConnectorRpcLocal.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketConnectorRpcLocal.ts"],"names":[],"mappings":";;;AASA,mDAA+D;AAU/D,MAAa,0BAA0B;IAElB,MAAM,CAAkC;IAEzD,YAAY,MAAwC;QAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,QAAoC,EAAE,OAA0B;QAC3F,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO,EAAE,CAAA;QACb,CAAC;QACD,MAAM,oBAAoB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAClF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAA,yCAA2B,EAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;YAC5D,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QAC3C,CAAC;QACD,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AAnBD,gEAmBC"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export declare class WebsocketConnectorRpcRemote extends Remote<IWebsocketConnectorRpcClient> {
|
|
6
|
-
constructor(localPeerDescriptor: PeerDescriptor, remotePeerDescriptor: PeerDescriptor, client: ProtoRpcClient<IWebsocketConnectorRpcClient>);
|
|
7
|
-
requestConnection(ip: string, port: number): Promise<boolean>;
|
|
1
|
+
import { RpcRemote } from '../../dht/contact/RpcRemote';
|
|
2
|
+
import { WebsocketConnectorRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client';
|
|
3
|
+
export declare class WebsocketConnectorRpcRemote extends RpcRemote<WebsocketConnectorRpcClient> {
|
|
4
|
+
requestConnection(): Promise<void>;
|
|
8
5
|
}
|
|
@@ -1,53 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.WebsocketConnectorRpcRemote = void 0;
|
|
27
4
|
const utils_1 = require("@streamr/utils");
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const Remote_1 = require("../../dht/contact/Remote");
|
|
5
|
+
const RpcRemote_1 = require("../../dht/contact/RpcRemote");
|
|
6
|
+
const identifiers_1 = require("../../identifiers");
|
|
31
7
|
const logger = new utils_1.Logger(module);
|
|
32
|
-
class WebsocketConnectorRpcRemote extends
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
async requestConnection(ip, port) {
|
|
37
|
-
logger.trace(`Requesting WebSocket connection from ${(0, peerIdFromPeerDescriptor_1.getNodeIdFromPeerDescriptor)(this.getLocalPeerDescriptor())}`);
|
|
38
|
-
const request = {
|
|
39
|
-
ip,
|
|
40
|
-
port
|
|
41
|
-
};
|
|
8
|
+
class WebsocketConnectorRpcRemote extends RpcRemote_1.RpcRemote {
|
|
9
|
+
async requestConnection() {
|
|
10
|
+
logger.trace(`Requesting WebSocket connection from ${(0, identifiers_1.getNodeIdFromPeerDescriptor)(this.getLocalPeerDescriptor())}`);
|
|
11
|
+
const request = {};
|
|
42
12
|
const options = this.formDhtRpcOptions();
|
|
43
|
-
|
|
44
|
-
const res = await this.getClient().requestConnection(request, options);
|
|
45
|
-
return res.accepted;
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
logger.debug(new Err.WebsocketConnectionRequestRejected('WebsocketConnectionRequest rejected', err).stack);
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
13
|
+
return this.getClient().requestConnection(request, options);
|
|
51
14
|
}
|
|
52
15
|
}
|
|
53
16
|
exports.WebsocketConnectorRpcRemote = WebsocketConnectorRpcRemote;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebsocketConnectorRpcRemote.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketConnectorRpcRemote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WebsocketConnectorRpcRemote.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketConnectorRpcRemote.ts"],"names":[],"mappings":";;;AAGA,0CAAuC;AACvC,2DAAuD;AAEvD,mDAA+D;AAE/D,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAa,2BAA4B,SAAQ,qBAAsC;IAEnF,KAAK,CAAC,iBAAiB;QACnB,MAAM,CAAC,KAAK,CAAC,wCAAwC,IAAA,yCAA2B,EAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE,CAAC,CAAA;QAClH,MAAM,OAAO,GAA+B,EAAE,CAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/D,CAAC;CACJ;AARD,kEAQC"}
|
|
@@ -11,10 +11,7 @@ export declare class WebsocketServer extends EventEmitter<ConnectionSourceEvents
|
|
|
11
11
|
private httpServer?;
|
|
12
12
|
private wsServer?;
|
|
13
13
|
private readonly abortController;
|
|
14
|
-
private readonly
|
|
15
|
-
private readonly tlsCertificate?;
|
|
16
|
-
private readonly enableTls;
|
|
17
|
-
private readonly maxMessageSize;
|
|
14
|
+
private readonly config;
|
|
18
15
|
constructor(config: WebsocketServerConfig);
|
|
19
16
|
start(): Promise<number>;
|
|
20
17
|
private startServer;
|
|
@@ -7,29 +7,30 @@ exports.WebsocketServer = void 0;
|
|
|
7
7
|
const http_1 = require("http");
|
|
8
8
|
const https_1 = require("https");
|
|
9
9
|
const eventemitter3_1 = __importDefault(require("eventemitter3"));
|
|
10
|
-
const
|
|
11
|
-
const
|
|
10
|
+
const ws_1 = __importDefault(require("ws"));
|
|
11
|
+
const WebsocketServerConnection_1 = require("./WebsocketServerConnection");
|
|
12
12
|
const utils_1 = require("@streamr/utils");
|
|
13
13
|
const autocertifier_client_1 = require("@streamr/autocertifier-client");
|
|
14
14
|
const errors_1 = require("../../helpers/errors");
|
|
15
15
|
const lodash_1 = require("lodash");
|
|
16
16
|
const fs_1 = __importDefault(require("fs"));
|
|
17
|
-
const
|
|
17
|
+
const uuid_1 = require("uuid");
|
|
18
|
+
const url_1 = require("url");
|
|
18
19
|
const logger = new utils_1.Logger(module);
|
|
19
20
|
class WebsocketServer extends eventemitter3_1.default {
|
|
21
|
+
httpServer;
|
|
22
|
+
wsServer;
|
|
23
|
+
abortController = new AbortController();
|
|
24
|
+
config;
|
|
20
25
|
constructor(config) {
|
|
21
26
|
super();
|
|
22
|
-
this.
|
|
23
|
-
this.portRange = config.portRange;
|
|
24
|
-
this.enableTls = config.enableTls;
|
|
25
|
-
this.tlsCertificate = config.tlsCertificate;
|
|
26
|
-
this.maxMessageSize = config.maxMessageSize ?? 1048576;
|
|
27
|
+
this.config = config;
|
|
27
28
|
}
|
|
28
29
|
async start() {
|
|
29
|
-
const ports = (0, lodash_1.range)(this.portRange.min, this.portRange.max + 1);
|
|
30
|
+
const ports = (0, lodash_1.range)(this.config.portRange.min, this.config.portRange.max + 1);
|
|
30
31
|
for (const port of ports) {
|
|
31
32
|
try {
|
|
32
|
-
await (0, utils_1.asAbortable)(this.startServer(port, this.enableTls), this.abortController.signal);
|
|
33
|
+
await (0, utils_1.asAbortable)(this.startServer(port, this.config.enableTls), this.abortController.signal);
|
|
33
34
|
return port;
|
|
34
35
|
}
|
|
35
36
|
catch (err) {
|
|
@@ -41,7 +42,7 @@ class WebsocketServer extends eventemitter3_1.default {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
|
-
throw new errors_1.WebsocketServerStartError(`Failed to start WebSocket server on any port in range: ${this.portRange.min}-${this.portRange.min}`);
|
|
45
|
+
throw new errors_1.WebsocketServerStartError(`Failed to start WebSocket server on any port in range: ${this.config.portRange.min}-${this.config.portRange.min}`);
|
|
45
46
|
}
|
|
46
47
|
// If tlsCertificate has been given the tls boolean is ignored
|
|
47
48
|
// TODO: could be simplified?
|
|
@@ -52,17 +53,18 @@ class WebsocketServer extends eventemitter3_1.default {
|
|
|
52
53
|
response.end();
|
|
53
54
|
};
|
|
54
55
|
return new Promise((resolve, reject) => {
|
|
55
|
-
if (this.tlsCertificate) {
|
|
56
|
+
if (this.config.tlsCertificate) {
|
|
56
57
|
this.httpServer = (0, https_1.createServer)({
|
|
57
|
-
key: fs_1.default.readFileSync(this.tlsCertificate.privateKeyFileName),
|
|
58
|
-
cert: fs_1.default.readFileSync(this.tlsCertificate.certFileName)
|
|
58
|
+
key: fs_1.default.readFileSync(this.config.tlsCertificate.privateKeyFileName),
|
|
59
|
+
cert: fs_1.default.readFileSync(this.config.tlsCertificate.certFileName)
|
|
59
60
|
}, requestListener);
|
|
60
61
|
}
|
|
61
62
|
else if (!tls) {
|
|
62
63
|
this.httpServer = (0, http_1.createServer)(requestListener);
|
|
63
64
|
}
|
|
64
65
|
else {
|
|
65
|
-
|
|
66
|
+
// TODO use config option or named constant?
|
|
67
|
+
const certificate = (0, autocertifier_client_1.createSelfSignedCertificate)('streamr-self-signed-' + (0, uuid_1.v4)(), 1000);
|
|
66
68
|
this.httpServer = (0, https_1.createServer)({
|
|
67
69
|
key: certificate.serverKey,
|
|
68
70
|
cert: certificate.serverCert
|
|
@@ -71,17 +73,22 @@ class WebsocketServer extends eventemitter3_1.default {
|
|
|
71
73
|
function originIsAllowed() {
|
|
72
74
|
return true;
|
|
73
75
|
}
|
|
74
|
-
this.wsServer = this.createWsServer(
|
|
75
|
-
this.wsServer.on('
|
|
76
|
+
this.wsServer = this.createWsServer();
|
|
77
|
+
this.wsServer.on('connection', (ws, request) => {
|
|
78
|
+
logger.trace(`New connection from ${request.socket.remoteAddress}`);
|
|
76
79
|
if (!originIsAllowed()) {
|
|
77
80
|
// Make sure we only accept requests from an allowed origin
|
|
78
|
-
|
|
79
|
-
logger.trace('IConnection from origin ' + request.origin + ' rejected.');
|
|
81
|
+
ws.close();
|
|
82
|
+
logger.trace('IConnection from origin ' + request.headers.origin + ' rejected.');
|
|
80
83
|
return;
|
|
81
84
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
this.emit('connected', new WebsocketServerConnection_1.WebsocketServerConnection(ws, (0, url_1.parse)(request.url), request.socket.remoteAddress));
|
|
86
|
+
});
|
|
87
|
+
this.httpServer.on('upgrade', (request, socket, head) => {
|
|
88
|
+
logger.trace('Received upgrade request for ' + request.url);
|
|
89
|
+
this.wsServer.handleUpgrade(request, socket, head, (ws) => {
|
|
90
|
+
this.wsServer.emit('connection', ws, request);
|
|
91
|
+
});
|
|
85
92
|
});
|
|
86
93
|
this.httpServer.once('error', (err) => {
|
|
87
94
|
reject(new errors_1.WebsocketServerStartError('Starting Websocket server failed', err));
|
|
@@ -109,28 +116,30 @@ class WebsocketServer extends eventemitter3_1.default {
|
|
|
109
116
|
this.abortController.abort();
|
|
110
117
|
this.removeAllListeners();
|
|
111
118
|
return new Promise((resolve, _reject) => {
|
|
112
|
-
this.wsServer
|
|
113
|
-
this.
|
|
119
|
+
this.wsServer.close();
|
|
120
|
+
for (const ws of this.wsServer.clients) {
|
|
121
|
+
ws.terminate();
|
|
122
|
+
}
|
|
123
|
+
this.httpServer?.once('close', () => {
|
|
124
|
+
// removeAllListeners is maybe not needed?
|
|
125
|
+
this.httpServer?.removeAllListeners();
|
|
114
126
|
resolve();
|
|
115
127
|
});
|
|
128
|
+
this.httpServer?.close();
|
|
129
|
+
// the close method "Stops the server from accepting new connections and closes all
|
|
130
|
+
// connections connected to this server which are not sending a request or waiting for a
|
|
131
|
+
// response." (https://nodejs.org/api/http.html#serverclosecallback)
|
|
132
|
+
// i.e. we need to call closeAllConnections() to close the rest of the connections
|
|
133
|
+
// (in practice this closes the active websocket connections)
|
|
134
|
+
this.httpServer?.closeAllConnections();
|
|
116
135
|
});
|
|
117
136
|
}
|
|
118
|
-
createWsServer(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
maxReceivedMessageSize: this.maxMessageSize
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
return this.wsServer = new websocket_1.server({
|
|
129
|
-
httpServer,
|
|
130
|
-
autoAcceptConnections: false,
|
|
131
|
-
maxReceivedMessageSize: this.maxMessageSize
|
|
132
|
-
});
|
|
133
|
-
}
|
|
137
|
+
createWsServer() {
|
|
138
|
+
const maxPayload = this.config.maxMessageSize ?? 1048576;
|
|
139
|
+
return this.wsServer = new ws_1.default.Server({
|
|
140
|
+
noServer: true,
|
|
141
|
+
maxPayload
|
|
142
|
+
});
|
|
134
143
|
}
|
|
135
144
|
}
|
|
136
145
|
exports.WebsocketServer = WebsocketServer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebsocketServer.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketServer.ts"],"names":[],"mappings":";;;;;;AAAA,+BAA8G;AAC9G,iCAAgF;AAChF,kEAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"WebsocketServer.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketServer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/connection/websocket/{ServerWebsocket.d.ts → WebsocketServerConnection.d.ts}
RENAMED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import EventEmitter from 'eventemitter3';
|
|
3
3
|
import { IConnection, ConnectionID, ConnectionEvents, ConnectionType } from '../IConnection';
|
|
4
|
-
import
|
|
4
|
+
import WebSocket from 'ws';
|
|
5
5
|
import { Url } from 'url';
|
|
6
|
-
export declare class
|
|
6
|
+
export declare class WebsocketServerConnection extends EventEmitter<ConnectionEvents> implements IConnection {
|
|
7
7
|
readonly connectionId: ConnectionID;
|
|
8
8
|
readonly connectionType = ConnectionType.WEBSOCKET_SERVER;
|
|
9
9
|
readonly resourceURL: Url;
|
|
10
|
+
readonly remoteIpAddress: string;
|
|
10
11
|
private socket?;
|
|
11
12
|
private stopped;
|
|
12
|
-
constructor(socket:
|
|
13
|
+
constructor(socket: WebSocket, resourceURL: Url, remoteAddress: string);
|
|
14
|
+
private onMessage;
|
|
15
|
+
private onClose;
|
|
16
|
+
private onError;
|
|
17
|
+
private stopListening;
|
|
13
18
|
private doDisconnect;
|
|
14
19
|
send(data: Uint8Array): void;
|
|
15
20
|
close(gracefulLeave: boolean): Promise<void>;
|
|
16
21
|
destroy(): void;
|
|
17
|
-
getRemoteAddress(): string;
|
|
18
22
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WebsocketServerConnection = void 0;
|
|
7
|
+
const eventemitter3_1 = __importDefault(require("eventemitter3"));
|
|
8
|
+
const IConnection_1 = require("../IConnection");
|
|
9
|
+
const utils_1 = require("@streamr/utils");
|
|
10
|
+
const ClientWebsocket_1 = require("./ClientWebsocket");
|
|
11
|
+
const Connection_1 = require("../Connection");
|
|
12
|
+
const logger = new utils_1.Logger(module);
|
|
13
|
+
class WebsocketServerConnection extends eventemitter3_1.default {
|
|
14
|
+
connectionId;
|
|
15
|
+
connectionType = IConnection_1.ConnectionType.WEBSOCKET_SERVER;
|
|
16
|
+
resourceURL;
|
|
17
|
+
remoteIpAddress;
|
|
18
|
+
socket;
|
|
19
|
+
stopped = false;
|
|
20
|
+
constructor(socket, resourceURL, remoteAddress) {
|
|
21
|
+
super();
|
|
22
|
+
this.onMessage = this.onMessage.bind(this);
|
|
23
|
+
this.onClose = this.onClose.bind(this);
|
|
24
|
+
this.onError = this.onError.bind(this);
|
|
25
|
+
this.resourceURL = resourceURL;
|
|
26
|
+
this.connectionId = (0, Connection_1.createRandomConnectionId)();
|
|
27
|
+
this.remoteIpAddress = remoteAddress;
|
|
28
|
+
socket.on('message', this.onMessage);
|
|
29
|
+
socket.on('close', this.onClose);
|
|
30
|
+
socket.on('error', this.onError);
|
|
31
|
+
this.socket = socket;
|
|
32
|
+
}
|
|
33
|
+
onMessage(message, isBinary) {
|
|
34
|
+
if (!isBinary) {
|
|
35
|
+
logger.trace('Received string Message');
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
logger.trace('Websocket server received Message');
|
|
39
|
+
this.emit('data', new Uint8Array(message));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
onClose(reasonCode, description) {
|
|
43
|
+
logger.trace('Peer ' + this.remoteIpAddress + ' disconnected.');
|
|
44
|
+
this.doDisconnect(reasonCode, description);
|
|
45
|
+
}
|
|
46
|
+
onError(error) {
|
|
47
|
+
this.emit('error', error.name);
|
|
48
|
+
}
|
|
49
|
+
stopListening() {
|
|
50
|
+
this.socket?.off('message', this.onMessage);
|
|
51
|
+
this.socket?.off('close', this.onClose);
|
|
52
|
+
this.socket?.off('error', this.onError);
|
|
53
|
+
}
|
|
54
|
+
doDisconnect(reasonCode, description) {
|
|
55
|
+
this.stopped = true;
|
|
56
|
+
this.stopListening();
|
|
57
|
+
this.socket = undefined;
|
|
58
|
+
const gracefulLeave = (reasonCode === ClientWebsocket_1.GOING_AWAY) || (reasonCode === ClientWebsocket_1.CUSTOM_GOING_AWAY);
|
|
59
|
+
this.emit('disconnected', gracefulLeave, reasonCode, description);
|
|
60
|
+
}
|
|
61
|
+
send(data) {
|
|
62
|
+
// TODO: no need to check this.socket as it is always defined when stopped is false?
|
|
63
|
+
if (!this.stopped && this.socket) {
|
|
64
|
+
this.socket.send(data, { binary: true });
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
logger.debug('Tried to call send() on a stopped socket');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async close(gracefulLeave) {
|
|
71
|
+
this.emit('disconnected', gracefulLeave, undefined, 'close() called');
|
|
72
|
+
this.removeAllListeners();
|
|
73
|
+
if (!this.stopped) {
|
|
74
|
+
this.socket?.close(gracefulLeave ? ClientWebsocket_1.GOING_AWAY : undefined);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
logger.debug('Tried to close a stopped connection');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// TODO could rename to "closeSilently?"
|
|
81
|
+
destroy() {
|
|
82
|
+
if (!this.stopped) {
|
|
83
|
+
this.removeAllListeners();
|
|
84
|
+
if (this.socket) {
|
|
85
|
+
this.stopListening();
|
|
86
|
+
this.socket.close();
|
|
87
|
+
this.socket = undefined;
|
|
88
|
+
}
|
|
89
|
+
this.stopped = true;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
logger.debug('Tried to destroy() a stopped connection');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.WebsocketServerConnection = WebsocketServerConnection;
|
|
97
|
+
//# sourceMappingURL=WebsocketServerConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebsocketServerConnection.js","sourceRoot":"","sources":["../../../../src/connection/websocket/WebsocketServerConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
+
import { MetricsContext } from '@streamr/utils';
|
|
1
2
|
import { EventEmitter } from 'eventemitter3';
|
|
2
|
-
import { PeerID } from '../helpers/PeerID';
|
|
3
|
-
import { ConnectivityResponse, Message, PeerDescriptor, DataEntry } from '../proto/packages/dht/protos/DhtRpc';
|
|
4
|
-
import { ITransport, TransportEvents } from '../transport/ITransport';
|
|
5
3
|
import { ConnectionManager, PortRange, TlsCertificate } from '../connection/ConnectionManager';
|
|
6
|
-
import {
|
|
4
|
+
import { IceServer } from '../connection/webrtc/WebrtcConnector';
|
|
5
|
+
import { DhtAddress } from '../identifiers';
|
|
7
6
|
import { Any } from '../proto/google/protobuf/any';
|
|
7
|
+
import { DataEntry, Message, PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc';
|
|
8
|
+
import { ITransport, TransportEvents } from '../transport/ITransport';
|
|
9
|
+
import { ServiceID } from '../types/ServiceID';
|
|
8
10
|
import { Router } from './routing/Router';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
+
import { RingIdRaw } from './contact/ringIdentifiers';
|
|
12
|
+
import { RingContacts } from './contact/RingContactList';
|
|
11
13
|
export interface DhtNodeEvents {
|
|
12
|
-
|
|
14
|
+
contactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
|
|
13
15
|
contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
|
|
14
|
-
|
|
15
|
-
newRandomContact: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
|
|
16
|
+
randomContactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
|
|
16
17
|
randomContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
|
|
18
|
+
ringContactAdded: (peerDescriptor: PeerDescriptor, closestPeers: RingContacts) => void;
|
|
19
|
+
ringContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: RingContacts) => void;
|
|
17
20
|
}
|
|
18
21
|
export interface DhtNodeOptions {
|
|
19
|
-
serviceId?:
|
|
22
|
+
serviceId?: ServiceID;
|
|
20
23
|
joinParallelism?: number;
|
|
21
24
|
maxNeighborListSize?: number;
|
|
22
25
|
numberOfNodesPerKBucket?: number;
|
|
@@ -28,13 +31,14 @@ export interface DhtNodeOptions {
|
|
|
28
31
|
storeMaxTtl?: number;
|
|
29
32
|
networkConnectivityTimeout?: number;
|
|
30
33
|
storageRedundancyFactor?: number;
|
|
34
|
+
region?: number;
|
|
31
35
|
transport?: ITransport;
|
|
32
36
|
peerDescriptor?: PeerDescriptor;
|
|
33
37
|
entryPoints?: PeerDescriptor[];
|
|
34
38
|
websocketHost?: string;
|
|
35
39
|
websocketPortRange?: PortRange;
|
|
36
40
|
websocketServerEnableTls?: boolean;
|
|
37
|
-
|
|
41
|
+
nodeId?: DhtAddress;
|
|
38
42
|
rpcRequestTimeout?: number;
|
|
39
43
|
iceServers?: IceServer[];
|
|
40
44
|
webrtcAllowPrivateAddresses?: boolean;
|
|
@@ -50,62 +54,54 @@ export interface DhtNodeOptions {
|
|
|
50
54
|
autoCertifierConfigFile?: string;
|
|
51
55
|
}
|
|
52
56
|
export type Events = TransportEvents & DhtNodeEvents;
|
|
53
|
-
export declare const createPeerDescriptor: (msg?: ConnectivityResponse, peerId?: string) => PeerDescriptor;
|
|
54
57
|
export declare class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
55
58
|
private readonly config;
|
|
56
|
-
private bucket?;
|
|
57
|
-
private connections;
|
|
58
|
-
private neighborList?;
|
|
59
|
-
private randomPeers?;
|
|
60
59
|
private rpcCommunicator?;
|
|
61
60
|
private transport?;
|
|
62
61
|
private localPeerDescriptor?;
|
|
63
62
|
router?: Router;
|
|
64
|
-
private
|
|
63
|
+
private storeManager?;
|
|
65
64
|
private localDataStore;
|
|
66
|
-
private
|
|
65
|
+
private recursiveOperationManager?;
|
|
67
66
|
private peerDiscovery?;
|
|
67
|
+
private peerManager?;
|
|
68
68
|
connectionManager?: ConnectionManager;
|
|
69
|
+
private region?;
|
|
69
70
|
private started;
|
|
70
|
-
private
|
|
71
|
-
private entryPointDisconnectTimeout?;
|
|
71
|
+
private abortController;
|
|
72
72
|
constructor(conf: DhtNodeOptions);
|
|
73
|
+
private validateConfig;
|
|
73
74
|
start(): Promise<void>;
|
|
74
|
-
private
|
|
75
|
-
private onTransportConnected;
|
|
76
|
-
private onTransportDisconnected;
|
|
75
|
+
private initPeerManager;
|
|
77
76
|
private bindRpcLocalMethods;
|
|
78
|
-
private
|
|
79
|
-
private
|
|
77
|
+
private handleMessageFromTransport;
|
|
78
|
+
private handleMessageFromRouter;
|
|
80
79
|
private generatePeerDescriptorCallBack;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
getClosestContacts(maxCount?: number): PeerDescriptor[];
|
|
87
|
-
getNodeId(): PeerID;
|
|
88
|
-
getBucketSize(): number;
|
|
89
|
-
private addNewContact;
|
|
90
|
-
private connectToEntryPoint;
|
|
91
|
-
removeContact(contact: PeerDescriptor): void;
|
|
80
|
+
getClosestContacts(limit?: number): PeerDescriptor[];
|
|
81
|
+
getClosestRingContactsTo(ringIdRaw: RingIdRaw, limit?: number): RingContacts;
|
|
82
|
+
getNodeId(): DhtAddress;
|
|
83
|
+
getNeighborCount(): number;
|
|
84
|
+
removeContact(nodeId: DhtAddress): void;
|
|
92
85
|
send(msg: Message): Promise<void>;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
86
|
+
private getConnectedEntryPoints;
|
|
87
|
+
joinDht(entryPointDescriptors: PeerDescriptor[], doAdditionalDistantPeerDiscovery?: boolean, retry?: boolean): Promise<void>;
|
|
88
|
+
joinRing(): Promise<void>;
|
|
89
|
+
storeDataToDht(key: DhtAddress, data: Any, creator?: DhtAddress): Promise<PeerDescriptor[]>;
|
|
90
|
+
storeDataToDhtViaPeer(key: DhtAddress, data: Any, peer: PeerDescriptor): Promise<PeerDescriptor[]>;
|
|
91
|
+
fetchDataFromDht(key: DhtAddress): Promise<DataEntry[]>;
|
|
92
|
+
fetchDataFromDhtViaPeer(key: DhtAddress, peer: PeerDescriptor): Promise<DataEntry[]>;
|
|
93
|
+
deleteDataFromDht(key: DhtAddress, waitForCompletion: boolean): Promise<void>;
|
|
94
|
+
findClosestNodesFromDht(key: DhtAddress): Promise<PeerDescriptor[]>;
|
|
100
95
|
getTransport(): ITransport;
|
|
101
96
|
getLocalPeerDescriptor(): PeerDescriptor;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
97
|
+
getConnections(): PeerDescriptor[];
|
|
98
|
+
getNeighbors(): PeerDescriptor[];
|
|
99
|
+
getConnectionCount(): number;
|
|
100
|
+
getLocalLockedConnectionCount(): number;
|
|
101
|
+
getRemoteLockedConnectionCount(): number;
|
|
102
|
+
getWeakLockedConnectionCount(): number;
|
|
108
103
|
waitForNetworkConnectivity(): Promise<void>;
|
|
109
104
|
hasJoined(): boolean;
|
|
110
105
|
stop(): Promise<void>;
|
|
106
|
+
private createDhtNodeRpcRemote;
|
|
111
107
|
}
|